From ef3236f974fab214fbe5d815da8b1d866aa79d75 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 10 Dec 2025 19:40:01 -0700 Subject: [PATCH 01/18] this interface does not need to exist --- .../filter/readers/BaseFilterReader.java | 14 +++++--- .../covers/filter/readers/FilterReader.java | 32 ------------------- 2 files changed, 9 insertions(+), 37 deletions(-) delete mode 100644 src/main/java/gregtech/common/covers/filter/readers/FilterReader.java 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 eee6a16a52a..e899c9da474 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -11,7 +11,7 @@ import org.jetbrains.annotations.NotNull; -public class BaseFilterReader implements FilterReader, INBTSerializable { +public class BaseFilterReader implements INBTSerializable { protected ItemStack container; private IDirtyNotifiable dirtyNotifiable; @@ -26,12 +26,10 @@ public BaseFilterReader(ItemStack container, int slots) { this.size = slots; } - @Override public ItemStack getContainer() { return this.container; } - @Override public void readStack(@NotNull ItemStack stack) { this.container = stack; } @@ -57,7 +55,6 @@ public void readStack(@NotNull ItemStack stack) { return nbt; } - @Override public int getSize() { return this.size; } @@ -101,7 +98,6 @@ public int getMaxTransferRate() { return isBlacklistFilter() ? 1 : this.maxTransferRate; } - @Override public boolean validateSlotIndex(int slot) { return slot >= 0 && slot < getSize(); } @@ -121,4 +117,12 @@ public void handleLegacyNBT(NBTTagCompound tag) { if (tag.hasKey(BLACKLIST)) setBlacklistFilter(tag.getBoolean(BLACKLIST)); } + + @NotNull + public NBTTagCompound getTagAt(int i) { + if (validateSlotIndex(i)) { + return getInventoryNbt().getCompoundTagAt(i); + } + return new NBTTagCompound(); + } } diff --git a/src/main/java/gregtech/common/covers/filter/readers/FilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/FilterReader.java deleted file mode 100644 index 34efe945268..00000000000 --- a/src/main/java/gregtech/common/covers/filter/readers/FilterReader.java +++ /dev/null @@ -1,32 +0,0 @@ -package gregtech.common.covers.filter.readers; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; - -import org.jetbrains.annotations.NotNull; - -public interface FilterReader { - - ItemStack getContainer(); - - void readStack(ItemStack stack); - - @NotNull - NBTTagList getInventoryNbt(); - - @NotNull - NBTTagCompound getStackTag(); - - int getSize(); - - boolean validateSlotIndex(int slot); - - @NotNull - default NBTTagCompound getTagAt(int i) { - if (validateSlotIndex(i)) { - return getInventoryNbt().getCompoundTagAt(i); - } - return new NBTTagCompound(); - } -} From 731863c6ea5d167b76135ceed0e435445579b430 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 10 Dec 2025 20:09:22 -0700 Subject: [PATCH 02/18] this interface also does not need to exist remove "factory" method --- .../gregtech/api/items/metaitem/MetaItem.java | 10 +-- .../common/covers/filter/BaseFilter.java | 48 +++++++++-- .../covers/filter/FluidFilterContainer.java | 2 +- .../common/covers/filter/IFilter.java | 82 ------------------- .../covers/filter/ItemFilterContainer.java | 2 +- .../java/gregtech/common/items/MetaItem1.java | 10 +-- 6 files changed, 51 insertions(+), 103 deletions(-) delete mode 100644 src/main/java/gregtech/common/covers/filter/IFilter.java diff --git a/src/main/java/gregtech/api/items/metaitem/MetaItem.java b/src/main/java/gregtech/api/items/metaitem/MetaItem.java index 235e97214e9..f5661c444b9 100644 --- a/src/main/java/gregtech/api/items/metaitem/MetaItem.java +++ b/src/main/java/gregtech/api/items/metaitem/MetaItem.java @@ -22,7 +22,7 @@ import gregtech.api.util.Mods; import gregtech.client.utils.ToolChargeBarRenderer; import gregtech.common.ConfigHolder; -import gregtech.common.covers.filter.IFilter; +import gregtech.common.covers.filter.BaseFilter; import gregtech.common.creativetab.GTCreativeTabs; import net.minecraft.client.Minecraft; @@ -770,7 +770,7 @@ public MetaItem getMetaItem() { private final List behaviours = new ArrayList<>(); private IItemUseManager useManager; private ItemUIFactory uiManager; - private IFilter.Factory filterBehavior; + private BaseFilter filterBehavior; private IItemColorProvider colorProvider; private IItemDurabilityManager durabilityManager; private IEnchantabilityHelper enchantabilityHelper; @@ -902,8 +902,8 @@ protected void addItemComponentsInternal(IItemComponent... stats) { if (itemComponent instanceof ItemUIFactory) { this.uiManager = (ItemUIFactory) itemComponent; } - if (itemComponent instanceof IFilter.Factory) { - this.filterBehavior = (IFilter.Factory) itemComponent; + if (itemComponent instanceof BaseFilter) { + this.filterBehavior = (BaseFilter) itemComponent; } if (itemComponent instanceof IItemColorProvider) { this.colorProvider = (IItemColorProvider) itemComponent; @@ -954,7 +954,7 @@ public ItemUIFactory getUIManager() { } @Nullable - public IFilter.Factory getFilterFactory() { + public BaseFilter getFilterBehavior() { return filterBehavior; } diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilter.java b/src/main/java/gregtech/common/covers/filter/BaseFilter.java index c5591a5021b..c4fa4e426d0 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilter.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -1,6 +1,10 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.api.IPanelHandler; +import com.cleanroommc.modularui.value.sync.PanelSyncHandler; + import gregtech.api.items.metaitem.MetaItem; +import gregtech.api.items.metaitem.stats.IItemComponent; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.api.util.IDirtyNotifiable; @@ -22,7 +26,7 @@ import com.cleanroommc.modularui.widgets.CycleButtonWidget; import org.jetbrains.annotations.NotNull; -public abstract class BaseFilter implements IFilter { +public abstract class BaseFilter implements IItemComponent { public static final BaseFilter ERROR_FILTER = new BaseFilter() { @@ -39,24 +43,23 @@ public BaseFilterReader getFilterReader() { .child(createWidgets(syncManager)); } - @Override public @NotNull ModularPanel createPanel(PanelSyncManager syncManager) { return GTGuis.createPanel("error", 100, 100) .child(createWidgets(syncManager)); } - @Override public @NotNull Widget createWidgets(PanelSyncManager syncManager) { return IKey.lang("INVALID FILTER").alignment(Alignment.Center).asWidget(); } @Override public FilterType getType() { - return FilterType.ITEM; + return FilterType.ERROR; } }; protected IDirtyNotifiable dirtyNotifiable; + // we need the original stack public abstract BaseFilterReader getFilterReader(); public final ItemStack getContainerStack() { @@ -66,9 +69,9 @@ public final ItemStack getContainerStack() { public static @NotNull BaseFilter getFilterFromStack(ItemStack stack) { if (stack.getItem() instanceof MetaItemmetaItem) { var metaValueItem = metaItem.getItem(stack); - var factory = metaValueItem == null ? null : metaValueItem.getFilterFactory(); + var factory = metaValueItem == null ? null : metaValueItem.getFilterBehavior(); if (factory != null) - return factory.create(stack); + return factory; } return ERROR_FILTER; } @@ -78,7 +81,6 @@ public final void setBlacklistFilter(boolean blacklistFilter) { markDirty(); } - @Override public final MatchResult match(Object toMatch) { if (toMatch instanceof ItemStack stack) { return matchItem(stack); @@ -96,7 +98,6 @@ public MatchResult matchItem(ItemStack itemStack) { return MatchResult.NONE; } - @Override public final boolean test(Object toTest) { boolean b = false; if (toTest instanceof ItemStack stack) { @@ -115,7 +116,6 @@ 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); @@ -180,4 +180,34 @@ public void readFromNBT(NBTTagCompound tag) { public void writeInitialSyncData(PacketBuffer packetBuffer) {} public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) {} + + public abstract @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager, String panelName); + + public IPanelHandler createPanelHandler(PanelSyncManager syncManager, int id) { + String translationKey = getContainerStack().getTranslationKey(); + return syncManager.getOrCreateSyncHandler(translationKey, id, PanelSyncHandler.class, () -> { + String key = PanelSyncManager.makeSyncKey(translationKey, id); + return (PanelSyncHandler) syncManager.panel(key, (psm, $) -> createPopupPanel(psm, key), true); + }); + } + + public abstract FilterType getType(); + + public boolean isItem() { + return getType() == FilterType.ITEM; + } + + public boolean isFluid() { + return getType() == FilterType.FLUID; + } + + public boolean isError() { + return getType() == FilterType.ERROR; + } + + public enum FilterType { + ITEM, + FLUID, + ERROR + } } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index df2bc6d54de..a949713a41a 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -16,7 +16,7 @@ public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable) { @Override protected boolean isItemValid(ItemStack stack) { var filter = BaseFilter.getFilterFromStack(stack); - return filter != BaseFilter.ERROR_FILTER && filter.getType() == IFilter.FilterType.FLUID; + return filter.isFluid(); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/IFilter.java b/src/main/java/gregtech/common/covers/filter/IFilter.java deleted file mode 100644 index 1bbde04af5d..00000000000 --- a/src/main/java/gregtech/common/covers/filter/IFilter.java +++ /dev/null @@ -1,82 +0,0 @@ -package gregtech.common.covers.filter; - -import gregtech.api.items.metaitem.stats.IItemComponent; -import gregtech.api.util.IDirtyNotifiable; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -import com.cleanroommc.modularui.api.IPanelHandler; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.value.sync.PanelSyncHandler; -import com.cleanroommc.modularui.value.sync.PanelSyncManager; -import com.cleanroommc.modularui.widget.Widget; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public interface IFilter { - - /** Uses Cleanroom MUI */ - @NotNull - ModularPanel createPopupPanel(PanelSyncManager syncManager, String panelName); - - /** Uses Cleanroom MUI */ - @NotNull - ModularPanel createPanel(PanelSyncManager syncManager); - - /** Uses Cleanroom MUI - Creates the widgets standalone so that they can be put into their own panel */ - - @NotNull - Widget createWidgets(PanelSyncManager syncManager); - - default IPanelHandler createPanelHandler(PanelSyncManager syncManager, int id) { - String translationKey = getContainerStack().getTranslationKey(); - return syncManager.getOrCreateSyncHandler(translationKey, id, PanelSyncHandler.class, () -> { - String key = PanelSyncManager.makeSyncKey(translationKey, id); - return (PanelSyncHandler) syncManager.panel(key, (psm, $) -> createPopupPanel(psm, key), true); - }); - } - - ItemStack getContainerStack(); - - void setDirtyNotifiable(@Nullable IDirtyNotifiable dirtyNotifiable); - - void markDirty(); - - int getMaxTransferSize(); - - void setMaxTransferSize(int maxTransferSize); - - 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; - } - - void readFromNBT(NBTTagCompound tagCompound); - - FilterType getType(); - - enum FilterType { - ITEM, - FLUID - } - - // this only exists so i can pass in the constructor reference as a metaitem componant - static Factory factory(Factory factory) { - return factory; - } - - @FunctionalInterface - interface Factory extends IItemComponent { - - @NotNull - BaseFilter create(@NotNull ItemStack stack); - } -} diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 6d1705edf86..45d53961bcf 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -16,7 +16,7 @@ public ItemFilterContainer(IDirtyNotifiable dirtyNotifiable) { @Override protected boolean isItemValid(ItemStack stack) { var filter = BaseFilter.getFilterFromStack(stack); - return filter != BaseFilter.ERROR_FILTER && filter.getType() == IFilter.FilterType.ITEM; + return filter.isItem(); } @Override diff --git a/src/main/java/gregtech/common/items/MetaItem1.java b/src/main/java/gregtech/common/items/MetaItem1.java index b528f3c1041..c04b27c8e98 100644 --- a/src/main/java/gregtech/common/items/MetaItem1.java +++ b/src/main/java/gregtech/common/items/MetaItem1.java @@ -26,7 +26,7 @@ import gregtech.api.util.RandomPotionEffect; import gregtech.common.ConfigHolder; import gregtech.common.blocks.MetaBlocks; -import gregtech.common.covers.filter.IFilter; +import gregtech.common.covers.filter.BaseFilter; import gregtech.common.covers.filter.OreDictionaryItemFilter; import gregtech.common.covers.filter.SimpleFluidFilter; import gregtech.common.covers.filter.SimpleItemFilter; @@ -629,17 +629,17 @@ public void registerSubItems() { // Filters: ID 290-300 FLUID_FILTER = addItem(290, "fluid_filter") .setRecyclingData(new RecyclingData(new MaterialStack(Materials.Zinc, M * 2))) - .addComponents(new SimpleFluidFilterUIManager(), IFilter.factory(SimpleFluidFilter::new)); + .addComponents(new SimpleFluidFilterUIManager(), new SimpleFluidFilter()); ITEM_FILTER = addItem(291, "item_filter") .setRecyclingData(new RecyclingData(new MaterialStack(Materials.Zinc, M * 2), new MaterialStack(Materials.Steel, M))) - .addComponents(new SimpleFilterUIManager(), IFilter.factory(SimpleItemFilter::new)); + .addComponents(new SimpleFilterUIManager(), new SimpleItemFilter()); ORE_DICTIONARY_FILTER = addItem(292, "ore_dictionary_filter") .setRecyclingData(new RecyclingData(new MaterialStack(Materials.Zinc, M * 2))) - .addComponents(new OreDictFilterUIManager(), IFilter.factory(OreDictionaryItemFilter::new)); + .addComponents(new OreDictFilterUIManager(), new OreDictionaryItemFilter()); SMART_FILTER = addItem(293, "smart_item_filter") .setRecyclingData(new RecyclingData(new MaterialStack(Materials.Zinc, M * 3 / 2))) - .addComponents(new SmartFilterUIManager(), IFilter.factory(SmartItemFilter::new)); + .addComponents(new SmartFilterUIManager(), new SmartItemFilter()); // Functional Covers: ID 301-330 COVER_MACHINE_CONTROLLER = addItem(301, "cover.controller"); From 0412505215f1ba8332d81c81d4cd87158fb7e531 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 10 Dec 2025 20:24:05 -0700 Subject: [PATCH 03/18] accidentally deleted a few methods --- .../common/covers/filter/BaseFilter.java | 22 +++++++++++++++---- .../filter/OreDictionaryItemFilter.java | 4 ++-- .../covers/filter/SimpleItemFilter.java | 2 +- .../common/covers/filter/SmartItemFilter.java | 2 +- .../filter/readers/BaseFilterReader.java | 5 ++--- .../filter/readers/OreDictFilterReader.java | 5 ++--- .../readers/SimpleFluidFilterReader.java | 2 +- .../readers/SimpleItemFilterReader.java | 4 ++-- .../filter/readers/SmartItemFilterReader.java | 7 +++--- 9 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilter.java b/src/main/java/gregtech/common/covers/filter/BaseFilter.java index c4fa4e426d0..09e0672f566 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilter.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -30,7 +30,7 @@ public abstract class BaseFilter implements IItemComponent { public static final BaseFilter ERROR_FILTER = new BaseFilter() { - private final BaseFilterReader filterReader = new BaseFilterReader(ItemStack.EMPTY, 0); + private final BaseFilterReader filterReader = new BaseFilterReader(0); @Override public BaseFilterReader getFilterReader() { @@ -43,11 +43,13 @@ public BaseFilterReader getFilterReader() { .child(createWidgets(syncManager)); } + @Override public @NotNull ModularPanel createPanel(PanelSyncManager syncManager) { return GTGuis.createPanel("error", 100, 100) .child(createWidgets(syncManager)); } + @Override public @NotNull Widget createWidgets(PanelSyncManager syncManager) { return IKey.lang("INVALID FILTER").alignment(Alignment.Center).asWidget(); } @@ -69,9 +71,9 @@ public final ItemStack getContainerStack() { public static @NotNull BaseFilter getFilterFromStack(ItemStack stack) { if (stack.getItem() instanceof MetaItemmetaItem) { var metaValueItem = metaItem.getItem(stack); - var factory = metaValueItem == null ? null : metaValueItem.getFilterBehavior(); - if (factory != null) - return factory; + var filter = metaValueItem == null ? null : metaValueItem.getFilterBehavior(); + if (filter != null) + return filter; } return ERROR_FILTER; } @@ -125,6 +127,10 @@ public final int getTransferLimit(Object o, int transferSize) { return 0; } + public int getTransferLimit(int slot, int transferSize) { + return transferSize; + } + public int getTransferLimit(FluidStack stack, int transferSize) { return 0; } @@ -183,6 +189,14 @@ public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) {} public abstract @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager, String panelName); + @NotNull + public abstract ModularPanel createPanel(PanelSyncManager syncManager); + + /** Creates the widgets standalone so that they can be put into their own panel */ + + @NotNull + public abstract Widget createWidgets(PanelSyncManager syncManager); + public IPanelHandler createPanelHandler(PanelSyncManager syncManager, int id) { String translationKey = getContainerStack().getTranslationKey(); return syncManager.getOrCreateSyncHandler(translationKey, id, PanelSyncHandler.class, () -> { diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 75f2ed81afd..feca76458b1 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -44,8 +44,8 @@ public class OreDictionaryItemFilter extends BaseFilter { private final SingleItemVariantMap noOreDictMatch = new SingleItemVariantMap<>(); private final OreDictFilterReader filterReader; - public OreDictionaryItemFilter(ItemStack stack) { - this.filterReader = new OreDictFilterReader(stack); + public OreDictionaryItemFilter() { + this.filterReader = new OreDictFilterReader(); recompile(); } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index d4eb282053b..b15486f8728 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 @@ public class SimpleItemFilter extends BaseFilter { private final SimpleItemFilterReader filterReader; public SimpleItemFilter(ItemStack stack) { - filterReader = new SimpleItemFilterReader(stack, MAX_MATCH_SLOTS); + filterReader = new SimpleItemFilterReader(MAX_MATCH_SLOTS); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index f35becde25d..362a08f43f0 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -32,7 +32,7 @@ public class SmartItemFilter extends BaseFilter { private final SmartItemFilterReader filterReader; public SmartItemFilter(ItemStack stack) { - filterReader = new SmartItemFilterReader(stack); + filterReader = new SmartItemFilterReader(); } @Override 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 e899c9da474..789cb734b0f 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -21,9 +21,8 @@ public class BaseFilterReader implements INBTSerializable { protected static final String FILTER_CONTENTS = "FilterSlots"; protected static final String KEY_LEGACY_FILTER = "Filter"; - public BaseFilterReader(ItemStack container, int slots) { - this.container = container; - this.size = slots; + public BaseFilterReader(int size) { + this.size = size; } public ItemStack getContainer() { diff --git a/src/main/java/gregtech/common/covers/filter/readers/OreDictFilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/OreDictFilterReader.java index 070ec7fe764..cd739031926 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/OreDictFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/OreDictFilterReader.java @@ -4,7 +4,6 @@ import gregtech.api.util.oreglob.OreGlobCompileResult; import gregtech.common.covers.filter.oreglob.impl.ImpossibleOreGlob; -import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import org.jetbrains.annotations.NotNull; @@ -18,8 +17,8 @@ public class OreDictFilterReader extends SimpleItemFilterReader { private OreGlob glob = ImpossibleOreGlob.getInstance(); private OreGlobCompileResult result; - public OreDictFilterReader(ItemStack container) { - super(container, 0); + public OreDictFilterReader() { + super(0); } public void setExpression(String expression) { diff --git a/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java index c9ea2a4032a..27b59d139da 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java @@ -18,7 +18,7 @@ public class SimpleFluidFilterReader extends BaseFilterReader { protected static final String LEGACY_FLUIDFILTER_KEY = "FluidFilter"; public SimpleFluidFilterReader(ItemStack container, int slots) { - super(container, slots); + super(slots); fluidTanks = new WritableFluidTank[slots]; } diff --git a/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java index 84a66fe90b2..0e59f455ac9 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java @@ -19,8 +19,8 @@ public class SimpleItemFilterReader extends BaseFilterReader implements IItemHan public static final String RESPECT_NBT = "IgnoreNBT"; public static final String RESPECT_DAMAGE = "IgnoreDamage"; - public SimpleItemFilterReader(ItemStack container, int slots) { - super(container, slots); + public SimpleItemFilterReader(int slots) { + super(slots); } public void setIgnoreDamage(boolean ignoreDamage) { diff --git a/src/main/java/gregtech/common/covers/filter/readers/SmartItemFilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/SmartItemFilterReader.java index ca96ed549c2..8c4bd711312 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/SmartItemFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/SmartItemFilterReader.java @@ -2,15 +2,14 @@ import gregtech.common.covers.filter.SmartItemFilter; -import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -public class SmartItemFilterReader extends SimpleItemFilterReader { +public class SmartItemFilterReader extends BaseFilterReader { private static final String FILTER_MODE = "FilterMode"; - public SmartItemFilterReader(ItemStack container) { - super(container, 0); + public SmartItemFilterReader() { + super(0); } public SmartItemFilter.SmartFilteringMode getFilteringMode() { From bd93377d2368ab128a479cd5edbc78ed3e57cdd2 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 10 Dec 2025 20:39:07 -0700 Subject: [PATCH 04/18] add a method for updating a filter reader instance to a new stack --- .../gregtech/common/covers/filter/BaseFilter.java | 10 ++++++---- .../common/covers/filter/OreDictionaryItemFilter.java | 8 ++++++-- .../common/covers/filter/SimpleFluidFilter.java | 9 +++++++-- .../common/covers/filter/SimpleItemFilter.java | 11 ++++++----- .../common/covers/filter/SmartItemFilter.java | 11 ++++++----- .../filter/readers/SimpleFluidFilterReader.java | 3 +-- 6 files changed, 32 insertions(+), 20 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilter.java b/src/main/java/gregtech/common/covers/filter/BaseFilter.java index 09e0672f566..2cebc9ca40e 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilter.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -30,13 +30,14 @@ public abstract class BaseFilter implements IItemComponent { public static final BaseFilter ERROR_FILTER = new BaseFilter() { - private final BaseFilterReader filterReader = new BaseFilterReader(0); - @Override public BaseFilterReader getFilterReader() { - return this.filterReader; + return null; } + @Override + public void updateFilterReader(ItemStack stack) {} + @Override public @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager, String panelName) { return GTGuis.createPopupPanel(panelName, 100, 100) @@ -61,9 +62,10 @@ public FilterType getType() { }; protected IDirtyNotifiable dirtyNotifiable; - // we need the original stack public abstract BaseFilterReader getFilterReader(); + public abstract void updateFilterReader(ItemStack stack); + public final ItemStack getContainerStack() { return this.getFilterReader().getContainer(); } diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index feca76458b1..6b20f09e198 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -42,10 +42,9 @@ public class OreDictionaryItemFilter extends BaseFilter { private final Map> matchCache = new Object2ObjectOpenHashMap<>(); private final SingleItemVariantMap noOreDictMatch = new SingleItemVariantMap<>(); - private final OreDictFilterReader filterReader; + private final OreDictFilterReader filterReader = new OreDictFilterReader(); public OreDictionaryItemFilter() { - this.filterReader = new OreDictFilterReader(); recompile(); } @@ -54,6 +53,11 @@ public OreDictFilterReader getFilterReader() { return filterReader; } + @Override + public void updateFilterReader(ItemStack stack) { + this.filterReader.readStack(stack); + } + @NotNull public String getExpression() { return this.filterReader.getExpression(); diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index f7b276a8f59..5955b7b426e 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -21,8 +21,8 @@ public class SimpleFluidFilter extends BaseFilter { private final SimpleFluidFilterReader filterReader; - public SimpleFluidFilter(ItemStack stack) { - filterReader = new SimpleFluidFilterReader(stack, MAX_FLUID_SLOTS); + public SimpleFluidFilter() { + filterReader = new SimpleFluidFilterReader(MAX_FLUID_SLOTS); } @Override @@ -30,6 +30,11 @@ public SimpleFluidFilterReader getFilterReader() { return filterReader; } + @Override + public void updateFilterReader(ItemStack stack) { + this.filterReader.readStack(stack); + } + public void configureFilterTanks(int amount) { this.filterReader.setFluidAmounts(amount); this.markDirty(); diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index b15486f8728..5f311bebfd8 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -30,17 +30,18 @@ public class SimpleItemFilter extends BaseFilter { private static final int MAX_MATCH_SLOTS = 9; - private final SimpleItemFilterReader filterReader; - - public SimpleItemFilter(ItemStack stack) { - filterReader = new SimpleItemFilterReader(MAX_MATCH_SLOTS); - } + private final SimpleItemFilterReader filterReader = new SimpleItemFilterReader(MAX_MATCH_SLOTS); @Override public SimpleItemFilterReader getFilterReader() { return filterReader; } + @Override + public void updateFilterReader(ItemStack stack) { + this.filterReader.readStack(stack); + } + @Override public MatchResult matchItem(ItemStack itemStack) { 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 362a08f43f0..cc4d8effc30 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -29,17 +29,18 @@ public class SmartItemFilter extends BaseFilter { - private final SmartItemFilterReader filterReader; - - public SmartItemFilter(ItemStack stack) { - filterReader = new SmartItemFilterReader(); - } + private final SmartItemFilterReader filterReader = new SmartItemFilterReader(); @Override public SmartItemFilterReader getFilterReader() { return filterReader; } + @Override + public void updateFilterReader(ItemStack stack) { + this.filterReader.readStack(stack); + } + public SmartFilteringMode getFilteringMode() { return this.filterReader.getFilteringMode(); } diff --git a/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java index 27b59d139da..901e5770662 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java @@ -1,6 +1,5 @@ package gregtech.common.covers.filter.readers; -import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraftforge.common.util.Constants; @@ -17,7 +16,7 @@ public class SimpleFluidFilterReader extends BaseFilterReader { protected static final String LEGACY_FLUIDFILTER_KEY = "FluidFilter"; - public SimpleFluidFilterReader(ItemStack container, int slots) { + public SimpleFluidFilterReader(int slots) { super(slots); fluidTanks = new WritableFluidTank[slots]; } From d3317e8da8bd1841323bee6dddf6335425d0d5db Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 10 Dec 2025 20:49:46 -0700 Subject: [PATCH 05/18] make filter not null and update filter reader --- .../covers/filter/BaseFilterContainer.java | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 8c050a2e394..28cdfecec8a 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -33,7 +33,7 @@ public abstract class BaseFilterContainer extends ItemStackHandler { private int maxTransferSize = 1; private int transferSize; - private @Nullable BaseFilter currentFilter; + private @NotNull BaseFilter currentFilter = BaseFilter.ERROR_FILTER; private @Nullable Runnable onFilterInstanceChange; private final IDirtyNotifiable dirtyNotifiable; @@ -85,7 +85,7 @@ public void setStackInSlot(int slot, @NotNull ItemStack stack) { if (ItemStack.areItemStacksEqual(stack, getFilterStack())) return; - setFilter(BaseFilter.getFilterFromStack(stack)); + setFilter(stack); super.setStackInSlot(slot, stack); } @@ -103,7 +103,7 @@ public boolean isItemValid(int slot, @NotNull ItemStack stack) { public @NotNull ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate) { if (!isItemValid(stack)) return stack; var remainder = super.insertItem(slot, stack, simulate); - if (!simulate) setFilter(BaseFilter.getFilterFromStack(stack)); + if (!simulate) setFilter(stack); return remainder; } @@ -111,7 +111,7 @@ public boolean isItemValid(int slot, @NotNull ItemStack stack) { public @NotNull ItemStack extractItem(int slot, int amount, boolean simulate) { var extracted = super.extractItem(slot, amount, simulate); if (!extracted.isEmpty()) { - setFilter(null); + clearFilter(); } return extracted; } @@ -132,15 +132,26 @@ public void setMaxTransferSize(int maxTransferSize) { } public final boolean hasFilter() { - return currentFilter != null; + return !currentFilter.isError(); } - public final @Nullable BaseFilter getFilter() { + public final @NotNull BaseFilter getFilter() { return currentFilter; } - public final void setFilter(@Nullable BaseFilter newFilter) { - this.currentFilter = BaseFilter.ERROR_FILTER == newFilter ? null : newFilter; + public final void clearFilter() { + setFilter(BaseFilter.ERROR_FILTER); + } + + public final void setFilter(ItemStack stack) { + setFilter(BaseFilter.getFilterFromStack(stack)); + if (hasFilter()) { + getFilter().updateFilterReader(stack); + } + } + + public final void setFilter(@NotNull BaseFilter newFilter) { + this.currentFilter = newFilter; if (hasFilter()) { this.currentFilter.setDirtyNotifiable(this.dirtyNotifiable); this.currentFilter.setMaxTransferSize(this.maxTransferSize); From 7e695c57c8d55f75bd60e21fc2d31033f16491ab Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 10 Dec 2025 21:24:20 -0700 Subject: [PATCH 06/18] copy ui methods into the various ui managers add stack parameter to get the filter off of make `clearCache()` in OreDictionaryItemFilter public --- .../common/covers/filter/BaseFilter.java | 1 - .../filter/OreDictionaryItemFilter.java | 2 +- .../filter/readers/BaseFilterReader.java | 2 +- .../readers/SimpleItemFilterReader.java | 16 ++ .../behaviors/filter/BaseFilterUIManager.java | 40 ++++ .../filter/OreDictFilterUIManager.java | 198 ++++++++++++++++++ .../filter/SimpleFilterUIManager.java | 98 ++++++++- .../filter/SimpleFluidFilterUIManager.java | 42 ++++ .../filter/SmartFilterUIManager.java | 59 ++++++ 9 files changed, 448 insertions(+), 10 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilter.java b/src/main/java/gregtech/common/covers/filter/BaseFilter.java index 2cebc9ca40e..a7f5521de8a 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilter.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -82,7 +82,6 @@ public final ItemStack getContainerStack() { public final void setBlacklistFilter(boolean blacklistFilter) { this.getFilterReader().setBlacklistFilter(blacklistFilter); - markDirty(); } public final MatchResult match(Object toMatch) { diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 6b20f09e198..4ca87432285 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -68,7 +68,7 @@ protected void recompile() { this.filterReader.recompile(); } - protected void clearCache() { + public void clearCache() { this.matchCache.clear(); this.noOreDictMatch.clear(); } 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 789cb734b0f..bb20f222a18 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -14,7 +14,7 @@ public class BaseFilterReader implements INBTSerializable { protected ItemStack container; - private IDirtyNotifiable dirtyNotifiable; + protected IDirtyNotifiable dirtyNotifiable; private final int size; private int maxTransferRate = 1; protected static final String BLACKLIST = "IsBlacklist"; diff --git a/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java index 0e59f455ac9..3747ad7de39 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java @@ -2,6 +2,11 @@ import gregtech.api.util.GTUtility; +import gregtech.common.covers.CoverItemVoidingAdvanced; +import gregtech.common.covers.CoverRoboticArm; +import gregtech.common.covers.TransferMode; +import gregtech.common.covers.VoidingMode; + import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -144,6 +149,17 @@ protected int getStackLimit(int slot, @NotNull ItemStack stack) { return Math.min(getSlotLimit(slot), stack.getMaxStackSize()); } + public boolean shouldShowCount() { + return dirtyNotifiable instanceof CoverRoboticArm coverArm && + coverArm.getTransferMode() != TransferMode.TRANSFER_ANY || + dirtyNotifiable instanceof CoverItemVoidingAdvanced coverItem && + coverItem.getVoidingMode() != VoidingMode.VOID_ANY; + } + + public int getStackCountInSlot(int slot) { + return getTagAt(slot).getInteger(COUNT); + } + @Override public void onTransferRateChange() { for (int i = 0; i < getSlots(); i++) { diff --git a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java index 91161663700..41117b02ecd 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java @@ -1,12 +1,24 @@ package gregtech.common.items.behaviors.filter; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.api.widget.IWidget; +import com.cleanroommc.modularui.value.sync.BooleanSyncValue; +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widget.Widget; + +import com.cleanroommc.modularui.widgets.CycleButtonWidget; + import gregtech.api.cover.CoverWithUI; import gregtech.api.items.gui.ItemUIFactory; import gregtech.api.items.metaitem.stats.IItemBehaviour; +import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuiTheme; import gregtech.api.mui.GTGuis; import gregtech.api.mui.factory.MetaItemGuiFactory; +import gregtech.common.covers.filter.BaseFilter; +import gregtech.common.covers.filter.readers.BaseFilterReader; + import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -19,6 +31,7 @@ import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.screen.UISettings; import com.cleanroommc.modularui.value.sync.PanelSyncManager; +import org.jetbrains.annotations.NotNull; import java.util.List; @@ -53,4 +66,31 @@ public GTGuiTheme getUITheme() { public void addInformation(ItemStack itemStack, List lines) { lines.add(I18n.format("behaviour.filter_ui_manager")); } + + public abstract @NotNull ModularPanel createPopupPanel(ItemStack stack, PanelSyncManager syncManager, String panelName); + + @NotNull + public abstract ModularPanel createPanel(ItemStack stack, PanelSyncManager syncManager); + + /** Creates the widgets standalone so that they can be put into their own panel */ + + @NotNull + public abstract Widget createWidgets(ItemStack stack, PanelSyncManager syncManager); + + public BaseFilterReader getFilterReader(ItemStack stack) { + return BaseFilter.getFilterFromStack(stack).getFilterReader(); + } + + public IWidget createBlacklistUI(ItemStack filterStack) { + BaseFilterReader filterReader = getFilterReader(filterStack); + return new ParentWidget<>().coverChildren() + .child(new CycleButtonWidget() + .value(new BooleanSyncValue( + filterReader::isBlacklistFilter, + filterReader::setBlacklistFilter)) + .stateBackground(0, GTGuiTextures.BUTTON_BLACKLIST[0]) + .stateBackground(1, GTGuiTextures.BUTTON_BLACKLIST[1]) + .addTooltip(0, IKey.lang("cover.filter.blacklist.disabled")) + .addTooltip(1, IKey.lang("cover.filter.blacklist.enabled"))); + } } diff --git a/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java index 08e19f607cf..187de8d4715 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java @@ -1,5 +1,20 @@ package gregtech.common.items.behaviors.filter; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.drawable.UITexture; +import com.cleanroommc.modularui.screen.RichTooltip; +import com.cleanroommc.modularui.utils.BooleanConsumer; +import com.cleanroommc.modularui.utils.Color; +import com.cleanroommc.modularui.value.sync.BooleanSyncValue; +import com.cleanroommc.modularui.value.sync.StringSyncValue; +import com.cleanroommc.modularui.widget.Widget; +import com.cleanroommc.modularui.widgets.CycleButtonWidget; +import com.cleanroommc.modularui.widgets.layout.Flow; + +import gregtech.api.cover.CoverWithUI; +import gregtech.api.mui.GTGuiTextures; +import gregtech.api.mui.GTGuis; +import gregtech.api.util.oreglob.OreGlobCompileResult; import gregtech.common.covers.filter.BaseFilter; import com.cleanroommc.modularui.factory.HandGuiData; @@ -8,6 +23,20 @@ import com.cleanroommc.modularui.value.sync.PanelSyncManager; import com.cleanroommc.modularui.widgets.SlotGroupWidget; +import gregtech.common.covers.filter.OreDictionaryItemFilter; +import gregtech.common.covers.filter.readers.OreDictFilterReader; +import gregtech.common.mui.widget.HighlightedTextField; +import gregtech.common.mui.widget.orefilter.OreFilterTestSlot; + +import net.minecraft.client.resources.I18n; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.TextFormatting; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + public class OreDictFilterUIManager extends BaseFilterUIManager { @Override @@ -17,4 +46,173 @@ public ModularPanel buildUI(HandGuiData guiData, PanelSyncManager guiSyncManager .child(filter.createWidgets(guiSyncManager).top(22).margin(7, 0)) .child(SlotGroupWidget.playerInventory(true)); } + + @Override + public @NotNull ModularPanel createPopupPanel(ItemStack stack, PanelSyncManager syncManager, String panelName) { + return GTGuis.createPopupPanel(panelName, 188, 76, false) + .padding(7) + .child(CoverWithUI.createTitleRow(stack)) + .child(createWidgets(stack, syncManager).top(22)); + } + + @Override + public @NotNull ModularPanel createPanel(ItemStack stack, PanelSyncManager syncManager) { + return GTGuis.createPanel("ore_dict_filter", 100, 100); + } + + @Override + public @NotNull Widget createWidgets(ItemStack stack, PanelSyncManager syncManager) { + OreDictionaryItemFilter filter = (OreDictionaryItemFilter) BaseFilter.getFilterFromStack(stack); + OreDictFilterReader filterReader = filter.getFilterReader(); + + List oreSlots = new ArrayList<>(); + var expression = new StringSyncValue(filterReader::getExpression, filterReader::setExpression); + + BooleanConsumer setCaseSensitive = b -> { + filterReader.setCaseSensitive(b); + if (!syncManager.isClient()) return; + for (var slot : oreSlots) { + slot.updatePreview(); + } + }; + + BooleanConsumer setMatchAll = b -> { + filter.clearCache(); + filterReader.setMatchAll(b); + if (!syncManager.isClient()) return; + for (var slot : oreSlots) { + slot.setMatchAll(b); + } + }; + + var caseSensitive = new BooleanSyncValue(filterReader::isCaseSensitive, setCaseSensitive); + var matchAll = new BooleanSyncValue(filterReader::shouldMatchAll, setMatchAll); + + return Flow.column().widthRel(1f).coverChildrenHeight() + .child(new HighlightedTextField() + .setHighlightRule(this::highlightRule) + .onUnfocus(() -> { + for (var slot : oreSlots) { + slot.updatePreview(); + } + }) + .setTextColor(Color.WHITE.darker(1)) + .value(expression).marginBottom(4) + .height(18).widthRel(1f)) + .child(Flow.row().coverChildrenHeight() + .widthRel(1f) + .child(Flow.column().height(18) + .coverChildrenWidth().marginRight(2) + .child(GTGuiTextures.OREDICT_INFO.asWidget() + .size(8).top(0) + .addTooltipLine(IKey.lang("cover.ore_dictionary_filter.info"))) + .child(new Widget<>() + .size(8).bottom(0) + .onUpdateListener(widget -> getStatusIcon(filterReader.getResult(), widget)) + .tooltipBuilder(richTooltip -> createStatusTooltip(filterReader.getResult(), richTooltip)) + .tooltip(tooltip -> tooltip.setAutoUpdate(true)))) + .child(SlotGroupWidget.builder() + .row("XXXXX") + .key('X', i -> { + var slot = new OreFilterTestSlot() + .setGlobSupplier(filterReader::getGlob); + slot.setMatchAll(filterReader.shouldMatchAll()); + oreSlots.add(slot); + return slot; + }) + .build().marginRight(2)) + .child(new CycleButtonWidget() + .size(18).value(caseSensitive) + .marginRight(2) + .stateBackground(0, GTGuiTextures.BUTTON_CASE_SENSITIVE[0]) + .stateBackground(1, GTGuiTextures.BUTTON_CASE_SENSITIVE[1]) + .addTooltip(0, + IKey.lang("cover.ore_dictionary_filter.button.case_sensitive.disabled")) + .addTooltip(1, + IKey.lang("cover.ore_dictionary_filter.button.case_sensitive.enabled"))) + .child(new CycleButtonWidget() + .size(18).value(matchAll) + .marginRight(2) + .stateBackground(0, GTGuiTextures.BUTTON_MATCH_ALL[0]) + .stateBackground(1, GTGuiTextures.BUTTON_MATCH_ALL[1]) + .addTooltip(0, + IKey.lang("cover.ore_dictionary_filter.button.match_all.disabled")) + .addTooltip(1, + IKey.lang("cover.ore_dictionary_filter.button.match_all.enabled"))) + .child(createBlacklistUI(stack))); + } + + protected void getStatusIcon(OreGlobCompileResult result, Widget widget) { + UITexture texture; + + if (result == null) { + texture = GTGuiTextures.OREDICT_WAITING; + } else if (result.getReports().length == 0) { + texture = GTGuiTextures.OREDICT_SUCCESS; + } else if (result.hasError()) { + texture = GTGuiTextures.OREDICT_ERROR; + } else { + texture = GTGuiTextures.OREDICT_WARN; + } + widget.background(texture); + } + + protected void createStatusTooltip(OreGlobCompileResult result, RichTooltip tooltip) { + if (result == null) return; + List list = new ArrayList<>(); + + int error = 0, warn = 0; + for (OreGlobCompileResult.Report report : result.getReports()) { + if (report.isError()) error++; + else warn++; + list.add((report.isError() ? TextFormatting.RED : TextFormatting.GOLD) + report.toString()); + } + if (error > 0) { + if (warn > 0) { + list.add(0, I18n.format("cover.ore_dictionary_filter.status.err_warn", error, warn)); + } else { + list.add(0, I18n.format("cover.ore_dictionary_filter.status.err", error)); + } + } else { + if (warn > 0) { + list.add(0, I18n.format("cover.ore_dictionary_filter.status.warn", warn)); + } else { + list.add(I18n.format("cover.ore_dictionary_filter.status.no_issues")); + } + list.add(""); + list.add(I18n.format("cover.ore_dictionary_filter.status.explain")); + list.add(""); + list.addAll(result.getInstance().toFormattedString()); + } + tooltip.addStringLines(list); + } + + protected String highlightRule(String text) { + StringBuilder builder = new StringBuilder(text); + for (int i = 0; i < builder.length(); i++) { + switch (builder.charAt(i)) { + case '|', '&', '^', '(', ')' -> { + builder.insert(i, TextFormatting.GOLD); + i += 2; + } + case '*', '?' -> { + builder.insert(i, TextFormatting.GREEN); + i += 2; + } + case '!' -> { + builder.insert(i, TextFormatting.RED); + i += 2; + } + case '\\' -> { + builder.insert(i++, TextFormatting.YELLOW); + i += 2; + } + default -> { + continue; + } + } + builder.insert(i + 1, TextFormatting.RESET); + } + return builder.toString(); + } } diff --git a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java index eb33ca66fcb..17dcd6ec742 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java @@ -1,5 +1,24 @@ package gregtech.common.items.behaviors.filter; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.utils.Color; +import com.cleanroommc.modularui.value.sync.BooleanSyncValue; +import com.cleanroommc.modularui.value.sync.SyncHandlers; +import com.cleanroommc.modularui.widget.Widget; +import com.cleanroommc.modularui.widgets.CycleButtonWidget; +import com.cleanroommc.modularui.widgets.layout.Flow; +import com.cleanroommc.modularui.widgets.slot.PhantomItemSlot; +import com.cleanroommc.modularui.widgets.slot.SlotGroup; + +import gregtech.api.cover.CoverWithUI; +import gregtech.api.mui.GTGuiTextures; +import gregtech.api.mui.GTGuis; +import gregtech.api.util.IDirtyNotifiable; +import gregtech.api.util.TextFormattingUtil; +import gregtech.common.covers.CoverItemVoidingAdvanced; +import gregtech.common.covers.CoverRoboticArm; +import gregtech.common.covers.TransferMode; +import gregtech.common.covers.VoidingMode; import gregtech.common.covers.filter.BaseFilter; import com.cleanroommc.modularui.factory.HandGuiData; @@ -8,16 +27,81 @@ import com.cleanroommc.modularui.value.sync.PanelSyncManager; import com.cleanroommc.modularui.widgets.SlotGroupWidget; +import gregtech.common.covers.filter.readers.SimpleItemFilterReader; + +import net.minecraft.item.ItemStack; + +import org.jetbrains.annotations.NotNull; + public class SimpleFilterUIManager extends BaseFilterUIManager { @Override public ModularPanel buildUI(HandGuiData guiData, PanelSyncManager guiSyncManager, UISettings settings) { - var filter = BaseFilter.getFilterFromStack(guiData.getUsedItemStack()); - return createBasePanel(filter.getContainerStack()) - .height(166) - .child(filter.createWidgets(guiSyncManager) - .top(22) - .left(7)) - .child(SlotGroupWidget.playerInventory(true)); + return createPanel(guiData.getUsedItemStack(), guiSyncManager); + } + + @Override + public @NotNull ModularPanel createPopupPanel(ItemStack stack, PanelSyncManager syncManager, String panelName) { + return GTGuis.createPopupPanel(panelName, 98, 81, false) + .child(CoverWithUI.createTitleRow(stack)) + .child(createWidgets(stack, syncManager).top(22).left(4)); + } + + @Override + public @NotNull ModularPanel createPanel(ItemStack stack, PanelSyncManager syncManager) { + return GTGuis.createPanel("simple_item_filter", 176, 166); + } + + @SuppressWarnings("UnstableApiUsage") + @Override + public @NotNull Widget createWidgets(ItemStack stack, PanelSyncManager syncManager) { + SimpleItemFilterReader filterReader = (SimpleItemFilterReader) BaseFilter.getFilterFromStack(stack).getFilterReader(); + SlotGroup filterInventory = new SlotGroup("filter_inv", 3, 1000, true); + var ignoreDamage = new BooleanSyncValue(filterReader::isIgnoreDamage, filterReader::setIgnoreDamage); + var ignoreNBT = new BooleanSyncValue(filterReader::isIgnoreNBT, filterReader::setIgnoreNBT); + + syncManager.registerSlotGroup(filterInventory); + + return Flow.row().coverChildren() + .child(SlotGroupWidget.builder() + .matrix("XXX", + "XXX", + "XXX") + .key('X', index -> new PhantomItemSlot() + .slot(SyncHandlers.itemSlot(filterReader, index) + .ignoreMaxStackSize(true) + .slotGroup(filterInventory) + .changeListener((newItem, onlyAmountChanged, client, init) -> { + if (onlyAmountChanged && !init) { + filterReader.markDirty(); + } + })) + .tooltipAutoUpdate(true) + .tooltipTextColor(Color.GREY.main) + .tooltipBuilder(tooltip -> { + if (filterReader.shouldShowCount()) { + int count = filterReader.getStackCountInSlot(index); + if (count > 0) { + tooltip.addLine(IKey.lang("cover.item_filter.config_amount")); + tooltip.addLine( + IKey.str("Count: %s", TextFormattingUtil.formatNumbers(count))); + } + } + })) + .build().marginRight(4)) + .child(Flow.column().width(18).coverChildren() + .child(createBlacklistUI(stack)) + .child(new CycleButtonWidget() + .value(ignoreDamage) + .stateBackground(0, GTGuiTextures.BUTTON_IGNORE_DAMAGE[0]) + .stateBackground(1, GTGuiTextures.BUTTON_IGNORE_DAMAGE[1]) + .addTooltip(0, IKey.lang("cover.item_filter.ignore_damage.disabled")) + .addTooltip(1, IKey.lang("cover.item_filter.ignore_damage.enabled"))) + .child(new CycleButtonWidget() + .value(ignoreNBT) + .stateBackground(0, GTGuiTextures.BUTTON_IGNORE_NBT[0]) + .stateBackground(1, GTGuiTextures.BUTTON_IGNORE_NBT[1]) + .addTooltip(0, IKey.lang("cover.item_filter.ignore_nbt.disabled")) + .addTooltip(1, IKey.lang("cover.item_filter.ignore_nbt.enabled")))); } } diff --git a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java index 915746faacd..0dcb00da4d0 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java @@ -1,5 +1,10 @@ package gregtech.common.items.behaviors.filter; +import com.cleanroommc.modularui.widget.Widget; +import com.cleanroommc.modularui.widgets.layout.Flow; + +import gregtech.api.cover.CoverWithUI; +import gregtech.api.mui.GTGuis; import gregtech.common.covers.filter.BaseFilter; import com.cleanroommc.modularui.factory.HandGuiData; @@ -8,6 +13,13 @@ import com.cleanroommc.modularui.value.sync.PanelSyncManager; import com.cleanroommc.modularui.widgets.SlotGroupWidget; +import gregtech.common.covers.filter.readers.SimpleFluidFilterReader; +import gregtech.common.mui.widget.GTFluidSlot; + +import net.minecraft.item.ItemStack; + +import org.jetbrains.annotations.NotNull; + public class SimpleFluidFilterUIManager extends BaseFilterUIManager { @Override @@ -20,4 +32,34 @@ public ModularPanel buildUI(HandGuiData guiData, PanelSyncManager guiSyncManager .left(7)) .child(SlotGroupWidget.playerInventory(true)); } + + @Override + public @NotNull ModularPanel createPopupPanel(ItemStack stack, PanelSyncManager syncManager, String panelName) { + return GTGuis.createPopupPanel(panelName, 98, 81, false) + .padding(4) + .child(CoverWithUI.createTitleRow(stack)) + .child(createWidgets(stack, syncManager).top(22)); + } + + @Override + public @NotNull ModularPanel createPanel(ItemStack stack, PanelSyncManager syncManager) { + return GTGuis.createPanel(stack, 176, 168); + } + + @Override + public @NotNull Widget createWidgets(ItemStack stack, PanelSyncManager syncManager) { + SimpleFluidFilterReader filterReader = (SimpleFluidFilterReader) getFilterReader(stack); + return Flow.row().coverChildrenHeight().widthRel(1f) + .child(SlotGroupWidget.builder() + .matrix("FFF", + "FFF", + "FFF") + .key('F', i -> new GTFluidSlot() + .syncHandler(GTFluidSlot.sync(filterReader.getFluidTank(i)) + .phantom(true) + .showAmountOnSlot(filterReader::shouldShowAmount) + .showAmountInTooltip(filterReader::shouldShowAmount))) + .build().marginRight(4)) + .child(createBlacklistUI(stack)); + } } diff --git a/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java index 0f8f96ed76a..54986c9dd5e 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java @@ -1,5 +1,16 @@ package gregtech.common.items.behaviors.filter; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.utils.Color; +import com.cleanroommc.modularui.value.BoolValue; +import com.cleanroommc.modularui.value.sync.EnumSyncValue; +import com.cleanroommc.modularui.widget.Widget; +import com.cleanroommc.modularui.widgets.ToggleButton; +import com.cleanroommc.modularui.widgets.layout.Flow; + +import gregtech.api.cover.CoverWithUI; +import gregtech.api.mui.GTGuiTextures; +import gregtech.api.mui.GTGuis; import gregtech.common.covers.filter.BaseFilter; import com.cleanroommc.modularui.factory.HandGuiData; @@ -8,6 +19,14 @@ import com.cleanroommc.modularui.value.sync.PanelSyncManager; import com.cleanroommc.modularui.widgets.SlotGroupWidget; +import gregtech.common.covers.filter.SmartItemFilter; + +import gregtech.common.covers.filter.readers.SmartItemFilterReader; + +import net.minecraft.item.ItemStack; + +import org.jetbrains.annotations.NotNull; + public class SmartFilterUIManager extends BaseFilterUIManager { @Override @@ -17,4 +36,44 @@ public ModularPanel buildUI(HandGuiData guiData, PanelSyncManager guiSyncManager .child(filter.createWidgets(guiSyncManager).left(7).top(22)) .child(SlotGroupWidget.playerInventory(true)); } + + @Override + public @NotNull ModularPanel createPopupPanel(ItemStack stack, PanelSyncManager syncManager, String panelName) { + return GTGuis.createPopupPanel(panelName, 98 + 27, 81, false) + .child(CoverWithUI.createTitleRow(stack)) + .child(createWidgets(stack, syncManager).top(22).left(4)); + } + + @Override + public @NotNull ModularPanel createPanel(ItemStack stack, PanelSyncManager syncManager) { + return GTGuis.createPanel("smart_item_filter", 100, 100).padding(7); + } + + @Override + public @NotNull Widget createWidgets(ItemStack stack, PanelSyncManager syncManager) { + SmartItemFilterReader filterReader = (SmartItemFilterReader) getFilterReader(stack); + var filterMode = new EnumSyncValue<>(SmartItemFilter.SmartFilteringMode.class, filterReader::getFilteringMode, + filterReader::setFilteringMode); + syncManager.syncValue("filter_mode", filterMode); + + return Flow.row().coverChildren() + .child(Flow.column().coverChildren().marginRight(4) + .child(createFilterModeButton(filterMode, SmartItemFilter.SmartFilteringMode.ELECTROLYZER)) + .child(createFilterModeButton(filterMode, SmartItemFilter.SmartFilteringMode.CENTRIFUGE)) + .child(createFilterModeButton(filterMode, SmartItemFilter.SmartFilteringMode.SIFTER))) + .child(createBlacklistUI(stack)); + } + + private Widget createFilterModeButton(EnumSyncValue value, + SmartItemFilter.SmartFilteringMode mode) { + return new ToggleButton().height(18).width(18 * 5) + .value(boolValueOf(value, mode)) + .background(GTGuiTextures.MC_BUTTON) + .selectedBackground(GTGuiTextures.MC_BUTTON_DISABLED) + .overlay(IKey.lang(mode.getName()).color(Color.WHITE.darker(1))); + } + + protected > BoolValue.Dynamic boolValueOf(EnumSyncValue syncValue, T value) { + return new BoolValue.Dynamic(() -> syncValue.getValue() == value, $ -> syncValue.setValue(value)); + } } From d52d75575d4f046c8993ca1fe8630a8cfdaa9cfa Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 10 Dec 2025 21:25:16 -0700 Subject: [PATCH 07/18] rename SimpleFilterUIManager -> SimpleItemFilterUIManager --- src/main/java/gregtech/common/items/MetaItem1.java | 5 ++--- ...FilterUIManager.java => SimpleItemFilterUIManager.java} | 7 +------ 2 files changed, 3 insertions(+), 9 deletions(-) rename src/main/java/gregtech/common/items/behaviors/filter/{SimpleFilterUIManager.java => SimpleItemFilterUIManager.java} (94%) diff --git a/src/main/java/gregtech/common/items/MetaItem1.java b/src/main/java/gregtech/common/items/MetaItem1.java index c04b27c8e98..a256cdeb9aa 100644 --- a/src/main/java/gregtech/common/items/MetaItem1.java +++ b/src/main/java/gregtech/common/items/MetaItem1.java @@ -26,7 +26,6 @@ import gregtech.api.util.RandomPotionEffect; import gregtech.common.ConfigHolder; import gregtech.common.blocks.MetaBlocks; -import gregtech.common.covers.filter.BaseFilter; import gregtech.common.covers.filter.OreDictionaryItemFilter; import gregtech.common.covers.filter.SimpleFluidFilter; import gregtech.common.covers.filter.SimpleItemFilter; @@ -52,7 +51,7 @@ import gregtech.common.items.behaviors.TricorderBehavior; import gregtech.common.items.behaviors.TurbineRotorBehavior; import gregtech.common.items.behaviors.filter.OreDictFilterUIManager; -import gregtech.common.items.behaviors.filter.SimpleFilterUIManager; +import gregtech.common.items.behaviors.filter.SimpleItemFilterUIManager; import gregtech.common.items.behaviors.filter.SimpleFluidFilterUIManager; import gregtech.common.items.behaviors.filter.SmartFilterUIManager; import gregtech.common.items.behaviors.monitorplugin.AdvancedMonitorPluginBehavior; @@ -633,7 +632,7 @@ public void registerSubItems() { ITEM_FILTER = addItem(291, "item_filter") .setRecyclingData(new RecyclingData(new MaterialStack(Materials.Zinc, M * 2), new MaterialStack(Materials.Steel, M))) - .addComponents(new SimpleFilterUIManager(), new SimpleItemFilter()); + .addComponents(new SimpleItemFilterUIManager(), new SimpleItemFilter()); ORE_DICTIONARY_FILTER = addItem(292, "ore_dictionary_filter") .setRecyclingData(new RecyclingData(new MaterialStack(Materials.Zinc, M * 2))) .addComponents(new OreDictFilterUIManager(), new OreDictionaryItemFilter()); diff --git a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/SimpleItemFilterUIManager.java similarity index 94% rename from src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java rename to src/main/java/gregtech/common/items/behaviors/filter/SimpleItemFilterUIManager.java index 17dcd6ec742..9bbab25f3e6 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SimpleItemFilterUIManager.java @@ -13,12 +13,7 @@ import gregtech.api.cover.CoverWithUI; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; -import gregtech.api.util.IDirtyNotifiable; import gregtech.api.util.TextFormattingUtil; -import gregtech.common.covers.CoverItemVoidingAdvanced; -import gregtech.common.covers.CoverRoboticArm; -import gregtech.common.covers.TransferMode; -import gregtech.common.covers.VoidingMode; import gregtech.common.covers.filter.BaseFilter; import com.cleanroommc.modularui.factory.HandGuiData; @@ -33,7 +28,7 @@ import org.jetbrains.annotations.NotNull; -public class SimpleFilterUIManager extends BaseFilterUIManager { +public class SimpleItemFilterUIManager extends BaseFilterUIManager { @Override public ModularPanel buildUI(HandGuiData guiData, PanelSyncManager guiSyncManager, UISettings settings) { From 6be99630dd946fd8ddeeba26f743c32111b02a70 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 10 Dec 2025 22:11:09 -0700 Subject: [PATCH 08/18] make base class give default sized panel add method for getting the filter ui manager from a filter --- .../common/covers/filter/BaseFilter.java | 13 ++++++++ .../behaviors/filter/BaseFilterUIManager.java | 33 ++++++++++++++++--- .../filter/OreDictFilterUIManager.java | 25 +++++++++----- .../filter/SimpleFluidFilterUIManager.java | 28 ++++++++-------- .../filter/SimpleItemFilterUIManager.java | 22 +++++++------ .../filter/SmartFilterUIManager.java | 23 +++++++------ 6 files changed, 98 insertions(+), 46 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilter.java b/src/main/java/gregtech/common/covers/filter/BaseFilter.java index a7f5521de8a..a25b7e78ad0 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilter.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -10,6 +10,8 @@ import gregtech.api.util.IDirtyNotifiable; import gregtech.common.covers.filter.readers.BaseFilterReader; +import gregtech.common.items.behaviors.filter.BaseFilterUIManager; + import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; @@ -24,8 +26,11 @@ import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.CycleButtonWidget; + import org.jetbrains.annotations.NotNull; +import java.util.Optional; + public abstract class BaseFilter implements IItemComponent { public static final BaseFilter ERROR_FILTER = new BaseFilter() { @@ -66,6 +71,14 @@ public FilterType getType() { public abstract void updateFilterReader(ItemStack stack); + public Optional getUI() { + if (getContainerStack().getItem() instanceof MetaItemmetaItem) { + return Optional.ofNullable(metaItem.getItem(getContainerStack())) + .map(o -> (BaseFilterUIManager) o.getUIManager()); + } + return Optional.empty(); + } + public final ItemStack getContainerStack() { return this.getFilterReader().getContainer(); } diff --git a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java index 41117b02ecd..a801b172c80 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java @@ -10,6 +10,7 @@ import gregtech.api.cover.CoverWithUI; import gregtech.api.items.gui.ItemUIFactory; +import gregtech.api.items.metaitem.MetaItem; import gregtech.api.items.metaitem.stats.IItemBehaviour; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuiTheme; @@ -34,6 +35,7 @@ import org.jetbrains.annotations.NotNull; import java.util.List; +import java.util.Optional; public abstract class BaseFilterUIManager implements IItemBehaviour, ItemUIFactory { @@ -50,11 +52,28 @@ public final ActionResult onItemRightClick(World world, EntityPlayer } @Override - public abstract ModularPanel buildUI(HandGuiData guiData, PanelSyncManager guiSyncManager, UISettings settings); + public ModularPanel buildUI(HandGuiData guiData, PanelSyncManager guiSyncManager, UISettings settings) { + return buildUI(guiData.getUsedItemStack(), guiData, guiSyncManager, settings); + } + + public ModularPanel buildUI(ItemStack stack, HandGuiData guiData, PanelSyncManager syncManager, UISettings settings) { + return createBasePanel(stack) + .child(createWidgets(stack, syncManager) + .marginTop(22) + .marginLeft(7)) + .bindPlayerInventory(); + } - protected final ModularPanel createBasePanel(ItemStack stack) { - return GTGuis.createPanel(stack, 176, 188) - .child(CoverWithUI.createTitleRow(stack)); + /** + * Called when opening the filter panel from the hand + * @param stack filter stack + * @return the sized panel + */ + // panel when opening ui in hand + protected ModularPanel createBasePanel(ItemStack stack) { + return GTGuis.createPanel(stack, 176, 166) +// .child(CoverWithUI.createTitleRow(stack)) + ; } @Override @@ -67,8 +86,12 @@ public void addInformation(ItemStack itemStack, List lines) { lines.add(I18n.format("behaviour.filter_ui_manager")); } - public abstract @NotNull ModularPanel createPopupPanel(ItemStack stack, PanelSyncManager syncManager, String panelName); + // panel when opening ui in another ui + public @NotNull ModularPanel createPopupPanel(ItemStack stack, PanelSyncManager syncManager, String panelName) { + return GTGuis.createPopupPanel(panelName, 98, 81); + } + // panel when opening as a cover @NotNull public abstract ModularPanel createPanel(ItemStack stack, PanelSyncManager syncManager); diff --git a/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java index 187de8d4715..eda6cc93845 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java @@ -39,20 +39,29 @@ public class OreDictFilterUIManager extends BaseFilterUIManager { +// @Override +// public ModularPanel buildUI(ItemStack stack, HandGuiData guiData, PanelSyncManager guiSyncManager, UISettings settings) { +// var filter = BaseFilter.getFilterFromStack(stack); +// return createBasePanel(filter.getContainerStack()).height(160) +// .child(filter.createWidgets(guiSyncManager).top(22).margin(7, 0)) +// .child(SlotGroupWidget.playerInventory(true)); +// } + @Override - public ModularPanel buildUI(HandGuiData guiData, PanelSyncManager guiSyncManager, UISettings settings) { - var filter = BaseFilter.getFilterFromStack(guiData.getUsedItemStack()); - return createBasePanel(filter.getContainerStack()).height(160) - .child(filter.createWidgets(guiSyncManager).top(22).margin(7, 0)) - .child(SlotGroupWidget.playerInventory(true)); + protected ModularPanel createBasePanel(ItemStack stack) { + return super.createBasePanel(stack) + .height(160); } @Override public @NotNull ModularPanel createPopupPanel(ItemStack stack, PanelSyncManager syncManager, String panelName) { - return GTGuis.createPopupPanel(panelName, 188, 76, false) + return super.createPopupPanel(stack, syncManager, panelName) + .size(188, 76) +// return GTGuis.createPopupPanel(panelName, 188, 76, false) .padding(7) - .child(CoverWithUI.createTitleRow(stack)) - .child(createWidgets(stack, syncManager).top(22)); +// .child(CoverWithUI.createTitleRow(stack)) +// .child(createWidgets(stack, syncManager).top(22)) + ; } @Override diff --git a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java index 0dcb00da4d0..ae003b5f73c 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java @@ -22,23 +22,25 @@ public class SimpleFluidFilterUIManager extends BaseFilterUIManager { - @Override - public ModularPanel buildUI(HandGuiData guiData, PanelSyncManager guiSyncManager, UISettings settings) { - var filter = BaseFilter.getFilterFromStack(guiData.getUsedItemStack()); - return createBasePanel(filter.getContainerStack()) - .height(166) - .child(filter.createWidgets(guiSyncManager) - .top(22) - .left(7)) - .child(SlotGroupWidget.playerInventory(true)); - } +// @Override +// public ModularPanel buildUI(HandGuiData guiData, PanelSyncManager guiSyncManager, UISettings settings) { +// var filter = BaseFilter.getFilterFromStack(guiData.getUsedItemStack()); +// return createBasePanel(filter.getContainerStack()) +// .height(166) +// .child(filter.createWidgets(guiSyncManager) +// .top(22) +// .left(7)) +// .child(SlotGroupWidget.playerInventory(true)); +// } @Override public @NotNull ModularPanel createPopupPanel(ItemStack stack, PanelSyncManager syncManager, String panelName) { - return GTGuis.createPopupPanel(panelName, 98, 81, false) + return super.createPopupPanel(stack, syncManager, panelName) +// return GTGuis.createPopupPanel(panelName, 98, 81, false) .padding(4) - .child(CoverWithUI.createTitleRow(stack)) - .child(createWidgets(stack, syncManager).top(22)); +// .child(CoverWithUI.createTitleRow(stack)) +// .child(createWidgets(stack, syncManager).top(22)) + ; } @Override diff --git a/src/main/java/gregtech/common/items/behaviors/filter/SimpleItemFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/SimpleItemFilterUIManager.java index 9bbab25f3e6..f72491ca860 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SimpleItemFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SimpleItemFilterUIManager.java @@ -30,17 +30,19 @@ public class SimpleItemFilterUIManager extends BaseFilterUIManager { - @Override - public ModularPanel buildUI(HandGuiData guiData, PanelSyncManager guiSyncManager, UISettings settings) { - return createPanel(guiData.getUsedItemStack(), guiSyncManager); - } +// @Override +// public ModularPanel buildUI(HandGuiData guiData, PanelSyncManager guiSyncManager, UISettings settings) { +// return createPanel(guiData.getUsedItemStack(), guiSyncManager); +// } - @Override - public @NotNull ModularPanel createPopupPanel(ItemStack stack, PanelSyncManager syncManager, String panelName) { - return GTGuis.createPopupPanel(panelName, 98, 81, false) - .child(CoverWithUI.createTitleRow(stack)) - .child(createWidgets(stack, syncManager).top(22).left(4)); - } +// @Override +// public @NotNull ModularPanel createPopupPanel(ItemStack stack, PanelSyncManager syncManager, String panelName) { +// return super.createPopupPanel(stack, syncManager, panelName) +// return GTGuis.createPopupPanel(panelName, 98, 81, false) +// .child(CoverWithUI.createTitleRow(stack)) +// .child(createWidgets(stack, syncManager).top(22).left(4)) + ; +// } @Override public @NotNull ModularPanel createPanel(ItemStack stack, PanelSyncManager syncManager) { diff --git a/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java index 54986c9dd5e..134abf0a63b 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java @@ -29,19 +29,22 @@ public class SmartFilterUIManager extends BaseFilterUIManager { - @Override - public ModularPanel buildUI(HandGuiData guiData, PanelSyncManager guiSyncManager, UISettings settings) { - var filter = BaseFilter.getFilterFromStack(guiData.getUsedItemStack()); - return createBasePanel(filter.getContainerStack()).height(166) - .child(filter.createWidgets(guiSyncManager).left(7).top(22)) - .child(SlotGroupWidget.playerInventory(true)); - } +// @Override +// public ModularPanel buildUI(HandGuiData guiData, PanelSyncManager guiSyncManager, UISettings settings) { +// var filter = BaseFilter.getFilterFromStack(guiData.getUsedItemStack()); +// return createBasePanel(filter.getContainerStack()).height(166) +// .child(filter.createWidgets(guiSyncManager).left(7).top(22)) +// .child(SlotGroupWidget.playerInventory(true)); +// } @Override public @NotNull ModularPanel createPopupPanel(ItemStack stack, PanelSyncManager syncManager, String panelName) { - return GTGuis.createPopupPanel(panelName, 98 + 27, 81, false) - .child(CoverWithUI.createTitleRow(stack)) - .child(createWidgets(stack, syncManager).top(22).left(4)); + return super.createPopupPanel(stack, syncManager, panelName) + .width(98 + 27) +// return GTGuis.createPopupPanel(panelName, 98 + 27, 81, false) +// .child(CoverWithUI.createTitleRow(stack)) +// .child(createWidgets(stack, syncManager).top(22).left(4)) + ; } @Override From c32f1863dc87bfd6f87f925d4cc901a48ec07a6f Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 10 Dec 2025 22:19:26 -0700 Subject: [PATCH 09/18] container cannot be null --- .../common/covers/filter/readers/BaseFilterReader.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 bb20f222a18..3f3ddc24d00 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -2,6 +2,7 @@ import gregtech.api.util.IDirtyNotifiable; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -13,7 +14,7 @@ public class BaseFilterReader implements INBTSerializable { - protected ItemStack container; + protected @NotNull ItemStack container = new ItemStack((Item) null); // do not touch EMPTY directly protected IDirtyNotifiable dirtyNotifiable; private final int size; private int maxTransferRate = 1; @@ -25,7 +26,7 @@ public BaseFilterReader(int size) { this.size = size; } - public ItemStack getContainer() { + public @NotNull ItemStack getContainer() { return this.container; } From 6d5838e246259980c90eb2c47fc6bc96d5486dc8 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 10 Dec 2025 22:30:40 -0700 Subject: [PATCH 10/18] use filter ui manager methods --- .../gregtech/common/covers/CoverFluidFilter.java | 9 +++------ .../gregtech/common/covers/CoverItemFilter.java | 10 ++++------ .../gregtech/common/covers/filter/BaseFilter.java | 7 ++++--- .../common/covers/filter/BaseFilterContainer.java | 4 ++-- .../behaviors/filter/BaseFilterUIManager.java | 15 +++++++++++++++ 5 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index c0d9ff4c375..9d146f25249 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -113,10 +113,7 @@ public FluidFilterMode getFilterMode() { } public @NotNull BaseFilter getFilter() { - var filter = getFilterContainer().getFilter(); - if (filter == null) return BaseFilter.ERROR_FILTER; - - return filter; + return getFilterContainer().getFilter(); } public @NotNull BaseFilterContainer getFilterContainer() { @@ -148,9 +145,9 @@ public ModularPanel buildUI(SidedPosGuiData guiData, PanelSyncManager guiSyncMan guiSyncManager.syncValue("filtering_mode", filteringMode); this.fluidFilterContainer.setMaxTransferSize(1); - return getFilter().createPanel(guiSyncManager) + return getFilter().getUI().createPanel(getPickItem(), guiSyncManager) .size(176, 212).padding(7) - .child(CoverWithUI.createTitleRow(getFilterContainer().getFilterStack())) + .child(CoverWithUI.createTitleRow(getPickItem())) .child(Flow.column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight() .child(new EnumRowBuilder<>(FluidFilterMode.class) .value(filteringMode) diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index b64c75a5ee1..3d8647b3bac 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -111,10 +111,7 @@ public ItemFilterMode getFilterMode() { } public @NotNull BaseFilter getFilter() { - var filter = getFilterContainer().getFilter(); - if (filter == null) return BaseFilter.ERROR_FILTER; - - return filter; + return getFilterContainer().getFilter(); } public @NotNull BaseFilterContainer getFilterContainer() { @@ -150,9 +147,10 @@ public ModularPanel buildUI(SidedPosGuiData guiData, PanelSyncManager guiSyncMan guiSyncManager.syncValue("filtering_mode", filteringMode); - return getFilter().createPanel(guiSyncManager) + return getFilter().getUI() + .createPanel(getPickItem(), guiSyncManager) .size(176, 212).padding(7) - .child(CoverWithUI.createTitleRow(getFilterContainer().getFilterStack()).left(4)) + .child(CoverWithUI.createTitleRow(getPickItem()).left(4)) .child(Flow.column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight() .child(new EnumRowBuilder<>(ItemFilterMode.class) .value(filteringMode) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilter.java b/src/main/java/gregtech/common/covers/filter/BaseFilter.java index a25b7e78ad0..91fa050cd2c 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilter.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -71,12 +71,13 @@ public FilterType getType() { public abstract void updateFilterReader(ItemStack stack); - public Optional getUI() { + public BaseFilterUIManager getUI() { if (getContainerStack().getItem() instanceof MetaItemmetaItem) { return Optional.ofNullable(metaItem.getItem(getContainerStack())) - .map(o -> (BaseFilterUIManager) o.getUIManager()); + .map(o -> (BaseFilterUIManager) o.getUIManager()) + .orElseThrow(IllegalStateException::new); } - return Optional.empty(); + throw new IllegalStateException(); } public final ItemStack getContainerStack() { diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 28cdfecec8a..269284b4d5b 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -230,11 +230,11 @@ public IWidget initUI(GuiData data, PanelSyncManager manager) { AtomicReference filterPanel = new AtomicReference<>(); AtomicReference oldStack = new AtomicReference<>(getFilterStack()); AtomicInteger counter = new AtomicInteger(); - if (hasFilter()) filterPanel.set(getFilter().createPanelHandler(manager, counter.getAndIncrement())); + if (hasFilter()) filterPanel.set(getFilter().getUI().createPanelHandler(getFilterStack(), manager, counter.getAndIncrement())); manager.registerSyncedAction("update_filter_panel", packet -> { if (hasFilter()) { // make new panel handler only when we have a filter - filterPanel.set(getFilter().createPanelHandler(manager, counter.getAndIncrement())); + filterPanel.set(getFilter().getUI().createPanelHandler(getFilterStack(), manager, counter.getAndIncrement())); } }); ItemStackHashStrategy strategy = ItemStackHashStrategy.comparingItemDamageCount(); diff --git a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java index a801b172c80..b57491d8e43 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java @@ -1,8 +1,10 @@ package gregtech.common.items.behaviors.filter; +import com.cleanroommc.modularui.api.IPanelHandler; import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.api.widget.IWidget; import com.cleanroommc.modularui.value.sync.BooleanSyncValue; +import com.cleanroommc.modularui.value.sync.PanelSyncHandler; import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widget.Widget; @@ -58,6 +60,7 @@ public ModularPanel buildUI(HandGuiData guiData, PanelSyncManager guiSyncManager public ModularPanel buildUI(ItemStack stack, HandGuiData guiData, PanelSyncManager syncManager, UISettings settings) { return createBasePanel(stack) + .child(CoverWithUI.createTitleRow(stack)) .child(createWidgets(stack, syncManager) .marginTop(22) .marginLeft(7)) @@ -86,6 +89,18 @@ public void addInformation(ItemStack itemStack, List lines) { lines.add(I18n.format("behaviour.filter_ui_manager")); } + public IPanelHandler createPanelHandler(ItemStack stack, PanelSyncManager syncManager, int id) { + String translationKey = stack.getTranslationKey(); + return syncManager.getOrCreateSyncHandler(translationKey, id, PanelSyncHandler.class, () -> { + String key = PanelSyncManager.makeSyncKey(translationKey, id); + return (PanelSyncHandler) syncManager.panel(key, + (psm, $) -> createPopupPanel(stack, psm, key) + .child(CoverWithUI.createTitleRow(stack)) + .child(createWidgets(stack, syncManager)) + , true); + }); + } + // panel when opening ui in another ui public @NotNull ModularPanel createPopupPanel(ItemStack stack, PanelSyncManager syncManager, String panelName) { return GTGuis.createPopupPanel(panelName, 98, 81); From 517a4a68dd22ee5dd9d09a7c8bb0b165717c2e84 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 10 Dec 2025 22:38:06 -0700 Subject: [PATCH 11/18] use copied ui methods from filter ui manager delete ui code from filter classes delete notifiable from filter classes --- .../common/covers/CoverFluidFilter.java | 2 +- .../common/covers/CoverItemFilter.java | 2 +- .../common/covers/filter/BaseFilter.java | 71 ------- .../filter/OreDictionaryItemFilter.java | 191 ------------------ .../covers/filter/SimpleFluidFilter.java | 40 ---- .../covers/filter/SimpleItemFilter.java | 90 --------- .../common/covers/filter/SmartItemFilter.java | 51 ----- .../filter/readers/BaseFilterReader.java | 1 + .../readers/SimpleFluidFilterReader.java | 1 + 9 files changed, 4 insertions(+), 445 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 9d146f25249..0de8dabb9fb 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -173,7 +173,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, PanelSyncManager guiSyncMan .alignX(1f))) .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() .height(1).widthRel(0.95f).margin(0, 4)) - .child(getFilter().createWidgets(guiSyncManager))) + .child(getFilter().getUI().createWidgets(getPickItem(), guiSyncManager))) .child(SlotGroupWidget.playerInventory(false).bottom(7).left(7)); } diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 3d8647b3bac..d6a60446e30 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -176,7 +176,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, PanelSyncManager guiSyncMan .alignX(1f))) .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() .height(1).widthRel(0.95f).margin(0, 4)) - .child(getFilter().createWidgets(guiSyncManager).left(0))) + .child(getFilter().getUI().createWidgets(getPickItem(), guiSyncManager).left(0))) .child(SlotGroupWidget.playerInventory(false).bottom(7).left(7)); } diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilter.java b/src/main/java/gregtech/common/covers/filter/BaseFilter.java index 91fa050cd2c..bed0ae10633 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilter.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -1,12 +1,7 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.api.IPanelHandler; -import com.cleanroommc.modularui.value.sync.PanelSyncHandler; - import gregtech.api.items.metaitem.MetaItem; import gregtech.api.items.metaitem.stats.IItemComponent; -import gregtech.api.mui.GTGuiTextures; -import gregtech.api.mui.GTGuis; import gregtech.api.util.IDirtyNotifiable; import gregtech.common.covers.filter.readers.BaseFilterReader; @@ -17,16 +12,6 @@ import net.minecraft.network.PacketBuffer; import net.minecraftforge.fluids.FluidStack; -import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.api.widget.IWidget; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Alignment; -import com.cleanroommc.modularui.value.sync.BooleanSyncValue; -import com.cleanroommc.modularui.value.sync.PanelSyncManager; -import com.cleanroommc.modularui.widget.ParentWidget; -import com.cleanroommc.modularui.widget.Widget; -import com.cleanroommc.modularui.widgets.CycleButtonWidget; - import org.jetbrains.annotations.NotNull; import java.util.Optional; @@ -43,29 +28,11 @@ public BaseFilterReader getFilterReader() { @Override public void updateFilterReader(ItemStack stack) {} - @Override - public @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager, String panelName) { - return GTGuis.createPopupPanel(panelName, 100, 100) - .child(createWidgets(syncManager)); - } - - @Override - public @NotNull ModularPanel createPanel(PanelSyncManager syncManager) { - return GTGuis.createPanel("error", 100, 100) - .child(createWidgets(syncManager)); - } - - @Override - public @NotNull Widget createWidgets(PanelSyncManager syncManager) { - return IKey.lang("INVALID FILTER").alignment(Alignment.Center).asWidget(); - } - @Override public FilterType getType() { return FilterType.ERROR; } }; - protected IDirtyNotifiable dirtyNotifiable; public abstract BaseFilterReader getFilterReader(); @@ -158,18 +125,6 @@ public final boolean isBlacklistFilter() { return getFilterReader().isBlacklistFilter(); } - public IWidget createBlacklistUI() { - return new ParentWidget<>().coverChildren() - .child(new CycleButtonWidget() - .value(new BooleanSyncValue( - this::isBlacklistFilter, - this::setBlacklistFilter)) - .stateBackground(0, GTGuiTextures.BUTTON_BLACKLIST[0]) - .stateBackground(1, GTGuiTextures.BUTTON_BLACKLIST[1]) - .addTooltip(0, IKey.lang("cover.filter.blacklist.disabled")) - .addTooltip(1, IKey.lang("cover.filter.blacklist.enabled"))); - } - public final int getMaxTransferSize() { return this.getFilterReader().getMaxTransferRate(); } @@ -183,43 +138,17 @@ public boolean showGlobalTransferLimitSlider() { } public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { - this.dirtyNotifiable = dirtyNotifiable; this.getFilterReader().setDirtyNotifiable(dirtyNotifiable); } - public final void markDirty() { - if (dirtyNotifiable != null) { - dirtyNotifiable.markAsDirty(); - } - } - public void readFromNBT(NBTTagCompound tag) { this.getFilterReader().deserializeNBT(tag); - markDirty(); } public void writeInitialSyncData(PacketBuffer packetBuffer) {} public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) {} - public abstract @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager, String panelName); - - @NotNull - public abstract ModularPanel createPanel(PanelSyncManager syncManager); - - /** Creates the widgets standalone so that they can be put into their own panel */ - - @NotNull - public abstract Widget createWidgets(PanelSyncManager syncManager); - - public IPanelHandler createPanelHandler(PanelSyncManager syncManager, int id) { - String translationKey = getContainerStack().getTranslationKey(); - return syncManager.getOrCreateSyncHandler(translationKey, id, PanelSyncHandler.class, () -> { - String key = PanelSyncManager.makeSyncKey(translationKey, id); - return (PanelSyncHandler) syncManager.panel(key, (psm, $) -> createPopupPanel(psm, key), true); - }); - } - public abstract FilterType getType(); public boolean isItem() { diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 4ca87432285..ad029d0cc0e 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -1,40 +1,17 @@ package gregtech.common.covers.filter; -import gregtech.api.cover.CoverWithUI; -import gregtech.api.mui.GTGuiTextures; -import gregtech.api.mui.GTGuis; import gregtech.api.unification.OreDictUnifier; import gregtech.api.unification.stack.ItemVariantMap; import gregtech.api.unification.stack.MultiItemVariantMap; import gregtech.api.unification.stack.SingleItemVariantMap; -import gregtech.api.util.oreglob.OreGlobCompileResult; import gregtech.common.covers.filter.readers.OreDictFilterReader; -import gregtech.common.mui.widget.HighlightedTextField; -import gregtech.common.mui.widget.orefilter.OreFilterTestSlot; -import net.minecraft.client.resources.I18n; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.text.TextFormatting; -import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.drawable.UITexture; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.screen.RichTooltip; -import com.cleanroommc.modularui.utils.BooleanConsumer; -import com.cleanroommc.modularui.utils.Color; -import com.cleanroommc.modularui.value.sync.BooleanSyncValue; -import com.cleanroommc.modularui.value.sync.PanelSyncManager; -import com.cleanroommc.modularui.value.sync.StringSyncValue; -import com.cleanroommc.modularui.widget.Widget; -import com.cleanroommc.modularui.widgets.CycleButtonWidget; -import com.cleanroommc.modularui.widgets.SlotGroupWidget; -import com.cleanroommc.modularui.widgets.layout.Flow; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.List; import java.util.Map; import java.util.Set; @@ -73,174 +50,6 @@ public void clearCache() { this.noOreDictMatch.clear(); } - @Override - public @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager, String panelName) { - return GTGuis.createPopupPanel(panelName, 188, 76, false) - .padding(7) - .child(CoverWithUI.createTitleRow(getContainerStack())) - .child(createWidgets(syncManager).top(22)); - } - - @Override - public @NotNull ModularPanel createPanel(PanelSyncManager syncManager) { - return GTGuis.createPanel("ore_dict_filter", 100, 100); - } - - @Override - public @NotNull Widget createWidgets(PanelSyncManager syncManager) { - List oreSlots = new ArrayList<>(); - var expression = new StringSyncValue(this.filterReader::getExpression, this.filterReader::setExpression); - - BooleanConsumer setCaseSensitive = b -> { - this.filterReader.setCaseSensitive(b); - if (!syncManager.isClient()) return; - for (var slot : oreSlots) { - slot.updatePreview(); - } - }; - - BooleanConsumer setMatchAll = b -> { - this.clearCache(); - this.filterReader.setMatchAll(b); - if (!syncManager.isClient()) return; - for (var slot : oreSlots) { - slot.setMatchAll(b); - } - }; - - var caseSensitive = new BooleanSyncValue(this.filterReader::isCaseSensitive, setCaseSensitive); - var matchAll = new BooleanSyncValue(this.filterReader::shouldMatchAll, setMatchAll); - - return Flow.column().widthRel(1f).coverChildrenHeight() - .child(new HighlightedTextField() - .setHighlightRule(this::highlightRule) - .onUnfocus(() -> { - for (var slot : oreSlots) { - slot.updatePreview(); - } - }) - .setTextColor(Color.WHITE.darker(1)) - .value(expression).marginBottom(4) - .height(18).widthRel(1f)) - .child(Flow.row().coverChildrenHeight() - .widthRel(1f) - .child(Flow.column().height(18) - .coverChildrenWidth().marginRight(2) - .child(GTGuiTextures.OREDICT_INFO.asWidget() - .size(8).top(0) - .addTooltipLine(IKey.lang("cover.ore_dictionary_filter.info"))) - .child(new Widget<>() - .size(8).bottom(0) - .onUpdateListener(this::getStatusIcon) - .tooltipBuilder(this::createStatusTooltip) - .tooltip(tooltip -> tooltip.setAutoUpdate(true)))) - .child(SlotGroupWidget.builder() - .row("XXXXX") - .key('X', i -> { - var slot = new OreFilterTestSlot() - .setGlobSupplier(this.filterReader::getGlob); - slot.setMatchAll(this.filterReader.shouldMatchAll()); - oreSlots.add(slot); - return slot; - }) - .build().marginRight(2)) - .child(new CycleButtonWidget() - .size(18).value(caseSensitive) - .marginRight(2) - .stateBackground(0, GTGuiTextures.BUTTON_CASE_SENSITIVE[0]) - .stateBackground(1, GTGuiTextures.BUTTON_CASE_SENSITIVE[1]) - .addTooltip(0, - IKey.lang("cover.ore_dictionary_filter.button.case_sensitive.disabled")) - .addTooltip(1, - IKey.lang("cover.ore_dictionary_filter.button.case_sensitive.enabled"))) - .child(new CycleButtonWidget() - .size(18).value(matchAll) - .marginRight(2) - .stateBackground(0, GTGuiTextures.BUTTON_MATCH_ALL[0]) - .stateBackground(1, GTGuiTextures.BUTTON_MATCH_ALL[1]) - .addTooltip(0, - IKey.lang("cover.ore_dictionary_filter.button.match_all.disabled")) - .addTooltip(1, - IKey.lang("cover.ore_dictionary_filter.button.match_all.enabled"))) - .child(createBlacklistUI())); - } - - protected void getStatusIcon(Widget widget) { - UITexture texture; - var result = this.filterReader.getResult(); - - if (result == null) { - texture = GTGuiTextures.OREDICT_WAITING; - } else if (result.getReports().length == 0) { - texture = GTGuiTextures.OREDICT_SUCCESS; - } else if (result.hasError()) { - texture = GTGuiTextures.OREDICT_ERROR; - } else { - texture = GTGuiTextures.OREDICT_WARN; - } - widget.background(texture); - } - - protected void createStatusTooltip(RichTooltip tooltip) { - var result = this.filterReader.getResult(); - if (result == null) return; - List list = new ArrayList<>(); - - int error = 0, warn = 0; - for (OreGlobCompileResult.Report report : result.getReports()) { - if (report.isError()) error++; - else warn++; - list.add((report.isError() ? TextFormatting.RED : TextFormatting.GOLD) + report.toString()); - } - if (error > 0) { - if (warn > 0) { - list.add(0, I18n.format("cover.ore_dictionary_filter.status.err_warn", error, warn)); - } else { - list.add(0, I18n.format("cover.ore_dictionary_filter.status.err", error)); - } - } else { - if (warn > 0) { - list.add(0, I18n.format("cover.ore_dictionary_filter.status.warn", warn)); - } else { - list.add(I18n.format("cover.ore_dictionary_filter.status.no_issues")); - } - list.add(""); - list.add(I18n.format("cover.ore_dictionary_filter.status.explain")); - list.add(""); - list.addAll(result.getInstance().toFormattedString()); - } - tooltip.addStringLines(list); - } - - protected String highlightRule(String text) { - StringBuilder builder = new StringBuilder(text); - for (int i = 0; i < builder.length(); i++) { - switch (builder.charAt(i)) { - case '|', '&', '^', '(', ')' -> { - builder.insert(i, TextFormatting.GOLD); - i += 2; - } - case '*', '?' -> { - builder.insert(i, TextFormatting.GREEN); - i += 2; - } - case '!' -> { - builder.insert(i, TextFormatting.RED); - i += 2; - } - case '\\' -> { - builder.insert(i++, TextFormatting.YELLOW); - i += 2; - } - default -> { - continue; - } - } - builder.insert(i + 1, TextFormatting.RESET); - } - return builder.toString(); - } - @Override public MatchResult matchItem(ItemStack itemStack) { // "wtf is this system?? i can put any non null object here and it i will work??? $arch" diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 5955b7b426e..22e364a215e 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -1,20 +1,10 @@ package gregtech.common.covers.filter; -import gregtech.api.cover.CoverWithUI; -import gregtech.api.mui.GTGuis; import gregtech.common.covers.filter.readers.SimpleFluidFilterReader; -import gregtech.common.mui.widget.GTFluidSlot; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.value.sync.PanelSyncManager; -import com.cleanroommc.modularui.widget.Widget; -import com.cleanroommc.modularui.widgets.SlotGroupWidget; -import com.cleanroommc.modularui.widgets.layout.Flow; -import org.jetbrains.annotations.NotNull; - public class SimpleFluidFilter extends BaseFilter { private static final int MAX_FLUID_SLOTS = 9; @@ -37,36 +27,6 @@ public void updateFilterReader(ItemStack stack) { public void configureFilterTanks(int amount) { this.filterReader.setFluidAmounts(amount); - this.markDirty(); - } - - @Override - public @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager, String panelName) { - return GTGuis.createPopupPanel(panelName, 98, 81, false) - .padding(4) - .child(CoverWithUI.createTitleRow(getContainerStack())) - .child(createWidgets(syncManager).top(22)); - } - - @Override - public @NotNull ModularPanel createPanel(PanelSyncManager syncManager) { - return GTGuis.createPanel(getContainerStack(), 176, 168); - } - - @Override - public @NotNull Widget createWidgets(PanelSyncManager syncManager) { - return Flow.row().coverChildrenHeight().widthRel(1f) - .child(SlotGroupWidget.builder() - .matrix("FFF", - "FFF", - "FFF") - .key('F', i -> new GTFluidSlot() - .syncHandler(GTFluidSlot.sync(filterReader.getFluidTank(i)) - .phantom(true) - .showAmountOnSlot(getFilterReader()::shouldShowAmount) - .showAmountInTooltip(getFilterReader()::shouldShowAmount))) - .build().marginRight(4)) - .child(createBlacklistUI()); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 5f311bebfd8..783b7fdb660 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -1,32 +1,10 @@ package gregtech.common.covers.filter; -import gregtech.api.cover.CoverWithUI; -import gregtech.api.mui.GTGuiTextures; -import gregtech.api.mui.GTGuis; -import gregtech.api.util.TextFormattingUtil; -import gregtech.common.covers.CoverItemVoidingAdvanced; -import gregtech.common.covers.CoverRoboticArm; -import gregtech.common.covers.TransferMode; -import gregtech.common.covers.VoidingMode; import gregtech.common.covers.filter.readers.SimpleItemFilterReader; import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; -import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Color; -import com.cleanroommc.modularui.value.sync.BooleanSyncValue; -import com.cleanroommc.modularui.value.sync.PanelSyncManager; -import com.cleanroommc.modularui.value.sync.SyncHandlers; -import com.cleanroommc.modularui.widget.Widget; -import com.cleanroommc.modularui.widgets.CycleButtonWidget; -import com.cleanroommc.modularui.widgets.SlotGroupWidget; -import com.cleanroommc.modularui.widgets.layout.Flow; -import com.cleanroommc.modularui.widgets.slot.PhantomItemSlot; -import com.cleanroommc.modularui.widgets.slot.SlotGroup; -import org.jetbrains.annotations.NotNull; - public class SimpleItemFilter extends BaseFilter { private static final int MAX_MATCH_SLOTS = 9; @@ -75,74 +53,6 @@ public int getTransferLimit(ItemStack stack, int transferSize) { return getTransferLimit(matchedSlot, transferSize); } - @Override - public @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager, String panelName) { - return GTGuis.createPopupPanel(panelName, 98, 81, false) - .child(CoverWithUI.createTitleRow(getContainerStack())) - .child(createWidgets(syncManager).top(22).left(4)); - } - - @Override - public @NotNull ModularPanel createPanel(PanelSyncManager syncManager) { - return GTGuis.createPanel("simple_item_filter", 176, 166); - } - - @SuppressWarnings("UnstableApiUsage") - @Override - public @NotNull Widget createWidgets(PanelSyncManager syncManager) { - SlotGroup filterInventory = new SlotGroup("filter_inv", 3, 1000, true); - var ignoreDamage = new BooleanSyncValue(this.filterReader::isIgnoreDamage, this.filterReader::setIgnoreDamage); - var ignoreNBT = new BooleanSyncValue(this.filterReader::isIgnoreNBT, this.filterReader::setIgnoreNBT); - - syncManager.registerSlotGroup(filterInventory); - - return Flow.row().coverChildren() - .child(SlotGroupWidget.builder() - .matrix("XXX", - "XXX", - "XXX") - .key('X', index -> new PhantomItemSlot() - .slot(SyncHandlers.itemSlot(this.filterReader, index) - .ignoreMaxStackSize(true) - .slotGroup(filterInventory) - .changeListener((newItem, onlyAmountChanged, client, init) -> { - if (onlyAmountChanged && !init) { - markDirty(); - } - })) - .tooltipAutoUpdate(true) - .tooltipTextColor(Color.GREY.main) - .tooltipBuilder(tooltip -> { - if (dirtyNotifiable instanceof CoverRoboticArm coverArm && - coverArm.getTransferMode() != TransferMode.TRANSFER_ANY || - dirtyNotifiable instanceof CoverItemVoidingAdvanced coverItem && - coverItem.getVoidingMode() != VoidingMode.VOID_ANY) { - int count = this.filterReader.getTagAt(index) - .getInteger(SimpleItemFilterReader.COUNT); - if (count > 0) { - tooltip.addLine(IKey.lang("cover.item_filter.config_amount")); - tooltip.addLine( - IKey.str("Count: %s", TextFormattingUtil.formatNumbers(count))); - } - } - })) - .build().marginRight(4)) - .child(Flow.column().width(18).coverChildren() - .child(createBlacklistUI()) - .child(new CycleButtonWidget() - .value(ignoreDamage) - .stateBackground(0, GTGuiTextures.BUTTON_IGNORE_DAMAGE[0]) - .stateBackground(1, GTGuiTextures.BUTTON_IGNORE_DAMAGE[1]) - .addTooltip(0, IKey.lang("cover.item_filter.ignore_damage.disabled")) - .addTooltip(1, IKey.lang("cover.item_filter.ignore_damage.enabled"))) - .child(new CycleButtonWidget() - .value(ignoreNBT) - .stateBackground(0, GTGuiTextures.BUTTON_IGNORE_NBT[0]) - .stateBackground(1, GTGuiTextures.BUTTON_IGNORE_NBT[1]) - .addTooltip(0, IKey.lang("cover.item_filter.ignore_nbt.disabled")) - .addTooltip(1, IKey.lang("cover.item_filter.ignore_nbt.enabled")))); - } - public static int itemFilterMatch(IItemHandler filterSlots, boolean ignoreDamage, boolean ignoreNBTData, ItemStack itemStack) { for (int i = 0; i < filterSlots.getSlots(); i++) { diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index cc4d8effc30..766e913228b 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -1,8 +1,5 @@ package gregtech.common.covers.filter; -import gregtech.api.cover.CoverWithUI; -import gregtech.api.mui.GTGuiTextures; -import gregtech.api.mui.GTGuis; import gregtech.api.recipes.Recipe; import gregtech.api.recipes.RecipeMap; import gregtech.api.recipes.RecipeMaps; @@ -13,15 +10,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.IStringSerializable; -import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Color; -import com.cleanroommc.modularui.value.BoolValue; -import com.cleanroommc.modularui.value.sync.EnumSyncValue; -import com.cleanroommc.modularui.value.sync.PanelSyncManager; -import com.cleanroommc.modularui.widget.Widget; -import com.cleanroommc.modularui.widgets.ToggleButton; -import com.cleanroommc.modularui.widgets.layout.Flow; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import org.jetbrains.annotations.NotNull; @@ -88,45 +76,6 @@ public FilterType getType() { return FilterType.ITEM; } - @Override - public @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager, String panelName) { - return GTGuis.createPopupPanel(panelName, 98 + 27, 81, false) - .child(CoverWithUI.createTitleRow(getContainerStack())) - .child(createWidgets(syncManager).top(22).left(4)); - } - - @Override - public @NotNull ModularPanel createPanel(PanelSyncManager syncManager) { - return GTGuis.createPanel("smart_item_filter", 100, 100).padding(7); - } - - @Override - public @NotNull Widget createWidgets(PanelSyncManager syncManager) { - var filterMode = new EnumSyncValue<>(SmartFilteringMode.class, filterReader::getFilteringMode, - filterReader::setFilteringMode); - syncManager.syncValue("filter_mode", filterMode); - - return Flow.row().coverChildren() - .child(Flow.column().coverChildren().marginRight(4) - .child(createFilterModeButton(filterMode, SmartFilteringMode.ELECTROLYZER)) - .child(createFilterModeButton(filterMode, SmartFilteringMode.CENTRIFUGE)) - .child(createFilterModeButton(filterMode, SmartFilteringMode.SIFTER))) - .child(createBlacklistUI()); - } - - private Widget createFilterModeButton(EnumSyncValue value, - SmartFilteringMode mode) { - return new ToggleButton().height(18).width(18 * 5) - .value(boolValueOf(value, mode)) - .background(GTGuiTextures.MC_BUTTON) - .selectedBackground(GTGuiTextures.MC_BUTTON_DISABLED) - .overlay(IKey.lang(mode.getName()).color(Color.WHITE.darker(1))); - } - - protected > BoolValue.Dynamic boolValueOf(EnumSyncValue syncValue, T value) { - return new BoolValue.Dynamic(() -> syncValue.getValue() == value, $ -> syncValue.setValue(value)); - } - @Override public boolean showGlobalTransferLimitSlider() { return true; 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 3f3ddc24d00..b6c0c36aae6 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -111,6 +111,7 @@ public NBTTagCompound serializeNBT() { public void deserializeNBT(NBTTagCompound nbt) { if (nbt.hasKey(BLACKLIST)) setBlacklistFilter(nbt.getBoolean(BLACKLIST)); + markDirty(); } public void handleLegacyNBT(NBTTagCompound tag) { diff --git a/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java index 901e5770662..13dba2ee4ec 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java @@ -52,6 +52,7 @@ public void setFluidAmounts(int amount) { for (int i = 0; i < getSize(); i++) { getFluidTank(i).setFluidAmount(amount); } + markDirty(); } @Override From 0003add2c888dfb1a4643331af423274be949ffd Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 10 Dec 2025 22:38:25 -0700 Subject: [PATCH 12/18] spotless delete commented code --- .../common/covers/filter/BaseFilter.java | 1 - .../covers/filter/BaseFilterContainer.java | 8 ++- .../readers/SimpleItemFilterReader.java | 3 +- .../java/gregtech/common/items/MetaItem1.java | 2 +- .../behaviors/filter/BaseFilterUIManager.java | 33 ++++++------- .../filter/OreDictFilterUIManager.java | 49 ++++++------------- .../filter/SimpleFluidFilterUIManager.java | 34 +++---------- .../filter/SimpleItemFilterUIManager.java | 49 +++++++------------ .../filter/SmartFilterUIManager.java | 41 ++++------------ 9 files changed, 73 insertions(+), 147 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilter.java b/src/main/java/gregtech/common/covers/filter/BaseFilter.java index bed0ae10633..3b2990bd060 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilter.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -4,7 +4,6 @@ import gregtech.api.items.metaitem.stats.IItemComponent; import gregtech.api.util.IDirtyNotifiable; import gregtech.common.covers.filter.readers.BaseFilterReader; - import gregtech.common.items.behaviors.filter.BaseFilterUIManager; import net.minecraft.item.ItemStack; diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 269284b4d5b..3c65b2df061 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -230,11 +230,15 @@ public IWidget initUI(GuiData data, PanelSyncManager manager) { AtomicReference filterPanel = new AtomicReference<>(); AtomicReference oldStack = new AtomicReference<>(getFilterStack()); AtomicInteger counter = new AtomicInteger(); - if (hasFilter()) filterPanel.set(getFilter().getUI().createPanelHandler(getFilterStack(), manager, counter.getAndIncrement())); + if (hasFilter()) { + filterPanel.set(getFilter().getUI() + .createPanelHandler(getFilterStack(), manager, counter.getAndIncrement())); + } manager.registerSyncedAction("update_filter_panel", packet -> { if (hasFilter()) { // make new panel handler only when we have a filter - filterPanel.set(getFilter().getUI().createPanelHandler(getFilterStack(), manager, counter.getAndIncrement())); + filterPanel.set(getFilter().getUI() + .createPanelHandler(getFilterStack(), manager, counter.getAndIncrement())); } }); ItemStackHashStrategy strategy = ItemStackHashStrategy.comparingItemDamageCount(); diff --git a/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java index 3747ad7de39..062a261437a 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java @@ -1,7 +1,6 @@ package gregtech.common.covers.filter.readers; import gregtech.api.util.GTUtility; - import gregtech.common.covers.CoverItemVoidingAdvanced; import gregtech.common.covers.CoverRoboticArm; import gregtech.common.covers.TransferMode; @@ -153,7 +152,7 @@ public boolean shouldShowCount() { return dirtyNotifiable instanceof CoverRoboticArm coverArm && coverArm.getTransferMode() != TransferMode.TRANSFER_ANY || dirtyNotifiable instanceof CoverItemVoidingAdvanced coverItem && - coverItem.getVoidingMode() != VoidingMode.VOID_ANY; + coverItem.getVoidingMode() != VoidingMode.VOID_ANY; } public int getStackCountInSlot(int slot) { diff --git a/src/main/java/gregtech/common/items/MetaItem1.java b/src/main/java/gregtech/common/items/MetaItem1.java index a256cdeb9aa..4e7b6cee638 100644 --- a/src/main/java/gregtech/common/items/MetaItem1.java +++ b/src/main/java/gregtech/common/items/MetaItem1.java @@ -51,8 +51,8 @@ import gregtech.common.items.behaviors.TricorderBehavior; import gregtech.common.items.behaviors.TurbineRotorBehavior; import gregtech.common.items.behaviors.filter.OreDictFilterUIManager; -import gregtech.common.items.behaviors.filter.SimpleItemFilterUIManager; import gregtech.common.items.behaviors.filter.SimpleFluidFilterUIManager; +import gregtech.common.items.behaviors.filter.SimpleItemFilterUIManager; import gregtech.common.items.behaviors.filter.SmartFilterUIManager; import gregtech.common.items.behaviors.monitorplugin.AdvancedMonitorPluginBehavior; import gregtech.common.items.behaviors.monitorplugin.FakeGuiPluginBehavior; diff --git a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java index b57491d8e43..f4fa57fe70b 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java @@ -1,24 +1,12 @@ package gregtech.common.items.behaviors.filter; -import com.cleanroommc.modularui.api.IPanelHandler; -import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.api.widget.IWidget; -import com.cleanroommc.modularui.value.sync.BooleanSyncValue; -import com.cleanroommc.modularui.value.sync.PanelSyncHandler; -import com.cleanroommc.modularui.widget.ParentWidget; -import com.cleanroommc.modularui.widget.Widget; - -import com.cleanroommc.modularui.widgets.CycleButtonWidget; - import gregtech.api.cover.CoverWithUI; import gregtech.api.items.gui.ItemUIFactory; -import gregtech.api.items.metaitem.MetaItem; import gregtech.api.items.metaitem.stats.IItemBehaviour; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuiTheme; import gregtech.api.mui.GTGuis; import gregtech.api.mui.factory.MetaItemGuiFactory; - import gregtech.common.covers.filter.BaseFilter; import gregtech.common.covers.filter.readers.BaseFilterReader; @@ -30,14 +18,21 @@ import net.minecraft.util.EnumHand; import net.minecraft.world.World; +import com.cleanroommc.modularui.api.IPanelHandler; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.api.widget.IWidget; import com.cleanroommc.modularui.factory.HandGuiData; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.screen.UISettings; +import com.cleanroommc.modularui.value.sync.BooleanSyncValue; +import com.cleanroommc.modularui.value.sync.PanelSyncHandler; import com.cleanroommc.modularui.value.sync.PanelSyncManager; +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widget.Widget; +import com.cleanroommc.modularui.widgets.CycleButtonWidget; import org.jetbrains.annotations.NotNull; import java.util.List; -import java.util.Optional; public abstract class BaseFilterUIManager implements IItemBehaviour, ItemUIFactory { @@ -58,7 +53,8 @@ public ModularPanel buildUI(HandGuiData guiData, PanelSyncManager guiSyncManager return buildUI(guiData.getUsedItemStack(), guiData, guiSyncManager, settings); } - public ModularPanel buildUI(ItemStack stack, HandGuiData guiData, PanelSyncManager syncManager, UISettings settings) { + public ModularPanel buildUI(ItemStack stack, HandGuiData guiData, PanelSyncManager syncManager, + UISettings settings) { return createBasePanel(stack) .child(CoverWithUI.createTitleRow(stack)) .child(createWidgets(stack, syncManager) @@ -69,14 +65,15 @@ public ModularPanel buildUI(ItemStack stack, HandGuiData guiData, PanelSyncManag /** * Called when opening the filter panel from the hand + * * @param stack filter stack * @return the sized panel */ // panel when opening ui in hand protected ModularPanel createBasePanel(ItemStack stack) { return GTGuis.createPanel(stack, 176, 166) -// .child(CoverWithUI.createTitleRow(stack)) - ; + // .child(CoverWithUI.createTitleRow(stack)) + ; } @Override @@ -96,8 +93,8 @@ public IPanelHandler createPanelHandler(ItemStack stack, PanelSyncManager syncMa return (PanelSyncHandler) syncManager.panel(key, (psm, $) -> createPopupPanel(stack, psm, key) .child(CoverWithUI.createTitleRow(stack)) - .child(createWidgets(stack, syncManager)) - , true); + .child(createWidgets(stack, syncManager)), + true); }); } diff --git a/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java index eda6cc93845..a9be9294078 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java @@ -1,28 +1,9 @@ package gregtech.common.items.behaviors.filter; -import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.drawable.UITexture; -import com.cleanroommc.modularui.screen.RichTooltip; -import com.cleanroommc.modularui.utils.BooleanConsumer; -import com.cleanroommc.modularui.utils.Color; -import com.cleanroommc.modularui.value.sync.BooleanSyncValue; -import com.cleanroommc.modularui.value.sync.StringSyncValue; -import com.cleanroommc.modularui.widget.Widget; -import com.cleanroommc.modularui.widgets.CycleButtonWidget; -import com.cleanroommc.modularui.widgets.layout.Flow; - -import gregtech.api.cover.CoverWithUI; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.api.util.oreglob.OreGlobCompileResult; import gregtech.common.covers.filter.BaseFilter; - -import com.cleanroommc.modularui.factory.HandGuiData; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.screen.UISettings; -import com.cleanroommc.modularui.value.sync.PanelSyncManager; -import com.cleanroommc.modularui.widgets.SlotGroupWidget; - import gregtech.common.covers.filter.OreDictionaryItemFilter; import gregtech.common.covers.filter.readers.OreDictFilterReader; import gregtech.common.mui.widget.HighlightedTextField; @@ -32,6 +13,19 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.text.TextFormatting; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.drawable.UITexture; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.screen.RichTooltip; +import com.cleanroommc.modularui.utils.BooleanConsumer; +import com.cleanroommc.modularui.utils.Color; +import com.cleanroommc.modularui.value.sync.BooleanSyncValue; +import com.cleanroommc.modularui.value.sync.PanelSyncManager; +import com.cleanroommc.modularui.value.sync.StringSyncValue; +import com.cleanroommc.modularui.widget.Widget; +import com.cleanroommc.modularui.widgets.CycleButtonWidget; +import com.cleanroommc.modularui.widgets.SlotGroupWidget; +import com.cleanroommc.modularui.widgets.layout.Flow; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -39,14 +33,6 @@ public class OreDictFilterUIManager extends BaseFilterUIManager { -// @Override -// public ModularPanel buildUI(ItemStack stack, HandGuiData guiData, PanelSyncManager guiSyncManager, UISettings settings) { -// var filter = BaseFilter.getFilterFromStack(stack); -// return createBasePanel(filter.getContainerStack()).height(160) -// .child(filter.createWidgets(guiSyncManager).top(22).margin(7, 0)) -// .child(SlotGroupWidget.playerInventory(true)); -// } - @Override protected ModularPanel createBasePanel(ItemStack stack) { return super.createBasePanel(stack) @@ -57,11 +43,7 @@ protected ModularPanel createBasePanel(ItemStack stack) { public @NotNull ModularPanel createPopupPanel(ItemStack stack, PanelSyncManager syncManager, String panelName) { return super.createPopupPanel(stack, syncManager, panelName) .size(188, 76) -// return GTGuis.createPopupPanel(panelName, 188, 76, false) - .padding(7) -// .child(CoverWithUI.createTitleRow(stack)) -// .child(createWidgets(stack, syncManager).top(22)) - ; + .padding(7); } @Override @@ -118,7 +100,8 @@ protected ModularPanel createBasePanel(ItemStack stack) { .child(new Widget<>() .size(8).bottom(0) .onUpdateListener(widget -> getStatusIcon(filterReader.getResult(), widget)) - .tooltipBuilder(richTooltip -> createStatusTooltip(filterReader.getResult(), richTooltip)) + .tooltipBuilder(richTooltip -> createStatusTooltip(filterReader.getResult(), + richTooltip)) .tooltip(tooltip -> tooltip.setAutoUpdate(true)))) .child(SlotGroupWidget.builder() .row("XXXXX") diff --git a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java index ae003b5f73c..75b2e0f2fd0 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java @@ -1,46 +1,24 @@ package gregtech.common.items.behaviors.filter; -import com.cleanroommc.modularui.widget.Widget; -import com.cleanroommc.modularui.widgets.layout.Flow; - -import gregtech.api.cover.CoverWithUI; import gregtech.api.mui.GTGuis; -import gregtech.common.covers.filter.BaseFilter; - -import com.cleanroommc.modularui.factory.HandGuiData; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.screen.UISettings; -import com.cleanroommc.modularui.value.sync.PanelSyncManager; -import com.cleanroommc.modularui.widgets.SlotGroupWidget; - import gregtech.common.covers.filter.readers.SimpleFluidFilterReader; import gregtech.common.mui.widget.GTFluidSlot; import net.minecraft.item.ItemStack; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.PanelSyncManager; +import com.cleanroommc.modularui.widget.Widget; +import com.cleanroommc.modularui.widgets.SlotGroupWidget; +import com.cleanroommc.modularui.widgets.layout.Flow; import org.jetbrains.annotations.NotNull; public class SimpleFluidFilterUIManager extends BaseFilterUIManager { -// @Override -// public ModularPanel buildUI(HandGuiData guiData, PanelSyncManager guiSyncManager, UISettings settings) { -// var filter = BaseFilter.getFilterFromStack(guiData.getUsedItemStack()); -// return createBasePanel(filter.getContainerStack()) -// .height(166) -// .child(filter.createWidgets(guiSyncManager) -// .top(22) -// .left(7)) -// .child(SlotGroupWidget.playerInventory(true)); -// } - @Override public @NotNull ModularPanel createPopupPanel(ItemStack stack, PanelSyncManager syncManager, String panelName) { return super.createPopupPanel(stack, syncManager, panelName) -// return GTGuis.createPopupPanel(panelName, 98, 81, false) - .padding(4) -// .child(CoverWithUI.createTitleRow(stack)) -// .child(createWidgets(stack, syncManager).top(22)) - ; + .padding(4); } @Override diff --git a/src/main/java/gregtech/common/items/behaviors/filter/SimpleItemFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/SimpleItemFilterUIManager.java index f72491ca860..917da322061 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SimpleItemFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SimpleItemFilterUIManager.java @@ -1,48 +1,34 @@ package gregtech.common.items.behaviors.filter; +import gregtech.api.mui.GTGuiTextures; +import gregtech.api.mui.GTGuis; +import gregtech.api.util.TextFormattingUtil; +import gregtech.common.covers.filter.BaseFilter; +import gregtech.common.covers.filter.readers.SimpleItemFilterReader; + +import net.minecraft.item.ItemStack; + import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.utils.Color; import com.cleanroommc.modularui.value.sync.BooleanSyncValue; +import com.cleanroommc.modularui.value.sync.PanelSyncManager; import com.cleanroommc.modularui.value.sync.SyncHandlers; import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.CycleButtonWidget; +import com.cleanroommc.modularui.widgets.SlotGroupWidget; import com.cleanroommc.modularui.widgets.layout.Flow; import com.cleanroommc.modularui.widgets.slot.PhantomItemSlot; import com.cleanroommc.modularui.widgets.slot.SlotGroup; - -import gregtech.api.cover.CoverWithUI; -import gregtech.api.mui.GTGuiTextures; -import gregtech.api.mui.GTGuis; -import gregtech.api.util.TextFormattingUtil; -import gregtech.common.covers.filter.BaseFilter; - -import com.cleanroommc.modularui.factory.HandGuiData; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.screen.UISettings; -import com.cleanroommc.modularui.value.sync.PanelSyncManager; -import com.cleanroommc.modularui.widgets.SlotGroupWidget; - -import gregtech.common.covers.filter.readers.SimpleItemFilterReader; - -import net.minecraft.item.ItemStack; - import org.jetbrains.annotations.NotNull; public class SimpleItemFilterUIManager extends BaseFilterUIManager { -// @Override -// public ModularPanel buildUI(HandGuiData guiData, PanelSyncManager guiSyncManager, UISettings settings) { -// return createPanel(guiData.getUsedItemStack(), guiSyncManager); -// } - -// @Override -// public @NotNull ModularPanel createPopupPanel(ItemStack stack, PanelSyncManager syncManager, String panelName) { -// return super.createPopupPanel(stack, syncManager, panelName) -// return GTGuis.createPopupPanel(panelName, 98, 81, false) -// .child(CoverWithUI.createTitleRow(stack)) -// .child(createWidgets(stack, syncManager).top(22).left(4)) - ; -// } + @Override + public @NotNull ModularPanel createPopupPanel(ItemStack stack, PanelSyncManager syncManager, String panelName) { + return super.createPopupPanel(stack, syncManager, panelName) + .padding(4); + } @Override public @NotNull ModularPanel createPanel(ItemStack stack, PanelSyncManager syncManager) { @@ -52,7 +38,8 @@ public class SimpleItemFilterUIManager extends BaseFilterUIManager { @SuppressWarnings("UnstableApiUsage") @Override public @NotNull Widget createWidgets(ItemStack stack, PanelSyncManager syncManager) { - SimpleItemFilterReader filterReader = (SimpleItemFilterReader) BaseFilter.getFilterFromStack(stack).getFilterReader(); + SimpleItemFilterReader filterReader = (SimpleItemFilterReader) BaseFilter.getFilterFromStack(stack) + .getFilterReader(); SlotGroup filterInventory = new SlotGroup("filter_inv", 3, 1000, true); var ignoreDamage = new BooleanSyncValue(filterReader::isIgnoreDamage, filterReader::setIgnoreDamage); var ignoreNBT = new BooleanSyncValue(filterReader::isIgnoreNBT, filterReader::setIgnoreNBT); diff --git a/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java index 134abf0a63b..6e5da62ee84 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java @@ -1,50 +1,29 @@ package gregtech.common.items.behaviors.filter; -import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.utils.Color; -import com.cleanroommc.modularui.value.BoolValue; -import com.cleanroommc.modularui.value.sync.EnumSyncValue; -import com.cleanroommc.modularui.widget.Widget; -import com.cleanroommc.modularui.widgets.ToggleButton; -import com.cleanroommc.modularui.widgets.layout.Flow; - -import gregtech.api.cover.CoverWithUI; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; -import gregtech.common.covers.filter.BaseFilter; - -import com.cleanroommc.modularui.factory.HandGuiData; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.screen.UISettings; -import com.cleanroommc.modularui.value.sync.PanelSyncManager; -import com.cleanroommc.modularui.widgets.SlotGroupWidget; - import gregtech.common.covers.filter.SmartItemFilter; - import gregtech.common.covers.filter.readers.SmartItemFilterReader; import net.minecraft.item.ItemStack; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Color; +import com.cleanroommc.modularui.value.BoolValue; +import com.cleanroommc.modularui.value.sync.EnumSyncValue; +import com.cleanroommc.modularui.value.sync.PanelSyncManager; +import com.cleanroommc.modularui.widget.Widget; +import com.cleanroommc.modularui.widgets.ToggleButton; +import com.cleanroommc.modularui.widgets.layout.Flow; import org.jetbrains.annotations.NotNull; public class SmartFilterUIManager extends BaseFilterUIManager { -// @Override -// public ModularPanel buildUI(HandGuiData guiData, PanelSyncManager guiSyncManager, UISettings settings) { -// var filter = BaseFilter.getFilterFromStack(guiData.getUsedItemStack()); -// return createBasePanel(filter.getContainerStack()).height(166) -// .child(filter.createWidgets(guiSyncManager).left(7).top(22)) -// .child(SlotGroupWidget.playerInventory(true)); -// } - @Override public @NotNull ModularPanel createPopupPanel(ItemStack stack, PanelSyncManager syncManager, String panelName) { return super.createPopupPanel(stack, syncManager, panelName) - .width(98 + 27) -// return GTGuis.createPopupPanel(panelName, 98 + 27, 81, false) -// .child(CoverWithUI.createTitleRow(stack)) -// .child(createWidgets(stack, syncManager).top(22).left(4)) - ; + .width(98 + 27); } @Override From 37e6c3d2d88cae85cfc01412a3210acbae9659de Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Dec 2025 00:30:12 -0700 Subject: [PATCH 13/18] small fixes --- .../behaviors/filter/BaseFilterUIManager.java | 13 +++++++------ .../behaviors/filter/OreDictFilterUIManager.java | 15 ++++++++++++--- .../filter/SimpleFluidFilterUIManager.java | 3 ++- .../filter/SimpleItemFilterUIManager.java | 5 ++--- .../behaviors/filter/SmartFilterUIManager.java | 4 +++- 5 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java index f4fa57fe70b..3be029e1042 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java @@ -58,8 +58,7 @@ public ModularPanel buildUI(ItemStack stack, HandGuiData guiData, PanelSyncManag return createBasePanel(stack) .child(CoverWithUI.createTitleRow(stack)) .child(createWidgets(stack, syncManager) - .marginTop(22) - .marginLeft(7)) + .marginTop(18)) .bindPlayerInventory(); } @@ -72,8 +71,7 @@ public ModularPanel buildUI(ItemStack stack, HandGuiData guiData, PanelSyncManag // panel when opening ui in hand protected ModularPanel createBasePanel(ItemStack stack) { return GTGuis.createPanel(stack, 176, 166) - // .child(CoverWithUI.createTitleRow(stack)) - ; + .padding(7); } @Override @@ -93,7 +91,8 @@ public IPanelHandler createPanelHandler(ItemStack stack, PanelSyncManager syncMa return (PanelSyncHandler) syncManager.panel(key, (psm, $) -> createPopupPanel(stack, psm, key) .child(CoverWithUI.createTitleRow(stack)) - .child(createWidgets(stack, syncManager)), + .child(createWidgets(stack, syncManager) + .marginTop(18)), true); }); } @@ -113,7 +112,9 @@ public IPanelHandler createPanelHandler(ItemStack stack, PanelSyncManager syncMa public abstract Widget createWidgets(ItemStack stack, PanelSyncManager syncManager); public BaseFilterReader getFilterReader(ItemStack stack) { - return BaseFilter.getFilterFromStack(stack).getFilterReader(); + BaseFilterReader filterReader = BaseFilter.getFilterFromStack(stack).getFilterReader(); + filterReader.readStack(stack); + return filterReader; } public IWidget createBlacklistUI(ItemStack filterStack) { diff --git a/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java index a9be9294078..d8af056d6ba 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java @@ -55,6 +55,7 @@ protected ModularPanel createBasePanel(ItemStack stack) { public @NotNull Widget createWidgets(ItemStack stack, PanelSyncManager syncManager) { OreDictionaryItemFilter filter = (OreDictionaryItemFilter) BaseFilter.getFilterFromStack(stack); OreDictFilterReader filterReader = filter.getFilterReader(); + filterReader.readStack(stack); List oreSlots = new ArrayList<>(); var expression = new StringSyncValue(filterReader::getExpression, filterReader::setExpression); @@ -79,7 +80,8 @@ protected ModularPanel createBasePanel(ItemStack stack) { var caseSensitive = new BooleanSyncValue(filterReader::isCaseSensitive, setCaseSensitive); var matchAll = new BooleanSyncValue(filterReader::shouldMatchAll, setMatchAll); - return Flow.column().widthRel(1f).coverChildrenHeight() + return Flow.column().coverChildren() + .name("root.widget.col") .child(new HighlightedTextField() .setHighlightRule(this::highlightRule) .onUnfocus(() -> { @@ -87,17 +89,22 @@ protected ModularPanel createBasePanel(ItemStack stack) { slot.updatePreview(); } }) + .name("oredict.text_field") .setTextColor(Color.WHITE.darker(1)) .value(expression).marginBottom(4) .height(18).widthRel(1f)) .child(Flow.row().coverChildrenHeight() + .name("oredict.info.row") .widthRel(1f) .child(Flow.column().height(18) + .name("oredict.info.status.col") .coverChildrenWidth().marginRight(2) .child(GTGuiTextures.OREDICT_INFO.asWidget() + .name("oredict.info.icon") .size(8).top(0) .addTooltipLine(IKey.lang("cover.ore_dictionary_filter.info"))) .child(new Widget<>() + .name("oredict.status.icon") .size(8).bottom(0) .onUpdateListener(widget -> getStatusIcon(filterReader.getResult(), widget)) .tooltipBuilder(richTooltip -> createStatusTooltip(filterReader.getResult(), @@ -110,10 +117,11 @@ protected ModularPanel createBasePanel(ItemStack stack) { .setGlobSupplier(filterReader::getGlob); slot.setMatchAll(filterReader.shouldMatchAll()); oreSlots.add(slot); - return slot; + return slot.name("oredict.test_slot." + i); }) - .build().marginRight(2)) + .build().name("oredict.test.slot_group").marginRight(2)) .child(new CycleButtonWidget() + .name("oredict.button.case_sensitive") .size(18).value(caseSensitive) .marginRight(2) .stateBackground(0, GTGuiTextures.BUTTON_CASE_SENSITIVE[0]) @@ -123,6 +131,7 @@ protected ModularPanel createBasePanel(ItemStack stack) { .addTooltip(1, IKey.lang("cover.ore_dictionary_filter.button.case_sensitive.enabled"))) .child(new CycleButtonWidget() + .name("oredict.button.match_all") .size(18).value(matchAll) .marginRight(2) .stateBackground(0, GTGuiTextures.BUTTON_MATCH_ALL[0]) diff --git a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java index 75b2e0f2fd0..6197212370b 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java @@ -29,7 +29,8 @@ public class SimpleFluidFilterUIManager extends BaseFilterUIManager { @Override public @NotNull Widget createWidgets(ItemStack stack, PanelSyncManager syncManager) { SimpleFluidFilterReader filterReader = (SimpleFluidFilterReader) getFilterReader(stack); - return Flow.row().coverChildrenHeight().widthRel(1f) + return Flow.row().coverChildren() + .alignX(0f) .child(SlotGroupWidget.builder() .matrix("FFF", "FFF", diff --git a/src/main/java/gregtech/common/items/behaviors/filter/SimpleItemFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/SimpleItemFilterUIManager.java index 917da322061..dcdf19f934d 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SimpleItemFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SimpleItemFilterUIManager.java @@ -3,7 +3,6 @@ import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.api.util.TextFormattingUtil; -import gregtech.common.covers.filter.BaseFilter; import gregtech.common.covers.filter.readers.SimpleItemFilterReader; import net.minecraft.item.ItemStack; @@ -38,8 +37,7 @@ public class SimpleItemFilterUIManager extends BaseFilterUIManager { @SuppressWarnings("UnstableApiUsage") @Override public @NotNull Widget createWidgets(ItemStack stack, PanelSyncManager syncManager) { - SimpleItemFilterReader filterReader = (SimpleItemFilterReader) BaseFilter.getFilterFromStack(stack) - .getFilterReader(); + SimpleItemFilterReader filterReader = (SimpleItemFilterReader) getFilterReader(stack); SlotGroup filterInventory = new SlotGroup("filter_inv", 3, 1000, true); var ignoreDamage = new BooleanSyncValue(filterReader::isIgnoreDamage, filterReader::setIgnoreDamage); var ignoreNBT = new BooleanSyncValue(filterReader::isIgnoreNBT, filterReader::setIgnoreNBT); @@ -47,6 +45,7 @@ public class SimpleItemFilterUIManager extends BaseFilterUIManager { syncManager.registerSlotGroup(filterInventory); return Flow.row().coverChildren() + .alignX(0f) .child(SlotGroupWidget.builder() .matrix("XXX", "XXX", diff --git a/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java index 6e5da62ee84..63d6c7ac008 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java @@ -28,7 +28,8 @@ public class SmartFilterUIManager extends BaseFilterUIManager { @Override public @NotNull ModularPanel createPanel(ItemStack stack, PanelSyncManager syncManager) { - return GTGuis.createPanel("smart_item_filter", 100, 100).padding(7); + return GTGuis.createPanel("smart_item_filter", 100, 100) + .padding(7); } @Override @@ -39,6 +40,7 @@ public class SmartFilterUIManager extends BaseFilterUIManager { syncManager.syncValue("filter_mode", filterMode); return Flow.row().coverChildren() + .alignX(0f) .child(Flow.column().coverChildren().marginRight(4) .child(createFilterModeButton(filterMode, SmartItemFilter.SmartFilteringMode.ELECTROLYZER)) .child(createFilterModeButton(filterMode, SmartItemFilter.SmartFilteringMode.CENTRIFUGE)) From d6b31a1217ceee6cf0108d44c0185c57ee39f945 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Dec 2025 00:58:04 -0700 Subject: [PATCH 14/18] move field declaration out of constructor --- .../gregtech/common/covers/filter/SimpleFluidFilter.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 22e364a215e..0a95aa3f0d4 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -9,11 +9,7 @@ public class SimpleFluidFilter extends BaseFilter { private static final int MAX_FLUID_SLOTS = 9; - private final SimpleFluidFilterReader filterReader; - - public SimpleFluidFilter() { - filterReader = new SimpleFluidFilterReader(MAX_FLUID_SLOTS); - } + private final SimpleFluidFilterReader filterReader = new SimpleFluidFilterReader(MAX_FLUID_SLOTS); @Override public SimpleFluidFilterReader getFilterReader() { From c4df1b58d4d40b97e1d535838cc227375eac8266 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Dec 2025 01:05:02 -0700 Subject: [PATCH 15/18] might as well use optional here too --- .../java/gregtech/common/covers/filter/BaseFilter.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilter.java b/src/main/java/gregtech/common/covers/filter/BaseFilter.java index 3b2990bd060..72ce4d261bc 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilter.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -52,10 +52,9 @@ public final ItemStack getContainerStack() { public static @NotNull BaseFilter getFilterFromStack(ItemStack stack) { if (stack.getItem() instanceof MetaItemmetaItem) { - var metaValueItem = metaItem.getItem(stack); - var filter = metaValueItem == null ? null : metaValueItem.getFilterBehavior(); - if (filter != null) - return filter; + return Optional.ofNullable(metaItem.getItem(stack)) + .map(MetaItem.MetaValueItem::getFilterBehavior) + .orElse(ERROR_FILTER); } return ERROR_FILTER; } From 9ece310c392453a22c47c7f8555fe58a456e0a0e Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Dec 2025 01:09:20 -0700 Subject: [PATCH 16/18] move `updateFilterReader` into base filter don't return null in error filter --- .../gregtech/common/covers/filter/BaseFilter.java | 11 ++++++----- .../common/covers/filter/OreDictionaryItemFilter.java | 5 ----- .../common/covers/filter/SimpleFluidFilter.java | 6 ------ .../common/covers/filter/SimpleItemFilter.java | 5 ----- .../common/covers/filter/SmartItemFilter.java | 5 ----- 5 files changed, 6 insertions(+), 26 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilter.java b/src/main/java/gregtech/common/covers/filter/BaseFilter.java index 72ce4d261bc..9af99867b4f 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilter.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -19,14 +19,13 @@ public abstract class BaseFilter implements IItemComponent { public static final BaseFilter ERROR_FILTER = new BaseFilter() { + private final BaseFilterReader reader = new BaseFilterReader(0); + @Override public BaseFilterReader getFilterReader() { - return null; + return reader; } - @Override - public void updateFilterReader(ItemStack stack) {} - @Override public FilterType getType() { return FilterType.ERROR; @@ -35,7 +34,9 @@ public FilterType getType() { public abstract BaseFilterReader getFilterReader(); - public abstract void updateFilterReader(ItemStack stack); + public final void updateFilterReader(ItemStack stack) { + getFilterReader().readStack(stack); + } public BaseFilterUIManager getUI() { if (getContainerStack().getItem() instanceof MetaItemmetaItem) { diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index ad029d0cc0e..ed0fdd3f918 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -30,11 +30,6 @@ public OreDictFilterReader getFilterReader() { return filterReader; } - @Override - public void updateFilterReader(ItemStack stack) { - this.filterReader.readStack(stack); - } - @NotNull public String getExpression() { return this.filterReader.getExpression(); diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 0a95aa3f0d4..150b1397440 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -2,7 +2,6 @@ import gregtech.common.covers.filter.readers.SimpleFluidFilterReader; -import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; public class SimpleFluidFilter extends BaseFilter { @@ -16,11 +15,6 @@ public SimpleFluidFilterReader getFilterReader() { return filterReader; } - @Override - public void updateFilterReader(ItemStack stack) { - this.filterReader.readStack(stack); - } - public void configureFilterTanks(int amount) { this.filterReader.setFluidAmounts(amount); } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 783b7fdb660..04cc4e8215d 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -15,11 +15,6 @@ public SimpleItemFilterReader getFilterReader() { return filterReader; } - @Override - public void updateFilterReader(ItemStack stack) { - this.filterReader.readStack(stack); - } - @Override public MatchResult matchItem(ItemStack itemStack) { 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 766e913228b..7cdfd2236fc 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -24,11 +24,6 @@ public SmartItemFilterReader getFilterReader() { return filterReader; } - @Override - public void updateFilterReader(ItemStack stack) { - this.filterReader.readStack(stack); - } - public SmartFilteringMode getFilteringMode() { return this.filterReader.getFilteringMode(); } From 6e25e8a39d138f804f66b012efdee3cf9ef1a7aa Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 13 Dec 2025 19:55:38 -0700 Subject: [PATCH 17/18] so it turns out you shouldn't reuse the same filter instance for everything --- .../java/gregtech/common/covers/filter/BaseFilter.java | 8 ++++++++ .../common/covers/filter/OreDictionaryItemFilter.java | 5 +++++ .../gregtech/common/covers/filter/SimpleFluidFilter.java | 5 +++++ .../gregtech/common/covers/filter/SimpleItemFilter.java | 5 +++++ .../gregtech/common/covers/filter/SmartItemFilter.java | 5 +++++ 5 files changed, 28 insertions(+) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilter.java b/src/main/java/gregtech/common/covers/filter/BaseFilter.java index 9af99867b4f..6978b6483e9 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilter.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -26,6 +26,11 @@ public BaseFilterReader getFilterReader() { return reader; } + @Override + public BaseFilter copy() { + return this; + } + @Override public FilterType getType() { return FilterType.ERROR; @@ -34,6 +39,8 @@ public FilterType getType() { public abstract BaseFilterReader getFilterReader(); + public abstract BaseFilter copy(); + public final void updateFilterReader(ItemStack stack) { getFilterReader().readStack(stack); } @@ -55,6 +62,7 @@ public final ItemStack getContainerStack() { if (stack.getItem() instanceof MetaItemmetaItem) { return Optional.ofNullable(metaItem.getItem(stack)) .map(MetaItem.MetaValueItem::getFilterBehavior) + .map(BaseFilter::copy) .orElse(ERROR_FILTER); } return ERROR_FILTER; diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index ed0fdd3f918..921a43efab1 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -113,4 +113,9 @@ public boolean matchesItemStack(@NotNull ItemStack itemStack) { public boolean showGlobalTransferLimitSlider() { return true; } + + @Override + public BaseFilter copy() { + return new OreDictionaryItemFilter(); + } } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 150b1397440..ca2f39bb13b 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -62,4 +62,9 @@ public int getTransferLimit(FluidStack fluidStack, int transferSize) { public FilterType getType() { return FilterType.FLUID; } + + @Override + public BaseFilter copy() { + return new SimpleFluidFilter(); + } } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 04cc4e8215d..247ce93b581 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -48,6 +48,11 @@ public int getTransferLimit(ItemStack stack, int transferSize) { return getTransferLimit(matchedSlot, transferSize); } + @Override + public BaseFilter copy() { + return new SimpleItemFilter(); + } + public static int itemFilterMatch(IItemHandler filterSlots, boolean ignoreDamage, boolean ignoreNBTData, ItemStack itemStack) { for (int i = 0; i < filterSlots.getSlots(); i++) { diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 7cdfd2236fc..59a8d1cab63 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -76,6 +76,11 @@ public boolean showGlobalTransferLimitSlider() { return true; } + @Override + public BaseFilter copy() { + return new SmartItemFilter(); + } + private static class ItemAndMetadataAndStackSize { public final ItemAndMetadata itemAndMetadata; From 09b3069bc36a460ad544763ab91feed7e7dc9a9e Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 21 Dec 2025 19:39:23 -0700 Subject: [PATCH 18/18] delete unused subclass --- .../common/covers/filter/SmartItemFilter.java | 24 ------------------- 1 file changed, 24 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 59a8d1cab63..e9957f011e1 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -81,30 +81,6 @@ public BaseFilter copy() { return new SmartItemFilter(); } - private static class ItemAndMetadataAndStackSize { - - public final ItemAndMetadata itemAndMetadata; - public final int transferStackSize; - - public ItemAndMetadataAndStackSize(ItemAndMetadata itemAndMetadata, int transferStackSize) { - this.itemAndMetadata = itemAndMetadata; - this.transferStackSize = transferStackSize; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof ItemAndMetadataAndStackSize)) return false; - ItemAndMetadataAndStackSize that = (ItemAndMetadataAndStackSize) o; - return itemAndMetadata.equals(that.itemAndMetadata); - } - - @Override - public int hashCode() { - return itemAndMetadata.hashCode(); - } - } - public enum SmartFilteringMode implements IStringSerializable { ELECTROLYZER("cover.smart_item_filter.filtering_mode.electrolyzer", RecipeMaps.ELECTROLYZER_RECIPES),