var transformerName = "Dedicated Server Transformer"; var ASMAPI = Java.type('net.minecraftforge.coremod.api.ASMAPI'); var Opcodes = Java.type('org.objectweb.asm.Opcodes'); var VarInsnNode = Java.type("org.objectweb.asm.tree.VarInsnNode"); var MethodInsnNode = Java.type("org.objectweb.asm.tree.MethodInsnNode"); var LineNumberNode = Java.type("org.objectweb.asm.tree.LineNumberNode"); var FieldInsnNode = Java.type("org.objectweb.asm.tree.FieldInsnNode"); var InsnNode = Java.type("org.objectweb.asm.tree.InsnNode"); function initializeCoreMod() { return { transformerName: { 'target': { 'type': 'CLASS', 'name': 'net.minecraft.block.Block' }, 'transformer': function (classNode) { var methods = classNode.methods; var targetMethodNameA = ASMAPI.mapMethod("func_220070_a"); // getDrops var targetMethodNameB = ASMAPI.mapMethod("func_220077_a"); // getDrops var targetMethodDescA = "(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/server/ServerWorld;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/tileentity/TileEntity;)Ljava/util/List;"; var targetMethodDescB = "(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/server/ServerWorld;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/tileentity/TileEntity;Lnet/minecraft/entity/Entity;Lnet/minecraft/item/ItemStack;)Ljava/util/List;"; for (var i in methods) { var method = methods[i]; if (method.name.equals(targetMethodNameA) && method.desc.equals(targetMethodDescA)) { transformA(method); } if (method.name.equals(targetMethodNameB) && method.desc.equals(targetMethodDescB)) { transformB(method); } } return classNode; } } }; } function transformA(method) { var instrList = method.instructions; instrList.clear(); instrList.add(new VarInsnNode(Opcodes.ALOAD, 0)); instrList.add(new VarInsnNode(Opcodes.ALOAD, 1)); instrList.add(new VarInsnNode(Opcodes.ALOAD, 2)); instrList.add(new VarInsnNode(Opcodes.ALOAD, 3)); instrList.add(new MethodInsnNode(Opcodes.INVOKESTATIC, "me/kcm/Hooks", "getDropsA", "(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/server/ServerWorld;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/tileentity/TileEntity;)Ljava/util/List;", false)); instrList.add(new InsnNode(Opcodes.ARETURN)); } function transformB(method) { var instrList = method.instructions; instrList.clear(); instrList.add(new VarInsnNode(Opcodes.ALOAD, 0)); instrList.add(new VarInsnNode(Opcodes.ALOAD, 1)); instrList.add(new VarInsnNode(Opcodes.ALOAD, 2)); instrList.add(new VarInsnNode(Opcodes.ALOAD, 3)); instrList.add(new VarInsnNode(Opcodes.ALOAD, 4)); instrList.add(new VarInsnNode(Opcodes.ALOAD, 5)); instrList.add(new MethodInsnNode(Opcodes.INVOKESTATIC, "me/kcm/Hooks", "getDropsB", "(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/server/ServerWorld;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/tileentity/TileEntity;Lnet/minecraft/entity/Entity;Lnet/minecraft/item/ItemStack;)Ljava/util/List;", false)); instrList.add(new InsnNode(Opcodes.ARETURN)); }