From 4903b2e189ca526e524345ba7a6f8fe731af501a Mon Sep 17 00:00:00 2001 From: R-Kaenbyou <152870189+R-Kaenbyou@users.noreply.github.com> Date: Sat, 23 Aug 2025 20:18:37 -0700 Subject: [PATCH 1/6] Update TileEntityMachineArcFurnaceLarge.java --- .../tileentity/machine/TileEntityMachineArcFurnaceLarge.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java index 6c9be1f71..7af24b639 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java @@ -29,6 +29,7 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CrucibleUtil; +import com.hbm.util.ItemStackUtil; import com.hbm.util.fauxpointtwelve.DirPos; import com.hbm.util.i18n.I18nUtil; @@ -400,6 +401,8 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl liquids.add(matStack.copy()); } + + public static int getStackAmount(List stack) { int amount = 0; for(MaterialStack mat : stack) amount += mat.amount; From 52149b098e05c470decc74d733d8d46dde548cb8 Mon Sep 17 00:00:00 2001 From: R-Kaenbyou <152870189+R-Kaenbyou@users.noreply.github.com> Date: Sat, 23 Aug 2025 20:31:37 -0700 Subject: [PATCH 2/6] Update AE2CompatHandler.java --- src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java b/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java index b40571179..968899426 100644 --- a/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java +++ b/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java @@ -14,5 +14,6 @@ public class AE2CompatHandler { @Optional.Method(modid = "appliedenergistics2") private static void registerHandler() { AEApi.instance().registries().externalStorage().addExternalStorageInterface(new MSUExternalStorageHandler()); + AEApi.instance().registries().externalStorage().addExternalStorageInterface(new AFLExternalStorageHandler()); } } From 0a99397f3067c658b21c423a9734dbe39939dc40 Mon Sep 17 00:00:00 2001 From: R-Kaenbyou <152870189+R-Kaenbyou@users.noreply.github.com> Date: Sat, 23 Aug 2025 20:34:07 -0700 Subject: [PATCH 3/6] Add files via upload --- .../ae2/AFLExternalStorageHandler.java | 34 +++++++++++ .../ae2/ArcFurnaceLargeMEInventory.java | 60 +++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 src/main/java/com/hbm/handler/ae2/AFLExternalStorageHandler.java create mode 100644 src/main/java/com/hbm/handler/ae2/ArcFurnaceLargeMEInventory.java diff --git a/src/main/java/com/hbm/handler/ae2/AFLExternalStorageHandler.java b/src/main/java/com/hbm/handler/ae2/AFLExternalStorageHandler.java new file mode 100644 index 000000000..37ff769e3 --- /dev/null +++ b/src/main/java/com/hbm/handler/ae2/AFLExternalStorageHandler.java @@ -0,0 +1,34 @@ +package com.hbm.handler.ae2; + +import com.hbm.tileentity.machine.TileEntityMachineArcFurnaceLarge; +import com.hbm.tileentity.TileEntityProxyCombo; +import cpw.mods.fml.common.Optional; + +import appeng.api.networking.security.BaseActionSource; +import appeng.api.storage.IExternalStorageHandler; +import appeng.api.storage.IMEInventory; +import appeng.api.storage.StorageChannel; +import appeng.me.storage.MEMonitorIInventory; +import appeng.util.inv.IMEAdaptor; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +@Optional.InterfaceList({@Optional.Interface(iface = "appeng.api.storage.IExternalStorageHandler", modid = "appliedenergistics2")}) +public class AFLExternalStorageHandler implements IExternalStorageHandler { + + public AFLExternalStorageHandler() {} + + @Override + public boolean canHandle(TileEntity te, ForgeDirection d, StorageChannel channel, BaseActionSource mySrc) { + boolean coreProxy = te instanceof TileEntityProxyCombo && ((TileEntityProxyCombo) te).getTile() instanceof TileEntityMachineArcFurnaceLarge; + return channel == StorageChannel.ITEMS && (te instanceof TileEntityMachineArcFurnaceLarge || coreProxy); + } + + @Override + public IMEInventory getInventory(TileEntity te, ForgeDirection d, StorageChannel channel, BaseActionSource src) { + if (!canHandle(te, d, channel, src)) return null; + if (te instanceof TileEntityProxyCombo) return new MEMonitorIInventory(new IMEAdaptor(new ArcFurnaceLargeMEInventory((TileEntityMachineArcFurnaceLarge) ((TileEntityProxyCombo)te).getTile()), src)) {}; + return new MEMonitorIInventory(new IMEAdaptor(new ArcFurnaceLargeMEInventory((TileEntityMachineArcFurnaceLarge) te), src)) {}; + } + +} diff --git a/src/main/java/com/hbm/handler/ae2/ArcFurnaceLargeMEInventory.java b/src/main/java/com/hbm/handler/ae2/ArcFurnaceLargeMEInventory.java new file mode 100644 index 000000000..5698bebed --- /dev/null +++ b/src/main/java/com/hbm/handler/ae2/ArcFurnaceLargeMEInventory.java @@ -0,0 +1,60 @@ +package com.hbm.handler.ae2; + +import com.hbm.tileentity.machine.TileEntityMachineArcFurnaceLarge; +import com.hbm.tileentity.TileEntityProxyCombo; + +import cpw.mods.fml.common.Optional; + +import appeng.api.AEApi; +import appeng.api.config.Actionable; +import appeng.api.networking.security.BaseActionSource; +import appeng.api.storage.IMEInventory; +import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEItemStack; +import appeng.api.storage.data.IItemList; +import net.minecraft.item.ItemStack; + +@Optional.InterfaceList({@Optional.Interface(iface = "appeng.api.storage.IMEInventory", modid = "appliedenergistics2")}) +public class ArcFurnaceLargeMEInventory implements IMEInventory { + + private TileEntityMachineArcFurnaceLarge afl; + + public ArcFurnaceLargeMEInventory(TileEntityMachineArcFurnaceLarge afl) { + this.afl = afl; + } + + @Override + public IAEItemStack injectItems(IAEItemStack input, Actionable type, BaseActionSource src) { + ItemStack is = input.getItemStack(); + is = afl.distributeInput(is, type == Actionable.MODULATE); + + if(is == null) return null; + return AEApi.instance().storage().createItemStack(is); + } + + @Override + public IAEItemStack extractItems(IAEItemStack request, Actionable mode, BaseActionSource src) { + ItemStack is = request.getItemStack(); + is = afl.collectRequested(is, mode == Actionable.MODULATE); + + if(is == null) return null; + return AEApi.instance().storage().createItemStack(is); + } + + @Override + public IItemList getAvailableItems(IItemList out) { + ItemStack is; + for(int i = 0; i < 25; i++) { + is = afl.getAvailableItemFromSlot(i); + if(is != null) out.add(AEApi.instance().storage().createItemStack(is)); + } + + return out; + } + + @Override + public StorageChannel getChannel() { + return StorageChannel.ITEMS; + } + +} From 13b398882988caf079a8e2e0533297f5da0ac6a9 Mon Sep 17 00:00:00 2001 From: R-Kaenbyou <152870189+R-Kaenbyou@users.noreply.github.com> Date: Sat, 23 Aug 2025 20:42:15 -0700 Subject: [PATCH 4/6] Update ContainerMachineArcFurnaceLarge.java --- .../inventory/container/ContainerMachineArcFurnaceLarge.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnaceLarge.java b/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnaceLarge.java index 12318fe1d..05109bac9 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnaceLarge.java @@ -65,11 +65,12 @@ public class ContainerMachineArcFurnaceLarge extends Container { } else if(rStack.getItem() instanceof ItemMachineUpgrade) { if(!InventoryUtil.mergeItemStack(this.inventorySlots, stack, 4, 5, false)) return null; } else { - if(!InventoryUtil.mergeItemStack(this.inventorySlots, stack, 5, 25, false)) return null; + stack = furnace.distributeInput(stack, true); + if(stack != null && stack.stackSize == rStack.stackSize) return null; } } - if(stack.stackSize == 0) { + if(stack == null || stack.stackSize == 0) { slot.putStack((ItemStack) null); } else { slot.onSlotChanged(); From f0bd84fa477ea44afde2fb09b8ce6067c17962f7 Mon Sep 17 00:00:00 2001 From: R-Kaenbyou <152870189+R-Kaenbyou@users.noreply.github.com> Date: Sat, 23 Aug 2025 21:02:52 -0700 Subject: [PATCH 5/6] Update TileEntityMachineArcFurnaceLarge.java From 14f7668a9a28f0b99bb8c2be240d5628fdc16f1e Mon Sep 17 00:00:00 2001 From: R-Kaenbyou <152870189+R-Kaenbyou@users.noreply.github.com> Date: Sat, 23 Aug 2025 21:09:37 -0700 Subject: [PATCH 6/6] Update TileEntityMachineArcFurnaceLarge.java --- .../TileEntityMachineArcFurnaceLarge.java | 105 +++++++++++++++++- 1 file changed, 104 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java index 7af24b639..6968f8b1a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java @@ -401,7 +401,110 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl liquids.add(matStack.copy()); } - + //Returns what is unused, or null if used up + public ItemStack distributeInput(ItemStack is, boolean modulate) { + if(is.stackSize == 0) return null; + ItemStack split; + + //Slots 0,1,2 + if(is.getItem() == ModItems.arc_electrode) { + for(int i = 0; i < 3; i++) { + if(slots[i] == null) { + split = is.splitStack(1); + if(modulate) this.setInventorySlotContents(i, split); + } + if (is.stackSize == 0) return null; + } + //Don't tell me you're gonna add an arc furnace recipe smelting electrodes + return is; + } + + //Slots 5-24 + ArcFurnaceRecipe recipe = ArcFurnaceRecipes.getOutput(is, this.liquidMode); + if(recipe != null) { + int maxStackSize = this.liquidMode ? 64 : recipe.solidOutput.getMaxStackSize() / recipe.solidOutput.stackSize; + maxStackSize = Math.min(maxStackSize, Math.min(is.getMaxStackSize(), getMaxInputSize())); + + //Scan + for(int i = 5; i < 25; i++){ + if(slots[i] == null) { + if(is.stackSize > maxStackSize) { + split = is.splitStack(maxStackSize); + if(modulate) slots[i] = split; + } else { + if(modulate) slots[i] = is; + return null; + } + } else if(ItemStackUtil.areStacksCompatible(is, slots[i]) && slots[i].stackSize < maxStackSize) { + if(is.stackSize > maxStackSize - slots[i].stackSize) { + is.splitStack(maxStackSize - slots[i].stackSize); + if(modulate) slots[i].stackSize = maxStackSize; + } else { + if(modulate) slots[i].stackSize += is.stackSize; + return null; + } + } + } + } + return is; + } + + //Returns requested ItemStack + public ItemStack collectRequested(ItemStack is, boolean modulate) { + int req = is.stackSize; + if(req == 0) return null; + + //Slots 0,1,2 + if(is.getItem() != ModItems.arc_electrode) { + for(int i = 0; i < 3; i++) { + if(slots[i] == null) continue; + if(ItemStackUtil.areStacksCompatible(is, slots[i])) { + if(req > slots[i].stackSize) { + req -= slots[i].stackSize; + if(modulate) slots[i] = null; + } else if(req < slots[i].stackSize) { + if(modulate) slots[i].stackSize -= req; + return is; + } else { + if(modulate) slots[i] = null; + return is; + } + } + } + } + + //Slots 5-24 + if(ArcFurnaceRecipes.getOutput(is, this.liquidMode) == null) { + for(int i = 5; i < 25; i++) { + if(slots[i] == null) continue; + if(ItemStackUtil.areStacksCompatible(is, slots[i])) { + if(req > slots[i].stackSize) { + req -= slots[i].stackSize; + if(modulate) slots[i] = null; + } else if(req < slots[i].stackSize) { + if(modulate) slots[i].stackSize -= req; + return is; + } else { + if(modulate) slots[i] = null; + return is; + } + } + } + } + + is.stackSize -= req; + if(is.stackSize == 0) return null; + return is; + } + + //Return ItemStack in slot, null if unavailable + public ItemStack getAvailableItemFromSlot(int slot) { + if(slots[slot] == null) return null; + if(slot < 3 && slots[slot].getItem() == ModItems.arc_electrode) return null; + else if(slot > 4 && ArcFurnaceRecipes.getOutput(slots[slot], this.liquidMode) != null) return null; + else if(slot == 3 || slot == 4) return null; + else return slots[slot]; + } public static int getStackAmount(List stack) { int amount = 0;