Skip to content

Commit

Permalink
ah shit, here we go again
Browse files Browse the repository at this point in the history
yeet IItemFilter.java and IFluidFilter.java
test/match against Object and cast appropriately
remove MatchResult's generics
move similar methods into BaseFilterContainer
  • Loading branch information
ghzdude committed Mar 20, 2024
1 parent f6f58fc commit 9a50a6f
Show file tree
Hide file tree
Showing 26 changed files with 286 additions and 327 deletions.
4 changes: 2 additions & 2 deletions src/main/java/gregtech/common/covers/CoverEnderFluidLink.java
Original file line number Diff line number Diff line change
Expand Up @@ -142,9 +142,9 @@ protected void transferFluids() {
getAttachedSide());
if (fluidHandler == null) return;
if (pumpMode == CoverPump.PumpMode.IMPORT) {
GTTransferUtils.transferFluids(fluidHandler, linkedTank, TRANSFER_RATE, fluidFilter::testFluidStack);
GTTransferUtils.transferFluids(fluidHandler, linkedTank, TRANSFER_RATE, fluidFilter::test);
} else if (pumpMode == CoverPump.PumpMode.EXPORT) {
GTTransferUtils.transferFluids(linkedTank, fluidHandler, TRANSFER_RATE, fluidFilter::testFluidStack);
GTTransferUtils.transferFluids(linkedTank, fluidHandler, TRANSFER_RATE, fluidFilter::test);
}
}

Expand Down
16 changes: 8 additions & 8 deletions src/main/java/gregtech/common/covers/CoverFluidFilter.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
import gregtech.api.util.GTUtility;
import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer;
import gregtech.client.utils.TooltipHelper;
import gregtech.common.covers.filter.BaseFilter;
import gregtech.common.covers.filter.FluidFilterContainer;
import gregtech.common.covers.filter.IFluidFilter;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
Expand Down Expand Up @@ -108,8 +108,8 @@ public FluidFilterMode getFilterMode() {
}

@SuppressWarnings("DataFlowIssue") // this cover always has a filter
public @NotNull IFluidFilter getFluidFilter() {
return this.fluidFilterContainer.getFluidFilter();
public @NotNull BaseFilter getFilter() {
return this.fluidFilterContainer.getFilter();
}

@Override
Expand Down Expand Up @@ -142,7 +142,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag
guiSyncManager.syncValue("filtering_mode", filteringMode);
this.fluidFilterContainer.setMaxTransferSize(1);

return getFluidFilter().createPanel(guiSyncManager)
return getFilter().createPanel(guiSyncManager)
.size(176, 194).padding(7)
.child(CoverWithUI.createTitleRow(getPickItem()))
.child(new Column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight()
Expand All @@ -153,7 +153,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag
.build())
.child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget()
.height(1).widthRel(0.95f).margin(0, 4))
.child(getFluidFilter().createWidgets(guiSyncManager)))
.child(getFilter().createWidgets(guiSyncManager)))
.child(SlotGroupWidget.playerInventory().bottom(7).left(7));
}

Expand Down Expand Up @@ -198,15 +198,15 @@ public FluidHandlerFiltered(@NotNull IFluidHandler delegate) {
}

