diff --git a/src/main/java/appeng/fluids/helper/DualityFluidInterface.java b/src/main/java/appeng/fluids/helper/DualityFluidInterface.java index 0c49bf82f..64b0adfa7 100644 --- a/src/main/java/appeng/fluids/helper/DualityFluidInterface.java +++ b/src/main/java/appeng/fluids/helper/DualityFluidInterface.java @@ -224,8 +224,8 @@ public class DualityFluidInterface implements IGridTickable, IStorageMonitorable this.items.setInternal(this.gridProxy.getStorage().getInventory(AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class))); this.fluids.setInternal(this.gridProxy.getStorage().getInventory(AEApi.instance().storage().getStorageChannel(IFluidStorageChannel.class))); } catch (final GridAccessException gae) { - this.items.setInternal(new NullInventory()); - this.fluids.setInternal(new NullInventory()); + this.items.setInternal(new NullInventory<>()); + this.fluids.setInternal(new NullInventory<>()); } this.notifyNeighbors(); @@ -491,6 +491,16 @@ public class DualityFluidInterface implements IGridTickable, IStorageMonitorable onFluidInventoryChanged(inv, slot, null, null, null); } + @Override + public void onFluidInventoryChanged(final IAEFluidTank inventory, FluidStack added, FluidStack removed) { + if (inventory == this.tanks) { + if (added != null) { + iHost.onStackReturnNetwork(AEFluidStack.fromFluidStack(added)); + } + this.saveChanges(); + } + } + @Override public void onFluidInventoryChanged(final IAEFluidTank inventory, final int slot, InvOperation operation, FluidStack added, FluidStack removed) { if (this.isWorking == slot) { diff --git a/src/main/java/appeng/fluids/util/AEFluidInventory.java b/src/main/java/appeng/fluids/util/AEFluidInventory.java index df07a4be3..f704ecb1e 100644 --- a/src/main/java/appeng/fluids/util/AEFluidInventory.java +++ b/src/main/java/appeng/fluids/util/AEFluidInventory.java @@ -14,7 +14,7 @@ import java.util.Objects; public class AEFluidInventory implements IAEFluidTank { private final IAEFluidStack[] fluids; - private final IAEFluidInventory handler; + protected final IAEFluidInventory handler; private int capacity; private IFluidTankProperties[] props = null; diff --git a/src/main/java/appeng/fluids/util/AENetworkFluidInventory.java b/src/main/java/appeng/fluids/util/AENetworkFluidInventory.java index bf5906d02..aaffa978e 100644 --- a/src/main/java/appeng/fluids/util/AENetworkFluidInventory.java +++ b/src/main/java/appeng/fluids/util/AENetworkFluidInventory.java @@ -35,8 +35,16 @@ public class AENetworkFluidInventory extends AEFluidInventory { if (overflow != null && overflow.getStackSize() == originAmt) { return super.fill(fluid, doFill); } else if (overflow != null) { + if (doFill) { + FluidStack added = fluid.copy(); + added.amount = (int) (fluid.amount - overflow.getStackSize()); + this.handler.onFluidInventoryChanged(this, added, null); + } return (int) (originAmt - overflow.getStackSize()); } else { + if (doFill) { + this.handler.onFluidInventoryChanged(this, fluid, null); + } return originAmt; } } else { diff --git a/src/main/java/appeng/fluids/util/IAEFluidInventory.java b/src/main/java/appeng/fluids/util/IAEFluidInventory.java index de3ccc24e..92110a2f0 100644 --- a/src/main/java/appeng/fluids/util/IAEFluidInventory.java +++ b/src/main/java/appeng/fluids/util/IAEFluidInventory.java @@ -28,4 +28,8 @@ public interface IAEFluidInventory { default void onFluidInventoryChanged(final IAEFluidTank inv, final int slot, InvOperation operation, FluidStack added, FluidStack removed) { } + + default void onFluidInventoryChanged(final IAEFluidTank inv, FluidStack added, FluidStack removed) { + } + } diff --git a/src/main/java/appeng/tile/inventory/AppEngNetworkInventory.java b/src/main/java/appeng/tile/inventory/AppEngNetworkInventory.java index e3c61cf63..fdae1e0be 100644 --- a/src/main/java/appeng/tile/inventory/AppEngNetworkInventory.java +++ b/src/main/java/appeng/tile/inventory/AppEngNetworkInventory.java @@ -8,6 +8,7 @@ import appeng.api.storage.IMEInventory; import appeng.api.storage.channels.IItemStorageChannel; import appeng.api.storage.data.IAEItemStack; import appeng.util.inv.IAEAppEngInventory; +import appeng.util.inv.InvOperation; import appeng.util.item.AEItemStack; import net.minecraft.item.ItemStack; import net.minecraftforge.items.wrapper.RangedWrapper; @@ -37,8 +38,16 @@ public class AppEngNetworkInventory extends AppEngInternalOversizedInventory { if (overflow != null && overflow.getStackSize() == originAmt) { return super.insertItem(slot, stack, simulate); } else if (overflow != null) { + if (!simulate) { + ItemStack added = stack.copy(); + added.setCount((int) (stack.getCount() - overflow.getStackSize())); + this.getTileEntity().onChangeInventory(this, slot, InvOperation.INSERT, ItemStack.EMPTY, added); + } return overflow.createItemStack(); } else { + if (!simulate) { + this.getTileEntity().onChangeInventory(this, slot, InvOperation.INSERT, ItemStack.EMPTY, stack); + } return ItemStack.EMPTY; } } else {