diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java index 3d26f677fa4..6ee99d00e24 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java @@ -28,6 +28,7 @@ import com.gregtechceu.gtceu.client.util.ModelUtils; import com.gregtechceu.gtceu.common.cover.FluidFilterCover; import com.gregtechceu.gtceu.common.cover.ItemFilterCover; +import com.gregtechceu.gtceu.common.cover.data.ManualIOMode; import com.gregtechceu.gtceu.common.item.tool.behavior.ToolModeSwitchBehavior; import com.gregtechceu.gtceu.common.machine.owner.MachineOwner; import com.gregtechceu.gtceu.common.machine.owner.PlayerOwner; @@ -745,7 +746,15 @@ public boolean canConnectRedstone(Direction side) { public Predicate getItemCapFilter(@Nullable Direction side, IO io) { if (side != null) { var cover = getCoverContainer().getCoverAtSide(side); - if (cover instanceof ItemFilterCover filterCover && filterCover.getFilterMode().filters(io)) { + if (cover instanceof ItemFilterCover filterCover) { + if (!filterCover.getFilterMode().filters(io)) { + if (filterCover.getAllowFlow() == ManualIOMode.DISABLED) { + return item -> false; + } + if (filterCover.getAllowFlow() == ManualIOMode.UNFILTERED) { + return item -> true; + } + } return filterCover.getItemFilter(); } } @@ -755,7 +764,15 @@ public Predicate getItemCapFilter(@Nullable Direction side, IO io) { public Predicate getFluidCapFilter(@Nullable Direction side, IO io) { if (side != null) { var cover = getCoverContainer().getCoverAtSide(side); - if (cover instanceof FluidFilterCover filterCover && filterCover.getFilterMode().filters(io)) { + if (cover instanceof FluidFilterCover filterCover) { + if (!filterCover.getFilterMode().filters(io)) { + if (filterCover.getAllowFlow() == ManualIOMode.DISABLED) { + return fluid -> false; + } + if (filterCover.getAllowFlow() == ManualIOMode.UNFILTERED) { + return fluid -> true; + } + } return filterCover.getFluidFilter(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java index b1b4a10084e..6a59c3ec4ec 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java @@ -512,10 +512,15 @@ public CoverableItemHandlerWrapper(IItemHandlerModifiable delegate) { @NotNull @Override public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate) { - if (io == IO.OUT && manualIOMode == ManualIOMode.DISABLED) { - return stack; + if (io == IO.OUT) { + if (manualIOMode == ManualIOMode.DISABLED) { + return stack; + } + if (manualIOMode == ManualIOMode.UNFILTERED) { + return super.insertItem(slot, stack, simulate); + } } - if (manualIOMode == ManualIOMode.FILTERED && !filterHandler.test(stack)) { + if (!filterHandler.test(stack)) { return stack; } return super.insertItem(slot, stack, simulate); @@ -524,17 +529,19 @@ public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate @NotNull @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { - if (io == IO.IN && manualIOMode == ManualIOMode.DISABLED) { - return ItemStack.EMPTY; - } - if (manualIOMode == ManualIOMode.FILTERED) { - ItemStack result = super.extractItem(slot, amount, true); - if (result.isEmpty() || !filterHandler.test(result)) { + if (io == IO.IN) { + if (manualIOMode == ManualIOMode.DISABLED) { return ItemStack.EMPTY; } - return simulate ? result : super.extractItem(slot, amount, false); + if (manualIOMode == ManualIOMode.UNFILTERED) { + return super.extractItem(slot, amount, simulate); + } + } + ItemStack result = super.extractItem(slot, amount, true); + if (result.isEmpty() || !filterHandler.test(result)) { + return ItemStack.EMPTY; } - return super.extractItem(slot, amount, simulate); + return simulate ? result : super.extractItem(slot, amount, false); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java index a5d95956215..23ee3d9925e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java @@ -103,20 +103,34 @@ public FilteredFluidHandlerWrapper(IFluidHandlerModifiable delegate) { @Override public int fill(FluidStack resource, FluidAction action) { - if ((filterMode == FilterMode.FILTER_EXTRACT) && allowFlow == ManualIOMode.UNFILTERED) - return super.fill(resource, action); - if (filterMode != FilterMode.FILTER_EXTRACT && getFluidFilter().test(resource)) - return super.fill(resource, action); - return 0; + if (filterMode == FilterMode.FILTER_EXTRACT) { + if (allowFlow == ManualIOMode.DISABLED) { + return 0; + } + if (allowFlow == ManualIOMode.UNFILTERED) { + return super.fill(resource, action); + } + } + if (!getFluidFilter().test(resource)) { + return 0; + } + return super.fill(resource, action); } @Override public FluidStack drain(FluidStack resource, FluidAction action) { - if ((filterMode == FilterMode.FILTER_INSERT) && allowFlow == ManualIOMode.UNFILTERED) - return super.drain(resource, action); - if (filterMode != FilterMode.FILTER_INSERT && getFluidFilter().test(resource)) - return super.drain(resource, action); - return FluidStack.EMPTY; + if (filterMode == FilterMode.FILTER_INSERT) { + if (allowFlow == ManualIOMode.DISABLED) { + return FluidStack.EMPTY; + } + if (allowFlow == ManualIOMode.UNFILTERED) { + return super.drain(resource, action); + } + } + if (!getFluidFilter().test(resource)) { + return FluidStack.EMPTY; + } + return super.drain(resource, action); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java index 94f2206cd80..9b22f097324 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java @@ -116,25 +116,35 @@ public FilteredItemHandlerWrapper(IItemHandlerModifiable delegate) { @Override public @NotNull ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate) { - if ((filterMode == FilterMode.FILTER_EXTRACT) && allowFlow == ManualIOMode.UNFILTERED) - return super.insertItem(slot, stack, simulate); - if (filterMode != FilterMode.FILTER_EXTRACT && getItemFilter().test(stack)) { - return super.insertItem(slot, stack, simulate); + if (filterMode == FilterMode.FILTER_EXTRACT) { + if (allowFlow == ManualIOMode.DISABLED) { + return stack; + } + if (allowFlow == ManualIOMode.UNFILTERED) { + return super.insertItem(slot, stack, simulate); + } } - return stack; + if (!getItemFilter().test(stack)) { + return stack; + } + return super.insertItem(slot, stack, simulate); } @Override public @NotNull ItemStack extractItem(int slot, int amount, boolean simulate) { - ItemStack result = super.extractItem(slot, amount, true); - if (result.isEmpty() && (filterMode == FilterMode.FILTER_INSERT) && allowFlow == ManualIOMode.UNFILTERED) { - return super.extractItem(slot, amount, false); + if (filterMode == FilterMode.FILTER_INSERT) { + if (allowFlow == ManualIOMode.DISABLED) { + return ItemStack.EMPTY; + } + if (allowFlow == ManualIOMode.UNFILTERED) { + return super.extractItem(slot, amount, simulate); + } } - - if (filterMode != FilterMode.FILTER_INSERT && getItemFilter().test(result)) { - return super.extractItem(slot, amount, false); + ItemStack result = super.extractItem(slot, amount, true); + if (result.isEmpty() || !getItemFilter().test(result)) { + return ItemStack.EMPTY; } - return ItemStack.EMPTY; + return simulate ? result : super.extractItem(slot, amount, false); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java index f0ed3536ce0..668fbbcef3f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java @@ -369,10 +369,15 @@ public CoverableFluidHandlerWrapper(IFluidHandlerModifiable delegate) { @Override public int fill(FluidStack resource, FluidAction action) { - if (io == IO.OUT && manualIOMode == ManualIOMode.DISABLED) { - return 0; + if (io == IO.OUT) { + if (manualIOMode == ManualIOMode.DISABLED) { + return 0; + } + if (manualIOMode == ManualIOMode.UNFILTERED) { + return super.fill(resource, action); + } } - if (!filterHandler.test(resource) && manualIOMode == ManualIOMode.FILTERED) { + if (!filterHandler.test(resource)) { return 0; } return super.fill(resource, action); @@ -380,10 +385,15 @@ public int fill(FluidStack resource, FluidAction action) { @Override public FluidStack drain(FluidStack resource, FluidAction action) { - if (io == IO.IN && manualIOMode == ManualIOMode.DISABLED) { - return FluidStack.EMPTY; + if (io == IO.IN) { + if (manualIOMode == ManualIOMode.DISABLED) { + return FluidStack.EMPTY; + } + if (manualIOMode == ManualIOMode.UNFILTERED) { + return super.drain(resource, action); + } } - if (manualIOMode == ManualIOMode.FILTERED && !filterHandler.test(resource)) { + if (!filterHandler.test(resource)) { return FluidStack.EMPTY; } return super.drain(resource, action);