From e47c65fbdf345ab03cb27a029e58b41719bda2ee Mon Sep 17 00:00:00 2001 From: asdflj <854865755@qq.com> Date: Sat, 22 Oct 2022 23:56:38 +0800 Subject: [PATCH] support long fluid amount --- .../github/client/gui/GuiFluidTerminal.java | 7 ++---- .../container/FCBaseFluidMonitorContain.java | 13 +++++----- .../glodblock/github/client/me/FluidRepo.java | 1 + .../common/storage/FluidCellInventory.java | 22 +++++++--------- .../java/com/glodblock/github/util/Util.java | 25 +++++++++++++++++-- 5 files changed, 41 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFluidTerminal.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidTerminal.java index 2cbf9213..3b752a8f 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidTerminal.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidTerminal.java @@ -5,7 +5,6 @@ import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEItemStack; import appeng.client.me.SlotME; import appeng.client.render.AppEngRenderItem; -import appeng.util.item.AEItemStack; import com.glodblock.github.FluidCraft; import com.glodblock.github.client.gui.container.ContainerFluidTerminal; import com.glodblock.github.client.gui.container.FCBaseFluidMonitorContain; @@ -48,13 +47,11 @@ public class GuiFluidTerminal extends GuiBaseFluidTerminal { public boolean drawSlot0(Slot slot) { if (slot instanceof SlotME) { - AEItemStack stack = AEItemStack.create(slot.getStack()); + IAEItemStack stack = ((SlotME) slot).getAEStack(); if (stack == null) return true; FluidStack fluidStack = ItemFluidDrop.getFluidStack(slot.getStack()); this.drawWidget(slot.xDisplayPosition, slot.yDisplayPosition, fluidStack.getFluid()); - IAEItemStack fake = stack.copy(); - fake.setStackSize(fluidStack.amount); - stackSizeRenderer.setAeStack(fake); + stackSizeRenderer.setAeStack(stack); stackSizeRenderer.renderItemOverlayIntoGUI(fontRendererObj, mc.getTextureManager(), stack.getItemStack(), slot.xDisplayPosition, slot.yDisplayPosition); return false; } diff --git a/src/main/java/com/glodblock/github/client/gui/container/FCBaseFluidMonitorContain.java b/src/main/java/com/glodblock/github/client/gui/container/FCBaseFluidMonitorContain.java index 56e32e26..e45703d4 100644 --- a/src/main/java/com/glodblock/github/client/gui/container/FCBaseFluidMonitorContain.java +++ b/src/main/java/com/glodblock/github/client/gui/container/FCBaseFluidMonitorContain.java @@ -50,7 +50,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidContainerItem; import org.apache.commons.lang3.tuple.MutablePair; @@ -382,13 +381,13 @@ public class FCBaseFluidMonitorContain extends AEBaseContainer implements IConfi } } else if (!Util.FluidUtil.isEmpty(fluidContainer)) { // add fluid to ae network - FluidStack fluidStack = Util.getFluidFromItem(fluidContainer); - final AEFluidStack aeFluidStack = AEFluidStack.create(fluidStack); + AEFluidStack fluidStack = Util.getAEFluidFromItem(fluidContainer); + final IAEFluidStack aeFluidStack = fluidStack.copy(); // simulate result is incorrect. so I'm using other solution and ec2 both mod have same issues final IAEFluidStack notInserted = this.host.getFluidInventory().injectItems(aeFluidStack, Actionable.MODULATE, this.getActionSource()); MutablePair drainStack = Util.FluidUtil.drainStack(out.copy(), aeFluidStack.getFluidStack()); if (notInserted != null && notInserted.getStackSize() > 0) { - if (fluidStack.amount == notInserted.getStackSize()) continue; + if (fluidStack.getStackSize() == notInserted.getStackSize()) continue; aeFluidStack.decStackSize(notInserted.getStackSize()); if (drainStack.left > aeFluidStack.getStackSize() && FluidContainerRegistry.isContainer(drainStack.right)) { @@ -398,11 +397,11 @@ public class FCBaseFluidMonitorContain extends AEBaseContainer implements IConfi } this.dropItem(drainStack.right, (int) (aeFluidStack.getStackSize() / drainStack.left)); // drop empty item - out.stackSize = ((int) (notInserted.getStackSize()) / drainStack.left); + out.stackSize = (int) (notInserted.getStackSize() / drainStack.left); if (drainStack.right.getItem() instanceof IFluidContainerItem) { if (notInserted.getStackSize() % drainStack.left > 0) { - fluidStack.amount = (int) (notInserted.getStackSize() % drainStack.left); - ((IFluidContainerItem) drainStack.right.getItem()).fill(drainStack.right, fluidStack, true); + fluidStack.setStackSize((notInserted.getStackSize() % drainStack.left)); + ((IFluidContainerItem) drainStack.right.getItem()).fill(drainStack.right, fluidStack.getFluidStack(), true); this.dropItem(drainStack.right, 1); } } else if (FluidContainerRegistry.isContainer(drainStack.right)) { diff --git a/src/main/java/com/glodblock/github/client/me/FluidRepo.java b/src/main/java/com/glodblock/github/client/me/FluidRepo.java index 868ae7e7..e102d1de 100644 --- a/src/main/java/com/glodblock/github/client/me/FluidRepo.java +++ b/src/main/java/com/glodblock/github/client/me/FluidRepo.java @@ -91,6 +91,7 @@ public class FluidRepo extends ItemRepo { public void postUpdate(final IAEItemStack is) { IAEFluidStack fluid = ItemFluidDrop.getAeFluidStack(is); IAEItemStack i = AEItemStack.create(is.getItemStack().setStackDisplayName(fluid.getFluid().getLocalizedName())); + i.setStackSize(is.getStackSize()); final IAEItemStack st = this.list.findPrecise(i); if (st != null) { st.reset(); diff --git a/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java b/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java index 616d75d1..5fdc5c64 100644 --- a/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java +++ b/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java @@ -11,7 +11,6 @@ import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IItemList; import appeng.util.Platform; import appeng.util.item.AEFluidStack; -import com.glodblock.github.util.Util; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -346,8 +345,6 @@ public class FluidCellInventory implements IFluidCellInventory { return input; } - final FluidStack sharedFluidStack = input.getFluidStack(); - final IAEFluidStack l = this.getCellItems().findPrecise( input ); if( l != null ) @@ -393,21 +390,20 @@ public class FluidCellInventory implements IFluidCellInventory { { if( input.getStackSize() > remainingItemCount ) { - final FluidStack toReturn = Util.cloneFluidStack(sharedFluidStack); - toReturn.amount = (int) (sharedFluidStack.amount - remainingItemCount); + final IAEFluidStack toReturn = input.copy(); + toReturn.decStackSize(remainingItemCount); - if( mode == Actionable.MODULATE ) - { - final FluidStack toWrite = Util.cloneFluidStack( sharedFluidStack ); - toWrite.amount = (int) remainingItemCount; + if (mode == Actionable.MODULATE) { + IAEFluidStack toWrite = input.copy(); + toWrite.setStackSize(remainingItemCount); - this.cellItems.add( AEFluidStack.create( toWrite ) ); - this.updateFluidCount( toWrite.amount ); + this.cellItems.add(toWrite); + this.updateFluidCount(toWrite.getStackSize()); this.saveChanges(); } - return AEFluidStack.create( toReturn ); + return toReturn; } if( mode == Actionable.MODULATE ) @@ -431,7 +427,7 @@ public class FluidCellInventory implements IFluidCellInventory { return null; } - final long size = Math.min( Integer.MAX_VALUE, request.getStackSize() ); + final long size = request.getStackSize(); IAEFluidStack results = null; diff --git a/src/main/java/com/glodblock/github/util/Util.java b/src/main/java/com/glodblock/github/util/Util.java index dff25ea6..080ef938 100644 --- a/src/main/java/com/glodblock/github/util/Util.java +++ b/src/main/java/com/glodblock/github/util/Util.java @@ -76,8 +76,7 @@ public final class Util { return player == null || permission == null || securityGrid == null || securityGrid.hasPermission(player, permission); } - public static ItemStack copyStackWithSize(ItemStack itemStack, int size) - { + public static ItemStack copyStackWithSize(ItemStack itemStack, int size) { if (size == 0 || itemStack == null) return null; ItemStack copy = itemStack.copy(); @@ -85,6 +84,28 @@ public final class Util { return copy; } + public static AEFluidStack getAEFluidFromItem(ItemStack stack) { + if (stack != null && (stack.getItem() instanceof IFluidContainerItem || FluidContainerRegistry.isContainer(stack))) { + if (stack.getItem() instanceof IFluidContainerItem) { + FluidStack fluid = ((IFluidContainerItem) stack.getItem()).getFluid(stack); + if (fluid != null) { + AEFluidStack fluid0 = AEFluidStack.create(fluid.copy()); + fluid0.setStackSize(fluid0.getStackSize() * stack.stackSize); + return fluid0; + } + } + if (FluidContainerRegistry.isContainer(stack)) { + FluidStack fluid = FluidContainerRegistry.getFluidForFilledItem(stack); + if (fluid != null) { + AEFluidStack fluid0 = AEFluidStack.create(fluid.copy()); + fluid0.setStackSize(fluid0.getStackSize() * stack.stackSize); + return fluid0; + } + } + } + return null; + } + public static FluidStack getFluidFromItem(ItemStack stack) { if (stack != null && (stack.getItem() instanceof IFluidContainerItem || FluidContainerRegistry.isContainer(stack))) { if (stack.getItem() instanceof IFluidContainerItem) {