From c38247ab5b1f169210286a7814fa4bb3b162c12a Mon Sep 17 00:00:00 2001 From: Kogepan229 Date: Wed, 29 Oct 2025 22:09:11 +0900 Subject: [PATCH 1/9] Remove calculator plugin --- .../java/com/glodblock/github/FluidCraft.java | 5 ---- .../loader/CalculatorV2PluginLoader.java | 23 ------------------- 2 files changed, 28 deletions(-) delete mode 100644 src/main/java/com/glodblock/github/loader/CalculatorV2PluginLoader.java diff --git a/src/main/java/com/glodblock/github/FluidCraft.java b/src/main/java/com/glodblock/github/FluidCraft.java index 706ce9da4..90d7aaa69 100644 --- a/src/main/java/com/glodblock/github/FluidCraft.java +++ b/src/main/java/com/glodblock/github/FluidCraft.java @@ -6,7 +6,6 @@ import com.glodblock.github.crossmod.opencomputers.OCDriverInit; import com.glodblock.github.crossmod.waila.WailaInit; import com.glodblock.github.inventory.InventoryHandler; -import com.glodblock.github.loader.CalculatorV2PluginLoader; import com.glodblock.github.loader.ChannelLoader; import com.glodblock.github.loader.ItemAndBlockHolder; import com.glodblock.github.loader.RecipeLoader; @@ -74,10 +73,6 @@ public static void postInit(FMLPostInitializationEvent event) { RecipeLoader.runTerminalRecipe(); RecipeLoader.addDisassembleRecipe(); - if (ModAndClassUtil.isV2) { - CalculatorV2PluginLoader.installCalculatorV2Plugins(); - } - proxy.postInit(event); } diff --git a/src/main/java/com/glodblock/github/loader/CalculatorV2PluginLoader.java b/src/main/java/com/glodblock/github/loader/CalculatorV2PluginLoader.java deleted file mode 100644 index 4d9ed210a..000000000 --- a/src/main/java/com/glodblock/github/loader/CalculatorV2PluginLoader.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.glodblock.github.loader; - -import com.glodblock.github.common.item.ItemFluidDrop; - -import appeng.api.storage.data.IAEItemStack; -import appeng.crafting.v2.CraftingCalculations; -import appeng.crafting.v2.CraftingRequest; -import appeng.util.Platform; - -public class CalculatorV2PluginLoader { - - private static long adjustByteCost(CraftingRequest request, Long originalAmount) { - if (request.stack.getItem() instanceof ItemFluidDrop) { - return Platform.ceilDiv(originalAmount, 1000L); - } else { - return originalAmount; - } - } - - public static void installCalculatorV2Plugins() { - CraftingCalculations.registerByteAmountAdjuster(CalculatorV2PluginLoader::adjustByteCost, IAEItemStack.class); - } -} From ee8f13250a1fb8832a4b1a0d35c4ba1ff4b964e1 Mon Sep 17 00:00:00 2001 From: Kogepan229 Date: Sun, 2 Nov 2025 01:59:35 +0900 Subject: [PATCH 2/9] Use IAEStackType instead of StorageChannel --- .../github/common/item/FCBaseItemCell.java | 10 +- .../item/ItemCreativeFluidStorageCell.java | 10 +- .../common/item/ItemFluidVoidStorageCell.java | 6 - .../item/ItemInfinityWaterStorageCell.java | 9 +- .../common/item/ItemPortableFluidCell.java | 12 +- .../common/parts/PartFluidStorageBus.java | 8 +- .../github/coremod/FCClassTransformer.java | 2 - .../ExternalStorageRegistryTransformer.java | 104 ------- .../inventory/MEMonitorIFluidHandler.java | 262 ------------------ .../external/AEFluidTankHandler.java | 33 --- .../github/util/DualityFluidInterface.java | 10 +- 11 files changed, 39 insertions(+), 427 deletions(-) delete mode 100644 src/main/java/com/glodblock/github/coremod/transform/ExternalStorageRegistryTransformer.java delete mode 100644 src/main/java/com/glodblock/github/inventory/MEMonitorIFluidHandler.java delete mode 100644 src/main/java/com/glodblock/github/inventory/external/AEFluidTankHandler.java diff --git a/src/main/java/com/glodblock/github/common/item/FCBaseItemCell.java b/src/main/java/com/glodblock/github/common/item/FCBaseItemCell.java index 85fe2c0b1..70282f3a9 100644 --- a/src/main/java/com/glodblock/github/common/item/FCBaseItemCell.java +++ b/src/main/java/com/glodblock/github/common/item/FCBaseItemCell.java @@ -1,12 +1,16 @@ package com.glodblock.github.common.item; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; + import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; + import com.glodblock.github.common.storage.CellType; import com.glodblock.github.loader.ItemAndBlockHolder; import com.google.common.base.Optional; -import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEStackType; import appeng.items.AEBaseCell; public abstract class FCBaseItemCell extends AEBaseCell { @@ -23,8 +27,8 @@ public FCBaseItemCell(long bytes, int perType, int totalType, double drain) { } @Override - public StorageChannel getStorageChannel() { - return StorageChannel.FLUIDS; + public @NotNull IAEStackType getStackType() { + return FLUID_STACK_TYPE; } public FCBaseItemCell(Optional subName) { diff --git a/src/main/java/com/glodblock/github/common/item/ItemCreativeFluidStorageCell.java b/src/main/java/com/glodblock/github/common/item/ItemCreativeFluidStorageCell.java index 4e6d08873..de546820f 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemCreativeFluidStorageCell.java +++ b/src/main/java/com/glodblock/github/common/item/ItemCreativeFluidStorageCell.java @@ -1,15 +1,19 @@ package com.glodblock.github.common.item; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; + import java.util.EnumSet; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; + import com.glodblock.github.FluidCraft; import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.loader.IRegister; import com.glodblock.github.util.NameConst; -import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEStackType; import appeng.core.features.AEFeature; import appeng.items.AEBaseInfiniteCell; import cpw.mods.fml.common.registry.GameRegistry; @@ -42,7 +46,7 @@ public int getTotalTypes(ItemStack cellItem) { } @Override - public StorageChannel getStorageChannel() { - return StorageChannel.FLUIDS; + public @NotNull IAEStackType getStackType() { + return FLUID_STACK_TYPE; } } diff --git a/src/main/java/com/glodblock/github/common/item/ItemFluidVoidStorageCell.java b/src/main/java/com/glodblock/github/common/item/ItemFluidVoidStorageCell.java index 599630dd6..6d39562c6 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemFluidVoidStorageCell.java +++ b/src/main/java/com/glodblock/github/common/item/ItemFluidVoidStorageCell.java @@ -5,7 +5,6 @@ import com.glodblock.github.loader.IRegister; import com.glodblock.github.util.NameConst; -import appeng.api.storage.StorageChannel; import appeng.items.storage.ItemVoidStorageCell; import cpw.mods.fml.common.registry.GameRegistry; @@ -23,9 +22,4 @@ public ItemFluidVoidStorageCell register() { setCreativeTab(FluidCraftingTabs.INSTANCE); return this; } - - @Override - public StorageChannel getStorageChannel() { - return StorageChannel.FLUIDS; - } } diff --git a/src/main/java/com/glodblock/github/common/item/ItemInfinityWaterStorageCell.java b/src/main/java/com/glodblock/github/common/item/ItemInfinityWaterStorageCell.java index f0646c9ee..d90453abc 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemInfinityWaterStorageCell.java +++ b/src/main/java/com/glodblock/github/common/item/ItemInfinityWaterStorageCell.java @@ -1,18 +1,21 @@ package com.glodblock.github.common.item; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; import static com.glodblock.github.util.Util.FluidUtil.water_bucket; import java.util.EnumSet; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; + import com.glodblock.github.FluidCraft; import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.loader.IRegister; import com.glodblock.github.util.NameConst; import com.glodblock.github.util.Util; -import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEStackType; import appeng.core.features.AEFeature; import appeng.items.AEBaseInfiniteCell; import appeng.tile.inventory.IAEStackInventory; @@ -62,7 +65,7 @@ public int getTotalTypes(ItemStack cellItem) { } @Override - public StorageChannel getStorageChannel() { - return StorageChannel.FLUIDS; + public @NotNull IAEStackType getStackType() { + return FLUID_STACK_TYPE; } } diff --git a/src/main/java/com/glodblock/github/common/item/ItemPortableFluidCell.java b/src/main/java/com/glodblock/github/common/item/ItemPortableFluidCell.java index 0dc7863e3..d40f9c7ec 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemPortableFluidCell.java +++ b/src/main/java/com/glodblock/github/common/item/ItemPortableFluidCell.java @@ -1,5 +1,7 @@ package com.glodblock.github.common.item; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; + import java.util.List; import net.minecraft.client.gui.GuiScreen; @@ -9,6 +11,8 @@ import net.minecraft.util.StatCollector; import net.minecraft.world.World; +import org.jetbrains.annotations.NotNull; + import com.glodblock.github.FluidCraft; import com.glodblock.github.api.FluidCraftAPI; import com.glodblock.github.common.tabs.FluidCraftingTabs; @@ -17,9 +21,9 @@ import com.glodblock.github.util.RenderUtil; import appeng.api.implementations.guiobjects.IGuiItemObject; -import appeng.api.storage.StorageChannel; import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEStack; +import appeng.api.storage.data.IAEStackType; import appeng.items.AEBasePortableCell; import appeng.items.contents.CellUpgrades; import appeng.items.contents.PortableCellViewer; @@ -79,12 +83,12 @@ public IInventory getUpgradesInventory(final ItemStack is) { @Override public IGuiItemObject getGuiObject(final ItemStack is, final World w, final EntityPlayer p, final int x, final int y, final int z) { - return new PortableCellViewer(is, x, StorageChannel.FLUIDS); + return new PortableCellViewer(is, x, FLUID_STACK_TYPE); } @Override - public StorageChannel getStorageChannel() { - return StorageChannel.FLUIDS; + public @NotNull IAEStackType getStackType() { + return FLUID_STACK_TYPE; } @Override diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidStorageBus.java b/src/main/java/com/glodblock/github/common/parts/PartFluidStorageBus.java index 702367ac4..30fe136dc 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidStorageBus.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidStorageBus.java @@ -1,8 +1,10 @@ package com.glodblock.github.common.parts; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; + import net.minecraft.item.ItemStack; -import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEStackType; import appeng.parts.misc.PartStorageBus; public class PartFluidStorageBus extends PartStorageBus { @@ -12,7 +14,7 @@ public PartFluidStorageBus(ItemStack is) { } @Override - public StorageChannel getStorageChannel() { - return StorageChannel.FLUIDS; + public IAEStackType getStackType() { + return FLUID_STACK_TYPE; } } diff --git a/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java b/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java index ebd48a06e..99add6c32 100644 --- a/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java +++ b/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java @@ -8,7 +8,6 @@ import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.ClassWriter; -import com.glodblock.github.coremod.transform.ExternalStorageRegistryTransformer; import com.glodblock.github.coremod.transform.GuiCraftingTransformer; import com.glodblock.github.coremod.transform.NEITransformer; import com.gtnewhorizon.gtnhlib.asm.ASMUtil; @@ -23,7 +22,6 @@ public byte[] transform(String name, String transformedName, byte[] basicClass) switch (transformedName) { case "appeng.client.gui.implementations.GuiCraftingCPU", "appeng.client.gui.implementations.GuiCraftConfirm", "net.p455w0rd.wirelesscraftingterminal.client.gui.GuiCraftConfirm", "appeng.client.gui.widgets.GuiCraftingTree" -> tform = GuiCraftingTransformer.INSTANCE; case "appeng.integration.modules.NEI" -> tform = NEITransformer.INSTANCE; - case "appeng.core.features.registries.ExternalStorageRegistry" -> tform = ExternalStorageRegistryTransformer.INSTANCE; default -> { return basicClass; } diff --git a/src/main/java/com/glodblock/github/coremod/transform/ExternalStorageRegistryTransformer.java b/src/main/java/com/glodblock/github/coremod/transform/ExternalStorageRegistryTransformer.java deleted file mode 100644 index 0ad99cc65..000000000 --- a/src/main/java/com/glodblock/github/coremod/transform/ExternalStorageRegistryTransformer.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.glodblock.github.coremod.transform; - -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.Label; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -import com.glodblock.github.coremod.FCClassTransformer; - -public class ExternalStorageRegistryTransformer extends FCClassTransformer.ClassMapper { - - public static final ExternalStorageRegistryTransformer INSTANCE = new ExternalStorageRegistryTransformer(); - - private ExternalStorageRegistryTransformer() { - // NO-OP - } - - @Override - protected ClassVisitor getClassMapper(ClassVisitor downstream) { - return new TransformExternalStorageRegistry(Opcodes.ASM5, downstream); - } - - @Override - protected int getWriteFlags() { - return ClassWriter.COMPUTE_FRAMES; - } - - private static class TransformExternalStorageRegistry extends ClassVisitor { - - public TransformExternalStorageRegistry(int api, ClassVisitor cv) { - super(api, cv); - } - - @Override - public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { - if ("getHandler".equals(name)) { - return new TransformGetHandler(api, super.visitMethod(access, name, desc, signature, exceptions)); - } else { - return super.visitMethod(access, name, desc, signature, exceptions); - } - } - } - - private static class TransformGetHandler extends MethodVisitor { - - private int cnt_return = 0; - private int cnt_if = 0; - private Label L6 = null; - private final Label L9 = new Label(); - - TransformGetHandler(int api, MethodVisitor mv) { - super(api, mv); - } - - @Override - public void visitJumpInsn(int opcode, Label label) { - if (opcode == Opcodes.IFEQ) { - cnt_if++; - } - if (cnt_if == 3) { - L6 = label; - cnt_if++; - super.visitJumpInsn(opcode, L9); - return; - } - super.visitJumpInsn(opcode, label); - } - - @Override - public void visitInsn(int opcode) { - if (opcode == Opcodes.ARETURN) { - cnt_return++; - } - super.visitInsn(opcode); - if (cnt_return == 2) { - super.visitLabel(L9); - super.visitFieldInsn( - Opcodes.GETSTATIC, - "com/glodblock/github/inventory/external/AEFluidTankHandler", - "INSTANCE", - "Lcom/glodblock/github/inventory/external/AEFluidTankHandler;"); - super.visitVarInsn(Opcodes.ALOAD, 1); - super.visitVarInsn(Opcodes.ALOAD, 2); - super.visitVarInsn(Opcodes.ALOAD, 3); - super.visitVarInsn(Opcodes.ALOAD, 4); - super.visitMethodInsn( - Opcodes.INVOKEVIRTUAL, - "com/glodblock/github/inventory/external/AEFluidTankHandler", - "canHandle", - "(Lnet/minecraft/tileentity/TileEntity;Lnet/minecraftforge/common/util/ForgeDirection;Lappeng/api/storage/StorageChannel;Lappeng/api/networking/security/BaseActionSource;)Z", - false); - super.visitJumpInsn(Opcodes.IFEQ, L6); - super.visitFieldInsn( - Opcodes.GETSTATIC, - "com/glodblock/github/inventory/external/AEFluidTankHandler", - "INSTANCE", - "Lcom/glodblock/github/inventory/external/AEFluidTankHandler;"); - super.visitInsn(Opcodes.ARETURN); - cnt_return++; - } - } - } -} diff --git a/src/main/java/com/glodblock/github/inventory/MEMonitorIFluidHandler.java b/src/main/java/com/glodblock/github/inventory/MEMonitorIFluidHandler.java deleted file mode 100644 index e1ced089a..000000000 --- a/src/main/java/com/glodblock/github/inventory/MEMonitorIFluidHandler.java +++ /dev/null @@ -1,262 +0,0 @@ -package com.glodblock.github.inventory; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import javax.annotation.Nonnull; - -import net.minecraft.event.ClickEvent; -import net.minecraft.event.HoverEvent; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.ChatStyle; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidHandler; - -import appeng.api.AEApi; -import appeng.api.config.AccessRestriction; -import appeng.api.config.Actionable; -import appeng.api.config.StorageFilter; -import appeng.api.networking.security.BaseActionSource; -import appeng.api.networking.ticking.TickRateModulation; -import appeng.api.storage.IMEMonitor; -import appeng.api.storage.IMEMonitorHandlerReceiver; -import appeng.api.storage.StorageChannel; -import appeng.api.storage.data.IAEFluidStack; -import appeng.api.storage.data.IAEStack; -import appeng.api.storage.data.IItemList; -import appeng.core.AELog; -import appeng.util.item.AEFluidStack; - -public class MEMonitorIFluidHandler implements IMEMonitor { - - private static boolean WrongFluidRemovedWarnIssued = false; - - private final IFluidHandler handler; - private final ForgeDirection side; - private IItemList cache = AEApi.instance().storage().createFluidList(); - private final HashMap listeners = new HashMap<>(); - private BaseActionSource mySource; - private StorageFilter mode; - private boolean init = false; - - public MEMonitorIFluidHandler(IFluidHandler handler, ForgeDirection side) { - this.mode = StorageFilter.EXTRACTABLE_ONLY; - this.handler = handler; - this.side = side; - } - - public MEMonitorIFluidHandler(IFluidHandler handler) { - this.mode = StorageFilter.EXTRACTABLE_ONLY; - this.handler = handler; - this.side = ForgeDirection.UNKNOWN; - } - - public void addListener(IMEMonitorHandlerReceiver l, Object verificationToken) { - this.listeners.put(l, verificationToken); - } - - public void removeListener(IMEMonitorHandlerReceiver l) { - this.listeners.remove(l); - } - - public IAEFluidStack injectItems(IAEFluidStack input, Actionable type, BaseActionSource src) { - if (!this.handler.canFill(this.side, input.getFluid())) { - return input; - } - - int filled = this.handler.fill(this.side, input.getFluidStack(), type == Actionable.MODULATE); - - if (type == Actionable.MODULATE) { - this.onTick(); - } - - if ((long) filled == input.getStackSize()) { - return null; - } - - IAEFluidStack o = input.copy(); - o.setStackSize(input.getStackSize() - (long) filled); - return o; - } - - public IAEFluidStack extractItems(IAEFluidStack request, Actionable type, BaseActionSource src) { - if (!this.handler.canDrain(this.side, request.getFluid())) { - return null; - } - FluidStack removed = this.handler.drain(this.side, request.getFluidStack(), type == Actionable.MODULATE); - if (removed != null && removed.amount != 0) { - // perform a one time log if the removed fluid isn't what's reported since this will create a dupe exploit - if (!WrongFluidRemovedWarnIssued && !removed.isFluidEqual(request.getFluidStack())) { - WrongFluidRemovedWarnIssued = true; - String issuesUrl = "https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/new"; - String msg = String.format( - "[AE2FC] MEMonitorIFluidHandler.extractItems got the wrong fluids while extracting from %s. expected %s got %s. Please report this message if seen: ", - this.handler.getClass().getSimpleName(), - request.getFluidStack().getUnlocalizedName(), - removed.getUnlocalizedName()); - // elevate log to error if chat msg is removed to make it easier to find. - AELog.warn(msg + issuesUrl); - - ChatComponentText chatTxt = new ChatComponentText(msg); - chatTxt.setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED).setBold(true)); - - ChatComponentText chatUrl = new ChatComponentText(issuesUrl); - chatUrl.setChatStyle( - new ChatStyle().setUnderlined(true) - .setChatClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, issuesUrl)) - .setChatHoverEvent( - new HoverEvent( - HoverEvent.Action.SHOW_TEXT, - new ChatComponentText("Click to open link")))); - - ChatComponentText chat = new ChatComponentText(""); - chat.appendSibling(chatTxt); - chat.appendSibling(chatUrl); - - MinecraftServer.getServer().getConfigurationManager().sendChatMsg(chat); - } - IAEFluidStack o = request.copy(); - o.setStackSize(removed.amount); - if (type == Actionable.MODULATE) { - IAEFluidStack cachedStack = this.cache.findPrecise(request); - if (cachedStack != null) { - cachedStack.decStackSize(o.getStackSize()); - this.postDifference(Collections.singletonList(o.copy().setStackSize(-o.getStackSize()))); - } - } - return o; - } else { - return null; - } - } - - @Override - public StorageChannel getChannel() { - return StorageChannel.FLUIDS; - } - - // *Decompiled Stuff*// - - public TickRateModulation onTick() { - FluidTankInfo[] tankProperties = this.handler.getTankInfo(this.side); - IItemList currentlyOnStorage = AEApi.instance().storage().createFluidList(); - - if (tankProperties != null) { - for (FluidTankInfo tankProperty : tankProperties) { - if (this.mode != StorageFilter.EXTRACTABLE_ONLY || this.handler.drain(this.side, 1, false) != null) { - currentlyOnStorage.add(AEFluidStack.create(tankProperty.fluid)); - } - } - } - - // make diff between cache and new contents - IItemList> changes = AEApi.instance().storage().createAEStackList(); - // using non-enhanced for to prevent concurrency errors - for (Iterator iter = this.cache.iterator(); iter.hasNext();) { - IAEFluidStack copy = iter.next().copy(); - copy.setStackSize(-copy.getStackSize()); - changes.add(copy); - } - for (IAEFluidStack is : currentlyOnStorage) { - changes.add(is); - } - // update cache as soon as possible - this.cache = currentlyOnStorage; - // remove unchanged values - for (Iterator> iter = changes.iterator(); iter.hasNext();) { - if (iter.next().getStackSize() == 0L) { - iter.remove(); - } - } - - if (!changes.isEmpty()) { - this.postDifference(changes); - return TickRateModulation.URGENT; - } - - return TickRateModulation.SLOWER; - } - - private void postDifference(Iterable> a) { - if (a != null) { - Iterator> i = this.listeners.entrySet().iterator(); - - while (i.hasNext()) { - Map.Entry l = i.next(); - IMEMonitorHandlerReceiver key = l.getKey(); - if (key.isValid(l.getValue())) { - key.postChange(this, a, this.getActionSource()); - } else { - i.remove(); - } - } - } - } - - public AccessRestriction getAccess() { - return AccessRestriction.READ_WRITE; - } - - public boolean isPrioritized(IAEFluidStack input) { - return false; - } - - public boolean canAccept(IAEFluidStack input) { - return true; - } - - public int getPriority() { - return 0; - } - - public int getSlot() { - return 0; - } - - public boolean validForPass(int i) { - return true; - } - - public IItemList getAvailableItems(IItemList out, int iteration) { - if (!init) { - this.onTick(); - init = true; - } - for (IAEFluidStack fs : this.cache) { - out.addStorage(fs); - } - - return out; - } - - @Override - public IAEFluidStack getAvailableItem(@Nonnull IAEFluidStack request, int iteration) { - if (!init) { - this.onTick(); - init = true; - } - return this.cache.findPrecise(request); - } - - public IItemList getStorageList() { - return this.cache; - } - - public void setMode(StorageFilter mode) { - this.mode = mode; - } - - private BaseActionSource getActionSource() { - return this.mySource; - } - - public void setActionSource(BaseActionSource mySource) { - this.mySource = mySource; - } -} diff --git a/src/main/java/com/glodblock/github/inventory/external/AEFluidTankHandler.java b/src/main/java/com/glodblock/github/inventory/external/AEFluidTankHandler.java deleted file mode 100644 index acbde506e..000000000 --- a/src/main/java/com/glodblock/github/inventory/external/AEFluidTankHandler.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.glodblock.github.inventory.external; - -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.IFluidHandler; - -import com.glodblock.github.inventory.MEMonitorIFluidHandler; - -import appeng.api.networking.security.BaseActionSource; -import appeng.api.storage.IExternalStorageHandler; -import appeng.api.storage.IMEInventory; -import appeng.api.storage.StorageChannel; - -// This handler is too generic, so it will overlap other mods' fluid handler. -// It will be injected into external handler by ASM to make sure it is executed at last. -public class AEFluidTankHandler implements IExternalStorageHandler { - - public static final AEFluidTankHandler INSTANCE = new AEFluidTankHandler(); - - @Override - public boolean canHandle(TileEntity te, ForgeDirection d, StorageChannel channel, BaseActionSource mySrc) { - return channel == StorageChannel.FLUIDS && te instanceof IFluidHandler; - } - - @Override - @SuppressWarnings("rawtypes") - public IMEInventory getInventory(TileEntity te, ForgeDirection d, StorageChannel channel, BaseActionSource src) { - if (channel == StorageChannel.FLUIDS) { - return new MEMonitorIFluidHandler((IFluidHandler) te, d); - } - return null; - } -} diff --git a/src/main/java/com/glodblock/github/util/DualityFluidInterface.java b/src/main/java/com/glodblock/github/util/DualityFluidInterface.java index 43b13fe7d..e26e0db37 100644 --- a/src/main/java/com/glodblock/github/util/DualityFluidInterface.java +++ b/src/main/java/com/glodblock/github/util/DualityFluidInterface.java @@ -1,5 +1,8 @@ package com.glodblock.github.util; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; +import static appeng.util.item.AEItemStackType.ITEM_STACK_TYPE; + import java.util.List; import java.util.Objects; @@ -18,7 +21,6 @@ import com.glodblock.github.inventory.AEFluidInventory; import com.glodblock.github.inventory.IAEFluidInventory; import com.glodblock.github.inventory.IAEFluidTank; -import com.glodblock.github.inventory.MEMonitorIFluidHandler; import appeng.api.config.Actionable; import appeng.api.config.Upgrades; @@ -36,7 +38,6 @@ import appeng.api.storage.IMEInventory; import appeng.api.storage.IMEMonitor; import appeng.api.storage.IStorageMonitorable; -import appeng.api.storage.StorageChannel; import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEItemStack; import appeng.api.util.IConfigManager; @@ -44,6 +45,7 @@ import appeng.helpers.IInterfaceHost; import appeng.me.GridAccessException; import appeng.me.helpers.AENetworkProxy; +import appeng.me.storage.MEMonitorIFluidHandler; import appeng.me.storage.MEMonitorPassThrough; import appeng.me.storage.NullInventory; import appeng.util.ConfigManager; @@ -67,10 +69,10 @@ public class DualityFluidInterface implements IGridTickable, IStorageMonitorable private int isWorking = -1; private final MEMonitorPassThrough items = new MEMonitorPassThrough( new NullInventory<>(), - StorageChannel.ITEMS); + ITEM_STACK_TYPE); private final MEMonitorPassThrough fluids = new MEMonitorPassThrough( new NullInventory<>(), - StorageChannel.FLUIDS); + FLUID_STACK_TYPE); private boolean resetConfigCache = true; public DualityFluidInterface(final AENetworkProxy networkProxy, final IInterfaceHost ih) { From 6a3f13a6275553b120545e329b0b8f00d4a26a6c Mon Sep 17 00:00:00 2001 From: Kogepan229 Date: Sun, 9 Nov 2025 21:30:22 +0900 Subject: [PATCH 3/9] Implement getCellInventory --- .../github/common/item/ItemCreativeFluidStorageCell.java | 8 ++++++++ .../github/common/item/ItemInfinityWaterStorageCell.java | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/src/main/java/com/glodblock/github/common/item/ItemCreativeFluidStorageCell.java b/src/main/java/com/glodblock/github/common/item/ItemCreativeFluidStorageCell.java index de546820f..30d954e37 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemCreativeFluidStorageCell.java +++ b/src/main/java/com/glodblock/github/common/item/ItemCreativeFluidStorageCell.java @@ -13,9 +13,12 @@ import com.glodblock.github.loader.IRegister; import com.glodblock.github.util.NameConst; +import appeng.api.storage.IMEInventoryHandler; import appeng.api.storage.data.IAEStackType; import appeng.core.features.AEFeature; import appeng.items.AEBaseInfiniteCell; +import appeng.me.storage.CreativeCellInventory; +import appeng.me.storage.FluidCellInventoryHandler; import cpw.mods.fml.common.registry.GameRegistry; public class ItemCreativeFluidStorageCell extends AEBaseInfiniteCell @@ -49,4 +52,9 @@ public int getTotalTypes(ItemStack cellItem) { public @NotNull IAEStackType getStackType() { return FLUID_STACK_TYPE; } + + @Override + public IMEInventoryHandler getCellInventory(ItemStack stack) { + return new FluidCellInventoryHandler(new CreativeCellInventory<>(stack)); + } } diff --git a/src/main/java/com/glodblock/github/common/item/ItemInfinityWaterStorageCell.java b/src/main/java/com/glodblock/github/common/item/ItemInfinityWaterStorageCell.java index d90453abc..b341c7a38 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemInfinityWaterStorageCell.java +++ b/src/main/java/com/glodblock/github/common/item/ItemInfinityWaterStorageCell.java @@ -15,9 +15,12 @@ import com.glodblock.github.util.NameConst; import com.glodblock.github.util.Util; +import appeng.api.storage.IMEInventoryHandler; import appeng.api.storage.data.IAEStackType; import appeng.core.features.AEFeature; import appeng.items.AEBaseInfiniteCell; +import appeng.me.storage.CreativeCellInventory; +import appeng.me.storage.FluidCellInventoryHandler; import appeng.tile.inventory.IAEStackInventory; import cpw.mods.fml.common.registry.GameRegistry; @@ -68,4 +71,9 @@ public int getTotalTypes(ItemStack cellItem) { public @NotNull IAEStackType getStackType() { return FLUID_STACK_TYPE; } + + @Override + public IMEInventoryHandler getCellInventory(ItemStack stack) { + return new FluidCellInventoryHandler(new CreativeCellInventory<>(stack)); + } } From a2eb3dfc0d19d5304b397bebc7763ab405068ec2 Mon Sep 17 00:00:00 2001 From: Kogepan229 Date: Mon, 10 Nov 2025 22:39:00 +0900 Subject: [PATCH 4/9] Update IOBus --- .../common/parts/PartFluidExportBus.java | 22 +++-- .../common/parts/PartFluidImportBus.java | 80 +++++++++++-------- 2 files changed, 60 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidExportBus.java b/src/main/java/com/glodblock/github/common/parts/PartFluidExportBus.java index 2339d33c9..793e9fff2 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidExportBus.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidExportBus.java @@ -1,5 +1,7 @@ package com.glodblock.github.common.parts; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; + import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.IIcon; @@ -15,6 +17,7 @@ import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IAEStack; +import appeng.api.storage.data.IAEStackType; import appeng.me.GridAccessException; import appeng.parts.automation.PartBaseExportBus; import appeng.tile.inventory.IAEStackInventory; @@ -31,11 +34,6 @@ public IIcon getFaceIcon() { return FCPartsTexture.PartFluidExportBus.getIcon(); } - @Override - protected int getAdaptorFlags() { - return InventoryAdaptor.DEFAULT & ~InventoryAdaptor.ALLOW_ITEMS; - } - @Override public int calculateAmountToSend() { double amount = 1000D; @@ -72,11 +70,16 @@ protected IMEMonitor getMonitor() { } @Override - protected void doFuzzy(IAEFluidStack aes, FuzzyMode fzMode, InventoryAdaptor destination, IEnergyGrid energy, + protected int getAdaptorFlags() { + return InventoryAdaptor.DEFAULT & ~InventoryAdaptor.ALLOW_ITEMS; + } + + @Override + protected void doFuzzy(IAEFluidStack aes, FuzzyMode fzMode, IEnergyGrid energy, IMEMonitor gridInv) {} @Override - protected void doOreDict(InventoryAdaptor destination, IEnergyGrid energy, IMEMonitor gridInv) {} + protected void doOreDict(IEnergyGrid energy, IMEMonitor gridInv) {} // legacy @Override @@ -91,4 +94,9 @@ public void readFromNBT(NBTTagCompound extra) { } } } + + @Override + public IAEStackType getStackType() { + return FLUID_STACK_TYPE; + } } diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java b/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java index e59f6e63d..07eb671f9 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java @@ -1,16 +1,16 @@ package com.glodblock.github.common.parts; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; + import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; -import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; import com.glodblock.github.client.textures.FCPartsTexture; -import com.glodblock.github.util.BlockPos; import com.glodblock.github.util.Util; import appeng.api.config.Actionable; @@ -23,9 +23,11 @@ import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IAEStack; +import appeng.api.storage.data.IAEStackType; import appeng.me.GridAccessException; import appeng.parts.automation.PartBaseImportBus; import appeng.tile.inventory.IAEStackInventory; +import appeng.util.InventoryAdaptor; import appeng.util.item.AEFluidStack; public class PartFluidImportBus extends PartBaseImportBus { @@ -41,18 +43,14 @@ public IIcon getFaceIcon() { @Override protected Object getTarget() { - TileEntity self = this.getHost().getTile(); - return this.getTileEntity(self, (new BlockPos(self)).getOffSet(this.getSide())); - } - - private TileEntity getTileEntity(final TileEntity self, final BlockPos pos) { - final World w = self.getWorldObj(); - - if (w.getChunkProvider().chunkExists(pos.getX() >> 4, pos.getZ() >> 4)) { - return w.getTileEntity(pos.getX(), pos.getY(), pos.getZ()); - } - - return null; + final TileEntity self = this.getHost().getTile(); + final TileEntity target = this.getTileEntity( + self, + self.xCoord + this.getSide().offsetX, + self.yCoord + this.getSide().offsetY, + self.zCoord + this.getSide().offsetZ); + + return target instanceof IFluidHandler handler ? handler : null; } @Override @@ -90,41 +88,48 @@ protected IMEMonitor getMonitor() { } } + @Override + protected int getAdaptorFlags() { + return InventoryAdaptor.DEFAULT & ~InventoryAdaptor.ALLOW_ITEMS; + } + @Override protected boolean importStuff(final Object myTarget, final IAEFluidStack whatToImport, final IMEMonitor inv, final IEnergySource energy, final FuzzyMode fzMode) { - if (myTarget instanceof IFluidHandler fh) { - FluidTankInfo[] tanksInfo = fh.getTankInfo(this.getSide().getOpposite()); - if (tanksInfo == null) return true; + final IFluidHandler fh = (IFluidHandler) myTarget; - int maxDrain = this.calculateAmountToSend(); - boolean doBreak = true; + FluidTankInfo[] tanksInfo = fh.getTankInfo(this.getSide().getOpposite()); + if (tanksInfo == null) return true; - for (FluidTankInfo tankInfo : tanksInfo) { - if (tankInfo.fluid == null) continue; + int maxDrain = this.calculateAmountToSend(); - FluidStack fluidStack = new FluidStack(tankInfo.fluid, Math.min(tankInfo.fluid.amount, maxDrain)); - fluidStack = fh.drain(this.getSide().getOpposite(), fluidStack, false); - if (this.filterEnabled() && !this.isInFilter(fluidStack)) continue; + for (FluidTankInfo tankInfo : tanksInfo) { + if (tankInfo.fluid == null) continue; - final AEFluidStack aeFluidStack = AEFluidStack.create(fluidStack); - if (aeFluidStack != null) { - final IAEFluidStack notInserted = inv.injectItems(aeFluidStack, Actionable.MODULATE, this.mySrc); + FluidStack fluidStack = new FluidStack(tankInfo.fluid, Math.min(tankInfo.fluid.amount, maxDrain)); + fluidStack = fh.drain(this.getSide().getOpposite(), fluidStack, false); + if (this.filterEnabled() && !this.isInFilter(fluidStack)) continue; - if (notInserted != null && notInserted.getStackSize() > 0) { - aeFluidStack.decStackSize(notInserted.getStackSize()); - } + final AEFluidStack aeFluidStack = AEFluidStack.create(fluidStack); + if (aeFluidStack != null) { + final IAEFluidStack notInserted = inv.injectItems(aeFluidStack, Actionable.MODULATE, this.mySrc); - fh.drain(this.getSide().getOpposite(), aeFluidStack.getFluidStack(), true); - maxDrain -= aeFluidStack.getFluidStack().amount; - doBreak = false; + if (notInserted != null && notInserted.getStackSize() > 0) { + aeFluidStack.decStackSize(notInserted.getStackSize()); + } + + FluidStack drained = fh.drain(this.getSide().getOpposite(), aeFluidStack.getFluidStack(), true); + if (drained.amount > 0) { + this.worked = true; } - } - return doBreak; + maxDrain -= drained.amount; + if (maxDrain <= 0) break; + } } return true; + return true; } @Override @@ -173,4 +178,9 @@ public void readFromNBT(NBTTagCompound extra) { } } } + + @Override + public IAEStackType getStackType() { + return FLUID_STACK_TYPE; + } } From 46f6dfef2e9ff4409348c5781a1a0018fba8e933 Mon Sep 17 00:00:00 2001 From: Kogepan229 Date: Thu, 27 Nov 2025 18:37:47 +0900 Subject: [PATCH 5/9] Fix rebase misstake --- .../com/glodblock/github/common/parts/PartFluidImportBus.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java b/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java index 07eb671f9..ccb66f474 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java @@ -129,7 +129,6 @@ protected boolean importStuff(final Object myTarget, final IAEFluidStack whatToI } return true; - return true; } @Override From f3e5797ec5989b83346b85b9ec013c275858069d Mon Sep 17 00:00:00 2001 From: Kogepan229 Date: Thu, 4 Dec 2025 17:22:02 +0900 Subject: [PATCH 6/9] Update Storage Monitor --- .../item/ItemFluidConversionMonitor.java | 7 + .../common/item/ItemFluidStorageMonitor.java | 7 + .../parts/PartFluidConversionMonitor.java | 153 ++---------------- .../common/parts/PartFluidStorageMonitor.java | 40 ++--- .../crossmod/waila/PartWailaDataProvider.java | 4 +- .../part/FluidMonitorWailaDataProvider.java | 47 ------ 6 files changed, 43 insertions(+), 215 deletions(-) delete mode 100644 src/main/java/com/glodblock/github/crossmod/waila/part/FluidMonitorWailaDataProvider.java diff --git a/src/main/java/com/glodblock/github/common/item/ItemFluidConversionMonitor.java b/src/main/java/com/glodblock/github/common/item/ItemFluidConversionMonitor.java index ae9dde556..e8185fb32 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemFluidConversionMonitor.java +++ b/src/main/java/com/glodblock/github/common/item/ItemFluidConversionMonitor.java @@ -3,9 +3,11 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; import net.minecraft.world.World; import com.glodblock.github.FluidCraft; +import com.glodblock.github.client.textures.FCPartsTexture; import com.glodblock.github.common.parts.PartFluidConversionMonitor; import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.util.NameConst; @@ -37,6 +39,11 @@ public ItemFluidConversionMonitor register() { return this; } + @Override + public IIcon getIconIndex(ItemStack p_77650_1_) { + return FCPartsTexture.PartTerminalBroad.getIcon(); + } + public void registerIcons(IIconRegister _iconRegister) {} @SideOnly(Side.CLIENT) diff --git a/src/main/java/com/glodblock/github/common/item/ItemFluidStorageMonitor.java b/src/main/java/com/glodblock/github/common/item/ItemFluidStorageMonitor.java index c5d0b33f1..4c1c47306 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemFluidStorageMonitor.java +++ b/src/main/java/com/glodblock/github/common/item/ItemFluidStorageMonitor.java @@ -3,9 +3,11 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; import net.minecraft.world.World; import com.glodblock.github.FluidCraft; +import com.glodblock.github.client.textures.FCPartsTexture; import com.glodblock.github.common.parts.PartFluidStorageMonitor; import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.util.NameConst; @@ -37,6 +39,11 @@ public ItemFluidStorageMonitor register() { return this; } + @Override + public IIcon getIconIndex(ItemStack p_77650_1_) { + return FCPartsTexture.PartTerminalBroad.getIcon(); + } + public void registerIcons(IIconRegister _iconRegister) {} @SideOnly(Side.CLIENT) diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidConversionMonitor.java b/src/main/java/com/glodblock/github/common/parts/PartFluidConversionMonitor.java index a92043c5b..29918c6ae 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidConversionMonitor.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidConversionMonitor.java @@ -1,157 +1,28 @@ package com.glodblock.github.common.parts; -import java.util.Collections; -import java.util.List; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.Vec3; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidContainerItem; +import net.minecraft.nbt.NBTTagCompound; -import org.apache.commons.lang3.tuple.MutablePair; +import appeng.parts.reporting.PartConversionMonitor; -import com.glodblock.github.common.item.ItemFluidPacket; -import com.glodblock.github.util.Util; - -import appeng.api.config.Actionable; -import appeng.api.networking.energy.IEnergySource; -import appeng.api.networking.security.PlayerSource; -import appeng.api.storage.IMEMonitor; -import appeng.api.storage.data.IAEFluidStack; -import appeng.me.GridAccessException; -import appeng.util.InventoryAdaptor; -import appeng.util.Platform; - -public class PartFluidConversionMonitor extends PartFluidStorageMonitor { +public class PartFluidConversionMonitor extends PartConversionMonitor { public PartFluidConversionMonitor(ItemStack is) { super(is); } @Override - public boolean onPartShiftActivate(final EntityPlayer player, final Vec3 pos) { - if (Platform.isClient()) { - return true; - } - - if (!this.getProxy().isActive()) { - return false; - } - - if (!Platform.hasPermissions(this.getLocation(), player)) { - return false; - } - FluidStack fluidStack; - ItemStack item = player.getCurrentEquippedItem(); - if (item != null && item.getItem() instanceof ItemFluidPacket) { - fluidStack = ItemFluidPacket.getFluidStack(item); - } else { - fluidStack = Util.FluidUtil.getFluidFromContainer(item); - } - if (this.getDisplayed() == null || fluidStack == null - || fluidStack.getFluid() != ((IAEFluidStack) this.getDisplayed()).getFluid()) { - return false; - } - - try { - if (!this.getProxy().isActive()) { - return false; + public void readFromNBT(NBTTagCompound data) { + // Migrate old tag + if (data.hasKey("configuredItem")) { + final NBTTagCompound myItem = data.getCompoundTag("configuredItem"); + if (!myItem.hasNoTags() && !myItem.hasKey("StackType")) { + myItem.setString("StackType", FLUID_STACK_TYPE.getId()); } - final IEnergySource energy = this.getProxy().getEnergy(); - final IMEMonitor cell = this.getProxy().getStorage().getFluidInventory(); - final IAEFluidStack input = (IAEFluidStack) this.getDisplayed().copy().setStackSize(fluidStack.amount); - final IAEFluidStack failedToInsert = Platform - .poweredInsert(energy, cell, input, new PlayerSource(player, this)); - if (failedToInsert != null && failedToInsert.getStackSize() == input.getStackSize()) { - return false; - } else if (failedToInsert == null || failedToInsert.getStackSize() != input.getStackSize()) { - if (item.getItem() instanceof ItemFluidPacket) { - if (failedToInsert != null) { - player.getCurrentEquippedItem() - .setTagCompound(ItemFluidPacket.newStack(failedToInsert).getTagCompound()); - return true; - } - } else { - ItemStack tmp = item.copy(); - tmp.stackSize = 1; - ItemStack tank = null; - if (failedToInsert == null) { - tank = Util.FluidUtil.clearFluid(tmp); - } else { - if (tmp.getItem() instanceof IFluidContainerItem) { - tank = Util.FluidUtil.setFluidContainerAmount(tmp, (int) failedToInsert.getStackSize()); - } else if (FluidContainerRegistry.isContainer(tmp)) { - IAEFluidStack insertedFluid = input.copy(); - insertedFluid.decStackSize(failedToInsert.getStackSize()); - this.getProxy().getStorage().getFluidInventory() - .extractItems(insertedFluid, Actionable.MODULATE, new PlayerSource(player, this)); - return false; - } - } - if (tank != null && !player.inventory.addItemStackToInventory(tank)) { - player.entityDropItem(tank, 0); - } - } - item.stackSize--; - if (item.stackSize <= 0) { - player.inventory.setInventorySlotContents(player.inventory.currentItem, null); - } - } - - } catch (final GridAccessException ignored) {} - return true; - } - - @Override - protected void extractItem(final EntityPlayer player) { - final IAEFluidStack input = (IAEFluidStack) this.getDisplayed(); - ItemStack eq = player.getCurrentEquippedItem(); - if (input != null && Util.FluidUtil.isFluidContainer(eq) && Util.FluidUtil.isEmpty(eq)) { - try { - if (!this.getProxy().isActive()) { - return; - } - - final IEnergySource energy = this.getProxy().getEnergy(); - final IMEMonitor cell = this.getProxy().getStorage().getFluidInventory(); - ItemStack tank = eq.copy(); - tank.stackSize = 1; - MutablePair fillStack = Util.FluidUtil.fillStack(tank, input.getFluidStack()); - input.setStackSize(fillStack.left); - - final IAEFluidStack retrieved = Platform - .poweredExtraction(energy, cell, input, new PlayerSource(player, this)); - if (retrieved != null) { - if (!player.inventory.addItemStackToInventory(fillStack.right)) { - player.entityDropItem(fillStack.right.copy(), 0); - } - eq.stackSize--; - if (eq.stackSize <= 0) { - player.inventory.setInventorySlotContents(player.inventory.currentItem, null); - } - final InventoryAdaptor adaptor = InventoryAdaptor.getAdaptor(player, ForgeDirection.UNKNOWN); - ItemStack newItems = adaptor.addItems( - Util.FluidUtil.setFluidContainerAmount(fillStack.right, (int) retrieved.getStackSize())); - if (newItems != null) { - final TileEntity te = this.getTile(); - final List list = Collections.singletonList(newItems); - Platform.spawnDrops( - player.worldObj, - te.xCoord + this.getSide().offsetX, - te.yCoord + this.getSide().offsetY, - te.zCoord + this.getSide().offsetZ, - list); - } - - if (player.openContainer != null) { - player.openContainer.detectAndSendChanges(); - } - } - } catch (final GridAccessException ignored) {} } + + super.readFromNBT(data); } } diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidStorageMonitor.java b/src/main/java/com/glodblock/github/common/parts/PartFluidStorageMonitor.java index 250898614..f20a74e9a 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidStorageMonitor.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidStorageMonitor.java @@ -1,36 +1,28 @@ package com.glodblock.github.common.parts; -import net.minecraft.item.ItemStack; - -import com.glodblock.github.common.parts.base.FCPartMonitor; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; -import appeng.client.texture.CableBusTextures; -import appeng.helpers.Reflected; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; -public class PartFluidStorageMonitor extends FCPartMonitor { +import appeng.parts.reporting.PartStorageMonitor; - private static final CableBusTextures FRONT_BRIGHT_ICON = CableBusTextures.PartStorageMonitor_Bright; - private static final CableBusTextures FRONT_DARK_ICON = CableBusTextures.PartStorageMonitor_Dark; - private static final CableBusTextures FRONT_COLORED_ICON = CableBusTextures.PartStorageMonitor_Colored; - private static final CableBusTextures FRONT_COLORED_ICON_LOCKED = CableBusTextures.PartStorageMonitor_Colored_Locked; +public class PartFluidStorageMonitor extends PartStorageMonitor { - @Reflected - public PartFluidStorageMonitor(final ItemStack is) { + public PartFluidStorageMonitor(ItemStack is) { super(is); } @Override - public CableBusTextures getFrontBright() { - return FRONT_BRIGHT_ICON; - } - - @Override - public CableBusTextures getFrontColored() { - return this.isLocked() ? FRONT_COLORED_ICON_LOCKED : FRONT_COLORED_ICON; - } - - @Override - public CableBusTextures getFrontDark() { - return FRONT_DARK_ICON; + public void readFromNBT(NBTTagCompound data) { + // Migrate old tag + if (data.hasKey("configuredItem")) { + final NBTTagCompound myItem = data.getCompoundTag("configuredItem"); + if (!myItem.hasNoTags() && !myItem.hasKey("StackType")) { + myItem.setString("StackType", FLUID_STACK_TYPE.getId()); + } + } + + super.readFromNBT(data); } } diff --git a/src/main/java/com/glodblock/github/crossmod/waila/PartWailaDataProvider.java b/src/main/java/com/glodblock/github/crossmod/waila/PartWailaDataProvider.java index b36d9848a..52d077239 100644 --- a/src/main/java/com/glodblock/github/crossmod/waila/PartWailaDataProvider.java +++ b/src/main/java/com/glodblock/github/crossmod/waila/PartWailaDataProvider.java @@ -10,7 +10,6 @@ import net.minecraft.world.World; import com.glodblock.github.crossmod.waila.part.FluidInvWailaDataProvider; -import com.glodblock.github.crossmod.waila.part.FluidMonitorWailaDataProvider; import com.glodblock.github.crossmod.waila.part.SpeedWailaDataProvider; import com.google.common.base.Optional; import com.google.common.collect.Lists; @@ -32,8 +31,7 @@ public class PartWailaDataProvider implements IWailaDataProvider { public PartWailaDataProvider() { final IPartWailaDataProvider speed = new SpeedWailaDataProvider(); final IPartWailaDataProvider fluidInv = new FluidInvWailaDataProvider(); - final IPartWailaDataProvider fluidMonitor = new FluidMonitorWailaDataProvider(); - this.providers = Lists.newArrayList(speed, fluidInv, fluidMonitor); + this.providers = Lists.newArrayList(speed, fluidInv); } @Override diff --git a/src/main/java/com/glodblock/github/crossmod/waila/part/FluidMonitorWailaDataProvider.java b/src/main/java/com/glodblock/github/crossmod/waila/part/FluidMonitorWailaDataProvider.java deleted file mode 100644 index ad85f6f23..000000000 --- a/src/main/java/com/glodblock/github/crossmod/waila/part/FluidMonitorWailaDataProvider.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.glodblock.github.crossmod.waila.part; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -import com.glodblock.github.common.parts.base.FCPartMonitor; -import com.glodblock.github.crossmod.waila.Tooltip; -import com.glodblock.github.util.Util; - -import appeng.api.parts.IPart; -import appeng.api.storage.data.IAEFluidStack; -import appeng.integration.modules.waila.part.BasePartWailaDataProvider; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class FluidMonitorWailaDataProvider extends BasePartWailaDataProvider { - - private final String key = "fluidStore"; - - @Override - public List getWailaBody(final IPart part, final List currentToolTip, - final IWailaDataAccessor accessor, final IWailaConfigHandler config) { - if (part instanceof FCPartMonitor && accessor.getNBTData().hasKey(key)) { - IAEFluidStack iaeFluidStack = Util.loadFluidStackFromNBT(accessor.getNBTData().getCompoundTag(key)); - if (iaeFluidStack != null) currentToolTip.add( - Tooltip.fluidFormat( - iaeFluidStack.getFluidStack().getLocalizedName(), - iaeFluidStack.getStackSize())); - } - return currentToolTip; - } - - @Override - public NBTTagCompound getNBTData(final EntityPlayerMP player, final IPart part, final TileEntity te, - final NBTTagCompound tag, final World world, final int x, final int y, final int z) { - if (part instanceof FCPartMonitor && ((FCPartMonitor) part).getAEStoreFluidStack() != null) { - NBTTagCompound data = new NBTTagCompound(); - ((FCPartMonitor) part).getAEStoreFluidStack().writeToNBT(data); - tag.setTag(key, data); - } - return tag; - } -} From 593313aadbe6c71feffe86514b06f1b47aec06f7 Mon Sep 17 00:00:00 2001 From: Kogepan229 Date: Fri, 19 Dec 2025 19:13:33 +0900 Subject: [PATCH 7/9] Remove unnecessary transformer --- gradle.properties | 2 +- .../glodblock/github/api/FluidCraftAPI.java | 2 +- .../gui/container/ContainerLevelTerminal.java | 2 +- .../github/coremod/FCClassTransformer.java | 53 ----------- .../github/coremod/FluidCraftCore.java | 48 ---------- .../github/coremod/hooker/CoreModHooks.java | 28 ------ .../coremod/hooker/CoreModHooksClient.java | 9 -- .../transform/GuiCraftingTransformer.java | 58 ------------ .../coremod/transform/NEITransformer.java | 93 ------------------- .../LevelTerminalRegistry.java | 2 +- 10 files changed, 4 insertions(+), 293 deletions(-) delete mode 100644 src/main/java/com/glodblock/github/coremod/FCClassTransformer.java delete mode 100644 src/main/java/com/glodblock/github/coremod/FluidCraftCore.java delete mode 100644 src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java delete mode 100644 src/main/java/com/glodblock/github/coremod/hooker/CoreModHooksClient.java delete mode 100644 src/main/java/com/glodblock/github/coremod/transform/GuiCraftingTransformer.java delete mode 100644 src/main/java/com/glodblock/github/coremod/transform/NEITransformer.java rename src/main/java/com/glodblock/github/{coremod/registries => util}/LevelTerminalRegistry.java (97%) diff --git a/gradle.properties b/gradle.properties index b7f8f5bc1..a6c8f1d81 100644 --- a/gradle.properties +++ b/gradle.properties @@ -104,7 +104,7 @@ mixinsPackage = # Specify the core mod entry class if you use a core mod. This class must implement IFMLLoadingPlugin! # This parameter is for legacy compatibility only # Example value: (coreModClass = asm.FMLPlugin) + (modGroup = com.myname.mymodid) -> com.myname.mymodid.asm.FMLPlugin -coreModClass = coremod.FluidCraftCore +coreModClass = # If your project is only a consolidation of mixins or a core mod and does NOT contain a 'normal' mod ( = some class # that is annotated with @Mod) you want this to be true. When in doubt: leave it on false! diff --git a/src/main/java/com/glodblock/github/api/FluidCraftAPI.java b/src/main/java/com/glodblock/github/api/FluidCraftAPI.java index 003964247..b8dcd2c6f 100644 --- a/src/main/java/com/glodblock/github/api/FluidCraftAPI.java +++ b/src/main/java/com/glodblock/github/api/FluidCraftAPI.java @@ -6,7 +6,7 @@ import net.minecraftforge.fluids.Fluid; import com.glodblock.github.api.registries.ILevelTerminalRegistry; -import com.glodblock.github.coremod.registries.LevelTerminalRegistry; +import com.glodblock.github.util.LevelTerminalRegistry; public final class FluidCraftAPI implements IFluidCraftAPI { diff --git a/src/main/java/com/glodblock/github/client/gui/container/ContainerLevelTerminal.java b/src/main/java/com/glodblock/github/client/gui/container/ContainerLevelTerminal.java index bd83b6744..af21b1c22 100644 --- a/src/main/java/com/glodblock/github/client/gui/container/ContainerLevelTerminal.java +++ b/src/main/java/com/glodblock/github/client/gui/container/ContainerLevelTerminal.java @@ -16,12 +16,12 @@ import com.glodblock.github.FluidCraft; import com.glodblock.github.client.gui.container.base.FCBaseContainer; import com.glodblock.github.common.parts.PartLevelTerminal; -import com.glodblock.github.coremod.registries.LevelTerminalRegistry; import com.glodblock.github.inventory.gui.GuiType; import com.glodblock.github.inventory.item.IWirelessTerminal; import com.glodblock.github.loader.ItemAndBlockHolder; import com.glodblock.github.network.SPacketLevelTerminalUpdate; import com.glodblock.github.util.FluidPrimaryGui; +import com.glodblock.github.util.LevelTerminalRegistry; import appeng.api.features.ILevelViewable; import appeng.api.features.LevelItemInfo; diff --git a/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java b/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java deleted file mode 100644 index 99add6c32..000000000 --- a/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.glodblock.github.coremod; - -import net.minecraft.launchwrapper.IClassTransformer; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.ClassWriter; - -import com.glodblock.github.coremod.transform.GuiCraftingTransformer; -import com.glodblock.github.coremod.transform.NEITransformer; -import com.gtnewhorizon.gtnhlib.asm.ASMUtil; - -public class FCClassTransformer implements IClassTransformer { - - private static final Logger logger = LogManager.getLogger("ASM AE2FC"); - - @Override - public byte[] transform(String name, String transformedName, byte[] basicClass) { - ClassMapper tform; - switch (transformedName) { - case "appeng.client.gui.implementations.GuiCraftingCPU", "appeng.client.gui.implementations.GuiCraftConfirm", "net.p455w0rd.wirelesscraftingterminal.client.gui.GuiCraftConfirm", "appeng.client.gui.widgets.GuiCraftingTree" -> tform = GuiCraftingTransformer.INSTANCE; - case "appeng.integration.modules.NEI" -> tform = NEITransformer.INSTANCE; - default -> { - return basicClass; - } - } - logger.debug("Transforming class: " + transformedName); - final byte[] bytes = tform.transformClass(basicClass); - if (FluidCraftCore.DUMP_CLASSES()) { - ASMUtil.saveAsRawClassFile(basicClass, transformedName + "_PRE", this); - ASMUtil.saveAsRawClassFile(bytes, transformedName + "_POST", this); - } - return bytes; - } - - public abstract static class ClassMapper { - - public final byte[] transformClass(byte[] code) { - ClassReader reader = new ClassReader(code); - ClassWriter writer = new ClassWriter(reader, getWriteFlags()); - reader.accept(getClassMapper(writer), ClassReader.EXPAND_FRAMES); - return writer.toByteArray(); - } - - protected int getWriteFlags() { - return 0; - } - - protected abstract ClassVisitor getClassMapper(ClassVisitor downstream); - } -} diff --git a/src/main/java/com/glodblock/github/coremod/FluidCraftCore.java b/src/main/java/com/glodblock/github/coremod/FluidCraftCore.java deleted file mode 100644 index 6f9b97a94..000000000 --- a/src/main/java/com/glodblock/github/coremod/FluidCraftCore.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.glodblock.github.coremod; - -import java.util.Map; - -import javax.annotation.Nullable; - -import cpw.mods.fml.relauncher.IFMLLoadingPlugin; - -@IFMLLoadingPlugin.Name("FluidCraftCore") -@IFMLLoadingPlugin.MCVersion("1.7.10") -@IFMLLoadingPlugin.TransformerExclusions("com.glodblock.github.coremod") -public class FluidCraftCore implements IFMLLoadingPlugin { - - private static final boolean DUMP_CLASSES = Boolean.parseBoolean(System.getProperty("ae2fc.dumpClass", "false")); - private static boolean OBF_ENV; - - @Override - public String[] getASMTransformerClass() { - return new String[] { FCClassTransformer.class.getName() }; - } - - @Nullable - @Override - public String getModContainerClass() { - return null; - } - - @Nullable - @Override - public String getSetupClass() { - return null; - } - - @Override - public void injectData(Map data) { - OBF_ENV = (boolean) data.get("runtimeDeobfuscationEnabled"); - } - - @Nullable - @Override - public String getAccessTransformerClass() { - return null; - } - - public static boolean DUMP_CLASSES() { - return DUMP_CLASSES || !OBF_ENV; - } -} diff --git a/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java b/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java deleted file mode 100644 index 7a98dd7bb..000000000 --- a/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.glodblock.github.coremod.hooker; - -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import com.glodblock.github.common.item.ItemFluidDrop; -import com.glodblock.github.common.item.ItemFluidPacket; - -import appeng.api.storage.data.IAEItemStack; -import appeng.client.gui.IGuiTooltipHandler; - -public class CoreModHooks { - - public static ItemStack displayFluid(IAEItemStack aeStack) { - if (aeStack.getItemStack() != null && aeStack.getItemStack().getItem() instanceof ItemFluidDrop) { - FluidStack fluid = ItemFluidDrop.getFluidStack(aeStack.getItemStack()); - return ItemFluidPacket.newDisplayStack(fluid); - } else return aeStack.getItemStack(); - } - - public static ItemStack getStackUnderMouse(GuiContainer gui, int mousex, int mousey) { - if (gui instanceof IGuiTooltipHandler guiTooltipHandler) { - return guiTooltipHandler.getHoveredStack(); - } - return null; - } -} diff --git a/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooksClient.java b/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooksClient.java deleted file mode 100644 index bf94e47fb..000000000 --- a/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooksClient.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.glodblock.github.coremod.hooker; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class CoreModHooksClient { - -} diff --git a/src/main/java/com/glodblock/github/coremod/transform/GuiCraftingTransformer.java b/src/main/java/com/glodblock/github/coremod/transform/GuiCraftingTransformer.java deleted file mode 100644 index da1874e3a..000000000 --- a/src/main/java/com/glodblock/github/coremod/transform/GuiCraftingTransformer.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.glodblock.github.coremod.transform; - -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -import com.glodblock.github.coremod.FCClassTransformer; - -public class GuiCraftingTransformer extends FCClassTransformer.ClassMapper { - - public static final GuiCraftingTransformer INSTANCE = new GuiCraftingTransformer(); - - private GuiCraftingTransformer() { - // NO-OP - } - - @Override - protected ClassVisitor getClassMapper(ClassVisitor downstream) { - return new TransformGuiCrafting(Opcodes.ASM5, downstream); - } - - private static class TransformGuiCrafting extends ClassVisitor { - - TransformGuiCrafting(int api, ClassVisitor cv) { - super(api, cv); - } - - @Override - public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { - if ("drawFG".equals(name) || "drawListFG".equals(name) || "drawStack".equals(name)) { - return new TransformFluidIcon(api, super.visitMethod(access, name, desc, signature, exceptions)); - } - return super.visitMethod(access, name, desc, signature, exceptions); - } - } - - private static class TransformFluidIcon extends MethodVisitor { - - TransformFluidIcon(int api, MethodVisitor mv) { - super(api, mv); - } - - @Override - public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) { - if (opcode == Opcodes.INVOKEINTERFACE && owner.equals("appeng/api/storage/data/IAEItemStack") - && name.equals("getItemStack")) { - super.visitMethodInsn( - Opcodes.INVOKESTATIC, - "com/glodblock/github/coremod/hooker/CoreModHooks", - "displayFluid", - "(Lappeng/api/storage/data/IAEItemStack;)Lnet/minecraft/item/ItemStack;", - false); - } else { - super.visitMethodInsn(opcode, owner, name, desc, itf); - } - } - } -} diff --git a/src/main/java/com/glodblock/github/coremod/transform/NEITransformer.java b/src/main/java/com/glodblock/github/coremod/transform/NEITransformer.java deleted file mode 100644 index 4a596367e..000000000 --- a/src/main/java/com/glodblock/github/coremod/transform/NEITransformer.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.glodblock.github.coremod.transform; - -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -import com.glodblock.github.coremod.FCClassTransformer; - -public class NEITransformer extends FCClassTransformer.ClassMapper { - - public static final NEITransformer INSTANCE = new NEITransformer(); - - private NEITransformer() { - // NO-OP - } - - @Override - 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 switch (name) { - case "getStackUnderMouse" -> new TransformStackUnderMouse( - api, - super.visitMethod(access, name, desc, signature, exceptions)); - case "shouldShowTooltip" -> new TransformShowTooltip( - api, - super.visitMethod(access, name, desc, signature, exceptions)); - default -> 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); - } - } -} diff --git a/src/main/java/com/glodblock/github/coremod/registries/LevelTerminalRegistry.java b/src/main/java/com/glodblock/github/util/LevelTerminalRegistry.java similarity index 97% rename from src/main/java/com/glodblock/github/coremod/registries/LevelTerminalRegistry.java rename to src/main/java/com/glodblock/github/util/LevelTerminalRegistry.java index 480c1c607..8e2c312a9 100644 --- a/src/main/java/com/glodblock/github/coremod/registries/LevelTerminalRegistry.java +++ b/src/main/java/com/glodblock/github/util/LevelTerminalRegistry.java @@ -1,4 +1,4 @@ -package com.glodblock.github.coremod.registries; +package com.glodblock.github.util; import java.util.HashSet; import java.util.Map; From 40ff7575cb49e235c59725d9024607417b57a63f Mon Sep 17 00:00:00 2001 From: Kogepan229 Date: Sun, 11 Jan 2026 14:52:53 +0900 Subject: [PATCH 8/9] fix --- .../glodblock/github/common/parts/PartFluidExportBus.java | 5 ----- .../glodblock/github/common/parts/PartFluidImportBus.java | 7 +------ 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidExportBus.java b/src/main/java/com/glodblock/github/common/parts/PartFluidExportBus.java index e02b2d7f3..c4628d04e 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidExportBus.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidExportBus.java @@ -74,11 +74,6 @@ protected IMEMonitor getMonitor() { } } - @Override - protected int getAdaptorFlags() { - return InventoryAdaptor.DEFAULT & ~InventoryAdaptor.ALLOW_ITEMS; - } - @Override protected void doFuzzy(IAEFluidStack aes, FuzzyMode fzMode, IEnergyGrid energy, IMEMonitor gridInv) {} diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java b/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java index a83142c29..f8371dfca 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java @@ -90,7 +90,7 @@ protected IMEMonitor getMonitor() { @Override protected int getAdaptorFlags() { - return InventoryAdaptor.DEFAULT & ~InventoryAdaptor.ALLOW_ITEMS; + return InventoryAdaptor.ALLOW_FLUIDS | InventoryAdaptor.FOR_EXTRACTS; } @Override @@ -174,11 +174,6 @@ public void readFromNBT(NBTTagCompound extra) { } } - @Override - protected int getAdaptorFlags() { - return InventoryAdaptor.ALLOW_FLUIDS | InventoryAdaptor.FOR_EXTRACTS; - } - @Override public IAEStackType getStackType() { return FLUID_STACK_TYPE; From ae2e402fee3aa6eea2d93b710762955c623e9324 Mon Sep 17 00:00:00 2001 From: Kogepan229 Date: Sat, 17 Jan 2026 22:41:58 +0900 Subject: [PATCH 9/9] Delete transformers --- gradle.properties | 2 +- .../github/coremod/FCClassTransformer.java | 55 --------- .../github/coremod/FluidCraftCore.java | 48 -------- .../github/coremod/hooker/CoreModHooks.java | 28 ----- .../coremod/hooker/CoreModHooksClient.java | 9 -- .../ExternalStorageRegistryTransformer.java | 104 ------------------ .../transform/GuiCraftingTransformer.java | 58 ---------- .../coremod/transform/NEITransformer.java | 62 ----------- 8 files changed, 1 insertion(+), 365 deletions(-) delete mode 100644 src/main/java/com/glodblock/github/coremod/FCClassTransformer.java delete mode 100644 src/main/java/com/glodblock/github/coremod/FluidCraftCore.java delete mode 100644 src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java delete mode 100644 src/main/java/com/glodblock/github/coremod/hooker/CoreModHooksClient.java delete mode 100644 src/main/java/com/glodblock/github/coremod/transform/ExternalStorageRegistryTransformer.java delete mode 100644 src/main/java/com/glodblock/github/coremod/transform/GuiCraftingTransformer.java delete mode 100644 src/main/java/com/glodblock/github/coremod/transform/NEITransformer.java diff --git a/gradle.properties b/gradle.properties index 8cfe02e31..3b43a3139 100644 --- a/gradle.properties +++ b/gradle.properties @@ -108,7 +108,7 @@ mixinsPackage = # Specify the core mod entry class if you use a core mod. This class must implement IFMLLoadingPlugin! # This parameter is for legacy compatibility only # Example value: (coreModClass = asm.FMLPlugin) + (modGroup = com.myname.mymodid) -> com.myname.mymodid.asm.FMLPlugin -coreModClass = coremod.FluidCraftCore +coreModClass = # If your project is only a consolidation of mixins or a core mod and does NOT contain a 'normal' mod ( = some class # that is annotated with @Mod) you want this to be true. When in doubt: leave it on false! diff --git a/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java b/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java deleted file mode 100644 index ebd48a06e..000000000 --- a/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.glodblock.github.coremod; - -import net.minecraft.launchwrapper.IClassTransformer; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.ClassWriter; - -import com.glodblock.github.coremod.transform.ExternalStorageRegistryTransformer; -import com.glodblock.github.coremod.transform.GuiCraftingTransformer; -import com.glodblock.github.coremod.transform.NEITransformer; -import com.gtnewhorizon.gtnhlib.asm.ASMUtil; - -public class FCClassTransformer implements IClassTransformer { - - private static final Logger logger = LogManager.getLogger("ASM AE2FC"); - - @Override - public byte[] transform(String name, String transformedName, byte[] basicClass) { - ClassMapper tform; - switch (transformedName) { - case "appeng.client.gui.implementations.GuiCraftingCPU", "appeng.client.gui.implementations.GuiCraftConfirm", "net.p455w0rd.wirelesscraftingterminal.client.gui.GuiCraftConfirm", "appeng.client.gui.widgets.GuiCraftingTree" -> tform = GuiCraftingTransformer.INSTANCE; - case "appeng.integration.modules.NEI" -> tform = NEITransformer.INSTANCE; - case "appeng.core.features.registries.ExternalStorageRegistry" -> tform = ExternalStorageRegistryTransformer.INSTANCE; - default -> { - return basicClass; - } - } - logger.debug("Transforming class: " + transformedName); - final byte[] bytes = tform.transformClass(basicClass); - if (FluidCraftCore.DUMP_CLASSES()) { - ASMUtil.saveAsRawClassFile(basicClass, transformedName + "_PRE", this); - ASMUtil.saveAsRawClassFile(bytes, transformedName + "_POST", this); - } - return bytes; - } - - public abstract static class ClassMapper { - - public final byte[] transformClass(byte[] code) { - ClassReader reader = new ClassReader(code); - ClassWriter writer = new ClassWriter(reader, getWriteFlags()); - reader.accept(getClassMapper(writer), ClassReader.EXPAND_FRAMES); - return writer.toByteArray(); - } - - protected int getWriteFlags() { - return 0; - } - - protected abstract ClassVisitor getClassMapper(ClassVisitor downstream); - } -} diff --git a/src/main/java/com/glodblock/github/coremod/FluidCraftCore.java b/src/main/java/com/glodblock/github/coremod/FluidCraftCore.java deleted file mode 100644 index 6f9b97a94..000000000 --- a/src/main/java/com/glodblock/github/coremod/FluidCraftCore.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.glodblock.github.coremod; - -import java.util.Map; - -import javax.annotation.Nullable; - -import cpw.mods.fml.relauncher.IFMLLoadingPlugin; - -@IFMLLoadingPlugin.Name("FluidCraftCore") -@IFMLLoadingPlugin.MCVersion("1.7.10") -@IFMLLoadingPlugin.TransformerExclusions("com.glodblock.github.coremod") -public class FluidCraftCore implements IFMLLoadingPlugin { - - private static final boolean DUMP_CLASSES = Boolean.parseBoolean(System.getProperty("ae2fc.dumpClass", "false")); - private static boolean OBF_ENV; - - @Override - public String[] getASMTransformerClass() { - return new String[] { FCClassTransformer.class.getName() }; - } - - @Nullable - @Override - public String getModContainerClass() { - return null; - } - - @Nullable - @Override - public String getSetupClass() { - return null; - } - - @Override - public void injectData(Map data) { - OBF_ENV = (boolean) data.get("runtimeDeobfuscationEnabled"); - } - - @Nullable - @Override - public String getAccessTransformerClass() { - return null; - } - - public static boolean DUMP_CLASSES() { - return DUMP_CLASSES || !OBF_ENV; - } -} diff --git a/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java b/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java deleted file mode 100644 index 7a98dd7bb..000000000 --- a/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.glodblock.github.coremod.hooker; - -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import com.glodblock.github.common.item.ItemFluidDrop; -import com.glodblock.github.common.item.ItemFluidPacket; - -import appeng.api.storage.data.IAEItemStack; -import appeng.client.gui.IGuiTooltipHandler; - -public class CoreModHooks { - - public static ItemStack displayFluid(IAEItemStack aeStack) { - if (aeStack.getItemStack() != null && aeStack.getItemStack().getItem() instanceof ItemFluidDrop) { - FluidStack fluid = ItemFluidDrop.getFluidStack(aeStack.getItemStack()); - return ItemFluidPacket.newDisplayStack(fluid); - } else return aeStack.getItemStack(); - } - - public static ItemStack getStackUnderMouse(GuiContainer gui, int mousex, int mousey) { - if (gui instanceof IGuiTooltipHandler guiTooltipHandler) { - return guiTooltipHandler.getHoveredStack(); - } - return null; - } -} diff --git a/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooksClient.java b/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooksClient.java deleted file mode 100644 index bf94e47fb..000000000 --- a/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooksClient.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.glodblock.github.coremod.hooker; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class CoreModHooksClient { - -} diff --git a/src/main/java/com/glodblock/github/coremod/transform/ExternalStorageRegistryTransformer.java b/src/main/java/com/glodblock/github/coremod/transform/ExternalStorageRegistryTransformer.java deleted file mode 100644 index 0ad99cc65..000000000 --- a/src/main/java/com/glodblock/github/coremod/transform/ExternalStorageRegistryTransformer.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.glodblock.github.coremod.transform; - -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.Label; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -import com.glodblock.github.coremod.FCClassTransformer; - -public class ExternalStorageRegistryTransformer extends FCClassTransformer.ClassMapper { - - public static final ExternalStorageRegistryTransformer INSTANCE = new ExternalStorageRegistryTransformer(); - - private ExternalStorageRegistryTransformer() { - // NO-OP - } - - @Override - protected ClassVisitor getClassMapper(ClassVisitor downstream) { - return new TransformExternalStorageRegistry(Opcodes.ASM5, downstream); - } - - @Override - protected int getWriteFlags() { - return ClassWriter.COMPUTE_FRAMES; - } - - private static class TransformExternalStorageRegistry extends ClassVisitor { - - public TransformExternalStorageRegistry(int api, ClassVisitor cv) { - super(api, cv); - } - - @Override - public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { - if ("getHandler".equals(name)) { - return new TransformGetHandler(api, super.visitMethod(access, name, desc, signature, exceptions)); - } else { - return super.visitMethod(access, name, desc, signature, exceptions); - } - } - } - - private static class TransformGetHandler extends MethodVisitor { - - private int cnt_return = 0; - private int cnt_if = 0; - private Label L6 = null; - private final Label L9 = new Label(); - - TransformGetHandler(int api, MethodVisitor mv) { - super(api, mv); - } - - @Override - public void visitJumpInsn(int opcode, Label label) { - if (opcode == Opcodes.IFEQ) { - cnt_if++; - } - if (cnt_if == 3) { - L6 = label; - cnt_if++; - super.visitJumpInsn(opcode, L9); - return; - } - super.visitJumpInsn(opcode, label); - } - - @Override - public void visitInsn(int opcode) { - if (opcode == Opcodes.ARETURN) { - cnt_return++; - } - super.visitInsn(opcode); - if (cnt_return == 2) { - super.visitLabel(L9); - super.visitFieldInsn( - Opcodes.GETSTATIC, - "com/glodblock/github/inventory/external/AEFluidTankHandler", - "INSTANCE", - "Lcom/glodblock/github/inventory/external/AEFluidTankHandler;"); - super.visitVarInsn(Opcodes.ALOAD, 1); - super.visitVarInsn(Opcodes.ALOAD, 2); - super.visitVarInsn(Opcodes.ALOAD, 3); - super.visitVarInsn(Opcodes.ALOAD, 4); - super.visitMethodInsn( - Opcodes.INVOKEVIRTUAL, - "com/glodblock/github/inventory/external/AEFluidTankHandler", - "canHandle", - "(Lnet/minecraft/tileentity/TileEntity;Lnet/minecraftforge/common/util/ForgeDirection;Lappeng/api/storage/StorageChannel;Lappeng/api/networking/security/BaseActionSource;)Z", - false); - super.visitJumpInsn(Opcodes.IFEQ, L6); - super.visitFieldInsn( - Opcodes.GETSTATIC, - "com/glodblock/github/inventory/external/AEFluidTankHandler", - "INSTANCE", - "Lcom/glodblock/github/inventory/external/AEFluidTankHandler;"); - super.visitInsn(Opcodes.ARETURN); - cnt_return++; - } - } - } -} diff --git a/src/main/java/com/glodblock/github/coremod/transform/GuiCraftingTransformer.java b/src/main/java/com/glodblock/github/coremod/transform/GuiCraftingTransformer.java deleted file mode 100644 index da1874e3a..000000000 --- a/src/main/java/com/glodblock/github/coremod/transform/GuiCraftingTransformer.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.glodblock.github.coremod.transform; - -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -import com.glodblock.github.coremod.FCClassTransformer; - -public class GuiCraftingTransformer extends FCClassTransformer.ClassMapper { - - public static final GuiCraftingTransformer INSTANCE = new GuiCraftingTransformer(); - - private GuiCraftingTransformer() { - // NO-OP - } - - @Override - protected ClassVisitor getClassMapper(ClassVisitor downstream) { - return new TransformGuiCrafting(Opcodes.ASM5, downstream); - } - - private static class TransformGuiCrafting extends ClassVisitor { - - TransformGuiCrafting(int api, ClassVisitor cv) { - super(api, cv); - } - - @Override - public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { - if ("drawFG".equals(name) || "drawListFG".equals(name) || "drawStack".equals(name)) { - return new TransformFluidIcon(api, super.visitMethod(access, name, desc, signature, exceptions)); - } - return super.visitMethod(access, name, desc, signature, exceptions); - } - } - - private static class TransformFluidIcon extends MethodVisitor { - - TransformFluidIcon(int api, MethodVisitor mv) { - super(api, mv); - } - - @Override - public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) { - if (opcode == Opcodes.INVOKEINTERFACE && owner.equals("appeng/api/storage/data/IAEItemStack") - && name.equals("getItemStack")) { - super.visitMethodInsn( - Opcodes.INVOKESTATIC, - "com/glodblock/github/coremod/hooker/CoreModHooks", - "displayFluid", - "(Lappeng/api/storage/data/IAEItemStack;)Lnet/minecraft/item/ItemStack;", - false); - } else { - super.visitMethodInsn(opcode, owner, name, desc, itf); - } - } - } -} diff --git a/src/main/java/com/glodblock/github/coremod/transform/NEITransformer.java b/src/main/java/com/glodblock/github/coremod/transform/NEITransformer.java deleted file mode 100644 index 6c8a8dc77..000000000 --- a/src/main/java/com/glodblock/github/coremod/transform/NEITransformer.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.glodblock.github.coremod.transform; - -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -import com.glodblock.github.coremod.FCClassTransformer; - -public class NEITransformer extends FCClassTransformer.ClassMapper { - - public static final NEITransformer INSTANCE = new NEITransformer(); - - private NEITransformer() { - // NO-OP - } - - @Override - 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 switch (name) { - case "getStackUnderMouse" -> new TransformStackUnderMouse( - api, - super.visitMethod(access, name, desc, signature, exceptions)); - default -> 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); - } - } -}