From 9a50a6fe75bf5d7aae0f3cf2da449d97afc26f6b Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 7 Mar 2024 15:18:09 -0700 Subject: [PATCH] ah shit, here we go again yeet IItemFilter.java and IFluidFilter.java test/match against Object and cast appropriately remove MatchResult's generics move similar methods into BaseFilterContainer --- .../common/covers/CoverEnderFluidLink.java | 4 +- .../common/covers/CoverFluidFilter.java | 16 +-- .../common/covers/CoverFluidRegulator.java | 15 +-- .../common/covers/CoverFluidVoiding.java | 4 +- .../covers/CoverFluidVoidingAdvanced.java | 6 +- .../common/covers/CoverItemFilter.java | 10 +- .../covers/CoverItemVoidingAdvanced.java | 2 +- .../gregtech/common/covers/CoverPump.java | 6 +- .../common/covers/CoverRoboticArm.java | 2 +- .../detector/CoverDetectorFluidAdvanced.java | 2 +- .../common/covers/filter/BaseFilter.java | 56 +++++++++ .../covers/filter/BaseFilterContainer.java | 83 ++++++++++++- .../covers/filter/FilterTypeRegistry.java | 14 +-- .../covers/filter/FluidFilterContainer.java | 110 ++---------------- .../common/covers/filter/IFilter.java | 7 +- .../common/covers/filter/IFluidFilter.java | 25 ---- .../common/covers/filter/IItemFilter.java | 23 ---- .../covers/filter/ItemFilterContainer.java | 98 ++-------------- .../common/covers/filter/MatchResult.java | 32 +++-- .../filter/OreDictionaryItemFilter.java | 13 ++- .../covers/filter/SimpleFluidFilter.java | 18 +-- .../covers/filter/SimpleItemFilter.java | 15 ++- .../common/covers/filter/SmartItemFilter.java | 14 ++- .../covers/filter/WidgetGroupFluidFilter.java | 8 +- .../covers/filter/WidgetGroupItemFilter.java | 10 +- .../provider/CoverInfoProvider.java | 20 ++-- 26 files changed, 286 insertions(+), 327 deletions(-) delete mode 100644 src/main/java/gregtech/common/covers/filter/IFluidFilter.java delete mode 100644 src/main/java/gregtech/common/covers/filter/IItemFilter.java diff --git a/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java b/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java index 0dcb3633da2..006d9f3676f 100644 --- a/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java +++ b/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java @@ -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); } } diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index c5743bf2994..0a7c1b2b58a 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -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; @@ -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 @@ -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() @@ -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)); } @@ -198,7 +198,7 @@ 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); @@ -206,7 +206,7 @@ public int fill(FluidStack resource, boolean 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); @@ -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; diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 586dd29a6cd..d41152f4721 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -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; @@ -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()); }; } @@ -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; @@ -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 @@ -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")); } } diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoiding.java b/src/main/java/gregtech/common/covers/CoverFluidVoiding.java index 64376ba0235..c781f816bef 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoiding.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoiding.java @@ -61,7 +61,7 @@ protected void doTransferFluids() { return; } GTTransferUtils.transferFluids(myFluidHandler, nullFluidTank, Integer.MAX_VALUE, - fluidFilterContainer::testFluidStack); + fluidFilterContainer::test); } @Override @@ -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; diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index 0a484462006..35832c85656 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -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); } } @@ -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 || diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index d8b9e54392e..2567ee6872e 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -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; @@ -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 @@ -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() @@ -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)); } diff --git a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java index d755df3eca4..eaebd680eb5 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java @@ -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) { diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index c95099787e8..1b2f9be4f95 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -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 diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index 0fd7c3ff550..de62fb23252 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -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); diff --git a/src/main/java/gregtech/common/covers/detector/CoverDetectorFluidAdvanced.java b/src/main/java/gregtech/common/covers/detector/CoverDetectorFluidAdvanced.java index ed6eb97ff37..ec3c316c883 100644 --- a/src/main/java/gregtech/common/covers/detector/CoverDetectorFluidAdvanced.java +++ b/src/main/java/gregtech/common/covers/detector/CoverDetectorFluidAdvanced.java @@ -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; } diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilter.java b/src/main/java/gregtech/common/covers/filter/BaseFilter.java index b25f1893409..ca9f1bcff88 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilter.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -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; @@ -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(); } diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index b24be110289..f90db645a8f 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -1,5 +1,6 @@ package gregtech.common.covers.filter; +import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; @@ -8,9 +9,18 @@ import net.minecraft.util.math.MathHelper; import net.minecraftforge.items.ItemStackHandler; +import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.api.widget.IWidget; +import com.cleanroommc.modularui.api.widget.Interactable; +import com.cleanroommc.modularui.drawable.GuiTextures; import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.value.sync.PanelSyncHandler; +import com.cleanroommc.modularui.value.sync.SyncHandlers; +import com.cleanroommc.modularui.widgets.ButtonWidget; +import com.cleanroommc.modularui.widgets.ItemSlot; +import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -29,6 +39,24 @@ protected BaseFilterContainer(IDirtyNotifiable dirtyNotifiable) { this.dirtyNotifiable = dirtyNotifiable; } + public boolean test(Object toTest) { + return !hasFilter() || getFilter().test(toTest); + } + + public MatchResult match(Object toMatch) { + if (!hasFilter()) + return MatchResult.create(true, toMatch, -1); + + return getFilter().match(toMatch); + } + + public int getTransferLimit(Object stack) { + if (!hasFilter() || isBlacklistFilter()) { + return getTransferSize(); + } + return getFilter().getTransferLimit(stack, getTransferSize()); + } + @Override public int getSlotLimit(int slot) { return 1; @@ -65,12 +93,12 @@ public void setStackInSlot(int slot, @NotNull ItemStack stack) { @Override public boolean isItemValid(int slot, @NotNull ItemStack stack) { - return FilterTypeRegistry.isFilter(stack); + return isItemValid(stack); } - public boolean isItemValid(ItemStack stack) { - return isItemValid(0, stack); - } + protected abstract boolean isItemValid(ItemStack stack); + + protected abstract String getFilterName(); // todo update stack for insert and extract, though that shouldn't be called normally @Override @@ -175,7 +203,52 @@ public void deserializeNBT(NBTTagCompound nbt) { } /** Uses Cleanroom MUI */ - public abstract IWidget initUI(ModularPanel main, GuiSyncManager manager); + public IWidget initUI(ModularPanel main, GuiSyncManager manager) { + var panel = new PanelSyncHandler(main) { + + // the panel can't be opened if there's no filter, so `getFilter()` will never be null + @SuppressWarnings("DataFlowIssue") + @Override + public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { + getFilter().setMaxTransferSize(getMaxTransferSize()); + return getFilter().createPopupPanel(syncManager); + } + }; + manager.syncValue("filter_panel", panel); + var filterButton = new ButtonWidget<>(); + filterButton.setEnabled(hasFilter()); + + return new Row().coverChildrenHeight() + .marginBottom(2).widthRel(1f) + .child(new ItemSlot() + .slot(SyncHandlers.itemSlot(this, 0) + .filter(this::isItemValid) + .singletonSlotGroup(101) + .changeListener((newItem, onlyAmountChanged, client, init) -> { + if (!isItemValid(newItem) && panel.isPanelOpen()) { + panel.closePanel(); + } + })) + .size(18).marginRight(2) + .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY.asIcon().size(16))) + .child(filterButton + .background(GTGuiTextures.MC_BUTTON, GTGuiTextures.FILTER_SETTINGS_OVERLAY.asIcon().size(16)) + .hoverBackground(GuiTextures.MC_BUTTON_HOVERED, + GTGuiTextures.FILTER_SETTINGS_OVERLAY.asIcon().size(16)) + .setEnabledIf(w -> hasFilter()) + .onMousePressed(i -> { + if (!panel.isPanelOpen()) { + panel.openPanel(); + } else { + panel.closePanel(); + } + Interactable.playButtonClickSound(); + return true; + })) + .child(IKey.dynamic(this::getFilterName) + .alignment(Alignment.CenterRight).asWidget() + .left(36).right(0).height(18)); + } public void writeInitialSyncData(PacketBuffer packetBuffer) { packetBuffer.writeItemStack(this.getFilterStack()); diff --git a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java index 15c215d35a4..aefc50f0912 100644 --- a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java +++ b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java @@ -90,7 +90,7 @@ public static void registerFilter(FilterFactory factory, ItemStack stack) { */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public static int getIdForItemFilter(IItemFilter itemFilter) { + public static int getIdForItemFilter(BaseFilter itemFilter) { return 0; } @@ -99,7 +99,7 @@ public static int getIdForItemFilter(IItemFilter itemFilter) { */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public static int getIdForFluidFilter(IFluidFilter fluidFilter) { + public static int getIdForFluidFilter(BaseFilter fluidFilter) { return 0; } @@ -108,9 +108,9 @@ public static int getIdForFluidFilter(IFluidFilter fluidFilter) { */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public static IItemFilter createItemFilterById(int filterId) { + public static BaseFilter createItemFilterById(int filterId) { var factory = itemFilterById.get(filterId); - return (IItemFilter) createNewFilterInstance(factory); + return createNewFilterInstance(factory); } /** @@ -118,9 +118,9 @@ public static IItemFilter createItemFilterById(int filterId) { */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public static IFluidFilter createFluidFilterById(int filterId) { + public static BaseFilter createFluidFilterById(int filterId) { var factory = fluidFilterById.get(filterId); - return (IFluidFilter) createNewFilterInstance(factory); + return createNewFilterInstance(factory); } public static @NotNull BaseFilter getFilterForStack(ItemStack stack) { @@ -139,7 +139,7 @@ public static IFilter.FilterType getFilterTypeForStack(ItemStack stack) { return filterFactory.create(stack); } - private static @NotNull IFilter createNewFilterInstance(FilterFactory filterFactory) { + private static @NotNull BaseFilter createNewFilterInstance(FilterFactory filterFactory) { return createNewFilterInstance(filterFactory, ItemStack.EMPTY); } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 9e4ff667e32..dfef2155f4d 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -1,71 +1,21 @@ package gregtech.common.covers.filter; -import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.IDirtyNotifiable; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.INBTSerializable; -import net.minecraftforge.fluids.FluidStack; +import net.minecraft.item.ItemStack; import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.api.widget.IWidget; -import com.cleanroommc.modularui.api.widget.Interactable; -import com.cleanroommc.modularui.drawable.GuiTextures; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Alignment; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; -import com.cleanroommc.modularui.value.sync.PanelSyncHandler; -import com.cleanroommc.modularui.value.sync.SyncHandlers; -import com.cleanroommc.modularui.widgets.ButtonWidget; -import com.cleanroommc.modularui.widgets.ItemSlot; -import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.Nullable; import java.util.function.BooleanSupplier; import java.util.function.Consumer; -public class FluidFilterContainer extends BaseFilterContainer - implements INBTSerializable { +public class FluidFilterContainer extends BaseFilterContainer { public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable) { super(dirtyNotifiable); } - public boolean testFluidStack(FluidStack fluidStack) { - return testFluidStack(fluidStack, !isBlacklistFilter()); - } - - public boolean testFluidStack(FluidStack fluidStack, boolean whitelist) { - boolean result = true; - if (hasFilter()) { - result = getFluidFilter().test(fluidStack); - } - return whitelist != result; - } - - public boolean test(FluidStack toTest) { - return !hasFilter() || getFluidFilter().test(toTest); - } - - public MatchResult match(FluidStack toMatch) { - if (!hasFilter()) - return MatchResult.create(true, toMatch, -1); - - return getFluidFilter().match(toMatch); - } - - public int getTransferLimit(FluidStack stack) { - if (!hasFilter() || isBlacklistFilter()) { - return getTransferSize(); - } - return getFluidFilter().getTransferLimit(stack, getTransferSize()); - } - - public final @Nullable IFluidFilter getFluidFilter() { - return (IFluidFilter) getFilter(); - } - /** @deprecated uses old builtin MUI */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") @@ -99,53 +49,15 @@ public void blacklistUI(int y, Consumer widgetGroup, Bo widgetGroup.accept(blacklistButton); } - /** Uses Cleanroom MUI */ - public IWidget initUI(ModularPanel main, GuiSyncManager manager) { - var panel = new PanelSyncHandler(main) { - - // the panel can't be opened if there's no filter, so `getFilter()` will never be null - @SuppressWarnings("DataFlowIssue") - @Override - public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { - getFilter().setMaxTransferSize(getMaxTransferSize()); - return getFilter().createPopupPanel(syncManager); - } - }; - manager.syncValue("filter_panel", panel); - var filterButton = new ButtonWidget<>(); - filterButton.setEnabled(hasFilter()); + @Override + protected boolean isItemValid(ItemStack stack) { + return FilterTypeRegistry.isFluidFilter(stack); + } - return new Row().coverChildrenHeight() - .marginBottom(2).widthRel(1f) - .child(new ItemSlot() - .slot(SyncHandlers.itemSlot(this, 0) - .filter(FilterTypeRegistry::isFluidFilter) - .singletonSlotGroup(101) - .changeListener((newItem, onlyAmountChanged, client, init) -> { - if (!FilterTypeRegistry.isFilter(newItem) && panel.isPanelOpen()) { - panel.closePanel(); - } - })) - .size(18).marginRight(2) - .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY.asIcon().size(16))) - .child(filterButton - .background(GTGuiTextures.MC_BUTTON, GTGuiTextures.FILTER_SETTINGS_OVERLAY.asIcon().size(16)) - .hoverBackground(GuiTextures.MC_BUTTON_HOVERED, - GTGuiTextures.FILTER_SETTINGS_OVERLAY.asIcon().size(16)) - .setEnabledIf(w -> hasFilter()) - .onMousePressed(i -> { - if (!panel.isPanelOpen()) { - panel.openPanel(); - } else { - panel.closePanel(); - } - Interactable.playButtonClickSound(); - return true; - })) - .child(IKey.dynamic(() -> hasFilter() ? - getFilterStack().getDisplayName() : - IKey.lang("metaitem.fluid_filter.name").get()) - .alignment(Alignment.CenterRight).asWidget() - .left(36).right(0).height(18)); + @Override + protected String getFilterName() { + return hasFilter() ? + getFilterStack().getDisplayName() : + IKey.lang("metaitem.fluid_filter.name").get(); } } diff --git a/src/main/java/gregtech/common/covers/filter/IFilter.java b/src/main/java/gregtech/common/covers/filter/IFilter.java index 2ca37fa041c..ab9f7998312 100644 --- a/src/main/java/gregtech/common/covers/filter/IFilter.java +++ b/src/main/java/gregtech/common/covers/filter/IFilter.java @@ -5,7 +5,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import com.cleanroommc.modularui.api.widget.IWidget; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.widget.Widget; @@ -44,6 +43,12 @@ public interface IFilter { boolean showGlobalTransferLimitSlider(); + MatchResult match(Object toMatch); + + boolean test(Object toTest); + + int getTransferLimit(Object stack, int transferSize); + default int getTransferLimit(int slot, int transferSize) { return transferSize; } diff --git a/src/main/java/gregtech/common/covers/filter/IFluidFilter.java b/src/main/java/gregtech/common/covers/filter/IFluidFilter.java deleted file mode 100644 index 704bf0803a5..00000000000 --- a/src/main/java/gregtech/common/covers/filter/IFluidFilter.java +++ /dev/null @@ -1,25 +0,0 @@ -package gregtech.common.covers.filter; - -import net.minecraftforge.fluids.FluidStack; - -public interface IFluidFilter extends IFilter { - - MatchResult match(FluidStack toMatch); - - boolean test(FluidStack toTest); - - default int getTransferLimit(FluidStack stack, int transferSize) { - return 0; - } - - void configureFilterTanks(int amount); - - default MatchResult createResult(boolean matched, FluidStack fluidStack, int index) { - return MatchResult.create(matched, fluidStack, index); - } - - @Override - default FilterType getType() { - return FilterType.FLUID; - } -} diff --git a/src/main/java/gregtech/common/covers/filter/IItemFilter.java b/src/main/java/gregtech/common/covers/filter/IItemFilter.java deleted file mode 100644 index 560a36da26c..00000000000 --- a/src/main/java/gregtech/common/covers/filter/IItemFilter.java +++ /dev/null @@ -1,23 +0,0 @@ -package gregtech.common.covers.filter; - -import net.minecraft.item.ItemStack; - -public interface IItemFilter extends IFilter { - - MatchResult match(ItemStack toMatch); - - boolean test(ItemStack toTest); - - default int getTransferLimit(ItemStack stack, int transferSize) { - return transferSize; - } - - default MatchResult createResult(boolean matched, ItemStack fluidStack, int index) { - return MatchResult.create(matched, fluidStack, index); - } - - @Override - default FilterType getType() { - return FilterType.ITEM; - } -} diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 92cad9205ad..b99cd51963c 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -4,60 +4,22 @@ import gregtech.api.gui.widgets.ServerWidgetGroup; import gregtech.api.gui.widgets.SlotWidget; import gregtech.api.gui.widgets.ToggleButtonWidget; -import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.INBTSerializable; import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.api.widget.IWidget; -import com.cleanroommc.modularui.api.widget.Interactable; -import com.cleanroommc.modularui.drawable.GuiTextures; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Alignment; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; -import com.cleanroommc.modularui.value.sync.PanelSyncHandler; -import com.cleanroommc.modularui.value.sync.SyncHandlers; -import com.cleanroommc.modularui.widgets.ButtonWidget; -import com.cleanroommc.modularui.widgets.ItemSlot; -import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.Nullable; import java.util.function.BooleanSupplier; import java.util.function.Consumer; -public class ItemFilterContainer extends BaseFilterContainer - implements INBTSerializable { +public class ItemFilterContainer extends BaseFilterContainer { public ItemFilterContainer(IDirtyNotifiable dirtyNotifiable) { super(dirtyNotifiable); } - public boolean test(ItemStack toTest) { - return !hasFilter() || getItemFilter().test(toTest); - } - - public MatchResult match(ItemStack toMatch) { - if (!hasFilter()) - return MatchResult.create(true, toMatch, -1); - - return getItemFilter().match(toMatch); - } - - public int getTransferLimit(ItemStack stack) { - if (!hasFilter() || isBlacklistFilter()) { - return getTransferSize(); - } - return getItemFilter().getTransferLimit(stack, getTransferSize()); - } - - public @Nullable IItemFilter getItemFilter() { - return (IItemFilter) super.getFilter(); - } - /** @deprecated uses old builtin MUI */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") @@ -74,7 +36,7 @@ public void initUI(int y, Consumer widgetGroup) { @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public void initFilterUI(int y, Consumer widgetGroup) { - widgetGroup.accept(new WidgetGroupItemFilter(y, this::getItemFilter)); + widgetGroup.accept(new WidgetGroupItemFilter(y, this::getFilter)); } /** @deprecated uses old builtin MUI */ @@ -88,53 +50,15 @@ public void blacklistUI(int y, Consumer widgetGroup, Bo widgetGroup.accept(blacklistButton); } - /** Uses Cleanroom MUI */ - public IWidget initUI(ModularPanel main, GuiSyncManager manager) { - var panel = new PanelSyncHandler(main) { - - // the panel can't be opened if there's no filter, so `getFilter()` will never be null - @SuppressWarnings("DataFlowIssue") - @Override - public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { - getItemFilter().setMaxTransferSize(getMaxTransferSize()); - return getItemFilter().createPopupPanel(syncManager); - } - }; - manager.syncValue("filter_panel", panel); - var filterButton = new ButtonWidget<>(); - filterButton.setEnabled(hasFilter()); + @Override + protected boolean isItemValid(ItemStack stack) { + return FilterTypeRegistry.isItemFilter(stack); + } - return new Row().coverChildrenHeight() - .marginBottom(2).widthRel(1f) - .child(new ItemSlot() - .slot(SyncHandlers.itemSlot(this, 0) - .filter(FilterTypeRegistry::isItemFilter) - .singletonSlotGroup(101) - .changeListener((newItem, onlyAmountChanged, client, init) -> { - if (!FilterTypeRegistry.isFilter(newItem) && panel.isPanelOpen()) { - panel.closePanel(); - } - })) - .size(18).marginRight(2) - .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY.asIcon().size(16))) - .child(filterButton - .background(GTGuiTextures.MC_BUTTON, GTGuiTextures.FILTER_SETTINGS_OVERLAY.asIcon().size(16)) - .hoverBackground(GuiTextures.MC_BUTTON_HOVERED, - GTGuiTextures.FILTER_SETTINGS_OVERLAY.asIcon().size(16)) - .setEnabledIf(w -> hasFilter()) - .onMousePressed(i -> { - if (!panel.isPanelOpen()) { - panel.openPanel(); - } else { - panel.closePanel(); - } - Interactable.playButtonClickSound(); - return true; - })) - .child(IKey.dynamic(() -> hasFilter() ? - getFilterStack().getDisplayName() : - IKey.lang("metaitem.item_filter.name").get()) - .alignment(Alignment.CenterRight).asWidget() - .left(36).right(0).height(18)); + @Override + protected String getFilterName() { + return hasFilter() ? + getFilterStack().getDisplayName() : + IKey.lang("metaitem.item_filter.name").get(); } } diff --git a/src/main/java/gregtech/common/covers/filter/MatchResult.java b/src/main/java/gregtech/common/covers/filter/MatchResult.java index de60cfc71ee..028da359cb3 100644 --- a/src/main/java/gregtech/common/covers/filter/MatchResult.java +++ b/src/main/java/gregtech/common/covers/filter/MatchResult.java @@ -1,14 +1,22 @@ package gregtech.common.covers.filter; -public final class MatchResult { +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public final class MatchResult { + + public static final MatchResult NONE = new MatchResult(false, null, -1); + public static final MatchResult ANY = new MatchResult(true, null, -1); private final boolean matched; - private final T matchedStack; + private final Object matchedObject; private final int filterIndex; - private MatchResult(boolean matched, T matchedStack, int filterIndex) { + private MatchResult(boolean matched, Object matchedObject, int filterIndex) { this.matched = matched; - this.matchedStack = matchedStack; + this.matchedObject = matchedObject; this.filterIndex = filterIndex; } @@ -16,15 +24,23 @@ public boolean isMatched() { return matched; } - public T getMatchedStack() { - return matchedStack; + public Object getMatchedObject() { + return matchedObject; + } + + public @NotNull ItemStack getItemStack() { + return matchedObject instanceof ItemStack stack ? stack : ItemStack.EMPTY; + } + + public @Nullable FluidStack getFluidStack() { + return matchedObject instanceof FluidStack stack ? stack : null; } public int getFilterIndex() { return filterIndex; } - public static MatchResult create(boolean matched, T matchedStack, int filterIndex) { - return new MatchResult<>(matched, matchedStack, filterIndex); + public static MatchResult create(boolean matched, Object matchedStack, int filterIndex) { + return new MatchResult(matched, matchedStack, filterIndex); } } diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 3b3ff7cddb2..f758a90c151 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -40,7 +40,7 @@ import java.util.Set; import java.util.function.Consumer; -public class OreDictionaryItemFilter extends BaseFilter implements IItemFilter { +public class OreDictionaryItemFilter extends BaseFilter { private final Map> matchCache = new Object2ObjectOpenHashMap<>(); private final SingleItemVariantMap noOreDictMatch = new SingleItemVariantMap<>(); @@ -253,18 +253,23 @@ protected String highlightRule(String text) { } @Override - public MatchResult match(ItemStack itemStack) { + public MatchResult matchItem(ItemStack itemStack) { // "wtf is this system?? i can put any non null object here and it i will work??? $arch" // not anymore :thanosdaddy: -ghzdude var match = matchesItemStack(itemStack); - return createResult(match != isBlacklistFilter(), match ? itemStack.copy() : ItemStack.EMPTY, -1); + return MatchResult.create(match != isBlacklistFilter(), match ? itemStack.copy() : ItemStack.EMPTY, -1); } @Override - public boolean test(ItemStack toTest) { + public boolean testItem(ItemStack toTest) { return matchesItemStack(toTest); } + @Override + public FilterType getType() { + return FilterType.ITEM; + } + public boolean matchesItemStack(@NotNull ItemStack itemStack) { var result = this.filterReader.getResult(); if (result == null || result.hasError()) return false; diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index f3c266a0aa7..aa36f12dd4b 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -18,7 +18,7 @@ import java.util.function.Consumer; -public class SimpleFluidFilter extends BaseFilter implements IFluidFilter { +public class SimpleFluidFilter extends BaseFilter { private static final int MAX_FLUID_SLOTS = 9; @@ -29,7 +29,6 @@ public SimpleFluidFilter(ItemStack stack) { setFilterReader(this.filterReader); } - @Override public void configureFilterTanks(int amount) { this.filterReader.setFluidAmounts(amount); this.markDirty(); @@ -62,25 +61,25 @@ public void configureFilterTanks(int amount) { } @Override - public MatchResult match(FluidStack toMatch) { + public MatchResult matchFluid(FluidStack fluidStack) { int index = -1; FluidStack returnable = null; for (int i = 0; i < filterReader.getSize(); i++) { var fluid = filterReader.getFluidStack(i); - if (fluid != null && fluid.isFluidEqual(toMatch)) { + if (fluid != null && fluid.isFluidEqual(fluidStack)) { index = i; returnable = fluid.copy(); break; } } - return createResult(index != -1, returnable, index); + return MatchResult.create(index != -1, returnable, index); } @Override - public boolean test(FluidStack fluidStack) { + public boolean testFluid(FluidStack toTest) { for (int i = 0; i < filterReader.getSize(); i++) { var fluid = filterReader.getFluidStack(i); - if (fluid != null && fluid.isFluidEqual(fluidStack)) { + if (fluid != null && fluid.isFluidEqual(toTest)) { return true; } } @@ -108,4 +107,9 @@ public int getTransferLimit(FluidStack fluidStack, int transferSize) { } return isBlacklistFilter() ? transferSize : limit; } + + @Override + public FilterType getType() { + return FilterType.FLUID; + } } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 80d5e1d12cb..39eb30a95fd 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -33,7 +33,7 @@ import java.util.function.Consumer; -public class SimpleItemFilter extends BaseFilter implements IItemFilter { +public class SimpleItemFilter extends BaseFilter { private static final int MAX_MATCH_SLOTS = 9; private final SimpleItemFilterReader filterReader; @@ -44,15 +44,15 @@ public SimpleItemFilter(ItemStack stack) { } @Override - public MatchResult match(ItemStack itemStack) { + public MatchResult matchItem(ItemStack itemStack) { int matchedSlot = itemFilterMatch(filterReader, filterReader.isIgnoreDamage(), filterReader.isIgnoreNBT(), itemStack); - return createResult(matchedSlot != -1 && !isBlacklistFilter(), filterReader.getStackInSlot(matchedSlot), - matchedSlot); + return MatchResult.create(matchedSlot != -1 == !isBlacklistFilter(), + filterReader.getStackInSlot(matchedSlot), matchedSlot); } @Override - public boolean test(ItemStack toTest) { + public boolean testItem(ItemStack toTest) { int matchedSlot = itemFilterMatch(filterReader, filterReader.isIgnoreDamage(), filterReader.isIgnoreNBT(), toTest); return matchedSlot != -1; @@ -64,6 +64,11 @@ public int getTransferLimit(int matchSlot, int transferSize) { return Math.min(stackInFilterSlot.getCount(), transferSize); } + @Override + public FilterType getType() { + return FilterType.ITEM; + } + @Override public int getTransferLimit(ItemStack stack, int transferSize) { int matchedSlot = itemFilterMatch(filterReader, filterReader.isIgnoreDamage(), filterReader.isIgnoreNBT(), diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index da2afbe0fb4..489733ad668 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -30,7 +30,7 @@ import java.util.Collections; import java.util.function.Consumer; -public class SmartItemFilter extends BaseFilter implements IItemFilter { +public class SmartItemFilter extends BaseFilter { private final SmartItemFilterReader filterReader; @@ -69,17 +69,23 @@ public int getTransferLimit(ItemStack stack, int globalTransferLimit) { } @Override - public MatchResult match(ItemStack itemStack) { + public MatchResult matchItem(ItemStack itemStack) { var stack = itemStack.copy(); stack.setCount(getTransferLimit(itemStack, Integer.MAX_VALUE)); - return createResult(stack.getCount() > 0 != isBlacklistFilter(), stack, this.getFilteringMode().ordinal()); + return MatchResult.create(stack.getCount() > 0 != isBlacklistFilter(), stack, + this.getFilteringMode().ordinal()); } @Override - public boolean test(ItemStack toTest) { + public boolean testItem(ItemStack toTest) { return getTransferLimit(toTest, Integer.MAX_VALUE) > 0; } + @Override + public FilterType getType() { + return FilterType.ITEM; + } + @Override public void initUI(Consumer widgetGroup) { widgetGroup.accept(new CycleButtonWidget(10, 0, 75, 20, diff --git a/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java b/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java index 7d708181760..ee389cb4e1c 100644 --- a/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java @@ -19,11 +19,11 @@ @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public class WidgetGroupFluidFilter extends AbstractWidgetGroup { - private final Supplier fluidFilterSupplier; + private final Supplier fluidFilterSupplier; private final Supplier showTipSupplier; - private IFilter fluidFilter; + private BaseFilter fluidFilter; - public WidgetGroupFluidFilter(int yPosition, Supplier fluidFilterSupplier, + public WidgetGroupFluidFilter(int yPosition, Supplier fluidFilterSupplier, Supplier showTipSupplier) { super(new Position(18 + 5, yPosition)); this.fluidFilterSupplier = fluidFilterSupplier; @@ -33,7 +33,7 @@ public WidgetGroupFluidFilter(int yPosition, Supplier fluidFilterSuppli @Override public void detectAndSendChanges() { super.detectAndSendChanges(); - IFilter newFluidFilter = fluidFilterSupplier.get(); + BaseFilter newFluidFilter = fluidFilterSupplier.get(); if (fluidFilter != newFluidFilter) { clearAllWidgets(); this.fluidFilter = newFluidFilter; diff --git a/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java b/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java index 6e1758fdbc1..8493b8423eb 100644 --- a/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java @@ -17,11 +17,11 @@ @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public class WidgetGroupItemFilter extends AbstractWidgetGroup { - private final Supplier itemFilterSupplier; - private IItemFilter itemFilter; + private final Supplier itemFilterSupplier; + private BaseFilter itemFilter; private int maxStackSize = 1; - public WidgetGroupItemFilter(int yPosition, Supplier itemFilterSupplier) { + public WidgetGroupItemFilter(int yPosition, Supplier itemFilterSupplier) { super(new Position(0, yPosition)); this.itemFilterSupplier = itemFilterSupplier; } @@ -29,7 +29,7 @@ public WidgetGroupItemFilter(int yPosition, Supplier itemFilterSupp @Override public void detectAndSendChanges() { super.detectAndSendChanges(); - IItemFilter newItemFilter = itemFilterSupplier.get(); + BaseFilter newItemFilter = itemFilterSupplier.get(); if (itemFilter != newItemFilter) { clearAllWidgets(); this.itemFilter = newItemFilter; @@ -60,7 +60,7 @@ public void readUpdateInfo(int id, PacketBuffer buffer) { if (buffer.readBoolean()) { // int filterId = buffer.readVarInt(); try { - this.itemFilter = (IItemFilter) FilterTypeRegistry.getFilterForStack(buffer.readItemStack()); + this.itemFilter = FilterTypeRegistry.getFilterForStack(buffer.readItemStack()); this.itemFilter.initUI(this::addWidget); this.itemFilter.setMaxTransferSize(maxStackSize); } catch (IOException e) { diff --git a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java index 937d25faaee..0aebf88036a 100644 --- a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java +++ b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java @@ -74,9 +74,9 @@ private static void conveyorInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverCo rateUnit = lang("cover.robotic_arm.exact"); transferModeText(probeInfo, roboticArm.getTransferMode(), rateUnit, - filter.getTransferSize(), filter.getItemFilter() != null); + filter.getTransferSize(), filter.hasFilter()); } - itemFilterText(probeInfo, filter.getItemFilter()); + itemFilterText(probeInfo, filter.getFilter()); } /** @@ -127,7 +127,7 @@ private static void pumpInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverPump p transferModeText(probeInfo, regulator.getTransferMode(), rateUnit, regulator .getFluidFilterContainer().getTransferSize(), filter.hasFilter() && !filter.isBlacklistFilter()); } - fluidFilterText(probeInfo, filter.getFluidFilter()); + fluidFilterText(probeInfo, filter.getFilter()); } /** @@ -160,7 +160,7 @@ private static void fluidVoidingInfo(@NotNull IProbeInfo probeInfo, @NotNull Cov */ private static void itemFilterInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverItemFilter itemFilter) { filterModeText(probeInfo, itemFilter.getFilterMode()); - itemFilterText(probeInfo, itemFilter.getItemFilter()); + itemFilterText(probeInfo, itemFilter.getFilter()); } /** @@ -171,7 +171,7 @@ private static void itemFilterInfo(@NotNull IProbeInfo probeInfo, @NotNull Cover */ private static void fluidFilterInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverFluidFilter fluidFilter) { filterModeText(probeInfo, fluidFilter.getFilterMode()); - fluidFilterText(probeInfo, fluidFilter.getFluidFilter()); + fluidFilterText(probeInfo, fluidFilter.getFilter()); } /** @@ -183,7 +183,7 @@ private static void fluidFilterInfo(@NotNull IProbeInfo probeInfo, @NotNull Cove private static void enderFluidLinkInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverEnderFluidLink enderFluidLink) { transferRateText(probeInfo, enderFluidLink.getPumpMode(), " " + lang("cover.bucket.mode.milli_bucket_rate"), enderFluidLink.isIOEnabled() ? CoverEnderFluidLink.TRANSFER_RATE : 0); - fluidFilterText(probeInfo, enderFluidLink.getFluidFilterContainer().getFluidFilter()); + fluidFilterText(probeInfo, enderFluidLink.getFluidFilterContainer().getFilter()); if (!enderFluidLink.getColorStr().isEmpty()) { probeInfo.text( @@ -252,12 +252,12 @@ private static void filterModeText(@NotNull IProbeInfo probeInfo, @NotNull IStri } /** - * Displays text for {@link IItemFilter} covers + * Displays text for {@link BaseFilter} item covers * * @param probeInfo the info to add the text to * @param filter the filter to display info from */ - private static void itemFilterText(@NotNull IProbeInfo probeInfo, @Nullable IItemFilter filter) { + private static void itemFilterText(@NotNull IProbeInfo probeInfo, @Nullable BaseFilter filter) { String label = TextStyleClass.INFO + lang("gregtech.top.filter.label"); if (filter instanceof OreDictionaryItemFilter) { String expression = ((OreDictionaryItemFilter) filter).getExpression(); @@ -268,12 +268,12 @@ private static void itemFilterText(@NotNull IProbeInfo probeInfo, @Nullable IIte } /** - * Displays text for {@link BaseFilter} covers + * Displays text for {@link BaseFilter} fluid covers * * @param probeInfo the info to add the text to * @param filter the filter to display info from */ - private static void fluidFilterText(@NotNull IProbeInfo probeInfo, @Nullable IFluidFilter filter) { + private static void fluidFilterText(@NotNull IProbeInfo probeInfo, @Nullable BaseFilter filter) { // TODO If more unique fluid filtration is added, providers for it go here }