1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- 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));
- }
|