craft.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. var transformerName = "Dedicated Server Transformer";
  2. var ASMAPI = Java.type('net.minecraftforge.coremod.api.ASMAPI');
  3. var Opcodes = Java.type('org.objectweb.asm.Opcodes');
  4. var VarInsnNode = Java.type("org.objectweb.asm.tree.VarInsnNode");
  5. var MethodInsnNode = Java.type("org.objectweb.asm.tree.MethodInsnNode");
  6. var LineNumberNode = Java.type("org.objectweb.asm.tree.LineNumberNode");
  7. var FieldInsnNode = Java.type("org.objectweb.asm.tree.FieldInsnNode");
  8. var InsnNode = Java.type("org.objectweb.asm.tree.InsnNode");
  9. function initializeCoreMod() {
  10. return {
  11. transformerName: {
  12. 'target': {
  13. 'type': 'CLASS',
  14. 'name': 'net.minecraft.inventory.container.WorkbenchContainer'
  15. },
  16. 'transformer': function (classNode) {
  17. var methods = classNode.methods;
  18. var targetMethodName = ASMAPI.mapMethod("func_217066_a"); // no name set yet
  19. for (var i in methods) {
  20. var method = methods[i];
  21. if (method.name.equals(targetMethodName)) {
  22. transform(method);
  23. break;
  24. }
  25. }
  26. return classNode;
  27. }
  28. }
  29. };
  30. }
  31. function transform(method) {
  32. var instrList = method.instructions;
  33. instrList.clear();
  34. instrList.add(new VarInsnNode(Opcodes.ILOAD, 0));
  35. instrList.add(new VarInsnNode(Opcodes.ALOAD, 1));
  36. instrList.add(new VarInsnNode(Opcodes.ALOAD, 2));
  37. instrList.add(new VarInsnNode(Opcodes.ALOAD, 3));
  38. instrList.add(new VarInsnNode(Opcodes.ALOAD, 4));
  39. instrList.add(new MethodInsnNode(Opcodes.INVOKESTATIC, "me/kcm/Hooks",
  40. "onCraft",
  41. "(ILnet/minecraft/world/World;Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/inventory/CraftingInventory;Lnet/minecraft/inventory/CraftResultInventory;)V",
  42. false));
  43. instrList.add(new InsnNode(Opcodes.RETURN));
  44. }