From ec9f55d17ac4c1e9e58ccc60b9d53f2d86fb3e16 Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Sat, 30 Jul 2022 22:32:42 +0800 Subject: [PATCH] fix 4096k int overflow and drops --- .../common/storage/FluidCellInventory.java | 6 ++--- .../common/tile/TileFluidDiscretizer.java | 27 ++++++++++++++----- .../common/tile/TileFluidInterface.java | 6 ----- 3 files changed, 23 insertions(+), 16 deletions(-) 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 bbf3918e..33208e59 100644 --- a/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java +++ b/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java @@ -389,19 +389,19 @@ public class FluidCellInventory implements IFluidCellInventory { if( this.canHoldNewFluid() ) // room for new type, and for at least one item! { - final int remainingItemCount = (int) this.getRemainingFluidCount() - this.getBytesPerType() * 8; + final long remainingItemCount = this.getRemainingFluidCount() - this.getBytesPerType() * 8; if( remainingItemCount > 0 ) { if( input.getStackSize() > remainingItemCount ) { final FluidStack toReturn = Util.cloneFluidStack(sharedFluidStack); - toReturn.amount = sharedFluidStack.amount - remainingItemCount; + toReturn.amount = (int) (sharedFluidStack.amount - remainingItemCount); if( mode == Actionable.MODULATE ) { final FluidStack toWrite = Util.cloneFluidStack( sharedFluidStack ); - toWrite.amount = remainingItemCount; + toWrite.amount = (int) remainingItemCount; this.cellItems.add( AEFluidStack.create( toWrite ) ); this.updateFluidCount( toWrite.amount ); diff --git a/src/main/java/com/glodblock/github/common/tile/TileFluidDiscretizer.java b/src/main/java/com/glodblock/github/common/tile/TileFluidDiscretizer.java index 20b40225..813ff32e 100644 --- a/src/main/java/com/glodblock/github/common/tile/TileFluidDiscretizer.java +++ b/src/main/java/com/glodblock/github/common/tile/TileFluidDiscretizer.java @@ -1,5 +1,6 @@ package com.glodblock.github.common.tile; +import appeng.api.AEApi; import appeng.api.config.Actionable; import appeng.api.networking.GridFlags; import appeng.api.networking.crafting.ICraftingGrid; @@ -19,7 +20,6 @@ import appeng.me.GridAccessException; import appeng.me.cache.CraftingGridCache; import appeng.me.storage.MEInventoryHandler; import appeng.tile.grid.AENetworkTile; -import appeng.util.Platform; import com.glodblock.github.common.item.ItemFluidDrop; import java.util.ArrayList; @@ -48,8 +48,6 @@ public class TileFluidDiscretizer extends AENetworkTile implements IPriorityHost @Override @SuppressWarnings("rawtypes") public List getCellArray(StorageChannel channel) { - /*conflict = !checkDiscreatizer(); - if (conflict) return Collections.emptyList();*/ if (getProxy().isActive()) { if (channel == StorageChannel.ITEMS) { return Collections.singletonList(fluidDropInv.invHandler); @@ -131,6 +129,25 @@ public class TileFluidDiscretizer extends AENetworkTile implements IPriorityHost updateState(); } + @MENetworkEventSubscribe + public void onBootUp(MENetworkBootingStatusChange event) { + try { + IMEInventory inventory = this.getProxy().getStorage().getItemInventory(); + IItemList items = inventory.getAvailableItems(AEApi.instance().storage().createItemList()); + IItemList drops = AEApi.instance().storage().createItemList(); + for (IAEItemStack item : items) { + if (item != null && item.getItem() instanceof ItemFluidDrop) { + drops.add(item); + } + } + for (IAEItemStack drop : drops) { + inventory.extractItems(drop, Actionable.MODULATE, ownActionSource); + inventory.injectItems(drop, Actionable.MODULATE, ownActionSource); + } + } catch (GridAccessException ignored) { + } + } + private class FluidDiscretizingInventory implements IMEInventory, IMEMonitorHandlerReceiver { private final MEInventoryHandler invHandler = new MEInventoryHandler<>(this, getChannel()); @@ -142,7 +159,6 @@ public class TileFluidDiscretizer extends AENetworkTile implements IPriorityHost @Override public IAEItemStack injectItems(IAEItemStack request, Actionable type, BaseActionSource src) { - /*if (conflict) return request;*/ IAEFluidStack fluidStack = ItemFluidDrop.getAeFluidStack(request); if (fluidStack == null) { return request; @@ -165,7 +181,6 @@ public class TileFluidDiscretizer extends AENetworkTile implements IPriorityHost @Override public IAEItemStack extractItems(IAEItemStack request, Actionable mode, BaseActionSource src) { - /*if (conflict) return null;*/ IAEFluidStack fluidStack = ItemFluidDrop.getAeFluidStack(request); if (fluidStack == null) { return null; @@ -188,7 +203,6 @@ public class TileFluidDiscretizer extends AENetworkTile implements IPriorityHost @Override public IItemList getAvailableItems(IItemList out) { - /*if (conflict) return out;*/ if (itemCache == null) { itemCache = new ArrayList<>(); IMEMonitor fluidGrid = getFluidGrid(); @@ -253,7 +267,6 @@ public class TileFluidDiscretizer extends AENetworkTile implements IPriorityHost @Override @SuppressWarnings("rawtypes") public IAEFluidStack injectItems(IAEFluidStack input, Actionable type, BaseActionSource src) { - /*if (conflict) return null;*/ ICraftingGrid craftingGrid; try { craftingGrid = getProxy().getGrid().getCache(ICraftingGrid.class); diff --git a/src/main/java/com/glodblock/github/common/tile/TileFluidInterface.java b/src/main/java/com/glodblock/github/common/tile/TileFluidInterface.java index ad0a3bb1..143ce769 100644 --- a/src/main/java/com/glodblock/github/common/tile/TileFluidInterface.java +++ b/src/main/java/com/glodblock/github/common/tile/TileFluidInterface.java @@ -2,18 +2,12 @@ package com.glodblock.github.common.tile; import appeng.api.config.Upgrades; import appeng.api.networking.IGridNode; -import appeng.api.networking.energy.IEnergyGrid; import appeng.api.networking.events.MENetworkChannelsChanged; import appeng.api.networking.events.MENetworkEventSubscribe; import appeng.api.networking.events.MENetworkPowerStatusChange; -import appeng.api.networking.security.BaseActionSource; -import appeng.api.networking.security.MachineSource; -import appeng.api.networking.storage.IStorageGrid; import appeng.api.networking.ticking.TickRateModulation; import appeng.api.networking.ticking.TickingRequest; -import appeng.api.storage.IMEMonitor; import appeng.api.storage.data.IAEFluidStack; -import appeng.me.GridAccessException; import appeng.tile.TileEvent; import appeng.tile.events.TileEventType; import appeng.tile.inventory.AppEngInternalAEInventory;