From 72667593f10ef41da227b9f3629499338b43c719 Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Sat, 21 May 2022 20:55:42 +0800 Subject: [PATCH] fix my horrible shit code --- .../gui/GuiBaseFluidPatternTerminal.java | 5 +- .../gui/GuiBaseFluidPatternTerminalEx.java | 5 +- .../github/client/gui/GuiFCBaseMonitor.java | 11 +- .../client/gui/GuiFluidPatternEncoder.java | 3 +- .../client/gui/GuiFluidPatternTerminal.java | 7 +- ...GuiFluidPatternTerminalCraftingStatus.java | 7 +- .../client/gui/GuiFluidPatternTerminalEx.java | 5 +- .../inventory/gui/MouseRegionManager.java | 9 +- .../com/glodblock/github/util/Ae2Reflect.java | 109 ++-------------- .../github/util/Ae2ReflectClient.java | 118 ++++++++++++++++++ 10 files changed, 156 insertions(+), 123 deletions(-) create mode 100644 src/main/java/com/glodblock/github/util/Ae2ReflectClient.java diff --git a/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminal.java b/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminal.java index e6277cf3..9cd7b5d7 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminal.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminal.java @@ -12,6 +12,7 @@ import com.glodblock.github.FluidCraft; import com.glodblock.github.client.gui.container.FCBasePartContainer; import com.glodblock.github.network.CPacketFluidPatternTermBtns; import com.glodblock.github.util.Ae2Reflect; +import com.glodblock.github.util.Ae2ReflectClient; import com.glodblock.github.util.ModAndClassUtil; import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.InventoryPlayer; @@ -41,7 +42,7 @@ public class GuiBaseFluidPatternTerminal extends GuiFCBaseMonitor { { super( inventoryPlayer, te, new FCBasePartContainer( inventoryPlayer, te ) ); this.container = (FCBasePartContainer) this.inventorySlots; - Ae2Reflect.setReservedSpace(this, 81); + Ae2ReflectClient.setReservedSpace(this, 81); } @Override @@ -134,7 +135,7 @@ public class GuiBaseFluidPatternTerminal extends GuiFCBaseMonitor { } super.drawFG( offsetX, offsetY, mouseX, mouseY ); - this.fontRendererObj.drawString( GuiText.PatternTerminal.getLocal(), 8, this.ySize - 96 + 2 - Ae2Reflect.getReservedSpace(this), 4210752 ); + this.fontRendererObj.drawString( GuiText.PatternTerminal.getLocal(), 8, this.ySize - 96 + 2 - Ae2ReflectClient.getReservedSpace(this), 4210752 ); } @Override diff --git a/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java b/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java index a79600d5..5f5ccd3c 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java @@ -11,6 +11,7 @@ import com.glodblock.github.FluidCraft; import com.glodblock.github.client.gui.container.FCBasePartContainerEx; import com.glodblock.github.network.CPacketFluidPatternTermBtns; import com.glodblock.github.util.Ae2Reflect; +import com.glodblock.github.util.Ae2ReflectClient; import com.glodblock.github.util.ModAndClassUtil; import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.InventoryPlayer; @@ -36,7 +37,7 @@ public class GuiBaseFluidPatternTerminalEx extends GuiFCBaseMonitor { { super( inventoryPlayer, te, new FCBasePartContainerEx( inventoryPlayer, te ) ); this.container = (FCBasePartContainerEx) this.inventorySlots; - Ae2Reflect.setReservedSpace(this, 81); + Ae2ReflectClient.setReservedSpace(this, 81); } @Override @@ -108,7 +109,7 @@ public class GuiBaseFluidPatternTerminalEx extends GuiFCBaseMonitor { } super.drawFG( offsetX, offsetY, mouseX, mouseY ); - this.fontRendererObj.drawString( GuiText.PatternTerminal.getLocal(), 8, this.ySize - 96 + 2 - Ae2Reflect.getReservedSpace(this), 4210752 ); + this.fontRendererObj.drawString( GuiText.PatternTerminal.getLocal(), 8, this.ySize - 96 + 2 - Ae2ReflectClient.getReservedSpace(this), 4210752 ); } @Override diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFCBaseMonitor.java b/src/main/java/com/glodblock/github/client/gui/GuiFCBaseMonitor.java index 08dbca1a..a645ab0a 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFCBaseMonitor.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFCBaseMonitor.java @@ -35,6 +35,7 @@ import com.glodblock.github.common.parts.PartFluidPatternTerminal; import com.glodblock.github.common.parts.PartFluidPatternTerminalEx; import com.glodblock.github.network.CPacketInventoryAction; import com.glodblock.github.util.Ae2Reflect; +import com.glodblock.github.util.Ae2ReflectClient; import com.glodblock.github.util.ModAndClassUtil; import com.glodblock.github.util.NameConst; import net.minecraft.client.Minecraft; @@ -387,7 +388,7 @@ public class GuiFCBaseMonitor extends AEBaseMEGui implements ISortSource, IConfi { final InventoryAction action = ctrlDown == 1 ? InventoryAction.SPLIT_OR_PLACE_SINGLE : InventoryAction.PICKUP_OR_SET_DOWN; - if( Ae2Reflect.getDragClick(this).size() > 1 ) + if( Ae2ReflectClient.getDragClick(this).size() > 1 ) { return; } @@ -448,7 +449,7 @@ public class GuiFCBaseMonitor extends AEBaseMEGui implements ISortSource, IConfi stack = ( (SlotME) slot ).getAEStack(); } - int slotNum = Ae2Reflect.getInventorySlots(this).size(); + int slotNum = Ae2ReflectClient.getInventorySlots(this).size(); if( !( slot instanceof SlotME ) && slot != null ) { @@ -464,7 +465,7 @@ public class GuiFCBaseMonitor extends AEBaseMEGui implements ISortSource, IConfi if( slot instanceof SlotDisconnected) { - if( Ae2Reflect.getDragClick(this).size() > 1 ) + if( Ae2ReflectClient.getDragClick(this).size() > 1 ) { return; } @@ -555,12 +556,12 @@ public class GuiFCBaseMonitor extends AEBaseMEGui implements ISortSource, IConfi if (action == InventoryAction.AUTO_CRAFT) { ((AEBaseContainer) this.inventorySlots).setTargetStack( stack ); - FluidCraft.proxy.netHandler.sendToServer(new CPacketInventoryAction(action, Ae2Reflect.getInventorySlots(this).size(), 0, stack)); + FluidCraft.proxy.netHandler.sendToServer(new CPacketInventoryAction(action, Ae2ReflectClient.getInventorySlots(this).size(), 0, stack)); } else if( action != null ) { ( (AEBaseContainer) this.inventorySlots ).setTargetStack( stack ); - final PacketInventoryAction p = new PacketInventoryAction( action, Ae2Reflect.getInventorySlots(this).size(), 0 ); + final PacketInventoryAction p = new PacketInventoryAction( action, Ae2ReflectClient.getInventorySlots(this).size(), 0 ); NetworkHandler.instance.sendToServer( p ); } diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternEncoder.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternEncoder.java index 7182e992..4a6702cc 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternEncoder.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternEncoder.java @@ -13,6 +13,7 @@ import com.glodblock.github.inventory.slot.SlotFluid; import com.glodblock.github.inventory.slot.SlotSingleItem; import com.glodblock.github.network.CPacketEncodePattern; import com.glodblock.github.util.Ae2Reflect; +import com.glodblock.github.util.Ae2ReflectClient; import com.glodblock.github.util.NameConst; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.resources.I18n; @@ -33,7 +34,7 @@ public class GuiFluidPatternEncoder extends AEBaseGui { private final ContainerFluidPatternEncoder cont; private final MouseRegionManager mouseRegions = new MouseRegionManager(this); - private final AppEngRenderItem stackSizeRenderer = Ae2Reflect.getStackSizeRenderer(this); + private final AppEngRenderItem stackSizeRenderer = Ae2ReflectClient.getStackSizeRenderer(this); public GuiFluidPatternEncoder(InventoryPlayer ipl, TileFluidPatternEncoder tile) { super(new ContainerFluidPatternEncoder(ipl, tile)); diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminal.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminal.java index 7a372bb4..035eca09 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminal.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminal.java @@ -12,6 +12,7 @@ import com.glodblock.github.inventory.InventoryHandler; import com.glodblock.github.inventory.gui.GuiType; import com.glodblock.github.inventory.slot.SlotSingleItem; import com.glodblock.github.util.Ae2Reflect; +import com.glodblock.github.util.Ae2ReflectClient; import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Slot; @@ -19,20 +20,20 @@ import net.minecraft.inventory.Slot; public class GuiFluidPatternTerminal extends GuiBaseFluidPatternTerminal { private GuiTabButton craftingStatusBtn; - private final AppEngRenderItem stackSizeRenderer = Ae2Reflect.getStackSizeRenderer(this); + private final AppEngRenderItem stackSizeRenderer = Ae2ReflectClient.getStackSizeRenderer(this); public GuiFluidPatternTerminal(InventoryPlayer inventoryPlayer, ITerminalHost te) { super(inventoryPlayer, te); ContainerFluidPatternTerminal container = new ContainerFluidPatternTerminal(inventoryPlayer, te); container.setGui(this); this.inventorySlots = container; - Ae2Reflect.setGuiContainer(this, container); + Ae2ReflectClient.setGuiContainer(this, container); } @Override public void initGui() { super.initGui(); - craftingStatusBtn = Ae2Reflect.getCraftingStatusButton(this); + craftingStatusBtn = Ae2ReflectClient.getCraftingStatusButton(this); } @Override diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalCraftingStatus.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalCraftingStatus.java index fd7d362c..713f762f 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalCraftingStatus.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalCraftingStatus.java @@ -9,6 +9,7 @@ import com.glodblock.github.inventory.InventoryHandler; import com.glodblock.github.inventory.gui.GuiType; import com.glodblock.github.loader.ItemAndBlockHolder; import com.glodblock.github.util.Ae2Reflect; +import com.glodblock.github.util.Ae2ReflectClient; import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; @@ -26,11 +27,11 @@ public class GuiFluidPatternTerminalCraftingStatus extends GuiCraftingStatus { @Override public void initGui() { if (host instanceof PartFluidPatternTerminal) - Ae2Reflect.rewriteIcon(this, new ItemStack(ItemAndBlockHolder.FLUID_TERMINAL, 1)); + Ae2ReflectClient.rewriteIcon(this, new ItemStack(ItemAndBlockHolder.FLUID_TERMINAL, 1)); else if (host instanceof PartFluidPatternTerminalEx) - Ae2Reflect.rewriteIcon(this, new ItemStack(ItemAndBlockHolder.FLUID_TERMINAL_EX, 1)); + Ae2ReflectClient.rewriteIcon(this, new ItemStack(ItemAndBlockHolder.FLUID_TERMINAL_EX, 1)); super.initGui(); - originalGuiBtn = Ae2Reflect.getOriginalGuiButton(this); + originalGuiBtn = Ae2ReflectClient.getOriginalGuiButton(this); } @Override diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalEx.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalEx.java index 80856a0e..eb3c0413 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalEx.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalEx.java @@ -12,6 +12,7 @@ import com.glodblock.github.inventory.InventoryHandler; import com.glodblock.github.inventory.gui.GuiType; import com.glodblock.github.inventory.slot.SlotSingleItem; import com.glodblock.github.util.Ae2Reflect; +import com.glodblock.github.util.Ae2ReflectClient; import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Slot; @@ -19,7 +20,7 @@ import net.minecraft.inventory.Slot; public class GuiFluidPatternTerminalEx extends GuiBaseFluidPatternTerminalEx { private GuiTabButton craftingStatusBtn; - private final AppEngRenderItem stackSizeRenderer = Ae2Reflect.getStackSizeRenderer(this); + private final AppEngRenderItem stackSizeRenderer = Ae2ReflectClient.getStackSizeRenderer(this); public GuiFluidPatternTerminalEx(InventoryPlayer inventoryPlayer, ITerminalHost te) { super(inventoryPlayer, te); @@ -34,7 +35,7 @@ public class GuiFluidPatternTerminalEx extends GuiBaseFluidPatternTerminalEx { @Override public void initGui() { super.initGui(); - craftingStatusBtn = Ae2Reflect.getCraftingStatusButton(this); + craftingStatusBtn = Ae2ReflectClient.getCraftingStatusButton(this); } @Override diff --git a/src/main/java/com/glodblock/github/inventory/gui/MouseRegionManager.java b/src/main/java/com/glodblock/github/inventory/gui/MouseRegionManager.java index 4ac873ad..06107e85 100644 --- a/src/main/java/com/glodblock/github/inventory/gui/MouseRegionManager.java +++ b/src/main/java/com/glodblock/github/inventory/gui/MouseRegionManager.java @@ -1,6 +1,7 @@ package com.glodblock.github.inventory.gui; import com.glodblock.github.util.Ae2Reflect; +import com.glodblock.github.util.Ae2ReflectClient; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.util.ResourceLocation; @@ -22,8 +23,8 @@ public class MouseRegionManager { } public boolean onClick(int mX, int mY, int button) { - mX -= Ae2Reflect.getGuiLeft(gui); - mY -= Ae2Reflect.getGuiTop(gui); + mX -= Ae2ReflectClient.getGuiLeft(gui); + mY -= Ae2ReflectClient.getGuiTop(gui); for (Region region : regions) { if (region.containsMouse(mX, mY) && region.handler.onClick(button)) { gui.mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1F)); @@ -34,8 +35,8 @@ public class MouseRegionManager { } public void render(int mX, int mY) { - mX -= Ae2Reflect.getGuiLeft(gui); - mY -= Ae2Reflect.getGuiTop(gui); + mX -= Ae2ReflectClient.getGuiLeft(gui); + mY -= Ae2ReflectClient.getGuiTop(gui); for (Region region : regions) { if (region.containsMouse(mX, mY)) { List tooltip = region.handler.getTooltip(); diff --git a/src/main/java/com/glodblock/github/util/Ae2Reflect.java b/src/main/java/com/glodblock/github/util/Ae2Reflect.java index 8be6c2f4..a319cf17 100644 --- a/src/main/java/com/glodblock/github/util/Ae2Reflect.java +++ b/src/main/java/com/glodblock/github/util/Ae2Reflect.java @@ -32,6 +32,10 @@ public class Ae2Reflect { private static final Field fInventory_width; private static final Field fAEPass_internal; private static final Field fAEInv_partitionList; + private static final Field fCPU_cpu; + private static final Field fCPU_myName; + private static final Field fCPU_processors; + private static final Field fCPU_size; private static final Method mItemSlot_setExtractable; static { @@ -40,6 +44,10 @@ public class Ae2Reflect { fInventory_width = reflectField(InventoryCrafting.class, "inventoryWidth", "field_70464_b", "b"); fAEPass_internal = reflectField(MEPassThrough.class, "internal"); fAEInv_partitionList = reflectField(MEInventoryHandler.class, "myPartitionList"); + fCPU_cpu = Ae2Reflect.reflectField(CraftingCPURecord.class, "cpu"); + fCPU_myName = Ae2Reflect.reflectField(CraftingCPURecord.class, "myName"); + fCPU_processors = Ae2Reflect.reflectField(CraftingCPURecord.class, "processors"); + fCPU_size = Ae2Reflect.reflectField(CraftingCPURecord.class, "size"); mItemSlot_setExtractable = reflectMethod(ItemSlot.class, "setExtractable", boolean.class); } catch (Exception e) { throw new IllegalStateException("Failed to initialize AE2 reflection hacks!", e); @@ -108,65 +116,6 @@ public class Ae2Reflect { } } - private static final Field fAEBaseGui_stackSizeRenderer; - private static final Field fGuiCraftingStatus_originalGuiBtn; - private static final Field fGuiPatternTerm_container; - private static final Field fGuiCPUStatus_icon; - private static final Field fGuiMEMonitorable_monitorableContainer; - private static final Field fGuiMEMonitorable_configSrc; - private static final Field fGuiMEMonitorable_craftingStatusBtn; - private static final Field fGuiContainer_guiLeft; - private static final Field fGuiContainer_guiTop; - private static final Field fCPU_cpu; - private static final Field fCPU_myName; - private static final Field fCPU_processors; - private static final Field fCPU_size; - private static final Field fGui_drag; - private static final Method mGuiPatternTerm_inventorySlots; - private static final Method mGuiPatternTerm_reservedSpace; - private static final Method mGuiPatternTerm_reservedSpaceSetter; - - static { - try { - fAEBaseGui_stackSizeRenderer = Ae2Reflect.reflectField(AEBaseGui.class, "aeRenderItem"); - fGuiCraftingStatus_originalGuiBtn = Ae2Reflect.reflectField(GuiCraftingStatus.class, "originalGuiBtn"); - fGuiPatternTerm_container = Ae2Reflect.reflectField(GuiBaseFluidPatternTerminal.class, "container"); - fGuiMEMonitorable_monitorableContainer = Ae2Reflect.reflectField(GuiFCBaseMonitor.class, "monitorableContainer"); - fGuiMEMonitorable_configSrc = Ae2Reflect.reflectField(GuiFCBaseMonitor.class, "configSrc"); - fGuiMEMonitorable_craftingStatusBtn = Ae2Reflect.reflectField(GuiFCBaseMonitor.class, "craftingStatusBtn"); - fGuiCPUStatus_icon = Ae2Reflect.reflectField(GuiCraftingStatus.class, "myIcon"); - fGuiContainer_guiLeft = Ae2Reflect.reflectField(GuiContainer.class, "guiLeft", "field_147003_i", "i"); - fGuiContainer_guiTop = Ae2Reflect.reflectField(GuiContainer.class, "guiTop", "field_147009_r", "r"); - fCPU_cpu = Ae2Reflect.reflectField(CraftingCPURecord.class, "cpu"); - fCPU_myName = Ae2Reflect.reflectField(CraftingCPURecord.class, "myName"); - fCPU_processors = Ae2Reflect.reflectField(CraftingCPURecord.class, "processors"); - fCPU_size = Ae2Reflect.reflectField(CraftingCPURecord.class, "size"); - fGui_drag = Ae2Reflect.reflectField(AEBaseGui.class, "drag_click"); - mGuiPatternTerm_inventorySlots = Ae2Reflect.reflectMethod(AEBaseGui.class, "getInventorySlots"); - mGuiPatternTerm_reservedSpace = Ae2Reflect.reflectMethod(GuiFCBaseMonitor.class, "getReservedSpace"); - mGuiPatternTerm_reservedSpaceSetter = Ae2Reflect.reflectMethod(GuiFCBaseMonitor.class, "setReservedSpace", int.class); - } catch (Exception e) { - throw new IllegalStateException("Failed to initialize AE2 reflection hacks!", e); - } - } - - @SuppressWarnings("unchecked") - public static List getInventorySlots(AEBaseGui gui) { - try { - return (List) mGuiPatternTerm_inventorySlots.invoke(gui); - } catch (Exception e) { - throw new IllegalStateException("Failed to invoke method: " + mGuiPatternTerm_inventorySlots, e); - } - } - - public static void rewriteIcon(GuiCraftingStatus gui, ItemStack icon) { - Ae2Reflect.writeField(gui, fGuiCPUStatus_icon, icon); - } - - public static Set getDragClick(AEBaseGui gui) { - return Ae2Reflect.readField(gui, fGui_drag); - } - public static ICraftingCPU getCPU(CraftingCPURecord cpu) { return Ae2Reflect.readField(cpu, fCPU_cpu); } @@ -183,46 +132,4 @@ public class Ae2Reflect { return Ae2Reflect.readField(cpu, fCPU_size); } - public static int getGuiLeft(GuiContainer gui) { - return Ae2Reflect.readField(gui, fGuiContainer_guiLeft); - } - - public static int getGuiTop(GuiContainer gui) { - return Ae2Reflect.readField(gui, fGuiContainer_guiTop); - } - - public static void setReservedSpace(GuiFCBaseMonitor gui, int size) { - try { - mGuiPatternTerm_reservedSpaceSetter.invoke(gui, size); - } catch (Exception e) { - throw new IllegalStateException("Failed to invoke method: " + mGuiPatternTerm_reservedSpaceSetter, e); - } - } - - public static int getReservedSpace(GuiFCBaseMonitor gui) { - try { - return (int) mGuiPatternTerm_reservedSpace.invoke(gui); - } catch (Exception e) { - throw new IllegalStateException("Failed to invoke method: " + mGuiPatternTerm_reservedSpace, e); - } - } - - public static AppEngRenderItem getStackSizeRenderer(AEBaseGui gui) { - return Ae2Reflect.readField(gui, fAEBaseGui_stackSizeRenderer); - } - - public static GuiTabButton getOriginalGuiButton(GuiCraftingStatus gui) { - return Ae2Reflect.readField(gui, fGuiCraftingStatus_originalGuiBtn); - } - - public static void setGuiContainer(GuiBaseFluidPatternTerminal instance, ContainerFluidPatternTerminal container) { - Ae2Reflect.writeField(instance, fGuiPatternTerm_container, container); - Ae2Reflect.writeField(instance, fGuiMEMonitorable_monitorableContainer, container); - Ae2Reflect.writeField(instance, fGuiMEMonitorable_configSrc, container.getConfigManager()); - } - - public static GuiTabButton getCraftingStatusButton(GuiFCBaseMonitor gui) { - return Ae2Reflect.readField(gui, fGuiMEMonitorable_craftingStatusBtn); - } - } diff --git a/src/main/java/com/glodblock/github/util/Ae2ReflectClient.java b/src/main/java/com/glodblock/github/util/Ae2ReflectClient.java new file mode 100644 index 00000000..0f72463f --- /dev/null +++ b/src/main/java/com/glodblock/github/util/Ae2ReflectClient.java @@ -0,0 +1,118 @@ +package com.glodblock.github.util; + +import appeng.client.gui.AEBaseGui; +import appeng.client.gui.implementations.GuiCraftingStatus; +import appeng.client.gui.widgets.GuiTabButton; +import appeng.client.render.AppEngRenderItem; +import com.glodblock.github.client.gui.GuiBaseFluidPatternTerminal; +import com.glodblock.github.client.gui.GuiFCBaseMonitor; +import com.glodblock.github.client.gui.container.ContainerFluidPatternTerminal; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.List; +import java.util.Set; + +@SideOnly(Side.CLIENT) +public class Ae2ReflectClient { + + private static final Field fAEBaseGui_stackSizeRenderer; + private static final Field fGuiCraftingStatus_originalGuiBtn; + private static final Field fGuiPatternTerm_container; + private static final Field fGuiCPUStatus_icon; + private static final Field fGuiMEMonitorable_monitorableContainer; + private static final Field fGuiMEMonitorable_configSrc; + private static final Field fGuiMEMonitorable_craftingStatusBtn; + private static final Field fGuiContainer_guiLeft; + private static final Field fGuiContainer_guiTop; + private static final Field fGui_drag; + private static final Method mGuiPatternTerm_inventorySlots; + private static final Method mGuiPatternTerm_reservedSpace; + private static final Method mGuiPatternTerm_reservedSpaceSetter; + + + static { + try { + fAEBaseGui_stackSizeRenderer = Ae2Reflect.reflectField(AEBaseGui.class, "aeRenderItem"); + fGuiCraftingStatus_originalGuiBtn = Ae2Reflect.reflectField(GuiCraftingStatus.class, "originalGuiBtn"); + fGuiPatternTerm_container = Ae2Reflect.reflectField(GuiBaseFluidPatternTerminal.class, "container"); + fGuiMEMonitorable_monitorableContainer = Ae2Reflect.reflectField(GuiFCBaseMonitor.class, "monitorableContainer"); + fGuiMEMonitorable_configSrc = Ae2Reflect.reflectField(GuiFCBaseMonitor.class, "configSrc"); + fGuiMEMonitorable_craftingStatusBtn = Ae2Reflect.reflectField(GuiFCBaseMonitor.class, "craftingStatusBtn"); + fGuiCPUStatus_icon = Ae2Reflect.reflectField(GuiCraftingStatus.class, "myIcon"); + fGuiContainer_guiLeft = Ae2Reflect.reflectField(GuiContainer.class, "guiLeft", "field_147003_i", "i"); + fGuiContainer_guiTop = Ae2Reflect.reflectField(GuiContainer.class, "guiTop", "field_147009_r", "r"); + fGui_drag = Ae2Reflect.reflectField(AEBaseGui.class, "drag_click"); + mGuiPatternTerm_inventorySlots = Ae2Reflect.reflectMethod(AEBaseGui.class, "getInventorySlots"); + mGuiPatternTerm_reservedSpace = Ae2Reflect.reflectMethod(GuiFCBaseMonitor.class, "getReservedSpace"); + mGuiPatternTerm_reservedSpaceSetter = Ae2Reflect.reflectMethod(GuiFCBaseMonitor.class, "setReservedSpace", int.class); + } catch (NoSuchFieldException | NoSuchMethodException e) { + throw new IllegalStateException("Failed to initialize AE2 reflection hacks!", e); + } + } + + @SuppressWarnings("unchecked") + public static List getInventorySlots(AEBaseGui gui) { + try { + return (List) mGuiPatternTerm_inventorySlots.invoke(gui); + } catch (Exception e) { + throw new IllegalStateException("Failed to invoke method: " + mGuiPatternTerm_inventorySlots, e); + } + } + + public static void rewriteIcon(GuiCraftingStatus gui, ItemStack icon) { + Ae2Reflect.writeField(gui, fGuiCPUStatus_icon, icon); + } + + public static Set getDragClick(AEBaseGui gui) { + return Ae2Reflect.readField(gui, fGui_drag); + } + + public static int getGuiLeft(GuiContainer gui) { + return Ae2Reflect.readField(gui, fGuiContainer_guiLeft); + } + + public static int getGuiTop(GuiContainer gui) { + return Ae2Reflect.readField(gui, fGuiContainer_guiTop); + } + + public static void setReservedSpace(GuiFCBaseMonitor gui, int size) { + try { + mGuiPatternTerm_reservedSpaceSetter.invoke(gui, size); + } catch (Exception e) { + throw new IllegalStateException("Failed to invoke method: " + mGuiPatternTerm_reservedSpaceSetter, e); + } + } + + public static int getReservedSpace(GuiFCBaseMonitor gui) { + try { + return (int) mGuiPatternTerm_reservedSpace.invoke(gui); + } catch (Exception e) { + throw new IllegalStateException("Failed to invoke method: " + mGuiPatternTerm_reservedSpace, e); + } + } + + public static AppEngRenderItem getStackSizeRenderer(AEBaseGui gui) { + return Ae2Reflect.readField(gui, fAEBaseGui_stackSizeRenderer); + } + + public static GuiTabButton getOriginalGuiButton(GuiCraftingStatus gui) { + return Ae2Reflect.readField(gui, fGuiCraftingStatus_originalGuiBtn); + } + + public static void setGuiContainer(GuiBaseFluidPatternTerminal instance, ContainerFluidPatternTerminal container) { + Ae2Reflect.writeField(instance, fGuiPatternTerm_container, container); + Ae2Reflect.writeField(instance, fGuiMEMonitorable_monitorableContainer, container); + Ae2Reflect.writeField(instance, fGuiMEMonitorable_configSrc, container.getConfigManager()); + } + + public static GuiTabButton getCraftingStatusButton(GuiFCBaseMonitor gui) { + return Ae2Reflect.readField(gui, fGuiMEMonitorable_craftingStatusBtn); + } + +}