diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 599c8aeca89..22959891d94 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -59,6 +59,7 @@ public CoverFluidRegulator(@NotNull CoverDefinition definition, @NotNull Coverab @NotNull EnumFacing attachedSide, int tier, int mbPerTick) { super(definition, coverableView, attachedSide, tier, mbPerTick); this.fluidFilter = new FluidFilterContainer(this); + this.fluidFilter.setMaxTransferSize(1000); } public int getTransferAmount() { @@ -251,10 +252,10 @@ public TransferMode getTransferMode() { } private boolean shouldDisplayAmountSlider() { - if (!this.fluidFilter.hasFilter()) { + if (transferMode == TransferMode.TRANSFER_ANY) { return false; } - return this.transferMode != TransferMode.TRANSFER_ANY && this.fluidFilter.getFilter().showGlobalTransferLimitSlider(); + return fluidFilter.showGlobalTransferLimitSlider(); } public String getTransferAmountString() { diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 236333ad6fd..da82de27137 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -35,8 +35,8 @@ public int getMaxTransferSize() { } public void setMaxTransferSize(int maxTransferSize) { - this.maxTransferSize = maxTransferSize; - if (hasFilter()) currentItemFilter.setMaxTransferSize(maxTransferSize); + this.maxTransferSize = MathHelper.clamp(maxTransferSize, 1, Integer.MAX_VALUE); + if (hasFilter()) currentItemFilter.setMaxTransferSize(this.maxTransferSize); } public boolean hasFilter() { @@ -67,7 +67,7 @@ public void setOnFilterInstanceChange(Runnable onFilterInstanceChange) { } public boolean showGlobalTransferLimitSlider() { - return getMaxTransferSize() > 1 && (isBlacklistFilter() || !hasFilter() || currentItemFilter.showGlobalTransferLimitSlider()); + return getMaxTransferSize() > 0 && (isBlacklistFilter() || !hasFilter() || currentItemFilter.showGlobalTransferLimitSlider()); } public int getTransferLimit(int slotIndex) { diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index beead2a65fd..09982338c25 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -22,6 +22,7 @@ import net.minecraftforge.fluids.IFluidTank; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.function.Consumer; @@ -124,6 +125,7 @@ protected abstract static class BaseFluidFilterReader extends BaseFilterReader { public BaseFluidFilterReader(ItemStack container, int slots) { super(container, slots); + this.maxTransferRate = 1000; } @Override @@ -139,13 +141,11 @@ public NBTTagList getItemsNbt() { return nbt.getTagList(KEY_FLUIDS, Constants.NBT.TAG_COMPOUND); } + @Nullable public FluidStack getFluidStack(int i) { return getFluidTank(i).getFluid(); } public abstract IFluidTank getFluidTank(int i); - - @Override - public void onTranferRateChange() {} } } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index a05e97223fc..18dac9533df 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -103,7 +103,7 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) panel.closePanel(); } }, true) - .size(18).marginRight(4) + .size(18).marginRight(2) .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY)) .child(new ButtonWidget<>() .setEnabledIf(w -> hasFilter()) diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 5eb78d21864..bfd44a32526 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -68,7 +68,7 @@ public ItemStack getContainerStack() { for (int i = 0; i < syncHandlers.length; i++) { var tank = this.filterReader.getFluidTank(i); syncHandlers[i] = new FixedFluidSlotSH(tank).phantom(true); - syncHandlers[i].setValue(tank.getFluid(), false, false); + syncHandlers[i].updateCacheFromSource(true); } return new Row().coverChildrenHeight().widthRel(1f) @@ -115,7 +115,7 @@ public void initUI(Consumer widgetGroup) {} @Override public boolean showGlobalTransferLimitSlider() { - return !isBlacklistFilter() || getMaxTransferSize() > 0; + return isBlacklistFilter() && getMaxTransferSize() > 0; } public void readFromNBT(NBTTagCompound tagCompound) { @@ -157,9 +157,10 @@ public void setFluidAmounts(int amount) { @Override public void onTranferRateChange() { - super.onTranferRateChange(); for (int i = 0; i < getSlots(); i++) { - getFluidTank(i).setCapacity(getMaxTransferRate()); + var stack = getFluidStack(i); + if (stack == null) continue; + getFluidTank(i).setFluidAmount(Math.min(stack.amount, getMaxTransferRate())); } } } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 84dbe8a3814..5cb50272fdf 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -222,7 +222,6 @@ public void setStackInSlot(int slot, ItemStack stack) { @Override public void onTranferRateChange() { - super.onTranferRateChange(); for (int i = 0; i < getSlots(); i++) { ItemStack itemStack = getStackInSlot(i); if (!itemStack.isEmpty()) { diff --git a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java index d0d9dee9eaa..1a77104c5cb 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -3,6 +3,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.math.MathHelper; import net.minecraftforge.common.util.Constants; import com.cleanroommc.modularui.utils.ItemStackItemHandler; @@ -10,7 +11,7 @@ public abstract class BaseFilterReader extends ItemStackItemHandler { protected final ItemStack container; - protected int maxTransferRate; + protected int maxTransferRate = 1; protected static final String KEY_ITEMS = "Items"; protected static final String BLACKLIST = "is_blacklist"; public BaseFilterReader(ItemStack container, int slots) { @@ -25,8 +26,11 @@ public ItemStack getContainer () { public abstract void onTranferRateChange(); public final void setBlacklistFilter(boolean blacklistFilter) { - getStackTag().setBoolean(BLACKLIST, blacklistFilter); - onTranferRateChange(); + var old = getStackTag().getBoolean(BLACKLIST); + if (old != blacklistFilter) { + getStackTag().setBoolean(BLACKLIST, blacklistFilter); + onTranferRateChange(); + } } public final boolean isBlacklistFilter() { @@ -37,6 +41,7 @@ public final boolean isBlacklistFilter() { } public final void setMaxTransferRate(int transferRate) { + transferRate = MathHelper.clamp(transferRate, 1, Integer.MAX_VALUE); if (this.maxTransferRate != transferRate) { this.maxTransferRate = transferRate; onTranferRateChange(); @@ -45,7 +50,7 @@ public final void setMaxTransferRate(int transferRate) { public final int getMaxTransferRate() { - return this.isBlacklistFilter() ? 1 : this.maxTransferRate; + return this.maxTransferRate; } protected NBTTagCompound getStackTag() {