Skip to content

Commit 3aad948

Browse files
Fix manual mode for item/fluid filter covers and conveyors/pumps (#4245)
1 parent bb1fdfc commit 3aad948

File tree

5 files changed

+99
-41
lines changed

5 files changed

+99
-41
lines changed

src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.gregtechceu.gtceu.client.util.ModelUtils;
2929
import com.gregtechceu.gtceu.common.cover.FluidFilterCover;
3030
import com.gregtechceu.gtceu.common.cover.ItemFilterCover;
31+
import com.gregtechceu.gtceu.common.cover.data.ManualIOMode;
3132
import com.gregtechceu.gtceu.common.item.tool.behavior.ToolModeSwitchBehavior;
3233
import com.gregtechceu.gtceu.common.machine.owner.MachineOwner;
3334
import com.gregtechceu.gtceu.common.machine.owner.PlayerOwner;
@@ -745,7 +746,15 @@ public boolean canConnectRedstone(Direction side) {
745746
public Predicate<ItemStack> getItemCapFilter(@Nullable Direction side, IO io) {
746747
if (side != null) {
747748
var cover = getCoverContainer().getCoverAtSide(side);
748-
if (cover instanceof ItemFilterCover filterCover && filterCover.getFilterMode().filters(io)) {
749+
if (cover instanceof ItemFilterCover filterCover) {
750+
if (!filterCover.getFilterMode().filters(io)) {
751+
if (filterCover.getAllowFlow() == ManualIOMode.DISABLED) {
752+
return item -> false;
753+
}
754+
if (filterCover.getAllowFlow() == ManualIOMode.UNFILTERED) {
755+
return item -> true;
756+
}
757+
}
749758
return filterCover.getItemFilter();
750759
}
751760
}
@@ -755,7 +764,15 @@ public Predicate<ItemStack> getItemCapFilter(@Nullable Direction side, IO io) {
755764
public Predicate<FluidStack> getFluidCapFilter(@Nullable Direction side, IO io) {
756765
if (side != null) {
757766
var cover = getCoverContainer().getCoverAtSide(side);
758-
if (cover instanceof FluidFilterCover filterCover && filterCover.getFilterMode().filters(io)) {
767+
if (cover instanceof FluidFilterCover filterCover) {
768+
if (!filterCover.getFilterMode().filters(io)) {
769+
if (filterCover.getAllowFlow() == ManualIOMode.DISABLED) {
770+
return fluid -> false;
771+
}
772+
if (filterCover.getAllowFlow() == ManualIOMode.UNFILTERED) {
773+
return fluid -> true;
774+
}
775+
}
759776
return filterCover.getFluidFilter();
760777
}
761778
}

src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -512,10 +512,15 @@ public CoverableItemHandlerWrapper(IItemHandlerModifiable delegate) {
512512
@NotNull
513513
@Override
514514
public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate) {
515-
if (io == IO.OUT && manualIOMode == ManualIOMode.DISABLED) {
516-
return stack;
515+
if (io == IO.OUT) {
516+
if (manualIOMode == ManualIOMode.DISABLED) {
517+
return stack;
518+
}
519+
if (manualIOMode == ManualIOMode.UNFILTERED) {
520+
return super.insertItem(slot, stack, simulate);
521+
}
517522
}
518-
if (manualIOMode == ManualIOMode.FILTERED && !filterHandler.test(stack)) {
523+
if (!filterHandler.test(stack)) {
519524
return stack;
520525
}
521526
return super.insertItem(slot, stack, simulate);
@@ -524,17 +529,19 @@ public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate
524529
@NotNull
525530
@Override
526531
public ItemStack extractItem(int slot, int amount, boolean simulate) {
527-
if (io == IO.IN && manualIOMode == ManualIOMode.DISABLED) {
528-
return ItemStack.EMPTY;
529-
}
530-
if (manualIOMode == ManualIOMode.FILTERED) {
531-
ItemStack result = super.extractItem(slot, amount, true);
532-
if (result.isEmpty() || !filterHandler.test(result)) {
532+
if (io == IO.IN) {
533+
if (manualIOMode == ManualIOMode.DISABLED) {
533534
return ItemStack.EMPTY;
534535
}
535-
return simulate ? result : super.extractItem(slot, amount, false);
536+
if (manualIOMode == ManualIOMode.UNFILTERED) {
537+
return super.extractItem(slot, amount, simulate);
538+
}
539+
}
540+
ItemStack result = super.extractItem(slot, amount, true);
541+
if (result.isEmpty() || !filterHandler.test(result)) {
542+
return ItemStack.EMPTY;
536543
}
537-
return super.extractItem(slot, amount, simulate);
544+
return simulate ? result : super.extractItem(slot, amount, false);
538545
}
539546
}
540547
}

src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -103,20 +103,34 @@ public FilteredFluidHandlerWrapper(IFluidHandlerModifiable delegate) {
103103

104104
@Override
105105
public int fill(FluidStack resource, FluidAction action) {
106-
if ((filterMode == FilterMode.FILTER_EXTRACT) && allowFlow == ManualIOMode.UNFILTERED)
107-
return super.fill(resource, action);
108-
if (filterMode != FilterMode.FILTER_EXTRACT && getFluidFilter().test(resource))
109-
return super.fill(resource, action);
110-
return 0;
106+
if (filterMode == FilterMode.FILTER_EXTRACT) {
107+
if (allowFlow == ManualIOMode.DISABLED) {
108+
return 0;
109+
}
110+
if (allowFlow == ManualIOMode.UNFILTERED) {
111+
return super.fill(resource, action);
112+
}
113+
}
114+
if (!getFluidFilter().test(resource)) {
115+
return 0;
116+
}
117+
return super.fill(resource, action);
111118
}
112119

113120
@Override
114121
public FluidStack drain(FluidStack resource, FluidAction action) {
115-
if ((filterMode == FilterMode.FILTER_INSERT) && allowFlow == ManualIOMode.UNFILTERED)
116-
return super.drain(resource, action);
117-
if (filterMode != FilterMode.FILTER_INSERT && getFluidFilter().test(resource))
118-
return super.drain(resource, action);
119-
return FluidStack.EMPTY;
122+
if (filterMode == FilterMode.FILTER_INSERT) {
123+
if (allowFlow == ManualIOMode.DISABLED) {
124+
return FluidStack.EMPTY;
125+
}
126+
if (allowFlow == ManualIOMode.UNFILTERED) {
127+
return super.drain(resource, action);
128+
}
129+
}
130+
if (!getFluidFilter().test(resource)) {
131+
return FluidStack.EMPTY;
132+
}
133+
return super.drain(resource, action);
120134
}
121135
}
122136
}

src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -116,25 +116,35 @@ public FilteredItemHandlerWrapper(IItemHandlerModifiable delegate) {
116116

117117
@Override
118118
public @NotNull ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate) {
119-
if ((filterMode == FilterMode.FILTER_EXTRACT) && allowFlow == ManualIOMode.UNFILTERED)
120-
return super.insertItem(slot, stack, simulate);
121-
if (filterMode != FilterMode.FILTER_EXTRACT && getItemFilter().test(stack)) {
122-
return super.insertItem(slot, stack, simulate);
119+
if (filterMode == FilterMode.FILTER_EXTRACT) {
120+
if (allowFlow == ManualIOMode.DISABLED) {
121+
return stack;
122+
}
123+
if (allowFlow == ManualIOMode.UNFILTERED) {
124+
return super.insertItem(slot, stack, simulate);
125+
}
123126
}
124-
return stack;
127+
if (!getItemFilter().test(stack)) {
128+
return stack;
129+
}
130+
return super.insertItem(slot, stack, simulate);
125131
}
126132

127133
@Override
128134
public @NotNull ItemStack extractItem(int slot, int amount, boolean simulate) {
129-
ItemStack result = super.extractItem(slot, amount, true);
130-
if (result.isEmpty() && (filterMode == FilterMode.FILTER_INSERT) && allowFlow == ManualIOMode.UNFILTERED) {
131-
return super.extractItem(slot, amount, false);
135+
if (filterMode == FilterMode.FILTER_INSERT) {
136+
if (allowFlow == ManualIOMode.DISABLED) {
137+
return ItemStack.EMPTY;
138+
}
139+
if (allowFlow == ManualIOMode.UNFILTERED) {
140+
return super.extractItem(slot, amount, simulate);
141+
}
132142
}
133-
134-
if (filterMode != FilterMode.FILTER_INSERT && getItemFilter().test(result)) {
135-
return super.extractItem(slot, amount, false);
143+
ItemStack result = super.extractItem(slot, amount, true);
144+
if (result.isEmpty() || !getItemFilter().test(result)) {
145+
return ItemStack.EMPTY;
136146
}
137-
return ItemStack.EMPTY;
147+
return simulate ? result : super.extractItem(slot, amount, false);
138148
}
139149
}
140150
}

src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -369,21 +369,31 @@ public CoverableFluidHandlerWrapper(IFluidHandlerModifiable delegate) {
369369

370370
@Override
371371
public int fill(FluidStack resource, FluidAction action) {
372-
if (io == IO.OUT && manualIOMode == ManualIOMode.DISABLED) {
373-
return 0;
372+
if (io == IO.OUT) {
373+
if (manualIOMode == ManualIOMode.DISABLED) {
374+
return 0;
375+
}
376+
if (manualIOMode == ManualIOMode.UNFILTERED) {
377+
return super.fill(resource, action);
378+
}
374379
}
375-
if (!filterHandler.test(resource) && manualIOMode == ManualIOMode.FILTERED) {
380+
if (!filterHandler.test(resource)) {
376381
return 0;
377382
}
378383
return super.fill(resource, action);
379384
}
380385

381386
@Override
382387
public FluidStack drain(FluidStack resource, FluidAction action) {
383-
if (io == IO.IN && manualIOMode == ManualIOMode.DISABLED) {
384-
return FluidStack.EMPTY;
388+
if (io == IO.IN) {
389+
if (manualIOMode == ManualIOMode.DISABLED) {
390+
return FluidStack.EMPTY;
391+
}
392+
if (manualIOMode == ManualIOMode.UNFILTERED) {
393+
return super.drain(resource, action);
394+
}
385395
}
386-
if (manualIOMode == ManualIOMode.FILTERED && !filterHandler.test(resource)) {
396+
if (!filterHandler.test(resource)) {
387397
return FluidStack.EMPTY;
388398
}
389399
return super.drain(resource, action);

0 commit comments

Comments
 (0)