diff --git a/src/main/resources/META-INF/coremods.json b/src/main/resources/META-INF/coremods.json index 677dde2cf..715af5a6c 100644 --- a/src/main/resources/META-INF/coremods.json +++ b/src/main/resources/META-INF/coremods.json @@ -1,5 +1,6 @@ { "code_injector": "coremods/code_injector.js", "chest_menus": "coremods/chest_menus.js", - "limb_brush_overclock": "coremods/limb_brush_overclock.js" + "limb_brush_overclock": "coremods/limb_brush_overclock.js", + "iron_chest_menus": "coremods/iron_chest_menus.js" } \ No newline at end of file diff --git a/src/main/resources/coremods/iron_chest_menus.js b/src/main/resources/coremods/iron_chest_menus.js new file mode 100644 index 000000000..192b72f69 --- /dev/null +++ b/src/main/resources/coremods/iron_chest_menus.js @@ -0,0 +1,45 @@ + +var Opcodes = Java.type('org.objectweb.asm.Opcodes') +var MethodNode = Java.type('org.objectweb.asm.tree.MethodNode') +var VarInsnNode = Java.type('org.objectweb.asm.tree.VarInsnNode') +var MethodInsnNode = Java.type('org.objectweb.asm.tree.MethodInsnNode') +var InsnNode = Java.type('org.objectweb.asm.tree.InsnNode') +var TypeInsnNode = Java.type('org.objectweb.asm.tree.TypeInsnNode') + + +var isOwnPatches = [ + 'com.progwml6.ironchest.common.block.regular.entity.AbstractIronChestBlockEntity$1', +] + +function initializeCoreMod() { + var result = {} + + for (i in isOwnPatches) { + var clazz = isOwnPatches[i] + + result[clazz] = { + 'target': { + 'type': 'METHOD', + 'class': clazz, + 'methodName': 'isOwnContainer', + 'methodDesc': '(Lnet/minecraft/world/entity/player/Player;)Z' + }, + 'transformer': function(node) { + for (var i = 0; i < node.instructions.size(); i++) { + var instr = node.instructions.get(i) + + if ((instr.getOpcode() == Opcodes.INSTANCEOF || instr.getOpcode() == Opcodes.CHECKCAST) && instr.desc == 'com/progwml6/ironchest/common/inventory/IronChestMenu') { + instr.desc = 'ru/dbotthepony/mc/otm/compat/ironchest/MatteryIronChestMenu' + } else if (instr.getOpcode() == Opcodes.INVOKEVIRTUAL && instr.owner == 'com/progwml6/ironchest/common/inventory/IronChestMenu' && instr.name == 'getContainer') { + instr.owner = 'ru/dbotthepony/mc/otm/compat/ironchest/MatteryIronChestMenu' + instr.name = 'getContainer' + } + } + + return node + } + } + } + + return result +}