From ebd85013012d70396221532cd6f0a3bc7d56dd40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Sun, 7 Mar 2021 00:00:16 -0300 Subject: [PATCH] fix inaccessible items setting in storage bus not being respected --- .../fluids/parts/FluidHandlerAdapter.java | 25 ++++++++++++++++--- .../appeng/me/storage/ITickingMonitor.java | 5 ++++ .../appeng/parts/misc/ItemHandlerAdapter.java | 24 +++++++++++++++--- .../appeng/parts/misc/PartStorageBus.java | 1 + 4 files changed, 47 insertions(+), 8 deletions(-) diff --git a/src/main/java/appeng/fluids/parts/FluidHandlerAdapter.java b/src/main/java/appeng/fluids/parts/FluidHandlerAdapter.java index ad531097b..6b9738873 100644 --- a/src/main/java/appeng/fluids/parts/FluidHandlerAdapter.java +++ b/src/main/java/appeng/fluids/parts/FluidHandlerAdapter.java @@ -26,6 +26,9 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import appeng.api.config.Settings; +import appeng.api.config.StorageFilter; +import appeng.parts.misc.PartStorageBus; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidTankProperties; @@ -61,12 +64,18 @@ public class FluidHandlerAdapter implements IMEInventory, IBaseMo private final IFluidHandler fluidHandler; private final IGridProxyable proxyable; private final FluidHandlerAdapter.InventoryCache cache; + private StorageFilter mode; FluidHandlerAdapter( IFluidHandler fluidHandler, IGridProxyable proxy ) { this.fluidHandler = fluidHandler; this.proxyable = proxy; - this.cache = new FluidHandlerAdapter.InventoryCache( this.fluidHandler ); + if( this.proxyable instanceof PartStorageBus ) + { + PartStorageBus partStorageBus = (PartStorageBus) this.proxyable; + this.mode = ( (StorageFilter) partStorageBus.getConfigManager().getSetting( Settings.STORAGE_FILTER ) ); + } + this.cache = new FluidHandlerAdapter.InventoryCache( this.fluidHandler, this.mode); } @Override @@ -195,9 +204,11 @@ public class FluidHandlerAdapter implements IMEInventory, IBaseMo { private IAEFluidStack[] cachedAeStacks = new IAEFluidStack[0]; private final IFluidHandler fluidHandler; + private final StorageFilter mode; - public InventoryCache( IFluidHandler fluidHandler ) + public InventoryCache( IFluidHandler fluidHandler, StorageFilter mode ) { + this.mode = mode; this.fluidHandler = fluidHandler; } @@ -217,8 +228,14 @@ public class FluidHandlerAdapter implements IMEInventory, IBaseMo { // Save the old stuff final IAEFluidStack oldAEFS = this.cachedAeStacks[slot]; - final FluidStack newFS = tankProperties[slot].getContents(); - + FluidStack newFS = tankProperties[slot].getContents(); + if( this.mode == StorageFilter.EXTRACTABLE_ONLY && newFS != null ) + { + if( this.fluidHandler.drain( 1, false ) == null ) + { + newFS = null; + } + } this.handlePossibleSlotChanges( slot, oldAEFS, newFS, changes ); } diff --git a/src/main/java/appeng/me/storage/ITickingMonitor.java b/src/main/java/appeng/me/storage/ITickingMonitor.java index 8ddf4b87e..fea99db80 100644 --- a/src/main/java/appeng/me/storage/ITickingMonitor.java +++ b/src/main/java/appeng/me/storage/ITickingMonitor.java @@ -19,6 +19,7 @@ package appeng.me.storage; +import appeng.api.config.StorageFilter; import appeng.api.networking.security.IActionSource; import appeng.api.networking.ticking.TickRateModulation; @@ -30,4 +31,8 @@ public interface ITickingMonitor void setActionSource( IActionSource actionSource ); + default void setMode( StorageFilter setting ) + { + + } } diff --git a/src/main/java/appeng/parts/misc/ItemHandlerAdapter.java b/src/main/java/appeng/parts/misc/ItemHandlerAdapter.java index 94332ccd8..201e1582e 100644 --- a/src/main/java/appeng/parts/misc/ItemHandlerAdapter.java +++ b/src/main/java/appeng/parts/misc/ItemHandlerAdapter.java @@ -26,6 +26,8 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import appeng.api.config.Settings; +import appeng.api.config.StorageFilter; import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; @@ -57,12 +59,18 @@ class ItemHandlerAdapter implements IMEInventory, IBaseMonitor, IBaseMonitor, IBaseMonitor