public int fill(FluidStack resource, boolean doFill) {
if (getFilterMode() == FluidFilterMode.FILTER_DRAIN || !fluidFilterContainer.testFluidStack(resource)) {
if (getFilterMode() == FluidFilterMode.FILTER_DRAIN || !fluidFilterContainer.test(resource)) {
return 0;
}
return super.fill(resource, doFill);
}

@Nullable
public FluidStack drain(FluidStack resource, boolean doDrain) {
if (getFilterMode() == FluidFilterMode.FILTER_FILL || !fluidFilterContainer.testFluidStack(resource)) {
if (getFilterMode() == FluidFilterMode.FILTER_FILL || !fluidFilterContainer.test(resource)) {
return null;
}
return super.drain(resource, doDrain);
Expand All @@ -216,7 +216,7 @@ public FluidStack drain(FluidStack resource, boolean doDrain) {
public FluidStack drain(int maxDrain, boolean doDrain) {
if (getFilterMode() != FluidFilterMode.FILTER_FILL) {
FluidStack result = super.drain(maxDrain, false);
if (result == null || result.amount <= 0 || !fluidFilterContainer.testFluidStack(result)) {
if (result == null || result.amount <= 0 || !fluidFilterContainer.test(result)) {
return null;
}
return doDrain ? super.drain(maxDrain, true) : result;
Expand Down
15 changes: 8 additions & 7 deletions src/main/java/gregtech/common/covers/CoverFluidRegulator.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import gregtech.client.renderer.texture.Textures;
import gregtech.client.renderer.texture.cube.SimpleSidedCubeRenderer;
import gregtech.common.covers.filter.FluidFilterContainer;
import gregtech.common.covers.filter.SimpleFluidFilter;

import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.nbt.NBTTagCompound;
Expand Down Expand Up @@ -63,12 +64,12 @@ protected int doTransferFluidsInternal(IFluidHandler myFluidHandler, IFluidHandl
}
return switch (transferMode) {
case TRANSFER_ANY -> GTTransferUtils.transferFluids(sourceHandler, destHandler, transferLimit,
fluidFilterContainer::testFluidStack);
fluidFilterContainer::test);
case KEEP_EXACT -> doKeepExact(transferLimit, sourceHandler, destHandler,
fluidFilterContainer::testFluidStack,
fluidFilterContainer::test,
this.fluidFilterContainer.getTransferSize());
case TRANSFER_EXACT -> doTransferExact(transferLimit, sourceHandler, destHandler,
fluidFilterContainer::testFluidStack, this.fluidFilterContainer.getTransferSize());
fluidFilterContainer::test, this.fluidFilterContainer.getTransferSize());
};
}

Expand All @@ -78,7 +79,7 @@ protected int doTransferExact(int transferLimit, IFluidHandler sourceHandler, IF
for (IFluidTankProperties tankProperties : sourceHandler.getTankProperties()) {
FluidStack sourceFluid = tankProperties.getContents();
if (this.fluidFilterContainer.hasFilter()) {
supplyAmount = this.fluidFilterContainer.getFluidFilter().getTransferLimit(sourceFluid, supplyAmount);
supplyAmount = this.fluidFilterContainer.getFilter().getTransferLimit(sourceFluid, supplyAmount);
}
if (fluidLeftToTransfer < supplyAmount)
break;
Expand Down Expand Up @@ -121,7 +122,7 @@ protected int doKeepExact(final int transferLimit,
break;

if (this.fluidFilterContainer.hasFilter()) {
keepAmount = this.fluidFilterContainer.getFluidFilter().getTransferLimit(fluidStack, keepAmount);
keepAmount = this.fluidFilterContainer.getFilter().getTransferLimit(fluidStack, keepAmount);
}

// if fluid needs to be moved to meet the Keep Exact value
Expand Down Expand Up @@ -309,8 +310,8 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) {
this.transferMode = TransferMode.VALUES[tagCompound.getInteger("TransferMode")];
// legacy NBT tag
if (!tagCompound.hasKey("filterv2") && tagCompound.hasKey("TransferAmount")) {
if (this.fluidFilterContainer.hasFilter()) {
this.fluidFilterContainer.getFluidFilter()
if (this.fluidFilterContainer.getFilter() instanceof SimpleFluidFilter simpleFluidFilter) {
simpleFluidFilter
.configureFilterTanks(tagCompound.getInteger("TransferAmount"));
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/gregtech/common/covers/CoverFluidVoiding.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ protected void doTransferFluids() {
return;
}
GTTransferUtils.transferFluids(myFluidHandler, nullFluidTank, Integer.MAX_VALUE,
fluidFilterContainer::testFluidStack);
fluidFilterContainer::test);
}

@Override
Expand Down Expand Up @@ -132,7 +132,7 @@ public NullFluidTank() {

@Override
public int fill(FluidStack resource, boolean doFill) {
if (fluidFilterContainer.testFluidStack(resource)) {
if (fluidFilterContainer.test(resource)) {
return resource.amount;
}
return 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ protected void doTransferFluids() {
}
switch (voidingMode) {
case VOID_ANY -> GTTransferUtils.transferFluids(myFluidHandler, nullFluidTank, Integer.MAX_VALUE,
fluidFilterContainer::testFluidStack);
case VOID_OVERFLOW -> voidOverflow(myFluidHandler, fluidFilterContainer::testFluidStack,
fluidFilterContainer::test);
case VOID_OVERFLOW -> voidOverflow(myFluidHandler, fluidFilterContainer::test,
this.transferAmount);
}
}
Expand All @@ -74,7 +74,7 @@ protected void voidOverflow(final IFluidHandler sourceHandler,
FluidStack sourceFluid = tankProperties.getContents();
if (this.fluidFilterContainer.hasFilter() &&
voidingMode == VoidingMode.VOID_OVERFLOW) {
keepAmount = this.fluidFilterContainer.getFluidFilter()
keepAmount = this.fluidFilterContainer.getFilter()
.getTransferLimit(sourceFluid, getMaxTransferRate());
}
if (sourceFluid == null || sourceFluid.amount == 0 ||
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/gregtech/common/covers/CoverItemFilter.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import gregtech.api.util.GTUtility;
import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer;
import gregtech.client.utils.TooltipHelper;
import gregtech.common.covers.filter.IItemFilter;
import gregtech.common.covers.filter.BaseFilter;
import gregtech.common.covers.filter.ItemFilterContainer;

import net.minecraft.entity.player.EntityPlayer;
Expand Down Expand Up @@ -106,8 +106,8 @@ public ItemFilterMode getFilterMode() {
}

@SuppressWarnings("DataFlowIssue") // this cover always has a filter
public @NotNull IItemFilter getItemFilter() {
return this.itemFilterContainer.getItemFilter();
public @NotNull BaseFilter getFilter() {
return this.itemFilterContainer.getFilter();
}

@Override
Expand Down Expand Up @@ -144,7 +144,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag

guiSyncManager.syncValue("filtering_mode", filteringMode);

return getItemFilter().createPanel(guiSyncManager)
return getFilter().createPanel(guiSyncManager)
.size(176, 194).padding(7)
.child(CoverWithUI.createTitleRow(getPickItem()).left(4))
.child(new Column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight()
Expand All @@ -155,7 +155,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag
.build())
.child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget()
.height(1).widthRel(0.95f).margin(0, 4))
.child(getItemFilter().createWidgets(guiSyncManager).left(0)))
.child(getFilter().createWidgets(guiSyncManager).left(0)))
.child(SlotGroupWidget.playerInventory().bottom(7).left(7));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ protected void voidOverflow(IItemHandler myItemHandler) {
itemToVoidAmount = typeItemInfo.totalCount - itemFilterContainer.getTransferSize();
} else {
var result = itemFilterContainer.match(typeItemInfo.itemStack);
itemToVoidAmount = result.getMatchedStack().getCount();
itemToVoidAmount = result.getItemStack().getCount();
}

if (itemToVoidAmount <= 0) {
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/gregtech/common/covers/CoverPump.java
Original file line number Diff line number Diff line change
Expand Up @@ -170,16 +170,16 @@ protected int doTransferFluidsInternal(IFluidHandler myFluidHandler, IFluidHandl
int transferLimit) {
if (pumpMode == PumpMode.IMPORT) {
return GTTransferUtils.transferFluids(fluidHandler, myFluidHandler, transferLimit,
fluidFilterContainer::testFluidStack);
fluidFilterContainer::test);
} else if (pumpMode == PumpMode.EXPORT) {
return GTTransferUtils.transferFluids(myFluidHandler, fluidHandler, transferLimit,
fluidFilterContainer::testFluidStack);
fluidFilterContainer::test);
}
return 0;
}

protected boolean checkInputFluid(FluidStack fluidStack) {
return fluidFilterContainer.testFluidStack(fluidStack);
return fluidFilterContainer.test(fluidStack);
}

@Override
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/gregtech/common/covers/CoverRoboticArm.java
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ protected int doKeepExact(IItemHandler itemHandler, IItemHandler myItemHandler,
int itemToKeepAmount = itemFilterContainer.getTransferLimit(sourceInfo.filterSlot);

// only run multiplier for smart item
if (itemFilterContainer.getItemFilter() instanceof SmartItemFilter) {
if (itemFilterContainer.getFilter() instanceof SmartItemFilter) {
if (itemFilterContainer.getTransferSize() > 1 && itemToKeepAmount * 2 <= sourceInfo.totalCount) {
// get the max we can keep from the item filter variable
int maxMultiplier = Math.floorDiv(sourceInfo.totalCount, itemToKeepAmount);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ public void update() {
for (IFluidTankProperties properties : tankProperties) {
FluidStack contents = properties.getContents();

if (contents != null && fluidFilter.testFluidStack(contents))
if (contents != null && fluidFilter.test(contents))
storedFluid += contents.amount;
}

Expand Down
56 changes: 56 additions & 0 deletions src/main/java/gregtech/common/covers/filter/BaseFilter.java
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.minecraftforge.fluids.FluidStack;

import com.cleanroommc.modularui.api.drawable.IKey;
import com.cleanroommc.modularui.api.widget.IWidget;
Expand All @@ -31,6 +32,61 @@ public final void setBlacklistFilter(boolean blacklistFilter) {
markDirty();
}

@Override
public final MatchResult match(Object toMatch) {
if (toMatch instanceof ItemStack stack) {
return matchItem(stack);
} else if (toMatch instanceof FluidStack stack) {
return matchFluid(stack);
}
return MatchResult.NONE;
}

public MatchResult matchFluid(FluidStack fluidStack) {
return MatchResult.NONE;
}

public MatchResult matchItem(ItemStack itemStack) {
return MatchResult.NONE;
}

@Override
public final boolean test(Object toTest) {
boolean b = false;
if (toTest instanceof ItemStack stack) {
b = testItem(stack);
} else if (toTest instanceof FluidStack stack) {
b = testFluid(stack);
}
return b != isBlacklistFilter();
}

public boolean testFluid(FluidStack toTest) {
return false;
}

public boolean testItem(ItemStack toTest) {
return false;
}

@Override
public final int getTransferLimit(Object o, int transferSize) {
if (o instanceof ItemStack stack) {
return getTransferLimit(stack, transferSize);
} else if (o instanceof FluidStack stack) {
return getTransferLimit(stack, transferSize);
}
return 0;
}

public int getTransferLimit(FluidStack stack, int transferSize) {
return 0;
}

public int getTransferLimit(ItemStack stack, int transferSize) {
return 0;
}

public final boolean isBlacklistFilter() {
return filterReader.isBlacklistFilter();
}
Expand Down
Loading

0 comments on commit 9a50a6f

Please sign in to comment.