diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFluidCraftConfirm.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidCraftConfirm.java index 465b915c..1b0632d9 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidCraftConfirm.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidCraftConfirm.java @@ -48,6 +48,7 @@ public class GuiFluidCraftConfirm extends AEBaseGui { private GuiButton start; private GuiButton selectCPU; private int tooltip = -1; + private ItemStack hoveredStack; public GuiFluidCraftConfirm(final InventoryPlayer inventoryPlayer, final ITerminalHost te ) { @@ -202,7 +203,7 @@ public class GuiFluidCraftConfirm extends AEBaseGui { final List lineList = new LinkedList(); int toolPosX = 0; int toolPosY = 0; - + hoveredStack = null; final int offY = 23; for( int z = viewStart; z < Math.min( viewEnd, this.visual.size() ); z++ ) @@ -324,6 +325,7 @@ public class GuiFluidCraftConfirm extends AEBaseGui { toolPosX = x * ( 1 + sectionLength ) + xo + sectionLength - 8; toolPosY = y * offY + yo; + hoveredStack = is; } this.drawItem( posX, posY, is ); @@ -550,5 +552,7 @@ public class GuiFluidCraftConfirm extends AEBaseGui { lineList.add(GuiText.HoldShiftForTooltip.getLocal()); } } - + public ItemStack getHoveredStack() { + return hoveredStack; + } } diff --git a/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java b/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java index 413d8625..9ceb9c2c 100644 --- a/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java +++ b/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java @@ -5,6 +5,9 @@ import net.minecraft.launchwrapper.IClassTransformer; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.tree.ClassNode; +import static org.objectweb.asm.ClassWriter.COMPUTE_FRAMES; +import static org.objectweb.asm.ClassWriter.COMPUTE_MAXS; public class FCClassTransformer implements IClassTransformer { @@ -29,6 +32,9 @@ public class FCClassTransformer implements IClassTransformer { case "net.p455w0rd.wirelesscraftingterminal.client.gui.GuiCraftConfirm": tform = GuiCraftingTransformer.INSTANCE; break; + case "appeng.integration.modules.NEI": + tform = NEITransfermer.INSTANCE; + break; default: return code; } @@ -46,17 +52,18 @@ public class FCClassTransformer implements IClassTransformer { @Override public byte[] transformClass(byte[] code) { + ClassNode classNode = new ClassNode(); ClassReader reader = new ClassReader(code); + reader.accept(classNode, 0); ClassWriter writer = new ClassWriter(reader, getWriteFlags()); - reader.accept(getClassMapper(writer), 0); + classNode.accept(getClassMapper(writer,classNode)); return writer.toByteArray(); } protected int getWriteFlags() { - return 0; + return COMPUTE_FRAMES|COMPUTE_MAXS; } - protected abstract ClassVisitor getClassMapper(ClassVisitor downstream); - + protected abstract ClassVisitor getClassMapper(ClassVisitor downstream, ClassNode classNode); } } diff --git a/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java b/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java index 380f8bb2..df89cc46 100644 --- a/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java +++ b/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java @@ -9,12 +9,15 @@ import appeng.api.networking.storage.IStorageGrid; import appeng.api.storage.IMEInventory; import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEItemStack; +import appeng.client.gui.implementations.GuiCraftConfirm; +import appeng.client.gui.implementations.GuiCraftingCPU; import appeng.crafting.MECraftingInventory; import appeng.me.MachineSet; import appeng.me.cluster.implementations.CraftingCPUCluster; import appeng.parts.misc.PartInterface; import appeng.tile.misc.TileInterface; import appeng.util.InventoryAdaptor; +import com.glodblock.github.client.gui.GuiFluidCraftConfirm; import com.glodblock.github.common.item.ItemFluidDrop; import com.glodblock.github.common.item.ItemFluidPacket; import com.glodblock.github.common.parts.PartFluidInterface; @@ -26,6 +29,7 @@ import com.glodblock.github.util.Ae2Reflect; import com.glodblock.github.util.SetBackedMachineSet; import com.glodblock.github.util.Util; import com.google.common.collect.Sets; +import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -169,4 +173,24 @@ public class CoreModHooks { Ae2Reflect.markCPUDirty(instance); } + public static ItemStack getStackUnderMouse(GuiContainer gui, int mousex, int mousey) { + if (gui instanceof GuiCraftConfirm){ + return ((GuiCraftConfirm)gui).getHoveredStack(); + } else if (gui instanceof GuiFluidCraftConfirm) { + return ((GuiFluidCraftConfirm)gui).getHoveredStack(); + } else if (gui instanceof GuiCraftingCPU){ + return ((GuiCraftingCPU)gui).getHoveredStack(); + } + return null; + } + public static boolean shouldShowTooltip(GuiContainer gui) { + if (gui instanceof GuiFluidCraftConfirm) + return ((GuiFluidCraftConfirm)gui).getHoveredStack() == null; + if (gui instanceof GuiCraftConfirm) + return ((GuiCraftConfirm)gui).getHoveredStack() == null; + if (gui instanceof GuiCraftingCPU) + return ((GuiCraftingCPU)gui).getHoveredStack() == null; + return true; + } + } diff --git a/src/main/java/com/glodblock/github/coremod/transform/ContainerInterfaceTerminalTransformer.java b/src/main/java/com/glodblock/github/coremod/transform/ContainerInterfaceTerminalTransformer.java index a2cfd941..6ba6891e 100644 --- a/src/main/java/com/glodblock/github/coremod/transform/ContainerInterfaceTerminalTransformer.java +++ b/src/main/java/com/glodblock/github/coremod/transform/ContainerInterfaceTerminalTransformer.java @@ -4,6 +4,7 @@ import com.glodblock.github.coremod.FCClassTransformer; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.ClassNode; public class ContainerInterfaceTerminalTransformer extends FCClassTransformer.ClassMapper { @@ -14,7 +15,7 @@ public class ContainerInterfaceTerminalTransformer extends FCClassTransformer.Cl } @Override - protected ClassVisitor getClassMapper(ClassVisitor downstream) { + protected ClassVisitor getClassMapper(ClassVisitor downstream, ClassNode classNode) { return new TransformContainerInterfaceTerminal(Opcodes.ASM5, downstream); } diff --git a/src/main/java/com/glodblock/github/coremod/transform/CraftingCpuTransformer.java b/src/main/java/com/glodblock/github/coremod/transform/CraftingCpuTransformer.java index 21c8c25b..706ef57b 100644 --- a/src/main/java/com/glodblock/github/coremod/transform/CraftingCpuTransformer.java +++ b/src/main/java/com/glodblock/github/coremod/transform/CraftingCpuTransformer.java @@ -5,6 +5,7 @@ import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.Label; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.ClassNode; public class CraftingCpuTransformer extends FCClassTransformer.ClassMapper { @@ -15,7 +16,7 @@ public class CraftingCpuTransformer extends FCClassTransformer.ClassMapper { } @Override - protected ClassVisitor getClassMapper(ClassVisitor downstream) { + protected ClassVisitor getClassMapper(ClassVisitor downstream, ClassNode classNode) { return new TransformCraftingCPUCluster(Opcodes.ASM5, downstream); } diff --git a/src/main/java/com/glodblock/github/coremod/transform/CraftingTreeNodeTransformer.java b/src/main/java/com/glodblock/github/coremod/transform/CraftingTreeNodeTransformer.java index 901423af..7a0e9ab4 100644 --- a/src/main/java/com/glodblock/github/coremod/transform/CraftingTreeNodeTransformer.java +++ b/src/main/java/com/glodblock/github/coremod/transform/CraftingTreeNodeTransformer.java @@ -5,6 +5,7 @@ import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.Label; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.ClassNode; public class CraftingTreeNodeTransformer extends FCClassTransformer.ClassMapper { @@ -15,7 +16,7 @@ public class CraftingTreeNodeTransformer extends FCClassTransformer.ClassMapper } @Override - protected ClassVisitor getClassMapper(ClassVisitor downstream) { + protected ClassVisitor getClassMapper(ClassVisitor downstream, ClassNode classNode) { return new TransformCraftingTreeNode(Opcodes.ASM5, downstream); } diff --git a/src/main/java/com/glodblock/github/coremod/transform/DualityInterfaceTransformer.java b/src/main/java/com/glodblock/github/coremod/transform/DualityInterfaceTransformer.java index 00cf5131..c4e4cb91 100644 --- a/src/main/java/com/glodblock/github/coremod/transform/DualityInterfaceTransformer.java +++ b/src/main/java/com/glodblock/github/coremod/transform/DualityInterfaceTransformer.java @@ -4,6 +4,7 @@ import com.glodblock.github.coremod.FCClassTransformer; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.ClassNode; public class DualityInterfaceTransformer extends FCClassTransformer.ClassMapper { @@ -14,7 +15,7 @@ public class DualityInterfaceTransformer extends FCClassTransformer.ClassMapper } @Override - protected ClassVisitor getClassMapper(ClassVisitor downstream) { + protected ClassVisitor getClassMapper(ClassVisitor downstream, ClassNode classNode) { return new TransformDualityInterface(Opcodes.ASM5, downstream); } diff --git a/src/main/java/com/glodblock/github/coremod/transform/GuiCraftingTransformer.java b/src/main/java/com/glodblock/github/coremod/transform/GuiCraftingTransformer.java index 5fb3344d..9ec22c49 100644 --- a/src/main/java/com/glodblock/github/coremod/transform/GuiCraftingTransformer.java +++ b/src/main/java/com/glodblock/github/coremod/transform/GuiCraftingTransformer.java @@ -4,6 +4,7 @@ import com.glodblock.github.coremod.FCClassTransformer; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.ClassNode; public class GuiCraftingTransformer extends FCClassTransformer.ClassMapper { @@ -14,7 +15,7 @@ public class GuiCraftingTransformer extends FCClassTransformer.ClassMapper { } @Override - protected ClassVisitor getClassMapper(ClassVisitor downstream) { + protected ClassVisitor getClassMapper(ClassVisitor downstream, ClassNode classNode) { return new TransformGuiCrafting(Opcodes.ASM5, downstream); } diff --git a/src/main/java/com/glodblock/github/coremod/transform/NEITransfermer.java b/src/main/java/com/glodblock/github/coremod/transform/NEITransfermer.java new file mode 100644 index 00000000..fabbe3c7 --- /dev/null +++ b/src/main/java/com/glodblock/github/coremod/transform/NEITransfermer.java @@ -0,0 +1,45 @@ +package com.glodblock.github.coremod.transform; +import com.glodblock.github.coremod.FCClassTransformer; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.*; +import static org.objectweb.asm.Opcodes.*; + +public class NEITransfermer extends FCClassTransformer.ClassMapper{ + + public static final NEITransfermer INSTANCE = new NEITransfermer(); + + private NEITransfermer(){} + + @Override + protected ClassVisitor getClassMapper(ClassVisitor downstream, ClassNode classNode) { + for (MethodNode method : classNode.methods){ + if(method.name.equals("getStackUnderMouse")){ + InsnList toInsert = new InsnList(); + toInsert.add(new VarInsnNode(ALOAD, 1)); + toInsert.add(new VarInsnNode(ILOAD, 2)); + toInsert.add(new VarInsnNode(ILOAD, 3)); + toInsert.add(new MethodInsnNode(INVOKESTATIC, "com/glodblock/github/coremod/hooker/CoreModHooks", "getStackUnderMouse", "(Lnet/minecraft/client/gui/inventory/GuiContainer;II)Lnet/minecraft/item/ItemStack;", false)); + toInsert.add(new InsnNode(ARETURN)); + method.instructions = toInsert; + }else if(method.name.equals("shouldShowTooltip")){ + InsnList toInsert = new InsnList(); + toInsert.add(new VarInsnNode(ALOAD, 1)); + toInsert.add(new MethodInsnNode(INVOKESTATIC, "com/glodblock/github/coremod/hooker/CoreModHooks", "shouldShowTooltip", "(Lnet/minecraft/client/gui/inventory/GuiContainer;)Z", false)); + toInsert.add(new InsnNode(IRETURN)); + method.instructions = toInsert; + } + } + return new NEITransfermer.TransformNEI(Opcodes.ASM5, downstream); + } + private static class TransformNEI extends ClassVisitor { + TransformNEI(int api, ClassVisitor cv) { + super(api, cv); + } + @Override + public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { + return super.visitMethod(access, name, desc, signature, exceptions); + } + } +}