mirror of
https://github.com/GTNewHorizons/AE2FluidCraft-Rework.git
synced 2026-11-11 15:57:55 +00:00
more sanity asm
This commit is contained in:
1 parent
8cafbceed7
commit
989cd173fb
9 files changed
+87
-53
No files matched your search
@@ -552,6 +552,7 @@ public class GuiFluidCraftConfirm extends AEBaseGui {
|
||||
lineList.add(GuiText.HoldShiftForTooltip.getLocal());
|
||||
}
|
||||
}
|
||||
|
||||
public ItemStack getHoveredStack() {
|
||||
return hoveredStack;
|
||||
}
|
||||
|
||||
@@ -5,9 +5,6 @@ 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 {
|
||||
|
||||
@@ -52,18 +49,17 @@ 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());
|
||||
classNode.accept(getClassMapper(writer,classNode));
|
||||
reader.accept(getClassMapper(writer), 0);
|
||||
return writer.toByteArray();
|
||||
}
|
||||
|
||||
protected int getWriteFlags() {
|
||||
return COMPUTE_FRAMES|COMPUTE_MAXS;
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected abstract ClassVisitor getClassMapper(ClassVisitor downstream, ClassNode classNode);
|
||||
protected abstract ClassVisitor getClassMapper(ClassVisitor downstream);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -174,22 +174,16 @@ public class CoreModHooks {
|
||||
}
|
||||
|
||||
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();
|
||||
if (gui instanceof GuiFluidCraftConfirm) {
|
||||
return ((GuiFluidCraftConfirm) gui).getHoveredStack();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static boolean shouldShowTooltip(GuiContainer gui) {
|
||||
if (gui instanceof GuiFluidCraftConfirm)
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
+1
-2
@@ -4,7 +4,6 @@ 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 {
|
||||
|
||||
@@ -15,7 +14,7 @@ public class ContainerInterfaceTerminalTransformer extends FCClassTransformer.Cl
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ClassVisitor getClassMapper(ClassVisitor downstream, ClassNode classNode) {
|
||||
protected ClassVisitor getClassMapper(ClassVisitor downstream) {
|
||||
return new TransformContainerInterfaceTerminal(Opcodes.ASM5, downstream);
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ 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 {
|
||||
|
||||
@@ -16,7 +15,7 @@ public class CraftingCpuTransformer extends FCClassTransformer.ClassMapper {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ClassVisitor getClassMapper(ClassVisitor downstream, ClassNode classNode) {
|
||||
protected ClassVisitor getClassMapper(ClassVisitor downstream) {
|
||||
return new TransformCraftingCPUCluster(Opcodes.ASM5, downstream);
|
||||
}
|
||||
|
||||
|
||||
+1
-2
@@ -5,7 +5,6 @@ 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 {
|
||||
|
||||
@@ -16,7 +15,7 @@ public class CraftingTreeNodeTransformer extends FCClassTransformer.ClassMapper
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ClassVisitor getClassMapper(ClassVisitor downstream, ClassNode classNode) {
|
||||
protected ClassVisitor getClassMapper(ClassVisitor downstream) {
|
||||
return new TransformCraftingTreeNode(Opcodes.ASM5, downstream);
|
||||
}
|
||||
|
||||
|
||||
+1
-2
@@ -4,7 +4,6 @@ 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 {
|
||||
|
||||
@@ -15,7 +14,7 @@ public class DualityInterfaceTransformer extends FCClassTransformer.ClassMapper
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ClassVisitor getClassMapper(ClassVisitor downstream, ClassNode classNode) {
|
||||
protected ClassVisitor getClassMapper(ClassVisitor downstream) {
|
||||
return new TransformDualityInterface(Opcodes.ASM5, downstream);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ 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 {
|
||||
|
||||
@@ -15,7 +14,7 @@ public class GuiCraftingTransformer extends FCClassTransformer.ClassMapper {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ClassVisitor getClassMapper(ClassVisitor downstream, ClassNode classNode) {
|
||||
protected ClassVisitor getClassMapper(ClassVisitor downstream) {
|
||||
return new TransformGuiCrafting(Opcodes.ASM5, downstream);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,45 +1,93 @@
|
||||
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 class NEITransfermer extends FCClassTransformer.ClassMapper {
|
||||
|
||||
public static final NEITransfermer INSTANCE = new NEITransfermer();
|
||||
|
||||
private NEITransfermer(){}
|
||||
private NEITransfermer() {
|
||||
// NO-OP
|
||||
}
|
||||
|
||||
@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);
|
||||
protected ClassVisitor getClassMapper(ClassVisitor downstream) {
|
||||
return new 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);
|
||||
switch (name) {
|
||||
case "getStackUnderMouse":
|
||||
return new TransformStackUnderMouse(api, super.visitMethod(access, name, desc, signature, exceptions));
|
||||
case "shouldShowTooltip":
|
||||
return new TransformShowTooltip(api, super.visitMethod(access, name, desc, signature, exceptions));
|
||||
default:
|
||||
return super.visitMethod(access, name, desc, signature, exceptions);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class TransformStackUnderMouse extends MethodVisitor {
|
||||
|
||||
TransformStackUnderMouse(int api, MethodVisitor mv) {
|
||||
super(api, mv);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitInsn(int opcode) {
|
||||
if (opcode == Opcodes.ACONST_NULL) {
|
||||
super.visitVarInsn(Opcodes.ALOAD, 1);
|
||||
super.visitVarInsn(Opcodes.ILOAD, 2);
|
||||
super.visitVarInsn(Opcodes.ILOAD, 3);
|
||||
super.visitMethodInsn(Opcodes.INVOKESTATIC,
|
||||
"com/glodblock/github/coremod/hooker/CoreModHooks",
|
||||
"getStackUnderMouse",
|
||||
"(Lnet/minecraft/client/gui/inventory/GuiContainer;II)Lnet/minecraft/item/ItemStack;",
|
||||
false
|
||||
);
|
||||
return;
|
||||
}
|
||||
super.visitInsn(opcode);
|
||||
}
|
||||
}
|
||||
|
||||
private static class TransformShowTooltip extends MethodVisitor {
|
||||
|
||||
int const_1 = 0;
|
||||
|
||||
TransformShowTooltip(int api, MethodVisitor mv) {
|
||||
super(api, mv);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitInsn(int opcode) {
|
||||
if (opcode == Opcodes.ICONST_1 && const_1 == 2) {
|
||||
super.visitVarInsn(Opcodes.ALOAD, 1);
|
||||
super.visitMethodInsn(Opcodes.INVOKESTATIC,
|
||||
"com/glodblock/github/coremod/hooker/CoreModHooks",
|
||||
"shouldShowTooltip",
|
||||
"(Lnet/minecraft/client/gui/inventory/GuiContainer;)Z",
|
||||
false
|
||||
);
|
||||
const_1 ++;
|
||||
return;
|
||||
}
|
||||
if (opcode == Opcodes.ICONST_1) {
|
||||
const_1 ++;
|
||||
}
|
||||
super.visitInsn(opcode);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user