diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index fc1ee5214ba..3a132917c30 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -24,20 +24,20 @@ import org.jetbrains.annotations.NotNull; import java.util.function.Consumer; +import java.util.function.Supplier; public abstract class FluidFilter implements Filter { private IDirtyNotifiable dirtyNotifiable; boolean showTip; + private OnMatch onMatch = null; private BaseFluidFilterReader filterReader; protected void setFilterReader(BaseFluidFilterReader filterReader) { this.filterReader = filterReader; } - private OnMatch onMatch = null; - public abstract void match(FluidStack toMatch); public abstract boolean test(FluidStack fluidStack); @@ -68,6 +68,30 @@ protected final void onMatch(boolean matched, FluidStack stack, int index) { public abstract ItemStack getContainerStack(); + public boolean showGlobalTransferLimitSlider() { + return false; + } + + public int getMaxTransferSize() { + return this.filterReader.getMaxCapacity(); + } + + public final void setMaxTransferSize(int maxStackSize) { + setMaxStackSizer(() -> maxStackSize); + } + + public final void setMaxStackSizer(Supplier maxStackSizer) { + this.filterReader.setMaxCapacitySizer(maxStackSizer); + } + + public Supplier getMaxStackSizer() { + return this.filterReader.getMaxStackSizer(); + } + + public final void onMaxStackSizeChange() { + this.filterReader.onMaxStackSizeChange(); + } + public abstract void readFromNBT(NBTTagCompound tagCompound); public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { @@ -76,8 +100,6 @@ public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { public abstract void configureFilterTanks(int amount); - public abstract void setMaxConfigurableFluidSize(int maxStackSize); - public boolean isBlacklist() { return this.filterReader.isBlacklistFilter(); } @@ -121,7 +143,22 @@ public FluidStack getFluidStack(int i) { @Override public void onMaxStackSizeChange() { + this.cache = maxStackSizer.get(); + } + + public final void setMaxCapacitySizer(Supplier maxStackSizer) { + if (this.cache != maxStackSizer.get()) { + this.maxStackSizer = maxStackSizer; + onMaxStackSizeChange(); + } + } + + public final int getMaxCapacity() { + return this.isBlacklistFilter() ? 1000 : this.cache; + } + public Supplier getMaxStackSizer() { + return this.maxStackSizer; } } } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 60b79fb68d3..9a28538549b 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -6,6 +6,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; +import net.minecraft.util.math.MathHelper; import net.minecraftforge.common.util.INBTSerializable; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.ItemStackHandler; @@ -36,6 +37,7 @@ public class FluidFilterContainer implements INBTSerializable { private final IDirtyNotifiable dirtyNotifiable; private FluidFilter currentFluidFilter; private Supplier showTipSupplier; + private Supplier maxFluidSizer = () -> this.maxSize; private int maxSize; public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable, int capacity) { @@ -75,7 +77,7 @@ public void setFluidFilter(FluidFilter fluidFilter) { this.currentFluidFilter = fluidFilter; if (hasFluidFilter()) { currentFluidFilter.setDirtyNotifiable(dirtyNotifiable); - currentFluidFilter.setMaxConfigurableFluidSize(maxSize); + currentFluidFilter.setMaxStackSizer(maxFluidSizer); } } @@ -193,6 +195,27 @@ public boolean hasFluidFilter() { return currentFluidFilter != null; } + public boolean showGlobalTransferLimitSlider() { + return getMaxStackSize() > 1 && (isBlacklistFilter() || !hasFluidFilter() || currentFluidFilter.showGlobalTransferLimitSlider()); + } + + public int getMaxTransferSize() { + if (!showGlobalTransferLimitSlider()) { + return getMaxStackSize(); + } + return maxSize; + } + + public void setMaxTransferSize(int transferStackSize) { + this.maxSize = MathHelper.clamp(transferStackSize, 1, getMaxStackSize()); + onFilterInstanceChange(); + dirtyNotifiable.markAsDirty(); + } + + public int getMaxStackSize() { + return hasFluidFilter() ? currentFluidFilter.getMaxTransferSize() : maxFluidSizer.get(); + } + public void writeInitialSyncData(PacketBuffer packetBuffer) { packetBuffer.writeItemStack(getFilterInventory().getStackInSlot(0)); } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 03268e3584a..ad15856a5da 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -72,7 +72,7 @@ public ItemFilterWrapper getFilterWrapper() { } public int getMaxStackSize() { - return hasItemFilter() ? currentItemFilter.getMaxStackSize() : 1; + return hasItemFilter() ? currentItemFilter.getMaxStackSize() : stackSizer.get(); } public int getTransferStackSize() { @@ -213,8 +213,9 @@ public void setMaxStackSize(int maxStackSizeLimit) { public void setFilterStackSizer(Supplier stackSizer) { this.stackSizer = stackSizer; } + public boolean showGlobalTransferLimitSlider() { - return getMaxStackSize() > 1 && (isBlacklistFilter() || !hasItemFilter()|| currentItemFilter.showGlobalTransferLimitSlider()); + return getMaxStackSize() > 1 && (isBlacklistFilter() || !hasItemFilter() || currentItemFilter.showGlobalTransferLimitSlider()); } public int getSlotTransferLimit(int slotIndex) { diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 375ec82dd44..2c322935fde 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -43,13 +43,6 @@ public void configureFilterTanks(int amount) { this.markDirty(); } - @Override - public void setMaxConfigurableFluidSize(int maxSize) { - for (int i = 0; i < filterReader.getSlots(); i++) { - filterReader.getFluidTank(i).setCapacity(maxSize); - } - } - @Override public ItemStack getContainerStack() { return this.filterReader.getContainer(); @@ -92,15 +85,17 @@ public ItemStack getContainerStack() { public void match(FluidStack toMatch) { boolean matched = false; int index = -1; + var returnable = toMatch.copy(); for (int i = 0; i < filterReader.getSlots(); i++) { var fluid = filterReader.getFluidStack(i); if (fluid != null && fluid.isFluidEqual(toMatch)) { matched = true; index = i; + returnable.amount = fluid.amount; break; } } - this.onMatch(matched, toMatch.copy(), index); + this.onMatch(matched, returnable, index); } @Override @@ -152,7 +147,7 @@ public int getFluidTransferLimit(FluidStack fluidStack) { } return limit; } - protected class SimpleFluidFilterReader extends BaseFluidFilterReader { + protected static class SimpleFluidFilterReader extends BaseFluidFilterReader { public SimpleFluidFilterReader(ItemStack container, int slots) { super(container, slots); } @@ -166,6 +161,14 @@ public void setFluidAmounts(int amount) { getFluidTank(i).setFluidAmount(amount); } } + + @Override + public void onMaxStackSizeChange() { + super.onMaxStackSizeChange(); + for (int i = 0; i < getSlots(); i++) { + getFluidTank(i).setCapacity(getMaxCapacity()); + } + } } public static class WritableFluidTank implements IFluidTank {