Skip to content

Commit

Permalink
try and make fluid filter container similar to item container
Browse files Browse the repository at this point in the history
  • Loading branch information
ghzdude committed Jan 16, 2024
1 parent 1261e56 commit 8492380
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 16 deletions.
45 changes: 41 additions & 4 deletions src/main/java/gregtech/common/covers/filter/FluidFilter.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<FluidStack> {

private IDirtyNotifiable dirtyNotifiable;
boolean showTip;

private OnMatch<FluidStack> onMatch = null;
private BaseFluidFilterReader filterReader;

protected void setFilterReader(BaseFluidFilterReader filterReader) {
this.filterReader = filterReader;
}

private OnMatch<FluidStack> onMatch = null;

public abstract void match(FluidStack toMatch);

public abstract boolean test(FluidStack fluidStack);
Expand Down Expand Up @@ -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<Integer> maxStackSizer) {
this.filterReader.setMaxCapacitySizer(maxStackSizer);
}

public Supplier<Integer> getMaxStackSizer() {
return this.filterReader.getMaxStackSizer();
}

public final void onMaxStackSizeChange() {
this.filterReader.onMaxStackSizeChange();
}

public abstract void readFromNBT(NBTTagCompound tagCompound);

public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) {
Expand All @@ -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();
}
Expand Down Expand Up @@ -121,7 +143,22 @@ public FluidStack getFluidStack(int i) {

@Override
public void onMaxStackSizeChange() {
this.cache = maxStackSizer.get();
}

public final void setMaxCapacitySizer(Supplier<Integer> maxStackSizer) {
if (this.cache != maxStackSizer.get()) {
this.maxStackSizer = maxStackSizer;
onMaxStackSizeChange();
}
}

public final int getMaxCapacity() {
return this.isBlacklistFilter() ? 1000 : this.cache;
}

public Supplier<Integer> getMaxStackSizer() {
return this.maxStackSizer;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -36,6 +37,7 @@ public class FluidFilterContainer implements INBTSerializable<NBTTagCompound> {
private final IDirtyNotifiable dirtyNotifiable;
private FluidFilter currentFluidFilter;
private Supplier<Boolean> showTipSupplier;
private Supplier<Integer> maxFluidSizer = () -> this.maxSize;
private int maxSize;

public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable, int capacity) {
Expand Down Expand Up @@ -75,7 +77,7 @@ public void setFluidFilter(FluidFilter fluidFilter) {
this.currentFluidFilter = fluidFilter;
if (hasFluidFilter()) {
currentFluidFilter.setDirtyNotifiable(dirtyNotifiable);
currentFluidFilter.setMaxConfigurableFluidSize(maxSize);
currentFluidFilter.setMaxStackSizer(maxFluidSizer);
}
}

Expand Down Expand Up @@ -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));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public ItemFilterWrapper getFilterWrapper() {
}

public int getMaxStackSize() {
return hasItemFilter() ? currentItemFilter.getMaxStackSize() : 1;
return hasItemFilter() ? currentItemFilter.getMaxStackSize() : stackSizer.get();
}

public int getTransferStackSize() {
Expand Down Expand Up @@ -213,8 +213,9 @@ public void setMaxStackSize(int maxStackSizeLimit) {
public void setFilterStackSizer(Supplier<Integer> 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) {
Expand Down
21 changes: 12 additions & 9 deletions src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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);
}
Expand All @@ -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 {
Expand Down

0 comments on commit 8492380

Please sign in to comment.