diff --git a/examplemods/guns.js b/examplemods/guns.js new file mode 100644 index 0000000..2b899a5 --- /dev/null +++ b/examplemods/guns.js @@ -0,0 +1,113 @@ +(()=>{ + const itemTexture = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADySURBVFhH7ZQxDoMwDEVNr4G6VmJC6mk4Itdh7VpxjsBPDaKVCLZxypInIccg5zs/CVQoKAj8uHLjeETouo6HvlQcU3yJ932PIKkTceRAFH8NA6dE3IzbVogdQBOPtuVXfk5IJ8jWhKY4SxPaQvcmLEWuTUj/A1sqiEEcTQBENDWjvh3mvZtxccLiwMqvE0DrhNUBCCy1KSdAUsPiwFYcpM5ENrYWh3tdI4cT4dk0MSKPXzMSRSC+PMi14mcO4e7esv2iJqyHEGDVPCR6jyMC5luERXOfuoY7QFi8MKsDe6tXk8OBv7Ge/E96DZeKFwoOEE1wUX7TFh5zsgAAAABJRU5ErkJggg=="; + ModAPI.meta.title("guns"); + ModAPI.meta.version("v1.0"); + ModAPI.meta.icon(itemTexture); + ModAPI.meta.description("Requires AsyncSink."); + + function PistolItem() { + var creativeMiscTab = ModAPI.reflect.getClassById("net.minecraft.creativetab.CreativeTabs").staticVariables.tabMisc; + var itemClass = ModAPI.reflect.getClassById("net.minecraft.item.Item"); + var itemSuper = ModAPI.reflect.getSuper(itemClass, (x) => x.length === 1); + var nmi_ItemPistol = function nmi_ItemPistol() { + itemSuper(this); //Use super function to get block properties on this class. + this.$setCreativeTab(creativeMiscTab); + } + function entityraycast(player, world, range){ + var eyePosition = player.getPositionEyes(1.0); + var lookVector = player.getLook(1.0); + var targetPosition = eyePosition.addVector(lookVector.xCoord * range, lookVector.yCoord * range, lookVector.zCoord * range); + var entities = world.getEntitiesWithinAABBExcludingEntity( + player, + player.getEntityBoundingBox().expand(range, range, range) + ); + var closestEntity = null; + var closestDistance = range; + + // Iterate through all entities to find the one the player is looking at + for (var i = 0; i < entities.length; i++) { + var entity = entities[i]; + // Check if the entity's bounding box intersects with the player's ray + var entityBB = entity.getEntityBoundingBox().expand(0.3, 0.3, 0.3); + var intercept = entityBB.calculateIntercept(eyePosition, targetPosition); + + if (intercept != null) { + var distance = eyePosition.distanceTo(intercept.hitVec); + if (distance < closestDistance) { + closestDistance = distance; + closestEntity = entity; + } + } + } + + var rayTraceResult = closestEntity + if (rayTraceResult != null){ + return rayTraceResult; + } else{ + return null; + } + } + ModAPI.reflect.prototypeStack(itemClass, nmi_ItemPistol); + nmi_ItemPistol.prototype.$onItemRightClick = function ($itemstack, $world, $player) { + var world = ModAPI.util.wrap($world); + var entityplayer = ModAPI.util.wrap($player); + var shotentity = entityraycast(entityplayer, world, 10.0) + if (shotentity != null){ + var entityName = shotentity.getName(); + entityplayer.sendMessage(ModAPI.reflect.getClassById("net.minecraft.util.ChatComponentText").constructors[0](ModAPI.util.str(entityName))) + console.log(entityName) + world.playSoundAtEntity(entityplayer, "tile.piston.out", 1.0, 1.8); + } + return $itemstack; + } + + function internal_reg() { + var pistol_item = (new nmi_ItemPistol()).$setUnlocalizedName( + ModAPI.util.str("pistol") + ); + itemClass.staticMethods.registerItem0.method(ModAPI.keygen.item("pistol"), ModAPI.util.str("pistol"), pistol_item); + ModAPI.items["pistol"] = pistol_item; + + return pistol_item; + } + + if (ModAPI.items) { + return internal_reg(); + } else { + ModAPI.addEventListener("bootstrap", internal_reg); + } + } + + ModAPI.dedicatedServer.appendCode(PistolItem); + var pistol_item = PistolItem(); + + ModAPI.addEventListener("lib:asyncsink", async () => { + ModAPI.addEventListener("custom:asyncsink_reloaded", ()=>{ + ModAPI.mc.renderItem.registerItem(pistol_item, ModAPI.util.str("pistol")); + }); + AsyncSink.L10N.set("item.pistol.name", "Pistol"); + AsyncSink.setFile("resourcepacks/AsyncSinkLib/assets/minecraft/models/item/pistol.json", JSON.stringify( + { + "parent": "builtin/generated", + "textures": { + "layer0": "items/pistol" + }, + "display": { + "thirdperson": { + "rotation": [ 5, 80, -45 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } + } + )); + AsyncSink.setFile("resourcepacks/AsyncSinkLib/assets/minecraft/textures/items/pistol.png", await (await fetch( + itemTexture + )).arrayBuffer()); + }); +})(); \ No newline at end of file