From 6c8790f4eb9edbe7721cf35ea4667ee1fb5cbb48 Mon Sep 17 00:00:00 2001 From: serenibyss <10861407+serenibyss@users.noreply.github.com> Date: Sun, 17 Dec 2023 23:17:34 -0600 Subject: [PATCH 001/260] start work on controller cover --- src/main/java/gregtech/api/cover/CoverWithUI.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/gregtech/api/cover/CoverWithUI.java b/src/main/java/gregtech/api/cover/CoverWithUI.java index f40f2df37bc..c6ae526eeca 100644 --- a/src/main/java/gregtech/api/cover/CoverWithUI.java +++ b/src/main/java/gregtech/api/cover/CoverWithUI.java @@ -1,5 +1,15 @@ package gregtech.api.cover; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.drawable.ItemDrawable; +import com.cleanroommc.modularui.value.BoolValue; + +import com.cleanroommc.modularui.value.sync.EnumSyncValue; + +import com.cleanroommc.modularui.value.sync.IntSyncValue; +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widgets.layout.Row; + import gregtech.api.gui.IUIHolder; import gregtech.api.gui.ModularUI; import gregtech.api.mui.GTGuiTheme; From 14762f4dd13394f4a7511799e985629f501bac1e Mon Sep 17 00:00:00 2001 From: serenibyss <10861407+serenibyss@users.noreply.github.com> Date: Sun, 17 Dec 2023 23:33:29 -0600 Subject: [PATCH 002/260] cleanup --- src/main/java/gregtech/api/cover/CoverWithUI.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/main/java/gregtech/api/cover/CoverWithUI.java b/src/main/java/gregtech/api/cover/CoverWithUI.java index c6ae526eeca..f40f2df37bc 100644 --- a/src/main/java/gregtech/api/cover/CoverWithUI.java +++ b/src/main/java/gregtech/api/cover/CoverWithUI.java @@ -1,15 +1,5 @@ package gregtech.api.cover; -import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.drawable.ItemDrawable; -import com.cleanroommc.modularui.value.BoolValue; - -import com.cleanroommc.modularui.value.sync.EnumSyncValue; - -import com.cleanroommc.modularui.value.sync.IntSyncValue; -import com.cleanroommc.modularui.widget.ParentWidget; -import com.cleanroommc.modularui.widgets.layout.Row; - import gregtech.api.gui.IUIHolder; import gregtech.api.gui.ModularUI; import gregtech.api.mui.GTGuiTheme; From ed942498018126137fcf92ba036ba716b96131d2 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 26 Dec 2023 17:30:59 -0700 Subject: [PATCH 003/260] add methods in filter fo new MUI deprecate old MUI methods --- .../common/covers/filter/ItemFilter.java | 10 +++++-- .../covers/filter/ItemFilterContainer.java | 30 +++++++++++++++++-- .../covers/filter/ItemFilterWrapper.java | 21 +++++++++++-- .../filter/OreDictionaryItemFilter.java | 14 ++++++--- .../covers/filter/SimpleItemFilter.java | 20 +++++++++++-- .../common/covers/filter/SmartItemFilter.java | 10 +++++-- 6 files changed, 90 insertions(+), 15 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index a5b350da33d..34a11e18edf 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -1,6 +1,7 @@ package gregtech.common.covers.filter; -import gregtech.api.gui.Widget; +import com.cleanroommc.modularui.widget.Widget; + import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; @@ -32,7 +33,12 @@ protected void onMaxStackSizeChange() {} public abstract int getTotalOccupiedHeight(); - public abstract void initUI(Consumer widgetGroup); + /** Deprecated, uses old builtin MUI */ + @Deprecated + public abstract void initUI(Consumer widgetGroup); + + /** Uses Cleanroom MUI */ + public abstract Widget initUI(); public abstract void writeToNBT(NBTTagCompound tagCompound); diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 71be9ff14d3..88338d91823 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -1,7 +1,6 @@ package gregtech.common.covers.filter; import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.Widget; import gregtech.api.gui.widgets.LabelWidget; import gregtech.api.gui.widgets.SlotWidget; import gregtech.api.util.IDirtyNotifiable; @@ -12,6 +11,12 @@ import net.minecraftforge.common.util.INBTSerializable; import net.minecraftforge.items.ItemStackHandler; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.value.sync.SyncHandlers; +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widgets.ItemSlot; +import com.cleanroommc.modularui.widgets.layout.Column; import org.jetbrains.annotations.NotNull; import java.util.function.Consumer; @@ -82,7 +87,8 @@ public void adjustTransferStackSize(int amount) { setTransferStackSize(transferStackSize + amount); } - public void initUI(int y, Consumer widgetGroup) { + /** Deprecated, uses old builtin MUI*/ + public void initUI(int y, Consumer widgetGroup) { widgetGroup.accept(new LabelWidget(10, y, "cover.conveyor.item_filter.title")); widgetGroup.accept(new SlotWidget(filterInventory, 0, 10, y + 15) .setBackgroundTexture(GuiTextures.SLOT, GuiTextures.FILTER_SLOT_OVERLAY)); @@ -91,6 +97,26 @@ public void initUI(int y, Consumer widgetGroup) { this.filterWrapper.blacklistUI(y + 38, widgetGroup, () -> true); } + /** Uses Cleanroom MUI*/ + public ParentWidget initUI(GuiSyncManager syncManager) { + syncManager.registerSlotGroup("filter_slot", 1, 100); + ParentWidget parentWidget = new Column().padding(4) + .child(IKey.lang("cover.conveyor.item_filter.title").asWidget()) + .child(new ItemSlot().slot( + SyncHandlers.itemSlot(filterInventory, 0) + .slotGroup("filter_slot")) + ); + + if (this.filterWrapper.getItemFilter() != null) { + parentWidget + .child(this.filterWrapper.initUI()) + .child(this.filterWrapper.blacklistUI()); + } + + return parentWidget; + + } + protected void onFilterSlotChange(boolean notify) { ItemStack filterStack = filterInventory.getStackInSlot(0); ItemFilter newItemFilter = FilterTypeRegistry.getItemFilterForStack(filterStack); diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java index d11905e00b5..229f5f4093f 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java @@ -1,13 +1,18 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.widget.Widget; + import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.Widget; import gregtech.api.gui.widgets.ServerWidgetGroup; import gregtech.api.gui.widgets.ToggleButtonWidget; import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.value.BoolValue; +import com.cleanroommc.modularui.widgets.CycleButtonWidget; + import java.util.function.BooleanSupplier; import java.util.function.Consumer; @@ -24,11 +29,11 @@ public ItemFilterWrapper(IDirtyNotifiable dirtyNotifiable) { this.dirtyNotifiable = dirtyNotifiable; } - public void initUI(int y, Consumer widgetGroup) { + public void initUI(int y, Consumer widgetGroup) { widgetGroup.accept(new WidgetGroupItemFilter(y, this::getItemFilter)); } - public void blacklistUI(int y, Consumer widgetGroup, BooleanSupplier showBlacklistButton) { + public void blacklistUI(int y, Consumer widgetGroup, BooleanSupplier showBlacklistButton) { ServerWidgetGroup blacklistButton = new ServerWidgetGroup(() -> getItemFilter() != null); blacklistButton.addWidget(new ToggleButtonWidget(144, y, 20, 20, GuiTextures.BUTTON_BLACKLIST, this::isBlacklistFilter, this::setBlacklistFilter).setPredicate(showBlacklistButton) @@ -36,6 +41,16 @@ public void blacklistUI(int y, Consumer widgetGroup, BooleanSupplier sho widgetGroup.accept(blacklistButton); } + public Widget initUI() { + return getItemFilter().initUI(); + } + + public Widget blacklistUI() { + return new CycleButtonWidget().setEnabledIf(row1 -> getItemFilter() != null) + .value(new BoolValue.Dynamic(this::isBlacklistFilter, this::setBlacklistFilter)) + .tooltip(tooltip -> tooltip.addLine(IKey.lang("cover.filter.blacklist"))); + } + public void setItemFilter(ItemFilter itemFilter) { this.currentItemFilter = itemFilter; if (currentItemFilter != null) { diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 1db9a6087e3..f788e287d0a 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -1,7 +1,8 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.widget.Widget; + import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.Widget; import gregtech.api.gui.resources.TextureArea; import gregtech.api.gui.widgets.DrawableWidget; import gregtech.api.gui.widgets.ImageCycleButtonWidget; @@ -81,7 +82,7 @@ protected void clearCache() { } @Override - public void initUI(Consumer widgetGroup) { + public void initUI(Consumer widgetGroup) { ItemOreFilterTestSlot[] testSlot = new ItemOreFilterTestSlot[5]; for (int i = 0; i < testSlot.length; i++) { ItemOreFilterTestSlot slot = new ItemOreFilterTestSlot(20 + 22 * i, 0); @@ -113,10 +114,10 @@ public void initUI(Consumer widgetGroup) { widgetGroup.accept(compilationStatus); widgetGroup.accept(new DrawableWidget(10, 22, 156, 16) .setBackgroundDrawer((mouseX, mouseY, partialTicks, context, widget) -> { - Widget.drawGradientRect(widget.getPosition().x, widget.getPosition().y, + gregtech.api.gui.Widget.drawGradientRect(widget.getPosition().x, widget.getPosition().y, widget.getSize().width, widget.getSize().height, 0xFF808080, 0xFF808080, false); - Widget.drawGradientRect(widget.getPosition().x + 1, widget.getPosition().y + 1, + gregtech.api.gui.Widget.drawGradientRect(widget.getPosition().x + 1, widget.getPosition().y + 1, widget.getSize().width - 2, widget.getSize().height - 2, 0xFF000000, 0xFF000000, false); })); @@ -173,6 +174,11 @@ public void initUI(Consumer widgetGroup) { i -> "cover.ore_dictionary_filter.button.match_all." + (i == 0 ? "disabled" : "enabled"))); } + @Override + public Widget initUI() { + return null; + } + @Override public Object matchItemStack(ItemStack itemStack) { return matchesItemStack(itemStack) ? diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 864986ca805..ca2e5b1327a 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -1,16 +1,24 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.widget.Widget; + import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.Widget; import gregtech.api.gui.widgets.PhantomSlotWidget; import gregtech.api.gui.widgets.ToggleButtonWidget; import gregtech.api.util.LargeStackSizeItemStackHandler; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemStackHandler; +import com.cleanroommc.modularui.api.widget.IWidget; +import com.cleanroommc.modularui.value.sync.SyncHandlers; +import com.cleanroommc.modularui.widgets.ItemSlot; +import com.cleanroommc.modularui.widgets.layout.Grid; + +import java.util.List; import java.util.function.Consumer; public class SimpleItemFilter extends ItemFilter { @@ -87,7 +95,7 @@ public int getTotalOccupiedHeight() { } @Override - public void initUI(Consumer widgetGroup) { + public void initUI(Consumer widgetGroup) { for (int i = 0; i < 9; i++) { widgetGroup.accept(new PhantomSlotWidget(itemFilterSlots, i, 10 + 18 * (i % 3), 18 * (i / 3)) .setBackgroundTexture(GuiTextures.SLOT)); @@ -98,6 +106,14 @@ public void initUI(Consumer widgetGroup) { () -> ignoreNBT, this::setIgnoreNBT).setTooltipText("cover.item_filter.ignore_nbt")); } + @Override + public Widget initUI() { + List matrix = NonNullList.withSize(itemFilterSlots.getSlots(), new ItemSlot()); + return new Grid().matrix(Grid.mapToMatrix(3, matrix, + (index, value) -> value.slot(SyncHandlers.phantomItemSlot(itemFilterSlots, index)) + )); + } + @Override public void writeToNBT(NBTTagCompound tagCompound) { tagCompound.setTag("ItemFilter", itemFilterSlots.serializeNBT()); diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index a655d22f732..038d216f779 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -1,6 +1,7 @@ package gregtech.common.covers.filter; -import gregtech.api.gui.Widget; +import com.cleanroommc.modularui.widget.Widget; + import gregtech.api.gui.widgets.CycleButtonWidget; import gregtech.api.recipes.Recipe; import gregtech.api.recipes.RecipeMap; @@ -66,12 +67,17 @@ public Object matchItemStack(ItemStack itemStack) { } @Override - public void initUI(Consumer widgetGroup) { + public void initUI(Consumer widgetGroup) { widgetGroup.accept(new CycleButtonWidget(10, 0, 75, 20, SmartFilteringMode.class, this::getFilteringMode, this::setFilteringMode) .setTooltipHoverString("cover.smart_item_filter.filtering_mode.description")); } + @Override + public Widget initUI() { + return null; + } + @Override public int getTotalOccupiedHeight() { return 20; From 4f5db2524d45ca63a13751c616c6e943bdb80619 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 26 Dec 2023 17:37:23 -0700 Subject: [PATCH 004/260] start work on conveyor --- .../gregtech/common/covers/CoverConveyor.java | 72 ++++++++++++++++++- 1 file changed, 70 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 1408ae77c56..1be7658158e 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -11,7 +11,15 @@ import gregtech.api.cover.CoverableView; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.ModularUI; -import gregtech.api.gui.widgets.*; +import gregtech.api.gui.widgets.CycleButtonWidget; +import gregtech.api.gui.widgets.ImageCycleButtonWidget; +import gregtech.api.gui.widgets.ImageWidget; +import gregtech.api.gui.widgets.IncrementButtonWidget; +import gregtech.api.gui.widgets.LabelWidget; +import gregtech.api.gui.widgets.TextFieldWidget2; +import gregtech.api.gui.widgets.WidgetGroup; +import gregtech.api.mui.GTGuiTextures; +import gregtech.api.mui.GTGuis; import gregtech.api.util.GTTransferUtils; import gregtech.api.util.ItemStackHashStrategy; import gregtech.client.renderer.texture.Textures; @@ -26,7 +34,12 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.*; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.ITickable; import net.minecraft.util.math.MathHelper; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.fml.relauncher.Side; @@ -39,6 +52,14 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; +import com.cleanroommc.modularui.factory.SidedPosGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.EnumSyncValue; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.value.sync.IntSyncValue; +import com.cleanroommc.modularui.widgets.ButtonWidget; +import com.cleanroommc.modularui.widgets.layout.Row; +import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap; @@ -477,6 +498,53 @@ protected String getUITitle() { return "cover.conveyor.title"; } + @Override + public boolean usesMui2() { + return true; + } + + @Override + public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { + EnumSyncValue manualIOmode = new EnumSyncValue<>(ManualImportExportMode.class, + this::getManualImportExportMode, this::setManualImportExportMode); + + EnumSyncValue conveyorMode = new EnumSyncValue<>(ConveyorMode.class, + this::getConveyorMode, this::setConveyorMode); + + IntSyncValue throughput = new IntSyncValue(this::getTransferRate, this::adjustTransferRate); + + guiSyncManager.syncValue("manual_io", manualIOmode); + guiSyncManager.syncValue("conveyor_mode", conveyorMode); + guiSyncManager.syncValue("transfer_rate", throughput); + + return GTGuis.createPanel(this, 176, 112 + 176) + .padding(4) + .child(createTitleRow()) + .child(new Row().widthRel(1.0f) + .top(16).padding(4) + .coverChildrenHeight() + .child(new ButtonWidget<>() + .width(16) + .onMousePressed(mouseButton -> { + throughput.setValue(getTransferRate() + 1, true, true); + return true; + })) + .child(new TextFieldWidget() + .setMaxLength(4) + .setNumbers(1, maxItemTransferRate) + .background(GTGuiTextures.DISPLAY)) + .child(new ButtonWidget<>() + .width(16) + .onMousePressed(mouseButton -> { + throughput.setValue(getTransferRate() - 1, true, true); + return true; + }))) + .child(getItemFilterContainer() + .initUI(guiSyncManager) + .top(36)) + .bindPlayerInventory(); + } + protected ModularUI buildUI(ModularUI.Builder builder, EntityPlayer player) { return builder.build(this, player); } From 866dc8e3398040d6518a3c0c447ddc70f7ec8bf7 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 27 Dec 2023 14:51:02 -0700 Subject: [PATCH 005/260] the death of ItemFilterWrapper ItemFilterContainer now holds everything update filters to new system more work on conveyors --- .../gregtech/common/covers/CoverConveyor.java | 28 ++-- .../common/covers/CoverItemFilter.java | 9 +- .../covers/CoverItemVoidingAdvanced.java | 12 +- .../common/covers/CoverRoboticArm.java | 8 +- .../common/covers/filter/ItemFilter.java | 47 +++++- .../covers/filter/ItemFilterContainer.java | 149 +++++++++++++----- .../covers/filter/ItemFilterWrapper.java | 113 +++---------- .../filter/OreDictionaryItemFilter.java | 10 +- .../covers/filter/SimpleItemFilter.java | 12 +- .../common/covers/filter/SmartItemFilter.java | 52 ++++-- .../pipelike/itempipe/net/ItemNetHandler.java | 5 +- .../provider/CoverInfoProvider.java | 8 +- 12 files changed, 268 insertions(+), 185 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 1be7658158e..521f1237b77 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -24,6 +24,7 @@ import gregtech.api.util.ItemStackHashStrategy; import gregtech.client.renderer.texture.Textures; import gregtech.client.renderer.texture.cube.SimpleSidedCubeRenderer; +import gregtech.common.covers.filter.ItemFilter; import gregtech.common.covers.filter.ItemFilterContainer; import gregtech.common.pipelike.itempipe.tile.TileEntityItemPipe; @@ -293,8 +294,9 @@ protected int moveInventoryItems(IItemHandler sourceInventory, IItemHandler targ if (itemStack.isEmpty()) { continue; } - Object matchSlotIndex = itemFilterContainer.matchItemStack(itemStack); - if (matchSlotIndex == null || !itemInfos.containsKey(matchSlotIndex)) { + var matchResult = itemFilterContainer.matchItemStack(itemStack); + var matchSlotIndex = matchResult.getData(); + if (!matchResult.matched() || !itemInfos.containsKey(matchSlotIndex)) { continue; } @@ -316,7 +318,7 @@ protected int moveInventoryItems(IItemHandler sourceInventory, IItemHandler targ itemInfo.totalCount -= extractedStack.getCount(); if (itemInfo.totalCount == 0) { - itemInfos.remove(matchSlotIndex); + itemInfos.remove(matchResult); if (itemInfos.isEmpty()) { break; } @@ -362,13 +364,13 @@ protected int moveInventoryItems(IItemHandler sourceInventory, IItemHandler targ protected static class TypeItemInfo { public final ItemStack itemStack; - public final Object filterSlot; + public final int filterSlot; public final IntList slots; public int totalCount; public TypeItemInfo(ItemStack itemStack, Object filterSlot, IntList slots, int totalCount) { this.itemStack = itemStack; - this.filterSlot = filterSlot; + this.filterSlot = (int) filterSlot; this.slots = slots; this.totalCount = totalCount; } @@ -376,11 +378,11 @@ public TypeItemInfo(ItemStack itemStack, Object filterSlot, IntList slots, int t protected static class GroupItemInfo { - public final Object filterSlot; + public final int filterSlot; public final Set itemStackTypes; public int totalCount; - public GroupItemInfo(Object filterSlot, Set itemStackTypes, int totalCount) { + public GroupItemInfo(int filterSlot, Set itemStackTypes, int totalCount) { this.filterSlot = filterSlot; this.itemStackTypes = itemStackTypes; this.totalCount = totalCount; @@ -396,12 +398,13 @@ protected Map countInventoryItemsByType(@NotNull IItemH if (itemStack.isEmpty()) { continue; } - Object transferSlotIndex = itemFilterContainer.matchItemStack(itemStack); - if (transferSlotIndex == null) { + var matchResult = itemFilterContainer.matchItemStack(itemStack); + if (!matchResult.matched()) { continue; } + var data = matchResult.getData(); if (!result.containsKey(itemStack)) { - TypeItemInfo itemInfo = new TypeItemInfo(itemStack.copy(), transferSlotIndex, new IntArrayList(), 0); + TypeItemInfo itemInfo = new TypeItemInfo(itemStack.copy(), data, new IntArrayList(), 0); itemInfo.totalCount += itemStack.getCount(); itemInfo.slots.add(srcIndex); result.put(itemStack.copy(), itemInfo); @@ -422,10 +425,11 @@ protected Map countInventoryItemsByMatchSlot(@NotNull IIt if (itemStack.isEmpty()) { continue; } - Object transferSlotIndex = itemFilterContainer.matchItemStack(itemStack); - if (transferSlotIndex == null) { + var matchResult = itemFilterContainer.matchItemStack(itemStack); + if (!matchResult.matched()) { continue; } + int transferSlotIndex = matchResult.getData(); if (!result.containsKey(transferSlotIndex)) { GroupItemInfo itemInfo = new GroupItemInfo(transferSlotIndex, new ObjectOpenCustomHashSet<>(ItemStackHashStrategy.comparingAllButCount()), 0); diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 656fe17f5d8..f8750d8bca6 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -13,6 +13,7 @@ import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; import gregtech.common.covers.filter.ItemFilter; +import gregtech.common.covers.filter.ItemFilterContainer; import gregtech.common.covers.filter.ItemFilterWrapper; import net.minecraft.entity.player.EntityPlayer; @@ -38,7 +39,7 @@ public class CoverItemFilter extends CoverBase implements CoverWithUI { protected final String titleLocale; protected final SimpleOverlayRenderer texture; - protected final ItemFilterWrapper itemFilter; + protected final ItemFilterContainer itemFilter; protected ItemFilterMode filterMode = ItemFilterMode.FILTER_INSERT; protected ItemHandlerFiltered itemHandler; @@ -48,7 +49,7 @@ public CoverItemFilter(@NotNull CoverDefinition definition, @NotNull CoverableVi super(definition, coverableView, attachedSide); this.titleLocale = titleLocale; this.texture = texture; - this.itemFilter = new ItemFilterWrapper(this); + this.itemFilter = new ItemFilterContainer(this); this.itemFilter.setItemFilter(itemFilter); this.itemFilter.setMaxStackSize(1); } @@ -62,8 +63,8 @@ public ItemFilterMode getFilterMode() { return filterMode; } - public ItemFilterWrapper getItemFilter() { - return this.itemFilter; + public ItemFilter getItemFilter() { + return this.itemFilter.getItemFilter(); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java index 62d2844aaa3..607c3e5df73 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java @@ -56,12 +56,12 @@ protected void voidOverflow(IItemHandler myItemHandler) { for (TypeItemInfo typeItemInfo : itemTypeCount.values()) { int itemToVoidAmount = 0; - if (getItemFilterContainer().getFilterWrapper().getItemFilter() == null) { + if (getItemFilterContainer().getItemFilter() == null) { itemToVoidAmount = typeItemInfo.totalCount - itemFilterContainer.getTransferStackSize(); } else { if (itemFilterContainer.testItemStack(typeItemInfo.itemStack)) { - Object matchedSlot = itemFilterContainer.matchItemStack(typeItemInfo.itemStack); - itemToVoidAmount = typeItemInfo.totalCount - itemFilterContainer.getSlotTransferLimit(matchedSlot); + var matchResult = itemFilterContainer.matchItemStack(typeItemInfo.itemStack); + itemToVoidAmount = typeItemInfo.totalCount - itemFilterContainer.getSlotTransferLimit(matchResult.getData()); } } @@ -123,7 +123,7 @@ public void initFilterUI(int y, Consumer widgetGroup) { .setBackgroundTexture(GuiTextures.SLOT, GuiTextures.FILTER_SLOT_OVERLAY)); ServerWidgetGroup stackSizeGroup = new ServerWidgetGroup( - () -> itemFilterContainer.getFilterWrapper().getItemFilter() == null && + () -> itemFilterContainer.getItemFilter() == null && voidingMode == VoidingMode.VOID_OVERFLOW); stackSizeGroup.addWidget(new ImageWidget(111, 34, 35, 20, GuiTextures.DISPLAY)); @@ -151,9 +151,9 @@ public void initFilterUI(int y, Consumer widgetGroup) { widgetGroup.accept(stackSizeGroup); - this.itemFilterContainer.getFilterWrapper().initUI(y + 38, widgetGroup); + this.itemFilterContainer.initUI(y + 38, widgetGroup); - this.itemFilterContainer.getFilterWrapper().blacklistUI(y + 38, widgetGroup, + this.itemFilterContainer.blacklistUI(y + 38, widgetGroup, () -> voidingMode != VoidingMode.VOID_OVERFLOW); } diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index 902ffcd62f4..4aea26e3857 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -72,10 +72,10 @@ protected int doTransferExact(IItemHandler itemHandler, IItemHandler myItemHandl while (iterator.hasNext()) { TypeItemInfo sourceInfo = sourceItemAmount.get(iterator.next()); int itemAmount = sourceInfo.totalCount; - int itemToMoveAmount = itemFilterContainer.getSlotTransferLimit(sourceInfo.filterSlot); + int itemToMoveAmount = itemFilterContainer.getStackTransferLimit(sourceInfo.itemStack); // if smart item filter - if (itemFilterContainer.getFilterWrapper().getItemFilter() instanceof SmartItemFilter) { + if (itemFilterContainer.getItemFilter() instanceof SmartItemFilter) { if (itemFilterContainer.getTransferStackSize() > 1 && itemToMoveAmount * 2 <= itemAmount) { // get the max we can extract from the item filter variable int maxMultiplier = Math.floorDiv(maxTransferAmount, itemToMoveAmount); @@ -123,10 +123,10 @@ protected int doKeepExact(IItemHandler itemHandler, IItemHandler myItemHandler, while (iterator.hasNext()) { Object filterSlotIndex = iterator.next(); GroupItemInfo sourceInfo = sourceItemAmounts.get(filterSlotIndex); - int itemToKeepAmount = itemFilterContainer.getSlotTransferLimit(sourceInfo.filterSlot); + int itemToKeepAmount = itemFilterContainer.getSlotTransferLimit((Integer) sourceInfo.filterSlot); // only run multiplier for smart item - if (itemFilterContainer.getFilterWrapper().getItemFilter() instanceof SmartItemFilter) { + if (itemFilterContainer.getItemFilter() instanceof SmartItemFilter) { if (itemFilterContainer.getTransferStackSize() > 1 && itemToKeepAmount * 2 <= sourceInfo.totalCount) { // get the max we can keep from the item filter variable int maxMultiplier = Math.floorDiv(sourceInfo.totalCount, itemToKeepAmount); diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index 34a11e18edf..4be28d69160 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -11,6 +11,7 @@ public abstract class ItemFilter { + public static MatchResult EMPTY_MATCH = new MatchResult<>(Match.SUCCEED, -1); private IDirtyNotifiable dirtyNotifiable; private int maxStackSize = Integer.MAX_VALUE; @@ -27,9 +28,15 @@ protected void onMaxStackSizeChange() {} public abstract boolean showGlobalTransferLimitSlider(); - public abstract int getSlotTransferLimit(Object matchSlot, int globalTransferLimit); + public int getSlotTransferLimit(int matchSlot, int globalTransferLimit) { + return 0; + } + + public int getStackTransferLimit(ItemStack stack, int globalTransferLimit) { + return 0; + } - public abstract Object matchItemStack(ItemStack itemStack); + public abstract MatchResult matchItemStack(ItemStack itemStack); public abstract int getTotalOccupiedHeight(); @@ -53,4 +60,40 @@ public final void markDirty() { dirtyNotifiable.markAsDirty(); } } + + public static MatchResult createResult(Match match, R data) { + return new MatchResult<>(match, data); + } + + public static MatchResult createResult(Match match, int data) { + return new MatchResult<>(match, data); + } + + public static class MatchResult { + Match match; + T data; + private MatchResult(Match match, T data) { + this.match = match; + this.data = data; + } + + public T getData() { + return data; + } + + public boolean matched() { + return match == Match.SUCCEED; + } + + public void flipMatch() { + this.match = matched() ? + ItemFilter.Match.FAIL : + ItemFilter.Match.SUCCEED; + } + } + + public enum Match { + FAIL, + SUCCEED + } } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 88338d91823..60179ec86ae 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -1,8 +1,14 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.value.BoolValue; +import com.cleanroommc.modularui.widget.Widget; +import com.cleanroommc.modularui.widgets.CycleButtonWidget; + import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.LabelWidget; +import gregtech.api.gui.widgets.ServerWidgetGroup; import gregtech.api.gui.widgets.SlotWidget; +import gregtech.api.gui.widgets.ToggleButtonWidget; import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; @@ -19,18 +25,24 @@ import com.cleanroommc.modularui.widgets.layout.Column; import org.jetbrains.annotations.NotNull; +import java.util.function.BooleanSupplier; import java.util.function.Consumer; public class ItemFilterContainer implements INBTSerializable { private final ItemStackHandler filterInventory; private final ItemFilterWrapper filterWrapper; + private final IDirtyNotifiable dirtyNotifiable; + private boolean isBlacklistFilter = false; + private int maxStackSize = 1; + private ItemFilter currentItemFilter; + private Runnable onFilterInstanceChange; private int maxStackSizeLimit = 1; private int transferStackSize; public ItemFilterContainer(IDirtyNotifiable dirtyNotifiable) { - this.filterWrapper = new ItemFilterWrapper(dirtyNotifiable); - this.filterWrapper.setOnFilterInstanceChange(this::onFilterInstanceChange); + this.filterWrapper = new ItemFilterWrapper(this); // for compat + this.dirtyNotifiable = dirtyNotifiable; this.filterInventory = new ItemStackHandler(1) { @Override @@ -63,10 +75,6 @@ public ItemFilterWrapper getFilterWrapper() { return filterWrapper; } - private void onFilterInstanceChange() { - this.filterWrapper.setMaxStackSize(getTransferStackSize()); - } - public int getMaxStackSize() { return maxStackSizeLimit; } @@ -80,79 +88,129 @@ public int getTransferStackSize() { public void setTransferStackSize(int transferStackSize) { this.transferStackSize = MathHelper.clamp(transferStackSize, 1, getMaxStackSize()); - this.filterWrapper.setMaxStackSize(getTransferStackSize()); + this.maxStackSize = getTransferStackSize(); + onFilterInstanceChange(); + dirtyNotifiable.markAsDirty(); } public void adjustTransferStackSize(int amount) { setTransferStackSize(transferStackSize + amount); } + public void setBlacklistFilter(boolean blacklistFilter) { + isBlacklistFilter = blacklistFilter; + onFilterInstanceChange(); + dirtyNotifiable.markAsDirty(); + } + + public boolean isBlacklistFilter() { + return isBlacklistFilter; + } + /** Deprecated, uses old builtin MUI*/ public void initUI(int y, Consumer widgetGroup) { widgetGroup.accept(new LabelWidget(10, y, "cover.conveyor.item_filter.title")); widgetGroup.accept(new SlotWidget(filterInventory, 0, 10, y + 15) .setBackgroundTexture(GuiTextures.SLOT, GuiTextures.FILTER_SLOT_OVERLAY)); - this.filterWrapper.initUI(y + 38, widgetGroup); - this.filterWrapper.blacklistUI(y + 38, widgetGroup, () -> true); + this.initFilterUI(y + 38, widgetGroup); + this.blacklistUI(y + 38, widgetGroup, () -> true); + } + + public void initFilterUI(int y, Consumer widgetGroup) { + widgetGroup.accept(new WidgetGroupItemFilter(y, this::getItemFilter)); + } + + public void blacklistUI(int y, Consumer widgetGroup, BooleanSupplier showBlacklistButton) { + ServerWidgetGroup blacklistButton = new ServerWidgetGroup(() -> getItemFilter() != null); + blacklistButton.addWidget(new ToggleButtonWidget(144, y, 20, 20, GuiTextures.BUTTON_BLACKLIST, + this::isBlacklistFilter, this::setBlacklistFilter).setPredicate(showBlacklistButton) + .setTooltipText("cover.filter.blacklist")); + widgetGroup.accept(blacklistButton); } /** Uses Cleanroom MUI*/ public ParentWidget initUI(GuiSyncManager syncManager) { syncManager.registerSlotGroup("filter_slot", 1, 100); - ParentWidget parentWidget = new Column().padding(4) + + return new Column().padding(4).left(5).coverChildrenWidth() .child(IKey.lang("cover.conveyor.item_filter.title").asWidget()) .child(new ItemSlot().slot( SyncHandlers.itemSlot(filterInventory, 0) - .slotGroup("filter_slot")) - ); - - if (this.filterWrapper.getItemFilter() != null) { - parentWidget - .child(this.filterWrapper.initUI()) - .child(this.filterWrapper.blacklistUI()); - } - - return parentWidget; - + .slotGroup("filter_slot"))) + .childIf(this::hasItemFilter, () -> getItemFilter().initUI().setEnabledIf(w -> hasItemFilter())) + .childIf(this::hasItemFilter, () -> new CycleButtonWidget().setEnabledIf(w -> hasItemFilter()) + .value(new BoolValue.Dynamic(this::isBlacklistFilter, this::setBlacklistFilter)) + .tooltip(tooltip -> tooltip.addLine(IKey.lang("cover.filter.blacklist")))); } protected void onFilterSlotChange(boolean notify) { ItemStack filterStack = filterInventory.getStackInSlot(0); ItemFilter newItemFilter = FilterTypeRegistry.getItemFilterForStack(filterStack); - ItemFilter currentItemFilter = filterWrapper.getItemFilter(); + ItemFilter currentItemFilter = getItemFilter(); if (newItemFilter == null) { - if (currentItemFilter != null) { - filterWrapper.setItemFilter(null); - filterWrapper.setBlacklistFilter(false); - if (notify) filterWrapper.onFilterInstanceChange(); + if (hasItemFilter()) { + setItemFilter(null); + setBlacklistFilter(false); + if (notify) onFilterInstanceChange(); } } else if (currentItemFilter == null || newItemFilter.getClass() != currentItemFilter.getClass()) { - filterWrapper.setItemFilter(newItemFilter); - if (notify) filterWrapper.onFilterInstanceChange(); + setItemFilter(newItemFilter); + if (notify) onFilterInstanceChange(); } } + public void setOnFilterInstanceChange(Runnable onFilterInstanceChange) { + this.onFilterInstanceChange = onFilterInstanceChange; + } + + public void onFilterInstanceChange() { + this.maxStackSize = isBlacklistFilter ? 1 : getMaxStackSize(); + if (currentItemFilter != null) { + currentItemFilter.setMaxStackSize(getMaxStackSize()); + } + dirtyNotifiable.markAsDirty(); + } + public void setMaxStackSize(int maxStackSizeLimit) { this.maxStackSizeLimit = maxStackSizeLimit; setTransferStackSize(transferStackSize); } public boolean showGlobalTransferLimitSlider() { - return getMaxStackSize() > 1 && filterWrapper.showGlobalTransferLimitSlider(); + return getMaxStackSize() > 1 && (isBlacklistFilter() || !hasItemFilter()|| currentItemFilter.showGlobalTransferLimitSlider()); } - public int getSlotTransferLimit(Object slotIndex) { - return filterWrapper.getSlotTransferLimit(slotIndex, getTransferStackSize()); + public int getSlotTransferLimit(int slotIndex) { + if (isBlacklistFilter() || currentItemFilter == null) { + return getTransferStackSize(); + } + return currentItemFilter.getSlotTransferLimit(slotIndex, getTransferStackSize()); } - public Object matchItemStack(ItemStack itemStack) { - return filterWrapper.matchItemStack(itemStack); + public int getStackTransferLimit(ItemStack stack) { + if (isBlacklistFilter() || currentItemFilter == null) { + return getTransferStackSize(); + } + return currentItemFilter.getStackTransferLimit(stack, getTransferStackSize()); } - public Object matchItemStack(ItemStack itemStack, boolean whitelist) { - return filterWrapper.matchItemStack(itemStack, whitelist); + public ItemFilter.MatchResult matchItemStack(ItemStack itemStack) { + return matchItemStack(itemStack, !isBlacklistFilter()); + } + + public ItemFilter.MatchResult matchItemStack(ItemStack itemStack, boolean whitelist) { + ItemFilter.MatchResult originalResult; + if (currentItemFilter == null) { + originalResult = ItemFilter.EMPTY_MATCH; + } else { + originalResult = currentItemFilter.matchItemStack(itemStack); + } + if (!whitelist) { + originalResult.flipMatch(); + } + return originalResult; } public boolean testItemStack(ItemStack itemStack) { @@ -160,7 +218,26 @@ public boolean testItemStack(ItemStack itemStack) { } public boolean testItemStack(ItemStack itemStack, boolean whitelist) { - return matchItemStack(itemStack, whitelist) != null; + return matchItemStack(itemStack, whitelist).matched(); + } + + + public void setItemFilter(ItemFilter itemFilter) { + this.currentItemFilter = itemFilter; + if (currentItemFilter != null) { + currentItemFilter.setDirtyNotifiable(dirtyNotifiable); + } + if (onFilterInstanceChange != null) { + this.onFilterInstanceChange.run(); + } + } + + public ItemFilter getItemFilter() { + return currentItemFilter; + } + + public boolean hasItemFilter() { + return currentItemFilter != null; } @Override diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java index 229f5f4093f..f3607c64357 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java @@ -1,32 +1,19 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.widget.Widget; - import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.ServerWidgetGroup; import gregtech.api.gui.widgets.ToggleButtonWidget; -import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; -import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.value.BoolValue; -import com.cleanroommc.modularui.widgets.CycleButtonWidget; - import java.util.function.BooleanSupplier; import java.util.function.Consumer; public class ItemFilterWrapper { + private ItemFilterContainer container; - private static final Object MATCH_RESULT_TRUE = new Object(); - private final IDirtyNotifiable dirtyNotifiable; - private boolean isBlacklistFilter = false; - private int maxStackSize = 1; - private ItemFilter currentItemFilter; - private Runnable onFilterInstanceChange; - - public ItemFilterWrapper(IDirtyNotifiable dirtyNotifiable) { - this.dirtyNotifiable = dirtyNotifiable; + public ItemFilterWrapper(ItemFilterContainer container) { + this.container = container; } public void initUI(int y, Consumer widgetGroup) { @@ -41,107 +28,55 @@ public void blacklistUI(int y, Consumer widgetGroup, Bo widgetGroup.accept(blacklistButton); } - public Widget initUI() { - return getItemFilter().initUI(); - } - - public Widget blacklistUI() { - return new CycleButtonWidget().setEnabledIf(row1 -> getItemFilter() != null) - .value(new BoolValue.Dynamic(this::isBlacklistFilter, this::setBlacklistFilter)) - .tooltip(tooltip -> tooltip.addLine(IKey.lang("cover.filter.blacklist"))); - } - public void setItemFilter(ItemFilter itemFilter) { - this.currentItemFilter = itemFilter; - if (currentItemFilter != null) { - currentItemFilter.setDirtyNotifiable(dirtyNotifiable); - } - if (onFilterInstanceChange != null) { - this.onFilterInstanceChange.run(); - } + container.setItemFilter(itemFilter); } public ItemFilter getItemFilter() { - return currentItemFilter; + return container.getItemFilter(); } public void setOnFilterInstanceChange(Runnable onFilterInstanceChange) { - this.onFilterInstanceChange = onFilterInstanceChange; + this.container.setOnFilterInstanceChange(onFilterInstanceChange); } public void onFilterInstanceChange() { - if (currentItemFilter != null) { - currentItemFilter.setMaxStackSize(getInternalMaxStackSize()); - } - dirtyNotifiable.markAsDirty(); + this.container.onFilterInstanceChange(); } public void setMaxStackSize(int maxStackSize) { - this.maxStackSize = maxStackSize; - onFilterInstanceChange(); - dirtyNotifiable.markAsDirty(); + container.setMaxStackSize(maxStackSize); } public void setBlacklistFilter(boolean blacklistFilter) { - isBlacklistFilter = blacklistFilter; - onFilterInstanceChange(); - dirtyNotifiable.markAsDirty(); + container.setBlacklistFilter(blacklistFilter); } public boolean isBlacklistFilter() { - return isBlacklistFilter; + return container.isBlacklistFilter(); } public int getMaxStackSize() { - return maxStackSize; + return container.getMaxStackSize(); } - private int getInternalMaxStackSize() { - if (isBlacklistFilter()) { - return 1; - } else { - return getMaxStackSize(); - } + public boolean showGlobalTransferLimitSlider() { + return container.showGlobalTransferLimitSlider(); } - public boolean showGlobalTransferLimitSlider() { - return isBlacklistFilter() || currentItemFilter == null || currentItemFilter.showGlobalTransferLimitSlider(); - } - - public int getSlotTransferLimit(Object matchSlot, int globalTransferLimit) { - if (isBlacklistFilter() || currentItemFilter == null) { - return globalTransferLimit; - } - return currentItemFilter.getSlotTransferLimit(matchSlot, globalTransferLimit); - } - - public Object matchItemStack(ItemStack itemStack) { - Object originalResult; - if (currentItemFilter == null) { - originalResult = MATCH_RESULT_TRUE; - } else { - originalResult = currentItemFilter.matchItemStack(itemStack); - } - if (isBlacklistFilter()) { - originalResult = originalResult == null ? MATCH_RESULT_TRUE : null; - } - return originalResult; - } - - public Object matchItemStack(ItemStack itemStack, boolean whitelist) { - Object originalResult; - if (currentItemFilter == null) { - originalResult = MATCH_RESULT_TRUE; - } else { - originalResult = currentItemFilter.matchItemStack(itemStack); - } - if (!whitelist) { - originalResult = originalResult == null ? MATCH_RESULT_TRUE : null; - } - return originalResult; + public int getSlotTransferLimit(int matchSlot, int globalTransferLimit) { + return container.getSlotTransferLimit(matchSlot); + } + + public ItemFilter.MatchResult matchItemStack(ItemStack itemStack) { + return container.matchItemStack(itemStack); + } + + public ItemFilter.MatchResult matchItemStack(ItemStack itemStack, boolean whitelist) { + return container.matchItemStack(itemStack, whitelist); } public boolean testItemStack(ItemStack itemStack) { - return matchItemStack(itemStack) != null; + return container.testItemStack(itemStack); } } diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index f788e287d0a..c7801922ce4 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -180,9 +180,11 @@ public Widget initUI() { } @Override - public Object matchItemStack(ItemStack itemStack) { - return matchesItemStack(itemStack) ? - "wtf is this system?? i can put any non null object here and it i will work??? $arch" : null; + public MatchResult matchItemStack(ItemStack itemStack) { + // "wtf is this system?? i can put any non null object here and it i will work??? $arch" + // not anymore :thanosdaddy: -ghzdude + var match = matchesItemStack(itemStack) ? Match.SUCCEED : Match.FAIL; + return ItemFilter.createResult(match, -1); } public boolean matchesItemStack(@NotNull ItemStack itemStack) { @@ -229,7 +231,7 @@ public boolean matchesItemStack(@NotNull ItemStack itemStack) { } @Override - public int getSlotTransferLimit(Object matchSlot, int globalTransferLimit) { + public int getSlotTransferLimit(int matchSlot, int globalTransferLimit) { return globalTransferLimit; } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index ca2e5b1327a..7973b98cf3d 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -72,15 +72,14 @@ protected void setIgnoreNBT(boolean ignoreNBT) { } @Override - public Integer matchItemStack(ItemStack itemStack) { + public MatchResult matchItemStack(ItemStack itemStack) { int itemFilterMatchIndex = itemFilterMatch(getItemFilterSlots(), isIgnoreDamage(), isIgnoreNBT(), itemStack); - return itemFilterMatchIndex == -1 ? null : itemFilterMatchIndex; + return ItemFilter.createResult(itemFilterMatchIndex == -1 ? Match.FAIL : Match.SUCCEED, itemFilterMatchIndex); } @Override - public int getSlotTransferLimit(Object matchSlot, int globalTransferLimit) { - Integer matchSlotIndex = (Integer) matchSlot; - ItemStack stackInFilterSlot = itemFilterSlots.getStackInSlot(matchSlotIndex); + public int getSlotTransferLimit(int matchSlot, int globalTransferLimit) { + ItemStack stackInFilterSlot = itemFilterSlots.getStackInSlot(matchSlot); return Math.min(stackInFilterSlot.getCount(), globalTransferLimit); } @@ -110,7 +109,8 @@ public void initUI(Consumer widgetGroup) { public Widget initUI() { List matrix = NonNullList.withSize(itemFilterSlots.getSlots(), new ItemSlot()); return new Grid().matrix(Grid.mapToMatrix(3, matrix, - (index, value) -> value.slot(SyncHandlers.phantomItemSlot(itemFilterSlots, index)) + (index, value) -> value.slot(SyncHandlers.phantomItemSlot(itemFilterSlots, index) + .slotGroup("filter_slots")).size(16, 16) )); } diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 038d216f779..20efd9b0911 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -34,18 +34,12 @@ public void setFilteringMode(SmartFilteringMode filteringMode) { } @Override - public int getSlotTransferLimit(Object matchSlot, int globalTransferLimit) { - ItemAndMetadataAndStackSize itemAndMetadata = (ItemAndMetadataAndStackSize) matchSlot; - return itemAndMetadata.transferStackSize; - } - - @Override - public Object matchItemStack(ItemStack itemStack) { - ItemAndMetadata itemAndMetadata = new ItemAndMetadata(itemStack); - Integer cachedTransferRateValue = filteringMode.transferStackSizesCache.get(itemAndMetadata); + public int getStackTransferLimit(ItemStack stack, int globalTransferLimit) { + ItemAndMetadata itemAndMetadata = new ItemAndMetadata(stack); + int cachedTransferRateValue = filteringMode.transferStackSizesCache.getOrDefault(itemAndMetadata, -1); - if (cachedTransferRateValue == null) { - ItemStack infinitelyBigStack = itemStack.copy(); + if (cachedTransferRateValue == -1) { + ItemStack infinitelyBigStack = stack.copy(); infinitelyBigStack.setCount(Integer.MAX_VALUE); Recipe recipe = filteringMode.recipeMap.findRecipe(Long.MAX_VALUE, @@ -60,10 +54,36 @@ public Object matchItemStack(ItemStack itemStack) { } } - if (cachedTransferRateValue == 0) { - return null; - } - return new ItemAndMetadataAndStackSize(itemAndMetadata, cachedTransferRateValue); + return cachedTransferRateValue; + } + + @Override + public MatchResult matchItemStack(ItemStack itemStack) { +// ItemAndMetadata itemAndMetadata = new ItemAndMetadata(itemStack); +// Integer cachedTransferRateValue = filteringMode.transferStackSizesCache.getInt(itemAndMetadata); +// +// if (cachedTransferRateValue == null) { +// ItemStack infinitelyBigStack = itemStack.copy(); +// infinitelyBigStack.setCount(Integer.MAX_VALUE); +// +// Recipe recipe = filteringMode.recipeMap.findRecipe(Long.MAX_VALUE, +// Collections.singletonList(infinitelyBigStack), Collections.emptyList()); +// if (recipe == null) { +// filteringMode.transferStackSizesCache.put(itemAndMetadata, 0); +// cachedTransferRateValue = 0; +// } else { +// GTRecipeInput inputIngredient = recipe.getInputs().iterator().next(); +// filteringMode.transferStackSizesCache.put(itemAndMetadata, inputIngredient.getAmount()); +// cachedTransferRateValue = inputIngredient.getAmount(); +// } +// } +// +// if (cachedTransferRateValue == 0) { +// return Match.FAIL; +// } + int data = getStackTransferLimit(itemStack, Integer.MAX_VALUE); + var match = data > 0 ? Match.SUCCEED : Match.FAIL; + return ItemFilter.createResult(match, data); } @Override @@ -128,7 +148,7 @@ public enum SmartFilteringMode implements IStringSerializable { CENTRIFUGE("cover.smart_item_filter.filtering_mode.centrifuge", RecipeMaps.CENTRIFUGE_RECIPES), SIFTER("cover.smart_item_filter.filtering_mode.sifter", RecipeMaps.SIFTER_RECIPES); - private final Map transferStackSizesCache = new Object2IntOpenHashMap<>(); + private final Object2IntOpenHashMap transferStackSizesCache = new Object2IntOpenHashMap<>(); public final String localeName; public final RecipeMap recipeMap; diff --git a/src/main/java/gregtech/common/pipelike/itempipe/net/ItemNetHandler.java b/src/main/java/gregtech/common/pipelike/itempipe/net/ItemNetHandler.java index a2313f82398..ef0539c6d3d 100644 --- a/src/main/java/gregtech/common/pipelike/itempipe/net/ItemNetHandler.java +++ b/src/main/java/gregtech/common/pipelike/itempipe/net/ItemNetHandler.java @@ -366,8 +366,9 @@ public ItemStack insertOverRobotArm(IItemHandler handler, CoverRoboticArm arm, I int allowed, boolean ignoreLimit) { int rate; boolean isStackSpecific = false; - Object index = arm.getItemFilterContainer().matchItemStack(stack); - if (index instanceof Integer) { + var matchResult = arm.getItemFilterContainer().matchItemStack(stack); + int index = matchResult.getData(); + if (index > 0) { rate = arm.getItemFilterContainer().getSlotTransferLimit(index); isStackSpecific = true; } else diff --git a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java index 6656fcc9d7e..51d340950d7 100644 --- a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java +++ b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java @@ -70,9 +70,9 @@ private static void conveyorInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverCo ItemFilterContainer filter = conveyor.getItemFilterContainer(); if (conveyor instanceof CoverRoboticArm roboticArm) { transferModeText(probeInfo, roboticArm.getTransferMode(), rateUnit, filter.getTransferStackSize(), - filter.getFilterWrapper().getItemFilter() != null); + filter.getItemFilter() != null); } - itemFilterText(probeInfo, filter.getFilterWrapper().getItemFilter()); + itemFilterText(probeInfo, filter.getItemFilter()); } /** @@ -88,7 +88,7 @@ private static void itemVoidingInfo(@NotNull IProbeInfo probeInfo, @NotNull Cove if (voiding instanceof CoverItemVoidingAdvanced advanced) { VoidingMode mode = advanced.getVoidingMode(); voidingText(probeInfo, mode, unit, container.getTransferStackSize(), - container.getFilterWrapper().getItemFilter() != null); + container.getItemFilter() != null); } } @@ -147,7 +147,7 @@ private static void fluidVoidingInfo(@NotNull IProbeInfo probeInfo, @NotNull Cov */ private static void itemFilterInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverItemFilter itemFilter) { filterModeText(probeInfo, itemFilter.getFilterMode()); - itemFilterText(probeInfo, itemFilter.getItemFilter().getItemFilter()); + itemFilterText(probeInfo, itemFilter.getItemFilter()); } /** From e9a209529688e3a8e7ec33758bc95be9eeb4f2bc Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 29 Dec 2023 20:40:08 -0700 Subject: [PATCH 006/260] more work on filters --- .../common/covers/filter/ItemFilter.java | 14 ++++- .../covers/filter/ItemFilterContainer.java | 51 +++++++++++-------- .../filter/OreDictionaryItemFilter.java | 5 +- .../covers/filter/SimpleItemFilter.java | 38 ++++++++++---- .../common/covers/filter/SmartItemFilter.java | 9 ++-- 5 files changed, 78 insertions(+), 39 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index 4be28d69160..840a334961b 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -1,5 +1,6 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.widget.Widget; import gregtech.api.util.IDirtyNotifiable; @@ -7,6 +8,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import org.jetbrains.annotations.NotNull; + import java.util.function.Consumer; public abstract class ItemFilter { @@ -14,6 +17,7 @@ public abstract class ItemFilter { public static MatchResult EMPTY_MATCH = new MatchResult<>(Match.SUCCEED, -1); private IDirtyNotifiable dirtyNotifiable; private int maxStackSize = Integer.MAX_VALUE; + protected boolean isBlacklistFilter = false; public final int getMaxStackSize() { return maxStackSize; @@ -45,7 +49,7 @@ public int getStackTransferLimit(ItemStack stack, int globalTransferLimit) { public abstract void initUI(Consumer widgetGroup); /** Uses Cleanroom MUI */ - public abstract Widget initUI(); + public abstract @NotNull Widget initUI(GuiSyncManager manager); public abstract void writeToNBT(NBTTagCompound tagCompound); @@ -60,6 +64,14 @@ public final void markDirty() { dirtyNotifiable.markAsDirty(); } } + public final void setBlacklistFilter(boolean blacklistFilter) { + isBlacklistFilter = blacklistFilter; + markDirty(); + } + + public final boolean isBlacklistFilter() { + return isBlacklistFilter; + } public static MatchResult createResult(Match match, R data) { return new MatchResult<>(match, data); diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 60179ec86ae..d6780c41f8a 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -1,9 +1,5 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.value.BoolValue; -import com.cleanroommc.modularui.widget.Widget; -import com.cleanroommc.modularui.widgets.CycleButtonWidget; - import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.LabelWidget; import gregtech.api.gui.widgets.ServerWidgetGroup; @@ -18,9 +14,13 @@ import net.minecraftforge.items.ItemStackHandler; import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.screen.ModularScreen; +import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.SyncHandlers; import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widgets.ButtonWidget; import com.cleanroommc.modularui.widgets.ItemSlot; import com.cleanroommc.modularui.widgets.layout.Column; import org.jetbrains.annotations.NotNull; @@ -33,11 +33,9 @@ public class ItemFilterContainer implements INBTSerializable { private final ItemStackHandler filterInventory; private final ItemFilterWrapper filterWrapper; private final IDirtyNotifiable dirtyNotifiable; - private boolean isBlacklistFilter = false; private int maxStackSize = 1; private ItemFilter currentItemFilter; private Runnable onFilterInstanceChange; - private int maxStackSizeLimit = 1; private int transferStackSize; public ItemFilterContainer(IDirtyNotifiable dirtyNotifiable) { @@ -76,7 +74,7 @@ public ItemFilterWrapper getFilterWrapper() { } public int getMaxStackSize() { - return maxStackSizeLimit; + return maxStackSize; } public int getTransferStackSize() { @@ -98,13 +96,12 @@ public void adjustTransferStackSize(int amount) { } public void setBlacklistFilter(boolean blacklistFilter) { - isBlacklistFilter = blacklistFilter; + if (hasItemFilter()) getItemFilter().setBlacklistFilter(blacklistFilter); onFilterInstanceChange(); - dirtyNotifiable.markAsDirty(); } public boolean isBlacklistFilter() { - return isBlacklistFilter; + return hasItemFilter() && getItemFilter().isBlacklistFilter(); } /** Deprecated, uses old builtin MUI*/ @@ -132,16 +129,26 @@ public void blacklistUI(int y, Consumer widgetGroup, Bo /** Uses Cleanroom MUI*/ public ParentWidget initUI(GuiSyncManager syncManager) { syncManager.registerSlotGroup("filter_slot", 1, 100); + var column = new Column().padding(4).left(5).top(32); + column.child(IKey.lang("cover.conveyor.item_filter.title").asWidget()) + .child(new ItemSlot() + .slot(SyncHandlers.itemSlot(filterInventory, 0) + .slotGroup("filter_slot") + .filter(is -> FilterTypeRegistry.getItemFilterForStack(is) != null)) + .size(16, 16)) + .childIf(this::hasItemFilter, new ButtonWidget<>().setEnabledIf(w -> hasItemFilter()) + .onMousePressed(mouseButton -> createFilterPanel(syncManager, column.getScreen()))); + return column; + } - return new Column().padding(4).left(5).coverChildrenWidth() - .child(IKey.lang("cover.conveyor.item_filter.title").asWidget()) - .child(new ItemSlot().slot( - SyncHandlers.itemSlot(filterInventory, 0) - .slotGroup("filter_slot"))) - .childIf(this::hasItemFilter, () -> getItemFilter().initUI().setEnabledIf(w -> hasItemFilter())) - .childIf(this::hasItemFilter, () -> new CycleButtonWidget().setEnabledIf(w -> hasItemFilter()) - .value(new BoolValue.Dynamic(this::isBlacklistFilter, this::setBlacklistFilter)) - .tooltip(tooltip -> tooltip.addLine(IKey.lang("cover.filter.blacklist")))); + private boolean createFilterPanel(GuiSyncManager syncManager, ModularScreen screen) { + var panel = new ModularPanel("filter_window") + .align(Alignment.Center) + .child(getItemFilter().initUI(syncManager)); + if (!screen.isPanelOpen("filter_window")){ + screen.openPanel(panel); + } + return true; } protected void onFilterSlotChange(boolean notify) { @@ -166,7 +173,7 @@ public void setOnFilterInstanceChange(Runnable onFilterInstanceChange) { } public void onFilterInstanceChange() { - this.maxStackSize = isBlacklistFilter ? 1 : getMaxStackSize(); + this.maxStackSize = isBlacklistFilter() ? 1 : getMaxStackSize(); if (currentItemFilter != null) { currentItemFilter.setMaxStackSize(getMaxStackSize()); } @@ -174,7 +181,7 @@ public void onFilterInstanceChange() { } public void setMaxStackSize(int maxStackSizeLimit) { - this.maxStackSizeLimit = maxStackSizeLimit; + this.maxStackSize = maxStackSizeLimit; setTransferStackSize(transferStackSize); } @@ -245,7 +252,7 @@ public NBTTagCompound serializeNBT() { NBTTagCompound tagCompound = new NBTTagCompound(); tagCompound.setTag("FilterInventory", filterInventory.serializeNBT()); tagCompound.setBoolean("IsBlacklist", filterWrapper.isBlacklistFilter()); - tagCompound.setInteger("MaxStackSize", maxStackSizeLimit); + tagCompound.setInteger("MaxStackSize", maxStackSize); tagCompound.setInteger("TransferStackSize", transferStackSize); if (filterWrapper.getItemFilter() != null) { NBTTagCompound filterInventory = new NBTTagCompound(); diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index c7801922ce4..2b5c48f5882 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -1,5 +1,6 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.widget.Widget; import gregtech.api.gui.GuiTextures; @@ -175,8 +176,8 @@ public void initUI(Consumer widgetGroup) { } @Override - public Widget initUI() { - return null; + public @NotNull Widget initUI(GuiSyncManager syncManager) { + return new Widget<>(); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 7973b98cf3d..9f5ec899885 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -1,7 +1,5 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.widget.Widget; - import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.PhantomSlotWidget; import gregtech.api.gui.widgets.ToggleButtonWidget; @@ -9,15 +7,23 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.NonNullList; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemStackHandler; +import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.api.widget.IWidget; +import com.cleanroommc.modularui.utils.Alignment; +import com.cleanroommc.modularui.value.BoolValue; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.SyncHandlers; +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widgets.CycleButtonWidget; import com.cleanroommc.modularui.widgets.ItemSlot; import com.cleanroommc.modularui.widgets.layout.Grid; +import com.cleanroommc.modularui.widgets.layout.Row; +import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; @@ -106,12 +112,26 @@ public void initUI(Consumer widgetGroup) { } @Override - public Widget initUI() { - List matrix = NonNullList.withSize(itemFilterSlots.getSlots(), new ItemSlot()); - return new Grid().matrix(Grid.mapToMatrix(3, matrix, - (index, value) -> value.slot(SyncHandlers.phantomItemSlot(itemFilterSlots, index) - .slotGroup("filter_slots")).size(16, 16) - )); + public @NotNull ParentWidget initUI(GuiSyncManager manager) { + List> widgets = new ArrayList<>(); + for (int i = 0; i < 3; i++) { + widgets.add(new ArrayList<>()); + for (int j = 0; j < 3; j++) { + widgets.get(i).add(new ItemSlot().slot(SyncHandlers.phantomItemSlot(getItemFilterSlots(), i) + .slotGroup("filter_inv") + )); + } + } + + return new Row().coverChildren() + .align(Alignment.TopCenter) + .child(new Grid() + .minElementMargin(0, 0) + .minColWidth(18).minRowHeight(18) + .matrix(widgets)) + .child(new CycleButtonWidget() + .value(new BoolValue.Dynamic(this::isBlacklistFilter, this::setBlacklistFilter)) + .tooltip(tooltip -> tooltip.addLine(IKey.lang("cover.filter.blacklist")))); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 20efd9b0911..22ae8763461 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -1,7 +1,5 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.widget.Widget; - import gregtech.api.gui.widgets.CycleButtonWidget; import gregtech.api.recipes.Recipe; import gregtech.api.recipes.RecipeMap; @@ -13,11 +11,12 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.IStringSerializable; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.widget.Widget; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import org.jetbrains.annotations.NotNull; import java.util.Collections; -import java.util.Map; import java.util.function.Consumer; public class SmartItemFilter extends ItemFilter { @@ -94,8 +93,8 @@ public void initUI(Consumer widgetGroup) { } @Override - public Widget initUI() { - return null; + public @NotNull Widget initUI(GuiSyncManager manager) { + return new Widget<>(); } @Override From 2f58f284421149868748affea5a0d8d2f3f608c3 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 30 Dec 2023 00:25:30 -0700 Subject: [PATCH 007/260] more work on filters day 2 --- .../gregtech/common/covers/CoverConveyor.java | 13 ++++---- .../covers/filter/ItemFilterContainer.java | 17 ++++++----- .../filter/OreDictionaryItemFilter.java | 2 +- .../covers/filter/SimpleItemFilter.java | 30 ++++++++++++++----- .../common/covers/filter/SmartItemFilter.java | 3 +- 5 files changed, 43 insertions(+), 22 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 521f1237b77..d91bfaadd23 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -521,32 +521,35 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag guiSyncManager.syncValue("conveyor_mode", conveyorMode); guiSyncManager.syncValue("transfer_rate", throughput); - return GTGuis.createPanel(this, 176, 112 + 176) - .padding(4) + var panel = GTGuis.createPanel(this, 176, 112 + 176); + + panel.padding(4) .child(createTitleRow()) - .child(new Row().widthRel(1.0f) + .child(new Row() .top(16).padding(4) .coverChildrenHeight() .child(new ButtonWidget<>() .width(16) .onMousePressed(mouseButton -> { - throughput.setValue(getTransferRate() + 1, true, true); + throughput.setValue(throughput.getValue() + 1, true, true); return true; })) .child(new TextFieldWidget() .setMaxLength(4) + .widthRel(1.0f) .setNumbers(1, maxItemTransferRate) .background(GTGuiTextures.DISPLAY)) .child(new ButtonWidget<>() .width(16) .onMousePressed(mouseButton -> { - throughput.setValue(getTransferRate() - 1, true, true); + throughput.setValue(throughput.getValue() - 1, true, true); return true; }))) .child(getItemFilterContainer() .initUI(guiSyncManager) .top(36)) .bindPlayerInventory(); + return panel; } protected ModularUI buildUI(ModularUI.Builder builder, EntityPlayer player) { diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index d6780c41f8a..acea3373b3f 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -5,6 +5,7 @@ import gregtech.api.gui.widgets.ServerWidgetGroup; import gregtech.api.gui.widgets.SlotWidget; import gregtech.api.gui.widgets.ToggleButtonWidget; +import gregtech.api.mui.GregTechGuiScreen; import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; @@ -15,7 +16,6 @@ import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.screen.ModularScreen; import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.SyncHandlers; @@ -127,8 +127,8 @@ public void blacklistUI(int y, Consumer widgetGroup, Bo } /** Uses Cleanroom MUI*/ - public ParentWidget initUI(GuiSyncManager syncManager) { - syncManager.registerSlotGroup("filter_slot", 1, 100); + public ParentWidget initUI(GuiSyncManager manager) { + manager.registerSlotGroup("filter_slot", 1, 100); var column = new Column().padding(4).left(5).top(32); column.child(IKey.lang("cover.conveyor.item_filter.title").asWidget()) .child(new ItemSlot() @@ -136,15 +136,18 @@ public ParentWidget initUI(GuiSyncManager syncManager) { .slotGroup("filter_slot") .filter(is -> FilterTypeRegistry.getItemFilterForStack(is) != null)) .size(16, 16)) - .childIf(this::hasItemFilter, new ButtonWidget<>().setEnabledIf(w -> hasItemFilter()) - .onMousePressed(mouseButton -> createFilterPanel(syncManager, column.getScreen()))); + .child(new ButtonWidget<>().setEnabledIf(w -> hasItemFilter()) + .onMousePressed(mouseButton -> createFilterPanel())); return column; } - private boolean createFilterPanel(GuiSyncManager syncManager, ModularScreen screen) { + private boolean createFilterPanel() { + var screen = GregTechGuiScreen.getCurrent(); + if (screen == null) return false; + var panel = new ModularPanel("filter_window") .align(Alignment.Center) - .child(getItemFilter().initUI(syncManager)); + .child(getItemFilter().initUI(screen.getSyncManager())); if (!screen.isPanelOpen("filter_window")){ screen.openPanel(panel); } diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 2b5c48f5882..34b9e264a1d 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -176,7 +176,7 @@ public void initUI(Consumer widgetGroup) { } @Override - public @NotNull Widget initUI(GuiSyncManager syncManager) { + public @NotNull Widget initUI(GuiSyncManager manager) { return new Widget<>(); } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 9f5ec899885..e1efc54022d 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -1,9 +1,13 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; + +import com.cleanroommc.modularui.widgets.slot.SlotGroup; + import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.PhantomSlotWidget; import gregtech.api.gui.widgets.ToggleButtonWidget; -import gregtech.api.util.LargeStackSizeItemStackHandler; +import gregtech.api.mui.GTGuiTextures; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -14,7 +18,6 @@ import com.cleanroommc.modularui.api.widget.IWidget; import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.value.BoolValue; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.SyncHandlers; import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widgets.CycleButtonWidget; @@ -36,12 +39,17 @@ public class SimpleItemFilter extends ItemFilter { protected boolean ignoreNBT = true; public SimpleItemFilter() { - this.itemFilterSlots = new LargeStackSizeItemStackHandler(MAX_MATCH_SLOTS) { + this.itemFilterSlots = new ItemStackHandler(MAX_MATCH_SLOTS) { @Override public int getSlotLimit(int slot) { return getMaxStackSize(); } + + @Override + public void setStackInSlot(int slot, ItemStack stack) { + super.setStackInSlot(slot, stack); + } }; } @@ -113,24 +121,30 @@ public void initUI(Consumer widgetGroup) { @Override public @NotNull ParentWidget initUI(GuiSyncManager manager) { - List> widgets = new ArrayList<>(); + SlotGroup filterInventory = new SlotGroup("filter_inv", 3, 1000, true); + manager.registerSlotGroup(filterInventory); + List> widgets = new ArrayList<>(); for (int i = 0; i < 3; i++) { widgets.add(new ArrayList<>()); for (int j = 0; j < 3; j++) { - widgets.get(i).add(new ItemSlot().slot(SyncHandlers.phantomItemSlot(getItemFilterSlots(), i) - .slotGroup("filter_inv") - )); + int index = (i * 3) + j; + + var slot = new ItemSlot().slot(SyncHandlers.phantomItemSlot(this.itemFilterSlots, index) + .slotGroup(filterInventory)); + widgets.get(i).add(slot); + manager.syncValue(filterInventory.getName(), index, slot.getSyncHandler()); } } return new Row().coverChildren() - .align(Alignment.TopCenter) + .align(Alignment.TopCenter).top(6) .child(new Grid() .minElementMargin(0, 0) .minColWidth(18).minRowHeight(18) .matrix(widgets)) .child(new CycleButtonWidget() .value(new BoolValue.Dynamic(this::isBlacklistFilter, this::setBlacklistFilter)) + .textureGetter(state -> state == 0 ? GTGuiTextures.BUTTON_CROSS : GTGuiTextures.BUTTON) .tooltip(tooltip -> tooltip.addLine(IKey.lang("cover.filter.blacklist")))); } diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 22ae8763461..d836385ad7d 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -1,5 +1,7 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; + import gregtech.api.gui.widgets.CycleButtonWidget; import gregtech.api.recipes.Recipe; import gregtech.api.recipes.RecipeMap; @@ -11,7 +13,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.IStringSerializable; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.widget.Widget; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import org.jetbrains.annotations.NotNull; From 7411fa1ae560c2c054658aabbe799fb2b8bf832c Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 30 Dec 2023 01:25:27 -0700 Subject: [PATCH 008/260] panel sync handler? simplify filter slot construction --- .../covers/filter/ItemFilterContainer.java | 18 ++++++---- .../covers/filter/SimpleItemFilter.java | 34 ++++++------------- 2 files changed, 22 insertions(+), 30 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index acea3373b3f..6f4665bdbfb 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -1,5 +1,7 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.value.sync.PanelSyncHandler; + import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.LabelWidget; import gregtech.api.gui.widgets.ServerWidgetGroup; @@ -145,12 +147,16 @@ private boolean createFilterPanel() { var screen = GregTechGuiScreen.getCurrent(); if (screen == null) return false; - var panel = new ModularPanel("filter_window") - .align(Alignment.Center) - .child(getItemFilter().initUI(screen.getSyncManager())); - if (!screen.isPanelOpen("filter_window")){ - screen.openPanel(panel); - } + var panel = new PanelSyncHandler(screen.getMainPanel()) { + @Override + public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { + return new ModularPanel("filter_window") + .align(Alignment.Center) + .child(getItemFilter().initUI(screen.getSyncManager())); + } + }; + screen.getSyncManager().syncValue("filter_window", panel); + panel.openPanel(); return true; } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index e1efc54022d..105c77959e7 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -1,9 +1,5 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; - -import com.cleanroommc.modularui.widgets.slot.SlotGroup; - import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.PhantomSlotWidget; import gregtech.api.gui.widgets.ToggleButtonWidget; @@ -15,19 +11,18 @@ import net.minecraftforge.items.ItemStackHandler; import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.api.widget.IWidget; import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.value.BoolValue; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.SyncHandlers; import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widgets.CycleButtonWidget; import com.cleanroommc.modularui.widgets.ItemSlot; -import com.cleanroommc.modularui.widgets.layout.Grid; +import com.cleanroommc.modularui.widgets.SlotGroupWidget; import com.cleanroommc.modularui.widgets.layout.Row; +import com.cleanroommc.modularui.widgets.slot.SlotGroup; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.List; import java.util.function.Consumer; public class SimpleItemFilter extends ItemFilter { @@ -123,25 +118,16 @@ public void initUI(Consumer widgetGroup) { public @NotNull ParentWidget initUI(GuiSyncManager manager) { SlotGroup filterInventory = new SlotGroup("filter_inv", 3, 1000, true); manager.registerSlotGroup(filterInventory); - List> widgets = new ArrayList<>(); - for (int i = 0; i < 3; i++) { - widgets.add(new ArrayList<>()); - for (int j = 0; j < 3; j++) { - int index = (i * 3) + j; - - var slot = new ItemSlot().slot(SyncHandlers.phantomItemSlot(this.itemFilterSlots, index) - .slotGroup(filterInventory)); - widgets.get(i).add(slot); - manager.syncValue(filterInventory.getName(), index, slot.getSyncHandler()); - } - } return new Row().coverChildren() .align(Alignment.TopCenter).top(6) - .child(new Grid() - .minElementMargin(0, 0) - .minColWidth(18).minRowHeight(18) - .matrix(widgets)) + .child(SlotGroupWidget.builder() + .matrix("XXX", "XXX", "XXX") + .key('X', index -> new ItemSlot() + .slot(SyncHandlers.phantomItemSlot(this.itemFilterSlots, index) + .slotGroup(filterInventory))) + .synced(filterInventory.getName()) + .build()) .child(new CycleButtonWidget() .value(new BoolValue.Dynamic(this::isBlacklistFilter, this::setBlacklistFilter)) .textureGetter(state -> state == 0 ? GTGuiTextures.BUTTON_CROSS : GTGuiTextures.BUTTON) From b4fb77eef210cab9a1e6d22f7975c14c1a2a49ff Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 30 Dec 2023 22:19:01 -0700 Subject: [PATCH 009/260] unneeded cast --- src/main/java/gregtech/common/covers/CoverConveyor.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index d91bfaadd23..80d47309809 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -368,9 +368,9 @@ protected static class TypeItemInfo { public final IntList slots; public int totalCount; - public TypeItemInfo(ItemStack itemStack, Object filterSlot, IntList slots, int totalCount) { + public TypeItemInfo(ItemStack itemStack, int filterSlot, IntList slots, int totalCount) { this.itemStack = itemStack; - this.filterSlot = (int) filterSlot; + this.filterSlot = filterSlot; this.slots = slots; this.totalCount = totalCount; } From 75c6f4f2f33a1622c404d14407feb03f66c18f20 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 30 Dec 2023 22:19:35 -0700 Subject: [PATCH 010/260] more work on filter panel --- .../common/covers/filter/ItemFilterContainer.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 6f4665bdbfb..5eb88430bd6 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -1,7 +1,5 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.value.sync.PanelSyncHandler; - import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.LabelWidget; import gregtech.api.gui.widgets.ServerWidgetGroup; @@ -20,6 +18,7 @@ import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.value.sync.PanelSyncHandler; import com.cleanroommc.modularui.value.sync.SyncHandlers; import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widgets.ButtonWidget; @@ -139,23 +138,23 @@ public ParentWidget initUI(GuiSyncManager manager) { .filter(is -> FilterTypeRegistry.getItemFilterForStack(is) != null)) .size(16, 16)) .child(new ButtonWidget<>().setEnabledIf(w -> hasItemFilter()) - .onMousePressed(mouseButton -> createFilterPanel())); + .onMousePressed(this::createFilterPanel)); return column; } - private boolean createFilterPanel() { + private boolean createFilterPanel(int mouseButton) { var screen = GregTechGuiScreen.getCurrent(); if (screen == null) return false; var panel = new PanelSyncHandler(screen.getMainPanel()) { @Override public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { - return new ModularPanel("filter_window") + return ModularPanel.defaultPanel("filter_window", 18 * 4, 18 * 3) .align(Alignment.Center) .child(getItemFilter().initUI(screen.getSyncManager())); } }; - screen.getSyncManager().syncValue("filter_window", panel); + screen.getSyncManager().syncValue("filter_window2",1, panel); panel.openPanel(); return true; } From 89811987c26654c5ac85da877fbab2238912e9b4 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 30 Dec 2023 22:38:33 -0700 Subject: [PATCH 011/260] make panel creation in each filter instead of in the container --- .../common/covers/filter/ItemFilter.java | 7 ++-- .../covers/filter/ItemFilterContainer.java | 21 +++++------ .../filter/OreDictionaryItemFilter.java | 5 +-- .../covers/filter/SimpleItemFilter.java | 36 ++++++++++--------- .../common/covers/filter/SmartItemFilter.java | 5 +-- 5 files changed, 39 insertions(+), 35 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index 840a334961b..651f03db901 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -1,13 +1,12 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; -import com.cleanroommc.modularui.widget.Widget; - import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; import org.jetbrains.annotations.NotNull; import java.util.function.Consumer; @@ -49,7 +48,7 @@ public int getStackTransferLimit(ItemStack stack, int globalTransferLimit) { public abstract void initUI(Consumer widgetGroup); /** Uses Cleanroom MUI */ - public abstract @NotNull Widget initUI(GuiSyncManager manager); + public abstract @NotNull ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager); public abstract void writeToNBT(NBTTagCompound tagCompound); diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 5eb88430bd6..1fa1b0331ea 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -1,5 +1,7 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.widgets.slot.SlotGroup; + import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.LabelWidget; import gregtech.api.gui.widgets.ServerWidgetGroup; @@ -129,17 +131,18 @@ public void blacklistUI(int y, Consumer widgetGroup, Bo /** Uses Cleanroom MUI*/ public ParentWidget initUI(GuiSyncManager manager) { - manager.registerSlotGroup("filter_slot", 1, 100); - var column = new Column().padding(4).left(5).top(32); - column.child(IKey.lang("cover.conveyor.item_filter.title").asWidget()) + var slotGroup = new SlotGroup("filter_slot", 1); + manager.registerSlotGroup(slotGroup); + return new Column().padding(4).left(5).top(32) + .child(IKey.lang("cover.conveyor.item_filter.title").asWidget()) .child(new ItemSlot() .slot(SyncHandlers.itemSlot(filterInventory, 0) - .slotGroup("filter_slot") + .slotGroup(slotGroup) .filter(is -> FilterTypeRegistry.getItemFilterForStack(is) != null)) - .size(16, 16)) - .child(new ButtonWidget<>().setEnabledIf(w -> hasItemFilter()) + .size(ItemSlot.SIZE)) + .child(new ButtonWidget<>() + .setEnabledIf(w -> hasItemFilter()) .onMousePressed(this::createFilterPanel)); - return column; } private boolean createFilterPanel(int mouseButton) { @@ -149,9 +152,7 @@ private boolean createFilterPanel(int mouseButton) { var panel = new PanelSyncHandler(screen.getMainPanel()) { @Override public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { - return ModularPanel.defaultPanel("filter_window", 18 * 4, 18 * 3) - .align(Alignment.Center) - .child(getItemFilter().initUI(screen.getSyncManager())); + return getItemFilter().createUI(mainPanel, syncManager); } }; screen.getSyncManager().syncValue("filter_window2",1, panel); diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 34b9e264a1d..42c2ed09592 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -1,5 +1,6 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.widget.Widget; @@ -176,8 +177,8 @@ public void initUI(Consumer widgetGroup) { } @Override - public @NotNull Widget initUI(GuiSyncManager manager) { - return new Widget<>(); + public @NotNull ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { + return ModularPanel.defaultPanel("ore_dict_filter"); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 105c77959e7..3851209fe9f 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -1,5 +1,7 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.screen.ModularPanel; + import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.PhantomSlotWidget; import gregtech.api.gui.widgets.ToggleButtonWidget; @@ -15,7 +17,6 @@ import com.cleanroommc.modularui.value.BoolValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.SyncHandlers; -import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widgets.CycleButtonWidget; import com.cleanroommc.modularui.widgets.ItemSlot; import com.cleanroommc.modularui.widgets.SlotGroupWidget; @@ -115,23 +116,24 @@ public void initUI(Consumer widgetGroup) { } @Override - public @NotNull ParentWidget initUI(GuiSyncManager manager) { + public @NotNull ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { SlotGroup filterInventory = new SlotGroup("filter_inv", 3, 1000, true); - manager.registerSlotGroup(filterInventory); - - return new Row().coverChildren() - .align(Alignment.TopCenter).top(6) - .child(SlotGroupWidget.builder() - .matrix("XXX", "XXX", "XXX") - .key('X', index -> new ItemSlot() - .slot(SyncHandlers.phantomItemSlot(this.itemFilterSlots, index) - .slotGroup(filterInventory))) - .synced(filterInventory.getName()) - .build()) - .child(new CycleButtonWidget() - .value(new BoolValue.Dynamic(this::isBlacklistFilter, this::setBlacklistFilter)) - .textureGetter(state -> state == 0 ? GTGuiTextures.BUTTON_CROSS : GTGuiTextures.BUTTON) - .tooltip(tooltip -> tooltip.addLine(IKey.lang("cover.filter.blacklist")))); + syncManager.registerSlotGroup(filterInventory); + return ModularPanel.defaultPanel("simple_item_filter", 18 * 4, 18 * 3) + .align(Alignment.Center) + .child(new Row().coverChildren() + .align(Alignment.TopCenter).top(6) + .child(SlotGroupWidget.builder() + .matrix("XXX", "XXX", "XXX") + .key('X', index -> new ItemSlot() + .slot(SyncHandlers.phantomItemSlot(this.itemFilterSlots, index) + .slotGroup(filterInventory))) + .synced(filterInventory.getName()) + .build()) + .child(new CycleButtonWidget() + .value(new BoolValue.Dynamic(this::isBlacklistFilter, this::setBlacklistFilter)) + .textureGetter(state -> state == 0 ? GTGuiTextures.BUTTON_CROSS : GTGuiTextures.BUTTON) + .tooltip(tooltip -> tooltip.addLine(IKey.lang("cover.filter.blacklist"))))); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index d836385ad7d..314e60128ab 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -1,5 +1,6 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import gregtech.api.gui.widgets.CycleButtonWidget; @@ -94,8 +95,8 @@ public void initUI(Consumer widgetGroup) { } @Override - public @NotNull Widget initUI(GuiSyncManager manager) { - return new Widget<>(); + public @NotNull ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { + return ModularPanel.defaultPanel("smart_item_filter"); } @Override From 4da25605c56d4e7ecc2e01d0616bfe2ead7533c4 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 30 Dec 2023 23:12:15 -0700 Subject: [PATCH 012/260] simplify filter panel creation --- .../gregtech/common/covers/CoverConveyor.java | 10 ++--- .../covers/filter/ItemFilterContainer.java | 44 +++++++++++-------- .../covers/filter/SimpleItemFilter.java | 2 +- 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 80d47309809..890363c14ea 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -529,25 +529,23 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .top(16).padding(4) .coverChildrenHeight() .child(new ButtonWidget<>() - .width(16) + .width(18) .onMousePressed(mouseButton -> { throughput.setValue(throughput.getValue() + 1, true, true); return true; })) .child(new TextFieldWidget() .setMaxLength(4) - .widthRel(1.0f) + .widthRel(0.9f) .setNumbers(1, maxItemTransferRate) .background(GTGuiTextures.DISPLAY)) .child(new ButtonWidget<>() - .width(16) + .width(18) .onMousePressed(mouseButton -> { throughput.setValue(throughput.getValue() - 1, true, true); return true; }))) - .child(getItemFilterContainer() - .initUI(guiSyncManager) - .top(36)) + .child(getItemFilterContainer().initUI(panel, guiSyncManager)) .bindPlayerInventory(); return panel; } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 1fa1b0331ea..6199af8c026 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -130,34 +130,36 @@ public void blacklistUI(int y, Consumer widgetGroup, Bo } /** Uses Cleanroom MUI*/ - public ParentWidget initUI(GuiSyncManager manager) { - var slotGroup = new SlotGroup("filter_slot", 1); + public ParentWidget initUI(ModularPanel main, GuiSyncManager manager) { + var slotGroup = new SlotGroup("filter_slot", 1, true); manager.registerSlotGroup(slotGroup); + var panel = new PanelSyncHandler(main) { + @Override + public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { + return getItemFilter().createUI(mainPanel, syncManager); + } + }; + manager.syncValue("filter_panel", panel); + return new Column().padding(4).left(5).top(32) .child(IKey.lang("cover.conveyor.item_filter.title").asWidget()) .child(new ItemSlot() .slot(SyncHandlers.itemSlot(filterInventory, 0) .slotGroup(slotGroup) - .filter(is -> FilterTypeRegistry.getItemFilterForStack(is) != null)) + .filter(this::isFilter)) .size(ItemSlot.SIZE)) .child(new ButtonWidget<>() .setEnabledIf(w -> hasItemFilter()) - .onMousePressed(this::createFilterPanel)); - } - - private boolean createFilterPanel(int mouseButton) { - var screen = GregTechGuiScreen.getCurrent(); - if (screen == null) return false; - - var panel = new PanelSyncHandler(screen.getMainPanel()) { - @Override - public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { - return getItemFilter().createUI(mainPanel, syncManager); - } - }; - screen.getSyncManager().syncValue("filter_window2",1, panel); - panel.openPanel(); - return true; + .onMousePressed(i -> { + if (!panel.isPanelOpen()) { + panel.openPanel(); + return true; + } else if (panel.isValid()) { + panel.closePanel(); + return true; + } + return false; + })); } protected void onFilterSlotChange(boolean notify) { @@ -256,6 +258,10 @@ public boolean hasItemFilter() { return currentItemFilter != null; } + public boolean isFilter(ItemStack stack) { + return FilterTypeRegistry.getItemFilterForStack(stack) != null; + } + @Override public NBTTagCompound serializeNBT() { NBTTagCompound tagCompound = new NBTTagCompound(); diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 3851209fe9f..b27b5ff2cf5 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -127,7 +127,7 @@ public void initUI(Consumer widgetGroup) { .matrix("XXX", "XXX", "XXX") .key('X', index -> new ItemSlot() .slot(SyncHandlers.phantomItemSlot(this.itemFilterSlots, index) - .slotGroup(filterInventory))) + .slotGroup(filterInventory))) .synced(filterInventory.getName()) .build()) .child(new CycleButtonWidget() From 21393d4610a3faa73e6fc52126b807fc5d5f98e0 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 30 Dec 2023 23:18:46 -0700 Subject: [PATCH 013/260] remove `sync()` --- .../java/gregtech/common/covers/filter/SimpleItemFilter.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index b27b5ff2cf5..a6b524ab986 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -128,7 +128,6 @@ public void initUI(Consumer widgetGroup) { .key('X', index -> new ItemSlot() .slot(SyncHandlers.phantomItemSlot(this.itemFilterSlots, index) .slotGroup(filterInventory))) - .synced(filterInventory.getName()) .build()) .child(new CycleButtonWidget() .value(new BoolValue.Dynamic(this::isBlacklistFilter, this::setBlacklistFilter)) From 159ba4decc802a8b09f650ae9d5b060069279d4e Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 31 Dec 2023 01:05:37 -0700 Subject: [PATCH 014/260] fix simple item filters fix matching logic --- .../common/covers/filter/ItemFilter.java | 8 ++++-- .../covers/filter/SimpleItemFilter.java | 26 +++++++++++-------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index 651f03db901..83b427508cf 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -50,9 +50,13 @@ public int getStackTransferLimit(ItemStack stack, int globalTransferLimit) { /** Uses Cleanroom MUI */ public abstract @NotNull ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager); - public abstract void writeToNBT(NBTTagCompound tagCompound); + public void writeToNBT(NBTTagCompound tagCompound) { + tagCompound.setBoolean("IsBlacklist", this.isBlacklistFilter); + } - public abstract void readFromNBT(NBTTagCompound tagCompound); + public void readFromNBT(NBTTagCompound tagCompound) { + this.isBlacklistFilter = tagCompound.getBoolean("IsBlacklist"); + } final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { this.dirtyNotifiable = dirtyNotifiable; diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index a6b524ab986..afd7b7a05e0 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -1,11 +1,10 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.screen.ModularPanel; - import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.PhantomSlotWidget; import gregtech.api.gui.widgets.ToggleButtonWidget; import gregtech.api.mui.GTGuiTextures; +import gregtech.api.mui.slot.PhantomItemSlot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -13,10 +12,10 @@ import net.minecraftforge.items.ItemStackHandler; import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.utils.Alignment; -import com.cleanroommc.modularui.value.BoolValue; +import com.cleanroommc.modularui.value.sync.BooleanSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; -import com.cleanroommc.modularui.value.sync.SyncHandlers; import com.cleanroommc.modularui.widgets.CycleButtonWidget; import com.cleanroommc.modularui.widgets.ItemSlot; import com.cleanroommc.modularui.widgets.SlotGroupWidget; @@ -84,7 +83,9 @@ protected void setIgnoreNBT(boolean ignoreNBT) { @Override public MatchResult matchItemStack(ItemStack itemStack) { int itemFilterMatchIndex = itemFilterMatch(getItemFilterSlots(), isIgnoreDamage(), isIgnoreNBT(), itemStack); - return ItemFilter.createResult(itemFilterMatchIndex == -1 ? Match.FAIL : Match.SUCCEED, itemFilterMatchIndex); + var result = ItemFilter.createResult(itemFilterMatchIndex == -1 ? Match.FAIL : Match.SUCCEED, itemFilterMatchIndex); + if (isBlacklistFilter()) result.flipMatch(); + return result; } @Override @@ -100,7 +101,7 @@ public boolean showGlobalTransferLimitSlider() { @Override public int getTotalOccupiedHeight() { - return 36; + return 36; // todo remove this, idk what it's used for } @Override @@ -118,25 +119,27 @@ public void initUI(Consumer widgetGroup) { @Override public @NotNull ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { SlotGroup filterInventory = new SlotGroup("filter_inv", 3, 1000, true); + var blacklist = new BooleanSyncValue(this::isBlacklistFilter, this::setBlacklistFilter); syncManager.registerSlotGroup(filterInventory); - return ModularPanel.defaultPanel("simple_item_filter", 18 * 4, 18 * 3) - .align(Alignment.Center) + syncManager.syncValue("filter_blacklist", blacklist); + return ModularPanel.defaultPanel("simple_item_filter") .child(new Row().coverChildren() .align(Alignment.TopCenter).top(6) .child(SlotGroupWidget.builder() .matrix("XXX", "XXX", "XXX") .key('X', index -> new ItemSlot() - .slot(SyncHandlers.phantomItemSlot(this.itemFilterSlots, index) - .slotGroup(filterInventory))) + .slot(new PhantomItemSlot(itemFilterSlots, index, () -> Integer.MAX_VALUE) + .slotGroup(filterInventory))) .build()) .child(new CycleButtonWidget() - .value(new BoolValue.Dynamic(this::isBlacklistFilter, this::setBlacklistFilter)) + .value(blacklist) .textureGetter(state -> state == 0 ? GTGuiTextures.BUTTON_CROSS : GTGuiTextures.BUTTON) .tooltip(tooltip -> tooltip.addLine(IKey.lang("cover.filter.blacklist"))))); } @Override public void writeToNBT(NBTTagCompound tagCompound) { + super.writeToNBT(tagCompound); tagCompound.setTag("ItemFilter", itemFilterSlots.serializeNBT()); tagCompound.setBoolean("IgnoreDamage", ignoreDamage); tagCompound.setBoolean("IgnoreNBT", ignoreNBT); @@ -144,6 +147,7 @@ public void writeToNBT(NBTTagCompound tagCompound) { @Override public void readFromNBT(NBTTagCompound tagCompound) { + super.readFromNBT(tagCompound); this.itemFilterSlots.deserializeNBT(tagCompound.getCompoundTag("ItemFilter")); this.ignoreDamage = tagCompound.getBoolean("IgnoreDamage"); this.ignoreNBT = tagCompound.getBoolean("IgnoreNBT"); From b2d7165ee3b348ec7b5bf4479af7879263fd5fca Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 31 Dec 2023 01:05:53 -0700 Subject: [PATCH 015/260] remove unused methods --- .../covers/filter/ItemFilterContainer.java | 23 ++++--------------- .../covers/filter/ItemFilterWrapper.java | 4 ---- 2 files changed, 5 insertions(+), 22 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 6199af8c026..ffaf2c4826d 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -215,28 +215,17 @@ public int getStackTransferLimit(ItemStack stack) { } public ItemFilter.MatchResult matchItemStack(ItemStack itemStack) { - return matchItemStack(itemStack, !isBlacklistFilter()); - } - - public ItemFilter.MatchResult matchItemStack(ItemStack itemStack, boolean whitelist) { ItemFilter.MatchResult originalResult; if (currentItemFilter == null) { originalResult = ItemFilter.EMPTY_MATCH; } else { originalResult = currentItemFilter.matchItemStack(itemStack); } - if (!whitelist) { - originalResult.flipMatch(); - } return originalResult; } public boolean testItemStack(ItemStack itemStack) { - return matchItemStack(itemStack) != null; - } - - public boolean testItemStack(ItemStack itemStack, boolean whitelist) { - return matchItemStack(itemStack, whitelist).matched(); + return matchItemStack(itemStack).matched(); } @@ -266,12 +255,11 @@ public boolean isFilter(ItemStack stack) { public NBTTagCompound serializeNBT() { NBTTagCompound tagCompound = new NBTTagCompound(); tagCompound.setTag("FilterInventory", filterInventory.serializeNBT()); - tagCompound.setBoolean("IsBlacklist", filterWrapper.isBlacklistFilter()); tagCompound.setInteger("MaxStackSize", maxStackSize); tagCompound.setInteger("TransferStackSize", transferStackSize); - if (filterWrapper.getItemFilter() != null) { + if (getItemFilter() != null) { NBTTagCompound filterInventory = new NBTTagCompound(); - filterWrapper.getItemFilter().writeToNBT(filterInventory); + getItemFilter().writeToNBT(filterInventory); tagCompound.setTag("Filter", filterInventory); } return tagCompound; @@ -280,11 +268,10 @@ public NBTTagCompound serializeNBT() { @Override public void deserializeNBT(NBTTagCompound tagCompound) { this.filterInventory.deserializeNBT(tagCompound.getCompoundTag("FilterInventory")); - this.filterWrapper.setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); setMaxStackSize(tagCompound.getInteger("MaxStackSize")); setTransferStackSize(tagCompound.getInteger("TransferStackSize")); - if (filterWrapper.getItemFilter() != null) { - this.filterWrapper.getItemFilter().readFromNBT(tagCompound.getCompoundTag("Filter")); + if (getItemFilter() != null) { + this.getItemFilter().readFromNBT(tagCompound.getCompoundTag("Filter")); } } } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java index f3607c64357..4ed7a8f448f 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java @@ -72,10 +72,6 @@ public ItemFilter.MatchResult matchItemStack(ItemStack itemStack) { return container.matchItemStack(itemStack); } - public ItemFilter.MatchResult matchItemStack(ItemStack itemStack, boolean whitelist) { - return container.matchItemStack(itemStack, whitelist); - } - public boolean testItemStack(ItemStack itemStack) { return container.testItemStack(itemStack); } From 3027825b083426a07c725876d0e2c447bb4460f7 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 31 Dec 2023 01:06:13 -0700 Subject: [PATCH 016/260] add PhantomItemSlot for the filter slot still needs more work --- .../api/mui/slot/PhantomItemSlot.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/main/java/gregtech/api/mui/slot/PhantomItemSlot.java diff --git a/src/main/java/gregtech/api/mui/slot/PhantomItemSlot.java b/src/main/java/gregtech/api/mui/slot/PhantomItemSlot.java new file mode 100644 index 00000000000..6c29822bc1b --- /dev/null +++ b/src/main/java/gregtech/api/mui/slot/PhantomItemSlot.java @@ -0,0 +1,31 @@ +package gregtech.api.mui.slot; + +import com.cleanroommc.modularui.widgets.slot.ModularSlot; + +import net.minecraftforge.items.IItemHandler; + +import java.util.function.Supplier; + +public class PhantomItemSlot extends ModularSlot { + protected Supplier maxStackSize; + public static final Supplier DEFAULT_SIZE = () -> 64; + public PhantomItemSlot(IItemHandler itemHandler, int index, Supplier maxStackSize) { + super(itemHandler, index); + this.maxStackSize = maxStackSize == null ? DEFAULT_SIZE : maxStackSize; + } + + @Override + public int getSlotStackLimit() { + return maxStackSize.get(); + } + + @Override + public boolean isPhantom() { + return true; + } + + @Override + public boolean isIgnoreMaxStackSize() { + return true; + } +} From de77ca4e82182facd241b23e193fb61a16bd07b6 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 31 Dec 2023 12:58:25 -0700 Subject: [PATCH 017/260] sync item filter stack --- .../gregtech/common/covers/CoverConveyor.java | 4 +++- .../covers/filter/ItemFilterContainer.java | 24 +++++++++++++++---- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 890363c14ea..a241d9b29bd 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -526,7 +526,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag panel.padding(4) .child(createTitleRow()) .child(new Row() - .top(16).padding(4) + .top(16) .coverChildrenHeight() .child(new ButtonWidget<>() .width(18) @@ -623,6 +623,7 @@ public void writeInitialSyncData(PacketBuffer packetBuffer) { super.writeInitialSyncData(packetBuffer); packetBuffer.writeEnumValue(conveyorMode); packetBuffer.writeEnumValue(distributionMode); + getItemFilterContainer().writeInitialSyncData(packetBuffer); } @Override @@ -630,6 +631,7 @@ public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.readInitialSyncData(packetBuffer); this.conveyorMode = packetBuffer.readEnumValue(ConveyorMode.class); this.distributionMode = packetBuffer.readEnumValue(DistributionMode.class); + getItemFilterContainer().readInitialSyncData(packetBuffer); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index ffaf2c4826d..ff695863273 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -1,24 +1,21 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.widgets.slot.SlotGroup; - import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.LabelWidget; import gregtech.api.gui.widgets.ServerWidgetGroup; import gregtech.api.gui.widgets.SlotWidget; import gregtech.api.gui.widgets.ToggleButtonWidget; -import gregtech.api.mui.GregTechGuiScreen; import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; import net.minecraft.util.math.MathHelper; import net.minecraftforge.common.util.INBTSerializable; import net.minecraftforge.items.ItemStackHandler; import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.PanelSyncHandler; import com.cleanroommc.modularui.value.sync.SyncHandlers; @@ -26,8 +23,10 @@ import com.cleanroommc.modularui.widgets.ButtonWidget; import com.cleanroommc.modularui.widgets.ItemSlot; import com.cleanroommc.modularui.widgets.layout.Column; +import com.cleanroommc.modularui.widgets.slot.SlotGroup; import org.jetbrains.annotations.NotNull; +import java.io.IOException; import java.util.function.BooleanSupplier; import java.util.function.Consumer; @@ -48,7 +47,7 @@ public ItemFilterContainer(IDirtyNotifiable dirtyNotifiable) { @Override public boolean isItemValid(int slot, @NotNull ItemStack stack) { - return FilterTypeRegistry.getItemFilterForStack(stack) != null; + return isFilter(stack); } @Override @@ -72,6 +71,7 @@ public ItemStackHandler getFilterInventory() { return filterInventory; } + @Deprecated public ItemFilterWrapper getFilterWrapper() { return filterWrapper; } @@ -108,6 +108,7 @@ public boolean isBlacklistFilter() { } /** Deprecated, uses old builtin MUI*/ + @Deprecated public void initUI(int y, Consumer widgetGroup) { widgetGroup.accept(new LabelWidget(10, y, "cover.conveyor.item_filter.title")); widgetGroup.accept(new SlotWidget(filterInventory, 0, 10, y + 15) @@ -251,6 +252,18 @@ public boolean isFilter(ItemStack stack) { return FilterTypeRegistry.getItemFilterForStack(stack) != null; } + public void writeInitialSyncData(PacketBuffer packetBuffer) { + packetBuffer.writeItemStack(getFilterInventory().getStackInSlot(0)); + } + + public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { + try { + var stack = packetBuffer.readItemStack(); + this.filterInventory.setStackInSlot(0, stack); + this.currentItemFilter = FilterTypeRegistry.getItemFilterForStack(stack); + } catch (IOException ignore) {} + } + @Override public NBTTagCompound serializeNBT() { NBTTagCompound tagCompound = new NBTTagCompound(); @@ -268,6 +281,7 @@ public NBTTagCompound serializeNBT() { @Override public void deserializeNBT(NBTTagCompound tagCompound) { this.filterInventory.deserializeNBT(tagCompound.getCompoundTag("FilterInventory")); + this.currentItemFilter = FilterTypeRegistry.getItemFilterForStack(getFilterInventory().getStackInSlot(0)); setMaxStackSize(tagCompound.getInteger("MaxStackSize")); setTransferStackSize(tagCompound.getInteger("TransferStackSize")); if (getItemFilter() != null) { From bf2e34d6d10e58c5388f81892597d8f97a75ddb5 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 31 Dec 2023 12:59:26 -0700 Subject: [PATCH 018/260] remap more methods to container --- .../common/covers/filter/ItemFilterWrapper.java | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java index 4ed7a8f448f..1619d0eb8d5 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java @@ -1,31 +1,23 @@ package gregtech.common.covers.filter; -import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.widgets.ServerWidgetGroup; -import gregtech.api.gui.widgets.ToggleButtonWidget; - import net.minecraft.item.ItemStack; import java.util.function.BooleanSupplier; import java.util.function.Consumer; public class ItemFilterWrapper { - private ItemFilterContainer container; + private final ItemFilterContainer container; public ItemFilterWrapper(ItemFilterContainer container) { this.container = container; } public void initUI(int y, Consumer widgetGroup) { - widgetGroup.accept(new WidgetGroupItemFilter(y, this::getItemFilter)); + container.initFilterUI(y, widgetGroup); } public void blacklistUI(int y, Consumer widgetGroup, BooleanSupplier showBlacklistButton) { - ServerWidgetGroup blacklistButton = new ServerWidgetGroup(() -> getItemFilter() != null); - blacklistButton.addWidget(new ToggleButtonWidget(144, y, 20, 20, GuiTextures.BUTTON_BLACKLIST, - this::isBlacklistFilter, this::setBlacklistFilter).setPredicate(showBlacklistButton) - .setTooltipText("cover.filter.blacklist")); - widgetGroup.accept(blacklistButton); + container.blacklistUI(y, widgetGroup, showBlacklistButton); } public void setItemFilter(ItemFilter itemFilter) { From 5964f8f754161beb19271633b89f533fd60f74e8 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 31 Dec 2023 16:30:13 -0700 Subject: [PATCH 019/260] more work and ui positioning add manual io buttons improve filter panel --- .../gregtech/common/covers/CoverConveyor.java | 73 ++++++++++++------- .../covers/filter/ItemFilterContainer.java | 44 ++++++----- .../covers/filter/SimpleItemFilter.java | 15 ++-- 3 files changed, 80 insertions(+), 52 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index a241d9b29bd..57219633744 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -1,5 +1,11 @@ package gregtech.common.covers; +import com.cleanroommc.modularui.widget.Widget; + +import com.cleanroommc.modularui.widgets.ToggleButton; + +import com.cleanroommc.modularui.widgets.layout.Column; + import gregtech.api.GTValues; import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; @@ -11,7 +17,6 @@ import gregtech.api.cover.CoverableView; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.ModularUI; -import gregtech.api.gui.widgets.CycleButtonWidget; import gregtech.api.gui.widgets.ImageCycleButtonWidget; import gregtech.api.gui.widgets.ImageWidget; import gregtech.api.gui.widgets.IncrementButtonWidget; @@ -24,7 +29,6 @@ import gregtech.api.util.ItemStackHashStrategy; import gregtech.client.renderer.texture.Textures; import gregtech.client.renderer.texture.cube.SimpleSidedCubeRenderer; -import gregtech.common.covers.filter.ItemFilter; import gregtech.common.covers.filter.ItemFilterContainer; import gregtech.common.pipelike.itempipe.tile.TileEntityItemPipe; @@ -523,33 +527,48 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag var panel = GTGuis.createPanel(this, 176, 112 + 176); - panel.padding(4) - .child(createTitleRow()) - .child(new Row() - .top(16) - .coverChildrenHeight() - .child(new ButtonWidget<>() - .width(18) - .onMousePressed(mouseButton -> { - throughput.setValue(throughput.getValue() + 1, true, true); - return true; - })) - .child(new TextFieldWidget() - .setMaxLength(4) - .widthRel(0.9f) - .setNumbers(1, maxItemTransferRate) - .background(GTGuiTextures.DISPLAY)) - .child(new ButtonWidget<>() - .width(18) - .onMousePressed(mouseButton -> { - throughput.setValue(throughput.getValue() - 1, true, true); - return true; - }))) - .child(getItemFilterContainer().initUI(panel, guiSyncManager)) + panel.child(createTitleRow()) + .child(new Column().top(24).margin(4, 0) + .widthRel(1f).coverChildrenHeight() + .child(new Row().coverChildrenHeight() + .marginBottom(2).widthRel(1f) + .child(new ButtonWidget<>() + .left(0) + .width(16) + .onMousePressed(mouseButton -> { + throughput.setValue(throughput.getValue() + 1, true, true); + return true; + })) + .child(new TextFieldWidget() + .setMaxLength(4) + .left(16).right(16) + .setNumbers(1, maxItemTransferRate) + .background(GTGuiTextures.DISPLAY)) + .child(new ButtonWidget<>() + .right(0) + .width(16) + .onMousePressed(mouseButton -> { + throughput.setValue(throughput.getValue() - 1, true, true); + return true; + }))) + .child(getItemFilterContainer() + .initUI(panel, guiSyncManager)) + .child(new Row().coverChildrenHeight() + .marginBottom(2).widthRel(1f) + .child(createManualIoButton(manualIOmode, ManualImportExportMode.DISABLED)) + .child(createManualIoButton(manualIOmode, ManualImportExportMode.UNFILTERED)) + .child(createManualIoButton(manualIOmode, ManualImportExportMode.FILTERED)))) .bindPlayerInventory(); return panel; } + private Widget createManualIoButton(EnumSyncValue value, ManualImportExportMode mode) { + return new ToggleButton().size(18) + .value(boolValueOf(value, mode)) + .background(GTGuiTextures.MC_BUTTON_DISABLED) + .selectedBackground(GTGuiTextures.MC_BUTTON); + } + protected ModularUI buildUI(ModularUI.Builder builder, EntityPlayer player) { return builder.build(this, player); } @@ -575,9 +594,9 @@ public ModularUI createUI(EntityPlayer player) { .setMaxLength(4) .setPostFix("cover.conveyor.transfer_rate")); - primaryGroup.addWidget(new CycleButtonWidget(10, 45, 75, 20, + primaryGroup.addWidget(new gregtech.api.gui.widgets.CycleButtonWidget(10, 45, 75, 20, ConveyorMode.class, this::getConveyorMode, this::setConveyorMode)); - primaryGroup.addWidget(new CycleButtonWidget(7, 166, 116, 20, + primaryGroup.addWidget(new gregtech.api.gui.widgets.CycleButtonWidget(7, 166, 116, 20, ManualImportExportMode.class, this::getManualImportExportMode, this::setManualImportExportMode) .setTooltipHoverString("cover.universal.manual_import_export.mode.description")); diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index ff695863273..d867bcb4b23 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -1,10 +1,13 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.widgets.layout.Row; + import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.LabelWidget; import gregtech.api.gui.widgets.ServerWidgetGroup; import gregtech.api.gui.widgets.SlotWidget; import gregtech.api.gui.widgets.ToggleButtonWidget; +import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; @@ -142,25 +145,28 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) }; manager.syncValue("filter_panel", panel); - return new Column().padding(4).left(5).top(32) - .child(IKey.lang("cover.conveyor.item_filter.title").asWidget()) - .child(new ItemSlot() - .slot(SyncHandlers.itemSlot(filterInventory, 0) - .slotGroup(slotGroup) - .filter(this::isFilter)) - .size(ItemSlot.SIZE)) - .child(new ButtonWidget<>() - .setEnabledIf(w -> hasItemFilter()) - .onMousePressed(i -> { - if (!panel.isPanelOpen()) { - panel.openPanel(); - return true; - } else if (panel.isValid()) { - panel.closePanel(); - return true; - } - return false; - })); + return new Column().coverChildrenHeight() + .marginBottom(2).widthRel(1f) + .child(IKey.lang("cover.conveyor.item_filter.title").asWidget().left(0)) + .child(new Row().height(18) + .child(new ItemSlot() + .slot(SyncHandlers.itemSlot(filterInventory, 0) + .slotGroup(slotGroup) + .filter(this::isFilter)) + .size(ItemSlot.SIZE) + .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY)) + .child(new ButtonWidget<>() + .setEnabledIf(w -> hasItemFilter()) + .onMousePressed(i -> { + if (!panel.isPanelOpen()) { + panel.openPanel(); + return true; + } else if (panel.isValid()) { + panel.closePanel(); + return true; + } + return false; + }))); } protected void onFilterSlotChange(boolean notify) { diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index afd7b7a05e0..7104cb8da28 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -4,6 +4,7 @@ import gregtech.api.gui.widgets.PhantomSlotWidget; import gregtech.api.gui.widgets.ToggleButtonWidget; import gregtech.api.mui.GTGuiTextures; +import gregtech.api.mui.GTGuis; import gregtech.api.mui.slot.PhantomItemSlot; import net.minecraft.item.ItemStack; @@ -13,7 +14,6 @@ import com.cleanroommc.modularui.api.drawable.IKey; 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.GuiSyncManager; import com.cleanroommc.modularui.widgets.CycleButtonWidget; @@ -122,11 +122,13 @@ public void initUI(Consumer widgetGroup) { var blacklist = new BooleanSyncValue(this::isBlacklistFilter, this::setBlacklistFilter); syncManager.registerSlotGroup(filterInventory); syncManager.syncValue("filter_blacklist", blacklist); - return ModularPanel.defaultPanel("simple_item_filter") - .child(new Row().coverChildren() - .align(Alignment.TopCenter).top(6) + return GTGuis.createPopupPanel("simple_item_filter", 18 * 4 + 9, 18 * 4 + 9) + .child(new Row().left(4).bottom(4) + .coverChildrenHeight() .child(SlotGroupWidget.builder() - .matrix("XXX", "XXX", "XXX") + .matrix("XXX", + "XXX", + "XXX") .key('X', index -> new ItemSlot() .slot(new PhantomItemSlot(itemFilterSlots, index, () -> Integer.MAX_VALUE) .slotGroup(filterInventory))) @@ -134,7 +136,8 @@ public void initUI(Consumer widgetGroup) { .child(new CycleButtonWidget() .value(blacklist) .textureGetter(state -> state == 0 ? GTGuiTextures.BUTTON_CROSS : GTGuiTextures.BUTTON) - .tooltip(tooltip -> tooltip.addLine(IKey.lang("cover.filter.blacklist"))))); + .addTooltip(0, IKey.lang("cover.filter.blacklist.enabled")) + .addTooltip(1, IKey.lang("cover.filter.blacklist.disabled")))); } @Override From ee75f4e71c55635761bd53cdc0f4d4c6734cf81f Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 31 Dec 2023 16:55:57 -0700 Subject: [PATCH 020/260] add ignore nbt and meta improve filter panel some more --- .../covers/filter/SimpleItemFilter.java | 39 +++++++++++++++---- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 7104cb8da28..8d29d0acf07 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -1,5 +1,7 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.widgets.layout.Column; + import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.PhantomSlotWidget; import gregtech.api.gui.widgets.ToggleButtonWidget; @@ -120,24 +122,47 @@ public void initUI(Consumer widgetGroup) { public @NotNull ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { SlotGroup filterInventory = new SlotGroup("filter_inv", 3, 1000, true); var blacklist = new BooleanSyncValue(this::isBlacklistFilter, this::setBlacklistFilter); + var ignoreMeta = new BooleanSyncValue(this::isIgnoreDamage, this::setIgnoreDamage); + var ignoreNBT = new BooleanSyncValue(this::isIgnoreNBT, this::setIgnoreNBT); + syncManager.registerSlotGroup(filterInventory); syncManager.syncValue("filter_blacklist", blacklist); + syncManager.syncValue("ignore_meta", ignoreMeta); + syncManager.syncValue("ignore_nbt", ignoreNBT); + return GTGuis.createPopupPanel("simple_item_filter", 18 * 4 + 9, 18 * 4 + 9) .child(new Row().left(4).bottom(4) - .coverChildrenHeight() + .coverChildren() .child(SlotGroupWidget.builder() .matrix("XXX", "XXX", "XXX") .key('X', index -> new ItemSlot() .slot(new PhantomItemSlot(itemFilterSlots, index, () -> Integer.MAX_VALUE) - .slotGroup(filterInventory))) + .slotGroup(filterInventory) + .changeListener((newItem, onlyAmountChanged, client, init) -> { + if (onlyAmountChanged && !init) { + markDirty(); + } + }))) .build()) - .child(new CycleButtonWidget() - .value(blacklist) - .textureGetter(state -> state == 0 ? GTGuiTextures.BUTTON_CROSS : GTGuiTextures.BUTTON) - .addTooltip(0, IKey.lang("cover.filter.blacklist.enabled")) - .addTooltip(1, IKey.lang("cover.filter.blacklist.disabled")))); + .child(new Column().width(18).coverChildren() + // todo add overlays for blacklist, meta, and nbt + .child(new CycleButtonWidget() + .value(blacklist) + .textureGetter(state -> state == 1 ? GTGuiTextures.MC_BUTTON : GTGuiTextures.MC_BUTTON_DISABLED) + .addTooltip(0, IKey.lang("cover.filter.blacklist.enabled")) + .addTooltip(1, IKey.lang("cover.filter.blacklist.disabled"))) + .child(new CycleButtonWidget() + .value(ignoreMeta) + .textureGetter(state -> state == 1 ? GTGuiTextures.MC_BUTTON : GTGuiTextures.MC_BUTTON_DISABLED) + .addTooltip(0, IKey.lang("cover.item_filter.ignore_damage.enabled")) + .addTooltip(1, IKey.lang("cover.item_filter.ignore_damage.disabled"))) + .child(new CycleButtonWidget() + .value(ignoreNBT) + .textureGetter(state -> state == 1 ? GTGuiTextures.MC_BUTTON : GTGuiTextures.MC_BUTTON_DISABLED) + .addTooltip(0, IKey.lang("cover.item_filter.ignore_nbt.enabled")) + .addTooltip(1, IKey.lang("cover.item_filter.ignore_nbt.disabled"))))); } @Override From f7b2632684e3d1ec2c557b71e937fcdd1adf4b32 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 31 Dec 2023 18:53:45 -0700 Subject: [PATCH 021/260] add method for slicing images add ui for blacklist, damage, and nbt --- .../java/gregtech/api/mui/GTGuiTextures.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/main/java/gregtech/api/mui/GTGuiTextures.java b/src/main/java/gregtech/api/mui/GTGuiTextures.java index 3c99abaee1e..b5338a318b7 100644 --- a/src/main/java/gregtech/api/mui/GTGuiTextures.java +++ b/src/main/java/gregtech/api/mui/GTGuiTextures.java @@ -12,6 +12,7 @@ * while MUI port is still ongoing. When MUI port is done, this annotation will be removed. */ // TODO ^ +@SuppressWarnings("unused") @ApiStatus.Experimental public class GTGuiTextures { @@ -153,6 +154,13 @@ public static class IDs { .canApplyTheme() .build(); + public static final UITexture[] BUTTON_BLACKLIST = slice("textures/gui/widget/button_blacklist.png", + 16, 32, 16, 16, true); + public static final UITexture[] BUTTON_IGNORE_DAMAGE = slice("textures/gui/widget/button_filter_damage.png", + 16, 32, 16, 16,true); + public static final UITexture[] BUTTON_IGNORE_NBT = slice("textures/gui/widget/button_filter_nbt.png", + 16, 32, 16, 16,true); + // todo bronze/steel/primitive fluid slots? // SLOT OVERLAYS @@ -453,6 +461,28 @@ private static UITexture fullImage(String path, boolean canApplyTheme) { return UITexture.fullImage(GTValues.MODID, path, canApplyTheme); } + @SuppressWarnings("SameParameterValue") + private static UITexture[] slice(String path, int imageWidth, int imageHeight, int sliceWidth, int sliceHeight, boolean canApplyTheme) { + if (imageWidth % sliceWidth != 0 || imageHeight % sliceHeight != 0) + throw new IllegalArgumentException("Slice height and slice width must divide the image evenly!"); + + int countX = imageWidth / sliceWidth; + int countY = imageHeight / sliceHeight; + UITexture[] slices = new UITexture[countX * countY]; + + for (int indexX = 0; indexX < countX; indexX++) { + for (int indexY = 0; indexY < countY; indexY++) { + slices[(indexX * countX) + indexY] = UITexture.builder() + .location(GTValues.MODID, path) + .canApplyTheme(canApplyTheme) + .imageSize(imageWidth, imageHeight) + .uv(indexX * sliceWidth, indexY * sliceHeight, sliceWidth, sliceHeight) + .build(); + } + } + return slices; + } + private static UITexture progressBar(String path) { return progressBar(path, 20, 40, false); } From 9ebe3b7a5c00c3a1319fd2fcbaf310a307dac733 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 31 Dec 2023 18:55:03 -0700 Subject: [PATCH 022/260] flip tooltip states use ui for blacklist, damage, and nbt meta -> damage --- .../covers/filter/SimpleItemFilter.java | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 8d29d0acf07..683cb1c790d 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -122,12 +122,12 @@ public void initUI(Consumer widgetGroup) { public @NotNull ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { SlotGroup filterInventory = new SlotGroup("filter_inv", 3, 1000, true); var blacklist = new BooleanSyncValue(this::isBlacklistFilter, this::setBlacklistFilter); - var ignoreMeta = new BooleanSyncValue(this::isIgnoreDamage, this::setIgnoreDamage); + var ignoreDamage = new BooleanSyncValue(this::isIgnoreDamage, this::setIgnoreDamage); var ignoreNBT = new BooleanSyncValue(this::isIgnoreNBT, this::setIgnoreNBT); syncManager.registerSlotGroup(filterInventory); syncManager.syncValue("filter_blacklist", blacklist); - syncManager.syncValue("ignore_meta", ignoreMeta); + syncManager.syncValue("ignore_damage", ignoreDamage); syncManager.syncValue("ignore_nbt", ignoreNBT); return GTGuis.createPopupPanel("simple_item_filter", 18 * 4 + 9, 18 * 4 + 9) @@ -147,22 +147,21 @@ public void initUI(Consumer widgetGroup) { }))) .build()) .child(new Column().width(18).coverChildren() - // todo add overlays for blacklist, meta, and nbt .child(new CycleButtonWidget() .value(blacklist) - .textureGetter(state -> state == 1 ? GTGuiTextures.MC_BUTTON : GTGuiTextures.MC_BUTTON_DISABLED) - .addTooltip(0, IKey.lang("cover.filter.blacklist.enabled")) - .addTooltip(1, IKey.lang("cover.filter.blacklist.disabled"))) + .textureGetter(state -> GTGuiTextures.BUTTON_BLACKLIST[state]) + .addTooltip(0, IKey.lang("cover.filter.blacklist.disabled")) + .addTooltip(1, IKey.lang("cover.filter.blacklist.enabled"))) .child(new CycleButtonWidget() - .value(ignoreMeta) - .textureGetter(state -> state == 1 ? GTGuiTextures.MC_BUTTON : GTGuiTextures.MC_BUTTON_DISABLED) - .addTooltip(0, IKey.lang("cover.item_filter.ignore_damage.enabled")) - .addTooltip(1, IKey.lang("cover.item_filter.ignore_damage.disabled"))) + .value(ignoreDamage) + .textureGetter(state -> GTGuiTextures.BUTTON_IGNORE_DAMAGE[state]) + .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) - .textureGetter(state -> state == 1 ? GTGuiTextures.MC_BUTTON : GTGuiTextures.MC_BUTTON_DISABLED) - .addTooltip(0, IKey.lang("cover.item_filter.ignore_nbt.enabled")) - .addTooltip(1, IKey.lang("cover.item_filter.ignore_nbt.disabled"))))); + .textureGetter(state -> GTGuiTextures.BUTTON_IGNORE_NBT[state]) + .addTooltip(0, IKey.lang("cover.item_filter.ignore_nbt.disabled")) + .addTooltip(1, IKey.lang("cover.item_filter.ignore_nbt.enabled"))))); } @Override From c11f62b085b32e659210fc0c7bdbb2438690171b Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 31 Dec 2023 18:55:44 -0700 Subject: [PATCH 023/260] add buttons for conveyor mode make widget return explicit --- .../gregtech/common/covers/CoverConveyor.java | 73 +++++++++++-------- 1 file changed, 43 insertions(+), 30 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 57219633744..22c9c8f8fbb 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -529,42 +529,55 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag panel.child(createTitleRow()) .child(new Column().top(24).margin(4, 0) - .widthRel(1f).coverChildrenHeight() - .child(new Row().coverChildrenHeight() - .marginBottom(2).widthRel(1f) - .child(new ButtonWidget<>() - .left(0) - .width(16) - .onMousePressed(mouseButton -> { - throughput.setValue(throughput.getValue() + 1, true, true); - return true; - })) - .child(new TextFieldWidget() - .setMaxLength(4) - .left(16).right(16) - .setNumbers(1, maxItemTransferRate) - .background(GTGuiTextures.DISPLAY)) - .child(new ButtonWidget<>() - .right(0) - .width(16) - .onMousePressed(mouseButton -> { - throughput.setValue(throughput.getValue() - 1, true, true); - return true; - }))) - .child(getItemFilterContainer() - .initUI(panel, guiSyncManager)) - .child(new Row().coverChildrenHeight() - .marginBottom(2).widthRel(1f) - .child(createManualIoButton(manualIOmode, ManualImportExportMode.DISABLED)) - .child(createManualIoButton(manualIOmode, ManualImportExportMode.UNFILTERED)) - .child(createManualIoButton(manualIOmode, ManualImportExportMode.FILTERED)))) + .widthRel(1f).coverChildrenHeight() + .child(new Row().coverChildrenHeight() + .marginBottom(2).widthRel(1f) + .child(new ButtonWidget<>() + .left(0) + .width(16) + .onMousePressed(mouseButton -> { + throughput.setValue(throughput.getValue() + 1, true, true); + return true; + })) + .child(new TextFieldWidget() + .setMaxLength(4) + .left(16).right(16) + .setNumbers(1, maxItemTransferRate) + .background(GTGuiTextures.DISPLAY)) + .child(new ButtonWidget<>() + .right(0) + .width(16) + .onMousePressed(mouseButton -> { + throughput.setValue(throughput.getValue() - 1, true, true); + return true; + }))) + .child(getItemFilterContainer() + .initUI(panel, guiSyncManager)) + .child(new Row().coverChildrenHeight() + .marginBottom(2).widthRel(1f) + .child(createManualIoButton(manualIOmode, ManualImportExportMode.DISABLED)) + .child(createManualIoButton(manualIOmode, ManualImportExportMode.UNFILTERED)) + .child(createManualIoButton(manualIOmode, ManualImportExportMode.FILTERED))) + .child(new Row().coverChildrenHeight() + .marginBottom(2).widthRel(1f) + .child(createConveyorModeButton(conveyorMode, ConveyorMode.IMPORT)) + .child(createConveyorModeButton(conveyorMode, ConveyorMode.EXPORT)))) .bindPlayerInventory(); return panel; } - private Widget createManualIoButton(EnumSyncValue value, ManualImportExportMode mode) { + private Widget createManualIoButton(EnumSyncValue value, ManualImportExportMode mode) { return new ToggleButton().size(18) .value(boolValueOf(value, mode)) + // todo make overlay textures for these buttons (disabled, unfiltered, filtered) + .background(GTGuiTextures.MC_BUTTON_DISABLED) + .selectedBackground(GTGuiTextures.MC_BUTTON); + } + + private Widget createConveyorModeButton(EnumSyncValue value, ConveyorMode mode) { + return new ToggleButton().size(18) + .value(boolValueOf(value, mode)) + // todo make overlay textures for these buttons (import, export) .background(GTGuiTextures.MC_BUTTON_DISABLED) .selectedBackground(GTGuiTextures.MC_BUTTON); } From 26f39c596c83f8af5c2bc4f73019db8ec4ed570a Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 1 Jan 2024 01:36:51 -0700 Subject: [PATCH 024/260] add manual io gui overlay ? --- src/main/java/gregtech/api/mui/GTGuiTextures.java | 3 +++ .../gregtech/common/covers/CoverConveyor.java | 3 ++- .../textures/gui/widget/button_manual_io.png | Bin 0 -> 696 bytes 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/assets/gregtech/textures/gui/widget/button_manual_io.png diff --git a/src/main/java/gregtech/api/mui/GTGuiTextures.java b/src/main/java/gregtech/api/mui/GTGuiTextures.java index b5338a318b7..9de2b40d622 100644 --- a/src/main/java/gregtech/api/mui/GTGuiTextures.java +++ b/src/main/java/gregtech/api/mui/GTGuiTextures.java @@ -161,6 +161,9 @@ public static class IDs { public static final UITexture[] BUTTON_IGNORE_NBT = slice("textures/gui/widget/button_filter_nbt.png", 16, 32, 16, 16,true); + public static final UITexture[] BUTTON_MANUAL_IO = slice("textures/gui/widget/button_manual_io.png", + 16, 48, 16, 16, true); + // todo bronze/steel/primitive fluid slots? // SLOT OVERLAYS diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 22c9c8f8fbb..a0d2f54cd5f 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -571,7 +571,8 @@ private Widget createManualIoButton(EnumSyncValue createConveyorModeButton(EnumSyncValue value, ConveyorMode mode) { diff --git a/src/main/resources/assets/gregtech/textures/gui/widget/button_manual_io.png b/src/main/resources/assets/gregtech/textures/gui/widget/button_manual_io.png new file mode 100644 index 0000000000000000000000000000000000000000..babee2448ba0d17c4d268acce4142bcf1f168785 GIT binary patch literal 696 zcmV;p0!RIcP)Px%a!Eu%R7i>KRy}VTK@fclH-LmqVYtF5X(B~*q>NlxDdW;rYWM*uQkl+?@&hPn z(n04cQi>F5Ef>fQQfMO~BwLqQG2+v{Im^+e;O^KD0{JSOC{J3=ar@@o&SQ7(fIElE zgL@Lyoy9Qc3?xj#zDS{Rd|-pdRj%=Wa?40<0A9eFixMhaAu? zfgA!6;g-IFh~P78eEl$0cO)}oHk%2DoG>Qgd7t7KFhkuV2{jqzB7$K4gz0z+0GLem z_&WHY9sPuw3;_NT4_vn(DM=bH%5%({?E6bS`10(b-e|*XtD!J6X0M*YAt#LU+D+b~ zgl1cy>nQ?0(DmjXbiKIt^ic;Y4_y!Fdf^Hb5#|8tqYj8@9u*JVcOP|;W?Sirp$N0$ zL0G>!9(AsD5fk-#T>`*%aa#g_>lUOW$WR z7&Gt%;)ep4mh`56D2R|@=u>|b{1Lfj;GD Date: Mon, 1 Jan 2024 17:54:57 -0700 Subject: [PATCH 025/260] improve manual io overlays --- .../java/gregtech/api/mui/GTGuiTextures.java | 2 +- .../textures/gui/widget/button_manual_io.png | Bin 696 -> 593 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/mui/GTGuiTextures.java b/src/main/java/gregtech/api/mui/GTGuiTextures.java index 9de2b40d622..224cbdc7fbe 100644 --- a/src/main/java/gregtech/api/mui/GTGuiTextures.java +++ b/src/main/java/gregtech/api/mui/GTGuiTextures.java @@ -162,7 +162,7 @@ public static class IDs { 16, 32, 16, 16,true); public static final UITexture[] BUTTON_MANUAL_IO = slice("textures/gui/widget/button_manual_io.png", - 16, 48, 16, 16, true); + 18, 18 * 3, 18, 18, true); // todo bronze/steel/primitive fluid slots? diff --git a/src/main/resources/assets/gregtech/textures/gui/widget/button_manual_io.png b/src/main/resources/assets/gregtech/textures/gui/widget/button_manual_io.png index babee2448ba0d17c4d268acce4142bcf1f168785..a8f8bef7a54b4ea90ce60cff3339f09c17c52c82 100644 GIT binary patch literal 593 zcmV-X0Px%3rR#lR7i>KlreA9Kp2J}r*}=Hv{`7Es#6eRWABi?0|P&S{)=p7%girGN5ns1 zMj~Q`9fb-7DjH%ZDgG=KT?fZ*oZg+|AXwU0vQGBhJ^t?X=NImmUbYWS)w!B&;fr9~ zy1_SBvn>>$GnT>z-yA?-duwMbH1}FuT~2xbr~yC*$)25k`4)IVHW*L{@nl;&Q`YH}v4*{jAv`lWn6DH~+GFu1UxeP}w1%8nQJF28cv zo5yYAYDm|d6Sm3RgZ`5OfG7%07)DGc6NbYfB68>IcDwGL$@Jsm!T{_vcML$iQ7??I zPESiexdKQ;s5k0HYn_f;n%4fViGK^N{aqtTQd&$6AdUsCG)gP9(r8`0Vi7nw@>W#? z5E16{d7!jfj9ZLG-}CWx^l`n4l0*QQMKb`Vv!(Im$nfl-6r=!Rheto3KcN6|9j`wK z6oAC>tw+}ytu%KauBtwbZjWa3sH)P6BnDPI>JNf~KZ`e)fD(Hjz5UF5`B?pdv%B+( zRz1>MbFKey@NS5|mQ;B|`ugbUhhL?j0HD|FnJ|n9L;Ft~$HMvf*YcnCL0Z#Ji|cLi$uGA$_WxkXBVq$h9ErBxEUM-GuyG6%w+bO%u|pRhTCsYtD+6VI|e% fpt6R%=LvZOC-1g#3@g|b00000NkvXXu0mjfs#XxA literal 696 zcmV;p0!RIcP)Px%a!Eu%R7i>KRy}VTK@fclH-LmqVYtF5X(B~*q>NlxDdW;rYWM*uQkl+?@&hPn z(n04cQi>F5Ef>fQQfMO~BwLqQG2+v{Im^+e;O^KD0{JSOC{J3=ar@@o&SQ7(fIElE zgL@Lyoy9Qc3?xj#zDS{Rd|-pdRj%=Wa?40<0A9eFixMhaAu? zfgA!6;g-IFh~P78eEl$0cO)}oHk%2DoG>Qgd7t7KFhkuV2{jqzB7$K4gz0z+0GLem z_&WHY9sPuw3;_NT4_vn(DM=bH%5%({?E6bS`10(b-e|*XtD!J6X0M*YAt#LU+D+b~ zgl1cy>nQ?0(DmjXbiKIt^ic;Y4_y!Fdf^Hb5#|8tqYj8@9u*JVcOP|;W?Sirp$N0$ zL0G>!9(AsD5fk-#T>`*%aa#g_>lUOW$WR z7&Gt%;)ep4mh`56D2R|@=u>|b{1Lfj;GD Date: Mon, 1 Jan 2024 17:56:03 -0700 Subject: [PATCH 026/260] fix issues with setting transfer rate in ui --- .../gregtech/common/covers/CoverConveyor.java | 78 +++++++++++++------ 1 file changed, 54 insertions(+), 24 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index a0d2f54cd5f..11499f4d5bc 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -1,11 +1,5 @@ package gregtech.common.covers; -import com.cleanroommc.modularui.widget.Widget; - -import com.cleanroommc.modularui.widgets.ToggleButton; - -import com.cleanroommc.modularui.widgets.layout.Column; - import gregtech.api.GTValues; import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; @@ -57,12 +51,17 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; +import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.MouseData; import com.cleanroommc.modularui.value.sync.EnumSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.IntSyncValue; +import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.ButtonWidget; +import com.cleanroommc.modularui.widgets.ToggleButton; +import com.cleanroommc.modularui.widgets.layout.Column; import com.cleanroommc.modularui.widgets.layout.Row; import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; import it.unimi.dsi.fastutil.ints.IntArrayList; @@ -102,7 +101,7 @@ public CoverConveyor(@NotNull CoverDefinition definition, @NotNull CoverableView } public void setTransferRate(int transferRate) { - this.transferRate = transferRate; + this.transferRate = MathHelper.clamp(transferRate, 1, maxItemTransferRate); CoverableView coverable = getCoverableView(); coverable.markDirty(); @@ -519,11 +518,10 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag EnumSyncValue conveyorMode = new EnumSyncValue<>(ConveyorMode.class, this::getConveyorMode, this::setConveyorMode); - IntSyncValue throughput = new IntSyncValue(this::getTransferRate, this::adjustTransferRate); + IntSyncValue throughput = new IntSyncValue(this::getTransferRate, this::setTransferRate); guiSyncManager.syncValue("manual_io", manualIOmode); guiSyncManager.syncValue("conveyor_mode", conveyorMode); - guiSyncManager.syncValue("transfer_rate", throughput); var panel = GTGuis.createPanel(this, 176, 112 + 176); @@ -533,22 +531,37 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .child(new Row().coverChildrenHeight() .marginBottom(2).widthRel(1f) .child(new ButtonWidget<>() - .left(0) - .width(16) + .left(0).width(18) .onMousePressed(mouseButton -> { - throughput.setValue(throughput.getValue() + 1, true, true); + MouseData data = MouseData.create(mouseButton); + throughput.updateCacheFromSource(false); + int adjust = 1; + if (data.shift) adjust *= 8; + if (data.ctrl) adjust *= 64; + if (data.alt) adjust *= 512; + throughput.setValue(throughput.getValue() - adjust, true, true); return true; })) .child(new TextFieldWidget() - .setMaxLength(4) - .left(16).right(16) + .left(18).right(18) .setNumbers(1, maxItemTransferRate) - .background(GTGuiTextures.DISPLAY)) + .value(throughput) + .background(GTGuiTextures.DISPLAY) + .onUpdateListener(w -> { + if (throughput.updateCacheFromSource(false)) { + w.setText(throughput.getStringValue()); + } + })) .child(new ButtonWidget<>() - .right(0) - .width(16) + .right(0).width(18) .onMousePressed(mouseButton -> { - throughput.setValue(throughput.getValue() - 1, true, true); + MouseData data = MouseData.create(mouseButton); + throughput.updateCacheFromSource(false); + int adjust = 1; + if (data.shift) adjust *= 8; + if (data.ctrl) adjust *= 64; + if (data.alt) adjust *= 512; + throughput.setValue(throughput.getValue() + adjust, true, true); return true; }))) .child(getItemFilterContainer() @@ -557,11 +570,17 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .marginBottom(2).widthRel(1f) .child(createManualIoButton(manualIOmode, ManualImportExportMode.DISABLED)) .child(createManualIoButton(manualIOmode, ManualImportExportMode.UNFILTERED)) - .child(createManualIoButton(manualIOmode, ManualImportExportMode.FILTERED))) + .child(createManualIoButton(manualIOmode, ManualImportExportMode.FILTERED)) + .child(IKey.lang("Manual IO Mode") + .asWidget().right(0) + .height(18).topRel(0.5f))) .child(new Row().coverChildrenHeight() .marginBottom(2).widthRel(1f) .child(createConveyorModeButton(conveyorMode, ConveyorMode.IMPORT)) - .child(createConveyorModeButton(conveyorMode, ConveyorMode.EXPORT)))) + .child(createConveyorModeButton(conveyorMode, ConveyorMode.EXPORT)) + .child(IKey.lang("Conveyor Mode") + .asWidget().right(0) + .height(18).topRel(0.5f)))) .bindPlayerInventory(); return panel; } @@ -569,10 +588,14 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag private Widget createManualIoButton(EnumSyncValue value, ManualImportExportMode mode) { return new ToggleButton().size(18) .value(boolValueOf(value, mode)) - // todo make overlay textures for these buttons (disabled, unfiltered, filtered) .background(GTGuiTextures.MC_BUTTON_DISABLED) .selectedBackground(GTGuiTextures.MC_BUTTON) - .overlay(GTGuiTextures.BUTTON_MANUAL_IO[mode.ordinal()].asIcon().size(16)); + .overlay(GTGuiTextures.BUTTON_MANUAL_IO[mode.ordinal()]) + .tooltip(tooltip -> tooltip.addLine(switch (mode) { + case DISABLED -> IKey.lang("cover.universal.manual_import_export.mode.disabled"); + case UNFILTERED -> IKey.lang("cover.universal.manual_import_export.mode.unfiltered"); + case FILTERED -> IKey.lang("cover.universal.manual_import_export.mode.filtered"); + })); } private Widget createConveyorModeButton(EnumSyncValue value, ConveyorMode mode) { @@ -580,7 +603,12 @@ private Widget createConveyorModeButton(EnumSyncValue tooltip.addLine(switch (mode) { + case EXPORT -> IKey.lang("cover.conveyor.mode.export"); + case IMPORT -> IKey.lang("cover.conveyor.mode.import"); + })); } protected ModularUI buildUI(ModularUI.Builder builder, EntityPlayer player) { @@ -652,8 +680,9 @@ public void readCustomData(int discriminator, @NotNull PacketBuffer buf) { } @Override - public void writeInitialSyncData(PacketBuffer packetBuffer) { + public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.writeInitialSyncData(packetBuffer); + packetBuffer.writeInt(transferRate); packetBuffer.writeEnumValue(conveyorMode); packetBuffer.writeEnumValue(distributionMode); getItemFilterContainer().writeInitialSyncData(packetBuffer); @@ -662,6 +691,7 @@ public void writeInitialSyncData(PacketBuffer packetBuffer) { @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.readInitialSyncData(packetBuffer); + this.transferRate = packetBuffer.readInt(); this.conveyorMode = packetBuffer.readEnumValue(ConveyorMode.class); this.distributionMode = packetBuffer.readEnumValue(DistributionMode.class); getItemFilterContainer().readInitialSyncData(packetBuffer); From c6120ba7c4e86eccfbb695f501f0cba5b462d1f1 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 1 Jan 2024 18:03:50 -0700 Subject: [PATCH 027/260] why you no position right ??? --- src/main/java/gregtech/common/covers/CoverConveyor.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 11499f4d5bc..dcb0771fa02 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -571,16 +571,16 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .child(createManualIoButton(manualIOmode, ManualImportExportMode.DISABLED)) .child(createManualIoButton(manualIOmode, ManualImportExportMode.UNFILTERED)) .child(createManualIoButton(manualIOmode, ManualImportExportMode.FILTERED)) - .child(IKey.lang("Manual IO Mode") + .child(IKey.lang("Manual IO Mode").scale(1.1f) .asWidget().right(0) - .height(18).topRel(0.5f))) + .height(18))) .child(new Row().coverChildrenHeight() .marginBottom(2).widthRel(1f) .child(createConveyorModeButton(conveyorMode, ConveyorMode.IMPORT)) .child(createConveyorModeButton(conveyorMode, ConveyorMode.EXPORT)) - .child(IKey.lang("Conveyor Mode") + .child(IKey.lang("Conveyor Mode").scale(1.1f) .asWidget().right(0) - .height(18).topRel(0.5f)))) + .height(18)))) .bindPlayerInventory(); return panel; } From c986d8c31b79c36c28c7df3dc136253d8b2493f1 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 1 Jan 2024 19:18:00 -0700 Subject: [PATCH 028/260] make item filter text dynamic and center right --- .../covers/filter/ItemFilterContainer.java | 51 +++++++++++-------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index d867bcb4b23..4a114f82162 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -1,5 +1,7 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.api.widget.IWidget; +import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.widgets.layout.Row; import gregtech.api.gui.GuiTextures; @@ -134,7 +136,7 @@ public void blacklistUI(int y, Consumer widgetGroup, Bo } /** Uses Cleanroom MUI*/ - public ParentWidget initUI(ModularPanel main, GuiSyncManager manager) { + public IWidget initUI(ModularPanel main, GuiSyncManager manager) { var slotGroup = new SlotGroup("filter_slot", 1, true); manager.registerSlotGroup(slotGroup); var panel = new PanelSyncHandler(main) { @@ -145,28 +147,33 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) }; manager.syncValue("filter_panel", panel); - return new Column().coverChildrenHeight() + return new Row().coverChildrenHeight() .marginBottom(2).widthRel(1f) - .child(IKey.lang("cover.conveyor.item_filter.title").asWidget().left(0)) - .child(new Row().height(18) - .child(new ItemSlot() - .slot(SyncHandlers.itemSlot(filterInventory, 0) - .slotGroup(slotGroup) - .filter(this::isFilter)) - .size(ItemSlot.SIZE) - .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY)) - .child(new ButtonWidget<>() - .setEnabledIf(w -> hasItemFilter()) - .onMousePressed(i -> { - if (!panel.isPanelOpen()) { - panel.openPanel(); - return true; - } else if (panel.isValid()) { - panel.closePanel(); - return true; - } - return false; - }))); + .child(new ItemSlot() + .slot(SyncHandlers.itemSlot(filterInventory, 0) + .slotGroup(slotGroup) + .filter(this::isFilter) + .changeListener((newItem, onlyAmountChanged, client, init) -> { + })) + .size(18) + .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY)) + .child(new ButtonWidget<>() + .setEnabledIf(w -> hasItemFilter()) + .onMousePressed(i -> { + if (!panel.isPanelOpen()) { + panel.openPanel(); + return true; + } else if (panel.isValid()) { + panel.closePanel(); + return true; + } + return false; + })) + .child(IKey.dynamic(() -> hasItemFilter() ? + getFilterInventory().getStackInSlot(0).getDisplayName() : + IKey.lang("cover.conveyor.item_filter.title").get()) + .alignment(Alignment.CenterRight).asWidget() + .left(36).right(0).height(18)); } protected void onFilterSlotChange(boolean notify) { From d78f41e233ac7da6bd509b0a619904dc84a00457 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 1 Jan 2024 19:19:42 -0700 Subject: [PATCH 029/260] move text to center right move mousedata stuff into own method --- .../gregtech/common/covers/CoverConveyor.java | 48 +++++++++++-------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index dcb0771fa02..f432782c845 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -29,6 +29,7 @@ import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.EnumDyeColor; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; @@ -52,8 +53,10 @@ import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.api.widget.Interactable; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.utils.MouseData; import com.cleanroommc.modularui.value.sync.EnumSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; @@ -526,24 +529,23 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag var panel = GTGuis.createPanel(this, 176, 112 + 176); panel.child(createTitleRow()) - .child(new Column().top(24).margin(4, 0) + .child(new Column().top(24).margin(7, 0) .widthRel(1f).coverChildrenHeight() .child(new Row().coverChildrenHeight() .marginBottom(2).widthRel(1f) .child(new ButtonWidget<>() .left(0).width(18) +// .overlay() todo make number increment overlay .onMousePressed(mouseButton -> { - MouseData data = MouseData.create(mouseButton); throughput.updateCacheFromSource(false); - int adjust = 1; - if (data.shift) adjust *= 8; - if (data.ctrl) adjust *= 64; - if (data.alt) adjust *= 512; - throughput.setValue(throughput.getValue() - adjust, true, true); + int val = throughput.getValue() - getIncrementValue(MouseData.create(mouseButton)); + throughput.setValue(val, true, true); + Interactable.playButtonClickSound(); return true; })) .child(new TextFieldWidget() .left(18).right(18) + .setTextColor(EnumDyeColor.WHITE.getColorValue()) .setNumbers(1, maxItemTransferRate) .value(throughput) .background(GTGuiTextures.DISPLAY) @@ -554,16 +556,14 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag })) .child(new ButtonWidget<>() .right(0).width(18) +// .overlay() todo make number increment overlay .onMousePressed(mouseButton -> { - MouseData data = MouseData.create(mouseButton); throughput.updateCacheFromSource(false); - int adjust = 1; - if (data.shift) adjust *= 8; - if (data.ctrl) adjust *= 64; - if (data.alt) adjust *= 512; - throughput.setValue(throughput.getValue() + adjust, true, true); + int val = throughput.getValue() + getIncrementValue(MouseData.create(mouseButton)); + throughput.setValue(val, true, true); + Interactable.playButtonClickSound(); return true; - }))) + })))) .child(getItemFilterContainer() .initUI(panel, guiSyncManager)) .child(new Row().coverChildrenHeight() @@ -571,16 +571,18 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .child(createManualIoButton(manualIOmode, ManualImportExportMode.DISABLED)) .child(createManualIoButton(manualIOmode, ManualImportExportMode.UNFILTERED)) .child(createManualIoButton(manualIOmode, ManualImportExportMode.FILTERED)) - .child(IKey.lang("Manual IO Mode").scale(1.1f) - .asWidget().right(0) + .child(IKey.lang("Manual IO Mode") + .asWidget() + .align(Alignment.CenterRight) .height(18))) .child(new Row().coverChildrenHeight() .marginBottom(2).widthRel(1f) .child(createConveyorModeButton(conveyorMode, ConveyorMode.IMPORT)) .child(createConveyorModeButton(conveyorMode, ConveyorMode.EXPORT)) - .child(IKey.lang("Conveyor Mode").scale(1.1f) - .asWidget().right(0) - .height(18)))) + .child(IKey.lang("Conveyor Mode") + .asWidget() + .align(Alignment.CenterRight) + .height(18))) .bindPlayerInventory(); return panel; } @@ -611,6 +613,14 @@ private Widget createConveyorModeButton(EnumSyncValue Date: Tue, 2 Jan 2024 19:58:40 -0700 Subject: [PATCH 030/260] move and rename manual io overlay add conveyor mode overlay --- src/main/java/gregtech/api/mui/GTGuiTextures.java | 5 +++-- .../gui/overlay/conveyor_mode_overlay.png | Bin 0 -> 514 bytes .../manual_io_overlay.png} | Bin 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/assets/gregtech/textures/gui/overlay/conveyor_mode_overlay.png rename src/main/resources/assets/gregtech/textures/gui/{widget/button_manual_io.png => overlay/manual_io_overlay.png} (100%) diff --git a/src/main/java/gregtech/api/mui/GTGuiTextures.java b/src/main/java/gregtech/api/mui/GTGuiTextures.java index 224cbdc7fbe..e503a5b56f1 100644 --- a/src/main/java/gregtech/api/mui/GTGuiTextures.java +++ b/src/main/java/gregtech/api/mui/GTGuiTextures.java @@ -160,9 +160,10 @@ public static class IDs { 16, 32, 16, 16,true); public static final UITexture[] BUTTON_IGNORE_NBT = slice("textures/gui/widget/button_filter_nbt.png", 16, 32, 16, 16,true); - - public static final UITexture[] BUTTON_MANUAL_IO = slice("textures/gui/widget/button_manual_io.png", + public static final UITexture[] MANUAL_IO_OVERLAY = slice("textures/gui/overlay/manual_io_overlay.png", 18, 18 * 3, 18, 18, true); + public static final UITexture[] CONVEYOR_MODE_OVERLAY = slice("textures/gui/overlay/conveyor_mode_overlay.png", + 18, 18 * 2, 18, 18, true); // todo bronze/steel/primitive fluid slots? diff --git a/src/main/resources/assets/gregtech/textures/gui/overlay/conveyor_mode_overlay.png b/src/main/resources/assets/gregtech/textures/gui/overlay/conveyor_mode_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..0c2a1ac6212f08fcf18c1e225ab71fb63aff4cfc GIT binary patch literal 514 zcmV+d0{#7oP)Px$yh%hsR7i>Kl)p+NQ5431G2srRN@H<_zy=1=*`*M)v64JNQUs4dGFLy{yVn^jnALe?(y@lgfV zn2=HE*x-mBf5T&qixl?0I*kcQc-WrRIoQW1B+#5g`P3|zR&Hn*y`Z&bI-N2ajhM}5 zZ!bITRSuGY$_bfQ?f6TOile54tdw07a{DLb4#?-!A94zOBsl}}=Kufz07*qoM6N<$ Ef??$9QUCw| literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/gui/widget/button_manual_io.png b/src/main/resources/assets/gregtech/textures/gui/overlay/manual_io_overlay.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/widget/button_manual_io.png rename to src/main/resources/assets/gregtech/textures/gui/overlay/manual_io_overlay.png From 8f0abeb78f654a65fb3faefa873bddb36ae15fd0 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 2 Jan 2024 20:00:40 -0700 Subject: [PATCH 031/260] add overlay for amount adjustment fix errant `)`` reduce adjust multipliers --- .../gregtech/common/covers/CoverConveyor.java | 46 +++++++++++++------ 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index f432782c845..65a637cddd0 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -535,14 +535,14 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .marginBottom(2).widthRel(1f) .child(new ButtonWidget<>() .left(0).width(18) -// .overlay() todo make number increment overlay .onMousePressed(mouseButton -> { throughput.updateCacheFromSource(false); int val = throughput.getValue() - getIncrementValue(MouseData.create(mouseButton)); throughput.setValue(val, true, true); Interactable.playButtonClickSound(); return true; - })) + }) + .onUpdateListener(w -> w.overlay(createAdjustOverlay(false)))) .child(new TextFieldWidget() .left(18).right(18) .setTextColor(EnumDyeColor.WHITE.getColorValue()) @@ -556,14 +556,14 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag })) .child(new ButtonWidget<>() .right(0).width(18) -// .overlay() todo make number increment overlay .onMousePressed(mouseButton -> { throughput.updateCacheFromSource(false); int val = throughput.getValue() + getIncrementValue(MouseData.create(mouseButton)); throughput.setValue(val, true, true); Interactable.playButtonClickSound(); return true; - })))) + }) + .onUpdateListener(w -> w.overlay(createAdjustOverlay(true))))) .child(getItemFilterContainer() .initUI(panel, guiSyncManager)) .child(new Row().coverChildrenHeight() @@ -582,7 +582,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .child(IKey.lang("Conveyor Mode") .asWidget() .align(Alignment.CenterRight) - .height(18))) + .height(18)))) .bindPlayerInventory(); return panel; } @@ -592,35 +592,51 @@ private Widget createManualIoButton(EnumSyncValue tooltip.addLine(switch (mode) { + .overlay(GTGuiTextures.MANUAL_IO_OVERLAY[mode.ordinal()]) + .addTooltipLine(switch (mode) { case DISABLED -> IKey.lang("cover.universal.manual_import_export.mode.disabled"); case UNFILTERED -> IKey.lang("cover.universal.manual_import_export.mode.unfiltered"); case FILTERED -> IKey.lang("cover.universal.manual_import_export.mode.filtered"); - })); + }); } private Widget createConveyorModeButton(EnumSyncValue value, ConveyorMode mode) { return new ToggleButton().size(18) .value(boolValueOf(value, mode)) - // todo make overlay textures for these buttons (import, export) .background(GTGuiTextures.MC_BUTTON_DISABLED) .selectedBackground(GTGuiTextures.MC_BUTTON) -// .overlay() - .tooltip(tooltip -> tooltip.addLine(switch (mode) { + .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY[mode.ordinal()]) + .addTooltipLine(switch (mode) { case EXPORT -> IKey.lang("cover.conveyor.mode.export"); case IMPORT -> IKey.lang("cover.conveyor.mode.import"); - })); + }); } protected int getIncrementValue(MouseData data) { int adjust = 1; - if (data.shift) adjust *= 8; - if (data.ctrl) adjust *= 64; - if (data.alt) adjust *= 512; + if (data.shift) adjust *= 4; + if (data.ctrl) adjust *= 16; + if (data.alt) adjust *= 64; return adjust; } + protected IKey createAdjustOverlay(boolean increment) { + final StringBuilder builder = new StringBuilder(); + builder.append(getIncrementValue(MouseData.create(-1))); + builder.insert(0, increment ? '+' : '-'); + + float scale = 1f; + if (builder.length() == 3) { + scale = 0.8f; + } else if (builder.length() == 4) { + scale = 0.6f; + } else if (builder.length() > 4) { + scale = 0.5f; + } + return IKey.str(builder.toString()) + .scale(scale); + } + protected ModularUI buildUI(ModularUI.Builder builder, EntityPlayer player) { return builder.build(this, player); } From 312fc41064a841e44b6fbf1e813731f525358f15 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 3 Jan 2024 14:17:38 -0700 Subject: [PATCH 032/260] add an int supplier to filter container wrong method call in wrapper use int supplier for filter max stack size --- .../common/covers/filter/ItemFilter.java | 11 +++-- .../covers/filter/ItemFilterContainer.java | 45 ++++++++++--------- .../covers/filter/ItemFilterWrapper.java | 2 +- .../covers/filter/SimpleItemFilter.java | 2 +- 4 files changed, 33 insertions(+), 27 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index 83b427508cf..22f12e550fd 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -10,20 +10,25 @@ import org.jetbrains.annotations.NotNull; import java.util.function.Consumer; +import java.util.function.Supplier; public abstract class ItemFilter { public static MatchResult EMPTY_MATCH = new MatchResult<>(Match.SUCCEED, -1); private IDirtyNotifiable dirtyNotifiable; - private int maxStackSize = Integer.MAX_VALUE; + private Supplier maxStackSizer = () -> Integer.MAX_VALUE; protected boolean isBlacklistFilter = false; public final int getMaxStackSize() { - return maxStackSize; + return maxStackSizer.get(); } public final void setMaxStackSize(int maxStackSize) { - this.maxStackSize = maxStackSize; + setMaxStackSizer(() -> maxStackSize); + } + + public final void setMaxStackSizer(Supplier maxStackSizer) { + this.maxStackSizer = maxStackSizer; onMaxStackSizeChange(); } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 4a114f82162..177b762d987 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -1,9 +1,5 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.api.widget.IWidget; -import com.cleanroommc.modularui.utils.Alignment; -import com.cleanroommc.modularui.widgets.layout.Row; - import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.LabelWidget; import gregtech.api.gui.widgets.ServerWidgetGroup; @@ -20,20 +16,22 @@ import net.minecraftforge.items.ItemStackHandler; 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.GuiSyncManager; import com.cleanroommc.modularui.value.sync.PanelSyncHandler; import com.cleanroommc.modularui.value.sync.SyncHandlers; -import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widgets.ButtonWidget; import com.cleanroommc.modularui.widgets.ItemSlot; -import com.cleanroommc.modularui.widgets.layout.Column; +import com.cleanroommc.modularui.widgets.layout.Row; import com.cleanroommc.modularui.widgets.slot.SlotGroup; import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.util.function.BooleanSupplier; import java.util.function.Consumer; +import java.util.function.Supplier; public class ItemFilterContainer implements INBTSerializable { @@ -41,6 +39,7 @@ public class ItemFilterContainer implements INBTSerializable { private final ItemFilterWrapper filterWrapper; private final IDirtyNotifiable dirtyNotifiable; private int maxStackSize = 1; + private Supplier stackSizer = () -> this.maxStackSize; private ItemFilter currentItemFilter; private Runnable onFilterInstanceChange; private int transferStackSize; @@ -82,7 +81,7 @@ public ItemFilterWrapper getFilterWrapper() { } public int getMaxStackSize() { - return maxStackSize; + return hasItemFilter() ? currentItemFilter.getMaxStackSize() : 1; } public int getTransferStackSize() { @@ -94,7 +93,7 @@ public int getTransferStackSize() { public void setTransferStackSize(int transferStackSize) { this.transferStackSize = MathHelper.clamp(transferStackSize, 1, getMaxStackSize()); - this.maxStackSize = getTransferStackSize(); + this.stackSizer = () -> this.transferStackSize; onFilterInstanceChange(); dirtyNotifiable.markAsDirty(); } @@ -120,13 +119,14 @@ public void initUI(int y, Consumer widgetGroup) { .setBackgroundTexture(GuiTextures.SLOT, GuiTextures.FILTER_SLOT_OVERLAY)); this.initFilterUI(y + 38, widgetGroup); - this.blacklistUI(y + 38, widgetGroup, () -> true); } - - public void initFilterUI(int y, Consumer widgetGroup) { + /** Deprecated, uses old builtin MUI*/ + @Deprecated + protected void initFilterUI(int y, Consumer widgetGroup) { widgetGroup.accept(new WidgetGroupItemFilter(y, this::getItemFilter)); } - + /** Deprecated, uses old builtin MUI*/ + @Deprecated public void blacklistUI(int y, Consumer widgetGroup, BooleanSupplier showBlacklistButton) { ServerWidgetGroup blacklistButton = new ServerWidgetGroup(() -> getItemFilter() != null); blacklistButton.addWidget(new ToggleButtonWidget(144, y, 20, 20, GuiTextures.BUTTON_BLACKLIST, @@ -142,6 +142,7 @@ public IWidget initUI(ModularPanel main, GuiSyncManager manager) { var panel = new PanelSyncHandler(main) { @Override public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { + getItemFilter().setMaxStackSizer(stackSizer); return getItemFilter().createUI(mainPanel, syncManager); } }; @@ -152,9 +153,7 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) .child(new ItemSlot() .slot(SyncHandlers.itemSlot(filterInventory, 0) .slotGroup(slotGroup) - .filter(this::isFilter) - .changeListener((newItem, onlyAmountChanged, client, init) -> { - })) + .filter(this::isFilter)) .size(18) .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY)) .child(new ButtonWidget<>() @@ -190,7 +189,7 @@ protected void onFilterSlotChange(boolean notify) { newItemFilter.getClass() != currentItemFilter.getClass()) { setItemFilter(newItemFilter); if (notify) onFilterInstanceChange(); - } + } } public void setOnFilterInstanceChange(Runnable onFilterInstanceChange) { @@ -199,17 +198,19 @@ public void setOnFilterInstanceChange(Runnable onFilterInstanceChange) { public void onFilterInstanceChange() { this.maxStackSize = isBlacklistFilter() ? 1 : getMaxStackSize(); - if (currentItemFilter != null) { - currentItemFilter.setMaxStackSize(getMaxStackSize()); - } dirtyNotifiable.markAsDirty(); } public void setMaxStackSize(int maxStackSizeLimit) { this.maxStackSize = maxStackSizeLimit; - setTransferStackSize(transferStackSize); + if (hasItemFilter() && !isBlacklistFilter()) { + setFilterStackSizer(() -> this.maxStackSize); + } } + public void setFilterStackSizer(Supplier stackSizer) { + this.currentItemFilter.setMaxStackSizer(stackSizer); + } public boolean showGlobalTransferLimitSlider() { return getMaxStackSize() > 1 && (isBlacklistFilter() || !hasItemFilter()|| currentItemFilter.showGlobalTransferLimitSlider()); } @@ -295,8 +296,8 @@ public NBTTagCompound serializeNBT() { public void deserializeNBT(NBTTagCompound tagCompound) { this.filterInventory.deserializeNBT(tagCompound.getCompoundTag("FilterInventory")); this.currentItemFilter = FilterTypeRegistry.getItemFilterForStack(getFilterInventory().getStackInSlot(0)); - setMaxStackSize(tagCompound.getInteger("MaxStackSize")); - setTransferStackSize(tagCompound.getInteger("TransferStackSize")); + this.maxStackSize = tagCompound.getInteger("MaxStackSize"); + this.transferStackSize = tagCompound.getInteger("TransferStackSize"); if (getItemFilter() != null) { this.getItemFilter().readFromNBT(tagCompound.getCompoundTag("Filter")); } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java index 1619d0eb8d5..c8752e9b608 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java @@ -13,7 +13,7 @@ public ItemFilterWrapper(ItemFilterContainer container) { } public void initUI(int y, Consumer widgetGroup) { - container.initFilterUI(y, widgetGroup); + container.initUI(y, widgetGroup); } public void blacklistUI(int y, Consumer widgetGroup, BooleanSupplier showBlacklistButton) { diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 683cb1c790d..42c5282403c 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -138,7 +138,7 @@ public void initUI(Consumer widgetGroup) { "XXX", "XXX") .key('X', index -> new ItemSlot() - .slot(new PhantomItemSlot(itemFilterSlots, index, () -> Integer.MAX_VALUE) + .slot(new PhantomItemSlot(itemFilterSlots, index, this::getMaxStackSize) .slotGroup(filterInventory) .changeListener((newItem, onlyAmountChanged, client, init) -> { if (onlyAmountChanged && !init) { From bf932b1341c792c7185ad388c952f334324449c4 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 3 Jan 2024 14:18:44 -0700 Subject: [PATCH 033/260] add stack sizer to conveyor --- .../java/gregtech/common/covers/CoverConveyor.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 65a637cddd0..b4836009b31 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -528,7 +528,11 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag var panel = GTGuis.createPanel(this, 176, 112 + 176); - panel.child(createTitleRow()) + if (getItemFilterContainer().hasItemFilter()) { + getItemFilterContainer().setFilterStackSizer(this::getMaxStackSize); + } + + return panel.child(createTitleRow()) .child(new Column().top(24).margin(7, 0) .widthRel(1f).coverChildrenHeight() .child(new Row().coverChildrenHeight() @@ -584,7 +588,6 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .align(Alignment.CenterRight) .height(18)))) .bindPlayerInventory(); - return panel; } private Widget createManualIoButton(EnumSyncValue value, ManualImportExportMode mode) { @@ -637,6 +640,10 @@ protected IKey createAdjustOverlay(boolean increment) { .scale(scale); } + protected int getMaxStackSize() { + return 1; + } + protected ModularUI buildUI(ModularUI.Builder builder, EntityPlayer player) { return builder.build(this, player); } From 52d0af2c4247aa2c5d5df364fb9516bacf7ace59 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 3 Jan 2024 14:19:12 -0700 Subject: [PATCH 034/260] begin work on porting robot arm --- .../common/covers/CoverRoboticArm.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index 4aea26e3857..23bf6efc1dc 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -1,5 +1,12 @@ package gregtech.common.covers; +import com.cleanroommc.modularui.factory.SidedPosGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.EnumSyncValue; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; + +import com.cleanroommc.modularui.widgets.layout.Row; + import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; import gregtech.api.gui.GuiTextures; @@ -184,6 +191,23 @@ protected String getUITitle() { return "cover.robotic_arm.title"; } + @Override + public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { + EnumSyncValue transferMode = new EnumSyncValue<>(TransferMode.class, this::getTransferMode, this::setTransferMode); + guiSyncManager.syncValue("transfer_mode", transferMode); + + return super.buildUI(guiData, guiSyncManager) + .child(new Row()); + } + + @Override + protected int getMaxStackSize() { + return switch (this.transferMode) { + case TRANSFER_EXACT, KEEP_EXACT -> getTransferRate(); + case TRANSFER_ANY -> 1; + }; + } + @Override protected ModularUI buildUI(Builder builder, EntityPlayer player) { WidgetGroup primaryGroup = new WidgetGroup(); From 8dcf3c721a9b0ed8d1496ce419f21fbb09a093ac Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 3 Jan 2024 14:52:12 -0700 Subject: [PATCH 035/260] fix item filters as cover for now --- src/main/java/gregtech/common/covers/CoverItemFilter.java | 2 +- .../java/gregtech/common/covers/filter/ItemFilterContainer.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index f8750d8bca6..1e69cbaebfb 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -97,7 +97,7 @@ public ModularUI createUI(EntityPlayer player) { filterGroup.addWidget(new CycleButtonWidget(10, 20, 110, 20, GTUtility.mapToString(ItemFilterMode.values(), it -> it.localeName), () -> filterMode.ordinal(), (newMode) -> setFilterMode(ItemFilterMode.values()[newMode]))); - this.itemFilter.initUI(45, filterGroup::addWidget); + this.itemFilter.initFilterUI(45, filterGroup::addWidget); this.itemFilter.blacklistUI(45, filterGroup::addWidget, () -> true); return ModularUI.builder(GuiTextures.BACKGROUND, 176, 105 + 82) .widget(filterGroup) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 177b762d987..879168a8910 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -122,7 +122,7 @@ public void initUI(int y, Consumer widgetGroup) { } /** Deprecated, uses old builtin MUI*/ @Deprecated - protected void initFilterUI(int y, Consumer widgetGroup) { + public void initFilterUI(int y, Consumer widgetGroup) { widgetGroup.accept(new WidgetGroupItemFilter(y, this::getItemFilter)); } /** Deprecated, uses old builtin MUI*/ From ac9cdd3b6fc6d3bba6e5483eaa1c80fefaeb67b2 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 3 Jan 2024 14:53:22 -0700 Subject: [PATCH 036/260] move construction of UI to `createUI()` add transfer mode buttons --- .../gregtech/common/covers/CoverConveyor.java | 125 +++++++++--------- .../common/covers/CoverRoboticArm.java | 50 +++++-- 2 files changed, 104 insertions(+), 71 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index b4836009b31..810cc756afc 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -61,6 +61,7 @@ import com.cleanroommc.modularui.value.sync.EnumSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.IntSyncValue; +import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.ButtonWidget; import com.cleanroommc.modularui.widgets.ToggleButton; @@ -515,6 +516,18 @@ public boolean usesMui2() { @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { + var panel = GTGuis.createPanel(this, 176, 112 + 176); + + if (getItemFilterContainer().hasItemFilter()) { + getItemFilterContainer().setFilterStackSizer(this::getMaxStackSize); + } + + return panel.child(createTitleRow()) + .child(createUI(panel, guiSyncManager)) + .bindPlayerInventory(); + } + + protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager guiSyncManager) { EnumSyncValue manualIOmode = new EnumSyncValue<>(ManualImportExportMode.class, this::getManualImportExportMode, this::setManualImportExportMode); @@ -526,68 +539,60 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag guiSyncManager.syncValue("manual_io", manualIOmode); guiSyncManager.syncValue("conveyor_mode", conveyorMode); - var panel = GTGuis.createPanel(this, 176, 112 + 176); - - if (getItemFilterContainer().hasItemFilter()) { - getItemFilterContainer().setFilterStackSizer(this::getMaxStackSize); - } - - return panel.child(createTitleRow()) - .child(new Column().top(24).margin(7, 0) - .widthRel(1f).coverChildrenHeight() - .child(new Row().coverChildrenHeight() - .marginBottom(2).widthRel(1f) - .child(new ButtonWidget<>() - .left(0).width(18) - .onMousePressed(mouseButton -> { - throughput.updateCacheFromSource(false); - int val = throughput.getValue() - getIncrementValue(MouseData.create(mouseButton)); - throughput.setValue(val, true, true); - Interactable.playButtonClickSound(); - return true; + return new Column().top(24).margin(7, 0) + .widthRel(1f).coverChildrenHeight() + .child(new Row().coverChildrenHeight() + .marginBottom(2).widthRel(1f) + .child(new ButtonWidget<>() + .left(0).width(18) + .onMousePressed(mouseButton -> { + throughput.updateCacheFromSource(false); + int val = throughput.getValue() - getIncrementValue(MouseData.create(mouseButton)); + throughput.setValue(val, true, true); + Interactable.playButtonClickSound(); + return true; }) - .onUpdateListener(w -> w.overlay(createAdjustOverlay(false)))) - .child(new TextFieldWidget() - .left(18).right(18) - .setTextColor(EnumDyeColor.WHITE.getColorValue()) - .setNumbers(1, maxItemTransferRate) - .value(throughput) - .background(GTGuiTextures.DISPLAY) - .onUpdateListener(w -> { - if (throughput.updateCacheFromSource(false)) { - w.setText(throughput.getStringValue()); - } - })) - .child(new ButtonWidget<>() - .right(0).width(18) - .onMousePressed(mouseButton -> { - throughput.updateCacheFromSource(false); - int val = throughput.getValue() + getIncrementValue(MouseData.create(mouseButton)); - throughput.setValue(val, true, true); - Interactable.playButtonClickSound(); - return true; + .onUpdateListener(w -> w.overlay(createAdjustOverlay(false)))) + .child(new TextFieldWidget() + .left(18).right(18) + .setTextColor(EnumDyeColor.WHITE.getColorValue()) + .setNumbers(1, maxItemTransferRate) + .value(throughput) + .background(GTGuiTextures.DISPLAY) + .onUpdateListener(w -> { + if (throughput.updateCacheFromSource(false)) { + w.setText(throughput.getStringValue()); + } + })) + .child(new ButtonWidget<>() + .right(0).width(18) + .onMousePressed(mouseButton -> { + throughput.updateCacheFromSource(false); + int val = throughput.getValue() + getIncrementValue(MouseData.create(mouseButton)); + throughput.setValue(val, true, true); + Interactable.playButtonClickSound(); + return true; }) - .onUpdateListener(w -> w.overlay(createAdjustOverlay(true))))) - .child(getItemFilterContainer() - .initUI(panel, guiSyncManager)) - .child(new Row().coverChildrenHeight() - .marginBottom(2).widthRel(1f) - .child(createManualIoButton(manualIOmode, ManualImportExportMode.DISABLED)) - .child(createManualIoButton(manualIOmode, ManualImportExportMode.UNFILTERED)) - .child(createManualIoButton(manualIOmode, ManualImportExportMode.FILTERED)) - .child(IKey.lang("Manual IO Mode") - .asWidget() - .align(Alignment.CenterRight) - .height(18))) - .child(new Row().coverChildrenHeight() - .marginBottom(2).widthRel(1f) - .child(createConveyorModeButton(conveyorMode, ConveyorMode.IMPORT)) - .child(createConveyorModeButton(conveyorMode, ConveyorMode.EXPORT)) - .child(IKey.lang("Conveyor Mode") - .asWidget() - .align(Alignment.CenterRight) - .height(18)))) - .bindPlayerInventory(); + .onUpdateListener(w -> w.overlay(createAdjustOverlay(true))))) + .child(getItemFilterContainer() + .initUI(mainPanel, guiSyncManager)) + .child(new Row().coverChildrenHeight() + .marginBottom(2).widthRel(1f) + .child(createManualIoButton(manualIOmode, ManualImportExportMode.DISABLED)) + .child(createManualIoButton(manualIOmode, ManualImportExportMode.UNFILTERED)) + .child(createManualIoButton(manualIOmode, ManualImportExportMode.FILTERED)) + .child(IKey.lang("Manual IO Mode") + .asWidget() + .align(Alignment.CenterRight) + .height(18))) + .child(new Row().coverChildrenHeight() + .marginBottom(2).widthRel(1f) + .child(createConveyorModeButton(conveyorMode, ConveyorMode.IMPORT)) + .child(createConveyorModeButton(conveyorMode, ConveyorMode.EXPORT)) + .child(IKey.lang("Conveyor Mode") + .asWidget() + .align(Alignment.CenterRight) + .height(18))); } private Widget createManualIoButton(EnumSyncValue value, ManualImportExportMode mode) { diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index 23bf6efc1dc..ccd652c8d62 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -1,18 +1,17 @@ package gregtech.common.covers; -import com.cleanroommc.modularui.factory.SidedPosGuiData; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.value.sync.EnumSyncValue; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; - -import com.cleanroommc.modularui.widgets.layout.Row; - import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.ModularUI; import gregtech.api.gui.ModularUI.Builder; -import gregtech.api.gui.widgets.*; +import gregtech.api.gui.widgets.CycleButtonWidget; +import gregtech.api.gui.widgets.ImageWidget; +import gregtech.api.gui.widgets.IncrementButtonWidget; +import gregtech.api.gui.widgets.ServerWidgetGroup; +import gregtech.api.gui.widgets.TextFieldWidget2; +import gregtech.api.gui.widgets.WidgetGroup; +import gregtech.api.mui.GTGuiTextures; import gregtech.client.renderer.texture.Textures; import gregtech.common.covers.filter.SmartItemFilter; import gregtech.common.pipelike.itempipe.net.ItemNetHandler; @@ -29,6 +28,16 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Alignment; +import com.cleanroommc.modularui.value.sync.EnumSyncValue; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widget.Widget; +import com.cleanroommc.modularui.widgets.ToggleButton; +import com.cleanroommc.modularui.widgets.layout.Column; +import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.NotNull; import java.util.Iterator; @@ -192,12 +201,31 @@ protected String getUITitle() { } @Override - public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { + protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager guiSyncManager) { EnumSyncValue transferMode = new EnumSyncValue<>(TransferMode.class, this::getTransferMode, this::setTransferMode); guiSyncManager.syncValue("transfer_mode", transferMode); - return super.buildUI(guiData, guiSyncManager) - .child(new Row()); + return super.createUI(mainPanel, guiSyncManager) + .child(new Row().marginBottom(2).coverChildrenHeight().widthRel(1f) + .child(createTransferModeButton(transferMode, TransferMode.TRANSFER_ANY)) + .child(createTransferModeButton(transferMode, TransferMode.TRANSFER_EXACT)) + .child(createTransferModeButton(transferMode, TransferMode.KEEP_EXACT)) + .child(IKey.lang("Transfer Mode").asWidget() + .align(Alignment.CenterRight) + .height(18))); + } + + private Widget createTransferModeButton(EnumSyncValue value, TransferMode mode) { + return new ToggleButton().size(18) + .value(boolValueOf(value, mode)) + .background(GTGuiTextures.MC_BUTTON_DISABLED) + .selectedBackground(GTGuiTextures.MC_BUTTON) +// .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY[mode.ordinal()]) + .addTooltipLine(switch (mode) { + case TRANSFER_ANY -> IKey.lang("cover.robotic_arm.transfer_mode.transfer_any"); + case TRANSFER_EXACT -> IKey.lang("cover.robotic_arm.transfer_mode.transfer_exact"); + case KEEP_EXACT -> IKey.lang("cover.robotic_arm.transfer_mode.keep_exact"); + }); } @Override From d566ca807c9b669ff814e90996af72ee8ce9b6b6 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 3 Jan 2024 16:30:04 -0700 Subject: [PATCH 037/260] flip string builder calls --- src/main/java/gregtech/common/covers/CoverConveyor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 810cc756afc..c316ee2e749 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -630,8 +630,8 @@ protected int getIncrementValue(MouseData data) { protected IKey createAdjustOverlay(boolean increment) { final StringBuilder builder = new StringBuilder(); + builder.append(increment ? '+' : '-'); builder.append(getIncrementValue(MouseData.create(-1))); - builder.insert(0, increment ? '+' : '-'); float scale = 1f; if (builder.length() == 3) { From edc5d9a859b696fee28f14d105080cb82478228f Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 3 Jan 2024 16:31:42 -0700 Subject: [PATCH 038/260] add sync value for transfer stack size when blacklist return the correct TransferMode stack size add TransferMode to sync data --- .../common/covers/CoverRoboticArm.java | 35 +++++++++++++++---- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index ccd652c8d62..d4bd02f6a69 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -1,5 +1,8 @@ package gregtech.common.covers; +import com.cleanroommc.modularui.value.sync.IntSyncValue; +import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; + import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; import gregtech.api.gui.GuiTextures; @@ -19,6 +22,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.MathHelper; @@ -181,7 +185,9 @@ public void clearBuffer() { public void setTransferMode(TransferMode transferMode) { this.transferMode = transferMode; this.getCoverableView().markDirty(); - this.itemFilterContainer.setMaxStackSize(transferMode.maxStackSize); + if (getItemFilterContainer().hasItemFilter()) { + getItemFilterContainer().getItemFilter().onMaxStackSizeChange(); + } } public TransferMode getTransferMode() { @@ -205,6 +211,10 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g EnumSyncValue transferMode = new EnumSyncValue<>(TransferMode.class, this::getTransferMode, this::setTransferMode); guiSyncManager.syncValue("transfer_mode", transferMode); + var filterTransferSize = new IntSyncValue( + () -> getItemFilterContainer().getTransferStackSize(), + i -> getItemFilterContainer().setTransferStackSize(i)); + return super.createUI(mainPanel, guiSyncManager) .child(new Row().marginBottom(2).coverChildrenHeight().widthRel(1f) .child(createTransferModeButton(transferMode, TransferMode.TRANSFER_ANY)) @@ -212,7 +222,11 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g .child(createTransferModeButton(transferMode, TransferMode.KEEP_EXACT)) .child(IKey.lang("Transfer Mode").asWidget() .align(Alignment.CenterRight) - .height(18))); + .height(18))) + .child(new Row().right(0).coverChildrenHeight() + .child(new TextFieldWidget().widthRel(0.5f).right(0) + .setEnabledIf(w -> shouldDisplayAmountSlider()) + .value(filterTransferSize))); } private Widget createTransferModeButton(EnumSyncValue value, TransferMode mode) { @@ -230,10 +244,7 @@ private Widget createTransferModeButton(EnumSyncValue getTransferRate(); - case TRANSFER_ANY -> 1; - }; + return getTransferMode().maxStackSize; } @Override @@ -272,6 +283,18 @@ protected ModularUI buildUI(Builder builder, EntityPlayer player) { return super.buildUI(builder.widget(primaryGroup), player); } + @Override + public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { + super.writeInitialSyncData(packetBuffer); + packetBuffer.writeInt(this.transferMode.ordinal()); + } + + @Override + public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { + super.readInitialSyncData(packetBuffer); + this.transferMode = TransferMode.values()[packetBuffer.readInt()]; + } + @Override public void writeToNBT(NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); From 235a83954c1d5fbc04050b7551aeb59863cccc97 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 3 Jan 2024 16:33:08 -0700 Subject: [PATCH 039/260] try cache supplier value make `onMaxStackSizeChange()` public properly set the filter's supplier --- .../gregtech/common/covers/filter/ItemFilter.java | 12 +++++++++--- .../common/covers/filter/ItemFilterContainer.java | 3 +-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index 22f12e550fd..2c9f6c0707d 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -17,10 +17,11 @@ public abstract class ItemFilter { public static MatchResult EMPTY_MATCH = new MatchResult<>(Match.SUCCEED, -1); private IDirtyNotifiable dirtyNotifiable; private Supplier maxStackSizer = () -> Integer.MAX_VALUE; + protected int cache; protected boolean isBlacklistFilter = false; public final int getMaxStackSize() { - return maxStackSizer.get(); + return this.cache; } public final void setMaxStackSize(int maxStackSize) { @@ -29,10 +30,14 @@ public final void setMaxStackSize(int maxStackSize) { public final void setMaxStackSizer(Supplier maxStackSizer) { this.maxStackSizer = maxStackSizer; - onMaxStackSizeChange(); + this.cache = this.maxStackSizer.get(); + } + + public Supplier getMaxStackSizer() { + return this.maxStackSizer; } - protected void onMaxStackSizeChange() {} + public void onMaxStackSizeChange() {} public abstract boolean showGlobalTransferLimitSlider(); @@ -74,6 +79,7 @@ public final void markDirty() { } public final void setBlacklistFilter(boolean blacklistFilter) { isBlacklistFilter = blacklistFilter; + onMaxStackSizeChange(); markDirty(); } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 879168a8910..bfbba1205f6 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -93,7 +93,6 @@ public int getTransferStackSize() { public void setTransferStackSize(int transferStackSize) { this.transferStackSize = MathHelper.clamp(transferStackSize, 1, getMaxStackSize()); - this.stackSizer = () -> this.transferStackSize; onFilterInstanceChange(); dirtyNotifiable.markAsDirty(); } @@ -209,7 +208,7 @@ public void setMaxStackSize(int maxStackSizeLimit) { } public void setFilterStackSizer(Supplier stackSizer) { - this.currentItemFilter.setMaxStackSizer(stackSizer); + this.stackSizer = stackSizer; } public boolean showGlobalTransferLimitSlider() { return getMaxStackSize() > 1 && (isBlacklistFilter() || !hasItemFilter()|| currentItemFilter.showGlobalTransferLimitSlider()); From a7a95e54f8a4169f65d662616f7899429ba5760e Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 3 Jan 2024 16:33:32 -0700 Subject: [PATCH 040/260] rename variable --- src/main/java/gregtech/api/mui/slot/PhantomItemSlot.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/api/mui/slot/PhantomItemSlot.java b/src/main/java/gregtech/api/mui/slot/PhantomItemSlot.java index 6c29822bc1b..77a3999ed82 100644 --- a/src/main/java/gregtech/api/mui/slot/PhantomItemSlot.java +++ b/src/main/java/gregtech/api/mui/slot/PhantomItemSlot.java @@ -7,16 +7,15 @@ import java.util.function.Supplier; public class PhantomItemSlot extends ModularSlot { - protected Supplier maxStackSize; - public static final Supplier DEFAULT_SIZE = () -> 64; - public PhantomItemSlot(IItemHandler itemHandler, int index, Supplier maxStackSize) { + protected Supplier maxStackSizer; + public PhantomItemSlot(IItemHandler itemHandler, int index, Supplier maxStackSizer) { super(itemHandler, index); - this.maxStackSize = maxStackSize == null ? DEFAULT_SIZE : maxStackSize; + this.maxStackSizer = maxStackSizer; } @Override public int getSlotStackLimit() { - return maxStackSize.get(); + return maxStackSizer.get(); } @Override From ac4290d53457286c95243f7dc3f4b245ca5546f4 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 3 Jan 2024 16:34:26 -0700 Subject: [PATCH 041/260] add tooltip for filter stack count update cache on stack size change --- .../common/covers/filter/SimpleItemFilter.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 42c5282403c..00b71dbe60b 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -9,6 +9,8 @@ import gregtech.api.mui.GTGuis; import gregtech.api.mui.slot.PhantomItemSlot; +import gregtech.api.util.TextFormattingUtil; + import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.items.IItemHandler; @@ -45,13 +47,17 @@ public int getSlotLimit(int slot) { @Override public void setStackInSlot(int slot, ItemStack stack) { + if (!stack.isEmpty()) { + stack.setCount(Math.min(stack.getCount(), getMaxStackSize())); + } super.setStackInSlot(slot, stack); } }; } @Override - protected void onMaxStackSizeChange() { + public void onMaxStackSizeChange() { + this.cache = getMaxStackSizer().get(); for (int i = 0; i < itemFilterSlots.getSlots(); i++) { ItemStack itemStack = itemFilterSlots.getStackInSlot(i); if (!itemStack.isEmpty()) { @@ -138,7 +144,14 @@ public void initUI(Consumer widgetGroup) { "XXX", "XXX") .key('X', index -> new ItemSlot() - .slot(new PhantomItemSlot(itemFilterSlots, index, this::getMaxStackSize) + .tooltip(tooltip -> { + var stack = this.itemFilterSlots.getStackInSlot(index); + if (stack.isEmpty()) return; + + tooltip.addLine(IKey.dynamic(() -> + TextFormattingUtil.formatNumbers(stack.getCount()))); + }) + .slot(new PhantomItemSlot(itemFilterSlots, index, getMaxStackSizer()) .slotGroup(filterInventory) .changeListener((newItem, onlyAmountChanged, client, init) -> { if (onlyAmountChanged && !init) { From c6e27cf67e9d9f09d627bcb7238405e9bc2bb5a8 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 3 Jan 2024 16:34:54 -0700 Subject: [PATCH 042/260] set keep exact max stack size to int max --- src/main/java/gregtech/common/covers/TransferMode.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/TransferMode.java b/src/main/java/gregtech/common/covers/TransferMode.java index ebf708dfdf4..a3fcc746faf 100644 --- a/src/main/java/gregtech/common/covers/TransferMode.java +++ b/src/main/java/gregtech/common/covers/TransferMode.java @@ -8,7 +8,7 @@ public enum TransferMode implements IStringSerializable { TRANSFER_ANY("cover.robotic_arm.transfer_mode.transfer_any", 1), TRANSFER_EXACT("cover.robotic_arm.transfer_mode.transfer_exact", 1024), - KEEP_EXACT("cover.robotic_arm.transfer_mode.keep_exact", 1024); + KEEP_EXACT("cover.robotic_arm.transfer_mode.keep_exact", Integer.MAX_VALUE); public final String localeName; public final int maxStackSize; From 527e8197640088b293de370cc7850a46836c7504 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 5 Jan 2024 16:08:23 -0700 Subject: [PATCH 043/260] improve ItemFilterContainer close filter popup when item filter is removed make filter slot a singleton add button sound --- .../covers/filter/ItemFilterContainer.java | 55 +++++++++++-------- 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index bfbba1205f6..4c6bc9406e7 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -13,19 +13,20 @@ import net.minecraft.network.PacketBuffer; import net.minecraft.util.math.MathHelper; import net.minecraftforge.common.util.INBTSerializable; +import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemStackHandler; import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.api.widget.IWidget; +import com.cleanroommc.modularui.api.widget.Interactable; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.PanelSyncHandler; -import com.cleanroommc.modularui.value.sync.SyncHandlers; import com.cleanroommc.modularui.widgets.ButtonWidget; import com.cleanroommc.modularui.widgets.ItemSlot; import com.cleanroommc.modularui.widgets.layout.Row; -import com.cleanroommc.modularui.widgets.slot.SlotGroup; +import com.cleanroommc.modularui.widgets.slot.ModularSlot; import org.jetbrains.annotations.NotNull; import java.io.IOException; @@ -49,11 +50,6 @@ public ItemFilterContainer(IDirtyNotifiable dirtyNotifiable) { this.dirtyNotifiable = dirtyNotifiable; this.filterInventory = new ItemStackHandler(1) { - @Override - public boolean isItemValid(int slot, @NotNull ItemStack stack) { - return isFilter(stack); - } - @Override public int getSlotLimit(int slot) { return 1; @@ -63,11 +59,6 @@ public int getSlotLimit(int slot) { protected void onLoad() { onFilterSlotChange(false); } - - @Override - protected void onContentsChanged(int slot) { - onFilterSlotChange(true); - } }; } @@ -136,8 +127,6 @@ public void blacklistUI(int y, Consumer widgetGroup, Bo /** Uses Cleanroom MUI*/ public IWidget initUI(ModularPanel main, GuiSyncManager manager) { - var slotGroup = new SlotGroup("filter_slot", 1, true); - manager.registerSlotGroup(slotGroup); var panel = new PanelSyncHandler(main) { @Override public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { @@ -150,22 +139,29 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) return new Row().coverChildrenHeight() .marginBottom(2).widthRel(1f) .child(new ItemSlot() - .slot(SyncHandlers.itemSlot(filterInventory, 0) - .slotGroup(slotGroup) - .filter(this::isFilter)) + .slot(new FilterSlot(filterInventory, 0) + .filter(this::isFilter) + .singletonSlotGroup(101)) + .onUpdateListener(w -> { + if (!hasItemFilter() && panel.isPanelOpen()) { + panel.closePanel(); + } + }, true) .size(18) .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY)) .child(new ButtonWidget<>() .setEnabledIf(w -> hasItemFilter()) .onMousePressed(i -> { + boolean success = false; if (!panel.isPanelOpen()) { panel.openPanel(); - return true; + success = true; } else if (panel.isValid()) { panel.closePanel(); - return true; + success = true; } - return false; + Interactable.playButtonClickSound(); + return success; })) .child(IKey.dynamic(() -> hasItemFilter() ? getFilterInventory().getStackInSlot(0).getDisplayName() : @@ -270,11 +266,12 @@ public void writeInitialSyncData(PacketBuffer packetBuffer) { } public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { + var stack = ItemStack.EMPTY; try { - var stack = packetBuffer.readItemStack(); - this.filterInventory.setStackInSlot(0, stack); - this.currentItemFilter = FilterTypeRegistry.getItemFilterForStack(stack); + stack = packetBuffer.readItemStack(); } catch (IOException ignore) {} + this.filterInventory.setStackInSlot(0, stack); + this.currentItemFilter = FilterTypeRegistry.getItemFilterForStack(stack); } @Override @@ -301,4 +298,16 @@ public void deserializeNBT(NBTTagCompound tagCompound) { this.getItemFilter().readFromNBT(tagCompound.getCompoundTag("Filter")); } } + + protected class FilterSlot extends ModularSlot { + + public FilterSlot(IItemHandler itemHandler, int index) { + super(itemHandler, index); + } + + @Override + public void onSlotChanged() { + onFilterSlotChange(true); + } + } } From 156c28cdda44a6180d3ce6345d9de289fd4e72e1 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Jan 2024 16:34:28 -0700 Subject: [PATCH 044/260] add methods to FilterTypeRegistry deprecate methods in FilterTypeRegistry --- .../covers/filter/FilterTypeRegistry.java | 50 ++++++++++++++++--- 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java index 633242b05d2..555623bfe77 100644 --- a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java +++ b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java @@ -42,6 +42,17 @@ public static void registerItemFilter(int id, Class itemFi itemFilterById.put(id, itemFilterClass); } + public static int getIdForFilter(Object filter) { + int id = -1; + if (filter instanceof ItemFilter) { + id = itemFilterById.inverse().get(filter.getClass()); + } else if (filter instanceof FluidFilter) { + id = fluidFilterById.inverse().get(filter.getClass()); + } + return id; + } + + @Deprecated public static int getIdForItemFilter(ItemFilter itemFilter) { Integer filterId = itemFilterById.inverse().get(itemFilter.getClass()); if (filterId == null) { @@ -50,6 +61,7 @@ public static int getIdForItemFilter(ItemFilter itemFilter) { return filterId; } + @Deprecated public static int getIdForFluidFilter(FluidFilter fluidFilter) { Integer filterId = fluidFilterById.inverse().get(fluidFilter.getClass()); if (filterId == null) { @@ -58,6 +70,7 @@ public static int getIdForFluidFilter(FluidFilter fluidFilter) { return filterId; } + @Deprecated public static ItemFilter createItemFilterById(int filterId) { Class filterClass = itemFilterById.get(filterId); if (filterClass == null) { @@ -66,6 +79,7 @@ public static ItemFilter createItemFilterById(int filterId) { return createNewFilterInstance(filterClass); } + @Deprecated public static FluidFilter createFluidFilterById(int filterId) { Class filterClass = fluidFilterById.get(filterId); if (filterClass == null) { @@ -75,29 +89,49 @@ public static FluidFilter createFluidFilterById(int filterId) { } public static ItemFilter getItemFilterForStack(ItemStack itemStack) { - Integer filterId = itemFilterIdByStack.get(new ItemAndMetadata(itemStack)); - if (filterId == null) { + int filterId = getFilterIdForStack(itemStack); + if (filterId == -1) { return null; } Class filterClass = itemFilterById.get(filterId); - return createNewFilterInstance(filterClass); + return createNewFilterInstance(filterClass, itemStack); } public static FluidFilter getFluidFilterForStack(ItemStack itemStack) { - Integer filterId = fluidFilterIdByStack.get(new ItemAndMetadata(itemStack)); - if (filterId == null) { + int filterId = getFilterIdForStack(itemStack); + if (filterId == -1) { return null; } Class filterClass = fluidFilterById.get(filterId); - return createNewFilterInstance(filterClass); + return createNewFilterInstance(filterClass, itemStack); } - private static T createNewFilterInstance(Class filterClass) { + public static int getFilterIdForStack(ItemStack stack) { + int id = -1; + if (isItemFilter(stack)) id = itemFilterIdByStack.getOrDefault(new ItemAndMetadata(stack), -1); + else if (isFluidFilter(stack)) id = fluidFilterIdByStack.getOrDefault(new ItemAndMetadata(stack), -1); + return id; + } + + private static T createNewFilterInstance(Class filterClass, ItemStack stack) { try { - return filterClass.newInstance(); + return filterClass.getDeclaredConstructor(stack.getClass()).newInstance(stack); } catch (ReflectiveOperationException exception) { GTLog.logger.error("Failed to create filter instance for class {}", filterClass, exception); return null; } } + + @Deprecated + private static T createNewFilterInstance(Class filterClass) { + return createNewFilterInstance(filterClass, ItemStack.EMPTY); + } + + public static boolean isItemFilter(ItemStack stack) { + return itemFilterIdByStack.containsKey(new ItemAndMetadata(stack)); + } + + public static boolean isFluidFilter(ItemStack stack) { + return fluidFilterIdByStack.containsKey(new ItemAndMetadata(stack)); + } } From aad52e2f59cf1631505a8a54bfa448862d6d677b Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Jan 2024 16:35:00 -0700 Subject: [PATCH 045/260] use new methods in ItemFilterContainer --- .../covers/filter/ItemFilterContainer.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 4c6bc9406e7..0b806c3d282 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -172,18 +172,20 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) protected void onFilterSlotChange(boolean notify) { ItemStack filterStack = filterInventory.getStackInSlot(0); - ItemFilter newItemFilter = FilterTypeRegistry.getItemFilterForStack(filterStack); - ItemFilter currentItemFilter = getItemFilter(); - if (newItemFilter == null) { + int newId = FilterTypeRegistry.getFilterIdForStack(filterStack); + int currentId = FilterTypeRegistry.getIdForFilter(getItemFilter()); + + if (!FilterTypeRegistry.isItemFilter(filterStack)) { if (hasItemFilter()) { setItemFilter(null); setBlacklistFilter(false); - if (notify) onFilterInstanceChange(); + if (notify) + onFilterInstanceChange(); } - } else if (currentItemFilter == null || - newItemFilter.getClass() != currentItemFilter.getClass()) { - setItemFilter(newItemFilter); - if (notify) onFilterInstanceChange(); + } else if (currentId == -1 || newId != currentId) { + setItemFilter(FilterTypeRegistry.getItemFilterForStack(filterStack)); + if (notify) + onFilterInstanceChange(); } } From f2ac6b1762c65423877f2aee383849796a1945da Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Jan 2024 17:40:01 -0700 Subject: [PATCH 046/260] fix CoverItemFilter with changes to filter system return the correct item for drops sync filter stack to client save filter stack to nbt --- .../common/covers/CoverBehaviors.java | 6 +-- .../common/covers/CoverItemFilter.java | 49 +++++++++++++++---- 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverBehaviors.java b/src/main/java/gregtech/common/covers/CoverBehaviors.java index 3e5779fb3bf..71ac797e8f2 100644 --- a/src/main/java/gregtech/common/covers/CoverBehaviors.java +++ b/src/main/java/gregtech/common/covers/CoverBehaviors.java @@ -67,9 +67,9 @@ public static void init() { registerBehavior(gregtechId("ore_dictionary_filter"), MetaItems.ORE_DICTIONARY_FILTER, (def, tile, side) -> new CoverItemFilter(def, tile, side, "cover.ore_dictionary_filter.title", - Textures.ORE_DICTIONARY_FILTER_OVERLAY, new OreDictionaryItemFilter())); + Textures.ORE_DICTIONARY_FILTER_OVERLAY)); registerBehavior(gregtechId("item_filter"), MetaItems.ITEM_FILTER, (def, tile, side) -> new CoverItemFilter(def, - tile, side, "cover.item_filter.title", Textures.ITEM_FILTER_FILTER_OVERLAY, new SimpleItemFilter())); + tile, side, "cover.item_filter.title", Textures.ITEM_FILTER_FILTER_OVERLAY)); registerBehavior(gregtechId("fluid_filter"), MetaItems.FLUID_FILTER, (def, tile, side) -> new CoverFluidFilter(def, tile, side, "cover.fluid_filter.title", Textures.FLUID_FILTER_OVERLAY, new SimpleFluidFilter())); @@ -100,7 +100,7 @@ public static void init() { CoverMachineController::new); registerBehavior(gregtechId("smart_filter"), MetaItems.SMART_FILTER, (def, tile, side) -> new CoverItemFilter(def, tile, side, "cover.smart_item_filter.title", - Textures.SMART_FILTER_FILTER_OVERLAY, new SmartItemFilter())); + Textures.SMART_FILTER_FILTER_OVERLAY)); registerBehavior(gregtechId("facade"), MetaItems.COVER_FACADE, CoverFacade::new); registerBehavior(gregtechId("screen"), MetaItems.COVER_SCREEN, CoverScreen::new); diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 1e69cbaebfb..7bb42f62f38 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -12,14 +12,15 @@ import gregtech.api.gui.widgets.WidgetGroup; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; +import gregtech.common.covers.filter.FilterTypeRegistry; import gregtech.common.covers.filter.ItemFilter; import gregtech.common.covers.filter.ItemFilterContainer; -import gregtech.common.covers.filter.ItemFilterWrapper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; @@ -34,6 +35,9 @@ import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.io.IOException; public class CoverItemFilter extends CoverBase implements CoverWithUI { @@ -44,16 +48,44 @@ public class CoverItemFilter extends CoverBase implements CoverWithUI { protected ItemHandlerFiltered itemHandler; public CoverItemFilter(@NotNull CoverDefinition definition, @NotNull CoverableView coverableView, - @NotNull EnumFacing attachedSide, String titleLocale, SimpleOverlayRenderer texture, - ItemFilter itemFilter) { + @NotNull EnumFacing attachedSide, String titleLocale, SimpleOverlayRenderer texture) { super(definition, coverableView, attachedSide); this.titleLocale = titleLocale; this.texture = texture; this.itemFilter = new ItemFilterContainer(this); - this.itemFilter.setItemFilter(itemFilter); + } + + @Override + public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFacing side, + @Nullable EntityPlayer player, @NotNull ItemStack itemStack) { + super.onAttachment(coverableView, side, player, itemStack); + this.itemFilter.setItemFilter(FilterTypeRegistry.getItemFilterForStack(itemStack.copy())); this.itemFilter.setMaxStackSize(1); } + @Override + public @NotNull ItemStack getPickItem() { + return this.getItemFilter() == null ? super.getPickItem() : this.getItemFilter().getContainerStack(); + } + + @Override + public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { + packetBuffer.writeBoolean(itemFilter.hasItemFilter()); + if (itemFilter.hasItemFilter()) { + packetBuffer.writeItemStack(getItemFilter().getContainerStack()); + } + } + + @Override + public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { + if (!packetBuffer.readBoolean()) return; + try { + this.itemFilter.setItemFilter(FilterTypeRegistry.getItemFilterForStack(packetBuffer.readItemStack())); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + public void setFilterMode(ItemFilterMode filterMode) { this.filterMode = filterMode; getCoverableView().markDirty(); @@ -115,18 +147,15 @@ public void renderCover(CCRenderState renderState, Matrix4 translation, IVertexO public void writeToNBT(@NotNull NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); tagCompound.setInteger("FilterMode", filterMode.ordinal()); - tagCompound.setBoolean("IsBlacklist", this.itemFilter.isBlacklistFilter()); - NBTTagCompound filterComponent = new NBTTagCompound(); - this.itemFilter.getItemFilter().writeToNBT(filterComponent); - tagCompound.setTag("Filter", filterComponent); + tagCompound.setTag("Filter", getItemFilter().getContainerStack().serializeNBT()); } @Override public void readFromNBT(@NotNull NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); this.filterMode = ItemFilterMode.values()[tagCompound.getInteger("FilterMode")]; - this.itemFilter.setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); - this.itemFilter.getItemFilter().readFromNBT(tagCompound.getCompoundTag("Filter")); + var stack = new ItemStack(tagCompound.getCompoundTag("Filter")); + this.itemFilter.setItemFilter(FilterTypeRegistry.getItemFilterForStack(stack)); } @Override From 5ef8cccf53d5f922fbb0b6efd12a947e90c8268e Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Jan 2024 17:42:54 -0700 Subject: [PATCH 047/260] move filter data to subclass BaseFilterReader update extending filter classes fix WidgetGroupItemFilter for filter changes --- .../common/covers/filter/ItemFilter.java | 130 +++++++++++--- .../filter/OreDictionaryItemFilter.java | 12 +- .../covers/filter/SimpleItemFilter.java | 169 +++++++++--------- .../common/covers/filter/SmartItemFilter.java | 12 +- .../covers/filter/WidgetGroupItemFilter.java | 16 +- 5 files changed, 213 insertions(+), 126 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index 2c9f6c0707d..b983c7fee27 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -1,5 +1,7 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.utils.ItemStackItemHandler; + import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; @@ -7,6 +9,11 @@ import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; + +import net.minecraft.nbt.NBTTagList; + +import net.minecraftforge.common.util.Constants; + import org.jetbrains.annotations.NotNull; import java.util.function.Consumer; @@ -16,12 +23,32 @@ public abstract class ItemFilter { public static MatchResult EMPTY_MATCH = new MatchResult<>(Match.SUCCEED, -1); private IDirtyNotifiable dirtyNotifiable; - private Supplier maxStackSizer = () -> Integer.MAX_VALUE; - protected int cache; - protected boolean isBlacklistFilter = false; + private BaseFilterReader filterReader; + public static final String KEY_ITEMS = "Items"; + public static final String COUNT = "Count"; + public static final String BLACKLIST = "is_blacklist"; + + protected void setFilterReader(BaseFilterReader reader) { + this.filterReader = reader; + } + + public ItemStack getContainerStack() { + var stack = this.filterReader.getContainer(); + stack.setCount(1); + return stack; + } + + public final void setBlacklistFilter(boolean blacklistFilter) { + this.filterReader.setBlacklistFilter(blacklistFilter); + markDirty(); + } + + public final boolean isBlacklistFilter() { + return filterReader.isBlacklistFilter(); + } public final int getMaxStackSize() { - return this.cache; + return this.filterReader.getMaxStackSize(); } public final void setMaxStackSize(int maxStackSize) { @@ -29,15 +56,16 @@ public final void setMaxStackSize(int maxStackSize) { } public final void setMaxStackSizer(Supplier maxStackSizer) { - this.maxStackSizer = maxStackSizer; - this.cache = this.maxStackSizer.get(); + this.filterReader.setMaxStackSizer(maxStackSizer); } public Supplier getMaxStackSizer() { - return this.maxStackSizer; + return this.filterReader.getMaxStackSizer(); } - public void onMaxStackSizeChange() {} + public final void onMaxStackSizeChange() { + this.filterReader.onMaxStackSizeChange(); + } public abstract boolean showGlobalTransferLimitSlider(); @@ -51,21 +79,19 @@ public int getStackTransferLimit(ItemStack stack, int globalTransferLimit) { public abstract MatchResult matchItemStack(ItemStack itemStack); - public abstract int getTotalOccupiedHeight(); - /** Deprecated, uses old builtin MUI */ @Deprecated public abstract void initUI(Consumer widgetGroup); /** Uses Cleanroom MUI */ - public abstract @NotNull ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager); + public abstract @NotNull ModularPanel createUI(GuiSyncManager syncManager); public void writeToNBT(NBTTagCompound tagCompound) { - tagCompound.setBoolean("IsBlacklist", this.isBlacklistFilter); +// tagCompound.setBoolean("IsBlacklist", this.isBlacklistFilter); } public void readFromNBT(NBTTagCompound tagCompound) { - this.isBlacklistFilter = tagCompound.getBoolean("IsBlacklist"); +// this.isBlacklistFilter = tagCompound.getBoolean("IsBlacklist"); } final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { @@ -77,15 +103,6 @@ public final void markDirty() { dirtyNotifiable.markAsDirty(); } } - public final void setBlacklistFilter(boolean blacklistFilter) { - isBlacklistFilter = blacklistFilter; - onMaxStackSizeChange(); - markDirty(); - } - - public final boolean isBlacklistFilter() { - return isBlacklistFilter; - } public static MatchResult createResult(Match match, R data) { return new MatchResult<>(match, data); @@ -122,4 +139,73 @@ public enum Match { FAIL, SUCCEED } + + protected static class BaseFilterReader extends ItemStackItemHandler { + + protected final ItemStack container; + private Supplier maxStackSizer = () -> Integer.MAX_VALUE; + private int cache; + public BaseFilterReader(ItemStack container, int slots) { + super(container, slots); + this.container = container; + setBlacklistFilter(false); + } + + public ItemStack getContainer () { + return this.container; + } + + public void onMaxStackSizeChange() { + this.cache = getMaxStackSizer().get(); + } + + public final void setBlacklistFilter(boolean blacklistFilter) { + getStackTag().setBoolean(BLACKLIST, blacklistFilter); + onMaxStackSizeChange(); + } + + public final boolean isBlacklistFilter() { + return getStackTag().getBoolean(BLACKLIST); + } + + protected NBTTagCompound getStackTag() { + if (!container.hasTagCompound()) { + container.setTagCompound(new NBTTagCompound()); + } + return container.getTagCompound(); + } + + @Override + public NBTTagList getItemsNbt() { + NBTTagCompound nbt = getStackTag(); + if (!nbt.hasKey(KEY_ITEMS)) { + NBTTagList list = new NBTTagList(); + for (int i = 0; i < getSlots(); i++) { + list.appendTag(new NBTTagCompound()); + } + nbt.setTag(KEY_ITEMS, list); + } + return nbt.getTagList(KEY_ITEMS, Constants.NBT.TAG_COMPOUND); + } + + @Override + protected void validateSlotIndex(int slot) { + if (slot < 0 || slot >= this.getSlots()) { + throw new RuntimeException("Slot " + slot + " not in valid range - [0," + this.getSlots() + ")"); + } + } + + public final int getMaxStackSize() { + return this.isBlacklistFilter() ? 1 : this.cache; + } + + public final void setMaxStackSizer(Supplier maxStackSizer) { + this.maxStackSizer = maxStackSizer; + this.cache = this.maxStackSizer.get(); + } + + public Supplier getMaxStackSizer() { + return this.maxStackSizer; + } + } } diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 42c2ed09592..2ffa446c243 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -2,7 +2,6 @@ import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; -import com.cleanroommc.modularui.widget.Widget; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.resources.TextureArea; @@ -53,6 +52,10 @@ public class OreDictionaryItemFilter extends ItemFilter { */ private boolean matchAll; + public OreDictionaryItemFilter(ItemStack stack) { +// super(stack); + } + @NotNull public String getExpression() { return expression; @@ -177,7 +180,7 @@ public void initUI(Consumer widgetGroup) { } @Override - public @NotNull ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { + public @NotNull ModularPanel createUI(GuiSyncManager syncManager) { return ModularPanel.defaultPanel("ore_dict_filter"); } @@ -242,11 +245,6 @@ public boolean showGlobalTransferLimitSlider() { return true; } - @Override - public int getTotalOccupiedHeight() { - return 37; - } - @Override public void writeToNBT(NBTTagCompound tag) { tag.setString("OreDictionaryFilter", expression); diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 00b71dbe60b..c8760d46647 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -14,7 +14,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.ItemStackHandler; import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.screen.ModularPanel; @@ -32,73 +31,27 @@ public class SimpleItemFilter extends ItemFilter { private static final int MAX_MATCH_SLOTS = 9; + private final SimpleFilterReader filterReader; - protected final ItemStackHandler itemFilterSlots; - protected boolean ignoreDamage = true; - protected boolean ignoreNBT = true; + public static final String IGNORE_NBT = "ignore_nbt"; + public static final String IGNORE_DAMAGE = "ignore_damage"; - public SimpleItemFilter() { - this.itemFilterSlots = new ItemStackHandler(MAX_MATCH_SLOTS) { - - @Override - public int getSlotLimit(int slot) { - return getMaxStackSize(); - } - - @Override - public void setStackInSlot(int slot, ItemStack stack) { - if (!stack.isEmpty()) { - stack.setCount(Math.min(stack.getCount(), getMaxStackSize())); - } - super.setStackInSlot(slot, stack); - } - }; - } - - @Override - public void onMaxStackSizeChange() { - this.cache = getMaxStackSizer().get(); - for (int i = 0; i < itemFilterSlots.getSlots(); i++) { - ItemStack itemStack = itemFilterSlots.getStackInSlot(i); - if (!itemStack.isEmpty()) { - itemStack.setCount(Math.min(itemStack.getCount(), getMaxStackSize())); - } - } - } - - public ItemStackHandler getItemFilterSlots() { - return itemFilterSlots; - } - - public boolean isIgnoreDamage() { - return ignoreDamage; - } - - public boolean isIgnoreNBT() { - return ignoreNBT; - } - - protected void setIgnoreDamage(boolean ignoreDamage) { - this.ignoreDamage = ignoreDamage; - markDirty(); - } - - protected void setIgnoreNBT(boolean ignoreNBT) { - this.ignoreNBT = ignoreNBT; - markDirty(); + public SimpleItemFilter(ItemStack stack) { + this.filterReader = new SimpleFilterReader(stack, MAX_MATCH_SLOTS); + setFilterReader(this.filterReader); } @Override public MatchResult matchItemStack(ItemStack itemStack) { - int itemFilterMatchIndex = itemFilterMatch(getItemFilterSlots(), isIgnoreDamage(), isIgnoreNBT(), itemStack); + int itemFilterMatchIndex = itemFilterMatch(filterReader, filterReader.isIgnoreDamage(), filterReader.isIgnoreNBT(), itemStack); var result = ItemFilter.createResult(itemFilterMatchIndex == -1 ? Match.FAIL : Match.SUCCEED, itemFilterMatchIndex); - if (isBlacklistFilter()) result.flipMatch(); + if (filterReader.isBlacklistFilter()) result.flipMatch(); return result; } @Override public int getSlotTransferLimit(int matchSlot, int globalTransferLimit) { - ItemStack stackInFilterSlot = itemFilterSlots.getStackInSlot(matchSlot); + ItemStack stackInFilterSlot = filterReader.getStackInSlot(matchSlot); return Math.min(stackInFilterSlot.getCount(), globalTransferLimit); } @@ -107,29 +60,24 @@ public boolean showGlobalTransferLimitSlider() { return false; } - @Override - public int getTotalOccupiedHeight() { - return 36; // todo remove this, idk what it's used for - } - @Override public void initUI(Consumer widgetGroup) { for (int i = 0; i < 9; i++) { - widgetGroup.accept(new PhantomSlotWidget(itemFilterSlots, i, 10 + 18 * (i % 3), 18 * (i / 3)) + widgetGroup.accept(new PhantomSlotWidget(filterReader, i, 10 + 18 * (i % 3), 18 * (i / 3)) .setBackgroundTexture(GuiTextures.SLOT)); } widgetGroup.accept(new ToggleButtonWidget(74, 0, 20, 20, GuiTextures.BUTTON_FILTER_DAMAGE, - () -> ignoreDamage, this::setIgnoreDamage).setTooltipText("cover.item_filter.ignore_damage")); + filterReader::isIgnoreDamage, filterReader::setIgnoreDamage).setTooltipText("cover.item_filter.ignore_damage")); widgetGroup.accept(new ToggleButtonWidget(99, 0, 20, 20, GuiTextures.BUTTON_FILTER_NBT, - () -> ignoreNBT, this::setIgnoreNBT).setTooltipText("cover.item_filter.ignore_nbt")); + filterReader::isIgnoreNBT, filterReader::setIgnoreNBT).setTooltipText("cover.item_filter.ignore_nbt")); } @Override - public @NotNull ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { + public @NotNull ModularPanel createUI(GuiSyncManager syncManager) { SlotGroup filterInventory = new SlotGroup("filter_inv", 3, 1000, true); - var blacklist = new BooleanSyncValue(this::isBlacklistFilter, this::setBlacklistFilter); - var ignoreDamage = new BooleanSyncValue(this::isIgnoreDamage, this::setIgnoreDamage); - var ignoreNBT = new BooleanSyncValue(this::isIgnoreNBT, this::setIgnoreNBT); + var blacklist = new BooleanSyncValue(this.filterReader::isBlacklistFilter, this.filterReader::setBlacklistFilter); + var ignoreDamage = new BooleanSyncValue(this.filterReader::isIgnoreDamage, this.filterReader::setIgnoreDamage); + var ignoreNBT = new BooleanSyncValue(this.filterReader::isIgnoreNBT, this.filterReader::setIgnoreNBT); syncManager.registerSlotGroup(filterInventory); syncManager.syncValue("filter_blacklist", blacklist); @@ -144,14 +92,16 @@ public void initUI(Consumer widgetGroup) { "XXX", "XXX") .key('X', index -> new ItemSlot() - .tooltip(tooltip -> { - var stack = this.itemFilterSlots.getStackInSlot(index); - if (stack.isEmpty()) return; - - tooltip.addLine(IKey.dynamic(() -> - TextFormattingUtil.formatNumbers(stack.getCount()))); - }) - .slot(new PhantomItemSlot(itemFilterSlots, index, getMaxStackSizer()) + .tooltip(tooltip -> tooltip.setAutoUpdate(true)) + .tooltipBuilder(tooltip -> { + int count = this.filterReader.getItemsNbt() + .getCompoundTagAt(index) + .getInteger(COUNT); + if (count <= 0) return; + + tooltip.addLine(IKey.str(TextFormattingUtil.formatNumbers(count))); + }) + .slot(new PhantomItemSlot(this.filterReader, index, getMaxStackSizer()) .slotGroup(filterInventory) .changeListener((newItem, onlyAmountChanged, client, init) -> { if (onlyAmountChanged && !init) { @@ -179,18 +129,18 @@ public void initUI(Consumer widgetGroup) { @Override public void writeToNBT(NBTTagCompound tagCompound) { - super.writeToNBT(tagCompound); - tagCompound.setTag("ItemFilter", itemFilterSlots.serializeNBT()); - tagCompound.setBoolean("IgnoreDamage", ignoreDamage); - tagCompound.setBoolean("IgnoreNBT", ignoreNBT); +// super.writeToNBT(tagCompound); +// tagCompound.setTag("ItemFilter", itemFilterSlots.serializeNBT()); +// tagCompound.setBoolean("IgnoreDamage", ignoreDamage); +// tagCompound.setBoolean("IgnoreNBT", ignoreNBT); } @Override public void readFromNBT(NBTTagCompound tagCompound) { - super.readFromNBT(tagCompound); - this.itemFilterSlots.deserializeNBT(tagCompound.getCompoundTag("ItemFilter")); - this.ignoreDamage = tagCompound.getBoolean("IgnoreDamage"); - this.ignoreNBT = tagCompound.getBoolean("IgnoreNBT"); +// super.readFromNBT(tagCompound); +// this.itemFilterSlots.deserializeNBT(tagCompound.getCompoundTag("ItemFilter")); +// this.ignoreDamage = tagCompound.getBoolean("IgnoreDamage"); +// this.ignoreNBT = tagCompound.getBoolean("IgnoreNBT"); } public static int itemFilterMatch(IItemHandler filterSlots, boolean ignoreDamage, boolean ignoreNBTData, @@ -215,4 +165,55 @@ private static boolean areItemsEqual(boolean ignoreDamage, boolean ignoreNBTData } return ignoreNBTData || ItemStack.areItemStackTagsEqual(filterStack, itemStack); } + + protected class SimpleFilterReader extends BaseFilterReader { + public SimpleFilterReader(ItemStack container, int slots) { + super(container, slots); + setIgnoreDamage(true); + setIgnoreNBT(true); + } + + protected void setIgnoreDamage(boolean ignoreDamage) { + getStackTag().setBoolean(IGNORE_DAMAGE, ignoreDamage); + markDirty(); + } + + protected void setIgnoreNBT(boolean ignoreNBT) { + getStackTag().setBoolean(IGNORE_NBT, ignoreNBT); + markDirty(); + } + + public boolean isIgnoreDamage() { + return getStackTag().getBoolean(IGNORE_DAMAGE); + } + + public boolean isIgnoreNBT() { + return getStackTag().getBoolean(IGNORE_NBT); + } + + @Override + public int getSlotLimit(int slot) { + return getMaxStackSize(); + } + + @Override + public void setStackInSlot(int slot, ItemStack stack) { + if (!stack.isEmpty()) { + stack.setCount(Math.min(stack.getCount(), getMaxStackSize())); + } + super.setStackInSlot(slot, stack); + } + + @Override + public void onMaxStackSizeChange() { + super.onMaxStackSizeChange(); + for (int i = 0; i < getSlots(); i++) { + ItemStack itemStack = getStackInSlot(i); + if (!itemStack.isEmpty()) { + itemStack.setCount(Math.min(itemStack.getCount(), getMaxStackSize())); + setStackInSlot(i, itemStack); + } + } + } + } } diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 314e60128ab..810c6ab1cc1 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -14,7 +14,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.IStringSerializable; -import com.cleanroommc.modularui.widget.Widget; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import org.jetbrains.annotations.NotNull; @@ -25,6 +24,10 @@ public class SmartItemFilter extends ItemFilter { private SmartFilteringMode filteringMode = SmartFilteringMode.ELECTROLYZER; + public SmartItemFilter(ItemStack stack) { +// super(stack); + } + public SmartFilteringMode getFilteringMode() { return filteringMode; } @@ -95,15 +98,10 @@ public void initUI(Consumer widgetGroup) { } @Override - public @NotNull ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { + public @NotNull ModularPanel createUI(GuiSyncManager syncManager) { return ModularPanel.defaultPanel("smart_item_filter"); } - @Override - public int getTotalOccupiedHeight() { - return 20; - } - @Override public boolean showGlobalTransferLimitSlider() { return true; diff --git a/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java b/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java index d5601f2b2ab..eabeb9cd6fd 100644 --- a/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java @@ -5,6 +5,7 @@ import net.minecraft.network.PacketBuffer; +import java.io.IOException; import java.util.function.Supplier; public class WidgetGroupItemFilter extends AbstractWidgetGroup { @@ -31,8 +32,7 @@ public void detectAndSendChanges() { writeUpdateInfo(2, buffer -> { if (itemFilter != null) { buffer.writeBoolean(true); - int filterId = FilterTypeRegistry.getIdForItemFilter(itemFilter); - buffer.writeVarInt(filterId); + buffer.writeItemStack(itemFilter.getContainerStack()); } else { buffer.writeBoolean(false); } @@ -51,10 +51,14 @@ public void readUpdateInfo(int id, PacketBuffer buffer) { if (id == 2) { clearAllWidgets(); if (buffer.readBoolean()) { - int filterId = buffer.readVarInt(); - this.itemFilter = FilterTypeRegistry.createItemFilterById(filterId); - this.itemFilter.initUI(this::addWidget); - this.itemFilter.setMaxStackSize(maxStackSize); +// int filterId = buffer.readVarInt(); + try { + this.itemFilter = FilterTypeRegistry.getItemFilterForStack(buffer.readItemStack()); + this.itemFilter.initUI(this::addWidget); + this.itemFilter.setMaxStackSize(maxStackSize); + } catch (IOException e) { + throw new RuntimeException(e); + } } } else if (id == 3) { this.maxStackSize = buffer.readVarInt(); From b4880bc22f8d08a3652e8b037a06fe72b2371ae6 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Jan 2024 17:44:16 -0700 Subject: [PATCH 048/260] work of filter ui remove `isFilter()` do not serialize item filter move `onFilterSlotChange()` call --- .../covers/filter/ItemFilterContainer.java | 25 ++++++------------- 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 0b806c3d282..d694baf7648 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -131,7 +131,7 @@ public IWidget initUI(ModularPanel main, GuiSyncManager manager) { @Override public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { getItemFilter().setMaxStackSizer(stackSizer); - return getItemFilter().createUI(mainPanel, syncManager); + return getItemFilter().createUI(syncManager); } }; manager.syncValue("filter_panel", panel); @@ -140,7 +140,12 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) .marginBottom(2).widthRel(1f) .child(new ItemSlot() .slot(new FilterSlot(filterInventory, 0) - .filter(this::isFilter) + .filter(FilterTypeRegistry::isItemFilter) + .changeListener((newItem, onlyAmountChanged, client, init) -> { + if (newItem.isEmpty() || FilterTypeRegistry.isItemFilter(newItem)) { + onFilterSlotChange(true); + } + }) .singletonSlotGroup(101)) .onUpdateListener(w -> { if (!hasItemFilter() && panel.isPanelOpen()) { @@ -259,10 +264,6 @@ public boolean hasItemFilter() { return currentItemFilter != null; } - public boolean isFilter(ItemStack stack) { - return FilterTypeRegistry.getItemFilterForStack(stack) != null; - } - public void writeInitialSyncData(PacketBuffer packetBuffer) { packetBuffer.writeItemStack(getFilterInventory().getStackInSlot(0)); } @@ -282,11 +283,6 @@ public NBTTagCompound serializeNBT() { tagCompound.setTag("FilterInventory", filterInventory.serializeNBT()); tagCompound.setInteger("MaxStackSize", maxStackSize); tagCompound.setInteger("TransferStackSize", transferStackSize); - if (getItemFilter() != null) { - NBTTagCompound filterInventory = new NBTTagCompound(); - getItemFilter().writeToNBT(filterInventory); - tagCompound.setTag("Filter", filterInventory); - } return tagCompound; } @@ -296,9 +292,6 @@ public void deserializeNBT(NBTTagCompound tagCompound) { this.currentItemFilter = FilterTypeRegistry.getItemFilterForStack(getFilterInventory().getStackInSlot(0)); this.maxStackSize = tagCompound.getInteger("MaxStackSize"); this.transferStackSize = tagCompound.getInteger("TransferStackSize"); - if (getItemFilter() != null) { - this.getItemFilter().readFromNBT(tagCompound.getCompoundTag("Filter")); - } } protected class FilterSlot extends ModularSlot { @@ -307,9 +300,5 @@ public FilterSlot(IItemHandler itemHandler, int index) { super(itemHandler, index); } - @Override - public void onSlotChanged() { - onFilterSlotChange(true); - } } } From 3fcee69f169b720ce965fa62c3f17b62d92b12da Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Jan 2024 17:45:33 -0700 Subject: [PATCH 049/260] go back to phantom item slot --- .../common/covers/filter/ItemFilterContainer.java | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index d694baf7648..fb0b8c23424 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -1,5 +1,7 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.value.sync.SyncHandlers; + import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.LabelWidget; import gregtech.api.gui.widgets.ServerWidgetGroup; @@ -139,7 +141,7 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) return new Row().coverChildrenHeight() .marginBottom(2).widthRel(1f) .child(new ItemSlot() - .slot(new FilterSlot(filterInventory, 0) + .slot(SyncHandlers.phantomItemSlot(filterInventory, 0) .filter(FilterTypeRegistry::isItemFilter) .changeListener((newItem, onlyAmountChanged, client, init) -> { if (newItem.isEmpty() || FilterTypeRegistry.isItemFilter(newItem)) { @@ -293,12 +295,4 @@ public void deserializeNBT(NBTTagCompound tagCompound) { this.maxStackSize = tagCompound.getInteger("MaxStackSize"); this.transferStackSize = tagCompound.getInteger("TransferStackSize"); } - - protected class FilterSlot extends ModularSlot { - - public FilterSlot(IItemHandler itemHandler, int index) { - super(itemHandler, index); - } - - } } From 558b726a1ac1aebda223f69572ef084998493fe1 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:47:03 -0700 Subject: [PATCH 050/260] update OreDictionaryItemFilter with filter reader --- .../filter/OreDictionaryItemFilter.java | 104 ++++++++++++------ 1 file changed, 71 insertions(+), 33 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 2ffa446c243..c6c47f95b37 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -40,25 +40,18 @@ public class OreDictionaryItemFilter extends ItemFilter { private final Map> matchCache = new Object2ObjectOpenHashMap<>(); private final SingleItemVariantMap noOreDictMatch = new SingleItemVariantMap<>(); - protected String expression = ""; - private OreGlob glob = ImpossibleOreGlob.getInstance(); private boolean error; - - private boolean caseSensitive; - /** - * {@code false} requires any of the entry to be match in order for the match to be success, {@code true} requires - * all entries to match - */ - private boolean matchAll; + private OreDictionaryFilterReader filterReader; public OreDictionaryItemFilter(ItemStack stack) { -// super(stack); + this.filterReader = new OreDictionaryFilterReader(stack, 5); + setFilterReader(this.filterReader); } @NotNull public String getExpression() { - return expression; + return this.filterReader.getExpression(); } @NotNull @@ -68,9 +61,9 @@ public OreGlob getGlob() { protected void recompile(@Nullable Consumer<@Nullable OreGlobCompileResult> callback) { clearCache(); - String expr = this.expression; + String expr = this.filterReader.getExpression(); if (!expr.isEmpty()) { - OreGlobCompileResult result = OreGlob.compile(expr, !this.caseSensitive); + OreGlobCompileResult result = OreGlob.compile(expr, !this.filterReader.isCaseSensitive()); this.glob = result.getInstance(); this.error = result.hasError(); if (callback != null) callback.accept(result); @@ -92,7 +85,7 @@ public void initUI(Consumer widgetGroup) { for (int i = 0; i < testSlot.length; i++) { ItemOreFilterTestSlot slot = new ItemOreFilterTestSlot(20 + 22 * i, 0); slot.setGlob(getGlob()); - slot.setMatchAll(this.matchAll); + slot.setMatchAll(this.filterReader.shouldMatchAll()); widgetGroup.accept(slot); testSlot[i] = slot; } @@ -105,11 +98,10 @@ public void initUI(Consumer widgetGroup) { } }; - HighlightedTextField textField = new HighlightedTextField(14, 26, 152, 14, () -> this.expression, + HighlightedTextField textField = new HighlightedTextField(14, 26, 152, 14, + filterReader::getExpression, s -> { - if (s.equals(this.expression)) return; - this.expression = s; - markDirty(); + this.filterReader.setExpression(s); recompile(compileCallback); }); compilationStatus.setTextField(textField); @@ -159,18 +151,16 @@ public void initUI(Consumer widgetGroup) { } }).setMaxLength(64)); widgetGroup.accept(new ForcedInitialSyncImageCycleButtonWidget(130, 38, 18, 18, - GuiTextures.ORE_FILTER_BUTTON_CASE_SENSITIVE, () -> this.caseSensitive, caseSensitive -> { - if (this.caseSensitive == caseSensitive) return; - this.caseSensitive = caseSensitive; - markDirty(); + GuiTextures.ORE_FILTER_BUTTON_CASE_SENSITIVE, filterReader::isCaseSensitive, + caseSensitive -> { + this.filterReader.setCaseSensitive(caseSensitive); recompile(compileCallback); }).setTooltipHoverString( i -> "cover.ore_dictionary_filter.button.case_sensitive." + (i == 0 ? "disabled" : "enabled"))); widgetGroup.accept(new ForcedInitialSyncImageCycleButtonWidget(148, 38, 18, 18, - GuiTextures.ORE_FILTER_BUTTON_MATCH_ALL, () -> this.matchAll, matchAll -> { - if (this.matchAll == matchAll) return; - this.matchAll = matchAll; - markDirty(); + GuiTextures.ORE_FILTER_BUTTON_MATCH_ALL, filterReader::shouldMatchAll, + matchAll -> { + this.filterReader.setMatchAll(matchAll); clearCache(); for (ItemOreFilterTestSlot slot : testSlot) { slot.setMatchAll(matchAll); @@ -230,7 +220,7 @@ public boolean matchesItemStack(@NotNull ItemStack itemStack) { } this.matchCache.put(item, cacheEntry); } - boolean matches = this.matchAll ? this.glob.matchesAll(itemStack) : this.glob.matchesAny(itemStack); + boolean matches = this.filterReader.shouldMatchAll() ? this.glob.matchesAll(itemStack) : this.glob.matchesAny(itemStack); cacheEntry.put(itemStack, matches); return matches; } @@ -247,16 +237,16 @@ public boolean showGlobalTransferLimitSlider() { @Override public void writeToNBT(NBTTagCompound tag) { - tag.setString("OreDictionaryFilter", expression); - if (this.caseSensitive) tag.setBoolean("caseSensitive", true); - if (this.matchAll) tag.setBoolean("matchAll", true); +// tag.setString("OreDictionaryFilter", expression); +// if (this.caseSensitive) tag.setBoolean("caseSensitive", true); +// if (this.matchAll) tag.setBoolean("matchAll", true); } @Override public void readFromNBT(NBTTagCompound tag) { - this.expression = tag.getString("OreDictionaryFilter"); - this.caseSensitive = tag.getBoolean("caseSensitive"); - this.matchAll = tag.getBoolean("matchAll"); +// this.expression = tag.getString("OreDictionaryFilter"); +// this.caseSensitive = tag.getBoolean("caseSensitive"); +// this.matchAll = tag.getBoolean("matchAll"); recompile(null); } @@ -285,4 +275,52 @@ public void readUpdateInfo(int id, PacketBuffer buffer) { } } } + + protected class OreDictionaryFilterReader extends BaseFilterReader { + + private static final String EXPRESSION = "expression"; + private static final String CASE_SENSITIVE = "case_sensitive"; + private static final String MATCH_ALL = "match_all"; + + public OreDictionaryFilterReader(ItemStack container, int slots) { + super(container, slots); +// setExpression(""); + setCaseSensitive(true); + setMatchAll(true); + } + + public void setExpression(String expression) { +// if (this.getExpression().equals(expression)) return; + getStackTag().setString(EXPRESSION, expression); + markDirty(); + } + + public String getExpression() { + return getStackTag().getString(EXPRESSION); + } + + public void setCaseSensitive(boolean caseSensitive) { + if (this.isCaseSensitive() == caseSensitive) return; + getStackTag().setBoolean(CASE_SENSITIVE, caseSensitive); + markDirty(); + } + + public boolean isCaseSensitive() { + return getStackTag().getBoolean(CASE_SENSITIVE); + } + + public void setMatchAll(boolean matchAll) { + if (this.shouldMatchAll() == matchAll) return; + getStackTag().setBoolean(MATCH_ALL, matchAll); + markDirty(); + } + + /** + * {@code false} requires any of the entry to be match in order for the match to be success, {@code true} requires + * all entries to match + */ + public boolean shouldMatchAll() { + return getStackTag().getBoolean(MATCH_ALL); + } + } } From 62aaf9ad5e06c11551d19b16c6b7a34ed27ac6aa Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Jan 2024 19:14:07 -0700 Subject: [PATCH 051/260] update SmartItemFilter with filter reader --- .../common/covers/filter/SmartItemFilter.java | 67 ++++++++----------- 1 file changed, 29 insertions(+), 38 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 810c6ab1cc1..07150251933 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -21,39 +21,35 @@ import java.util.function.Consumer; public class SmartItemFilter extends ItemFilter { - - private SmartFilteringMode filteringMode = SmartFilteringMode.ELECTROLYZER; + private SmartFilterReader filterReader; public SmartItemFilter(ItemStack stack) { -// super(stack); + this.filterReader = new SmartFilterReader(stack); + setFilterReader(this.filterReader); } public SmartFilteringMode getFilteringMode() { - return filteringMode; - } - - public void setFilteringMode(SmartFilteringMode filteringMode) { - this.filteringMode = filteringMode; - markDirty(); + return this.filterReader.getFilteringMode(); } @Override public int getStackTransferLimit(ItemStack stack, int globalTransferLimit) { ItemAndMetadata itemAndMetadata = new ItemAndMetadata(stack); - int cachedTransferRateValue = filteringMode.transferStackSizesCache.getOrDefault(itemAndMetadata, -1); + var filterMode = this.filterReader.getFilteringMode(); + int cachedTransferRateValue = filterMode.transferStackSizesCache.getOrDefault(itemAndMetadata, -1); if (cachedTransferRateValue == -1) { ItemStack infinitelyBigStack = stack.copy(); infinitelyBigStack.setCount(Integer.MAX_VALUE); - Recipe recipe = filteringMode.recipeMap.findRecipe(Long.MAX_VALUE, + Recipe recipe = filterMode.recipeMap.findRecipe(Long.MAX_VALUE, Collections.singletonList(infinitelyBigStack), Collections.emptyList()); if (recipe == null) { - filteringMode.transferStackSizesCache.put(itemAndMetadata, 0); + filterMode.transferStackSizesCache.put(itemAndMetadata, 0); cachedTransferRateValue = 0; } else { GTRecipeInput inputIngredient = recipe.getInputs().iterator().next(); - filteringMode.transferStackSizesCache.put(itemAndMetadata, inputIngredient.getAmount()); + filterMode.transferStackSizesCache.put(itemAndMetadata, inputIngredient.getAmount()); cachedTransferRateValue = inputIngredient.getAmount(); } } @@ -63,28 +59,6 @@ public int getStackTransferLimit(ItemStack stack, int globalTransferLimit) { @Override public MatchResult matchItemStack(ItemStack itemStack) { -// ItemAndMetadata itemAndMetadata = new ItemAndMetadata(itemStack); -// Integer cachedTransferRateValue = filteringMode.transferStackSizesCache.getInt(itemAndMetadata); -// -// if (cachedTransferRateValue == null) { -// ItemStack infinitelyBigStack = itemStack.copy(); -// infinitelyBigStack.setCount(Integer.MAX_VALUE); -// -// Recipe recipe = filteringMode.recipeMap.findRecipe(Long.MAX_VALUE, -// Collections.singletonList(infinitelyBigStack), Collections.emptyList()); -// if (recipe == null) { -// filteringMode.transferStackSizesCache.put(itemAndMetadata, 0); -// cachedTransferRateValue = 0; -// } else { -// GTRecipeInput inputIngredient = recipe.getInputs().iterator().next(); -// filteringMode.transferStackSizesCache.put(itemAndMetadata, inputIngredient.getAmount()); -// cachedTransferRateValue = inputIngredient.getAmount(); -// } -// } -// -// if (cachedTransferRateValue == 0) { -// return Match.FAIL; -// } int data = getStackTransferLimit(itemStack, Integer.MAX_VALUE); var match = data > 0 ? Match.SUCCEED : Match.FAIL; return ItemFilter.createResult(match, data); @@ -93,7 +67,7 @@ public MatchResult matchItemStack(ItemStack itemStack) { @Override public void initUI(Consumer widgetGroup) { widgetGroup.accept(new CycleButtonWidget(10, 0, 75, 20, - SmartFilteringMode.class, this::getFilteringMode, this::setFilteringMode) + SmartFilteringMode.class, filterReader::getFilteringMode, filterReader::setFilteringMode) .setTooltipHoverString("cover.smart_item_filter.filtering_mode.description")); } @@ -109,12 +83,12 @@ public boolean showGlobalTransferLimitSlider() { @Override public void writeToNBT(NBTTagCompound tagCompound) { - tagCompound.setInteger("FilterMode", filteringMode.ordinal()); +// tagCompound.setInteger("FilterMode", filteringMode.ordinal()); } @Override public void readFromNBT(NBTTagCompound tagCompound) { - this.filteringMode = SmartFilteringMode.values()[tagCompound.getInteger("FilterMode")]; +// this.filteringMode = SmartFilteringMode.values()[tagCompound.getInteger("FilterMode")]; } private static class ItemAndMetadataAndStackSize { @@ -162,4 +136,21 @@ public String getName() { return localeName; } } + + protected class SmartFilterReader extends BaseFilterReader { + + private static final String FILTER_MODE = "FilterMode"; + public SmartFilterReader(ItemStack container) { + super(container, 0); + } + + public SmartFilteringMode getFilteringMode() { + return SmartFilteringMode.values()[getStackTag().getInteger(FILTER_MODE)]; + } + + public void setFilteringMode(SmartFilteringMode filteringMode) { + getStackTag().setInteger(FILTER_MODE, filteringMode.ordinal()); + markDirty(); + } + } } From 31f56be38dbd4e07d314e5b37c0ec0322955ac11 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Jan 2024 19:28:13 -0700 Subject: [PATCH 052/260] wait that's not right --- .../java/gregtech/common/covers/filter/ItemFilterContainer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index fb0b8c23424..3a134bbf2e7 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -141,7 +141,7 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) return new Row().coverChildrenHeight() .marginBottom(2).widthRel(1f) .child(new ItemSlot() - .slot(SyncHandlers.phantomItemSlot(filterInventory, 0) + .slot(SyncHandlers.itemSlot(filterInventory, 0) .filter(FilterTypeRegistry::isItemFilter) .changeListener((newItem, onlyAmountChanged, client, init) -> { if (newItem.isEmpty() || FilterTypeRegistry.isItemFilter(newItem)) { From 9785f0e3539aeffe7589714a177ca7f8a9020488 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Jan 2024 20:36:06 -0700 Subject: [PATCH 053/260] rename ui creation move widget creation to new method fix double sync values move cover item filter to mui2 --- .../common/covers/CoverItemFilter.java | 19 ++++ .../common/covers/filter/ItemFilter.java | 8 +- .../covers/filter/ItemFilterContainer.java | 4 +- .../filter/OreDictionaryItemFilter.java | 15 ++- .../covers/filter/SimpleItemFilter.java | 95 ++++++++++--------- .../common/covers/filter/SmartItemFilter.java | 15 ++- 6 files changed, 102 insertions(+), 54 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 7bb42f62f38..874ef914dc0 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -1,5 +1,9 @@ package gregtech.common.covers; +import com.cleanroommc.modularui.factory.SidedPosGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; + import gregtech.api.capability.impl.ItemHandlerDelegate; import gregtech.api.cover.CoverBase; import gregtech.api.cover.CoverDefinition; @@ -10,6 +14,7 @@ import gregtech.api.gui.widgets.CycleButtonWidget; import gregtech.api.gui.widgets.LabelWidget; import gregtech.api.gui.widgets.WidgetGroup; +import gregtech.api.mui.GTGuis; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; import gregtech.common.covers.filter.FilterTypeRegistry; @@ -137,6 +142,20 @@ public ModularUI createUI(EntityPlayer player) { .build(this, player); } + @Override + public boolean usesMui2() { + return true; + } + + @Override + public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { + return GTGuis.createPanel(this, 100, 100) + // todo add filter mode + .coverChildrenWidth() + .child(getItemFilter().createWidgets(guiSyncManager)); + } + + @Override public void renderCover(CCRenderState renderState, Matrix4 translation, IVertexOperation[] pipeline, Cuboid6 plateBox, BlockRenderLayer layer) { diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index b983c7fee27..64475211638 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -2,6 +2,8 @@ import com.cleanroommc.modularui.utils.ItemStackItemHandler; +import com.cleanroommc.modularui.widget.ParentWidget; + import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; @@ -84,7 +86,11 @@ public int getStackTransferLimit(ItemStack stack, int globalTransferLimit) { public abstract void initUI(Consumer widgetGroup); /** Uses Cleanroom MUI */ - public abstract @NotNull ModularPanel createUI(GuiSyncManager syncManager); + public abstract @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager); + + /** Uses Cleanroom MUI - Creates the widgets standalone so that they can be put into their own panel */ + + public abstract @NotNull ParentWidget createWidgets(GuiSyncManager syncManager); public void writeToNBT(NBTTagCompound tagCompound) { // tagCompound.setBoolean("IsBlacklist", this.isBlacklistFilter); diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 3a134bbf2e7..23627c9ac4a 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -15,7 +15,6 @@ import net.minecraft.network.PacketBuffer; import net.minecraft.util.math.MathHelper; import net.minecraftforge.common.util.INBTSerializable; -import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemStackHandler; import com.cleanroommc.modularui.api.drawable.IKey; @@ -28,7 +27,6 @@ import com.cleanroommc.modularui.widgets.ButtonWidget; import com.cleanroommc.modularui.widgets.ItemSlot; import com.cleanroommc.modularui.widgets.layout.Row; -import com.cleanroommc.modularui.widgets.slot.ModularSlot; import org.jetbrains.annotations.NotNull; import java.io.IOException; @@ -133,7 +131,7 @@ public IWidget initUI(ModularPanel main, GuiSyncManager manager) { @Override public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { getItemFilter().setMaxStackSizer(stackSizer); - return getItemFilter().createUI(syncManager); + return getItemFilter().createPopupPanel(syncManager); } }; manager.syncValue("filter_panel", panel); diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index c6c47f95b37..3757fa977e9 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -3,11 +3,16 @@ import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.widget.ParentWidget; + +import com.cleanroommc.modularui.widgets.layout.Row; + import gregtech.api.gui.GuiTextures; import gregtech.api.gui.resources.TextureArea; import gregtech.api.gui.widgets.DrawableWidget; import gregtech.api.gui.widgets.ImageCycleButtonWidget; import gregtech.api.gui.widgets.ImageWidget; +import gregtech.api.mui.GTGuis; import gregtech.api.unification.OreDictUnifier; import gregtech.api.unification.stack.ItemVariantMap; import gregtech.api.unification.stack.MultiItemVariantMap; @@ -170,8 +175,14 @@ public void initUI(Consumer widgetGroup) { } @Override - public @NotNull ModularPanel createUI(GuiSyncManager syncManager) { - return ModularPanel.defaultPanel("ore_dict_filter"); + public @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager) { + return GTGuis.createPopupPanel("ore_dict_filter", 100, 100); + } + + @Override + @NotNull + public ParentWidget createWidgets(GuiSyncManager syncManager) { + return new Row(); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index c8760d46647..3f673713046 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -1,5 +1,6 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widgets.layout.Column; import gregtech.api.gui.GuiTextures; @@ -73,58 +74,60 @@ public void initUI(Consumer widgetGroup) { } @Override - public @NotNull ModularPanel createUI(GuiSyncManager syncManager) { + public @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager) { + return GTGuis.createPopupPanel("simple_item_filter", 81, 81); + } + + @Override + @NotNull + public ParentWidget createWidgets(GuiSyncManager syncManager) { SlotGroup filterInventory = new SlotGroup("filter_inv", 3, 1000, true); var blacklist = new BooleanSyncValue(this.filterReader::isBlacklistFilter, this.filterReader::setBlacklistFilter); var ignoreDamage = new BooleanSyncValue(this.filterReader::isIgnoreDamage, this.filterReader::setIgnoreDamage); var ignoreNBT = new BooleanSyncValue(this.filterReader::isIgnoreNBT, this.filterReader::setIgnoreNBT); syncManager.registerSlotGroup(filterInventory); - syncManager.syncValue("filter_blacklist", blacklist); - syncManager.syncValue("ignore_damage", ignoreDamage); - syncManager.syncValue("ignore_nbt", ignoreNBT); - - return GTGuis.createPopupPanel("simple_item_filter", 18 * 4 + 9, 18 * 4 + 9) - .child(new Row().left(4).bottom(4) - .coverChildren() - .child(SlotGroupWidget.builder() - .matrix("XXX", - "XXX", - "XXX") - .key('X', index -> new ItemSlot() - .tooltip(tooltip -> tooltip.setAutoUpdate(true)) - .tooltipBuilder(tooltip -> { - int count = this.filterReader.getItemsNbt() - .getCompoundTagAt(index) - .getInteger(COUNT); - if (count <= 0) return; - - tooltip.addLine(IKey.str(TextFormattingUtil.formatNumbers(count))); - }) - .slot(new PhantomItemSlot(this.filterReader, index, getMaxStackSizer()) - .slotGroup(filterInventory) - .changeListener((newItem, onlyAmountChanged, client, init) -> { - if (onlyAmountChanged && !init) { - markDirty(); - } - }))) - .build()) - .child(new Column().width(18).coverChildren() - .child(new CycleButtonWidget() - .value(blacklist) - .textureGetter(state -> GTGuiTextures.BUTTON_BLACKLIST[state]) - .addTooltip(0, IKey.lang("cover.filter.blacklist.disabled")) - .addTooltip(1, IKey.lang("cover.filter.blacklist.enabled"))) - .child(new CycleButtonWidget() - .value(ignoreDamage) - .textureGetter(state -> GTGuiTextures.BUTTON_IGNORE_DAMAGE[state]) - .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) - .textureGetter(state -> GTGuiTextures.BUTTON_IGNORE_NBT[state]) - .addTooltip(0, IKey.lang("cover.item_filter.ignore_nbt.disabled")) - .addTooltip(1, IKey.lang("cover.item_filter.ignore_nbt.enabled"))))); + + return new Row().left(4).bottom(4) + .coverChildren() + .child(SlotGroupWidget.builder() + .matrix("XXX", + "XXX", + "XXX") + .key('X', index -> new ItemSlot() + .tooltip(tooltip -> tooltip.setAutoUpdate(true)) + .tooltipBuilder(tooltip -> { + int count = this.filterReader.getItemsNbt() + .getCompoundTagAt(index) + .getInteger(COUNT); + if (count <= 0) return; + + tooltip.addLine(IKey.str(TextFormattingUtil.formatNumbers(count))); + }) + .slot(new PhantomItemSlot(this.filterReader, index, getMaxStackSizer()) + .slotGroup(filterInventory) + .changeListener((newItem, onlyAmountChanged, client, init) -> { + if (onlyAmountChanged && !init) { + markDirty(); + } + }))) + .build()) + .child(new Column().width(18).coverChildren() + .child(new CycleButtonWidget() + .value(blacklist) + .textureGetter(state -> GTGuiTextures.BUTTON_BLACKLIST[state]) + .addTooltip(0, IKey.lang("cover.filter.blacklist.disabled")) + .addTooltip(1, IKey.lang("cover.filter.blacklist.enabled"))) + .child(new CycleButtonWidget() + .value(ignoreDamage) + .textureGetter(state -> GTGuiTextures.BUTTON_IGNORE_DAMAGE[state]) + .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) + .textureGetter(state -> GTGuiTextures.BUTTON_IGNORE_NBT[state]) + .addTooltip(0, IKey.lang("cover.item_filter.ignore_nbt.disabled")) + .addTooltip(1, IKey.lang("cover.item_filter.ignore_nbt.enabled")))); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 07150251933..8f201f712f2 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -3,7 +3,12 @@ import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.widget.ParentWidget; + +import com.cleanroommc.modularui.widgets.layout.Row; + import gregtech.api.gui.widgets.CycleButtonWidget; +import gregtech.api.mui.GTGuis; import gregtech.api.recipes.Recipe; import gregtech.api.recipes.RecipeMap; import gregtech.api.recipes.RecipeMaps; @@ -72,8 +77,14 @@ public void initUI(Consumer widgetGroup) { } @Override - public @NotNull ModularPanel createUI(GuiSyncManager syncManager) { - return ModularPanel.defaultPanel("smart_item_filter"); + public @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager) { + return GTGuis.createPopupPanel("smart_item_filter", 100, 100); + } + + @Override + @NotNull + public ParentWidget createWidgets(GuiSyncManager syncManager) { + return new Row(); } @Override From 088804943e49ca417af122adf78d3cae99d972c9 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Jan 2024 20:41:44 -0700 Subject: [PATCH 054/260] add method for creating normal panel --- .../java/gregtech/common/covers/CoverItemFilter.java | 6 ++---- .../java/gregtech/common/covers/filter/ItemFilter.java | 3 +++ .../common/covers/filter/OreDictionaryItemFilter.java | 5 +++++ .../gregtech/common/covers/filter/SimpleItemFilter.java | 9 ++++++++- .../gregtech/common/covers/filter/SmartItemFilter.java | 5 +++++ 5 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 874ef914dc0..56a7febd075 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -149,10 +149,8 @@ public boolean usesMui2() { @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { - return GTGuis.createPanel(this, 100, 100) - // todo add filter mode - .coverChildrenWidth() - .child(getItemFilter().createWidgets(guiSyncManager)); + // todo add filter mode + return getItemFilter().createPanel(guiSyncManager); } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index 64475211638..01212595c10 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -88,6 +88,9 @@ public int getStackTransferLimit(ItemStack stack, int globalTransferLimit) { /** Uses Cleanroom MUI */ public abstract @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager); + /** Uses Cleanroom MUI */ + public abstract @NotNull ModularPanel createPanel(GuiSyncManager syncManager); + /** Uses Cleanroom MUI - Creates the widgets standalone so that they can be put into their own panel */ public abstract @NotNull ParentWidget createWidgets(GuiSyncManager syncManager); diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 3757fa977e9..8e20be4e234 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -179,6 +179,11 @@ public void initUI(Consumer widgetGroup) { return GTGuis.createPopupPanel("ore_dict_filter", 100, 100); } + @Override + public @NotNull ModularPanel createPanel(GuiSyncManager syncManager) { + return GTGuis.createPanel("ore_dict_filter", 100, 100); + } + @Override @NotNull public ParentWidget createWidgets(GuiSyncManager syncManager) { diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 3f673713046..b90c48b8969 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -75,7 +75,14 @@ public void initUI(Consumer widgetGroup) { @Override public @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager) { - return GTGuis.createPopupPanel("simple_item_filter", 81, 81); + return GTGuis.createPopupPanel("simple_item_filter", 81, 81) + .child(createWidgets(syncManager)); + } + + @Override + public @NotNull ModularPanel createPanel(GuiSyncManager syncManager) { + return GTGuis.createPanel("simple_item_filter", 81, 81) + .child(createWidgets(syncManager)); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 8f201f712f2..7521c7f9a15 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -81,6 +81,11 @@ public void initUI(Consumer widgetGroup) { return GTGuis.createPopupPanel("smart_item_filter", 100, 100); } + @Override + public @NotNull ModularPanel createPanel(GuiSyncManager syncManager) { + return GTGuis.createPanel("smart_item_filter", 100, 100); + } + @Override @NotNull public ParentWidget createWidgets(GuiSyncManager syncManager) { From bbb4ec63d52285d591ea28185bdec74213803dc2 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Jan 2024 21:14:14 -0700 Subject: [PATCH 055/260] implement gui for cover item filter begin deprecation of old mui work on fixing filter main panel --- .../common/covers/CoverItemFilter.java | 46 +++++++++++++------ .../covers/filter/SimpleItemFilter.java | 6 ++- 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 56a7febd075..672ff6c5bad 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -1,9 +1,5 @@ package gregtech.common.covers; -import com.cleanroommc.modularui.factory.SidedPosGuiData; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; - import gregtech.api.capability.impl.ItemHandlerDelegate; import gregtech.api.cover.CoverBase; import gregtech.api.cover.CoverDefinition; @@ -11,10 +7,7 @@ import gregtech.api.cover.CoverableView; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.ModularUI; -import gregtech.api.gui.widgets.CycleButtonWidget; -import gregtech.api.gui.widgets.LabelWidget; -import gregtech.api.gui.widgets.WidgetGroup; -import gregtech.api.mui.GTGuis; +import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; import gregtech.common.covers.filter.FilterTypeRegistry; @@ -39,6 +32,14 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.factory.SidedPosGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.EnumSyncValue; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.widget.Widget; +import com.cleanroommc.modularui.widgets.ToggleButton; +import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -129,9 +130,9 @@ public boolean testItemStack(ItemStack stack) { @Override public ModularUI createUI(EntityPlayer player) { - WidgetGroup filterGroup = new WidgetGroup(); - filterGroup.addWidget(new LabelWidget(10, 5, titleLocale)); - filterGroup.addWidget(new CycleButtonWidget(10, 20, 110, 20, + gregtech.api.gui.widgets.WidgetGroup filterGroup = new gregtech.api.gui.widgets.WidgetGroup(); + filterGroup.addWidget(new gregtech.api.gui.widgets.LabelWidget(10, 5, titleLocale)); + filterGroup.addWidget(new gregtech.api.gui.widgets.CycleButtonWidget(10, 20, 110, 20, GTUtility.mapToString(ItemFilterMode.values(), it -> it.localeName), () -> filterMode.ordinal(), (newMode) -> setFilterMode(ItemFilterMode.values()[newMode]))); this.itemFilter.initFilterUI(45, filterGroup::addWidget); @@ -149,10 +150,29 @@ public boolean usesMui2() { @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { - // todo add filter mode - return getItemFilter().createPanel(guiSyncManager); + var filteringMode = new EnumSyncValue<>(ItemFilterMode.class, this::getFilterMode, this::setFilterMode); + + guiSyncManager.syncValue("filtering_mode", filteringMode); + + return getItemFilter().createPanel(guiSyncManager) + .child(new Row().coverChildren().left(4).top(4) + .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_INSERT)) + .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_EXTRACT)) + .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_BOTH))); } + private Widget createFilterModeButton(EnumSyncValue value, ItemFilterMode mode) { + return new ToggleButton().size(18) + .value(boolValueOf(value, mode)) + .background(GTGuiTextures.MC_BUTTON_DISABLED) + .selectedBackground(GTGuiTextures.MC_BUTTON) +// .overlay(GTGuiTextures.MANUAL_IO_OVERLAY[mode.ordinal()]) todo new overlays + .addTooltipLine(switch (mode) { + case FILTER_INSERT -> IKey.lang("cover.universal.manual_import_export.mode.disabled"); + case FILTER_EXTRACT -> IKey.lang("cover.universal.manual_import_export.mode.unfiltered"); + case FILTER_BOTH -> IKey.lang("cover.universal.manual_import_export.mode.filtered"); + }); + } @Override public void renderCover(CCRenderState renderState, Matrix4 translation, IVertexOperation[] pipeline, diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index b90c48b8969..697a7a781fa 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -81,8 +81,10 @@ public void initUI(Consumer widgetGroup) { @Override public @NotNull ModularPanel createPanel(GuiSyncManager syncManager) { - return GTGuis.createPanel("simple_item_filter", 81, 81) - .child(createWidgets(syncManager)); + return GTGuis.createPanel("simple_item_filter", 176, 166) + .padding(7) + .child(createWidgets(syncManager)) + .bindPlayerInventory(0); } @Override From 4dea5cc8c797e706c323dad5751e799cc15ab40b Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 12 Jan 2024 09:06:09 -0700 Subject: [PATCH 056/260] add ui managers to item filters --- .../java/gregtech/common/items/MetaItem1.java | 12 ++++-- .../behaviors/filter/BaseFilterUIManager.java | 42 +++++++++++++++++++ .../filter/OreDictFilterUIManager.java | 13 ++++++ .../filter/SimpleFilterUIManager.java | 20 +++++++++ .../filter/SmartFilterUIManager.java | 13 ++++++ 5 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java create mode 100644 src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java create mode 100644 src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java create mode 100644 src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java diff --git a/src/main/java/gregtech/common/items/MetaItem1.java b/src/main/java/gregtech/common/items/MetaItem1.java index d194fedd4f5..2f3f8cc3d5e 100644 --- a/src/main/java/gregtech/common/items/MetaItem1.java +++ b/src/main/java/gregtech/common/items/MetaItem1.java @@ -47,6 +47,9 @@ import gregtech.common.items.behaviors.TooltipBehavior; 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.SmartFilterUIManager; import gregtech.common.items.behaviors.monitorplugin.AdvancedMonitorPluginBehavior; import gregtech.common.items.behaviors.monitorplugin.FakeGuiPluginBehavior; import gregtech.common.items.behaviors.monitorplugin.OnlinePicPluginBehavior; @@ -582,11 +585,14 @@ public void registerSubItems() { .setMaterialInfo(new ItemMaterialInfo(new MaterialStack(Materials.Zinc, M * 2))); ITEM_FILTER = addItem(291, "item_filter") .setMaterialInfo(new ItemMaterialInfo(new MaterialStack(Materials.Zinc, M * 2), - new MaterialStack(Materials.Steel, M))); + new MaterialStack(Materials.Steel, M))) + .addComponents(new SimpleFilterUIManager()); ORE_DICTIONARY_FILTER = addItem(292, "ore_dictionary_filter") - .setMaterialInfo(new ItemMaterialInfo(new MaterialStack(Materials.Zinc, M * 2))); + .setMaterialInfo(new ItemMaterialInfo(new MaterialStack(Materials.Zinc, M * 2))) + .addComponents(new OreDictFilterUIManager()); SMART_FILTER = addItem(293, "smart_item_filter") - .setMaterialInfo(new ItemMaterialInfo(new MaterialStack(Materials.Zinc, M * 3 / 2))); + .setMaterialInfo(new ItemMaterialInfo(new MaterialStack(Materials.Zinc, M * 3 / 2))) + .addComponents(new SmartFilterUIManager()); // Functional Covers: ID 301-330 COVER_MACHINE_CONTROLLER = addItem(301, "cover.controller"); diff --git a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java new file mode 100644 index 00000000000..47ea63ce7b0 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java @@ -0,0 +1,42 @@ +package gregtech.common.items.behaviors.filter; + +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.api.widget.Interactable; +import com.cleanroommc.modularui.factory.HandGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Alignment; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; + +import gregtech.api.items.gui.ItemUIFactory; +import gregtech.api.items.metaitem.stats.IItemBehaviour; + +import gregtech.api.mui.GTGuis; +import gregtech.api.mui.factory.MetaItemGuiFactory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +public abstract class BaseFilterUIManager implements IItemBehaviour, ItemUIFactory { + + protected static final ModularPanel ERROR = GTGuis.createPanel("ERROR", 100, 100) + .child(IKey.str("This is an error!").asWidget().align(Alignment.Center)); + + @Override + public final ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { + ItemStack heldItem = player.getHeldItem(hand); + if (!world.isRemote && !Interactable.hasShiftDown()) { + MetaItemGuiFactory.open(player, hand); + } + if (Interactable.hasShiftDown() && heldItem.hasTagCompound()) { + heldItem.setTagCompound(null); + } + return ActionResult.newResult(EnumActionResult.SUCCESS, heldItem); + } + + @Override + public abstract ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager); +} diff --git a/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java new file mode 100644 index 00000000000..40956180550 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java @@ -0,0 +1,13 @@ +package gregtech.common.items.behaviors.filter; + +import com.cleanroommc.modularui.factory.HandGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; + +public class OreDictFilterUIManager extends BaseFilterUIManager{ + + @Override + public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { + return ERROR; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java new file mode 100644 index 00000000000..f1f62204da0 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java @@ -0,0 +1,20 @@ +package gregtech.common.items.behaviors.filter; + +import gregtech.common.covers.filter.FilterTypeRegistry; + +import com.cleanroommc.modularui.factory.HandGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Alignment; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; + +public class SimpleFilterUIManager extends BaseFilterUIManager{ + + @Override + public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { + var filter = FilterTypeRegistry.getItemFilterForStack(guiData.getUsedItemStack()); + if (filter == null) return ERROR; + + return filter.createPanel(guiSyncManager).padding(4) + .child(filter.createWidgets(guiSyncManager).align(Alignment.TopLeft)); + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java new file mode 100644 index 00000000000..804561e5749 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java @@ -0,0 +1,13 @@ +package gregtech.common.items.behaviors.filter; + +import com.cleanroommc.modularui.factory.HandGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; + +public class SmartFilterUIManager extends BaseFilterUIManager{ + + @Override + public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { + return ERROR; + } +} From 79f9fa400bd6c394306274db03d8dc1ca588f678 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 12 Jan 2024 09:06:40 -0700 Subject: [PATCH 057/260] set default stack sizer to return 1 --- src/main/java/gregtech/common/covers/filter/ItemFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index 01212595c10..d153ca26628 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -152,7 +152,7 @@ public enum Match { protected static class BaseFilterReader extends ItemStackItemHandler { protected final ItemStack container; - private Supplier maxStackSizer = () -> Integer.MAX_VALUE; + private Supplier maxStackSizer = () -> 1; private int cache; public BaseFilterReader(ItemStack container, int slots) { super(container, slots); From 370fa61c5a1a0adf180cc698d19a68c7d8f86f46 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 12 Jan 2024 09:06:55 -0700 Subject: [PATCH 058/260] more work on ui --- .../gregtech/common/covers/CoverItemFilter.java | 12 ++++++++---- .../common/covers/filter/SimpleItemFilter.java | 15 ++++++--------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 672ff6c5bad..6f15ea716d4 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -1,5 +1,7 @@ package gregtech.common.covers; +import com.cleanroommc.modularui.widgets.layout.Column; + import gregtech.api.capability.impl.ItemHandlerDelegate; import gregtech.api.cover.CoverBase; import gregtech.api.cover.CoverDefinition; @@ -155,10 +157,12 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag guiSyncManager.syncValue("filtering_mode", filteringMode); return getItemFilter().createPanel(guiSyncManager) - .child(new Row().coverChildren().left(4).top(4) - .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_INSERT)) - .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_EXTRACT)) - .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_BOTH))); + .child(new Column().left(4).top(4).coverChildren() + .child(new Row().coverChildren().marginBottom(4) + .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_INSERT)) + .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_EXTRACT)) + .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_BOTH))) + .child(getItemFilter().createWidgets(guiSyncManager))); } private Widget createFilterModeButton(EnumSyncValue value, ItemFilterMode mode) { diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 697a7a781fa..2dfac5abf3c 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -76,15 +76,14 @@ public void initUI(Consumer widgetGroup) { @Override public @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager) { return GTGuis.createPopupPanel("simple_item_filter", 81, 81) - .child(createWidgets(syncManager)); + .child(createWidgets(syncManager).left(4).bottom(4)); } @Override public @NotNull ModularPanel createPanel(GuiSyncManager syncManager) { return GTGuis.createPanel("simple_item_filter", 176, 166) - .padding(7) - .child(createWidgets(syncManager)) - .bindPlayerInventory(0); + .padding(4) + .child(SlotGroupWidget.playerInventory(0).bottom(4)); } @Override @@ -97,8 +96,7 @@ public ParentWidget createWidgets(GuiSyncManager syncManager) { syncManager.registerSlotGroup(filterInventory); - return new Row().left(4).bottom(4) - .coverChildren() + return new Row().coverChildren() .child(SlotGroupWidget.builder() .matrix("XXX", "XXX", @@ -109,9 +107,8 @@ public ParentWidget createWidgets(GuiSyncManager syncManager) { int count = this.filterReader.getItemsNbt() .getCompoundTagAt(index) .getInteger(COUNT); - if (count <= 0) return; - - tooltip.addLine(IKey.str(TextFormattingUtil.formatNumbers(count))); + if (count > 64) + tooltip.addLine(IKey.format("Count: %s", TextFormattingUtil.formatNumbers(count))); }) .slot(new PhantomItemSlot(this.filterReader, index, getMaxStackSizer()) .slotGroup(filterInventory) From 7e1a01d1343c83ae5a3c5dbbba105e312ee3a382 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 12 Jan 2024 09:39:12 -0700 Subject: [PATCH 059/260] buttons not adaptable enough --- src/main/java/gregtech/api/mui/GTGuiTextures.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/api/mui/GTGuiTextures.java b/src/main/java/gregtech/api/mui/GTGuiTextures.java index e503a5b56f1..8fb6067aca5 100644 --- a/src/main/java/gregtech/api/mui/GTGuiTextures.java +++ b/src/main/java/gregtech/api/mui/GTGuiTextures.java @@ -277,7 +277,7 @@ public static class IDs { public static final UITexture BUTTON = new UITexture.Builder() .location(GTValues.MODID, "textures/gui/widget/button.png") .imageSize(18, 18) - .adaptable(1) + .adaptable(2) .name(IDs.STANDARD_BUTTON) .canApplyTheme() .build(); @@ -286,13 +286,13 @@ public static class IDs { .location("modularui", "gui/widgets/mc_button.png") // todo .imageSize(16, 32) .uv(0.0f, 0.0f, 1.0f, 0.5f) - .adaptable(1) + .adaptable(2) .build(); public static final UITexture MC_BUTTON_DISABLED = new UITexture.Builder() .location("modularui", "gui/widgets/mc_button_disabled.png") // todo .imageSize(16, 16) - .adaptable(1) + .adaptable(2) .build(); // BUTTON OVERLAYS From 8b184ad0f95504bc0e4d6c36f10354748e2b618f Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 12 Jan 2024 09:39:39 -0700 Subject: [PATCH 060/260] create ui for SmartItemFilter --- .../common/covers/filter/SmartItemFilter.java | 40 ++++++++++++++----- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 7521c7f9a15..811cf03bd71 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -1,13 +1,7 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; - -import com.cleanroommc.modularui.widget.ParentWidget; - -import com.cleanroommc.modularui.widgets.layout.Row; - import gregtech.api.gui.widgets.CycleButtonWidget; +import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.api.recipes.Recipe; import gregtech.api.recipes.RecipeMap; @@ -19,6 +13,15 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.IStringSerializable; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.BoolValue; +import com.cleanroommc.modularui.value.sync.EnumSyncValue; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widget.Widget; +import com.cleanroommc.modularui.widgets.ToggleButton; +import com.cleanroommc.modularui.widgets.layout.Column; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import org.jetbrains.annotations.NotNull; @@ -78,7 +81,8 @@ public void initUI(Consumer widgetGroup) { @Override public @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager) { - return GTGuis.createPopupPanel("smart_item_filter", 100, 100); + return GTGuis.createPopupPanel("smart_item_filter", 100, 100) + .child(createWidgets(syncManager)); } @Override @@ -89,7 +93,25 @@ public void initUI(Consumer widgetGroup) { @Override @NotNull public ParentWidget createWidgets(GuiSyncManager syncManager) { - return new Row(); + var filterMode = new EnumSyncValue<>(SmartFilteringMode.class, filterReader::getFilteringMode, filterReader::setFilteringMode); + syncManager.syncValue("filter_mode", filterMode); + + return new Column().coverChildren() + .child(createFilterModeButton(filterMode, SmartFilteringMode.ELECTROLYZER)) + .child(createFilterModeButton(filterMode, SmartFilteringMode.CENTRIFUGE)) + .child(createFilterModeButton(filterMode, SmartFilteringMode.SIFTER)); + } + + private Widget createFilterModeButton(EnumSyncValue value, SmartFilteringMode mode) { + return new ToggleButton().height(18).width(18 * 4) + .value(boolValueOf(value, mode)) + .background(GTGuiTextures.MC_BUTTON_DISABLED) + .selectedBackground(GTGuiTextures.MC_BUTTON) + .overlay(IKey.lang(mode.localeName)); + } + + protected > BoolValue.Dynamic boolValueOf(EnumSyncValue syncValue, T value) { + return new BoolValue.Dynamic(() -> syncValue.getValue() == value, $ -> syncValue.setValue(value)); } @Override From d19d4bd23dbe022adf0dea7ba86976fa5500d02b Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 12 Jan 2024 10:02:18 -0700 Subject: [PATCH 061/260] make filter registry not null throw exception for invalid arguments --- .../gregtech/common/covers/CoverItemFilter.java | 2 +- .../common/covers/filter/FilterTypeRegistry.java | 15 ++++++++------- .../common/covers/filter/ItemFilterContainer.java | 9 +++++++-- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 6f15ea716d4..84d8a2f4fcb 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -158,7 +158,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag return getItemFilter().createPanel(guiSyncManager) .child(new Column().left(4).top(4).coverChildren() - .child(new Row().coverChildren().marginBottom(4) + .child(new Row().coverChildren().marginBottom(4).left(0) .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_INSERT)) .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_EXTRACT)) .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_BOTH))) diff --git a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java index 555623bfe77..95b67a867e0 100644 --- a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java +++ b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java @@ -9,6 +9,7 @@ import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import org.jetbrains.annotations.NotNull; import java.util.Map; @@ -88,19 +89,19 @@ public static FluidFilter createFluidFilterById(int filterId) { return createNewFilterInstance(filterClass); } - public static ItemFilter getItemFilterForStack(ItemStack itemStack) { + public static @NotNull ItemFilter getItemFilterForStack(ItemStack itemStack) { int filterId = getFilterIdForStack(itemStack); if (filterId == -1) { - return null; + throw new IllegalArgumentException(String.format("Failed to create filter instance for stack %s", itemStack)); } Class filterClass = itemFilterById.get(filterId); return createNewFilterInstance(filterClass, itemStack); } - public static FluidFilter getFluidFilterForStack(ItemStack itemStack) { + public static @NotNull FluidFilter getFluidFilterForStack(ItemStack itemStack) { int filterId = getFilterIdForStack(itemStack); if (filterId == -1) { - return null; + throw new IllegalArgumentException(String.format("Failed to create filter instance for stack %s", itemStack)); } Class filterClass = fluidFilterById.get(filterId); return createNewFilterInstance(filterClass, itemStack); @@ -113,12 +114,12 @@ public static int getFilterIdForStack(ItemStack stack) { return id; } - private static T createNewFilterInstance(Class filterClass, ItemStack stack) { + private static @NotNull T createNewFilterInstance(Class filterClass, ItemStack stack) { try { return filterClass.getDeclaredConstructor(stack.getClass()).newInstance(stack); } catch (ReflectiveOperationException exception) { - GTLog.logger.error("Failed to create filter instance for class {}", filterClass, exception); - return null; +// GTLog.logger.error("Failed to create filter instance for class {}", filterClass, exception); + throw new IllegalArgumentException(String.format("Failed to create filter instance for class %s", filterClass), exception); } } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 23627c9ac4a..10b7196c311 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -274,7 +274,9 @@ public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { stack = packetBuffer.readItemStack(); } catch (IOException ignore) {} this.filterInventory.setStackInSlot(0, stack); - this.currentItemFilter = FilterTypeRegistry.getItemFilterForStack(stack); + + if (FilterTypeRegistry.isItemFilter(stack)) + this.currentItemFilter = FilterTypeRegistry.getItemFilterForStack(stack); } @Override @@ -289,7 +291,10 @@ public NBTTagCompound serializeNBT() { @Override public void deserializeNBT(NBTTagCompound tagCompound) { this.filterInventory.deserializeNBT(tagCompound.getCompoundTag("FilterInventory")); - this.currentItemFilter = FilterTypeRegistry.getItemFilterForStack(getFilterInventory().getStackInSlot(0)); + var stack = getFilterInventory().getStackInSlot(0); + if (FilterTypeRegistry.isItemFilter(stack)) + this.currentItemFilter = FilterTypeRegistry.getItemFilterForStack(stack); + this.maxStackSize = tagCompound.getInteger("MaxStackSize"); this.transferStackSize = tagCompound.getInteger("TransferStackSize"); } From 4fd433ed38a19178dd123828ac5c8b6f05f57729 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 12 Jan 2024 10:09:54 -0700 Subject: [PATCH 062/260] make SmartFilterUIManager work more work on ui --- .../gregtech/common/covers/filter/SimpleItemFilter.java | 8 +++++--- .../items/behaviors/filter/SimpleFilterUIManager.java | 2 -- .../items/behaviors/filter/SmartFilterUIManager.java | 6 +++++- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 2dfac5abf3c..b21b736c9d3 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -1,5 +1,6 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widgets.layout.Column; @@ -76,14 +77,15 @@ public void initUI(Consumer widgetGroup) { @Override public @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager) { return GTGuis.createPopupPanel("simple_item_filter", 81, 81) - .child(createWidgets(syncManager).left(4).bottom(4)); + .padding(4) + .child(createWidgets(syncManager).align(Alignment.BottomLeft)); } @Override public @NotNull ModularPanel createPanel(GuiSyncManager syncManager) { return GTGuis.createPanel("simple_item_filter", 176, 166) - .padding(4) - .child(SlotGroupWidget.playerInventory(0).bottom(4)); + .padding(7).child(new ParentWidget<>().bottom(0) + .child(SlotGroupWidget.playerInventory(0))); } @Override 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 f1f62204da0..499ffeccf16 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java @@ -12,8 +12,6 @@ public class SimpleFilterUIManager extends BaseFilterUIManager{ @Override public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { var filter = FilterTypeRegistry.getItemFilterForStack(guiData.getUsedItemStack()); - if (filter == null) return ERROR; - return filter.createPanel(guiSyncManager).padding(4) .child(filter.createWidgets(guiSyncManager).align(Alignment.TopLeft)); } 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 804561e5749..124b263e9b4 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java @@ -4,10 +4,14 @@ import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import gregtech.common.covers.filter.FilterTypeRegistry; + public class SmartFilterUIManager extends BaseFilterUIManager{ @Override public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { - return ERROR; + var filter = FilterTypeRegistry.getItemFilterForStack(guiData.getUsedItemStack()); + return filter.createPanel(guiSyncManager).padding(4) + .child(filter.createWidgets(guiSyncManager)); } } From 9253730cbc7d7007082e0826f5ecb06d7c0575b7 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 12 Jan 2024 10:58:15 -0700 Subject: [PATCH 063/260] widget position and some improvements weeee --- .../common/covers/filter/SimpleItemFilter.java | 8 ++++---- .../common/covers/filter/SmartItemFilter.java | 8 ++++++-- .../items/behaviors/filter/BaseFilterUIManager.java | 12 ++++++++++++ .../behaviors/filter/SimpleFilterUIManager.java | 9 ++++++--- .../items/behaviors/filter/SmartFilterUIManager.java | 10 +++++++--- 5 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index b21b736c9d3..a21d94a49da 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -77,15 +77,15 @@ public void initUI(Consumer widgetGroup) { @Override public @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager) { return GTGuis.createPopupPanel("simple_item_filter", 81, 81) - .padding(4) - .child(createWidgets(syncManager).align(Alignment.BottomLeft)); + .child(IKey.str("Settings").asWidget().margin(4).align(Alignment.TopLeft)) + .child(createWidgets(syncManager).bottom(4).left(4)); } @Override public @NotNull ModularPanel createPanel(GuiSyncManager syncManager) { return GTGuis.createPanel("simple_item_filter", 176, 166) - .padding(7).child(new ParentWidget<>().bottom(0) - .child(SlotGroupWidget.playerInventory(0))); + .padding(7) + .child(SlotGroupWidget.playerInventory(0).bottom(7).left(7)); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 811cf03bd71..43005d26e2c 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -1,5 +1,7 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.utils.Alignment; + import gregtech.api.gui.widgets.CycleButtonWidget; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; @@ -82,12 +84,13 @@ public void initUI(Consumer widgetGroup) { @Override public @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager) { return GTGuis.createPopupPanel("smart_item_filter", 100, 100) - .child(createWidgets(syncManager)); + .child(IKey.str("Settings").asWidget().margin(4).align(Alignment.TopLeft)) + .child(createWidgets(syncManager).bottom(4).left(4)); } @Override public @NotNull ModularPanel createPanel(GuiSyncManager syncManager) { - return GTGuis.createPanel("smart_item_filter", 100, 100); + return GTGuis.createPanel("smart_item_filter", 100, 100).padding(7); } @Override @@ -106,6 +109,7 @@ private Widget createFilterModeButton(EnumSyncValue onItemRightClick(World world, EntityPlayer @Override public abstract ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager); + + protected final ModularPanel createBasePanel(ItemStack stack) { + return GTGuis.createPanel(stack, getWidth(), getHeight()); + } + + protected int getWidth() { + return 176; + } + + protected int getHeight() { + return 188; + } } 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 499ffeccf16..57c0e117d04 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java @@ -2,17 +2,20 @@ import gregtech.common.covers.filter.FilterTypeRegistry; +import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.factory.HandGuiData; import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.widgets.layout.Column; public class SimpleFilterUIManager extends BaseFilterUIManager{ @Override public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { var filter = FilterTypeRegistry.getItemFilterForStack(guiData.getUsedItemStack()); - return filter.createPanel(guiSyncManager).padding(4) - .child(filter.createWidgets(guiSyncManager).align(Alignment.TopLeft)); + return createBasePanel(filter.getContainerStack()) + .child(new Column().coverChildren().top(4).left(4) + .child(IKey.str("Settings").asWidget()) + .child(filter.createWidgets(guiSyncManager))); } } 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 124b263e9b4..9a337ae9b47 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java @@ -1,17 +1,21 @@ package gregtech.common.items.behaviors.filter; +import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.factory.HandGuiData; import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import gregtech.common.covers.filter.FilterTypeRegistry; -public class SmartFilterUIManager extends BaseFilterUIManager{ +public class SmartFilterUIManager extends BaseFilterUIManager { @Override public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { var filter = FilterTypeRegistry.getItemFilterForStack(guiData.getUsedItemStack()); - return filter.createPanel(guiSyncManager).padding(4) - .child(filter.createWidgets(guiSyncManager)); + return createBasePanel(filter.getContainerStack()) + .child(IKey.str("Settings").asWidget() + .margin(4).height(14).align(Alignment.TopLeft)) + .child(filter.createWidgets(guiSyncManager).left(7).top(18)); } } From cbf9a9d938fbe61014e0f44dd52bb5485e3f448c Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 12 Jan 2024 15:35:09 -0700 Subject: [PATCH 064/260] make `createTitleRow()` in CoverWithUI public and static --- src/main/java/gregtech/api/cover/CoverWithUI.java | 7 +++---- src/main/java/gregtech/common/covers/CoverConveyor.java | 2 +- .../gregtech/common/covers/CoverMachineController.java | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/gregtech/api/cover/CoverWithUI.java b/src/main/java/gregtech/api/cover/CoverWithUI.java index f40f2df37bc..7ddf250bbca 100644 --- a/src/main/java/gregtech/api/cover/CoverWithUI.java +++ b/src/main/java/gregtech/api/cover/CoverWithUI.java @@ -92,13 +92,12 @@ default void markAsDirty() { /** * Create the Title bar widget for a Cover. */ - default Row createTitleRow() { - ItemStack item = getDefinition().getDropItemStack(); + static Row createTitleRow(ItemStack stack) { return new Row() .pos(4, 4) .height(16).coverChildrenWidth() - .child(new ItemDrawable(getDefinition().getDropItemStack()).asWidget().size(16).marginRight(4)) - .child(IKey.str(item.getDisplayName()).color(UI_TITLE_COLOR).asWidget().heightRel(1.0f)); + .child(new ItemDrawable(stack).asWidget().size(16).marginRight(4)) + .child(IKey.str(stack.getDisplayName()).color(UI_TITLE_COLOR).asWidget().heightRel(1.0f)); } /** diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index c316ee2e749..9d0e44f1ccb 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -522,7 +522,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag getItemFilterContainer().setFilterStackSizer(this::getMaxStackSize); } - return panel.child(createTitleRow()) + return panel.child(CoverWithUI.createTitleRow(getPickItem())) .child(createUI(panel, guiSyncManager)) .bindPlayerInventory(); } diff --git a/src/main/java/gregtech/common/covers/CoverMachineController.java b/src/main/java/gregtech/common/covers/CoverMachineController.java index 423a44fccd3..517a9bc5711 100644 --- a/src/main/java/gregtech/common/covers/CoverMachineController.java +++ b/src/main/java/gregtech/common/covers/CoverMachineController.java @@ -120,7 +120,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag guiSyncManager.syncValue("inverted", invertedValue); return GTGuis.createPanel(this, 176, 112) - .child(createTitleRow()) + .child(CoverWithUI.createTitleRow(getPickItem())) .child(new Column() .widthRel(1.0f).margin(7, 0) .top(24).coverChildrenHeight() From ec18df722d9e5663b4c1d65759462c836bcbfc7b Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 12 Jan 2024 15:35:51 -0700 Subject: [PATCH 065/260] filter ui is 2/3 complete i am afraid of oredict filter --- .../java/gregtech/common/covers/CoverConveyor.java | 2 +- .../gregtech/common/covers/CoverItemFilter.java | 9 +++++++-- .../common/covers/filter/SimpleItemFilter.java | 4 +--- .../behaviors/filter/BaseFilterUIManager.java | 4 +++- .../behaviors/filter/SimpleFilterUIManager.java | 10 ++++------ .../behaviors/filter/SmartFilterUIManager.java | 14 ++++++-------- 6 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 9d0e44f1ccb..e2f040f3eef 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -516,7 +516,7 @@ public boolean usesMui2() { @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { - var panel = GTGuis.createPanel(this, 176, 112 + 176); + var panel = GTGuis.createPanel(this, 176,192); if (getItemFilterContainer().hasItemFilter()) { getItemFilterContainer().setFilterStackSizer(this::getMaxStackSize); diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 84d8a2f4fcb..279d4f11618 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -1,5 +1,7 @@ package gregtech.common.covers; +import com.cleanroommc.modularui.utils.Alignment; +import com.cleanroommc.modularui.widgets.SlotGroupWidget; import com.cleanroommc.modularui.widgets.layout.Column; import gregtech.api.capability.impl.ItemHandlerDelegate; @@ -157,12 +159,15 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag guiSyncManager.syncValue("filtering_mode", filteringMode); return getItemFilter().createPanel(guiSyncManager) - .child(new Column().left(4).top(4).coverChildren() + .size(176, 188).padding(7) + .child(CoverWithUI.createTitleRow(getPickItem()).left(7)) + .child(new Column().coverChildren().align(Alignment.TopLeft).top(22) .child(new Row().coverChildren().marginBottom(4).left(0) .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_INSERT)) .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_EXTRACT)) .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_BOTH))) - .child(getItemFilter().createWidgets(guiSyncManager))); + .child(getItemFilter().createWidgets(guiSyncManager))) + .child(SlotGroupWidget.playerInventory().left(7)); } private Widget createFilterModeButton(EnumSyncValue value, ItemFilterMode mode) { diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index a21d94a49da..5af5faed9a4 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -83,9 +83,7 @@ public void initUI(Consumer widgetGroup) { @Override public @NotNull ModularPanel createPanel(GuiSyncManager syncManager) { - return GTGuis.createPanel("simple_item_filter", 176, 166) - .padding(7) - .child(SlotGroupWidget.playerInventory(0).bottom(7).left(7)); + return GTGuis.createPanel("simple_item_filter", 176, 166); } @Override 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 9bf8e3490bd..292e64ec187 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java @@ -7,6 +7,7 @@ import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import gregtech.api.cover.CoverWithUI; import gregtech.api.items.gui.ItemUIFactory; import gregtech.api.items.metaitem.stats.IItemBehaviour; @@ -41,7 +42,8 @@ public final ActionResult onItemRightClick(World world, EntityPlayer public abstract ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager); protected final ModularPanel createBasePanel(ItemStack stack) { - return GTGuis.createPanel(stack, getWidth(), getHeight()); + return GTGuis.createPanel(stack, getWidth(), getHeight()) + .child(CoverWithUI.createTitleRow(stack)); } protected int getWidth() { 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 57c0e117d04..8a150f1a3ed 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java @@ -2,20 +2,18 @@ import gregtech.common.covers.filter.FilterTypeRegistry; -import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.factory.HandGuiData; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; -import com.cleanroommc.modularui.widgets.layout.Column; +import com.cleanroommc.modularui.widgets.SlotGroupWidget; public class SimpleFilterUIManager extends BaseFilterUIManager{ @Override public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { var filter = FilterTypeRegistry.getItemFilterForStack(guiData.getUsedItemStack()); - return createBasePanel(filter.getContainerStack()) - .child(new Column().coverChildren().top(4).left(4) - .child(IKey.str("Settings").asWidget()) - .child(filter.createWidgets(guiSyncManager))); + return createBasePanel(filter.getContainerStack()).padding(4).height(166) + .child(filter.createWidgets(guiSyncManager).top(22).left(7)) + .child(SlotGroupWidget.playerInventory().left(7)); } } 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 9a337ae9b47..1a11e4eea35 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java @@ -1,21 +1,19 @@ package gregtech.common.items.behaviors.filter; -import com.cleanroommc.modularui.api.drawable.IKey; +import gregtech.common.covers.filter.FilterTypeRegistry; + import com.cleanroommc.modularui.factory.HandGuiData; import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.value.sync.GuiSyncManager; - -import gregtech.common.covers.filter.FilterTypeRegistry; +import com.cleanroommc.modularui.widgets.SlotGroupWidget; public class SmartFilterUIManager extends BaseFilterUIManager { @Override public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { var filter = FilterTypeRegistry.getItemFilterForStack(guiData.getUsedItemStack()); - return createBasePanel(filter.getContainerStack()) - .child(IKey.str("Settings").asWidget() - .margin(4).height(14).align(Alignment.TopLeft)) - .child(filter.createWidgets(guiSyncManager).left(7).top(18)); + return createBasePanel(filter.getContainerStack()).height(166) + .child(filter.createWidgets(guiSyncManager).left(7).top(22)) + .child(SlotGroupWidget.playerInventory(0).bottom(7).left(7)); } } From b49f96f825ce78644de8de9b071664b47fe5a3a3 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 13 Jan 2024 18:50:27 -0700 Subject: [PATCH 066/260] the oredict filter works now still not great impl --- .../filter/OreDictionaryItemFilter.java | 352 +++++++++++------- .../gui/widget/HighlightedTextField.java | 135 +++---- .../orefilter/ItemOreFilterTestSlot.java | 134 +++---- .../widget/orefilter/OreFilterTestSlot.java | 152 +++----- .../filter/OreDictFilterUIManager.java | 6 +- 5 files changed, 374 insertions(+), 405 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 8e20be4e234..d8c12edbc9b 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -1,44 +1,40 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; - -import com.cleanroommc.modularui.widget.ParentWidget; - -import com.cleanroommc.modularui.widgets.layout.Row; - -import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.resources.TextureArea; -import gregtech.api.gui.widgets.DrawableWidget; -import gregtech.api.gui.widgets.ImageCycleButtonWidget; -import gregtech.api.gui.widgets.ImageWidget; +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.function.BooleanConsumer; import gregtech.api.util.oreglob.OreGlob; import gregtech.api.util.oreglob.OreGlobCompileResult; import gregtech.common.covers.filter.oreglob.impl.ImpossibleOreGlob; import gregtech.common.gui.widget.HighlightedTextField; -import gregtech.common.gui.widget.orefilter.ItemOreFilterTestSlot; -import gregtech.common.gui.widget.orefilter.OreGlobCompileStatusWidget; +import gregtech.common.gui.widget.orefilter.OreFilterTestSlot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.PacketBuffer; import net.minecraft.util.text.TextFormatting; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.BooleanSyncValue; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.value.sync.StringSyncValue; +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widgets.SlotGroupWidget; +import com.cleanroommc.modularui.widgets.ToggleButton; +import com.cleanroommc.modularui.widgets.layout.Column; +import com.cleanroommc.modularui.widgets.layout.Row; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Set; -import java.util.function.BooleanSupplier; import java.util.function.Consumer; +import java.util.function.Supplier; public class OreDictionaryItemFilter extends ItemFilter { @@ -47,11 +43,12 @@ public class OreDictionaryItemFilter extends ItemFilter { private OreGlob glob = ImpossibleOreGlob.getInstance(); private boolean error; - private OreDictionaryFilterReader filterReader; + private final OreDictionaryFilterReader filterReader; public OreDictionaryItemFilter(ItemStack stack) { - this.filterReader = new OreDictionaryFilterReader(stack, 5); + this.filterReader = new OreDictionaryFilterReader(stack, 0); setFilterReader(this.filterReader); + recompile(); } @NotNull @@ -64,18 +61,16 @@ public OreGlob getGlob() { return this.glob; } - protected void recompile(@Nullable Consumer<@Nullable OreGlobCompileResult> callback) { + protected void recompile() { clearCache(); String expr = this.filterReader.getExpression(); if (!expr.isEmpty()) { OreGlobCompileResult result = OreGlob.compile(expr, !this.filterReader.isCaseSensitive()); this.glob = result.getInstance(); this.error = result.hasError(); - if (callback != null) callback.accept(result); } else { this.glob = ImpossibleOreGlob.getInstance(); this.error = true; - if (callback != null) callback.accept(null); } } @@ -86,92 +81,86 @@ protected void clearCache() { @Override public void initUI(Consumer widgetGroup) { - ItemOreFilterTestSlot[] testSlot = new ItemOreFilterTestSlot[5]; - for (int i = 0; i < testSlot.length; i++) { - ItemOreFilterTestSlot slot = new ItemOreFilterTestSlot(20 + 22 * i, 0); - slot.setGlob(getGlob()); - slot.setMatchAll(this.filterReader.shouldMatchAll()); - widgetGroup.accept(slot); - testSlot[i] = slot; - } - OreGlobCompileStatusWidget compilationStatus = new OreGlobCompileStatusWidget(10, 10); - - Consumer<@Nullable OreGlobCompileResult> compileCallback = result -> { - compilationStatus.setCompileResult(result); - for (ItemOreFilterTestSlot slot : testSlot) { - slot.setGlob(getGlob()); - } - }; - - HighlightedTextField textField = new HighlightedTextField(14, 26, 152, 14, - filterReader::getExpression, - s -> { - this.filterReader.setExpression(s); - recompile(compileCallback); - }); - compilationStatus.setTextField(textField); - - widgetGroup.accept(new ImageWidget(10, 0, 7, 7, GuiTextures.ORE_FILTER_INFO) - .setTooltip("cover.ore_dictionary_filter.info")); - widgetGroup.accept(compilationStatus); - widgetGroup.accept(new DrawableWidget(10, 22, 156, 16) - .setBackgroundDrawer((mouseX, mouseY, partialTicks, context, widget) -> { - gregtech.api.gui.Widget.drawGradientRect(widget.getPosition().x, widget.getPosition().y, - widget.getSize().width, widget.getSize().height, - 0xFF808080, 0xFF808080, false); - gregtech.api.gui.Widget.drawGradientRect(widget.getPosition().x + 1, widget.getPosition().y + 1, - widget.getSize().width - 2, widget.getSize().height - 2, - 0xFF000000, 0xFF000000, false); - })); - widgetGroup.accept(textField - .setHighlightRule(h -> { - String t = h.getOriginalText(); - for (int i = 0; i < t.length(); i++) { - switch (t.charAt(i)) { - case '|', '&', '^', '(', ')' -> h.format(i, TextFormatting.GOLD); - case '*', '?' -> h.format(i, TextFormatting.GREEN); - case '!' -> h.format(i, TextFormatting.RED); - case '\\' -> h.format(i++, TextFormatting.YELLOW); - case '$' -> { // TODO: remove this switch case in 2.9 - h.format(i, TextFormatting.DARK_GREEN); - for (; i < t.length(); i++) { - switch (t.charAt(i)) { - case ' ', '\t', '\n', '\r' -> {} - case '\\' -> { - i++; - continue; - } - default -> { - continue; - } - } - break; - } - } - default -> { - continue; - } - } - h.format(i + 1, TextFormatting.RESET); - } - }).setMaxLength(64)); - widgetGroup.accept(new ForcedInitialSyncImageCycleButtonWidget(130, 38, 18, 18, - GuiTextures.ORE_FILTER_BUTTON_CASE_SENSITIVE, filterReader::isCaseSensitive, - caseSensitive -> { - this.filterReader.setCaseSensitive(caseSensitive); - recompile(compileCallback); - }).setTooltipHoverString( - i -> "cover.ore_dictionary_filter.button.case_sensitive." + (i == 0 ? "disabled" : "enabled"))); - widgetGroup.accept(new ForcedInitialSyncImageCycleButtonWidget(148, 38, 18, 18, - GuiTextures.ORE_FILTER_BUTTON_MATCH_ALL, filterReader::shouldMatchAll, - matchAll -> { - this.filterReader.setMatchAll(matchAll); - clearCache(); - for (ItemOreFilterTestSlot slot : testSlot) { - slot.setMatchAll(matchAll); - } - }).setTooltipHoverString( - i -> "cover.ore_dictionary_filter.button.match_all." + (i == 0 ? "disabled" : "enabled"))); +// ItemOreFilterTestSlot[] testSlot = new ItemOreFilterTestSlot[5]; +// for (int i = 0; i < testSlot.length; i++) { +// ItemOreFilterTestSlot slot = new ItemOreFilterTestSlot(20 + 22 * i, 0); +// slot.setGlob(getGlob()); +// slot.setMatchAll(this.filterReader.shouldMatchAll()); +// widgetGroup.accept(slot); +// testSlot[i] = slot; +// } +// OreGlobCompileStatusWidget compilationStatus = new OreGlobCompileStatusWidget(10, 10); +// +// +// HighlightedTextField textField = new HighlightedTextField(14, 26, 152, 14, +// filterReader::getExpression, +// s -> { +// this.filterReader.setExpression(s); +// recompile(compileCallback); +// }); +// compilationStatus.setTextField(textField); +// +// widgetGroup.accept(new ImageWidget(10, 0, 7, 7, gregtech.api.gui.GuiTextures.ORE_FILTER_INFO) +// .setTooltip("cover.ore_dictionary_filter.info")); +// widgetGroup.accept(compilationStatus); +// widgetGroup.accept(new DrawableWidget(10, 22, 156, 16) +// .setBackgroundDrawer((mouseX, mouseY, partialTicks, context, widget) -> { +// gregtech.api.gui.Widget.drawGradientRect(widget.getPosition().x, widget.getPosition().y, +// widget.getSize().width, widget.getSize().height, +// 0xFF808080, 0xFF808080, false); +// gregtech.api.gui.Widget.drawGradientRect(widget.getPosition().x + 1, widget.getPosition().y + 1, +// widget.getSize().width - 2, widget.getSize().height - 2, +// 0xFF000000, 0xFF000000, false); +// })); +// widgetGroup.accept(textField +// .setHighlightRule(h -> { +// String t = h.getOriginalText(); +// for (int i = 0; i < t.length(); i++) { +// switch (t.charAt(i)) { +// case '|', '&', '^', '(', ')' -> h.format(i, TextFormatting.GOLD); +// case '*', '?' -> h.format(i, TextFormatting.GREEN); +// case '!' -> h.format(i, TextFormatting.RED); +// case '\\' -> h.format(i++, TextFormatting.YELLOW); +// case '$' -> { // TODO: remove this switch case in 2.9 +// h.format(i, TextFormatting.DARK_GREEN); +// for (; i < t.length(); i++) { +// switch (t.charAt(i)) { +// case ' ', '\t', '\n', '\r' -> {} +// case '\\' -> { +// i++; +// continue; +// } +// default -> { +// continue; +// } +// } +// break; +// } +// } +// default -> { +// continue; +// } +// } +// h.format(i + 1, TextFormatting.RESET); +// } +// }).setMaxLength(64)); +// widgetGroup.accept(new ForcedInitialSyncImageCycleButtonWidget(130, 38, 18, 18, +// gregtech.api.gui.GuiTextures.ORE_FILTER_BUTTON_CASE_SENSITIVE, filterReader::isCaseSensitive, +// caseSensitive -> { +// this.filterReader.setCaseSensitive(caseSensitive); +// recompile(compileCallback); +// }).setTooltipHoverString( +// i -> "cover.ore_dictionary_filter.button.case_sensitive." + (i == 0 ? "disabled" : "enabled"))); +// widgetGroup.accept(new ForcedInitialSyncImageCycleButtonWidget(148, 38, 18, 18, +// gregtech.api.gui.GuiTextures.ORE_FILTER_BUTTON_MATCH_ALL, filterReader::shouldMatchAll, +// matchAll -> { +// this.filterReader.setMatchAll(matchAll); +// clearCache(); +// for (ItemOreFilterTestSlot slot : testSlot) { +// slot.setMatchAll(matchAll); +// } +// }).setTooltipHoverString( +// i -> "cover.ore_dictionary_filter.button.match_all." + (i == 0 ? "disabled" : "enabled"))); } @Override @@ -187,7 +176,89 @@ public void initUI(Consumer widgetGroup) { @Override @NotNull public ParentWidget createWidgets(GuiSyncManager syncManager) { - return new Row(); + // todo ore glob status + + var expression = new StringSyncValue(this.filterReader::getExpression, this.filterReader::setExpression); + var caseSensitive = new BooleanSyncValue(this.filterReader::isCaseSensitive, this.filterReader::setCaseSensitive); + var matchAll = new BooleanSyncValue(this.filterReader::shouldMatchAll, this.filterReader::setMatchAll); + + List oreSlots = new ArrayList<>(); + + return new Column().widthRel(1f).coverChildrenHeight() + .top(22).margin(7) + .child(new HighlightedTextField() + .setHighlightRule(this::highlightRule) + .onUnfocus(() -> { + for (var slot : oreSlots) { + slot.updatePreview(); + } + }) + .value(expression).marginBottom(4) + .height(18).widthRel(1f)) + .child(new Row().coverChildrenHeight() + .widthRel(1f) + .child(SlotGroupWidget.builder() + .row("XXXXX") + .key('X', i -> { + var slot = new OreFilterTestSlot() + .setGlobSupplier(this::getGlob); + oreSlots.add(slot); + return slot; + }) + .build().marginRight(4)) + .child(new ToggleButton() + .value(caseSensitive) + .background(GTGuiTextures.MC_BUTTON_DISABLED) + .selectedBackground(GTGuiTextures.MC_BUTTON) + .marginRight(4)) + .child(new ToggleButton() + .value(matchAll) + .background(GTGuiTextures.MC_BUTTON_DISABLED) + .selectedBackground(GTGuiTextures.MC_BUTTON))); + } + + protected String highlightRule(StringBuilder h) { + for (int i = 0; i < h.length(); i++) { + switch (h.charAt(i)) { + case '|', '&', '^', '(', ')' -> { + h.insert(i, TextFormatting.GOLD); + i += 2; + } + case '*', '?' -> { + h.insert(i, TextFormatting.GREEN); + i += 2; + } + case '!' -> { + h.insert(i, TextFormatting.RED); + i += 2; + } + case '\\' -> { + h.insert(i++, TextFormatting.YELLOW); + i += 2; + } + case '$' -> { // TODO: remove this switch case in 2.9 + h.insert(i, TextFormatting.DARK_GREEN); + for (; i < h.length(); i++) { + switch (h.charAt(i)) { + case ' ', '\t', '\n', '\r' -> {} + case '\\' -> { + i++; + continue; + } + default -> { + continue; + } + } + break; + } + } + default -> { + continue; + } + } + h.insert(i + 1, TextFormatting.RESET); + } + return h.toString(); } @Override @@ -263,34 +334,34 @@ public void readFromNBT(NBTTagCompound tag) { // this.expression = tag.getString("OreDictionaryFilter"); // this.caseSensitive = tag.getBoolean("caseSensitive"); // this.matchAll = tag.getBoolean("matchAll"); - recompile(null); + recompile(); } - public static class ForcedInitialSyncImageCycleButtonWidget extends ImageCycleButtonWidget { - - private final BooleanConsumer updater; - - public ForcedInitialSyncImageCycleButtonWidget(int xPosition, int yPosition, int width, int height, - TextureArea buttonTexture, BooleanSupplier supplier, - BooleanConsumer updater) { - super(xPosition, yPosition, width, height, buttonTexture, supplier, updater); - this.currentOption = 0; - this.updater = updater; - } - - @Override - public void readUpdateInfo(int id, PacketBuffer buffer) { - if (id == 1) { - int currentOptionCache = this.currentOption; - super.readUpdateInfo(id, buffer); - if (this.currentOption != currentOptionCache) { - this.updater.apply(currentOption >= 1); // call updater to apply necessary state changes - } - } else { - super.readUpdateInfo(id, buffer); - } - } - } +// public static class ForcedInitialSyncImageCycleButtonWidget extends ImageCycleButtonWidget { +// +// private final BooleanConsumer updater; +// +// public ForcedInitialSyncImageCycleButtonWidget(int xPosition, int yPosition, int width, int height, +// TextureArea buttonTexture, BooleanSupplier supplier, +// BooleanConsumer updater) { +// super(xPosition, yPosition, width, height, buttonTexture, supplier, updater); +// this.currentOption = 0; +// this.updater = updater; +// } +// +// @Override +// public void readUpdateInfo(int id, PacketBuffer buffer) { +// if (id == 1) { +// int currentOptionCache = this.currentOption; +// super.readUpdateInfo(id, buffer); +// if (this.currentOption != currentOptionCache) { +// this.updater.apply(currentOption >= 1); // call updater to apply necessary state changes +// } +// } else { +// super.readUpdateInfo(id, buffer); +// } +// } +// } protected class OreDictionaryFilterReader extends BaseFilterReader { @@ -305,9 +376,15 @@ public OreDictionaryFilterReader(ItemStack container, int slots) { setMatchAll(true); } + @Override + public Supplier getMaxStackSizer() { + return () -> 1; + } + public void setExpression(String expression) { -// if (this.getExpression().equals(expression)) return; + if (this.getExpression().equals(expression)) return; getStackTag().setString(EXPRESSION, expression); + recompile(); markDirty(); } @@ -339,4 +416,5 @@ public boolean shouldMatchAll() { return getStackTag().getBoolean(MATCH_ALL); } } + } diff --git a/src/main/java/gregtech/common/gui/widget/HighlightedTextField.java b/src/main/java/gregtech/common/gui/widget/HighlightedTextField.java index 8acea5527f7..e5a3d159582 100644 --- a/src/main/java/gregtech/common/gui/widget/HighlightedTextField.java +++ b/src/main/java/gregtech/common/gui/widget/HighlightedTextField.java @@ -1,26 +1,27 @@ package gregtech.common.gui.widget; -import gregtech.api.gui.widgets.TextFieldWidget2; +import com.cleanroommc.modularui.screen.viewport.GuiContext; +import com.cleanroommc.modularui.value.sync.StringSyncValue; +import com.cleanroommc.modularui.widgets.textfield.TextFieldHandler; +import com.cleanroommc.modularui.widgets.textfield.TextFieldRenderer; +import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; +import org.jetbrains.annotations.NotNull; -import net.minecraft.util.text.TextFormatting; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; -import it.unimi.dsi.fastutil.ints.IntArrayList; -import it.unimi.dsi.fastutil.ints.IntList; -import org.jetbrains.annotations.Nullable; +public class HighlightedTextField extends TextFieldWidget { -import java.util.function.Consumer; -import java.util.function.Supplier; + private StringSyncValue stringSyncValue; -public class HighlightedTextField extends TextFieldWidget2 { + private final TextHighlighter highlighter; + private Runnable onUnfocus; - @Nullable - private Consumer highlightRule; - @Nullable - private TextHighlighter formatResult; - - public HighlightedTextField(int x, int y, int width, int height, Supplier supplier, - Consumer setter) { - super(x, y, width, height, supplier, setter); + public HighlightedTextField() { + this.highlighter = new TextHighlighter(this.handler); + this.renderer = this.highlighter; + this.handler.setRenderer(this.renderer); } /** @@ -29,99 +30,61 @@ public HighlightedTextField(int x, int y, int width, int height, Supplier highlightRule) { - this.highlightRule = highlightRule; - return this; + public HighlightedTextField setHighlightRule(Function highlightRule) { + this.highlighter.setHighlightRule(highlightRule); + return getThis(); } - @Override - public void setText(String text) { - super.setText(text); - this.formatResult = null; + public HighlightedTextField value(StringSyncValue stringValue) { + this.stringSyncValue = stringValue; + super.value(stringValue); + return getThis(); } @Override - protected String getRenderText() { - if (this.formatResult == null) { - if (this.highlightRule == null) { - return getText(); - } - TextHighlighter highlighter = new TextHighlighter(getText()); - this.highlightRule.accept(highlighter); - this.formatResult = highlighter; - return highlighter.getFormattedText(); - } - return this.formatResult.getFormattedText(); + public HighlightedTextField getThis() { + return this; } @Override - protected int toOriginalTextIndex(int renderTextIndex) { - return formatResult != null ? formatResult.toOriginalTextIndex(renderTextIndex) : renderTextIndex; + public void onRemoveFocus(GuiContext context) { + super.onRemoveFocus(context); + this.stringSyncValue.setStringValue(highlighter.getOriginalText(), true, true); + onUnfocus.run(); } - @Override - protected int toRenderTextIndex(int originalTextIndex) { - return formatResult != null ? formatResult.toFormattedTextIndex(originalTextIndex) : originalTextIndex; + public HighlightedTextField onUnfocus(Runnable onUnfocus) { + this.onUnfocus = onUnfocus; + return getThis(); } - public static final class TextHighlighter { - - private final String originalText; - private final StringBuilder formattedTextBuilder; + public static final class TextHighlighter extends TextFieldRenderer { - private final IntList formatOriginalIndices = new IntArrayList(); + private Function highlightRule = StringBuilder::toString; + List formattedLines = new ArrayList<>(); - @Nullable - private String formattedTextCache; - - public TextHighlighter(String originalText) { - this.originalText = originalText; - this.formattedTextBuilder = new StringBuilder(originalText); + public TextHighlighter(TextFieldHandler handler) { + super(handler); } - public String getOriginalText() { - return this.originalText; - } - - public String getFormattedText() { - if (this.formattedTextCache == null) { - return this.formattedTextCache = this.formattedTextBuilder.toString(); - } - return this.formattedTextCache; + public void setHighlightRule(Function highlightRule) { + this.highlightRule = highlightRule; } - public int toFormattedTextIndex(int originalTextIndex) { - int i = 0; - for (; i < formatOriginalIndices.size(); i++) { - if (formatOriginalIndices.getInt(i) > originalTextIndex) { - break; - } - } - return originalTextIndex + i * 2; + public String getOriginalText() { + return this.handler.getText().get(0); } - public int toOriginalTextIndex(int formattedTextIndex) { - int i = 0; - for (; i < formatOriginalIndices.size(); i++) { - if (formatOriginalIndices.getInt(i) + i * 2 >= formattedTextIndex) { - break; - } - } - return formattedTextIndex - i * 2; + @Override + protected float draw(String text, float x, float y) { + return super.draw(runHighlighter(text), x, y); } - public void format(int index, TextFormatting format) { - if (index < 0) index = 0; - else if (index > originalText.length()) return; - formattedTextBuilder.insert(toFormattedTextIndex(index), format.toString()); - formattedTextCache = null; - for (int i = 0; i < formatOriginalIndices.size(); i++) { - if (formatOriginalIndices.getInt(i) > index) { - formatOriginalIndices.add(i, index); - return; - } + public @NotNull String runHighlighter(String text) { + if (this.highlightRule == null) { + return text; } - formatOriginalIndices.add(index); + return this.highlightRule.apply(new StringBuilder(text)); } } } diff --git a/src/main/java/gregtech/common/gui/widget/orefilter/ItemOreFilterTestSlot.java b/src/main/java/gregtech/common/gui/widget/orefilter/ItemOreFilterTestSlot.java index b30a48cd25d..22f8fdfe453 100644 --- a/src/main/java/gregtech/common/gui/widget/orefilter/ItemOreFilterTestSlot.java +++ b/src/main/java/gregtech/common/gui/widget/orefilter/ItemOreFilterTestSlot.java @@ -1,111 +1,77 @@ package gregtech.common.gui.widget.orefilter; -import gregtech.api.gui.IRenderContext; -import gregtech.api.gui.ingredient.IGhostIngredientTarget; -import gregtech.api.unification.OreDictUnifier; -import gregtech.api.util.Position; +import gregtech.api.util.oreglob.OreGlob; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.RenderHelper; -import net.minecraft.client.renderer.RenderItem; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.items.ItemStackHandler; -import com.google.common.collect.Lists; -import mezz.jei.api.gui.IGhostIngredientHandler; -import org.jetbrains.annotations.NotNull; +import com.cleanroommc.modularui.widgets.slot.ModularSlot; import org.jetbrains.annotations.Nullable; -import java.awt.*; -import java.util.Collections; -import java.util.List; -import java.util.Set; +public class ItemOreFilterTestSlot extends ModularSlot { -public class ItemOreFilterTestSlot extends OreFilterTestSlot implements IGhostIngredientTarget { + OreFilterTestSlot parent; - @NotNull - private ItemStack testStack = ItemStack.EMPTY; + OreGlob glob; - public ItemOreFilterTestSlot(int xPosition, int yPosition) { - super(xPosition, yPosition); + public ItemOreFilterTestSlot() { + super(new ItemStackHandler(1), 0, true); } - @NotNull - public ItemStack getTestStack() { - return testStack; + void setParent(OreFilterTestSlot parent) { + this.parent = parent; } - public void setTestStack(@NotNull ItemStack testStack) { - this.testStack = testStack; - updatePreview(); - } - @Nullable - @Override - protected Set getTestCandidates() { - return this.testStack.isEmpty() ? null : OreDictUnifier.getOreDictionaryNames(this.testStack); + public void setGlob(@Nullable OreGlob glob) { + if (this.glob == glob) return; + this.glob = glob; } - @Override - protected void renderSlotContents(float partialTicks, IRenderContext context) { - Position pos = getPosition(); - if (!testStack.isEmpty()) { - GlStateManager.enableDepth(); - RenderHelper.enableGUIStandardItemLighting(); - GlStateManager.pushMatrix(); - RenderItem itemRender = Minecraft.getMinecraft().getRenderItem(); - itemRender.renderItemAndEffectIntoGUI(testStack, pos.x + 1, pos.y + 1); - itemRender.renderItemOverlayIntoGUI(Minecraft.getMinecraft().fontRenderer, testStack, pos.x + 1, pos.y + 1, - null); - GlStateManager.popMatrix(); - RenderHelper.disableStandardItemLighting(); - } - } - @Override - @SideOnly(Side.CLIENT) - public boolean mouseClicked(int mouseX, int mouseY, int button) { - if (isMouseOverElement(mouseX, mouseY)) { - EntityPlayer player = Minecraft.getMinecraft().player; - putItem(player.inventory.getItemStack()); - return true; - } - return false; - } +// @Override +// @SideOnly(Side.CLIENT) +// public boolean mouseClicked(int mouseX, int mouseY, int button) { +// if (isMouseOverElement(mouseX, mouseY)) { +// EntityPlayer player = Minecraft.getMinecraft().player; +// putItem(player.inventory.getItemStack()); +// return true; +// } +// return false; +// } - private void putItem(ItemStack stack) { - ItemStack testStack = getTestStack(); + @Override + public void putStack(ItemStack stack) { + ItemStack testStack = getStack(); if ((stack.isEmpty() ^ testStack.isEmpty()) || !testStack.isItemEqual(stack) || !ItemStack.areItemStackTagsEqual(testStack, stack)) { ItemStack copy = stack.copy(); copy.setCount(1); - setTestStack(copy); + super.putStack(stack); + this.parent.updatePreview(); } } - @Override - public List> getPhantomTargets(Object ingredient) { - if (!(ingredient instanceof ItemStack)) { - return Collections.emptyList(); - } - Rectangle rectangle = toRectangleBox(); - return Lists.newArrayList(new IGhostIngredientHandler.Target() { - - @NotNull - @Override - public Rectangle getArea() { - return rectangle; - } - - @Override - public void accept(@NotNull Object ingredient) { - if (ingredient instanceof ItemStack) { - putItem((ItemStack) ingredient); - } - } - }); - } +// @Override +// public List> getPhantomTargets(Object ingredient) { +// if (!(ingredient instanceof ItemStack)) { +// return Collections.emptyList(); +// } +// Rectangle rectangle = toRectangleBox(); +// return Lists.newArrayList(new IGhostIngredientHandler.Target() { +// +// @NotNull +// @Override +// public Rectangle getArea() { +// return rectangle; +// } +// +// @Override +// public void accept(@NotNull Object ingredient) { +// if (ingredient instanceof ItemStack) { +// putItem((ItemStack) ingredient); +// } +// } +// }); +// } } diff --git a/src/main/java/gregtech/common/gui/widget/orefilter/OreFilterTestSlot.java b/src/main/java/gregtech/common/gui/widget/orefilter/OreFilterTestSlot.java index fd81e80bcd7..ea45040cff3 100644 --- a/src/main/java/gregtech/common/gui/widget/orefilter/OreFilterTestSlot.java +++ b/src/main/java/gregtech/common/gui/widget/orefilter/OreFilterTestSlot.java @@ -1,95 +1,92 @@ package gregtech.common.gui.widget.orefilter; -import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.IRenderContext; -import gregtech.api.gui.resources.TextureArea; -import gregtech.api.gui.widgets.ImageWidget; -import gregtech.api.gui.widgets.WidgetGroup; -import gregtech.api.util.LocalizationUtils; -import gregtech.api.util.Position; +import gregtech.api.unification.OreDictUnifier; import gregtech.api.util.function.BooleanConsumer; import gregtech.api.util.oreglob.OreGlob; +import gregtech.common.covers.filter.oreglob.impl.ImpossibleOreGlob; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.resources.I18n; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.widgets.ItemSlot; import it.unimi.dsi.fastutil.objects.Object2BooleanAVLTreeMap; import it.unimi.dsi.fastutil.objects.Object2BooleanMap; import it.unimi.dsi.fastutil.objects.Object2BooleanMaps; import org.jetbrains.annotations.Nullable; -import java.util.Arrays; import java.util.Collections; import java.util.Set; +import java.util.function.Supplier; import java.util.stream.Collectors; /** * @author brachy84 */ -public abstract class OreFilterTestSlot extends WidgetGroup { +public class OreFilterTestSlot extends ItemSlot { - private final ImageWidget match; - private final ImageWidget noMatch; +// private final IWidget match; +// private final IWidget noMatch; - @Nullable - private OreGlob glob; + private final ItemOreFilterTestSlot slot; + private Supplier globSupplier = ImpossibleOreGlob::getInstance; private boolean expectedResult = true; - - @Nullable - private TextureArea slotIcon = GuiTextures.SLOT; - @Nullable private BooleanConsumer onMatchChange; - private Object2BooleanMap testResult; private MatchType matchType = MatchType.INVALID; private boolean matchSuccess; - private boolean initialized = false; +// private boolean initialized = false; private boolean matchAll; - public OreFilterTestSlot(int xPosition, int yPosition) { - super(xPosition, yPosition, 18, 18); - this.match = new ImageWidget(18 - 5, -3, 9, 6, GuiTextures.ORE_FILTER_MATCH); - this.noMatch = new ImageWidget(18 - 5, -3, 7, 7, GuiTextures.ORE_FILTER_NO_MATCH); - addWidget(this.match); - addWidget(this.noMatch); + public OreFilterTestSlot() { + this.slot = new ItemOreFilterTestSlot(); + this.slot.setParent(this); + this.slot.setGlob(globSupplier.get()); + slot(this.slot); + tooltipBuilder(tooltip -> { + if (!isEnabled()) return; + tooltip.addDrawableLines(switch (this.matchType) { + case NO_ORE_DICT_MATCH -> Collections.singletonList(IKey.lang(this.matchSuccess ? + "cover.ore_dictionary_filter.test_slot.no_oredict.matches" : + "cover.ore_dictionary_filter.test_slot.no_oredict.matches_not")); + case ORE_DICT_MATCH -> this.testResult.object2BooleanEntrySet() + .stream().map(e -> + IKey.lang(e.getBooleanValue() ? + "cover.ore_dictionary_filter.test_slot.matches" : + "cover.ore_dictionary_filter.test_slot.matches_not", e.getKey())) + .collect(Collectors.toList()); + default -> Collections.singletonList(IKey.lang("cover.ore_dictionary_filter.test_slot.info")); + }); + }); +// this.match = new ImageWidget(18 - 5, -3, 9, 6, GuiTextures.ORE_FILTER_MATCH); +// this.noMatch = new ImageWidget(18 - 5, -3, 7, 7, GuiTextures.ORE_FILTER_NO_MATCH); +// child(this.match); +// child(this.noMatch); + } + + public OreFilterTestSlot setGlobSupplier(Supplier supplier) { + this.globSupplier = supplier; + this.updatePreview(); + return getThis(); } @Override - public void initWidget() { - this.initialized = true; - updatePreview(); - super.initWidget(); + public OreFilterTestSlot getThis() { + return this; } public boolean isMatchSuccess() { return matchSuccess; } - public OreFilterTestSlot setSlotIcon(@Nullable TextureArea slotIcon) { - this.slotIcon = slotIcon; - return this; - } - public OreFilterTestSlot setExpectedResult(boolean expectedResult) { this.expectedResult = expectedResult; - return this; + return getThis(); } public OreFilterTestSlot onMatchChange(@Nullable BooleanConsumer onMatchChange) { this.onMatchChange = onMatchChange; - return this; - } - - public void setGlob(@Nullable OreGlob glob) { - if (this.glob == glob) return; - this.glob = glob; - updatePreview(); + return getThis(); } public void setMatchAll(boolean matchAll) { @@ -98,11 +95,11 @@ public void setMatchAll(boolean matchAll) { updatePreview(); } - protected void updatePreview() { - if (!this.initialized) return; + public void updatePreview() { Set oreDicts = getTestCandidates(); if (oreDicts != null) { - OreGlob glob = this.glob; + OreGlob glob = this.globSupplier.get(); + this.slot.setGlob(glob); if (oreDicts.isEmpty()) { // no oredict entries this.testResult = Object2BooleanMaps.singleton("", glob != null && glob.matches("")); @@ -124,15 +121,16 @@ protected void updatePreview() { } } updateAndNotifyMatchSuccess(this.expectedResult == success); - this.match.setVisible(this.expectedResult == success); - this.noMatch.setVisible(this.expectedResult != success); + this.tooltip().markDirty(); +// this.match.setVisible(this.expectedResult == success); +// this.noMatch.setVisible(this.expectedResult != success); return; } this.testResult = Object2BooleanMaps.emptyMap(); this.matchType = MatchType.INVALID; updateAndNotifyMatchSuccess(false); - this.match.setVisible(false); - this.noMatch.setVisible(false); +// this.match.setVisible(false); +// this.noMatch.setVisible(false); } private void updateAndNotifyMatchSuccess(boolean newValue) { @@ -150,48 +148,8 @@ private void updateAndNotifyMatchSuccess(boolean newValue) { * @return each test candidate for current state of test slot */ @Nullable - protected abstract Set getTestCandidates(); - - @Override - @SideOnly(Side.CLIENT) - public void drawInBackground(int mouseX, int mouseY, float partialTicks, IRenderContext context) { - Position pos = getPosition(); - if (this.slotIcon != null) { - this.slotIcon.draw(pos.x, pos.y, 18, 18); - } - - renderSlotContents(partialTicks, context); - - if (isActive() && isMouseOverElement(mouseX, mouseY)) { - GlStateManager.disableDepth(); - GlStateManager.colorMask(true, true, true, false); - drawSolidRect(getPosition().x + 1, getPosition().y + 1, 16, 16, 0x80ffffff); - GlStateManager.colorMask(true, true, true, true); - GlStateManager.enableBlend(); - } - - GlStateManager.disableDepth(); - super.drawInBackground(mouseX, mouseY, partialTicks, context); - GlStateManager.enableDepth(); - } - - protected abstract void renderSlotContents(float partialTicks, IRenderContext context); - - @Override - public void drawInForeground(int mouseX, int mouseY) { - if (isActive() && isMouseOverElement(mouseX, mouseY)) { - drawHoveringText(ItemStack.EMPTY, switch (this.matchType) { - case NO_ORE_DICT_MATCH -> Collections.singletonList(I18n.format(this.matchSuccess ? - "cover.ore_dictionary_filter.test_slot.no_oredict.matches" : - "cover.ore_dictionary_filter.test_slot.no_oredict.matches_not")); - case ORE_DICT_MATCH -> this.testResult.object2BooleanEntrySet().stream().map( - e -> I18n.format(e.getBooleanValue() ? - "cover.ore_dictionary_filter.test_slot.matches" : - "cover.ore_dictionary_filter.test_slot.matches_not", e.getKey())) - .collect(Collectors.toList()); - default -> Arrays.asList(LocalizationUtils.formatLines("cover.ore_dictionary_filter.test_slot.info")); - }, 300, mouseX, mouseY); - } + protected Set getTestCandidates() { + return this.slot.getStack().isEmpty() ? null : OreDictUnifier.getOreDictionaryNames(this.slot.getStack()); } private enum MatchType { 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 40956180550..28732e0b1bf 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java @@ -4,10 +4,14 @@ import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import gregtech.common.covers.filter.FilterTypeRegistry; + public class OreDictFilterUIManager extends BaseFilterUIManager{ @Override public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { - return ERROR; + var filter = FilterTypeRegistry.getItemFilterForStack(guiData.getUsedItemStack()); + return createBasePanel(filter.getContainerStack()) + .child(filter.createWidgets(guiSyncManager)); } } From 32172a2a06248edbe28951a5f51e29939b981452 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 13 Jan 2024 19:15:06 -0700 Subject: [PATCH 067/260] add ore glob status add tooltip for buttons --- .../filter/OreDictionaryItemFilter.java | 22 ++++++++++++++----- .../resources/assets/gregtech/lang/en_us.lang | 2 ++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index d8c12edbc9b..2c7eccffd7b 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -1,5 +1,7 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.api.drawable.IKey; + import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.api.unification.OreDictUnifier; @@ -176,8 +178,6 @@ public void initUI(Consumer widgetGroup) { @Override @NotNull public ParentWidget createWidgets(GuiSyncManager syncManager) { - // todo ore glob status - var expression = new StringSyncValue(this.filterReader::getExpression, this.filterReader::setExpression); var caseSensitive = new BooleanSyncValue(this.filterReader::isCaseSensitive, this.filterReader::setCaseSensitive); var matchAll = new BooleanSyncValue(this.filterReader::shouldMatchAll, this.filterReader::setMatchAll); @@ -197,6 +197,9 @@ public ParentWidget createWidgets(GuiSyncManager syncManager) { .height(18).widthRel(1f)) .child(new Row().coverChildrenHeight() .widthRel(1f) + .child(GTGuiTextures.ATOMIC_OVERLAY_1.asWidget().marginRight(4) + .tooltip(tooltip -> tooltip.setAutoUpdate(true)) + .tooltipBuilder(tooltip -> tooltip.addLine(glob.toString()))) .child(SlotGroupWidget.builder() .row("XXXXX") .key('X', i -> { @@ -207,14 +210,21 @@ public ParentWidget createWidgets(GuiSyncManager syncManager) { }) .build().marginRight(4)) .child(new ToggleButton() - .value(caseSensitive) + .size(18).value(caseSensitive) + // todo fix the textures for hovering .background(GTGuiTextures.MC_BUTTON_DISABLED) .selectedBackground(GTGuiTextures.MC_BUTTON) - .marginRight(4)) + .marginRight(4) + .tooltip(tooltip -> tooltip.setAutoUpdate(true)) + .addTooltipLine(IKey.lang("cover.ore_dictionary_filter.case_sensitive", + caseSensitive.getBoolValue()))) .child(new ToggleButton() - .value(matchAll) + .size(18).value(matchAll) .background(GTGuiTextures.MC_BUTTON_DISABLED) - .selectedBackground(GTGuiTextures.MC_BUTTON))); + .selectedBackground(GTGuiTextures.MC_BUTTON) + .tooltip(tooltip -> tooltip.setAutoUpdate(true)) + .addTooltipLine(IKey.lang("cover.ore_dictionary_filter.match_all", + matchAll.getBoolValue())))); } protected String highlightRule(StringBuilder h) { diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 6fc2ebe2f39..74767ed3674 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -1179,6 +1179,8 @@ cover.filter.blacklist.enabled=Blacklist cover.ore_dictionary_filter.title=Ore Dictionary Filter cover.ore_dictionary_filter.info=§bAccepts complex expressions/n§6a & b§r = AND/n§6a | b§r = OR/n§6a ^ b§r = XOR/n§6! abc§r = NOT/n§6( abc )§r for grouping/n§6*§r for wildcard (i.e. 0 or more characters)/n§6?§r for any 1 character/n§6()§r for matching empty entry (including items with no ore dictionary)/n§bExample:/n§6dust*Gold | (plate* & !*Double*)/nWill match all gold dusts of all sizes or all plates, but not double plates +cover.ore_dictionary_filter.match_all=Match All: %s +cover.ore_dictionary_filter.case_sensitive=Case Sensitive: %s cover.ore_dictionary_filter.test_slot.info=Insert a item to test if it matches the filter expression cover.ore_dictionary_filter.test_slot.matches=§a* %s cover.ore_dictionary_filter.test_slot.matches_not=§c* %s From 1737831f2577002dd276cb6f11bd660e944b918d Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 13 Jan 2024 19:23:28 -0700 Subject: [PATCH 068/260] add oredict images as gui textures --- src/main/java/gregtech/api/mui/GTGuiTextures.java | 15 +++++++++++++++ .../covers/filter/OreDictionaryItemFilter.java | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/mui/GTGuiTextures.java b/src/main/java/gregtech/api/mui/GTGuiTextures.java index 8fb6067aca5..22b4760c150 100644 --- a/src/main/java/gregtech/api/mui/GTGuiTextures.java +++ b/src/main/java/gregtech/api/mui/GTGuiTextures.java @@ -160,6 +160,21 @@ public static class IDs { 16, 32, 16, 16,true); public static final UITexture[] BUTTON_IGNORE_NBT = slice("textures/gui/widget/button_filter_nbt.png", 16, 32, 16, 16,true); + + public static final UITexture[] BUTTON_CASE_SENSITIVE = slice("textures/gui/widget/ore_filter/button_case_sensitive.png", + 16, 32, 16, 16, true); + + public static final UITexture[] BUTTON_MATCH_ALL = slice("textures/gui/widget/ore_filter/button_match_all.png", + 16, 32, 16, 16, true); + + public static final UITexture OREDICT_ERROR = fullImage("textures/gui/widget/ore_filter/error.png"); + public static final UITexture OREDICT_INFO = fullImage("textures/gui/widget/ore_filter/info.png"); + public static final UITexture OREDICT_MATCH = fullImage("textures/gui/widget/ore_filter/match.png"); + public static final UITexture OREDICT_NO_MATCH = fullImage("textures/gui/widget/ore_filter/no_match.png"); + public static final UITexture OREDICT_SUCCESS = fullImage("textures/gui/widget/ore_filter/success.png"); + public static final UITexture OREDICT_WAITING = fullImage("textures/gui/widget/ore_filter/waiting.png"); + public static final UITexture OREDICT_WARN = fullImage("textures/gui/widget/ore_filter/warn.png"); + public static final UITexture[] MANUAL_IO_OVERLAY = slice("textures/gui/overlay/manual_io_overlay.png", 18, 18 * 3, 18, 18, true); public static final UITexture[] CONVEYOR_MODE_OVERLAY = slice("textures/gui/overlay/conveyor_mode_overlay.png", diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 2c7eccffd7b..bdc5186ffa6 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -197,7 +197,7 @@ public ParentWidget createWidgets(GuiSyncManager syncManager) { .height(18).widthRel(1f)) .child(new Row().coverChildrenHeight() .widthRel(1f) - .child(GTGuiTextures.ATOMIC_OVERLAY_1.asWidget().marginRight(4) + .child(GTGuiTextures.OREDICT_INFO.asWidget().marginRight(4) .tooltip(tooltip -> tooltip.setAutoUpdate(true)) .tooltipBuilder(tooltip -> tooltip.addLine(glob.toString()))) .child(SlotGroupWidget.builder() From 2b6410cb19749eaac6b28a161e0ccb46e1be8be9 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 13 Jan 2024 20:23:54 -0700 Subject: [PATCH 069/260] fix lang store result in class more work on ui --- .../filter/OreDictionaryItemFilter.java | 124 +++++++++++------- .../widget/orefilter/OreFilterTestSlot.java | 5 +- .../resources/assets/gregtech/lang/en_us.lang | 2 +- 3 files changed, 76 insertions(+), 55 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index bdc5186ffa6..b6a388973d2 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -2,6 +2,13 @@ import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.drawable.UITexture; + +import com.cleanroommc.modularui.screen.Tooltip; +import com.cleanroommc.modularui.widget.Widget; + +import com.cleanroommc.modularui.widgets.CycleButtonWidget; + import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.api.unification.OreDictUnifier; @@ -14,6 +21,7 @@ import gregtech.common.gui.widget.HighlightedTextField; import gregtech.common.gui.widget.orefilter.OreFilterTestSlot; +import net.minecraft.client.resources.I18n; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -44,7 +52,7 @@ public class OreDictionaryItemFilter extends ItemFilter { private final SingleItemVariantMap noOreDictMatch = new SingleItemVariantMap<>(); private OreGlob glob = ImpossibleOreGlob.getInstance(); - private boolean error; + private OreGlobCompileResult result; private final OreDictionaryFilterReader filterReader; public OreDictionaryItemFilter(ItemStack stack) { @@ -67,12 +75,11 @@ protected void recompile() { clearCache(); String expr = this.filterReader.getExpression(); if (!expr.isEmpty()) { - OreGlobCompileResult result = OreGlob.compile(expr, !this.filterReader.isCaseSensitive()); + result = OreGlob.compile(expr, !this.filterReader.isCaseSensitive()); this.glob = result.getInstance(); - this.error = result.hasError(); } else { this.glob = ImpossibleOreGlob.getInstance(); - this.error = true; + result = null; } } @@ -197,9 +204,16 @@ public ParentWidget createWidgets(GuiSyncManager syncManager) { .height(18).widthRel(1f)) .child(new Row().coverChildrenHeight() .widthRel(1f) - .child(GTGuiTextures.OREDICT_INFO.asWidget().marginRight(4) - .tooltip(tooltip -> tooltip.setAutoUpdate(true)) - .tooltipBuilder(tooltip -> tooltip.addLine(glob.toString()))) + .child(new 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 -> { @@ -209,24 +223,66 @@ public ParentWidget createWidgets(GuiSyncManager syncManager) { return slot; }) .build().marginRight(4)) - .child(new ToggleButton() + .child(new CycleButtonWidget() .size(18).value(caseSensitive) // todo fix the textures for hovering - .background(GTGuiTextures.MC_BUTTON_DISABLED) - .selectedBackground(GTGuiTextures.MC_BUTTON) + .textureGetter(i -> GTGuiTextures.BUTTON_CASE_SENSITIVE[i]) .marginRight(4) .tooltip(tooltip -> tooltip.setAutoUpdate(true)) .addTooltipLine(IKey.lang("cover.ore_dictionary_filter.case_sensitive", caseSensitive.getBoolValue()))) - .child(new ToggleButton() + .child(new CycleButtonWidget() .size(18).value(matchAll) - .background(GTGuiTextures.MC_BUTTON_DISABLED) - .selectedBackground(GTGuiTextures.MC_BUTTON) + .textureGetter(i -> GTGuiTextures.BUTTON_MATCH_ALL[i]) .tooltip(tooltip -> tooltip.setAutoUpdate(true)) .addTooltipLine(IKey.lang("cover.ore_dictionary_filter.match_all", matchAll.getBoolValue())))); } + protected void getStatusIcon(Widget widget) { + UITexture texture; + if (this.result == null) { + texture = GTGuiTextures.OREDICT_WAITING; + } else if (this.result.getReports().length == 0) { + texture = GTGuiTextures.OREDICT_SUCCESS; + } else if (this.result.hasError()) { + texture = GTGuiTextures.OREDICT_ERROR; + } else { + texture = GTGuiTextures.OREDICT_WARN; + } + widget.background(texture); + } + + protected void createStatusTooltip(Tooltip tooltip) { + List list = new ArrayList<>(); + if (result == null) return; + + int error = 0, warn = 0; + for (OreGlobCompileResult.Report report : this.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(this.result.getInstance().toFormattedString()); + } + tooltip.addStringLines(list); + } + protected String highlightRule(StringBuilder h) { for (int i = 0; i < h.length(); i++) { switch (h.charAt(i)) { @@ -280,7 +336,7 @@ public MatchResult matchItemStack(ItemStack itemStack) { } public boolean matchesItemStack(@NotNull ItemStack itemStack) { - if (this.error) return false; + if (this.result.hasError()) return false; Item item = itemStack.getItem(); ItemVariantMap> oreDictEntry = OreDictUnifier.getOreDictionaryEntry(item); @@ -332,47 +388,14 @@ public boolean showGlobalTransferLimitSlider() { return true; } - @Override - public void writeToNBT(NBTTagCompound tag) { -// tag.setString("OreDictionaryFilter", expression); -// if (this.caseSensitive) tag.setBoolean("caseSensitive", true); -// if (this.matchAll) tag.setBoolean("matchAll", true); - } - @Override public void readFromNBT(NBTTagCompound tag) { -// this.expression = tag.getString("OreDictionaryFilter"); -// this.caseSensitive = tag.getBoolean("caseSensitive"); -// this.matchAll = tag.getBoolean("matchAll"); + this.filterReader.setExpression(tag.getString("OreDictionaryFilter")); + this.filterReader.setCaseSensitive(tag.getBoolean("caseSensitive")); + this.filterReader.setMatchAll(tag.getBoolean("matchAll")); recompile(); } -// public static class ForcedInitialSyncImageCycleButtonWidget extends ImageCycleButtonWidget { -// -// private final BooleanConsumer updater; -// -// public ForcedInitialSyncImageCycleButtonWidget(int xPosition, int yPosition, int width, int height, -// TextureArea buttonTexture, BooleanSupplier supplier, -// BooleanConsumer updater) { -// super(xPosition, yPosition, width, height, buttonTexture, supplier, updater); -// this.currentOption = 0; -// this.updater = updater; -// } -// -// @Override -// public void readUpdateInfo(int id, PacketBuffer buffer) { -// if (id == 1) { -// int currentOptionCache = this.currentOption; -// super.readUpdateInfo(id, buffer); -// if (this.currentOption != currentOptionCache) { -// this.updater.apply(currentOption >= 1); // call updater to apply necessary state changes -// } -// } else { -// super.readUpdateInfo(id, buffer); -// } -// } -// } - protected class OreDictionaryFilterReader extends BaseFilterReader { private static final String EXPRESSION = "expression"; @@ -381,7 +404,6 @@ protected class OreDictionaryFilterReader extends BaseFilterReader { public OreDictionaryFilterReader(ItemStack container, int slots) { super(container, slots); -// setExpression(""); setCaseSensitive(true); setMatchAll(true); } diff --git a/src/main/java/gregtech/common/gui/widget/orefilter/OreFilterTestSlot.java b/src/main/java/gregtech/common/gui/widget/orefilter/OreFilterTestSlot.java index ea45040cff3..e02cda8e6b9 100644 --- a/src/main/java/gregtech/common/gui/widget/orefilter/OreFilterTestSlot.java +++ b/src/main/java/gregtech/common/gui/widget/orefilter/OreFilterTestSlot.java @@ -1,5 +1,7 @@ package gregtech.common.gui.widget.orefilter; +import com.cleanroommc.modularui.drawable.UITexture; + import gregtech.api.unification.OreDictUnifier; import gregtech.api.util.function.BooleanConsumer; import gregtech.api.util.oreglob.OreGlob; @@ -22,9 +24,6 @@ */ public class OreFilterTestSlot extends ItemSlot { -// private final IWidget match; -// private final IWidget noMatch; - private final ItemOreFilterTestSlot slot; private Supplier globSupplier = ImpossibleOreGlob::getInstance; private boolean expectedResult = true; diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 74767ed3674..cd4ee83dc74 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -1178,7 +1178,7 @@ cover.filter.blacklist.disabled=Whitelist cover.filter.blacklist.enabled=Blacklist cover.ore_dictionary_filter.title=Ore Dictionary Filter -cover.ore_dictionary_filter.info=§bAccepts complex expressions/n§6a & b§r = AND/n§6a | b§r = OR/n§6a ^ b§r = XOR/n§6! abc§r = NOT/n§6( abc )§r for grouping/n§6*§r for wildcard (i.e. 0 or more characters)/n§6?§r for any 1 character/n§6()§r for matching empty entry (including items with no ore dictionary)/n§bExample:/n§6dust*Gold | (plate* & !*Double*)/nWill match all gold dusts of all sizes or all plates, but not double plates +cover.ore_dictionary_filter.info=§bAccepts complex expressions\n§6a & b§r = AND\n§6a | b§r = OR\n§6a ^ b§r = XOR\n§6! abc§r = NOT\n§6( abc )§r for grouping\n§6*§r for wildcard (i.e. 0 or more characters)\n§6?§r for any 1 character\n§6()§r for matching empty entry (including items with no ore dictionary)\n§bExample:\n§6dust*Gold | (plate* & !*Double*)\nWill match all gold dusts of all sizes or all plates, but not double plates cover.ore_dictionary_filter.match_all=Match All: %s cover.ore_dictionary_filter.case_sensitive=Case Sensitive: %s cover.ore_dictionary_filter.test_slot.info=Insert a item to test if it matches the filter expression From eff7b1f1a9c11fb30a2e16203ea0cf1946114856 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 13 Jan 2024 20:48:38 -0700 Subject: [PATCH 070/260] more work on ui (again) --- .../common/covers/CoverItemFilter.java | 4 ++-- .../filter/OreDictionaryItemFilter.java | 24 +++++++++---------- .../filter/OreDictFilterUIManager.java | 7 ++++-- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 279d4f11618..f6cc42593d3 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -161,13 +161,13 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag return getItemFilter().createPanel(guiSyncManager) .size(176, 188).padding(7) .child(CoverWithUI.createTitleRow(getPickItem()).left(7)) - .child(new Column().coverChildren().align(Alignment.TopLeft).top(22) + .child(new Column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight() .child(new Row().coverChildren().marginBottom(4).left(0) .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_INSERT)) .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_EXTRACT)) .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_BOTH))) .child(getItemFilter().createWidgets(guiSyncManager))) - .child(SlotGroupWidget.playerInventory().left(7)); + .child(SlotGroupWidget.playerInventory(0).bottom(7).left(7)); } private Widget createFilterModeButton(EnumSyncValue value, ItemFilterMode mode) { diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index b6a388973d2..292240c405d 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -192,7 +192,6 @@ public ParentWidget createWidgets(GuiSyncManager syncManager) { List oreSlots = new ArrayList<>(); return new Column().widthRel(1f).coverChildrenHeight() - .top(22).margin(7) .child(new HighlightedTextField() .setHighlightRule(this::highlightRule) .onUnfocus(() -> { @@ -223,20 +222,21 @@ public ParentWidget createWidgets(GuiSyncManager syncManager) { return slot; }) .build().marginRight(4)) - .child(new CycleButtonWidget() + .child(new ToggleButton() .size(18).value(caseSensitive) - // todo fix the textures for hovering - .textureGetter(i -> GTGuiTextures.BUTTON_CASE_SENSITIVE[i]) + .background(GTGuiTextures.BUTTON_CASE_SENSITIVE[1]) + .hoverBackground(GTGuiTextures.BUTTON_CASE_SENSITIVE[1]) + .selectedBackground(GTGuiTextures.BUTTON_CASE_SENSITIVE[0]) + .selectedHoverBackground(GTGuiTextures.BUTTON_CASE_SENSITIVE[0]) .marginRight(4) - .tooltip(tooltip -> tooltip.setAutoUpdate(true)) - .addTooltipLine(IKey.lang("cover.ore_dictionary_filter.case_sensitive", - caseSensitive.getBoolValue()))) - .child(new CycleButtonWidget() + .tooltip(tooltip -> tooltip.setAutoUpdate(true))) + .child(new ToggleButton() .size(18).value(matchAll) - .textureGetter(i -> GTGuiTextures.BUTTON_MATCH_ALL[i]) - .tooltip(tooltip -> tooltip.setAutoUpdate(true)) - .addTooltipLine(IKey.lang("cover.ore_dictionary_filter.match_all", - matchAll.getBoolValue())))); + .background(GTGuiTextures.BUTTON_MATCH_ALL[1]) + .hoverBackground(GTGuiTextures.BUTTON_MATCH_ALL[1]) + .selectedHoverBackground(GTGuiTextures.BUTTON_MATCH_ALL[0]) + .selectedBackground(GTGuiTextures.BUTTON_MATCH_ALL[0]) + .tooltip(tooltip -> tooltip.setAutoUpdate(true)))); } protected void getStatusIcon(Widget widget) { 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 28732e0b1bf..e4009d174a6 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java @@ -4,6 +4,8 @@ import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.widgets.SlotGroupWidget; + import gregtech.common.covers.filter.FilterTypeRegistry; public class OreDictFilterUIManager extends BaseFilterUIManager{ @@ -11,7 +13,8 @@ public class OreDictFilterUIManager extends BaseFilterUIManager{ @Override public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { var filter = FilterTypeRegistry.getItemFilterForStack(guiData.getUsedItemStack()); - return createBasePanel(filter.getContainerStack()) - .child(filter.createWidgets(guiSyncManager)); + return createBasePanel(filter.getContainerStack()).height(160) + .child(filter.createWidgets(guiSyncManager).top(22).margin(7, 0)) + .child(SlotGroupWidget.playerInventory(0).bottom(7).left(7)); } } From 0a07a66eb631547f46042b9d57ae27dbd14bfa89 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 13 Jan 2024 21:00:00 -0700 Subject: [PATCH 071/260] make title filter match other instances fix ore dict filter popup --- .../common/covers/CoverItemFilter.java | 2 +- .../filter/OreDictionaryItemFilter.java | 19 +++++++++---------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index f6cc42593d3..3e6365002ad 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -160,7 +160,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag return getItemFilter().createPanel(guiSyncManager) .size(176, 188).padding(7) - .child(CoverWithUI.createTitleRow(getPickItem()).left(7)) + .child(CoverWithUI.createTitleRow(getPickItem()).left(4)) .child(new Column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight() .child(new Row().coverChildren().marginBottom(4).left(0) .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_INSERT)) diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 292240c405d..c6994e95b69 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -1,14 +1,6 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.api.drawable.IKey; - -import com.cleanroommc.modularui.drawable.UITexture; - -import com.cleanroommc.modularui.screen.Tooltip; -import com.cleanroommc.modularui.widget.Widget; - -import com.cleanroommc.modularui.widgets.CycleButtonWidget; - +import gregtech.api.cover.CoverWithUI; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.api.unification.OreDictUnifier; @@ -27,11 +19,15 @@ import net.minecraft.nbt.NBTTagCompound; 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.Tooltip; import com.cleanroommc.modularui.value.sync.BooleanSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.StringSyncValue; import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.SlotGroupWidget; import com.cleanroommc.modularui.widgets.ToggleButton; import com.cleanroommc.modularui.widgets.layout.Column; @@ -174,7 +170,10 @@ public void initUI(Consumer widgetGroup) { @Override public @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager) { - return GTGuis.createPopupPanel("ore_dict_filter", 100, 100); + return GTGuis.createPopupPanel("ore_dict_filter", 188, 76) + .padding(7) + .child(CoverWithUI.createTitleRow(getContainerStack())) + .child(createWidgets(syncManager).top(22)); } @Override From 7ee22113ef339346a6715b2d4755164347946fd1 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 14 Jan 2024 12:10:36 -0700 Subject: [PATCH 072/260] rework filter logic again remove MatchResult move static final Strings back into reader class --- .../gregtech/common/covers/CoverConveyor.java | 85 +++++++++++-------- .../covers/CoverItemVoidingAdvanced.java | 14 +-- .../common/covers/CoverRoboticArm.java | 2 +- .../gregtech/common/covers/filter/Filter.java | 37 ++++++++ .../common/covers/filter/ItemFilter.java | 60 ++++--------- .../covers/filter/ItemFilterContainer.java | 13 +-- .../covers/filter/ItemFilterWrapper.java | 4 - .../filter/OreDictionaryItemFilter.java | 12 ++- .../covers/filter/SimpleItemFilter.java | 26 +++--- .../common/covers/filter/SmartItemFilter.java | 13 ++- .../pipelike/itempipe/net/ItemNetHandler.java | 25 +++--- 11 files changed, 165 insertions(+), 126 deletions(-) create mode 100644 src/main/java/gregtech/common/covers/filter/Filter.java diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index e2f040f3eef..886c45da917 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -78,6 +78,8 @@ import java.util.Collections; import java.util.Map; import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; public class CoverConveyor extends CoverBase implements CoverWithUI, ITickable, IControllable { @@ -301,9 +303,14 @@ protected int moveInventoryItems(IItemHandler sourceInventory, IItemHandler targ if (itemStack.isEmpty()) { continue; } - var matchResult = itemFilterContainer.matchItemStack(itemStack); - var matchSlotIndex = matchResult.getData(); - if (!matchResult.matched() || !itemInfos.containsKey(matchSlotIndex)) { + + AtomicBoolean matchResult = new AtomicBoolean(true); + AtomicInteger matchSlotIndex = new AtomicInteger(-1); + itemFilterContainer.onMatch(itemStack, (matched, match, matchedSlot) -> { + matchResult.set(matched); + matchSlotIndex.set(matchedSlot); + }); + if (!matchResult.get() || !itemInfos.containsKey(matchSlotIndex.get())) { continue; } @@ -347,9 +354,13 @@ protected int moveInventoryItems(IItemHandler sourceInventory, IItemHandler targ if (sourceStack.isEmpty()) { continue; } - if (!itemFilterContainer.testItemStack(sourceStack)) { - continue; - } + + AtomicBoolean didMatch = new AtomicBoolean(true); + itemFilterContainer.onMatch(sourceStack, (matched, match, matchedSlot) -> { + didMatch.set(matched); + }); + if (!didMatch.get()) continue; + ItemStack remainder = GTTransferUtils.insertItem(targetInventory, sourceStack, true); int amountToInsert = sourceStack.getCount() - remainder.getCount(); @@ -405,21 +416,21 @@ protected Map countInventoryItemsByType(@NotNull IItemH if (itemStack.isEmpty()) { continue; } - var matchResult = itemFilterContainer.matchItemStack(itemStack); - if (!matchResult.matched()) { - continue; - } - var data = matchResult.getData(); - if (!result.containsKey(itemStack)) { - TypeItemInfo itemInfo = new TypeItemInfo(itemStack.copy(), data, new IntArrayList(), 0); - itemInfo.totalCount += itemStack.getCount(); - itemInfo.slots.add(srcIndex); - result.put(itemStack.copy(), itemInfo); - } else { - TypeItemInfo itemInfo = result.get(itemStack); - itemInfo.totalCount += itemStack.getCount(); - itemInfo.slots.add(srcIndex); - } + + int finalSrcIndex = srcIndex; + itemFilterContainer.onMatch(itemStack, (matched, match, matchedSlot) -> { + if (!matched) return; + if (!result.containsKey(itemStack)) { + TypeItemInfo itemInfo = new TypeItemInfo(itemStack.copy(), matchedSlot, new IntArrayList(), 0); + itemInfo.totalCount += itemStack.getCount(); + itemInfo.slots.add(finalSrcIndex); + result.put(itemStack.copy(), itemInfo); + } else { + TypeItemInfo itemInfo = result.get(itemStack); + itemInfo.totalCount += itemStack.getCount(); + itemInfo.slots.add(finalSrcIndex); + } + }); } return result; } @@ -432,22 +443,22 @@ protected Map countInventoryItemsByMatchSlot(@NotNull IIt if (itemStack.isEmpty()) { continue; } - var matchResult = itemFilterContainer.matchItemStack(itemStack); - if (!matchResult.matched()) { - continue; - } - int transferSlotIndex = matchResult.getData(); - if (!result.containsKey(transferSlotIndex)) { - GroupItemInfo itemInfo = new GroupItemInfo(transferSlotIndex, - new ObjectOpenCustomHashSet<>(ItemStackHashStrategy.comparingAllButCount()), 0); - itemInfo.itemStackTypes.add(itemStack.copy()); - itemInfo.totalCount += itemStack.getCount(); - result.put(transferSlotIndex, itemInfo); - } else { - GroupItemInfo itemInfo = result.get(transferSlotIndex); - itemInfo.itemStackTypes.add(itemStack.copy()); - itemInfo.totalCount += itemStack.getCount(); - } + + itemFilterContainer.onMatch(itemStack, (matched, match, matchedSlot) -> { + if (!matched) return; + if (!result.containsKey(matchedSlot)) { + GroupItemInfo itemInfo = new GroupItemInfo(matchedSlot, + new ObjectOpenCustomHashSet<>(ItemStackHashStrategy.comparingAllButCount()), 0); + itemInfo.itemStackTypes.add(itemStack.copy()); + itemInfo.totalCount += itemStack.getCount(); + result.put(matchedSlot, itemInfo); + } else { + GroupItemInfo itemInfo = result.get(matchedSlot); + itemInfo.itemStackTypes.add(itemStack.copy()); + itemInfo.totalCount += itemStack.getCount(); + } + }); + } return result; } diff --git a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java index 607c3e5df73..d4fbf8c5931 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java @@ -24,6 +24,7 @@ import org.jetbrains.annotations.NotNull; import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; public class CoverItemVoidingAdvanced extends CoverItemVoiding { @@ -56,13 +57,16 @@ protected void voidOverflow(IItemHandler myItemHandler) { for (TypeItemInfo typeItemInfo : itemTypeCount.values()) { int itemToVoidAmount = 0; - if (getItemFilterContainer().getItemFilter() == null) { + if (!getItemFilterContainer().hasItemFilter()) { itemToVoidAmount = typeItemInfo.totalCount - itemFilterContainer.getTransferStackSize(); } else { - if (itemFilterContainer.testItemStack(typeItemInfo.itemStack)) { - var matchResult = itemFilterContainer.matchItemStack(typeItemInfo.itemStack); - itemToVoidAmount = typeItemInfo.totalCount - itemFilterContainer.getSlotTransferLimit(matchResult.getData()); - } + AtomicInteger atomicInt = new AtomicInteger(itemToVoidAmount); + itemFilterContainer.onMatch(typeItemInfo.itemStack, (matched, match, matchedSlot) -> { + if (matched) { + atomicInt.set(typeItemInfo.totalCount - itemFilterContainer.getSlotTransferLimit(matchedSlot)); + } + }); + itemToVoidAmount = atomicInt.get(); } if (itemToVoidAmount <= 0) { diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index d4bd02f6a69..ce102944a20 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -143,7 +143,7 @@ protected int doKeepExact(IItemHandler itemHandler, IItemHandler myItemHandler, while (iterator.hasNext()) { Object filterSlotIndex = iterator.next(); GroupItemInfo sourceInfo = sourceItemAmounts.get(filterSlotIndex); - int itemToKeepAmount = itemFilterContainer.getSlotTransferLimit((Integer) sourceInfo.filterSlot); + int itemToKeepAmount = itemFilterContainer.getSlotTransferLimit(sourceInfo.filterSlot); // only run multiplier for smart item if (itemFilterContainer.getItemFilter() instanceof SmartItemFilter) { diff --git a/src/main/java/gregtech/common/covers/filter/Filter.java b/src/main/java/gregtech/common/covers/filter/Filter.java new file mode 100644 index 00000000000..7403a65ba78 --- /dev/null +++ b/src/main/java/gregtech/common/covers/filter/Filter.java @@ -0,0 +1,37 @@ +package gregtech.common.covers.filter; + +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.widget.ParentWidget; + +import gregtech.api.util.IDirtyNotifiable; + +import org.jetbrains.annotations.NotNull; + +public interface Filter { + + /** Uses Cleanroom MUI */ + @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager); + + /** Uses Cleanroom MUI */ + @NotNull ModularPanel createPanel(GuiSyncManager syncManager); + + /** Uses Cleanroom MUI - Creates the widgets standalone so that they can be put into their own panel */ + + @NotNull ParentWidget createWidgets(GuiSyncManager syncManager); + + void match(T toMatch); + + boolean test(T toTest); + + void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable); + + void markDirty(); + + void setOnMatched(OnMatch onMatch); + + @FunctionalInterface + interface OnMatch { + void onMatch(boolean matched, T match, int matchedSlot); + } +} diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index d153ca26628..a0731931fa1 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -21,14 +21,12 @@ import java.util.function.Consumer; import java.util.function.Supplier; -public abstract class ItemFilter { +public abstract class ItemFilter implements Filter { - public static MatchResult EMPTY_MATCH = new MatchResult<>(Match.SUCCEED, -1); private IDirtyNotifiable dirtyNotifiable; private BaseFilterReader filterReader; - public static final String KEY_ITEMS = "Items"; - public static final String COUNT = "Count"; - public static final String BLACKLIST = "is_blacklist"; + + private OnMatch onMatch = null; protected void setFilterReader(BaseFilterReader reader) { this.filterReader = reader; @@ -79,8 +77,6 @@ public int getStackTransferLimit(ItemStack stack, int globalTransferLimit) { return 0; } - public abstract MatchResult matchItemStack(ItemStack itemStack); - /** Deprecated, uses old builtin MUI */ @Deprecated public abstract void initUI(Consumer widgetGroup); @@ -103,50 +99,27 @@ public void readFromNBT(NBTTagCompound tagCompound) { // this.isBlacklistFilter = tagCompound.getBoolean("IsBlacklist"); } - final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { - this.dirtyNotifiable = dirtyNotifiable; - } + public abstract void match(ItemStack itemStack); - public final void markDirty() { - if (dirtyNotifiable != null) { - dirtyNotifiable.markAsDirty(); - } + protected final void onMatch(boolean matched, ItemStack stack, int matchSlot) { + if (this.onMatch != null) this.onMatch.onMatch(matched, stack, matchSlot); } - public static MatchResult createResult(Match match, R data) { - return new MatchResult<>(match, data); - } + public abstract boolean test(ItemStack toTest); - public static MatchResult createResult(Match match, int data) { - return new MatchResult<>(match, data); + public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { + this.dirtyNotifiable = dirtyNotifiable; } - public static class MatchResult { - Match match; - T data; - private MatchResult(Match match, T data) { - this.match = match; - this.data = data; - } - - public T getData() { - return data; - } - - public boolean matched() { - return match == Match.SUCCEED; - } - - public void flipMatch() { - this.match = matched() ? - ItemFilter.Match.FAIL : - ItemFilter.Match.SUCCEED; + public final void markDirty() { + if (dirtyNotifiable != null) { + dirtyNotifiable.markAsDirty(); } } - public enum Match { - FAIL, - SUCCEED + @Override + public void setOnMatched(OnMatch onMatch) { + this.onMatch = onMatch; } protected static class BaseFilterReader extends ItemStackItemHandler { @@ -154,6 +127,9 @@ protected static class BaseFilterReader extends ItemStackItemHandler { protected final ItemStack container; private Supplier maxStackSizer = () -> 1; private int cache; + protected static final String KEY_ITEMS = "Items"; + protected static final String COUNT = "Count"; + protected static final String BLACKLIST = "is_blacklist"; public BaseFilterReader(ItemStack container, int slots) { super(container, slots); this.container = container; diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 10b7196c311..0b431f279a2 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -231,18 +231,13 @@ public int getStackTransferLimit(ItemStack stack) { return currentItemFilter.getStackTransferLimit(stack, getTransferStackSize()); } - public ItemFilter.MatchResult matchItemStack(ItemStack itemStack) { - ItemFilter.MatchResult originalResult; - if (currentItemFilter == null) { - originalResult = ItemFilter.EMPTY_MATCH; - } else { - originalResult = currentItemFilter.matchItemStack(itemStack); - } - return originalResult; + public void onMatch(ItemStack stack, Filter.OnMatch onMatch) { + this.currentItemFilter.setOnMatched(onMatch); + this.currentItemFilter.match(stack); } public boolean testItemStack(ItemStack itemStack) { - return matchItemStack(itemStack).matched(); + return currentItemFilter == null || currentItemFilter.test(itemStack); } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java index c8752e9b608..3aa8a65b974 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java @@ -60,10 +60,6 @@ public int getSlotTransferLimit(int matchSlot, int globalTransferLimit) { return container.getSlotTransferLimit(matchSlot); } - public ItemFilter.MatchResult matchItemStack(ItemStack itemStack) { - return container.matchItemStack(itemStack); - } - public boolean testItemStack(ItemStack itemStack) { return container.testItemStack(itemStack); } diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index c6994e95b69..254f3eaa430 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -327,11 +327,17 @@ protected String highlightRule(StringBuilder h) { } @Override - public MatchResult matchItemStack(ItemStack itemStack) { + public void match(ItemStack itemStack) { // "wtf is this system?? i can put any non null object here and it i will work??? $arch" // not anymore :thanosdaddy: -ghzdude - var match = matchesItemStack(itemStack) ? Match.SUCCEED : Match.FAIL; - return ItemFilter.createResult(match, -1); + var match = matchesItemStack(itemStack); + this.onMatch(match, match ? itemStack.copy() : ItemStack.EMPTY, -1); +// return ItemFilter.createResult(match, -1); + } + + @Override + public boolean test(ItemStack toTest) { + return matchesItemStack(toTest); } public boolean matchesItemStack(@NotNull ItemStack itemStack) { diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 5af5faed9a4..eb692c50ebe 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -35,20 +35,21 @@ public class SimpleItemFilter extends ItemFilter { private static final int MAX_MATCH_SLOTS = 9; private final SimpleFilterReader filterReader; - public static final String IGNORE_NBT = "ignore_nbt"; - public static final String IGNORE_DAMAGE = "ignore_damage"; - public SimpleItemFilter(ItemStack stack) { this.filterReader = new SimpleFilterReader(stack, MAX_MATCH_SLOTS); setFilterReader(this.filterReader); } @Override - public MatchResult matchItemStack(ItemStack itemStack) { - int itemFilterMatchIndex = itemFilterMatch(filterReader, filterReader.isIgnoreDamage(), filterReader.isIgnoreNBT(), itemStack); - var result = ItemFilter.createResult(itemFilterMatchIndex == -1 ? Match.FAIL : Match.SUCCEED, itemFilterMatchIndex); - if (filterReader.isBlacklistFilter()) result.flipMatch(); - return result; + public void match(ItemStack itemStack) { + int matchedSlot = itemFilterMatch(filterReader, filterReader.isIgnoreDamage(), filterReader.isIgnoreNBT(), itemStack); + this.onMatch(matchedSlot != -1, itemStack.copy(), matchedSlot); + } + + @Override + public boolean test(ItemStack toTest) { + int matchedSlot = itemFilterMatch(filterReader, filterReader.isIgnoreDamage(), filterReader.isIgnoreNBT(), toTest); + return matchedSlot != -1; } @Override @@ -106,7 +107,7 @@ public ParentWidget createWidgets(GuiSyncManager syncManager) { .tooltipBuilder(tooltip -> { int count = this.filterReader.getItemsNbt() .getCompoundTagAt(index) - .getInteger(COUNT); + .getInteger(SimpleFilterReader.COUNT); if (count > 64) tooltip.addLine(IKey.format("Count: %s", TextFormattingUtil.formatNumbers(count))); }) @@ -152,7 +153,7 @@ public void readFromNBT(NBTTagCompound tagCompound) { // this.ignoreNBT = tagCompound.getBoolean("IgnoreNBT"); } - public static int itemFilterMatch(IItemHandler filterSlots, boolean ignoreDamage, boolean ignoreNBTData, + public int itemFilterMatch(IItemHandler filterSlots, boolean ignoreDamage, boolean ignoreNBTData, ItemStack itemStack) { for (int i = 0; i < filterSlots.getSlots(); i++) { ItemStack filterStack = filterSlots.getStackInSlot(i); @@ -163,7 +164,7 @@ public static int itemFilterMatch(IItemHandler filterSlots, boolean ignoreDamage return -1; } - private static boolean areItemsEqual(boolean ignoreDamage, boolean ignoreNBTData, ItemStack filterStack, + private boolean areItemsEqual(boolean ignoreDamage, boolean ignoreNBTData, ItemStack filterStack, ItemStack itemStack) { if (ignoreDamage) { if (!filterStack.isItemEqualIgnoreDurability(itemStack)) { @@ -176,6 +177,9 @@ private static boolean areItemsEqual(boolean ignoreDamage, boolean ignoreNBTData } protected class SimpleFilterReader extends BaseFilterReader { + + public static final String IGNORE_NBT = "ignore_nbt"; + public static final String IGNORE_DAMAGE = "ignore_damage"; public SimpleFilterReader(ItemStack container, int slots) { super(container, slots); setIgnoreDamage(true); diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 43005d26e2c..163bc9676d0 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -68,10 +68,15 @@ public int getStackTransferLimit(ItemStack stack, int globalTransferLimit) { } @Override - public MatchResult matchItemStack(ItemStack itemStack) { - int data = getStackTransferLimit(itemStack, Integer.MAX_VALUE); - var match = data > 0 ? Match.SUCCEED : Match.FAIL; - return ItemFilter.createResult(match, data); + public void match(ItemStack itemStack) { + var stack = itemStack.copy(); + stack.setCount(getStackTransferLimit(itemStack, Integer.MAX_VALUE)); + this.onMatch(stack.getCount() > 0, stack, this.getFilteringMode().ordinal()); + } + + @Override + public boolean test(ItemStack toTest) { + return getStackTransferLimit(toTest, Integer.MAX_VALUE) > 0; } @Override diff --git a/src/main/java/gregtech/common/pipelike/itempipe/net/ItemNetHandler.java b/src/main/java/gregtech/common/pipelike/itempipe/net/ItemNetHandler.java index ef0539c6d3d..58c7eb52cb5 100644 --- a/src/main/java/gregtech/common/pipelike/itempipe/net/ItemNetHandler.java +++ b/src/main/java/gregtech/common/pipelike/itempipe/net/ItemNetHandler.java @@ -26,6 +26,8 @@ import java.util.Comparator; import java.util.Iterator; import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; public class ItemNetHandler implements IItemHandler { @@ -364,16 +366,19 @@ public Cover getCoverOnNeighbour(TileEntityItemPipe itemPipe, EnumFacing facing) public ItemStack insertOverRobotArm(IItemHandler handler, CoverRoboticArm arm, ItemStack stack, boolean simulate, int allowed, boolean ignoreLimit) { - int rate; - boolean isStackSpecific = false; - var matchResult = arm.getItemFilterContainer().matchItemStack(stack); - int index = matchResult.getData(); - if (index > 0) { - rate = arm.getItemFilterContainer().getSlotTransferLimit(index); - isStackSpecific = true; - } else - rate = arm.getItemFilterContainer().getTransferStackSize(); - int count; + AtomicInteger atomicInt = new AtomicInteger(); + AtomicBoolean atomicBool = new AtomicBoolean(false); + arm.getItemFilterContainer().onMatch(stack, (matched, match, matchedSlot) -> { + if (matched && matchedSlot > 0) { + atomicInt.set(arm.getItemFilterContainer().getSlotTransferLimit(matchedSlot)); + atomicBool.set(true); + } else { + atomicInt.set(arm.getItemFilterContainer().getTransferStackSize()); + } + }); + int count, rate = atomicInt.get(); + boolean isStackSpecific = atomicBool.get(); + switch (arm.getTransferMode()) { case TRANSFER_ANY: return insert(handler, stack, simulate, allowed, ignoreLimit); From 6ffd5d535e9dcd99f443bf92ed3ff9a45d38bfac Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 14 Jan 2024 12:23:01 -0700 Subject: [PATCH 073/260] try and read old nbt --- .../common/covers/filter/ItemFilter.java | 8 ++--- .../covers/filter/ItemFilterContainer.java | 4 ++- .../covers/filter/ItemFilterWrapper.java | 1 + .../filter/OreDictionaryItemFilter.java | 1 + .../covers/filter/SimpleItemFilter.java | 29 +++++++++++-------- .../common/covers/filter/SmartItemFilter.java | 8 ++--- 6 files changed, 27 insertions(+), 24 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index a0731931fa1..a5fa15882be 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -91,12 +91,10 @@ public int getStackTransferLimit(ItemStack stack, int globalTransferLimit) { public abstract @NotNull ParentWidget createWidgets(GuiSyncManager syncManager); - public void writeToNBT(NBTTagCompound tagCompound) { -// tagCompound.setBoolean("IsBlacklist", this.isBlacklistFilter); - } - + @Deprecated public void readFromNBT(NBTTagCompound tagCompound) { -// this.isBlacklistFilter = tagCompound.getBoolean("IsBlacklist"); + setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); + markDirty(); } public abstract void match(ItemStack itemStack); diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 0b431f279a2..52329621f6b 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -287,8 +287,10 @@ public NBTTagCompound serializeNBT() { public void deserializeNBT(NBTTagCompound tagCompound) { this.filterInventory.deserializeNBT(tagCompound.getCompoundTag("FilterInventory")); var stack = getFilterInventory().getStackInSlot(0); - if (FilterTypeRegistry.isItemFilter(stack)) + if (FilterTypeRegistry.isItemFilter(stack)) { this.currentItemFilter = FilterTypeRegistry.getItemFilterForStack(stack); + this.currentItemFilter.readFromNBT(tagCompound); // try to read old data + } this.maxStackSize = tagCompound.getInteger("MaxStackSize"); this.transferStackSize = tagCompound.getInteger("TransferStackSize"); diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java index 3aa8a65b974..81f2446d20c 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java @@ -5,6 +5,7 @@ import java.util.function.BooleanSupplier; import java.util.function.Consumer; +@Deprecated public class ItemFilterWrapper { private final ItemFilterContainer container; diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 254f3eaa430..2d7b1da12ea 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -395,6 +395,7 @@ public boolean showGlobalTransferLimitSlider() { @Override public void readFromNBT(NBTTagCompound tag) { + super.readFromNBT(tag); this.filterReader.setExpression(tag.getString("OreDictionaryFilter")); this.filterReader.setCaseSensitive(tag.getBoolean("caseSensitive")); this.filterReader.setMatchAll(tag.getBoolean("matchAll")); diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index eb692c50ebe..845fe281079 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -26,6 +26,9 @@ import com.cleanroommc.modularui.widgets.SlotGroupWidget; import com.cleanroommc.modularui.widgets.layout.Row; import com.cleanroommc.modularui.widgets.slot.SlotGroup; + +import net.minecraftforge.items.ItemStackHandler; + import org.jetbrains.annotations.NotNull; import java.util.function.Consumer; @@ -137,20 +140,22 @@ public ParentWidget createWidgets(GuiSyncManager syncManager) { .addTooltip(1, IKey.lang("cover.item_filter.ignore_nbt.enabled")))); } - @Override - public void writeToNBT(NBTTagCompound tagCompound) { -// super.writeToNBT(tagCompound); -// tagCompound.setTag("ItemFilter", itemFilterSlots.serializeNBT()); -// tagCompound.setBoolean("IgnoreDamage", ignoreDamage); -// tagCompound.setBoolean("IgnoreNBT", ignoreNBT); - } - @Override public void readFromNBT(NBTTagCompound tagCompound) { -// super.readFromNBT(tagCompound); -// this.itemFilterSlots.deserializeNBT(tagCompound.getCompoundTag("ItemFilter")); -// this.ignoreDamage = tagCompound.getBoolean("IgnoreDamage"); -// this.ignoreNBT = tagCompound.getBoolean("IgnoreNBT"); + super.readFromNBT(tagCompound); + + if (tagCompound.hasKey("ItemFilter")) { + var temp = new ItemStackHandler(); + temp.deserializeNBT(tagCompound.getCompoundTag("ItemFilter")); + for (int i = 0; i < temp.getSlots(); i++) { + var stack = temp.getStackInSlot(i); + if (stack.isEmpty()) continue; + this.filterReader.setStackInSlot(i, stack); + } + } + + this.filterReader.setIgnoreDamage(tagCompound.getBoolean("IgnoreDamage")); + this.filterReader.setIgnoreNBT(tagCompound.getBoolean("IgnoreNBT")); } public int itemFilterMatch(IItemHandler filterSlots, boolean ignoreDamage, boolean ignoreNBTData, diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 163bc9676d0..3f9490a8c4f 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -128,14 +128,10 @@ public boolean showGlobalTransferLimitSlider() { return true; } - @Override - public void writeToNBT(NBTTagCompound tagCompound) { -// tagCompound.setInteger("FilterMode", filteringMode.ordinal()); - } - @Override public void readFromNBT(NBTTagCompound tagCompound) { -// this.filteringMode = SmartFilteringMode.values()[tagCompound.getInteger("FilterMode")]; + super.readFromNBT(tagCompound); + this.filterReader.setFilteringMode(SmartFilteringMode.values()[tagCompound.getInteger("FilterMode")]); } private static class ItemAndMetadataAndStackSize { From 8a5b908a443d5e4f8ee60285d6f971d1e3646b62 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 14 Jan 2024 16:08:52 -0700 Subject: [PATCH 074/260] begin work on deprecating fluid filter wrapper --- .../common/covers/CoverBehaviors.java | 2 +- .../common/covers/CoverFluidFilter.java | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverBehaviors.java b/src/main/java/gregtech/common/covers/CoverBehaviors.java index 71ac797e8f2..1160cc20155 100644 --- a/src/main/java/gregtech/common/covers/CoverBehaviors.java +++ b/src/main/java/gregtech/common/covers/CoverBehaviors.java @@ -72,7 +72,7 @@ public static void init() { tile, side, "cover.item_filter.title", Textures.ITEM_FILTER_FILTER_OVERLAY)); registerBehavior(gregtechId("fluid_filter"), MetaItems.FLUID_FILTER, (def, tile, side) -> new CoverFluidFilter(def, tile, side, "cover.fluid_filter.title", - Textures.FLUID_FILTER_OVERLAY, new SimpleFluidFilter())); + Textures.FLUID_FILTER_OVERLAY)); registerBehavior(gregtechId("shutter"), MetaItems.COVER_SHUTTER, CoverShutter::new); registerBehavior(gregtechId("solar_panel.basic"), MetaItems.COVER_SOLAR_PANEL, diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index cd5d06ee5a4..d686aaae9db 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -12,11 +12,12 @@ import gregtech.api.gui.widgets.WidgetGroup; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; -import gregtech.common.covers.filter.FluidFilter; +import gregtech.common.covers.filter.FilterTypeRegistry; import gregtech.common.covers.filter.FluidFilterWrapper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumActionResult; @@ -39,19 +40,16 @@ public class CoverFluidFilter extends CoverBase implements CoverWithUI { protected final String titleLocale; protected final SimpleOverlayRenderer texture; - protected final FluidFilterWrapper fluidFilter; + protected FluidFilterWrapper fluidFilter; protected FluidFilterMode filterMode; protected FluidHandlerFiltered fluidHandler; public CoverFluidFilter(@NotNull CoverDefinition definition, @NotNull CoverableView coverableView, - @NotNull EnumFacing attachedSide, String titleLocale, SimpleOverlayRenderer texture, - FluidFilter fluidFilter) { + @NotNull EnumFacing attachedSide, String titleLocale, SimpleOverlayRenderer texture) { super(definition, coverableView, attachedSide); this.filterMode = FluidFilterMode.FILTER_FILL; this.titleLocale = titleLocale; this.texture = texture; - this.fluidFilter = new FluidFilterWrapper(this); - this.fluidFilter.setFluidFilter(fluidFilter); } public void setFilterMode(FluidFilterMode filterMode) { @@ -59,6 +57,15 @@ public void setFilterMode(FluidFilterMode filterMode) { this.getCoverableView().markDirty(); } + @Override + public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFacing side, + @Nullable EntityPlayer player, @NotNull ItemStack itemStack) { + super.onAttachment(coverableView, side, player, itemStack); + + this.fluidFilter = new FluidFilterWrapper(this); + this.fluidFilter.setFluidFilter(FilterTypeRegistry.getFluidFilterForStack(itemStack)); + } + public FluidFilterMode getFilterMode() { return filterMode; } From 106d74a9bebaa6e24d66839e7f6ec0c5487f059c Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 14 Jan 2024 16:09:49 -0700 Subject: [PATCH 075/260] move base filter reader to new class --- .../common/covers/filter/ItemFilter.java | 64 ++----------------- .../filter/readers/BaseFilterReader.java | 62 ++++++++++++++++++ 2 files changed, 68 insertions(+), 58 deletions(-) create mode 100644 src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index a5fa15882be..cd2d58fd621 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -1,21 +1,14 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.utils.ItemStackItemHandler; - -import com.cleanroommc.modularui.widget.ParentWidget; - import gregtech.api.util.IDirtyNotifiable; +import gregtech.common.covers.filter.readers.BaseFilterReader; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; - -import net.minecraft.nbt.NBTTagList; - -import net.minecraftforge.common.util.Constants; - +import com.cleanroommc.modularui.widget.ParentWidget; import org.jetbrains.annotations.NotNull; import java.util.function.Consumer; @@ -24,11 +17,11 @@ public abstract class ItemFilter implements Filter { private IDirtyNotifiable dirtyNotifiable; - private BaseFilterReader filterReader; + private BaseItemFilterReader filterReader; private OnMatch onMatch = null; - protected void setFilterReader(BaseFilterReader reader) { + protected void setFilterReader(BaseItemFilterReader reader) { this.filterReader = reader; } @@ -120,64 +113,19 @@ public void setOnMatched(OnMatch onMatch) { this.onMatch = onMatch; } - protected static class BaseFilterReader extends ItemStackItemHandler { - - protected final ItemStack container; + protected static class BaseItemFilterReader extends BaseFilterReader { private Supplier maxStackSizer = () -> 1; private int cache; - protected static final String KEY_ITEMS = "Items"; protected static final String COUNT = "Count"; - protected static final String BLACKLIST = "is_blacklist"; - public BaseFilterReader(ItemStack container, int slots) { + public BaseItemFilterReader(ItemStack container, int slots) { super(container, slots); - this.container = container; setBlacklistFilter(false); } - public ItemStack getContainer () { - return this.container; - } - public void onMaxStackSizeChange() { this.cache = getMaxStackSizer().get(); } - public final void setBlacklistFilter(boolean blacklistFilter) { - getStackTag().setBoolean(BLACKLIST, blacklistFilter); - onMaxStackSizeChange(); - } - - public final boolean isBlacklistFilter() { - return getStackTag().getBoolean(BLACKLIST); - } - - protected NBTTagCompound getStackTag() { - if (!container.hasTagCompound()) { - container.setTagCompound(new NBTTagCompound()); - } - return container.getTagCompound(); - } - - @Override - public NBTTagList getItemsNbt() { - NBTTagCompound nbt = getStackTag(); - if (!nbt.hasKey(KEY_ITEMS)) { - NBTTagList list = new NBTTagList(); - for (int i = 0; i < getSlots(); i++) { - list.appendTag(new NBTTagCompound()); - } - nbt.setTag(KEY_ITEMS, list); - } - return nbt.getTagList(KEY_ITEMS, Constants.NBT.TAG_COMPOUND); - } - - @Override - protected void validateSlotIndex(int slot) { - if (slot < 0 || slot >= this.getSlots()) { - throw new RuntimeException("Slot " + slot + " not in valid range - [0," + this.getSlots() + ")"); - } - } - public final int getMaxStackSize() { return this.isBlacklistFilter() ? 1 : this.cache; } diff --git a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java new file mode 100644 index 00000000000..f6e4f7e94c8 --- /dev/null +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -0,0 +1,62 @@ +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; + +import com.cleanroommc.modularui.utils.ItemStackItemHandler; + +public abstract class BaseFilterReader extends ItemStackItemHandler { + + protected final ItemStack container; + protected static final String KEY_ITEMS = "Items"; + protected static final String BLACKLIST = "is_blacklist"; + public BaseFilterReader(ItemStack container, int slots) { + super(container, slots); + this.container = container; + setBlacklistFilter(false); + } + + public ItemStack getContainer () { + return this.container; + } + + public abstract void onMaxStackSizeChange(); + + public final void setBlacklistFilter(boolean blacklistFilter) { + getStackTag().setBoolean(BLACKLIST, blacklistFilter); + onMaxStackSizeChange(); + } + + public final boolean isBlacklistFilter() { + return getStackTag().getBoolean(BLACKLIST); + } + + protected NBTTagCompound getStackTag() { + if (!container.hasTagCompound()) { + container.setTagCompound(new NBTTagCompound()); + } + return container.getTagCompound(); + } + + @Override + public NBTTagList getItemsNbt() { + NBTTagCompound nbt = getStackTag(); + if (!nbt.hasKey(KEY_ITEMS)) { + NBTTagList list = new NBTTagList(); + for (int i = 0; i < getSlots(); i++) { + list.appendTag(new NBTTagCompound()); + } + nbt.setTag(KEY_ITEMS, list); + } + return nbt.getTagList(KEY_ITEMS, Constants.NBT.TAG_COMPOUND); + } + + @Override + protected void validateSlotIndex(int slot) { + if (slot < 0 || slot >= this.getSlots()) { + throw new RuntimeException("Slot " + slot + " not in valid range - [0," + this.getSlots() + ")"); + } + } +} From c61915e1948acd8a396134a149a674b105ec6603 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 14 Jan 2024 16:11:03 -0700 Subject: [PATCH 076/260] begin work on porting fluid filter to mui --- .../common/covers/filter/FluidFilter.java | 23 +- .../covers/filter/FluidFilterWrapper.java | 4 +- .../covers/filter/SimpleFluidFilter.java | 314 +++++++++++++++--- .../java/gregtech/common/items/MetaItem1.java | 4 +- .../filter/SimpleFluidFilterUIManager.java | 19 ++ 5 files changed, 303 insertions(+), 61 deletions(-) create mode 100644 src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index 6d6dc23254b..cb247be8c9d 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -3,26 +3,41 @@ import gregtech.api.gui.Widget; import gregtech.api.util.IDirtyNotifiable; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fluids.FluidStack; import java.util.function.Consumer; -public abstract class FluidFilter { +public abstract class FluidFilter implements Filter { private IDirtyNotifiable dirtyNotifiable; boolean showTip; - public abstract boolean testFluid(FluidStack fluidStack); + private OnMatch onMatch = null; - public abstract int getFluidTransferLimit(FluidStack fluidStack); + public abstract void match(FluidStack toMatch); + + public abstract boolean test(FluidStack fluidStack); + + @Override + public final void setOnMatched(OnMatch onMatch) { + this.onMatch = onMatch; + } - public abstract int getMaxOccupiedHeight(); + protected final void onMatch(boolean matched, FluidStack stack, int index) { + if (this.onMatch != null) this.onMatch.onMatch(matched, stack, index); + } + + public abstract int getFluidTransferLimit(FluidStack fluidStack); + @Deprecated public abstract void initUI(Consumer widgetGroup); public abstract void writeToNBT(NBTTagCompound tagCompound); + public abstract ItemStack getContainerStack(); + public abstract void readFromNBT(NBTTagCompound tagCompound); public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java b/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java index 2ef1f76a32e..19f4dbc68b3 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java @@ -77,7 +77,7 @@ public boolean isBlacklistFilter() { public boolean testFluidStack(FluidStack fluidStack, boolean whitelist) { boolean result = true; if (currentFluidFilter != null) { - result = currentFluidFilter.testFluid(fluidStack); + result = currentFluidFilter.test(fluidStack); } if (!whitelist) { result = !result; @@ -88,7 +88,7 @@ public boolean testFluidStack(FluidStack fluidStack, boolean whitelist) { public boolean testFluidStack(FluidStack fluidStack) { boolean result = true; if (currentFluidFilter != null) { - result = currentFluidFilter.testFluid(fluidStack); + result = currentFluidFilter.test(fluidStack); } if (isBlacklistFilter) { result = !result; diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index c3abb86898e..57bb15be56b 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -1,15 +1,25 @@ package gregtech.common.covers.filter; -import gregtech.api.gui.GuiTextures; import gregtech.api.gui.Widget; -import gregtech.api.gui.widgets.PhantomFluidWidget; +import gregtech.api.mui.GTGuis; +import gregtech.common.covers.filter.readers.BaseFilterReader; -import net.minecraft.nbt.NBTBase; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.common.util.Constants; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidTank; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.FluidSlotSyncHandler; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widgets.FluidSlot; +import com.cleanroommc.modularui.widgets.SlotGroupWidget; +import com.cleanroommc.modularui.widgets.layout.Column; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.function.Consumer; @@ -18,54 +28,109 @@ public class SimpleFluidFilter extends FluidFilter { private static final int MAX_FLUID_SLOTS = 9; - protected final FluidTank[] fluidFilterTanks = new FluidTank[MAX_FLUID_SLOTS]; +// protected final FluidTank[] fluidFilterTanks = new FluidTank[MAX_FLUID_SLOTS]; - public SimpleFluidFilter() { - for (int i = 0; i < MAX_FLUID_SLOTS; ++i) { - fluidFilterTanks[i] = new FluidTank(1000) { + private final SimpleFluidFilterReader filterReader; - @Override - public void setFluid(@Nullable FluidStack fluid) { - super.setFluid(fluid); - SimpleFluidFilter.this.markDirty(); - } - }; - } + public SimpleFluidFilter(ItemStack stack) { + this.filterReader = new SimpleFluidFilterReader(stack, MAX_FLUID_SLOTS); +// for (int i = 0; i < MAX_FLUID_SLOTS; ++i) { +// fluidFilterTanks[i] = new FluidTank(1000) { +// +// @Override +// public void setFluid(@Nullable FluidStack fluid) { +// super.setFluid(fluid); +// SimpleFluidFilter.this.markDirty(); +// } +// }; +// } } @Override public void configureFilterTanks(int amount) { - for (FluidTank fluidTank : fluidFilterTanks) { - if (fluidTank.getFluid() != null) - fluidTank.getFluid().amount = amount; - } + this.filterReader.setFluidAmounts(amount); +// for (FluidTank fluidTank : fluidFilterTanks) { +// if (fluidTank.getFluid() != null) +// fluidTank.getFluid().amount = amount; +// } this.markDirty(); } @Override public void setMaxConfigurableFluidSize(int maxSize) { - for (FluidTank fluidTank : fluidFilterTanks) { - fluidTank.setCapacity(maxSize); + for (int i = 0; i < filterReader.getSlots(); i++) { + filterReader.getFluidTank(i).setCapacity(maxSize); } +// for (FluidTank fluidTank : fluidFilterTanks) { +// fluidTank.setCapacity(maxSize); +// } } @Override - public boolean testFluid(FluidStack fluidStack) { - return checkInputFluid(fluidFilterTanks, fluidStack); + public ItemStack getContainerStack() { + return this.filterReader.getContainer(); } @Override - public int getMaxOccupiedHeight() { - return 36; + public @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager) { + return GTGuis.createPopupPanel("simple_fluid_filter", 100, 100) + .padding(4) + .child(createWidgets(syncManager)); } @Override - public void initUI(Consumer widgetGroup) { - for (int i = 0; i < 9; ++i) { - widgetGroup.accept((new PhantomFluidWidget(10 + 18 * (i % 3), 18 * (i / 3), 18, 18, - this.fluidFilterTanks[i])) - .setBackgroundTexture(GuiTextures.SLOT).showTipSupplier(this::shouldShowTip)); + public @NotNull ModularPanel createPanel(GuiSyncManager syncManager) { + return GTGuis.createPanel(this.filterReader.getContainer(), 100, 100); + } + + @Override + public @NotNull ParentWidget createWidgets(GuiSyncManager syncManager) { + return new Column().coverChildrenHeight().widthRel(1f) + .child(SlotGroupWidget.builder() + .matrix("FFF", + "FFF", + "FFF") + .key('F', i -> new FluidSlot() + .syncHandler(new FluidSlotSyncHandler(this.filterReader.getFluidTank(i)) + .phantom(true))) + .build()); + } + + @Override + public void match(FluidStack toMatch) { + boolean matched = false; + int index = -1; + for (int i = 0; i < filterReader.getSlots(); i++) { + var fluid = filterReader.getFluidStack(i); + if (fluid != null && fluid.isFluidEqual(toMatch)) { + matched = true; + index = i; + break; + } } + this.onMatch(matched, toMatch.copy(), index); +// for (int i = 0; i < fluidFilterTanks.length; i++) { +// FluidTank fluidTank = fluidFilterTanks[i]; +// if (fluidTank.getFluid() != null && fluidTank.getFluid().isFluidEqual(toMatch)) { +// matched = true; +// index = i; +// break; +// } +// } + } + + @Override + public boolean test(FluidStack fluidStack) { + return checkInputFluid(fluidStack); + } + + @Override + public void initUI(Consumer widgetGroup) { +// for (int i = 0; i < 9; ++i) { +// widgetGroup.accept((new PhantomFluidWidget(10 + 18 * (i % 3), 18 * (i / 3), 18, 18, +// this.fluidFilterTanks[i])) +// .setBackgroundTexture(GuiTextures.SLOT).showTipSupplier(this::shouldShowTip)); +// } } private boolean shouldShowTip() { @@ -73,31 +138,32 @@ private boolean shouldShowTip() { } public void writeToNBT(NBTTagCompound tagCompound) { - NBTTagList filterSlots = new NBTTagList(); - for (int i = 0; i < this.fluidFilterTanks.length; ++i) { - FluidTank fluidTank = this.fluidFilterTanks[i]; - if (fluidTank.getFluid() != null) { - NBTTagCompound stackTag = new NBTTagCompound(); - fluidTank.getFluid().writeToNBT(stackTag); - stackTag.setInteger("Slot", i); - filterSlots.appendTag(stackTag); - } - } - tagCompound.setTag("FluidFilter", filterSlots); +// NBTTagList filterSlots = new NBTTagList(); +// for (int i = 0; i < this.fluidFilterTanks.length; ++i) { +// FluidTank fluidTank = this.fluidFilterTanks[i]; +// if (fluidTank.getFluid() != null) { +// NBTTagCompound stackTag = new NBTTagCompound(); +// fluidTank.getFluid().writeToNBT(stackTag); +// stackTag.setInteger("Slot", i); +// filterSlots.appendTag(stackTag); +// } +// } +// tagCompound.setTag("FluidFilter", filterSlots); } public void readFromNBT(NBTTagCompound tagCompound) { - NBTTagList filterSlots = tagCompound.getTagList("FluidFilter", 10); - for (NBTBase nbtBase : filterSlots) { - NBTTagCompound stackTag = (NBTTagCompound) nbtBase; - FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(stackTag); - this.fluidFilterTanks[stackTag.getInteger("Slot")].setFluid(fluidStack); - } +// NBTTagList filterSlots = tagCompound.getTagList("FluidFilter", 10); +// for (NBTBase nbtBase : filterSlots) { +// NBTTagCompound stackTag = (NBTTagCompound) nbtBase; +// FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(stackTag); +// this.fluidFilterTanks[stackTag.getInteger("Slot")].setFluid(fluidStack); +// } } - public static boolean checkInputFluid(FluidTank[] fluidFilterTanks, FluidStack fluidStack) { - for (FluidTank fluidTank : fluidFilterTanks) { - if (fluidTank.getFluid() != null && fluidTank.getFluid().isFluidEqual(fluidStack)) { + public boolean checkInputFluid(FluidStack fluidStack) { + for (int i = 0; i < filterReader.getSlots(); i++) { + var fluid = filterReader.getFluidStack(i); + if (fluid != null && fluid.isFluidEqual(fluidStack)) { return true; } } @@ -107,12 +173,152 @@ public static boolean checkInputFluid(FluidTank[] fluidFilterTanks, FluidStack f @Override public int getFluidTransferLimit(FluidStack fluidStack) { int limit = 0; - for (FluidTank fluidTank : fluidFilterTanks) { - if (fluidTank.getFluid() != null && fluidTank.getFluid().isFluidEqual(fluidStack)) { - limit = fluidTank.getFluid().amount; - break; + + for (int i = 0; i < this.filterReader.getSlots(); i++) { + var fluid = this.filterReader.getFluidStack(i); + if (fluid != null && fluid.isFluidEqual(fluidStack)) { + limit = fluid.amount; } } +// for (FluidTank fluidTank : fluidFilterTanks) { +// if (fluidTank.getFluid() != null && fluidTank.getFluid().isFluidEqual(fluidStack)) { +// limit = fluidTank.getFluid().amount; +// break; +// } +// } return limit; } + protected class SimpleFluidFilterReader extends BaseFilterReader { + + protected static final String KEY_FLUIDS = "FluidTank"; + public SimpleFluidFilterReader(ItemStack container, int slots) { + super(container, slots); + } + + @Override + public void onMaxStackSizeChange() { + + } + + @Override + public NBTTagList getItemsNbt() { + NBTTagCompound nbt = getStackTag(); + if (!nbt.hasKey(KEY_FLUIDS)) { + NBTTagList list = new NBTTagList(); + for (int i = 0; i < getSlots(); i++) { + list.appendTag(new NBTTagCompound()); + } + nbt.setTag(KEY_FLUIDS, list); + } + return nbt.getTagList(KEY_FLUIDS, Constants.NBT.TAG_COMPOUND); + } + + public FluidStack getFluidStack(int i) { + return getFluidTank(i).getFluid(); + } + + public WritableFluidTank getFluidTank(int i) { + return new WritableFluidTank(getItemsNbt().getCompoundTagAt(i), 1000); + } + + public void setFluidAmounts(int amount) { + for (int i = 0; i < getSlots(); i++) { + getFluidTank(i).setFluidAmount(amount); + } + } + } + + protected class WritableFluidTank implements IFluidTank { + + private final NBTTagCompound fluidTank; + protected static final String FLUID_AMOUNT = "Amount"; + protected static final String CAPACITY = "Capacity"; + protected static final String FLUID = "Fluid"; + protected static final String EMPTY = "Empty"; + public WritableFluidTank(NBTTagCompound fluidTank, int initialCapacity) { + this.fluidTank = fluidTank; + setCapacity(initialCapacity); + } + + public void setCapacity(int capacity) { + this.fluidTank.setInteger(CAPACITY, capacity); + } + + public void setFluidAmount(int amount) { + getFluidTag().setInteger(FLUID_AMOUNT, amount); + } + + public boolean isEmpty() { + return getFluidTag().isEmpty(); + } + + protected NBTTagCompound getFluidTag() { + if (!this.fluidTank.hasKey(FLUID)) { + this.fluidTank.setTag(FLUID, new NBTTagCompound()); + } + + return this.fluidTank.getCompoundTag(FLUID); + } + + @Override + public FluidStack getFluid() { + return FluidStack.loadFluidStackFromNBT(getFluidTag()); + } + + public void setFluid(@Nullable FluidStack stack) { + if (stack == null) { + this.fluidTank.setTag(FLUID, new NBTTagCompound()); + } else { + this.fluidTank.setTag(FLUID, stack.writeToNBT(getFluidTag())); + } + } + + @Override + public int getFluidAmount() { + return isEmpty() ? 0 : getFluidTag().getInteger(FLUID_AMOUNT); + } + + @Override + public int getCapacity() { + return this.fluidTank.getInteger(CAPACITY); + } + + @Override + public FluidTankInfo getInfo() { + return new FluidTankInfo(getFluid(), getCapacity()); + } + + @SuppressWarnings("DataFlowIssue") + @Override + public int fill(FluidStack resource, boolean doFill) { + if (isEmpty() || !getFluid().isFluidEqual(resource)) { + setFluid(resource); + return resource.amount; + } else { + var fluid = getFluid(); + int accepted = Math.min(resource.amount, getCapacity() - fluid.amount); + fluid.amount += accepted; + setFluid(fluid); + return accepted; + } + } + + @SuppressWarnings("DataFlowIssue") + @Override + public FluidStack drain(int maxDrain, boolean doDrain) { + if (isEmpty()) return null; + var fluid = getFluid(); + fluid.amount = Math.min(fluid.amount, maxDrain); + + var copy = getFluid(); + copy.amount -= fluid.amount; + + if (copy.amount == 0) + setFluid(null); + else + setFluid(copy); + + return fluid; + } + } } diff --git a/src/main/java/gregtech/common/items/MetaItem1.java b/src/main/java/gregtech/common/items/MetaItem1.java index 2f3f8cc3d5e..3fe8e1ecf4c 100644 --- a/src/main/java/gregtech/common/items/MetaItem1.java +++ b/src/main/java/gregtech/common/items/MetaItem1.java @@ -49,6 +49,7 @@ 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.SimpleFluidFilterUIManager; import gregtech.common.items.behaviors.filter.SmartFilterUIManager; import gregtech.common.items.behaviors.monitorplugin.AdvancedMonitorPluginBehavior; import gregtech.common.items.behaviors.monitorplugin.FakeGuiPluginBehavior; @@ -582,7 +583,8 @@ public void registerSubItems() { // Filters: ID 290-300 FLUID_FILTER = addItem(290, "fluid_filter") - .setMaterialInfo(new ItemMaterialInfo(new MaterialStack(Materials.Zinc, M * 2))); + .setMaterialInfo(new ItemMaterialInfo(new MaterialStack(Materials.Zinc, M * 2))) + .addComponents(new SimpleFluidFilterUIManager()); ITEM_FILTER = addItem(291, "item_filter") .setMaterialInfo(new ItemMaterialInfo(new MaterialStack(Materials.Zinc, M * 2), new MaterialStack(Materials.Steel, M))) diff --git a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java new file mode 100644 index 00000000000..58e796a9cb1 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java @@ -0,0 +1,19 @@ +package gregtech.common.items.behaviors.filter; + +import com.cleanroommc.modularui.factory.HandGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.widgets.SlotGroupWidget; + +import gregtech.common.covers.filter.FilterTypeRegistry; + +public class SimpleFluidFilterUIManager extends BaseFilterUIManager { + + @Override + public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { + var filter = FilterTypeRegistry.getFluidFilterForStack(guiData.getUsedItemStack()); + return createBasePanel(filter.getContainerStack()).padding(4).height(166) + .child(filter.createWidgets(guiSyncManager).top(22).left(7)) + .child(SlotGroupWidget.playerInventory().left(7)); + } +} From 441708c6ec80814b74aebc512d880c05ca73b80a Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 14 Jan 2024 16:11:14 -0700 Subject: [PATCH 077/260] rename readers --- .../common/covers/filter/OreDictionaryItemFilter.java | 8 ++++---- .../common/covers/filter/SimpleItemFilter.java | 10 +++++----- .../gregtech/common/covers/filter/SmartItemFilter.java | 8 ++++---- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 2d7b1da12ea..356bb89b06a 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -49,10 +49,10 @@ public class OreDictionaryItemFilter extends ItemFilter { private OreGlob glob = ImpossibleOreGlob.getInstance(); private OreGlobCompileResult result; - private final OreDictionaryFilterReader filterReader; + private final OreDictionaryItemFilterReader filterReader; public OreDictionaryItemFilter(ItemStack stack) { - this.filterReader = new OreDictionaryFilterReader(stack, 0); + this.filterReader = new OreDictionaryItemFilterReader(stack, 0); setFilterReader(this.filterReader); recompile(); } @@ -402,13 +402,13 @@ public void readFromNBT(NBTTagCompound tag) { recompile(); } - protected class OreDictionaryFilterReader extends BaseFilterReader { + protected class OreDictionaryItemFilterReader extends BaseItemFilterReader { private static final String EXPRESSION = "expression"; private static final String CASE_SENSITIVE = "case_sensitive"; private static final String MATCH_ALL = "match_all"; - public OreDictionaryFilterReader(ItemStack container, int slots) { + public OreDictionaryItemFilterReader(ItemStack container, int slots) { super(container, slots); setCaseSensitive(true); setMatchAll(true); diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 845fe281079..08756504e6e 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -36,10 +36,10 @@ public class SimpleItemFilter extends ItemFilter { private static final int MAX_MATCH_SLOTS = 9; - private final SimpleFilterReader filterReader; + private final SimpleItemFilterReader filterReader; public SimpleItemFilter(ItemStack stack) { - this.filterReader = new SimpleFilterReader(stack, MAX_MATCH_SLOTS); + this.filterReader = new SimpleItemFilterReader(stack, MAX_MATCH_SLOTS); setFilterReader(this.filterReader); } @@ -110,7 +110,7 @@ public ParentWidget createWidgets(GuiSyncManager syncManager) { .tooltipBuilder(tooltip -> { int count = this.filterReader.getItemsNbt() .getCompoundTagAt(index) - .getInteger(SimpleFilterReader.COUNT); + .getInteger(SimpleItemFilterReader.COUNT); if (count > 64) tooltip.addLine(IKey.format("Count: %s", TextFormattingUtil.formatNumbers(count))); }) @@ -181,11 +181,11 @@ private boolean areItemsEqual(boolean ignoreDamage, boolean ignoreNBTData, ItemS return ignoreNBTData || ItemStack.areItemStackTagsEqual(filterStack, itemStack); } - protected class SimpleFilterReader extends BaseFilterReader { + protected class SimpleItemFilterReader extends BaseItemFilterReader { public static final String IGNORE_NBT = "ignore_nbt"; public static final String IGNORE_DAMAGE = "ignore_damage"; - public SimpleFilterReader(ItemStack container, int slots) { + public SimpleItemFilterReader(ItemStack container, int slots) { super(container, slots); setIgnoreDamage(true); setIgnoreNBT(true); diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 3f9490a8c4f..dce943f5647 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -31,10 +31,10 @@ import java.util.function.Consumer; public class SmartItemFilter extends ItemFilter { - private SmartFilterReader filterReader; + private SmartItemFilterReader filterReader; public SmartItemFilter(ItemStack stack) { - this.filterReader = new SmartFilterReader(stack); + this.filterReader = new SmartItemFilterReader(stack); setFilterReader(this.filterReader); } @@ -180,10 +180,10 @@ public String getName() { } } - protected class SmartFilterReader extends BaseFilterReader { + protected class SmartItemFilterReader extends BaseItemFilterReader { private static final String FILTER_MODE = "FilterMode"; - public SmartFilterReader(ItemStack container) { + public SmartItemFilterReader(ItemStack container) { super(container, 0); } From b0206c6693b1d66385551e4de36780d8ac52b690 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 14 Jan 2024 17:50:28 -0700 Subject: [PATCH 078/260] remove nbt write --- .../gregtech/common/covers/filter/FluidFilter.java | 2 -- .../common/covers/filter/SimpleFluidFilter.java | 14 -------------- 2 files changed, 16 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index cb247be8c9d..3498cf5717f 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -34,8 +34,6 @@ protected final void onMatch(boolean matched, FluidStack stack, int index) { @Deprecated public abstract void initUI(Consumer widgetGroup); - public abstract void writeToNBT(NBTTagCompound tagCompound); - public abstract ItemStack getContainerStack(); public abstract void readFromNBT(NBTTagCompound tagCompound); diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 57bb15be56b..90e92fd1c3a 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -137,20 +137,6 @@ private boolean shouldShowTip() { return showTip; } - public void writeToNBT(NBTTagCompound tagCompound) { -// NBTTagList filterSlots = new NBTTagList(); -// for (int i = 0; i < this.fluidFilterTanks.length; ++i) { -// FluidTank fluidTank = this.fluidFilterTanks[i]; -// if (fluidTank.getFluid() != null) { -// NBTTagCompound stackTag = new NBTTagCompound(); -// fluidTank.getFluid().writeToNBT(stackTag); -// stackTag.setInteger("Slot", i); -// filterSlots.appendTag(stackTag); -// } -// } -// tagCompound.setTag("FluidFilter", filterSlots); - } - public void readFromNBT(NBTTagCompound tagCompound) { // NBTTagList filterSlots = tagCompound.getTagList("FluidFilter", 10); // for (NBTBase nbtBase : filterSlots) { From 87e0ff1b7b726282fef58bd3432c3227a4478257 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 14 Jan 2024 17:51:22 -0700 Subject: [PATCH 079/260] fix fluid sync handler remove commented out code --- .../covers/filter/SimpleFluidFilter.java | 156 +++++++++++++----- 1 file changed, 118 insertions(+), 38 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 90e92fd1c3a..404c763c20e 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -1,12 +1,16 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.utils.MouseData; + import gregtech.api.gui.Widget; import gregtech.api.mui.GTGuis; import gregtech.common.covers.filter.readers.BaseFilterReader; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.PacketBuffer; import net.minecraftforge.common.util.Constants; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; @@ -19,6 +23,10 @@ import com.cleanroommc.modularui.widgets.FluidSlot; import com.cleanroommc.modularui.widgets.SlotGroupWidget; import com.cleanroommc.modularui.widgets.layout.Column; + +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -28,31 +36,15 @@ public class SimpleFluidFilter extends FluidFilter { private static final int MAX_FLUID_SLOTS = 9; -// protected final FluidTank[] fluidFilterTanks = new FluidTank[MAX_FLUID_SLOTS]; - private final SimpleFluidFilterReader filterReader; public SimpleFluidFilter(ItemStack stack) { this.filterReader = new SimpleFluidFilterReader(stack, MAX_FLUID_SLOTS); -// for (int i = 0; i < MAX_FLUID_SLOTS; ++i) { -// fluidFilterTanks[i] = new FluidTank(1000) { -// -// @Override -// public void setFluid(@Nullable FluidStack fluid) { -// super.setFluid(fluid); -// SimpleFluidFilter.this.markDirty(); -// } -// }; -// } } @Override public void configureFilterTanks(int amount) { this.filterReader.setFluidAmounts(amount); -// for (FluidTank fluidTank : fluidFilterTanks) { -// if (fluidTank.getFluid() != null) -// fluidTank.getFluid().amount = amount; -// } this.markDirty(); } @@ -61,9 +53,6 @@ public void setMaxConfigurableFluidSize(int maxSize) { for (int i = 0; i < filterReader.getSlots(); i++) { filterReader.getFluidTank(i).setCapacity(maxSize); } -// for (FluidTank fluidTank : fluidFilterTanks) { -// fluidTank.setCapacity(maxSize); -// } } @Override @@ -80,19 +69,25 @@ public ItemStack getContainerStack() { @Override public @NotNull ModularPanel createPanel(GuiSyncManager syncManager) { - return GTGuis.createPanel(this.filterReader.getContainer(), 100, 100); + return GTGuis.createPanel(getContainerStack(), 100, 100); } @Override public @NotNull ParentWidget createWidgets(GuiSyncManager syncManager) { + FluidSlotSyncHandler[] syncHandlers = new FluidSlotSyncHandler[MAX_FLUID_SLOTS]; + for (int i = 0; i < syncHandlers.length; i++) { + var tank = this.filterReader.getFluidTank(i); + syncHandlers[i] = new FixedFluidSlotSH(tank).phantom(true); + syncHandlers[i].setValue(tank.getFluid(), false, false); + } + return new Column().coverChildrenHeight().widthRel(1f) .child(SlotGroupWidget.builder() .matrix("FFF", "FFF", "FFF") .key('F', i -> new FluidSlot() - .syncHandler(new FluidSlotSyncHandler(this.filterReader.getFluidTank(i)) - .phantom(true))) + .syncHandler(syncHandlers[i])) .build()); } @@ -109,14 +104,6 @@ public void match(FluidStack toMatch) { } } this.onMatch(matched, toMatch.copy(), index); -// for (int i = 0; i < fluidFilterTanks.length; i++) { -// FluidTank fluidTank = fluidFilterTanks[i]; -// if (fluidTank.getFluid() != null && fluidTank.getFluid().isFluidEqual(toMatch)) { -// matched = true; -// index = i; -// break; -// } -// } } @Override @@ -166,15 +153,9 @@ public int getFluidTransferLimit(FluidStack fluidStack) { limit = fluid.amount; } } -// for (FluidTank fluidTank : fluidFilterTanks) { -// if (fluidTank.getFluid() != null && fluidTank.getFluid().isFluidEqual(fluidStack)) { -// limit = fluidTank.getFluid().amount; -// break; -// } -// } return limit; } - protected class SimpleFluidFilterReader extends BaseFilterReader { + protected static class SimpleFluidFilterReader extends BaseFilterReader { protected static final String KEY_FLUIDS = "FluidTank"; public SimpleFluidFilterReader(ItemStack container, int slots) { @@ -214,7 +195,7 @@ public void setFluidAmounts(int amount) { } } - protected class WritableFluidTank implements IFluidTank { + protected static class WritableFluidTank implements IFluidTank { private final NBTTagCompound fluidTank; protected static final String FLUID_AMOUNT = "Amount"; @@ -307,4 +288,103 @@ public FluidStack drain(int maxDrain, boolean doDrain) { return fluid; } } + + public class FixedFluidSlotSH extends FluidSlotSyncHandler { + @Nullable + private FluidStack lastStoredPhantomFluid; + + public FixedFluidSlotSH(IFluidTank fluidTank) { + super(fluidTank); + } + + @Override + public void readOnServer(int id, PacketBuffer buf) { + super.readOnServer(id, buf); + if (id == 0) { + var fluid = getFluidTank().getFluid(); + if (this.lastStoredPhantomFluid == null && fluid != null || + (this.lastStoredPhantomFluid != null && !this.lastStoredPhantomFluid.isFluidEqual(fluid))) { + this.lastStoredPhantomFluid = fluid; + } + } + } + + @Override + public void tryClickPhantom(MouseData mouseData) { + EntityPlayer player = getSyncManager().getPlayer(); + ItemStack currentStack = player.inventory.getItemStack(); + FluidStack currentFluid = this.getFluidTank().getFluid(); + IFluidHandlerItem fluidHandlerItem = currentStack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); + + if (mouseData.mouseButton == 0) { + if (currentStack.isEmpty() || fluidHandlerItem == null) { + if (this.canDrainSlot()) { + this.getFluidTank().drain(mouseData.shift ? Integer.MAX_VALUE : 1000, true); + } + } else { + FluidStack cellFluid = fluidHandlerItem.drain(Integer.MAX_VALUE, false); + if ((this.controlsAmount() || currentFluid == null) && cellFluid != null) { + if (this.canFillSlot()) { + if (!this.controlsAmount()) { + cellFluid.amount = 1; + } + if (this.getFluidTank().fill(cellFluid, true) > 0) { + this.lastStoredPhantomFluid = cellFluid.copy(); + } + } + } else { + if (this.canDrainSlot()) { + this.getFluidTank().drain(mouseData.shift ? Integer.MAX_VALUE : 1000, true); + } + } + } + } else if (mouseData.mouseButton == 1) { + if (this.canFillSlot()) { + if (currentFluid != null) { + if (this.controlsAmount()) { + FluidStack toFill = currentFluid.copy(); + toFill.amount = 1000; + this.getFluidTank().fill(toFill, true); + } + } else if (this.lastStoredPhantomFluid != null) { + FluidStack toFill = this.lastStoredPhantomFluid.copy(); + toFill.amount = this.controlsAmount() ? 1000 : 1; + this.getFluidTank().fill(toFill, true); + } + } + } else if (mouseData.mouseButton == 2 && currentFluid != null && this.canDrainSlot()) { + this.getFluidTank().drain(mouseData.shift ? Integer.MAX_VALUE : 1000, true); + } + } + + @Override + public void tryScrollPhantom(MouseData mouseData) { + FluidStack currentFluid = this.getFluidTank().getFluid(); + int amount = mouseData.mouseButton; + if (mouseData.shift) { + amount *= 10; + } + if (mouseData.ctrl) { + amount *= 100; + } + if (mouseData.alt) { + amount *= 1000; + } + if (currentFluid == null) { + if (amount > 0 && this.lastStoredPhantomFluid != null) { + FluidStack toFill = this.lastStoredPhantomFluid.copy(); + toFill.amount = this.controlsAmount() ? amount : 1; + this.getFluidTank().fill(toFill, true); + } + return; + } + if (amount > 0 && this.controlsAmount()) { + FluidStack toFill = currentFluid.copy(); + toFill.amount = amount; + this.getFluidTank().fill(toFill, true); + } else if (amount < 0) { + this.getFluidTank().drain(-amount, true); + } + } + } } From 049fcc6d757562c81d1fccf5771c5733fc8e960e Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 14 Jan 2024 17:51:41 -0700 Subject: [PATCH 080/260] temporarily comment out nbt read/write --- .../covers/filter/FluidFilterContainer.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 41beb67b6d6..0122c9d1b49 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -109,11 +109,11 @@ public NBTTagCompound serializeNBT() { NBTTagCompound tagCompound = new NBTTagCompound(); tagCompound.setTag("FilterInventory", filterInventory.serializeNBT()); tagCompound.setBoolean("IsBlacklist", filterWrapper.isBlacklistFilter()); - if (filterWrapper.getFluidFilter() != null) { - NBTTagCompound filterInventory = new NBTTagCompound(); - filterWrapper.getFluidFilter().writeToNBT(filterInventory); - tagCompound.setTag("Filter", filterInventory); - } +// if (filterWrapper.getFluidFilter() != null) { +// NBTTagCompound filterInventory = new NBTTagCompound(); +// filterWrapper.getFluidFilter().writeToNBT(filterInventory); +// tagCompound.setTag("Filter", filterInventory); +// } return tagCompound; } @@ -121,8 +121,8 @@ public NBTTagCompound serializeNBT() { public void deserializeNBT(NBTTagCompound tagCompound) { this.filterInventory.deserializeNBT(tagCompound.getCompoundTag("FilterInventory")); this.filterWrapper.setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); - if (filterWrapper.getFluidFilter() != null) { - this.filterWrapper.getFluidFilter().readFromNBT(tagCompound.getCompoundTag("Filter")); - } +// if (filterWrapper.getFluidFilter() != null) { +// this.filterWrapper.getFluidFilter().readFromNBT(tagCompound.getCompoundTag("Filter")); +// } } } From b266a809c0ca8fc78abb30f7090257d4da7ce339 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 14 Jan 2024 19:01:23 -0700 Subject: [PATCH 081/260] implement ui for fluid filter as cover, item --- .../api/gui/widgets/PhantomFluidWidget.java | 12 +- .../covers/CoverFluidVoidingAdvanced.java | 4 +- .../common/covers/filter/FluidFilter.java | 4 + .../covers/filter/FluidFilterContainer.java | 132 +++++++++++++----- .../covers/filter/FluidFilterWrapper.java | 78 +---------- .../covers/filter/SimpleFluidFilter.java | 29 ++-- .../provider/CoverInfoProvider.java | 2 +- 7 files changed, 137 insertions(+), 124 deletions(-) diff --git a/src/main/java/gregtech/api/gui/widgets/PhantomFluidWidget.java b/src/main/java/gregtech/api/gui/widgets/PhantomFluidWidget.java index f6d3f4857f7..6ed404a3ebe 100644 --- a/src/main/java/gregtech/api/gui/widgets/PhantomFluidWidget.java +++ b/src/main/java/gregtech/api/gui/widgets/PhantomFluidWidget.java @@ -6,9 +6,14 @@ import gregtech.api.gui.ingredient.IGhostIngredientTarget; import gregtech.api.gui.ingredient.IIngredientSlot; import gregtech.api.gui.resources.IGuiTexture; -import gregtech.api.util.*; +import gregtech.api.util.GTLog; +import gregtech.api.util.LocalizationUtils; +import gregtech.api.util.Position; +import gregtech.api.util.Size; +import gregtech.api.util.TextFormattingUtil; import gregtech.client.utils.RenderUtil; import gregtech.client.utils.TooltipHelper; +import gregtech.common.covers.filter.SimpleFluidFilter; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; @@ -18,7 +23,6 @@ import net.minecraft.network.PacketBuffer; import net.minecraft.util.math.MathHelper; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandlerItem; @@ -38,7 +42,7 @@ public class PhantomFluidWidget extends Widget implements IIngredientSlot, IGhostIngredientTarget { - private FluidTank fluidTank = null; + private SimpleFluidFilter.WritableFluidTank fluidTank = null; protected IGuiTexture backgroundTexture = GuiTextures.FLUID_SLOT; private Supplier fluidStackSupplier; @@ -55,7 +59,7 @@ public PhantomFluidWidget(int xPosition, int yPosition, int width, int height, this.fluidStackUpdater = fluidStackUpdater; } - public PhantomFluidWidget(int xPosition, int yPosition, int width, int height, FluidTank fluidTank) { + public PhantomFluidWidget(int xPosition, int yPosition, int width, int height, SimpleFluidFilter.WritableFluidTank fluidTank) { super(new Position(xPosition, yPosition), new Size(width, height)); this.fluidTank = fluidTank; this.fluidStackSupplier = fluidTank::getFluid; diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index 4d2290aa13b..38789b7f25b 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -204,8 +204,8 @@ public void initFilterUI(int y, Consumer widgetGroup) { widgetGroup.accept(stackSizeGroup); - this.fluidFilter.getFilterWrapper().initUI(y + 15, widgetGroup); - this.fluidFilter.getFilterWrapper().blacklistUI(y + 15, widgetGroup, + this.fluidFilter.initUI(y + 15, widgetGroup); + this.fluidFilter.blacklistUI(y + 15, widgetGroup, () -> voidingMode != VoidingMode.VOID_OVERFLOW); } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index 3498cf5717f..e453d75fea5 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -46,6 +46,10 @@ public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { public abstract void setMaxConfigurableFluidSize(int maxStackSize); + public abstract boolean isBlacklist(); + + public abstract void setBlacklistFilter(boolean blacklist); + public final void markDirty() { if (dirtyNotifiable != null) { dirtyNotifiable.markAsDirty(); diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 0122c9d1b49..bba51db1bc0 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -3,7 +3,9 @@ import gregtech.api.gui.GuiTextures; import gregtech.api.gui.Widget; import gregtech.api.gui.widgets.LabelWidget; +import gregtech.api.gui.widgets.ServerWidgetGroup; import gregtech.api.gui.widgets.SlotWidget; +import gregtech.api.gui.widgets.ToggleButtonWidget; import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; @@ -14,6 +16,7 @@ import org.jetbrains.annotations.NotNull; +import java.util.function.BooleanSupplier; import java.util.function.Consumer; import java.util.function.Supplier; @@ -22,13 +25,18 @@ public class FluidFilterContainer implements INBTSerializable { private final ItemStackHandler filterInventory; private final FluidFilterWrapper filterWrapper; + private final IDirtyNotifiable dirtyNotifiable; + private FluidFilter currentFluidFilter; + private Supplier showTipSupplier; + private int maxSize; + public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable, int capacity) { - this.filterWrapper = new FluidFilterWrapper(dirtyNotifiable, capacity); + this.filterWrapper = new FluidFilterWrapper(this); // for compat this.filterInventory = new ItemStackHandler(1) { @Override public boolean isItemValid(int slot, @NotNull ItemStack stack) { - return FilterTypeRegistry.getFluidFilterForStack(stack) != null; + return FilterTypeRegistry.isFluidFilter(stack); } @Override @@ -46,21 +54,47 @@ protected void onContentsChanged(int slot) { onFilterSlotChange(true); } }; + this.maxSize = capacity; + this.dirtyNotifiable = dirtyNotifiable; } public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable, Supplier showTip, int maxSize) { this(dirtyNotifiable, maxSize); - filterWrapper.setTipSupplier(showTip); + setTipSupplier(showTip); } public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable, Supplier showTip) { this(dirtyNotifiable, 1000); - filterWrapper.setTipSupplier(showTip); + setTipSupplier(showTip); } public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable) { this(dirtyNotifiable, 1000); - filterWrapper.setTipSupplier(() -> false); + setTipSupplier(() -> false); + } + + public void setFluidFilter(FluidFilter fluidFilter) { + this.currentFluidFilter = fluidFilter; + if (hasFluidFilter()) { + currentFluidFilter.setDirtyNotifiable(dirtyNotifiable); + currentFluidFilter.setMaxConfigurableFluidSize(maxSize); + } + } + + private Supplier shouldShowTip() { + return showTipSupplier; + } + + protected void setTipSupplier(Supplier supplier) { + this.showTipSupplier = supplier; + } + + public FluidFilter getFluidFilter() { + return currentFluidFilter; + } + + public void onFilterInstanceChange() { + dirtyNotifiable.markAsDirty(); } public ItemStackHandler getFilterInventory() { @@ -71,47 +105,81 @@ public FluidFilterWrapper getFilterWrapper() { return filterWrapper; } + public boolean testFluidStack(FluidStack fluidStack) { + return testFluidStack(fluidStack, !isBlacklistFilter()); + } + + public boolean testFluidStack(FluidStack fluidStack, boolean whitelist) { + boolean result = true; + if (hasFluidFilter()) { + result = currentFluidFilter.test(fluidStack); + if (!whitelist) { + result = !result; + } + } + return result; + } + public void initUI(int y, Consumer widgetGroup) { widgetGroup.accept(new LabelWidget(10, y, "cover.pump.fluid_filter.title")); widgetGroup.accept(new SlotWidget(filterInventory, 0, 10, y + 15) .setBackgroundTexture(GuiTextures.SLOT, GuiTextures.FILTER_SLOT_OVERLAY)); - this.filterWrapper.initUI(y + 15, widgetGroup); - this.filterWrapper.blacklistUI(y + 15, widgetGroup, () -> true); + this.initFilterUI(y + 15, widgetGroup); + this.blacklistUI(y + 15, widgetGroup, () -> true); } - protected void onFilterSlotChange(boolean notify) { - ItemStack filterStack = filterInventory.getStackInSlot(0); - FluidFilter newFluidFilter = FilterTypeRegistry.getFluidFilterForStack(filterStack); - FluidFilter currentFluidFilter = filterWrapper.getFluidFilter(); - if (newFluidFilter == null) { - if (currentFluidFilter != null) { - filterWrapper.setFluidFilter(null); - if (notify) filterWrapper.onFilterInstanceChange(); - } - } else if (currentFluidFilter == null || - newFluidFilter.getClass() != currentFluidFilter.getClass()) { - filterWrapper.setFluidFilter(newFluidFilter); - if (notify) filterWrapper.onFilterInstanceChange(); - } + public void initFilterUI(int y, Consumer widgetGroup) { + widgetGroup.accept(new WidgetGroupFluidFilter(y, this::getFluidFilter, shouldShowTip())); } - public boolean testFluidStack(FluidStack fluidStack) { - return filterWrapper.testFluidStack(fluidStack); + public void blacklistUI(int y, Consumer widgetGroup, BooleanSupplier showBlacklistButton) { + ServerWidgetGroup blacklistButton = new ServerWidgetGroup(this::hasFluidFilter); + blacklistButton.addWidget(new ToggleButtonWidget(144, y, 18, 18, GuiTextures.BUTTON_BLACKLIST, + this::isBlacklistFilter, this::setBlacklistFilter).setPredicate(showBlacklistButton) + .setTooltipText("cover.filter.blacklist")); + widgetGroup.accept(blacklistButton); + } + + public boolean hasFluidFilter() { + return currentFluidFilter != null; } - public boolean testFluidStack(FluidStack fluidStack, Boolean whitelist) { - return filterWrapper.testFluidStack(fluidStack, whitelist); + public void setBlacklistFilter(boolean blacklistFilter) { + if (hasFluidFilter()) getFluidFilter().setBlacklistFilter(blacklistFilter); + } + + public boolean isBlacklistFilter() { + return hasFluidFilter() && getFluidFilter().isBlacklist(); + } + + protected void onFilterSlotChange(boolean notify) { + ItemStack filterStack = filterInventory.getStackInSlot(0); + int newId = FilterTypeRegistry.getFilterIdForStack(filterStack); + int currentId = FilterTypeRegistry.getIdForFilter(getFluidFilter()); + + if (!FilterTypeRegistry.isFluidFilter(filterStack)) { + if (hasFluidFilter()) { + setFluidFilter(null); + setBlacklistFilter(false); + if (notify) + onFilterInstanceChange(); + } + } else if (currentId == -1 || newId != currentId) { + setFluidFilter(FilterTypeRegistry.getFluidFilterForStack(filterStack)); + if (notify) + onFilterInstanceChange(); + } } @Override public NBTTagCompound serializeNBT() { NBTTagCompound tagCompound = new NBTTagCompound(); tagCompound.setTag("FilterInventory", filterInventory.serializeNBT()); - tagCompound.setBoolean("IsBlacklist", filterWrapper.isBlacklistFilter()); -// if (filterWrapper.getFluidFilter() != null) { +// tagCompound.setBoolean("IsBlacklist", getFluidFilter().isBlacklistFilter()); +// if (getFluidFilter() != null) { // NBTTagCompound filterInventory = new NBTTagCompound(); -// filterWrapper.getFluidFilter().writeToNBT(filterInventory); +// getFluidFilter().writeToNBT(filterInventory); // tagCompound.setTag("Filter", filterInventory); // } return tagCompound; @@ -120,9 +188,9 @@ public NBTTagCompound serializeNBT() { @Override public void deserializeNBT(NBTTagCompound tagCompound) { this.filterInventory.deserializeNBT(tagCompound.getCompoundTag("FilterInventory")); - this.filterWrapper.setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); -// if (filterWrapper.getFluidFilter() != null) { -// this.filterWrapper.getFluidFilter().readFromNBT(tagCompound.getCompoundTag("Filter")); -// } + this.setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); + if (getFluidFilter() != null) { + this.getFluidFilter().readFromNBT(tagCompound.getCompoundTag("Filter")); + } } } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java b/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java index 19f4dbc68b3..a51fceeb3f1 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java @@ -14,85 +14,17 @@ public class FluidFilterWrapper { - private final IDirtyNotifiable dirtyNotifiable; - private boolean isBlacklistFilter = false; - private FluidFilter currentFluidFilter; - private Supplier showTipSupplier; - private int maxSize = 1000; + FluidFilterContainer container; - public FluidFilterWrapper(IDirtyNotifiable dirtyNotifiable, int maxSize) { - this.dirtyNotifiable = dirtyNotifiable; - this.maxSize = maxSize; - } - - public FluidFilterWrapper(IDirtyNotifiable dirtyNotifiable) { - this.dirtyNotifiable = dirtyNotifiable; - } - - public void initUI(int y, Consumer widgetGroup) { - widgetGroup.accept(new WidgetGroupFluidFilter(y, this::getFluidFilter, shouldShowTip())); - } - - public void blacklistUI(int y, Consumer widgetGroup, BooleanSupplier showBlacklistButton) { - ServerWidgetGroup blacklistButton = new ServerWidgetGroup(() -> getFluidFilter() != null); - blacklistButton.addWidget(new ToggleButtonWidget(144, y, 18, 18, GuiTextures.BUTTON_BLACKLIST, - this::isBlacklistFilter, this::setBlacklistFilter).setPredicate(showBlacklistButton) - .setTooltipText("cover.filter.blacklist")); - widgetGroup.accept(blacklistButton); + public FluidFilterWrapper(FluidFilterContainer container) { + this.container = container; } public void setFluidFilter(FluidFilter fluidFilter) { - this.currentFluidFilter = fluidFilter; - if (currentFluidFilter != null) { - currentFluidFilter.setDirtyNotifiable(dirtyNotifiable); - currentFluidFilter.setMaxConfigurableFluidSize(maxSize); - } - } - - private Supplier shouldShowTip() { - return showTipSupplier; - } - - protected void setTipSupplier(Supplier supplier) { - this.showTipSupplier = supplier; + this.container.setFluidFilter(fluidFilter); } public FluidFilter getFluidFilter() { - return currentFluidFilter; - } - - public void onFilterInstanceChange() { - dirtyNotifiable.markAsDirty(); - } - - public void setBlacklistFilter(boolean blacklistFilter) { - isBlacklistFilter = blacklistFilter; - dirtyNotifiable.markAsDirty(); - } - - public boolean isBlacklistFilter() { - return isBlacklistFilter; - } - - public boolean testFluidStack(FluidStack fluidStack, boolean whitelist) { - boolean result = true; - if (currentFluidFilter != null) { - result = currentFluidFilter.test(fluidStack); - } - if (!whitelist) { - result = !result; - } - return result; - } - - public boolean testFluidStack(FluidStack fluidStack) { - boolean result = true; - if (currentFluidFilter != null) { - result = currentFluidFilter.test(fluidStack); - } - if (isBlacklistFilter) { - result = !result; - } - return result; + return container.getFluidFilter(); } } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 404c763c20e..c56124cb3f6 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -1,7 +1,5 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.utils.MouseData; - import gregtech.api.gui.Widget; import gregtech.api.mui.GTGuis; import gregtech.common.covers.filter.readers.BaseFilterReader; @@ -15,18 +13,17 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidTank; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.MouseData; import com.cleanroommc.modularui.value.sync.FluidSlotSyncHandler; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widgets.FluidSlot; import com.cleanroommc.modularui.widgets.SlotGroupWidget; import com.cleanroommc.modularui.widgets.layout.Column; - -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandlerItem; - import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -55,6 +52,14 @@ public void setMaxConfigurableFluidSize(int maxSize) { } } + public boolean isBlacklist() { + return this.filterReader.isBlacklistFilter(); + } + + public void setBlacklistFilter(boolean blacklist) { + this.filterReader.setBlacklistFilter(blacklist); + } + @Override public ItemStack getContainerStack() { return this.filterReader.getContainer(); @@ -113,11 +118,11 @@ public boolean test(FluidStack fluidStack) { @Override public void initUI(Consumer widgetGroup) { -// for (int i = 0; i < 9; ++i) { -// widgetGroup.accept((new PhantomFluidWidget(10 + 18 * (i % 3), 18 * (i / 3), 18, 18, -// this.fluidFilterTanks[i])) -// .setBackgroundTexture(GuiTextures.SLOT).showTipSupplier(this::shouldShowTip)); -// } + for (int i = 0; i < 9; ++i) { + widgetGroup.accept((new gregtech.api.gui.widgets.PhantomFluidWidget(10 + 18 * (i % 3), 18 * (i / 3), 18, 18, + filterReader.getFluidTank(i)::getFluid, filterReader.getFluidTank(i)::setFluid)) + .setBackgroundTexture(gregtech.api.gui.GuiTextures.SLOT).showTipSupplier(this::shouldShowTip)); + } } private boolean shouldShowTip() { @@ -195,7 +200,7 @@ public void setFluidAmounts(int amount) { } } - protected static class WritableFluidTank implements IFluidTank { + public static class WritableFluidTank implements IFluidTank { private final NBTTagCompound fluidTank; protected static final String FLUID_AMOUNT = "Amount"; diff --git a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java index 51d340950d7..14264ddb209 100644 --- a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java +++ b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java @@ -158,7 +158,7 @@ private static void itemFilterInfo(@NotNull IProbeInfo probeInfo, @NotNull Cover */ private static void fluidFilterInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverFluidFilter fluidFilter) { filterModeText(probeInfo, fluidFilter.getFilterMode()); - fluidFilterText(probeInfo, fluidFilter.getFluidFilter().getFluidFilter()); + fluidFilterText(probeInfo, fluidFilter.getFluidFilterContainer().getFluidFilter()); } /** From 46da40a31101a8a343827188397e9f43295b0ce6 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 14 Jan 2024 19:01:36 -0700 Subject: [PATCH 082/260] forgor --- .../common/covers/CoverFluidFilter.java | 65 ++++++++++++------- .../gregtech/common/covers/CoverPump.java | 16 +++++ 2 files changed, 59 insertions(+), 22 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index d686aaae9db..0f885bac8f1 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -1,5 +1,9 @@ package gregtech.common.covers; +import com.cleanroommc.modularui.factory.SidedPosGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; + import gregtech.api.capability.impl.FluidHandlerDelegate; import gregtech.api.cover.CoverBase; import gregtech.api.cover.CoverDefinition; @@ -10,10 +14,11 @@ import gregtech.api.gui.widgets.CycleButtonWidget; import gregtech.api.gui.widgets.LabelWidget; import gregtech.api.gui.widgets.WidgetGroup; +import gregtech.api.mui.GTGuis; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; import gregtech.common.covers.filter.FilterTypeRegistry; -import gregtech.common.covers.filter.FluidFilterWrapper; +import gregtech.common.covers.filter.FluidFilterContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -35,18 +40,23 @@ import codechicken.lib.vec.Matrix4; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; + +import java.util.Collections; +import java.util.List; public class CoverFluidFilter extends CoverBase implements CoverWithUI { protected final String titleLocale; protected final SimpleOverlayRenderer texture; - protected FluidFilterWrapper fluidFilter; + protected final FluidFilterContainer fluidFilterContainer; protected FluidFilterMode filterMode; protected FluidHandlerFiltered fluidHandler; public CoverFluidFilter(@NotNull CoverDefinition definition, @NotNull CoverableView coverableView, @NotNull EnumFacing attachedSide, String titleLocale, SimpleOverlayRenderer texture) { super(definition, coverableView, attachedSide); + this.fluidFilterContainer = new FluidFilterContainer(this); this.filterMode = FluidFilterMode.FILTER_FILL; this.titleLocale = titleLocale; this.texture = texture; @@ -61,21 +71,15 @@ public void setFilterMode(FluidFilterMode filterMode) { public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFacing side, @Nullable EntityPlayer player, @NotNull ItemStack itemStack) { super.onAttachment(coverableView, side, player, itemStack); - - this.fluidFilter = new FluidFilterWrapper(this); - this.fluidFilter.setFluidFilter(FilterTypeRegistry.getFluidFilterForStack(itemStack)); + this.fluidFilterContainer.setFluidFilter(FilterTypeRegistry.getFluidFilterForStack(itemStack)); } public FluidFilterMode getFilterMode() { return filterMode; } - public FluidFilterWrapper getFluidFilter() { - return this.fluidFilter; - } - - public boolean testFluidStack(FluidStack stack) { - return fluidFilter.testFluidStack(stack); + public FluidFilterContainer getFluidFilterContainer() { + return this.fluidFilterContainer; } @Override @@ -102,14 +106,31 @@ public ModularUI createUI(EntityPlayer player) { fluidFilterGroup.addWidget(new CycleButtonWidget(10, 20, 110, 20, GTUtility.mapToString(FluidFilterMode.values(), (it) -> it.localeName), () -> this.filterMode.ordinal(), (newMode) -> this.setFilterMode(FluidFilterMode.values()[newMode]))); - this.fluidFilter.initUI(45, fluidFilterGroup::addWidget); - this.fluidFilter.blacklistUI(45, fluidFilterGroup::addWidget, () -> true); + this.fluidFilterContainer.initUI(45, fluidFilterGroup::addWidget); + this.fluidFilterContainer.blacklistUI(45, fluidFilterGroup::addWidget, () -> true); return ModularUI.builder(GuiTextures.BACKGROUND, 176, 105 + 82) .widget(fluidFilterGroup) .bindPlayerInventory(player.inventory, GuiTextures.SLOT, 7, 105) .build(this, player); } + @Override + public boolean usesMui2() { + return true; + } + + @Override + public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { + return GTGuis.createPanel(this, 100, 100) + .child(getFluidFilterContainer().getFluidFilter().createWidgets(guiSyncManager)) + .bindPlayerInventory(); + } + + @Override + public @NotNull @Unmodifiable List<@NotNull ItemStack> getDrops() { + return Collections.singletonList(this.fluidFilterContainer.getFluidFilter().getContainerStack()); + } + @Override public void renderCover(@NotNull CCRenderState renderState, @NotNull Matrix4 translation, IVertexOperation[] pipeline, @NotNull Cuboid6 plateBox, @NotNull BlockRenderLayer layer) { @@ -134,18 +155,18 @@ public T getCapability(@NotNull Capability capability, @Nullable T defaul public void writeToNBT(@NotNull NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); tagCompound.setInteger("FilterMode", this.filterMode.ordinal()); - tagCompound.setBoolean("IsBlacklist", this.fluidFilter.isBlacklistFilter()); - NBTTagCompound filterComponent = new NBTTagCompound(); - this.fluidFilter.getFluidFilter().writeToNBT(filterComponent); - tagCompound.setTag("Filter", filterComponent); +// tagCompound.setBoolean("IsBlacklist", this.fluidFilter.isBlacklistFilter()); +// NBTTagCompound filterComponent = new NBTTagCompound(); +// this.fluidFilter.getFluidFilter().writeToNBT(filterComponent); +// tagCompound.setTag("Filter", filterComponent); } @Override public void readFromNBT(@NotNull NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); this.filterMode = FluidFilterMode.values()[tagCompound.getInteger("FilterMode")]; - this.fluidFilter.setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); - this.fluidFilter.getFluidFilter().readFromNBT(tagCompound.getCompoundTag("Filter")); + this.fluidFilterContainer.setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); + this.fluidFilterContainer.getFluidFilter().readFromNBT(tagCompound.getCompoundTag("Filter")); } private class FluidHandlerFiltered extends FluidHandlerDelegate { @@ -155,7 +176,7 @@ public FluidHandlerFiltered(@NotNull IFluidHandler delegate) { } public int fill(FluidStack resource, boolean doFill) { - if (getFilterMode() == FluidFilterMode.FILTER_DRAIN || !fluidFilter.testFluidStack(resource)) { + if (getFilterMode() == FluidFilterMode.FILTER_DRAIN || !fluidFilterContainer.testFluidStack(resource)) { return 0; } return super.fill(resource, doFill); @@ -163,7 +184,7 @@ public int fill(FluidStack resource, boolean doFill) { @Nullable public FluidStack drain(FluidStack resource, boolean doDrain) { - if (getFilterMode() == FluidFilterMode.FILTER_FILL || !fluidFilter.testFluidStack(resource)) { + if (getFilterMode() == FluidFilterMode.FILTER_FILL || !fluidFilterContainer.testFluidStack(resource)) { return null; } return super.drain(resource, doDrain); @@ -173,7 +194,7 @@ public FluidStack drain(FluidStack resource, boolean doDrain) { public FluidStack drain(int maxDrain, boolean doDrain) { if (getFilterMode() != FluidFilterMode.FILTER_FILL) { FluidStack result = super.drain(maxDrain, false); - if (result == null || result.amount <= 0 || !fluidFilter.testFluidStack(result)) { + if (result == null || result.amount <= 0 || !fluidFilterContainer.testFluidStack(result)) { return null; } return doDrain ? super.drain(maxDrain, true) : result; diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 961e349be6b..dd18b5cbf49 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -1,5 +1,9 @@ package gregtech.common.covers; +import com.cleanroommc.modularui.factory.SidedPosGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; + import gregtech.api.GTValues; import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; @@ -17,6 +21,7 @@ import gregtech.api.gui.widgets.LabelWidget; import gregtech.api.gui.widgets.TextFieldWidget2; import gregtech.api.gui.widgets.WidgetGroup; +import gregtech.api.mui.GTGuis; import gregtech.api.util.GTTransferUtils; import gregtech.client.renderer.texture.Textures; import gregtech.client.renderer.texture.cube.SimpleSidedCubeRenderer; @@ -230,6 +235,17 @@ public ModularUI createUI(EntityPlayer player) { return buildUI(builder, player); } + @Override + public boolean usesMui2() { + return true; + } + + @Override + public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { + return GTGuis.createPanel(this, 100, 100) + .child(CoverWithUI.createTitleRow(getPickItem())); + } + public static Function getTextFieldValidator(IntSupplier maxSupplier) { int min = 1; return val -> { From 5ad3e4cbbef28b4b7b688857492c9051ae449967 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 14 Jan 2024 19:36:26 -0700 Subject: [PATCH 083/260] change return to widget --- .../gregtech/common/covers/filter/Filter.java | 4 +++- .../common/covers/filter/ItemFilter.java | 16 +++++++++++++++- .../covers/filter/OreDictionaryItemFilter.java | 4 +--- .../common/covers/filter/SimpleFluidFilter.java | 11 ++++++++--- .../common/covers/filter/SimpleItemFilter.java | 12 +++--------- .../common/covers/filter/SmartItemFilter.java | 4 +--- 6 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/Filter.java b/src/main/java/gregtech/common/covers/filter/Filter.java index 7403a65ba78..edbb458eaa7 100644 --- a/src/main/java/gregtech/common/covers/filter/Filter.java +++ b/src/main/java/gregtech/common/covers/filter/Filter.java @@ -4,6 +4,8 @@ import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widget.Widget; + import gregtech.api.util.IDirtyNotifiable; import org.jetbrains.annotations.NotNull; @@ -18,7 +20,7 @@ public interface Filter { /** Uses Cleanroom MUI - Creates the widgets standalone so that they can be put into their own panel */ - @NotNull ParentWidget createWidgets(GuiSyncManager syncManager); + @NotNull Widget createWidgets(GuiSyncManager syncManager); void match(T toMatch); diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index cd2d58fd621..ae5ae3f4c27 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -1,5 +1,11 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.value.sync.BooleanSyncValue; +import com.cleanroommc.modularui.widget.Widget; +import com.cleanroommc.modularui.widgets.CycleButtonWidget; + +import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.IDirtyNotifiable; import gregtech.common.covers.filter.readers.BaseFilterReader; @@ -82,7 +88,15 @@ public int getStackTransferLimit(ItemStack stack, int globalTransferLimit) { /** Uses Cleanroom MUI - Creates the widgets standalone so that they can be put into their own panel */ - public abstract @NotNull ParentWidget createWidgets(GuiSyncManager syncManager); + public @NotNull Widget createWidgets(GuiSyncManager syncManager) { + var blacklist = new BooleanSyncValue(this.filterReader::isBlacklistFilter, this.filterReader::setBlacklistFilter); + return new ParentWidget<>().coverChildren() + .child(new CycleButtonWidget() + .value(blacklist) + .textureGetter(state -> GTGuiTextures.BUTTON_BLACKLIST[state]) + .addTooltip(0, IKey.lang("cover.filter.blacklist.disabled")) + .addTooltip(1, IKey.lang("cover.filter.blacklist.enabled"))); + } @Deprecated public void readFromNBT(NBTTagCompound tagCompound) { diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 356bb89b06a..e869b3ddf53 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -26,7 +26,6 @@ import com.cleanroommc.modularui.value.sync.BooleanSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.StringSyncValue; -import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.SlotGroupWidget; import com.cleanroommc.modularui.widgets.ToggleButton; @@ -182,8 +181,7 @@ public void initUI(Consumer widgetGroup) { } @Override - @NotNull - public ParentWidget createWidgets(GuiSyncManager syncManager) { + public @NotNull Widget createWidgets(GuiSyncManager syncManager) { var expression = new StringSyncValue(this.filterReader::getExpression, this.filterReader::setExpression); var caseSensitive = new BooleanSyncValue(this.filterReader::isCaseSensitive, this.filterReader::setCaseSensitive); var matchAll = new BooleanSyncValue(this.filterReader::shouldMatchAll, this.filterReader::setMatchAll); diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index c56124cb3f6..9eae6a62d1a 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -1,6 +1,12 @@ package gregtech.common.covers.filter; -import gregtech.api.gui.Widget; +import com.cleanroommc.modularui.api.drawable.IKey; +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.Row; + +import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.common.covers.filter.readers.BaseFilterReader; @@ -20,7 +26,6 @@ import com.cleanroommc.modularui.utils.MouseData; import com.cleanroommc.modularui.value.sync.FluidSlotSyncHandler; import com.cleanroommc.modularui.value.sync.GuiSyncManager; -import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widgets.FluidSlot; import com.cleanroommc.modularui.widgets.SlotGroupWidget; import com.cleanroommc.modularui.widgets.layout.Column; @@ -117,7 +122,7 @@ public boolean test(FluidStack fluidStack) { } @Override - public void initUI(Consumer widgetGroup) { + public void initUI(Consumer widgetGroup) { for (int i = 0; i < 9; ++i) { widgetGroup.accept((new gregtech.api.gui.widgets.PhantomFluidWidget(10 + 18 * (i % 3), 18 * (i / 3), 18, 18, filterReader.getFluidTank(i)::getFluid, filterReader.getFluidTank(i)::setFluid)) diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 08756504e6e..7a91750e10d 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -1,7 +1,7 @@ package gregtech.common.covers.filter; import com.cleanroommc.modularui.utils.Alignment; -import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.layout.Column; import gregtech.api.gui.GuiTextures; @@ -91,10 +91,8 @@ public void initUI(Consumer widgetGroup) { } @Override - @NotNull - public ParentWidget createWidgets(GuiSyncManager syncManager) { + public @NotNull Widget createWidgets(GuiSyncManager syncManager) { SlotGroup filterInventory = new SlotGroup("filter_inv", 3, 1000, true); - var blacklist = new BooleanSyncValue(this.filterReader::isBlacklistFilter, this.filterReader::setBlacklistFilter); var ignoreDamage = new BooleanSyncValue(this.filterReader::isIgnoreDamage, this.filterReader::setIgnoreDamage); var ignoreNBT = new BooleanSyncValue(this.filterReader::isIgnoreNBT, this.filterReader::setIgnoreNBT); @@ -123,11 +121,7 @@ public ParentWidget createWidgets(GuiSyncManager syncManager) { }))) .build()) .child(new Column().width(18).coverChildren() - .child(new CycleButtonWidget() - .value(blacklist) - .textureGetter(state -> GTGuiTextures.BUTTON_BLACKLIST[state]) - .addTooltip(0, IKey.lang("cover.filter.blacklist.disabled")) - .addTooltip(1, IKey.lang("cover.filter.blacklist.enabled"))) + .child(super.createWidgets(syncManager)) .child(new CycleButtonWidget() .value(ignoreDamage) .textureGetter(state -> GTGuiTextures.BUTTON_IGNORE_DAMAGE[state]) diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index dce943f5647..c45a7ba9fad 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -20,7 +20,6 @@ import com.cleanroommc.modularui.value.BoolValue; import com.cleanroommc.modularui.value.sync.EnumSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; -import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.ToggleButton; import com.cleanroommc.modularui.widgets.layout.Column; @@ -99,8 +98,7 @@ public void initUI(Consumer widgetGroup) { } @Override - @NotNull - public ParentWidget createWidgets(GuiSyncManager syncManager) { + public @NotNull Widget createWidgets(GuiSyncManager syncManager) { var filterMode = new EnumSyncValue<>(SmartFilteringMode.class, filterReader::getFilteringMode, filterReader::setFilteringMode); syncManager.syncValue("filter_mode", filterMode); From 4e1fd839a22aee91f516b5899f7027da6a88a977 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 14 Jan 2024 19:57:00 -0700 Subject: [PATCH 084/260] more work on fluid filters --- .../common/covers/CoverFluidFilter.java | 52 ++++++++++--- .../common/covers/filter/FluidFilter.java | 77 ++++++++++++++++++- .../covers/filter/SimpleFluidFilter.java | 58 ++++---------- .../provider/CoverInfoProvider.java | 2 +- 4 files changed, 128 insertions(+), 61 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 0f885bac8f1..038983c7015 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -1,9 +1,5 @@ package gregtech.common.covers; -import com.cleanroommc.modularui.factory.SidedPosGuiData; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; - import gregtech.api.capability.impl.FluidHandlerDelegate; import gregtech.api.cover.CoverBase; import gregtech.api.cover.CoverDefinition; @@ -14,16 +10,17 @@ import gregtech.api.gui.widgets.CycleButtonWidget; import gregtech.api.gui.widgets.LabelWidget; import gregtech.api.gui.widgets.WidgetGroup; -import gregtech.api.mui.GTGuis; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; import gregtech.common.covers.filter.FilterTypeRegistry; +import gregtech.common.covers.filter.FluidFilter; import gregtech.common.covers.filter.FluidFilterContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; @@ -38,10 +35,15 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; +import com.cleanroommc.modularui.factory.SidedPosGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.widgets.SlotGroupWidget; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Unmodifiable; +import java.io.IOException; import java.util.Collections; import java.util.List; @@ -74,12 +76,36 @@ public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFaci this.fluidFilterContainer.setFluidFilter(FilterTypeRegistry.getFluidFilterForStack(itemStack)); } + @Override + public @NotNull ItemStack getPickItem() { + return this.fluidFilterContainer.hasFluidFilter() ? getFluidFilter().getContainerStack() : super.getPickItem(); + } + + @Override + public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { + packetBuffer.writeBoolean(this.fluidFilterContainer.hasFluidFilter()); + if (this.fluidFilterContainer.hasFluidFilter()) { + packetBuffer.writeItemStack(getFluidFilter().getContainerStack()); + } + } + + @Override + public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { + if (packetBuffer.readBoolean()) { + try { + this.fluidFilterContainer.setFluidFilter(FilterTypeRegistry.getFluidFilterForStack(packetBuffer.readItemStack())); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + public FluidFilterMode getFilterMode() { return filterMode; } - public FluidFilterContainer getFluidFilterContainer() { - return this.fluidFilterContainer; + public FluidFilter getFluidFilter() { + return this.fluidFilterContainer.getFluidFilter(); } @Override @@ -121,9 +147,10 @@ public boolean usesMui2() { @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { - return GTGuis.createPanel(this, 100, 100) - .child(getFluidFilterContainer().getFluidFilter().createWidgets(guiSyncManager)) - .bindPlayerInventory(); + return getFluidFilter().createPanel(guiSyncManager).padding(7) + .child(CoverWithUI.createTitleRow(getPickItem())) + .child(getFluidFilter().createWidgets(guiSyncManager).top(22)) + .child(SlotGroupWidget.playerInventory(0).bottom(7).left(7)); } @Override @@ -158,7 +185,7 @@ public void writeToNBT(@NotNull NBTTagCompound tagCompound) { // tagCompound.setBoolean("IsBlacklist", this.fluidFilter.isBlacklistFilter()); // NBTTagCompound filterComponent = new NBTTagCompound(); // this.fluidFilter.getFluidFilter().writeToNBT(filterComponent); -// tagCompound.setTag("Filter", filterComponent); + tagCompound.setTag("Filter", getFluidFilter().getContainerStack().serializeNBT()); } @Override @@ -166,7 +193,8 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); this.filterMode = FluidFilterMode.values()[tagCompound.getInteger("FilterMode")]; this.fluidFilterContainer.setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); - this.fluidFilterContainer.getFluidFilter().readFromNBT(tagCompound.getCompoundTag("Filter")); + var stack = new ItemStack(tagCompound.getCompoundTag("Filter")); + this.fluidFilterContainer.setFluidFilter(FilterTypeRegistry.getFluidFilterForStack(stack)); } private class FluidHandlerFiltered extends FluidHandlerDelegate { diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index e453d75fea5..92967469cad 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -1,12 +1,28 @@ package gregtech.common.covers.filter; -import gregtech.api.gui.Widget; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.value.sync.BooleanSyncValue; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; + +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widget.Widget; +import com.cleanroommc.modularui.widgets.CycleButtonWidget; + +import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.IDirtyNotifiable; +import gregtech.common.covers.filter.readers.BaseFilterReader; + import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.common.util.Constants; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidTank; + +import org.jetbrains.annotations.NotNull; + import java.util.function.Consumer; public abstract class FluidFilter implements Filter { @@ -14,6 +30,12 @@ public abstract class FluidFilter implements Filter { private IDirtyNotifiable dirtyNotifiable; boolean showTip; + private BaseFluidFilterReader filterReader; + + protected void setFilterReader(BaseFluidFilterReader filterReader) { + this.filterReader = filterReader; + } + private OnMatch onMatch = null; public abstract void match(FluidStack toMatch); @@ -32,7 +54,17 @@ protected final void onMatch(boolean matched, FluidStack stack, int index) { public abstract int getFluidTransferLimit(FluidStack fluidStack); @Deprecated - public abstract void initUI(Consumer widgetGroup); + public abstract void initUI(Consumer widgetGroup); + + public @NotNull Widget createWidgets(GuiSyncManager syncManager) { + var blacklist = new BooleanSyncValue(this.filterReader::isBlacklistFilter, this.filterReader::setBlacklistFilter); + return new ParentWidget<>().coverChildren() + .child(new CycleButtonWidget() + .value(blacklist) + .textureGetter(state -> GTGuiTextures.BUTTON_BLACKLIST[state]) + .addTooltip(0, IKey.lang("cover.filter.blacklist.disabled")) + .addTooltip(1, IKey.lang("cover.filter.blacklist.enabled"))); + } public abstract ItemStack getContainerStack(); @@ -46,13 +78,50 @@ public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { public abstract void setMaxConfigurableFluidSize(int maxStackSize); - public abstract boolean isBlacklist(); + public boolean isBlacklist() { + return this.filterReader.isBlacklistFilter(); + } - public abstract void setBlacklistFilter(boolean blacklist); + public void setBlacklistFilter(boolean blacklist) { + this.filterReader.setBlacklistFilter(blacklist); + } public final void markDirty() { if (dirtyNotifiable != null) { dirtyNotifiable.markAsDirty(); } } + + protected abstract class BaseFluidFilterReader extends BaseFilterReader { + + protected static final String KEY_FLUIDS = "FluidTank"; + + public BaseFluidFilterReader(ItemStack container, int slots) { + super(container, slots); + } + + @Override + public NBTTagList getItemsNbt() { + NBTTagCompound nbt = getStackTag(); + if (!nbt.hasKey(KEY_FLUIDS)) { + NBTTagList list = new NBTTagList(); + for (int i = 0; i < getSlots(); i++) { + list.appendTag(new NBTTagCompound()); + } + nbt.setTag(KEY_FLUIDS, list); + } + return nbt.getTagList(KEY_FLUIDS, Constants.NBT.TAG_COMPOUND); + } + + public FluidStack getFluidStack(int i) { + return getFluidTank(i).getFluid(); + } + + public abstract IFluidTank getFluidTank(int i); + + @Override + public void onMaxStackSizeChange() { + + } + } } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 9eae6a62d1a..be61789786b 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -42,6 +42,7 @@ public class SimpleFluidFilter extends FluidFilter { public SimpleFluidFilter(ItemStack stack) { this.filterReader = new SimpleFluidFilterReader(stack, MAX_FLUID_SLOTS); + setFilterReader(this.filterReader); } @Override @@ -57,14 +58,6 @@ public void setMaxConfigurableFluidSize(int maxSize) { } } - public boolean isBlacklist() { - return this.filterReader.isBlacklistFilter(); - } - - public void setBlacklistFilter(boolean blacklist) { - this.filterReader.setBlacklistFilter(blacklist); - } - @Override public ItemStack getContainerStack() { return this.filterReader.getContainer(); @@ -79,11 +72,11 @@ public ItemStack getContainerStack() { @Override public @NotNull ModularPanel createPanel(GuiSyncManager syncManager) { - return GTGuis.createPanel(getContainerStack(), 100, 100); + return GTGuis.createPanel(getContainerStack(), 176, 168); } @Override - public @NotNull ParentWidget createWidgets(GuiSyncManager syncManager) { + public @NotNull Widget createWidgets(GuiSyncManager syncManager) { FluidSlotSyncHandler[] syncHandlers = new FluidSlotSyncHandler[MAX_FLUID_SLOTS]; for (int i = 0; i < syncHandlers.length; i++) { var tank = this.filterReader.getFluidTank(i); @@ -91,14 +84,15 @@ public ItemStack getContainerStack() { syncHandlers[i].setValue(tank.getFluid(), false, false); } - return new Column().coverChildrenHeight().widthRel(1f) - .child(SlotGroupWidget.builder() - .matrix("FFF", - "FFF", - "FFF") - .key('F', i -> new FluidSlot() - .syncHandler(syncHandlers[i])) - .build()); + return new Row().coverChildrenHeight().widthRel(1f) + .child(SlotGroupWidget.builder() + .matrix("FFF", + "FFF", + "FFF") + .key('F', i -> new FluidSlot() + .syncHandler(syncHandlers[i])) + .build()) + .child(super.createWidgets(syncManager)); } @Override @@ -165,35 +159,11 @@ public int getFluidTransferLimit(FluidStack fluidStack) { } return limit; } - protected static class SimpleFluidFilterReader extends BaseFilterReader { - - protected static final String KEY_FLUIDS = "FluidTank"; + protected class SimpleFluidFilterReader extends BaseFluidFilterReader { public SimpleFluidFilterReader(ItemStack container, int slots) { super(container, slots); } - @Override - public void onMaxStackSizeChange() { - - } - - @Override - public NBTTagList getItemsNbt() { - NBTTagCompound nbt = getStackTag(); - if (!nbt.hasKey(KEY_FLUIDS)) { - NBTTagList list = new NBTTagList(); - for (int i = 0; i < getSlots(); i++) { - list.appendTag(new NBTTagCompound()); - } - nbt.setTag(KEY_FLUIDS, list); - } - return nbt.getTagList(KEY_FLUIDS, Constants.NBT.TAG_COMPOUND); - } - - public FluidStack getFluidStack(int i) { - return getFluidTank(i).getFluid(); - } - public WritableFluidTank getFluidTank(int i) { return new WritableFluidTank(getItemsNbt().getCompoundTagAt(i), 1000); } @@ -299,7 +269,7 @@ public FluidStack drain(int maxDrain, boolean doDrain) { } } - public class FixedFluidSlotSH extends FluidSlotSyncHandler { + public static class FixedFluidSlotSH extends FluidSlotSyncHandler { @Nullable private FluidStack lastStoredPhantomFluid; diff --git a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java index 14264ddb209..860990db978 100644 --- a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java +++ b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java @@ -158,7 +158,7 @@ private static void itemFilterInfo(@NotNull IProbeInfo probeInfo, @NotNull Cover */ private static void fluidFilterInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverFluidFilter fluidFilter) { filterModeText(probeInfo, fluidFilter.getFilterMode()); - fluidFilterText(probeInfo, fluidFilter.getFluidFilterContainer().getFluidFilter()); + fluidFilterText(probeInfo, fluidFilter.getFluidFilter()); } /** From 868476dedea8838dc887c7c714a86c813a3d0add Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 14 Jan 2024 21:12:46 -0700 Subject: [PATCH 085/260] all filters are now ported pump conveyor is mostly porter even more changes to filter positioning fixed some issues with oredict filter reader don't set filter settings in constructor --- .../common/covers/CoverItemFilter.java | 8 +- .../gregtech/common/covers/CoverPump.java | 122 +++++++++++++++++- .../common/covers/filter/FluidFilter.java | 2 +- .../covers/filter/FluidFilterContainer.java | 94 ++++++++++++-- .../common/covers/filter/ItemFilter.java | 11 +- .../covers/filter/ItemFilterContainer.java | 2 +- .../filter/OreDictionaryItemFilter.java | 27 ++-- .../covers/filter/SimpleFluidFilter.java | 21 +-- .../covers/filter/SimpleItemFilter.java | 17 ++- .../common/covers/filter/SmartItemFilter.java | 24 ++-- .../filter/readers/BaseFilterReader.java | 8 +- 11 files changed, 273 insertions(+), 63 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 3e6365002ad..69f3a6751b5 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -162,11 +162,13 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .size(176, 188).padding(7) .child(CoverWithUI.createTitleRow(getPickItem()).left(4)) .child(new Column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight() - .child(new Row().coverChildren().marginBottom(4).left(0) + .child(new Row().coverChildrenHeight() + .widthRel(1f).marginBottom(4).left(0) .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_INSERT)) .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_EXTRACT)) - .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_BOTH))) - .child(getItemFilter().createWidgets(guiSyncManager))) + .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_BOTH)) + .child(IKey.str("Filter Mode").asWidget().align(Alignment.CenterRight))) + .child(getItemFilter().createWidgets(guiSyncManager).left(0))) .child(SlotGroupWidget.playerInventory(0).bottom(7).left(7)); } diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index dd18b5cbf49..cf34c96f79f 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -1,9 +1,24 @@ package gregtech.common.covers; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.api.widget.Interactable; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Alignment; +import com.cleanroommc.modularui.utils.MouseData; +import com.cleanroommc.modularui.value.sync.EnumSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.value.sync.IntSyncValue; +import com.cleanroommc.modularui.widget.ParentWidget; + +import com.cleanroommc.modularui.widget.Widget; +import com.cleanroommc.modularui.widgets.ButtonWidget; +import com.cleanroommc.modularui.widgets.ToggleButton; +import com.cleanroommc.modularui.widgets.layout.Column; +import com.cleanroommc.modularui.widgets.layout.Row; +import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; + import gregtech.api.GTValues; import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; @@ -21,6 +36,7 @@ import gregtech.api.gui.widgets.LabelWidget; import gregtech.api.gui.widgets.TextFieldWidget2; import gregtech.api.gui.widgets.WidgetGroup; +import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.api.util.GTTransferUtils; import gregtech.client.renderer.texture.Textures; @@ -30,6 +46,7 @@ import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.EnumDyeColor; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; import net.minecraft.tileentity.TileEntity; @@ -242,8 +259,107 @@ public boolean usesMui2() { @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { - return GTGuis.createPanel(this, 100, 100) - .child(CoverWithUI.createTitleRow(getPickItem())); + var panel = GTGuis.createPanel(this, 176,192); + + //todo set fluid filter stuffs here + + return panel.child(CoverWithUI.createTitleRow(getPickItem())) + .child(createUI(panel, guiSyncManager)) + .bindPlayerInventory(); + } + + protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { + EnumSyncValue manualIOmode = new EnumSyncValue<>(ManualImportExportMode.class, + this::getManualImportExportMode, this::setManualImportExportMode); + + IntSyncValue throughput = new IntSyncValue(this::getTransferRate, this::setTransferRate); + + syncManager.syncValue("manual_io", manualIOmode); + + return new Column().top(24).margin(7, 0) + .widthRel(1f).coverChildrenHeight() + .child(new Row().coverChildrenHeight() + .marginBottom(2).widthRel(1f) + .child(new ButtonWidget<>() + .left(0).width(18) + .onMousePressed(mouseButton -> { + throughput.updateCacheFromSource(false); + int val = throughput.getValue() - getIncrementValue(MouseData.create(mouseButton)); + throughput.setValue(val, true, true); + Interactable.playButtonClickSound(); + return true; + }) + .onUpdateListener(w -> w.overlay(createAdjustOverlay(false)))) + .child(new TextFieldWidget() + .left(18).right(18) + .setTextColor(EnumDyeColor.WHITE.getColorValue()) + .setNumbers(1, maxFluidTransferRate) + .value(throughput) + .background(GTGuiTextures.DISPLAY) + .onUpdateListener(w -> { + if (throughput.updateCacheFromSource(false)) { + w.setText(throughput.getStringValue()); + } + })) + .child(new ButtonWidget<>() + .right(0).width(18) + .onMousePressed(mouseButton -> { + throughput.updateCacheFromSource(false); + int val = throughput.getValue() + getIncrementValue(MouseData.create(mouseButton)); + throughput.setValue(val, true, true); + Interactable.playButtonClickSound(); + return true; + }) + .onUpdateListener(w -> w.overlay(createAdjustOverlay(true))))) + .child(getFluidFilterContainer() + .initUI(mainPanel, syncManager)) + .child(new Row().coverChildrenHeight() + .marginBottom(2).widthRel(1f) + .child(createManualIoButton(manualIOmode, ManualImportExportMode.DISABLED)) + .child(createManualIoButton(manualIOmode, ManualImportExportMode.UNFILTERED)) + .child(createManualIoButton(manualIOmode, ManualImportExportMode.FILTERED)) + .child(IKey.lang("Manual IO Mode") + .asWidget() + .align(Alignment.CenterRight) + .height(18))); + } + + private Widget createManualIoButton(EnumSyncValue value, ManualImportExportMode mode) { + return new ToggleButton().size(18) + .value(boolValueOf(value, mode)) + .background(GTGuiTextures.MC_BUTTON_DISABLED) + .selectedBackground(GTGuiTextures.MC_BUTTON) + .overlay(GTGuiTextures.MANUAL_IO_OVERLAY[mode.ordinal()]) + .addTooltipLine(switch (mode) { + case DISABLED -> IKey.lang("cover.universal.manual_import_export.mode.disabled"); + case UNFILTERED -> IKey.lang("cover.universal.manual_import_export.mode.unfiltered"); + case FILTERED -> IKey.lang("cover.universal.manual_import_export.mode.filtered"); + }); + } + + protected int getIncrementValue(MouseData data) { + int adjust = 1; + if (data.shift) adjust *= 4; + if (data.ctrl) adjust *= 16; + if (data.alt) adjust *= 64; + return adjust; + } + + protected IKey createAdjustOverlay(boolean increment) { + final StringBuilder builder = new StringBuilder(); + builder.append(increment ? '+' : '-'); + builder.append(getIncrementValue(MouseData.create(-1))); + + float scale = 1f; + if (builder.length() == 3) { + scale = 0.8f; + } else if (builder.length() == 4) { + scale = 0.6f; + } else if (builder.length() > 4) { + scale = 0.5f; + } + return IKey.str(builder.toString()) + .scale(scale); } public static Function getTextFieldValidator(IntSupplier maxSupplier) { @@ -291,12 +407,14 @@ public void readCustomData(int discriminator, @NotNull PacketBuffer buf) { public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.writeInitialSyncData(packetBuffer); packetBuffer.writeEnumValue(pumpMode); + getFluidFilterContainer().writeInitialSyncData(packetBuffer); } @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.readInitialSyncData(packetBuffer); this.pumpMode = packetBuffer.readEnumValue(PumpMode.class); + getFluidFilterContainer().readInitialSyncData(packetBuffer); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index 92967469cad..fc1ee5214ba 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -92,7 +92,7 @@ public final void markDirty() { } } - protected abstract class BaseFluidFilterReader extends BaseFilterReader { + protected abstract static class BaseFluidFilterReader extends BaseFilterReader { protected static final String KEY_FLUIDS = "FluidTank"; diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index bba51db1bc0..f6e379f8f89 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -1,21 +1,36 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.api.widget.IWidget; +import com.cleanroommc.modularui.api.widget.Interactable; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Alignment; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.value.sync.PanelSyncHandler; +import com.cleanroommc.modularui.value.sync.SyncHandlers; +import com.cleanroommc.modularui.widgets.ButtonWidget; +import com.cleanroommc.modularui.widgets.ItemSlot; +import com.cleanroommc.modularui.widgets.layout.Row; + import gregtech.api.gui.GuiTextures; import gregtech.api.gui.Widget; import gregtech.api.gui.widgets.LabelWidget; import gregtech.api.gui.widgets.ServerWidgetGroup; import gregtech.api.gui.widgets.SlotWidget; import gregtech.api.gui.widgets.ToggleButtonWidget; +import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; import net.minecraftforge.common.util.INBTSerializable; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.ItemStackHandler; import org.jetbrains.annotations.NotNull; +import java.io.IOException; import java.util.function.BooleanSupplier; import java.util.function.Consumer; import java.util.function.Supplier; @@ -32,13 +47,10 @@ public class FluidFilterContainer implements INBTSerializable { public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable, int capacity) { this.filterWrapper = new FluidFilterWrapper(this); // for compat + this.maxSize = capacity; + this.dirtyNotifiable = dirtyNotifiable; this.filterInventory = new ItemStackHandler(1) { - @Override - public boolean isItemValid(int slot, @NotNull ItemStack stack) { - return FilterTypeRegistry.isFluidFilter(stack); - } - @Override public int getSlotLimit(int slot) { return 1; @@ -48,14 +60,7 @@ public int getSlotLimit(int slot) { protected void onLoad() { onFilterSlotChange(false); } - - @Override - protected void onContentsChanged(int slot) { - onFilterSlotChange(true); - } }; - this.maxSize = capacity; - this.dirtyNotifiable = dirtyNotifiable; } public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable, Supplier showTip, int maxSize) { @@ -141,10 +146,75 @@ public void blacklistUI(int y, Consumer widgetGroup, BooleanSupplier sho widgetGroup.accept(blacklistButton); } + /** Uses Cleanroom MUI*/ + public IWidget initUI(ModularPanel main, GuiSyncManager manager) { + var panel = new PanelSyncHandler(main) { + @Override + public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { +// getFluidFilter().setMaxStackSizer(stackSizer); + return getFluidFilter().createPopupPanel(syncManager); + } + }; + manager.syncValue("filter_panel", panel); + + return new Row().coverChildrenHeight() + .marginBottom(2).widthRel(1f) + .child(new ItemSlot() + .slot(SyncHandlers.itemSlot(filterInventory, 0) + .filter(FilterTypeRegistry::isFluidFilter) + .changeListener((newItem, onlyAmountChanged, client, init) -> { + if (newItem.isEmpty() || FilterTypeRegistry.isFluidFilter(newItem)) { + onFilterSlotChange(true); + } + }) + .singletonSlotGroup(101)) + .onUpdateListener(w -> { + if (!hasFluidFilter() && panel.isPanelOpen()) { + panel.closePanel(); + } + }, true) + .size(18) + .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY)) + .child(new ButtonWidget<>() + .setEnabledIf(w -> hasFluidFilter()) + .onMousePressed(i -> { + boolean success = false; + if (!panel.isPanelOpen()) { + panel.openPanel(); + success = true; + } else if (panel.isValid()) { + panel.closePanel(); + success = true; + } + Interactable.playButtonClickSound(); + return success; + })) + .child(IKey.dynamic(() -> hasFluidFilter() ? + getFilterInventory().getStackInSlot(0).getDisplayName() : + IKey.lang("metaitem.fluid_filter.name").get()) + .alignment(Alignment.CenterRight).asWidget() + .left(36).right(0).height(18)); + } + public boolean hasFluidFilter() { return currentFluidFilter != null; } + public void writeInitialSyncData(PacketBuffer packetBuffer) { + packetBuffer.writeItemStack(getFilterInventory().getStackInSlot(0)); + } + + public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { + var stack = ItemStack.EMPTY; + try { + stack = packetBuffer.readItemStack(); + } catch (IOException ignore) {} + this.filterInventory.setStackInSlot(0, stack); + + if (FilterTypeRegistry.isFluidFilter(stack)) + this.currentFluidFilter = FilterTypeRegistry.getFluidFilterForStack(stack); + } + public void setBlacklistFilter(boolean blacklistFilter) { if (hasFluidFilter()) getFluidFilter().setBlacklistFilter(blacklistFilter); } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index ae5ae3f4c27..ce2912dfc01 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -128,27 +128,24 @@ public void setOnMatched(OnMatch onMatch) { } protected static class BaseItemFilterReader extends BaseFilterReader { - private Supplier maxStackSizer = () -> 1; - private int cache; protected static final String COUNT = "Count"; public BaseItemFilterReader(ItemStack container, int slots) { super(container, slots); - setBlacklistFilter(false); } public void onMaxStackSizeChange() { this.cache = getMaxStackSizer().get(); } - public final int getMaxStackSize() { - return this.isBlacklistFilter() ? 1 : this.cache; - } - public final void setMaxStackSizer(Supplier maxStackSizer) { this.maxStackSizer = maxStackSizer; this.cache = this.maxStackSizer.get(); } + public final int getMaxStackSize() { + return this.isBlacklistFilter() ? 1 : this.cache; + } + public Supplier getMaxStackSizer() { return this.maxStackSizer; } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 52329621f6b..bd06a28a4d1 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -170,7 +170,7 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) })) .child(IKey.dynamic(() -> hasItemFilter() ? getFilterInventory().getStackInSlot(0).getDisplayName() : - IKey.lang("cover.conveyor.item_filter.title").get()) + IKey.lang("metaitem.item_filter.name").get()) .alignment(Alignment.CenterRight).asWidget() .left(36).right(0).height(18)); } diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index e869b3ddf53..f00dc363545 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -218,14 +218,14 @@ public void initUI(Consumer widgetGroup) { oreSlots.add(slot); return slot; }) - .build().marginRight(4)) + .build().marginRight(2)) .child(new ToggleButton() .size(18).value(caseSensitive) .background(GTGuiTextures.BUTTON_CASE_SENSITIVE[1]) .hoverBackground(GTGuiTextures.BUTTON_CASE_SENSITIVE[1]) .selectedBackground(GTGuiTextures.BUTTON_CASE_SENSITIVE[0]) .selectedHoverBackground(GTGuiTextures.BUTTON_CASE_SENSITIVE[0]) - .marginRight(4) + .marginRight(2) .tooltip(tooltip -> tooltip.setAutoUpdate(true))) .child(new ToggleButton() .size(18).value(matchAll) @@ -233,7 +233,9 @@ public void initUI(Consumer widgetGroup) { .hoverBackground(GTGuiTextures.BUTTON_MATCH_ALL[1]) .selectedHoverBackground(GTGuiTextures.BUTTON_MATCH_ALL[0]) .selectedBackground(GTGuiTextures.BUTTON_MATCH_ALL[0]) - .tooltip(tooltip -> tooltip.setAutoUpdate(true)))); + .tooltip(tooltip -> tooltip.setAutoUpdate(true)) + .marginRight(2)) + .child(super.createWidgets(syncManager))); } protected void getStatusIcon(Widget widget) { @@ -408,8 +410,6 @@ protected class OreDictionaryItemFilterReader extends BaseItemFilterReader { public OreDictionaryItemFilterReader(ItemStack container, int slots) { super(container, slots); - setCaseSensitive(true); - setMatchAll(true); } @Override @@ -418,28 +418,36 @@ public Supplier getMaxStackSizer() { } public void setExpression(String expression) { - if (this.getExpression().equals(expression)) return; + var old = getStackTag().getString(EXPRESSION); + if (expression.equals(old)) return; getStackTag().setString(EXPRESSION, expression); recompile(); markDirty(); } public String getExpression() { + if (!getStackTag().hasKey(EXPRESSION)) + setExpression(""); + return getStackTag().getString(EXPRESSION); } public void setCaseSensitive(boolean caseSensitive) { - if (this.isCaseSensitive() == caseSensitive) return; + var old = getStackTag().getBoolean(CASE_SENSITIVE); + if (getStackTag().hasKey(CASE_SENSITIVE) && old == caseSensitive) return; getStackTag().setBoolean(CASE_SENSITIVE, caseSensitive); markDirty(); } public boolean isCaseSensitive() { + if (!getStackTag().hasKey(CASE_SENSITIVE)) + setCaseSensitive(true); + return getStackTag().getBoolean(CASE_SENSITIVE); } public void setMatchAll(boolean matchAll) { - if (this.shouldMatchAll() == matchAll) return; + if (getStackTag().hasKey(MATCH_ALL) && this.shouldMatchAll() == matchAll) return; getStackTag().setBoolean(MATCH_ALL, matchAll); markDirty(); } @@ -449,6 +457,9 @@ public void setMatchAll(boolean matchAll) { * all entries to match */ public boolean shouldMatchAll() { + if (!getStackTag().hasKey(MATCH_ALL)) + setMatchAll(true); + return getStackTag().getBoolean(MATCH_ALL); } } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index be61789786b..375ec82dd44 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -1,21 +1,12 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.api.drawable.IKey; -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.Row; - -import gregtech.api.mui.GTGuiTextures; +import gregtech.api.cover.CoverWithUI; import gregtech.api.mui.GTGuis; -import gregtech.common.covers.filter.readers.BaseFilterReader; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; import net.minecraft.network.PacketBuffer; -import net.minecraftforge.common.util.Constants; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidTank; @@ -26,9 +17,10 @@ import com.cleanroommc.modularui.utils.MouseData; import com.cleanroommc.modularui.value.sync.FluidSlotSyncHandler; import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.FluidSlot; import com.cleanroommc.modularui.widgets.SlotGroupWidget; -import com.cleanroommc.modularui.widgets.layout.Column; +import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -65,9 +57,10 @@ public ItemStack getContainerStack() { @Override public @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager) { - return GTGuis.createPopupPanel("simple_fluid_filter", 100, 100) + return GTGuis.createPopupPanel("simple_fluid_filter", 98, 81) .padding(4) - .child(createWidgets(syncManager)); + .child(CoverWithUI.createTitleRow(getContainerStack())) + .child(createWidgets(syncManager).top(22)); } @Override @@ -91,7 +84,7 @@ public ItemStack getContainerStack() { "FFF") .key('F', i -> new FluidSlot() .syncHandler(syncHandlers[i])) - .build()) + .build().marginRight(4)) .child(super.createWidgets(syncManager)); } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 7a91750e10d..b0709b2d7a8 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -4,6 +4,7 @@ import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.layout.Column; +import gregtech.api.cover.CoverWithUI; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.PhantomSlotWidget; import gregtech.api.gui.widgets.ToggleButtonWidget; @@ -80,9 +81,9 @@ public void initUI(Consumer widgetGroup) { @Override public @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager) { - return GTGuis.createPopupPanel("simple_item_filter", 81, 81) - .child(IKey.str("Settings").asWidget().margin(4).align(Alignment.TopLeft)) - .child(createWidgets(syncManager).bottom(4).left(4)); + return GTGuis.createPopupPanel("simple_item_filter", 98, 81) + .child(CoverWithUI.createTitleRow(getContainerStack())) + .child(createWidgets(syncManager).top(22).left(4)); } @Override @@ -119,7 +120,7 @@ public void initUI(Consumer widgetGroup) { markDirty(); } }))) - .build()) + .build().marginRight(4)) .child(new Column().width(18).coverChildren() .child(super.createWidgets(syncManager)) .child(new CycleButtonWidget() @@ -181,8 +182,6 @@ protected class SimpleItemFilterReader extends BaseItemFilterReader { public static final String IGNORE_DAMAGE = "ignore_damage"; public SimpleItemFilterReader(ItemStack container, int slots) { super(container, slots); - setIgnoreDamage(true); - setIgnoreNBT(true); } protected void setIgnoreDamage(boolean ignoreDamage) { @@ -196,10 +195,16 @@ protected void setIgnoreNBT(boolean ignoreNBT) { } public boolean isIgnoreDamage() { + if (!getStackTag().hasKey(IGNORE_DAMAGE)) + setIgnoreDamage(true); + return getStackTag().getBoolean(IGNORE_DAMAGE); } public boolean isIgnoreNBT() { + if (!getStackTag().hasKey(IGNORE_NBT)) + setIgnoreNBT(true); + return getStackTag().getBoolean(IGNORE_NBT); } diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index c45a7ba9fad..5c50e9d6baa 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -2,6 +2,9 @@ import com.cleanroommc.modularui.utils.Alignment; +import com.cleanroommc.modularui.widgets.layout.Row; + +import gregtech.api.cover.CoverWithUI; import gregtech.api.gui.widgets.CycleButtonWidget; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; @@ -87,9 +90,9 @@ public void initUI(Consumer widgetGroup) { @Override public @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager) { - return GTGuis.createPopupPanel("smart_item_filter", 100, 100) - .child(IKey.str("Settings").asWidget().margin(4).align(Alignment.TopLeft)) - .child(createWidgets(syncManager).bottom(4).left(4)); + return GTGuis.createPopupPanel("smart_item_filter", 98 + 27, 81) + .child(CoverWithUI.createTitleRow(getContainerStack())) + .child(createWidgets(syncManager).top(22).left(4)); } @Override @@ -102,14 +105,16 @@ public void initUI(Consumer widgetGroup) { var filterMode = new EnumSyncValue<>(SmartFilteringMode.class, filterReader::getFilteringMode, filterReader::setFilteringMode); syncManager.syncValue("filter_mode", filterMode); - return new Column().coverChildren() - .child(createFilterModeButton(filterMode, SmartFilteringMode.ELECTROLYZER)) - .child(createFilterModeButton(filterMode, SmartFilteringMode.CENTRIFUGE)) - .child(createFilterModeButton(filterMode, SmartFilteringMode.SIFTER)); + return new Row().coverChildren() + .child(new Column().coverChildren().marginRight(4) + .child(createFilterModeButton(filterMode, SmartFilteringMode.ELECTROLYZER)) + .child(createFilterModeButton(filterMode, SmartFilteringMode.CENTRIFUGE)) + .child(createFilterModeButton(filterMode, SmartFilteringMode.SIFTER))) + .child(super.createWidgets(syncManager)); } private Widget createFilterModeButton(EnumSyncValue value, SmartFilteringMode mode) { - return new ToggleButton().height(18).width(18 * 4) + return new ToggleButton().height(18).width(18 * 5) .value(boolValueOf(value, mode)) .background(GTGuiTextures.MC_BUTTON_DISABLED) .hoverBackground() @@ -186,6 +191,9 @@ public SmartItemFilterReader(ItemStack container) { } public SmartFilteringMode getFilteringMode() { + if (!getStackTag().hasKey(FILTER_MODE)) + setFilteringMode(SmartFilteringMode.ELECTROLYZER); + return SmartFilteringMode.values()[getStackTag().getInteger(FILTER_MODE)]; } 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 f6e4f7e94c8..3646962e6ed 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -7,15 +7,18 @@ import com.cleanroommc.modularui.utils.ItemStackItemHandler; +import java.util.function.Supplier; + public abstract class BaseFilterReader extends ItemStackItemHandler { protected final ItemStack container; + protected Supplier maxStackSizer = () -> 1; + protected int cache; protected static final String KEY_ITEMS = "Items"; protected static final String BLACKLIST = "is_blacklist"; public BaseFilterReader(ItemStack container, int slots) { super(container, slots); this.container = container; - setBlacklistFilter(false); } public ItemStack getContainer () { @@ -30,6 +33,9 @@ public final void setBlacklistFilter(boolean blacklistFilter) { } public final boolean isBlacklistFilter() { + if (!getStackTag().hasKey(BLACKLIST)) + setBlacklistFilter(false); + return getStackTag().getBoolean(BLACKLIST); } From ea5b2246c1acd0153906815c3d1453842b72dcdb Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 15 Jan 2024 12:43:28 -0700 Subject: [PATCH 086/260] use Color instead of EnumDyeColor override theme for filter as item --- .../gregtech/common/covers/CoverConveyor.java | 4 +- .../gregtech/common/covers/CoverPump.java | 39 +++++++++---------- .../common/covers/filter/ItemFilter.java | 17 ++++---- .../filter/OreDictionaryItemFilter.java | 3 ++ .../behaviors/filter/BaseFilterUIManager.java | 6 +++ 5 files changed, 37 insertions(+), 32 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 886c45da917..7d0ebe6246c 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -29,7 +29,6 @@ import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.EnumDyeColor; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; @@ -57,6 +56,7 @@ import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.utils.Alignment; +import com.cleanroommc.modularui.utils.Color; import com.cleanroommc.modularui.utils.MouseData; import com.cleanroommc.modularui.value.sync.EnumSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; @@ -566,7 +566,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g .onUpdateListener(w -> w.overlay(createAdjustOverlay(false)))) .child(new TextFieldWidget() .left(18).right(18) - .setTextColor(EnumDyeColor.WHITE.getColorValue()) + .setTextColor(Color.WHITE.darker(1)) .setNumbers(1, maxItemTransferRate) .value(throughput) .background(GTGuiTextures.DISPLAY) diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index cf34c96f79f..a626a325566 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -1,24 +1,5 @@ package gregtech.common.covers; -import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.api.widget.Interactable; -import com.cleanroommc.modularui.factory.SidedPosGuiData; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Alignment; -import com.cleanroommc.modularui.utils.MouseData; -import com.cleanroommc.modularui.value.sync.EnumSyncValue; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; - -import com.cleanroommc.modularui.value.sync.IntSyncValue; -import com.cleanroommc.modularui.widget.ParentWidget; - -import com.cleanroommc.modularui.widget.Widget; -import com.cleanroommc.modularui.widgets.ButtonWidget; -import com.cleanroommc.modularui.widgets.ToggleButton; -import com.cleanroommc.modularui.widgets.layout.Column; -import com.cleanroommc.modularui.widgets.layout.Row; -import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; - import gregtech.api.GTValues; import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; @@ -46,7 +27,6 @@ import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.EnumDyeColor; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; import net.minecraft.tileentity.TileEntity; @@ -69,6 +49,23 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.api.widget.Interactable; +import com.cleanroommc.modularui.factory.SidedPosGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Alignment; +import com.cleanroommc.modularui.utils.Color; +import com.cleanroommc.modularui.utils.MouseData; +import com.cleanroommc.modularui.value.sync.EnumSyncValue; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.value.sync.IntSyncValue; +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widget.Widget; +import com.cleanroommc.modularui.widgets.ButtonWidget; +import com.cleanroommc.modularui.widgets.ToggleButton; +import com.cleanroommc.modularui.widgets.layout.Column; +import com.cleanroommc.modularui.widgets.layout.Row; +import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; import com.google.common.math.IntMath; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -292,7 +289,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa .onUpdateListener(w -> w.overlay(createAdjustOverlay(false)))) .child(new TextFieldWidget() .left(18).right(18) - .setTextColor(EnumDyeColor.WHITE.getColorValue()) + .setTextColor(Color.WHITE.darker(1)) .setNumbers(1, maxFluidTransferRate) .value(throughput) .background(GTGuiTextures.DISPLAY) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index ce2912dfc01..5adadb0d1dd 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -1,10 +1,5 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.value.sync.BooleanSyncValue; -import com.cleanroommc.modularui.widget.Widget; -import com.cleanroommc.modularui.widgets.CycleButtonWidget; - import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.IDirtyNotifiable; import gregtech.common.covers.filter.readers.BaseFilterReader; @@ -12,9 +7,13 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.BooleanSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; 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.function.Consumer; @@ -92,10 +91,10 @@ public int getStackTransferLimit(ItemStack stack, int globalTransferLimit) { var blacklist = new BooleanSyncValue(this.filterReader::isBlacklistFilter, this.filterReader::setBlacklistFilter); return new ParentWidget<>().coverChildren() .child(new CycleButtonWidget() - .value(blacklist) - .textureGetter(state -> GTGuiTextures.BUTTON_BLACKLIST[state]) - .addTooltip(0, IKey.lang("cover.filter.blacklist.disabled")) - .addTooltip(1, IKey.lang("cover.filter.blacklist.enabled"))); + .value(blacklist) + .textureGetter(state -> GTGuiTextures.BUTTON_BLACKLIST[state]) + .addTooltip(0, IKey.lang("cover.filter.blacklist.disabled")) + .addTooltip(1, IKey.lang("cover.filter.blacklist.enabled"))); } @Deprecated diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index f00dc363545..b76d76e0008 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -1,5 +1,7 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.utils.Color; + import gregtech.api.cover.CoverWithUI; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; @@ -196,6 +198,7 @@ public void initUI(Consumer widgetGroup) { slot.updatePreview(); } }) + .setTextColor(Color.WHITE.darker(1)) .value(expression).marginBottom(4) .height(18).widthRel(1f)) .child(new Row().coverChildrenHeight() 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 292e64ec187..0a58fb7c941 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java @@ -11,6 +11,7 @@ import gregtech.api.items.gui.ItemUIFactory; import gregtech.api.items.metaitem.stats.IItemBehaviour; +import gregtech.api.mui.GTGuiTheme; import gregtech.api.mui.GTGuis; import gregtech.api.mui.factory.MetaItemGuiFactory; @@ -46,6 +47,11 @@ protected final ModularPanel createBasePanel(ItemStack stack) { .child(CoverWithUI.createTitleRow(stack)); } + @Override + public GTGuiTheme getUITheme() { + return GTGuiTheme.COVER; + } + protected int getWidth() { return 176; } From a4cf4c274ff34a43689b71128f1acd054ce3c78a Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 15 Jan 2024 12:44:19 -0700 Subject: [PATCH 087/260] remove unused methods --- .../items/behaviors/filter/BaseFilterUIManager.java | 10 +--------- 1 file changed, 1 insertion(+), 9 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 0a58fb7c941..cd58c47cfc6 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java @@ -43,7 +43,7 @@ public final ActionResult onItemRightClick(World world, EntityPlayer public abstract ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager); protected final ModularPanel createBasePanel(ItemStack stack) { - return GTGuis.createPanel(stack, getWidth(), getHeight()) + return GTGuis.createPanel(stack, 176, 188) .child(CoverWithUI.createTitleRow(stack)); } @@ -51,12 +51,4 @@ protected final ModularPanel createBasePanel(ItemStack stack) { public GTGuiTheme getUITheme() { return GTGuiTheme.COVER; } - - protected int getWidth() { - return 176; - } - - protected int getHeight() { - return 188; - } } From c462ee043a42c52333344b5845f0a7918ed7a87a Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 15 Jan 2024 12:49:07 -0700 Subject: [PATCH 088/260] todo --- .../common/items/behaviors/filter/BaseFilterUIManager.java | 2 ++ 1 file changed, 2 insertions(+) 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 cd58c47cfc6..c0449dad552 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java @@ -33,6 +33,8 @@ public final ActionResult onItemRightClick(World world, EntityPlayer if (!world.isRemote && !Interactable.hasShiftDown()) { MetaItemGuiFactory.open(player, hand); } + + // todo this method is client only, probably not a good idea to use this if (Interactable.hasShiftDown() && heldItem.hasTagCompound()) { heldItem.setTagCompound(null); } From fe749175502216ac60e15a91a3f1ecc1871cc024 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 15 Jan 2024 13:04:18 -0700 Subject: [PATCH 089/260] use better check for shift --- .../common/items/behaviors/filter/BaseFilterUIManager.java | 4 +--- 1 file changed, 1 insertion(+), 3 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 c0449dad552..6b0e1fccacc 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java @@ -33,9 +33,7 @@ public final ActionResult onItemRightClick(World world, EntityPlayer if (!world.isRemote && !Interactable.hasShiftDown()) { MetaItemGuiFactory.open(player, hand); } - - // todo this method is client only, probably not a good idea to use this - if (Interactable.hasShiftDown() && heldItem.hasTagCompound()) { + if (player.isSneaking() && heldItem.hasTagCompound()) { heldItem.setTagCompound(null); } return ActionResult.newResult(EnumActionResult.SUCCESS, heldItem); From 5e6000a799e84a96e0209f8b5a37a6e1e8c6c376 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 15 Jan 2024 13:06:35 -0700 Subject: [PATCH 090/260] add margin --- .../covers/filter/FluidFilterContainer.java | 45 ++++++++----------- .../covers/filter/ItemFilterContainer.java | 2 +- 2 files changed, 20 insertions(+), 27 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index f6e379f8f89..60b79fb68d3 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -1,5 +1,15 @@ package gregtech.common.covers.filter; +import gregtech.api.mui.GTGuiTextures; +import gregtech.api.util.IDirtyNotifiable; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.common.util.INBTSerializable; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.items.ItemStackHandler; + import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.api.widget.IWidget; import com.cleanroommc.modularui.api.widget.Interactable; @@ -11,23 +21,6 @@ import com.cleanroommc.modularui.widgets.ButtonWidget; import com.cleanroommc.modularui.widgets.ItemSlot; import com.cleanroommc.modularui.widgets.layout.Row; - -import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.Widget; -import gregtech.api.gui.widgets.LabelWidget; -import gregtech.api.gui.widgets.ServerWidgetGroup; -import gregtech.api.gui.widgets.SlotWidget; -import gregtech.api.gui.widgets.ToggleButtonWidget; -import gregtech.api.mui.GTGuiTextures; -import gregtech.api.util.IDirtyNotifiable; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.PacketBuffer; -import net.minecraftforge.common.util.INBTSerializable; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.items.ItemStackHandler; - import org.jetbrains.annotations.NotNull; import java.io.IOException; @@ -125,22 +118,22 @@ public boolean testFluidStack(FluidStack fluidStack, boolean whitelist) { return result; } - public void initUI(int y, Consumer widgetGroup) { - widgetGroup.accept(new LabelWidget(10, y, "cover.pump.fluid_filter.title")); - widgetGroup.accept(new SlotWidget(filterInventory, 0, 10, y + 15) - .setBackgroundTexture(GuiTextures.SLOT, GuiTextures.FILTER_SLOT_OVERLAY)); + public void initUI(int y, Consumer widgetGroup) { + widgetGroup.accept(new gregtech.api.gui.widgets.LabelWidget(10, y, "cover.pump.fluid_filter.title")); + widgetGroup.accept(new gregtech.api.gui.widgets.SlotWidget(filterInventory, 0, 10, y + 15) + .setBackgroundTexture(gregtech.api.gui.GuiTextures.SLOT, gregtech.api.gui.GuiTextures.FILTER_SLOT_OVERLAY)); this.initFilterUI(y + 15, widgetGroup); this.blacklistUI(y + 15, widgetGroup, () -> true); } - public void initFilterUI(int y, Consumer widgetGroup) { + public void initFilterUI(int y, Consumer widgetGroup) { widgetGroup.accept(new WidgetGroupFluidFilter(y, this::getFluidFilter, shouldShowTip())); } - public void blacklistUI(int y, Consumer widgetGroup, BooleanSupplier showBlacklistButton) { - ServerWidgetGroup blacklistButton = new ServerWidgetGroup(this::hasFluidFilter); - blacklistButton.addWidget(new ToggleButtonWidget(144, y, 18, 18, GuiTextures.BUTTON_BLACKLIST, + public void blacklistUI(int y, Consumer widgetGroup, BooleanSupplier showBlacklistButton) { + gregtech.api.gui.widgets.ServerWidgetGroup blacklistButton = new gregtech.api.gui.widgets.ServerWidgetGroup(this::hasFluidFilter); + blacklistButton.addWidget(new gregtech.api.gui.widgets.ToggleButtonWidget(144, y, 18, 18, gregtech.api.gui.GuiTextures.BUTTON_BLACKLIST, this::isBlacklistFilter, this::setBlacklistFilter).setPredicate(showBlacklistButton) .setTooltipText("cover.filter.blacklist")); widgetGroup.accept(blacklistButton); @@ -173,7 +166,7 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) panel.closePanel(); } }, true) - .size(18) + .size(18).marginRight(4) .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY)) .child(new ButtonWidget<>() .setEnabledIf(w -> hasFluidFilter()) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index bd06a28a4d1..f30f50f266e 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -152,7 +152,7 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) panel.closePanel(); } }, true) - .size(18) + .size(18).marginRight(4) .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY)) .child(new ButtonWidget<>() .setEnabledIf(w -> hasItemFilter()) From ebed3852db8b5297ebd05d2552b1108b6f7639be Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 15 Jan 2024 13:17:49 -0700 Subject: [PATCH 091/260] more margin add horizontal line to filter as cover --- .../gregtech/common/covers/CoverConveyor.java | 2 ++ .../gregtech/common/covers/CoverItemFilter.java | 15 +++++++++------ .../common/covers/filter/ItemFilterContainer.java | 2 +- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 7d0ebe6246c..6dc0537f1db 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -608,6 +608,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g private Widget createManualIoButton(EnumSyncValue value, ManualImportExportMode mode) { return new ToggleButton().size(18) + .marginRight(2) .value(boolValueOf(value, mode)) .background(GTGuiTextures.MC_BUTTON_DISABLED) .selectedBackground(GTGuiTextures.MC_BUTTON) @@ -621,6 +622,7 @@ private Widget createManualIoButton(EnumSyncValue createConveyorModeButton(EnumSyncValue value, ConveyorMode mode) { return new ToggleButton().size(18) + .marginRight(2) .value(boolValueOf(value, mode)) .background(GTGuiTextures.MC_BUTTON_DISABLED) .selectedBackground(GTGuiTextures.MC_BUTTON) diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 69f3a6751b5..0f253f1b376 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -1,9 +1,5 @@ package gregtech.common.covers; -import com.cleanroommc.modularui.utils.Alignment; -import com.cleanroommc.modularui.widgets.SlotGroupWidget; -import com.cleanroommc.modularui.widgets.layout.Column; - import gregtech.api.capability.impl.ItemHandlerDelegate; import gregtech.api.cover.CoverBase; import gregtech.api.cover.CoverDefinition; @@ -37,12 +33,16 @@ import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.drawable.Rectangle; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.value.sync.EnumSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.widget.Widget; +import com.cleanroommc.modularui.widgets.SlotGroupWidget; import com.cleanroommc.modularui.widgets.ToggleButton; +import com.cleanroommc.modularui.widgets.layout.Column; import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -159,15 +159,17 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag guiSyncManager.syncValue("filtering_mode", filteringMode); return getItemFilter().createPanel(guiSyncManager) - .size(176, 188).padding(7) + .size(176, 194).padding(7) .child(CoverWithUI.createTitleRow(getPickItem()).left(4)) .child(new Column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight() .child(new Row().coverChildrenHeight() - .widthRel(1f).marginBottom(4).left(0) + .widthRel(1f).left(0) .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_INSERT)) .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_EXTRACT)) .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_BOTH)) .child(IKey.str("Filter Mode").asWidget().align(Alignment.CenterRight))) + .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() + .height(1).widthRel(0.95f).margin(0, 4)) .child(getItemFilter().createWidgets(guiSyncManager).left(0))) .child(SlotGroupWidget.playerInventory(0).bottom(7).left(7)); } @@ -177,6 +179,7 @@ private Widget createFilterModeButton(EnumSyncValue IKey.lang("cover.universal.manual_import_export.mode.disabled"); diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index f30f50f266e..03268e3584a 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -152,7 +152,7 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) panel.closePanel(); } }, true) - .size(18).marginRight(4) + .size(18).marginRight(2) .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY)) .child(new ButtonWidget<>() .setEnabledIf(w -> hasItemFilter()) From ea0c6f7d99473e6c10b42610ff40a52324db63eb Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 15 Jan 2024 13:36:06 -0700 Subject: [PATCH 092/260] move common methods to CoverWithUI more work on ui --- .../java/gregtech/api/cover/CoverWithUI.java | 102 ++++++++++++++++++ .../gregtech/common/covers/CoverConveyor.java | 52 --------- .../common/covers/CoverFluidFilter.java | 18 +++- .../common/covers/CoverItemFilter.java | 21 +--- .../gregtech/common/covers/CoverPump.java | 61 ----------- 5 files changed, 119 insertions(+), 135 deletions(-) diff --git a/src/main/java/gregtech/api/cover/CoverWithUI.java b/src/main/java/gregtech/api/cover/CoverWithUI.java index 7ddf250bbca..2ad525d3e3e 100644 --- a/src/main/java/gregtech/api/cover/CoverWithUI.java +++ b/src/main/java/gregtech/api/cover/CoverWithUI.java @@ -1,11 +1,22 @@ package gregtech.api.cover; +import com.cleanroommc.modularui.utils.Alignment; +import com.cleanroommc.modularui.utils.MouseData; +import com.cleanroommc.modularui.widget.Widget; +import com.cleanroommc.modularui.widgets.ToggleButton; + import gregtech.api.gui.IUIHolder; import gregtech.api.gui.ModularUI; +import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuiTheme; import gregtech.api.mui.GregTechGuiScreen; import gregtech.api.mui.factory.CoverGuiFactory; +import gregtech.common.covers.CoverConveyor; +import gregtech.common.covers.FluidFilterMode; +import gregtech.common.covers.ItemFilterMode; +import gregtech.common.covers.ManualImportExportMode; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; @@ -107,6 +118,97 @@ default ParentWidget createSettingsRow() { return new ParentWidget<>().height(16).widthRel(1.0f).marginBottom(2); } + default Widget createManualIoButton(EnumSyncValue value, ManualImportExportMode mode) { + return new ToggleButton().size(18) + .marginRight(2) + .value(boolValueOf(value, mode)) + .background(GTGuiTextures.MC_BUTTON_DISABLED) + .selectedBackground(GTGuiTextures.MC_BUTTON) + .overlay(GTGuiTextures.MANUAL_IO_OVERLAY[mode.ordinal()]) + .addTooltipLine(switch (mode) { + case DISABLED -> IKey.lang("cover.universal.manual_import_export.mode.disabled"); + case UNFILTERED -> IKey.lang("cover.universal.manual_import_export.mode.unfiltered"); + case FILTERED -> IKey.lang("cover.universal.manual_import_export.mode.filtered"); + }); + } + + + default Widget createConveyorModeButton(EnumSyncValue value, CoverConveyor.ConveyorMode mode) { + return new ToggleButton().size(18) + .marginRight(2) + .value(boolValueOf(value, mode)) + .background(GTGuiTextures.MC_BUTTON_DISABLED) + .selectedBackground(GTGuiTextures.MC_BUTTON) + .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY[mode.ordinal()]) + .addTooltipLine(switch (mode) { + case EXPORT -> IKey.lang("cover.conveyor.mode.export"); + case IMPORT -> IKey.lang("cover.conveyor.mode.import"); + }); + } + + default Row createItemFilterModeRow(EnumSyncValue filteringMode) { + return new Row().coverChildrenHeight() + .widthRel(1f).left(0) + .child(createItemFilterModeButton(filteringMode, ItemFilterMode.FILTER_INSERT)) + .child(createItemFilterModeButton(filteringMode, ItemFilterMode.FILTER_EXTRACT)) + .child(createItemFilterModeButton(filteringMode, ItemFilterMode.FILTER_BOTH)) + .child(IKey.str("Filter Mode").asWidget().align(Alignment.CenterRight)); + } + + default Widget createItemFilterModeButton(EnumSyncValue value, ItemFilterMode mode) { + return new ToggleButton().size(18) + .value(boolValueOf(value, mode)) + .background(GTGuiTextures.MC_BUTTON_DISABLED) + .selectedBackground(GTGuiTextures.MC_BUTTON) + .marginRight(2) +// .overlay(GTGuiTextures.MANUAL_IO_OVERLAY[mode.ordinal()]) todo new overlays + .addTooltipLine(IKey.lang(mode.localeName)); + } + + default Row createFluidFilterModeRow(EnumSyncValue filteringMode) { + return new Row().coverChildrenHeight() + .widthRel(1f).left(0) + .child(createFluidFilterModeButton(filteringMode, FluidFilterMode.FILTER_FILL)) + .child(createFluidFilterModeButton(filteringMode, FluidFilterMode.FILTER_DRAIN)) + .child(createFluidFilterModeButton(filteringMode, FluidFilterMode.FILTER_BOTH)) + .child(IKey.str("Filter Mode").asWidget().align(Alignment.CenterRight)); + } + + default Widget createFluidFilterModeButton(EnumSyncValue value, FluidFilterMode mode) { + return new ToggleButton().size(18) + .value(boolValueOf(value, mode)) + .background(GTGuiTextures.MC_BUTTON_DISABLED) + .selectedBackground(GTGuiTextures.MC_BUTTON) + .marginRight(2) +// .overlay(GTGuiTextures.MANUAL_IO_OVERLAY[mode.ordinal()]) todo new overlays + .addTooltipLine(IKey.lang(mode.localeName)); + } + + default int getIncrementValue(MouseData data) { + int adjust = 1; + if (data.shift) adjust *= 4; + if (data.ctrl) adjust *= 16; + if (data.alt) adjust *= 64; + return adjust; + } + + default IKey createAdjustOverlay(boolean increment) { + final StringBuilder builder = new StringBuilder(); + builder.append(increment ? '+' : '-'); + builder.append(getIncrementValue(MouseData.create(-1))); + + float scale = 1f; + if (builder.length() == 3) { + scale = 0.8f; + } else if (builder.length() == 4) { + scale = 0.6f; + } else if (builder.length() > 4) { + scale = 0.5f; + } + return IKey.str(builder.toString()) + .scale(scale); + } + /** * Get a BoolValue for use with toggle buttons which are "linked together," * meaning only one of them can be pressed at a time. diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 6dc0537f1db..f637c98d967 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -606,58 +606,6 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g .height(18))); } - private Widget createManualIoButton(EnumSyncValue value, ManualImportExportMode mode) { - return new ToggleButton().size(18) - .marginRight(2) - .value(boolValueOf(value, mode)) - .background(GTGuiTextures.MC_BUTTON_DISABLED) - .selectedBackground(GTGuiTextures.MC_BUTTON) - .overlay(GTGuiTextures.MANUAL_IO_OVERLAY[mode.ordinal()]) - .addTooltipLine(switch (mode) { - case DISABLED -> IKey.lang("cover.universal.manual_import_export.mode.disabled"); - case UNFILTERED -> IKey.lang("cover.universal.manual_import_export.mode.unfiltered"); - case FILTERED -> IKey.lang("cover.universal.manual_import_export.mode.filtered"); - }); - } - - private Widget createConveyorModeButton(EnumSyncValue value, ConveyorMode mode) { - return new ToggleButton().size(18) - .marginRight(2) - .value(boolValueOf(value, mode)) - .background(GTGuiTextures.MC_BUTTON_DISABLED) - .selectedBackground(GTGuiTextures.MC_BUTTON) - .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY[mode.ordinal()]) - .addTooltipLine(switch (mode) { - case EXPORT -> IKey.lang("cover.conveyor.mode.export"); - case IMPORT -> IKey.lang("cover.conveyor.mode.import"); - }); - } - - protected int getIncrementValue(MouseData data) { - int adjust = 1; - if (data.shift) adjust *= 4; - if (data.ctrl) adjust *= 16; - if (data.alt) adjust *= 64; - return adjust; - } - - protected IKey createAdjustOverlay(boolean increment) { - final StringBuilder builder = new StringBuilder(); - builder.append(increment ? '+' : '-'); - builder.append(getIncrementValue(MouseData.create(-1))); - - float scale = 1f; - if (builder.length() == 3) { - scale = 0.8f; - } else if (builder.length() == 4) { - scale = 0.6f; - } else if (builder.length() > 4) { - scale = 0.5f; - } - return IKey.str(builder.toString()) - .scale(scale); - } - protected int getMaxStackSize() { return 1; } diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 038983c7015..2742df9ad7e 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -1,5 +1,12 @@ package gregtech.common.covers; +import com.cleanroommc.modularui.drawable.Rectangle; + +import com.cleanroommc.modularui.utils.Alignment; +import com.cleanroommc.modularui.value.sync.EnumSyncValue; + +import com.cleanroommc.modularui.widgets.layout.Column; + import gregtech.api.capability.impl.FluidHandlerDelegate; import gregtech.api.cover.CoverBase; import gregtech.api.cover.CoverDefinition; @@ -147,9 +154,16 @@ public boolean usesMui2() { @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { - return getFluidFilter().createPanel(guiSyncManager).padding(7) + var filteringMode = new EnumSyncValue<>(FluidFilterMode.class, this::getFilterMode, this::setFilterMode); + + return getFluidFilter().createPanel(guiSyncManager) + .size(176, 194).padding(7) .child(CoverWithUI.createTitleRow(getPickItem())) - .child(getFluidFilter().createWidgets(guiSyncManager).top(22)) + .child(new Column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight() + .child(createFluidFilterModeRow(filteringMode)) + .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() + .height(1).widthRel(0.95f).margin(0, 4)) + .child(getFluidFilter().createWidgets(guiSyncManager))) .child(SlotGroupWidget.playerInventory(0).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 0f253f1b376..62bb5a66d9c 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -162,32 +162,13 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .size(176, 194).padding(7) .child(CoverWithUI.createTitleRow(getPickItem()).left(4)) .child(new Column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight() - .child(new Row().coverChildrenHeight() - .widthRel(1f).left(0) - .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_INSERT)) - .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_EXTRACT)) - .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_BOTH)) - .child(IKey.str("Filter Mode").asWidget().align(Alignment.CenterRight))) + .child(createItemFilterModeRow(filteringMode)) .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() .height(1).widthRel(0.95f).margin(0, 4)) .child(getItemFilter().createWidgets(guiSyncManager).left(0))) .child(SlotGroupWidget.playerInventory(0).bottom(7).left(7)); } - private Widget createFilterModeButton(EnumSyncValue value, ItemFilterMode mode) { - return new ToggleButton().size(18) - .value(boolValueOf(value, mode)) - .background(GTGuiTextures.MC_BUTTON_DISABLED) - .selectedBackground(GTGuiTextures.MC_BUTTON) - .marginRight(2) -// .overlay(GTGuiTextures.MANUAL_IO_OVERLAY[mode.ordinal()]) todo new overlays - .addTooltipLine(switch (mode) { - case FILTER_INSERT -> IKey.lang("cover.universal.manual_import_export.mode.disabled"); - case FILTER_EXTRACT -> IKey.lang("cover.universal.manual_import_export.mode.unfiltered"); - case FILTER_BOTH -> IKey.lang("cover.universal.manual_import_export.mode.filtered"); - }); - } - @Override public void renderCover(CCRenderState renderState, Matrix4 translation, IVertexOperation[] pipeline, Cuboid6 plateBox, BlockRenderLayer layer) { diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index a626a325566..aea1769028b 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -321,67 +321,6 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa .height(18))); } - private Widget createManualIoButton(EnumSyncValue value, ManualImportExportMode mode) { - return new ToggleButton().size(18) - .value(boolValueOf(value, mode)) - .background(GTGuiTextures.MC_BUTTON_DISABLED) - .selectedBackground(GTGuiTextures.MC_BUTTON) - .overlay(GTGuiTextures.MANUAL_IO_OVERLAY[mode.ordinal()]) - .addTooltipLine(switch (mode) { - case DISABLED -> IKey.lang("cover.universal.manual_import_export.mode.disabled"); - case UNFILTERED -> IKey.lang("cover.universal.manual_import_export.mode.unfiltered"); - case FILTERED -> IKey.lang("cover.universal.manual_import_export.mode.filtered"); - }); - } - - protected int getIncrementValue(MouseData data) { - int adjust = 1; - if (data.shift) adjust *= 4; - if (data.ctrl) adjust *= 16; - if (data.alt) adjust *= 64; - return adjust; - } - - protected IKey createAdjustOverlay(boolean increment) { - final StringBuilder builder = new StringBuilder(); - builder.append(increment ? '+' : '-'); - builder.append(getIncrementValue(MouseData.create(-1))); - - float scale = 1f; - if (builder.length() == 3) { - scale = 0.8f; - } else if (builder.length() == 4) { - scale = 0.6f; - } else if (builder.length() > 4) { - scale = 0.5f; - } - return IKey.str(builder.toString()) - .scale(scale); - } - - public static Function getTextFieldValidator(IntSupplier maxSupplier) { - int min = 1; - return val -> { - if (val.isEmpty()) { - return String.valueOf(min); - } - int max = maxSupplier.getAsInt(); - int num; - try { - num = Integer.parseInt(val); - } catch (NumberFormatException ignored) { - return String.valueOf(max); - } - if (num < min) { - return String.valueOf(min); - } - if (num > max) { - return String.valueOf(max); - } - return val; - }; - } - @Override public @NotNull EnumActionResult onScrewdriverClick(@NotNull EntityPlayer playerIn, @NotNull EnumHand hand, @NotNull CuboidRayTraceResult hitResult) { From 08cd23d932e935dde24c9725e0781fb21214bc7e Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 15 Jan 2024 19:09:29 -0700 Subject: [PATCH 093/260] add more methods to CoverWithUI work on robot arm, pump, and regulator ui --- .../java/gregtech/api/cover/CoverWithUI.java | 49 ++++++++++++++----- .../common/covers/CoverFluidRegulator.java | 36 ++++++++++++++ .../gregtech/common/covers/CoverPump.java | 12 +++-- .../common/covers/CoverRoboticArm.java | 47 ++++++------------ 4 files changed, 97 insertions(+), 47 deletions(-) diff --git a/src/main/java/gregtech/api/cover/CoverWithUI.java b/src/main/java/gregtech/api/cover/CoverWithUI.java index 2ad525d3e3e..14b2862c684 100644 --- a/src/main/java/gregtech/api/cover/CoverWithUI.java +++ b/src/main/java/gregtech/api/cover/CoverWithUI.java @@ -13,10 +13,13 @@ import gregtech.api.mui.factory.CoverGuiFactory; import gregtech.common.covers.CoverConveyor; +import gregtech.common.covers.CoverPump; import gregtech.common.covers.FluidFilterMode; import gregtech.common.covers.ItemFilterMode; import gregtech.common.covers.ManualImportExportMode; +import gregtech.common.covers.TransferMode; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; @@ -125,25 +128,47 @@ default Widget createManualIoButton(EnumSyncValue IKey.lang("cover.universal.manual_import_export.mode.disabled"); - case UNFILTERED -> IKey.lang("cover.universal.manual_import_export.mode.unfiltered"); - case FILTERED -> IKey.lang("cover.universal.manual_import_export.mode.filtered"); - }); + .addTooltipLine(IKey.lang(mode.localeName)); } + default Widget createTransferModeButton(EnumSyncValue value, TransferMode mode) { + return new ToggleButton().size(18) + .marginRight(2) + .value(boolValueOf(value, mode)) + .background(GTGuiTextures.MC_BUTTON_DISABLED) + .selectedBackground(GTGuiTextures.MC_BUTTON) +// .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY[mode.ordinal()]) + .addTooltipLine(IKey.lang(mode.localeName)); + } + + default Row createTransferModeRow(EnumSyncValue transferMode) { + return new Row().marginBottom(2).coverChildrenHeight().widthRel(1f) + .child(createTransferModeButton(transferMode, TransferMode.TRANSFER_ANY)) + .child(createTransferModeButton(transferMode, TransferMode.TRANSFER_EXACT)) + .child(createTransferModeButton(transferMode, TransferMode.KEEP_EXACT)) + .child(IKey.lang("Transfer Mode").asWidget() + .align(Alignment.CenterRight) + .height(18)); + } - default Widget createConveyorModeButton(EnumSyncValue value, CoverConveyor.ConveyorMode mode) { + default ToggleButton createConveyorModeButton(EnumSyncValue value, CoverConveyor.ConveyorMode mode) { return new ToggleButton().size(18) .marginRight(2) .value(boolValueOf(value, mode)) .background(GTGuiTextures.MC_BUTTON_DISABLED) .selectedBackground(GTGuiTextures.MC_BUTTON) .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY[mode.ordinal()]) - .addTooltipLine(switch (mode) { - case EXPORT -> IKey.lang("cover.conveyor.mode.export"); - case IMPORT -> IKey.lang("cover.conveyor.mode.import"); - }); + .addTooltipLine(IKey.lang(mode.localeName)); + } + + default ToggleButton createPumpModeButton(EnumSyncValue value, CoverPump.PumpMode mode) { + return new ToggleButton().size(18) + .marginRight(2) + .value(boolValueOf(value, mode)) + .background(GTGuiTextures.MC_BUTTON_DISABLED) + .selectedBackground(GTGuiTextures.MC_BUTTON) + .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY[mode.ordinal()]) + .addTooltipLine(IKey.lang(mode.localeName)); } default Row createItemFilterModeRow(EnumSyncValue filteringMode) { @@ -155,7 +180,7 @@ default Row createItemFilterModeRow(EnumSyncValue filteringMode) .child(IKey.str("Filter Mode").asWidget().align(Alignment.CenterRight)); } - default Widget createItemFilterModeButton(EnumSyncValue value, ItemFilterMode mode) { + default ToggleButton createItemFilterModeButton(EnumSyncValue value, ItemFilterMode mode) { return new ToggleButton().size(18) .value(boolValueOf(value, mode)) .background(GTGuiTextures.MC_BUTTON_DISABLED) @@ -174,7 +199,7 @@ default Row createFluidFilterModeRow(EnumSyncValue filteringMod .child(IKey.str("Filter Mode").asWidget().align(Alignment.CenterRight)); } - default Widget createFluidFilterModeButton(EnumSyncValue value, FluidFilterMode mode) { + default ToggleButton createFluidFilterModeButton(EnumSyncValue value, FluidFilterMode mode) { return new ToggleButton().size(18) .value(boolValueOf(value, mode)) .background(GTGuiTextures.MC_BUTTON_DISABLED) diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 553f2734b46..e7540aec580 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -1,5 +1,17 @@ package gregtech.common.covers; +import com.cleanroommc.modularui.factory.SidedPosGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Color; +import com.cleanroommc.modularui.value.sync.EnumSyncValue; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.value.sync.IntSyncValue; +import com.cleanroommc.modularui.widget.ParentWidget; + +import com.cleanroommc.modularui.widgets.layout.Row; + +import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; + import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; import gregtech.api.gui.GuiTextures; @@ -340,6 +352,30 @@ protected ModularUI buildUI(ModularUI.Builder builder, EntityPlayer player) { return super.buildUI(builder.widget(filterGroup).widget(stackSizeGroup), player); } + @Override + public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { + return super.buildUI(guiData, guiSyncManager).height(192 + 36); + } + + @Override + protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { + var transferMode = new EnumSyncValue<>(TransferMode.class, this::getTransferMode, this::setTransferMode); + syncManager.syncValue("transfer_mode", transferMode); + + var filterTransferSize = new IntSyncValue( + getFluidFilterContainer()::getMaxTransferSize, + getFluidFilterContainer()::setMaxTransferSize); + filterTransferSize.updateCacheFromSource(true); + + return super.createUI(mainPanel, syncManager) + .child(createTransferModeRow(transferMode)) + .child(new Row().right(0).coverChildrenHeight() + .child(new TextFieldWidget().widthRel(0.5f).right(0) + .setEnabledIf(w -> shouldDisplayAmountSlider()) + .value(filterTransferSize) + .setTextColor(Color.WHITE.darker(1)))); + } + @Override public void writeToNBT(@NotNull NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index aea1769028b..049877e1d08 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -266,10 +266,10 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag } protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { - EnumSyncValue manualIOmode = new EnumSyncValue<>(ManualImportExportMode.class, + var manualIOmode = new EnumSyncValue<>(ManualImportExportMode.class, this::getManualImportExportMode, this::setManualImportExportMode); - - IntSyncValue throughput = new IntSyncValue(this::getTransferRate, this::setTransferRate); + var throughput = new IntSyncValue(this::getTransferRate, this::setTransferRate); + var pumpMode = new EnumSyncValue<>(PumpMode.class, this::getPumpMode, this::setPumpMode); syncManager.syncValue("manual_io", manualIOmode); @@ -318,7 +318,11 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa .child(IKey.lang("Manual IO Mode") .asWidget() .align(Alignment.CenterRight) - .height(18))); + .height(18))) + .child(new Row().coverChildrenHeight() + .marginBottom(2).widthRel(1f) + .child(createPumpModeButton(pumpMode, PumpMode.IMPORT)) + .child(createPumpModeButton(pumpMode, PumpMode.EXPORT))); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index ce102944a20..ae4bb4a8159 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -1,8 +1,5 @@ package gregtech.common.covers; -import com.cleanroommc.modularui.value.sync.IntSyncValue; -import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; - import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; import gregtech.api.gui.GuiTextures; @@ -14,7 +11,6 @@ import gregtech.api.gui.widgets.ServerWidgetGroup; import gregtech.api.gui.widgets.TextFieldWidget2; import gregtech.api.gui.widgets.WidgetGroup; -import gregtech.api.mui.GTGuiTextures; import gregtech.client.renderer.texture.Textures; import gregtech.common.covers.filter.SmartItemFilter; import gregtech.common.pipelike.itempipe.net.ItemNetHandler; @@ -32,16 +28,16 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; -import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Alignment; +import com.cleanroommc.modularui.utils.Color; import com.cleanroommc.modularui.value.sync.EnumSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.value.sync.IntSyncValue; import com.cleanroommc.modularui.widget.ParentWidget; -import com.cleanroommc.modularui.widget.Widget; -import com.cleanroommc.modularui.widgets.ToggleButton; import com.cleanroommc.modularui.widgets.layout.Column; import com.cleanroommc.modularui.widgets.layout.Row; +import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; import org.jetbrains.annotations.NotNull; import java.util.Iterator; @@ -185,6 +181,7 @@ public void clearBuffer() { public void setTransferMode(TransferMode transferMode) { this.transferMode = transferMode; this.getCoverableView().markDirty(); + getItemFilterContainer().setFilterStackSizer(this::getMaxStackSize); if (getItemFilterContainer().hasItemFilter()) { getItemFilterContainer().getItemFilter().onMaxStackSizeChange(); } @@ -206,40 +203,28 @@ protected String getUITitle() { return "cover.robotic_arm.title"; } + @Override + public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { + return super.buildUI(guiData, guiSyncManager).height(192 + 36); + } + @Override protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager guiSyncManager) { EnumSyncValue transferMode = new EnumSyncValue<>(TransferMode.class, this::getTransferMode, this::setTransferMode); guiSyncManager.syncValue("transfer_mode", transferMode); var filterTransferSize = new IntSyncValue( - () -> getItemFilterContainer().getTransferStackSize(), - i -> getItemFilterContainer().setTransferStackSize(i)); + getItemFilterContainer()::getTransferStackSize, + getItemFilterContainer()::setTransferStackSize); + filterTransferSize.updateCacheFromSource(true); return super.createUI(mainPanel, guiSyncManager) - .child(new Row().marginBottom(2).coverChildrenHeight().widthRel(1f) - .child(createTransferModeButton(transferMode, TransferMode.TRANSFER_ANY)) - .child(createTransferModeButton(transferMode, TransferMode.TRANSFER_EXACT)) - .child(createTransferModeButton(transferMode, TransferMode.KEEP_EXACT)) - .child(IKey.lang("Transfer Mode").asWidget() - .align(Alignment.CenterRight) - .height(18))) + .child(createTransferModeRow(transferMode)) .child(new Row().right(0).coverChildrenHeight() .child(new TextFieldWidget().widthRel(0.5f).right(0) .setEnabledIf(w -> shouldDisplayAmountSlider()) - .value(filterTransferSize))); - } - - private Widget createTransferModeButton(EnumSyncValue value, TransferMode mode) { - return new ToggleButton().size(18) - .value(boolValueOf(value, mode)) - .background(GTGuiTextures.MC_BUTTON_DISABLED) - .selectedBackground(GTGuiTextures.MC_BUTTON) -// .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY[mode.ordinal()]) - .addTooltipLine(switch (mode) { - case TRANSFER_ANY -> IKey.lang("cover.robotic_arm.transfer_mode.transfer_any"); - case TRANSFER_EXACT -> IKey.lang("cover.robotic_arm.transfer_mode.transfer_exact"); - case KEEP_EXACT -> IKey.lang("cover.robotic_arm.transfer_mode.keep_exact"); - }); + .value(filterTransferSize) + .setTextColor(Color.WHITE.darker(1)))); } @Override From 842385341c111e2b4d70de676d6322fa08d1adf7 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 15 Jan 2024 19:09:50 -0700 Subject: [PATCH 094/260] try and make fluid filter container similar to item container --- .../common/covers/filter/FluidFilter.java | 45 +++++++++++++++++-- .../covers/filter/FluidFilterContainer.java | 25 ++++++++++- .../covers/filter/ItemFilterContainer.java | 5 ++- .../covers/filter/SimpleFluidFilter.java | 21 +++++---- 4 files changed, 80 insertions(+), 16 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index fc1ee5214ba..3a132917c30 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -24,20 +24,20 @@ import org.jetbrains.annotations.NotNull; import java.util.function.Consumer; +import java.util.function.Supplier; public abstract class FluidFilter implements Filter { private IDirtyNotifiable dirtyNotifiable; boolean showTip; + private OnMatch onMatch = null; private BaseFluidFilterReader filterReader; protected void setFilterReader(BaseFluidFilterReader filterReader) { this.filterReader = filterReader; } - private OnMatch onMatch = null; - public abstract void match(FluidStack toMatch); public abstract boolean test(FluidStack fluidStack); @@ -68,6 +68,30 @@ protected final void onMatch(boolean matched, FluidStack stack, int index) { public abstract ItemStack getContainerStack(); + public boolean showGlobalTransferLimitSlider() { + return false; + } + + public int getMaxTransferSize() { + return this.filterReader.getMaxCapacity(); + } + + public final void setMaxTransferSize(int maxStackSize) { + setMaxStackSizer(() -> maxStackSize); + } + + public final void setMaxStackSizer(Supplier maxStackSizer) { + this.filterReader.setMaxCapacitySizer(maxStackSizer); + } + + public Supplier getMaxStackSizer() { + return this.filterReader.getMaxStackSizer(); + } + + public final void onMaxStackSizeChange() { + this.filterReader.onMaxStackSizeChange(); + } + public abstract void readFromNBT(NBTTagCompound tagCompound); public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { @@ -76,8 +100,6 @@ public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { public abstract void configureFilterTanks(int amount); - public abstract void setMaxConfigurableFluidSize(int maxStackSize); - public boolean isBlacklist() { return this.filterReader.isBlacklistFilter(); } @@ -121,7 +143,22 @@ public FluidStack getFluidStack(int i) { @Override public void onMaxStackSizeChange() { + this.cache = maxStackSizer.get(); + } + + public final void setMaxCapacitySizer(Supplier maxStackSizer) { + if (this.cache != maxStackSizer.get()) { + this.maxStackSizer = maxStackSizer; + onMaxStackSizeChange(); + } + } + + public final int getMaxCapacity() { + return this.isBlacklistFilter() ? 1000 : this.cache; + } + public Supplier getMaxStackSizer() { + return this.maxStackSizer; } } } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 60b79fb68d3..9a28538549b 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -6,6 +6,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; +import net.minecraft.util.math.MathHelper; import net.minecraftforge.common.util.INBTSerializable; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.ItemStackHandler; @@ -36,6 +37,7 @@ public class FluidFilterContainer implements INBTSerializable { private final IDirtyNotifiable dirtyNotifiable; private FluidFilter currentFluidFilter; private Supplier showTipSupplier; + private Supplier maxFluidSizer = () -> this.maxSize; private int maxSize; public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable, int capacity) { @@ -75,7 +77,7 @@ public void setFluidFilter(FluidFilter fluidFilter) { this.currentFluidFilter = fluidFilter; if (hasFluidFilter()) { currentFluidFilter.setDirtyNotifiable(dirtyNotifiable); - currentFluidFilter.setMaxConfigurableFluidSize(maxSize); + currentFluidFilter.setMaxStackSizer(maxFluidSizer); } } @@ -193,6 +195,27 @@ public boolean hasFluidFilter() { return currentFluidFilter != null; } + public boolean showGlobalTransferLimitSlider() { + return getMaxStackSize() > 1 && (isBlacklistFilter() || !hasFluidFilter() || currentFluidFilter.showGlobalTransferLimitSlider()); + } + + public int getMaxTransferSize() { + if (!showGlobalTransferLimitSlider()) { + return getMaxStackSize(); + } + return maxSize; + } + + public void setMaxTransferSize(int transferStackSize) { + this.maxSize = MathHelper.clamp(transferStackSize, 1, getMaxStackSize()); + onFilterInstanceChange(); + dirtyNotifiable.markAsDirty(); + } + + public int getMaxStackSize() { + return hasFluidFilter() ? currentFluidFilter.getMaxTransferSize() : maxFluidSizer.get(); + } + public void writeInitialSyncData(PacketBuffer packetBuffer) { packetBuffer.writeItemStack(getFilterInventory().getStackInSlot(0)); } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 03268e3584a..ad15856a5da 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -72,7 +72,7 @@ public ItemFilterWrapper getFilterWrapper() { } public int getMaxStackSize() { - return hasItemFilter() ? currentItemFilter.getMaxStackSize() : 1; + return hasItemFilter() ? currentItemFilter.getMaxStackSize() : stackSizer.get(); } public int getTransferStackSize() { @@ -213,8 +213,9 @@ public void setMaxStackSize(int maxStackSizeLimit) { public void setFilterStackSizer(Supplier stackSizer) { this.stackSizer = stackSizer; } + public boolean showGlobalTransferLimitSlider() { - return getMaxStackSize() > 1 && (isBlacklistFilter() || !hasItemFilter()|| currentItemFilter.showGlobalTransferLimitSlider()); + return getMaxStackSize() > 1 && (isBlacklistFilter() || !hasItemFilter() || currentItemFilter.showGlobalTransferLimitSlider()); } public int getSlotTransferLimit(int slotIndex) { diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 375ec82dd44..2c322935fde 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -43,13 +43,6 @@ public void configureFilterTanks(int amount) { this.markDirty(); } - @Override - public void setMaxConfigurableFluidSize(int maxSize) { - for (int i = 0; i < filterReader.getSlots(); i++) { - filterReader.getFluidTank(i).setCapacity(maxSize); - } - } - @Override public ItemStack getContainerStack() { return this.filterReader.getContainer(); @@ -92,15 +85,17 @@ public ItemStack getContainerStack() { public void match(FluidStack toMatch) { boolean matched = false; int index = -1; + var returnable = toMatch.copy(); for (int i = 0; i < filterReader.getSlots(); i++) { var fluid = filterReader.getFluidStack(i); if (fluid != null && fluid.isFluidEqual(toMatch)) { matched = true; index = i; + returnable.amount = fluid.amount; break; } } - this.onMatch(matched, toMatch.copy(), index); + this.onMatch(matched, returnable, index); } @Override @@ -152,7 +147,7 @@ public int getFluidTransferLimit(FluidStack fluidStack) { } return limit; } - protected class SimpleFluidFilterReader extends BaseFluidFilterReader { + protected static class SimpleFluidFilterReader extends BaseFluidFilterReader { public SimpleFluidFilterReader(ItemStack container, int slots) { super(container, slots); } @@ -166,6 +161,14 @@ public void setFluidAmounts(int amount) { getFluidTank(i).setFluidAmount(amount); } } + + @Override + public void onMaxStackSizeChange() { + super.onMaxStackSizeChange(); + for (int i = 0; i < getSlots(); i++) { + getFluidTank(i).setCapacity(getMaxCapacity()); + } + } } public static class WritableFluidTank implements IFluidTank { From ff86052b4adc528a78c7c5f927d14bbac545f8ec Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 16 Jan 2024 13:54:27 -0700 Subject: [PATCH 095/260] make enum row creation into a builder remove redundant methods register pumpmode to sync manager --- .../java/gregtech/api/cover/CoverWithUI.java | 179 ++++++++---------- .../gregtech/common/covers/CoverConveyor.java | 31 +-- .../common/covers/CoverFluidFilter.java | 6 +- .../common/covers/CoverItemFilter.java | 11 +- .../gregtech/common/covers/CoverPump.java | 31 ++- .../common/covers/CoverRoboticArm.java | 6 +- 6 files changed, 114 insertions(+), 150 deletions(-) diff --git a/src/main/java/gregtech/api/cover/CoverWithUI.java b/src/main/java/gregtech/api/cover/CoverWithUI.java index 14b2862c684..1f568a9f6c6 100644 --- a/src/main/java/gregtech/api/cover/CoverWithUI.java +++ b/src/main/java/gregtech/api/cover/CoverWithUI.java @@ -1,10 +1,5 @@ package gregtech.api.cover; -import com.cleanroommc.modularui.utils.Alignment; -import com.cleanroommc.modularui.utils.MouseData; -import com.cleanroommc.modularui.widget.Widget; -import com.cleanroommc.modularui.widgets.ToggleButton; - import gregtech.api.gui.IUIHolder; import gregtech.api.gui.ModularUI; import gregtech.api.mui.GTGuiTextures; @@ -12,31 +7,28 @@ import gregtech.api.mui.GregTechGuiScreen; import gregtech.api.mui.factory.CoverGuiFactory; -import gregtech.common.covers.CoverConveyor; -import gregtech.common.covers.CoverPump; -import gregtech.common.covers.FluidFilterMode; -import gregtech.common.covers.ItemFilterMode; -import gregtech.common.covers.ManualImportExportMode; - -import gregtech.common.covers.TransferMode; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; +import net.minecraft.util.IStringSerializable; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import com.cleanroommc.modularui.api.IGuiHolder; +import com.cleanroommc.modularui.api.drawable.IDrawable; import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.drawable.ItemDrawable; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.screen.ModularScreen; +import com.cleanroommc.modularui.utils.Alignment; +import com.cleanroommc.modularui.utils.MouseData; import com.cleanroommc.modularui.value.BoolValue; import com.cleanroommc.modularui.value.sync.EnumSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.IntSyncValue; import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widgets.ToggleButton; import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.ApiStatus; @@ -121,94 +113,6 @@ default ParentWidget createSettingsRow() { return new ParentWidget<>().height(16).widthRel(1.0f).marginBottom(2); } - default Widget createManualIoButton(EnumSyncValue value, ManualImportExportMode mode) { - return new ToggleButton().size(18) - .marginRight(2) - .value(boolValueOf(value, mode)) - .background(GTGuiTextures.MC_BUTTON_DISABLED) - .selectedBackground(GTGuiTextures.MC_BUTTON) - .overlay(GTGuiTextures.MANUAL_IO_OVERLAY[mode.ordinal()]) - .addTooltipLine(IKey.lang(mode.localeName)); - } - - default Widget createTransferModeButton(EnumSyncValue value, TransferMode mode) { - return new ToggleButton().size(18) - .marginRight(2) - .value(boolValueOf(value, mode)) - .background(GTGuiTextures.MC_BUTTON_DISABLED) - .selectedBackground(GTGuiTextures.MC_BUTTON) -// .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY[mode.ordinal()]) - .addTooltipLine(IKey.lang(mode.localeName)); - } - - default Row createTransferModeRow(EnumSyncValue transferMode) { - return new Row().marginBottom(2).coverChildrenHeight().widthRel(1f) - .child(createTransferModeButton(transferMode, TransferMode.TRANSFER_ANY)) - .child(createTransferModeButton(transferMode, TransferMode.TRANSFER_EXACT)) - .child(createTransferModeButton(transferMode, TransferMode.KEEP_EXACT)) - .child(IKey.lang("Transfer Mode").asWidget() - .align(Alignment.CenterRight) - .height(18)); - } - - default ToggleButton createConveyorModeButton(EnumSyncValue value, CoverConveyor.ConveyorMode mode) { - return new ToggleButton().size(18) - .marginRight(2) - .value(boolValueOf(value, mode)) - .background(GTGuiTextures.MC_BUTTON_DISABLED) - .selectedBackground(GTGuiTextures.MC_BUTTON) - .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY[mode.ordinal()]) - .addTooltipLine(IKey.lang(mode.localeName)); - } - - default ToggleButton createPumpModeButton(EnumSyncValue value, CoverPump.PumpMode mode) { - return new ToggleButton().size(18) - .marginRight(2) - .value(boolValueOf(value, mode)) - .background(GTGuiTextures.MC_BUTTON_DISABLED) - .selectedBackground(GTGuiTextures.MC_BUTTON) - .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY[mode.ordinal()]) - .addTooltipLine(IKey.lang(mode.localeName)); - } - - default Row createItemFilterModeRow(EnumSyncValue filteringMode) { - return new Row().coverChildrenHeight() - .widthRel(1f).left(0) - .child(createItemFilterModeButton(filteringMode, ItemFilterMode.FILTER_INSERT)) - .child(createItemFilterModeButton(filteringMode, ItemFilterMode.FILTER_EXTRACT)) - .child(createItemFilterModeButton(filteringMode, ItemFilterMode.FILTER_BOTH)) - .child(IKey.str("Filter Mode").asWidget().align(Alignment.CenterRight)); - } - - default ToggleButton createItemFilterModeButton(EnumSyncValue value, ItemFilterMode mode) { - return new ToggleButton().size(18) - .value(boolValueOf(value, mode)) - .background(GTGuiTextures.MC_BUTTON_DISABLED) - .selectedBackground(GTGuiTextures.MC_BUTTON) - .marginRight(2) -// .overlay(GTGuiTextures.MANUAL_IO_OVERLAY[mode.ordinal()]) todo new overlays - .addTooltipLine(IKey.lang(mode.localeName)); - } - - default Row createFluidFilterModeRow(EnumSyncValue filteringMode) { - return new Row().coverChildrenHeight() - .widthRel(1f).left(0) - .child(createFluidFilterModeButton(filteringMode, FluidFilterMode.FILTER_FILL)) - .child(createFluidFilterModeButton(filteringMode, FluidFilterMode.FILTER_DRAIN)) - .child(createFluidFilterModeButton(filteringMode, FluidFilterMode.FILTER_BOTH)) - .child(IKey.str("Filter Mode").asWidget().align(Alignment.CenterRight)); - } - - default ToggleButton createFluidFilterModeButton(EnumSyncValue value, FluidFilterMode mode) { - return new ToggleButton().size(18) - .value(boolValueOf(value, mode)) - .background(GTGuiTextures.MC_BUTTON_DISABLED) - .selectedBackground(GTGuiTextures.MC_BUTTON) - .marginRight(2) -// .overlay(GTGuiTextures.MANUAL_IO_OVERLAY[mode.ordinal()]) todo new overlays - .addTooltipLine(IKey.lang(mode.localeName)); - } - default int getIncrementValue(MouseData data) { int adjust = 1; if (data.shift) adjust *= 4; @@ -249,4 +153,77 @@ default > BoolValue.Dynamic boolValueOf(EnumSyncValue syncV default BoolValue.Dynamic boolValueOf(IntSyncValue syncValue, int value) { return new BoolValue.Dynamic(() -> syncValue.getValue() == value, $ -> syncValue.setValue(value)); } + + class EnumRowBuilder> { + + private EnumSyncValue syncValue; + private final Class enumValue; + private String lang; + private IDrawable[] background; + private IDrawable selectedBackground; + private IDrawable[] overlay; + + public EnumRowBuilder(Class enumValue) { + this.enumValue = enumValue; + } + + public EnumRowBuilder value(EnumSyncValue syncValue) { + this.syncValue = syncValue; + return this; + } + + public EnumRowBuilder lang(String lang) { + this.lang = lang; + return this; + } + + public EnumRowBuilder background(IDrawable... background) { + this.background = background; + return this; + } + + public EnumRowBuilder selectedBackground(IDrawable selectedBackground) { + this.selectedBackground = selectedBackground; + return this; + } + + public EnumRowBuilder overlay(IDrawable... overlay) { + this.overlay = overlay; + return this; + } + + private BoolValue.Dynamic boolValueOf(EnumSyncValue syncValue, T value) { + return new BoolValue.Dynamic(() -> syncValue.getValue() == value, $ -> syncValue.setValue(value)); + } + + public Row build() { + var row = new Row().marginBottom(2).coverChildrenHeight().widthRel(1f); + if (this.enumValue != null && this.syncValue != null) { + for (var enumVal : enumValue.getEnumConstants()) { + var button = new ToggleButton().size(18).marginRight(2) + .value(boolValueOf(this.syncValue, enumVal)); + + if (this.background != null && this.background.length > 0) + button.background(this.background); + else + button.background(GTGuiTextures.MC_BUTTON_DISABLED); + + if (this.selectedBackground != null) + button.selectedBackground(this.selectedBackground); + else + button.selectedBackground(GTGuiTextures.MC_BUTTON); + + if (this.overlay != null) + button.overlay(this.overlay[enumVal.ordinal()]); + + if (enumVal instanceof IStringSerializable serializable) { + button.addTooltipLine(IKey.lang(serializable.getName())); + } + row.child(button); + } + } + row.child(IKey.lang(this.lang).asWidget().align(Alignment.CenterRight).height(18)); + return row; + } + } } diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index f637c98d967..b1c773f6e50 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -51,20 +51,16 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; -import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.api.widget.Interactable; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.utils.Color; import com.cleanroommc.modularui.utils.MouseData; import com.cleanroommc.modularui.value.sync.EnumSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.IntSyncValue; import com.cleanroommc.modularui.widget.ParentWidget; -import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.ButtonWidget; -import com.cleanroommc.modularui.widgets.ToggleButton; import com.cleanroommc.modularui.widgets.layout.Column; import com.cleanroommc.modularui.widgets.layout.Row; import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; @@ -587,23 +583,16 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g .onUpdateListener(w -> w.overlay(createAdjustOverlay(true))))) .child(getItemFilterContainer() .initUI(mainPanel, guiSyncManager)) - .child(new Row().coverChildrenHeight() - .marginBottom(2).widthRel(1f) - .child(createManualIoButton(manualIOmode, ManualImportExportMode.DISABLED)) - .child(createManualIoButton(manualIOmode, ManualImportExportMode.UNFILTERED)) - .child(createManualIoButton(manualIOmode, ManualImportExportMode.FILTERED)) - .child(IKey.lang("Manual IO Mode") - .asWidget() - .align(Alignment.CenterRight) - .height(18))) - .child(new Row().coverChildrenHeight() - .marginBottom(2).widthRel(1f) - .child(createConveyorModeButton(conveyorMode, ConveyorMode.IMPORT)) - .child(createConveyorModeButton(conveyorMode, ConveyorMode.EXPORT)) - .child(IKey.lang("Conveyor Mode") - .asWidget() - .align(Alignment.CenterRight) - .height(18))); + .child(new EnumRowBuilder<>(ManualImportExportMode.class) + .value(manualIOmode) + .lang("Manual IO Mode") + .overlay(GTGuiTextures.MANUAL_IO_OVERLAY) + .build()) + .child(new EnumRowBuilder<>(ConveyorMode.class) + .value(conveyorMode) + .lang("Conveyor Mode") + .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY) + .build()); } protected int getMaxStackSize() { diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 2742df9ad7e..d6809620619 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -160,7 +160,11 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .size(176, 194).padding(7) .child(CoverWithUI.createTitleRow(getPickItem())) .child(new Column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight() - .child(createFluidFilterModeRow(filteringMode)) + .child(new EnumRowBuilder<>(FluidFilterMode.class) + .value(filteringMode) + .lang("Filter Mode") +// .overlay() todo fluid filter overlays + .build()) .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() .height(1).widthRel(0.95f).margin(0, 4)) .child(getFluidFilter().createWidgets(guiSyncManager))) diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 62bb5a66d9c..be6ae501a08 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -7,7 +7,6 @@ import gregtech.api.cover.CoverableView; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.ModularUI; -import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; import gregtech.common.covers.filter.FilterTypeRegistry; @@ -32,18 +31,14 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; -import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.drawable.Rectangle; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.value.sync.EnumSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; -import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.SlotGroupWidget; -import com.cleanroommc.modularui.widgets.ToggleButton; import com.cleanroommc.modularui.widgets.layout.Column; -import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -162,7 +157,11 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .size(176, 194).padding(7) .child(CoverWithUI.createTitleRow(getPickItem()).left(4)) .child(new Column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight() - .child(createItemFilterModeRow(filteringMode)) + .child(new EnumRowBuilder<>(ItemFilterMode.class) + .value(filteringMode) + .lang("Filter Mode") +// .overlay() todo item filter overlays + .build()) .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() .height(1).widthRel(0.95f).margin(0, 4)) .child(getItemFilter().createWidgets(guiSyncManager).left(0))) diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 049877e1d08..aa1791cfea7 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -49,20 +49,16 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; -import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.api.widget.Interactable; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.utils.Color; import com.cleanroommc.modularui.utils.MouseData; import com.cleanroommc.modularui.value.sync.EnumSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.IntSyncValue; import com.cleanroommc.modularui.widget.ParentWidget; -import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.ButtonWidget; -import com.cleanroommc.modularui.widgets.ToggleButton; import com.cleanroommc.modularui.widgets.layout.Column; import com.cleanroommc.modularui.widgets.layout.Row; import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; @@ -70,9 +66,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.function.Function; -import java.util.function.IntSupplier; - public class CoverPump extends CoverBase implements CoverWithUI, ITickable, IControllable { public final int tier; @@ -272,6 +265,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa var pumpMode = new EnumSyncValue<>(PumpMode.class, this::getPumpMode, this::setPumpMode); syncManager.syncValue("manual_io", manualIOmode); + syncManager.syncValue("pump_mode", pumpMode); return new Column().top(24).margin(7, 0) .widthRel(1f).coverChildrenHeight() @@ -310,19 +304,16 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa .onUpdateListener(w -> w.overlay(createAdjustOverlay(true))))) .child(getFluidFilterContainer() .initUI(mainPanel, syncManager)) - .child(new Row().coverChildrenHeight() - .marginBottom(2).widthRel(1f) - .child(createManualIoButton(manualIOmode, ManualImportExportMode.DISABLED)) - .child(createManualIoButton(manualIOmode, ManualImportExportMode.UNFILTERED)) - .child(createManualIoButton(manualIOmode, ManualImportExportMode.FILTERED)) - .child(IKey.lang("Manual IO Mode") - .asWidget() - .align(Alignment.CenterRight) - .height(18))) - .child(new Row().coverChildrenHeight() - .marginBottom(2).widthRel(1f) - .child(createPumpModeButton(pumpMode, PumpMode.IMPORT)) - .child(createPumpModeButton(pumpMode, PumpMode.EXPORT))); + .child(new EnumRowBuilder<>(ManualImportExportMode.class) + .value(manualIOmode) + .lang("Manual IO") + .overlay(GTGuiTextures.MANUAL_IO_OVERLAY) + .build()) + .child(new EnumRowBuilder<>(PumpMode.class) + .value(pumpMode) + .lang("Pump Mode") + .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY) // todo pump mode overlays + .build()); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index ae4bb4a8159..1ae75ee968b 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -219,7 +219,11 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g filterTransferSize.updateCacheFromSource(true); return super.createUI(mainPanel, guiSyncManager) - .child(createTransferModeRow(transferMode)) + .child(new EnumRowBuilder<>(TransferMode.class) + .value(transferMode) + .lang("Transfer Mode") +// .overlay() todo transfer mode overlays + .build()) .child(new Row().right(0).coverChildrenHeight() .child(new TextFieldWidget().widthRel(0.5f).right(0) .setEnabledIf(w -> shouldDisplayAmountSlider()) From 14547f8e783713f1b001bd419b28ab4680cbe709 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 16 Jan 2024 16:26:46 -0700 Subject: [PATCH 096/260] even more filter refactoring create BaseFilterContainer for item/filter containers to extend more work on making fluid/item filters share common code rename some methods in Filter --- .../common/covers/CoverFluidRegulator.java | 20 +- .../common/covers/CoverFluidVoiding.java | 3 +- .../covers/CoverFluidVoidingAdvanced.java | 7 +- .../covers/CoverItemVoidingAdvanced.java | 16 +- .../gregtech/common/covers/CoverPump.java | 6 +- .../common/covers/CoverRoboticArm.java | 31 ++-- .../covers/filter/BaseFilterContainer.java | 162 +++++++++++++++++ .../gregtech/common/covers/filter/Filter.java | 21 ++- .../common/covers/filter/FluidFilter.java | 57 +++--- .../covers/filter/FluidFilterContainer.java | 159 +++------------- .../covers/filter/FluidFilterWrapper.java | 5 +- .../common/covers/filter/ItemFilter.java | 39 +--- .../covers/filter/ItemFilterContainer.java | 172 ++---------------- .../covers/filter/ItemFilterWrapper.java | 26 +-- .../filter/OreDictionaryItemFilter.java | 87 +-------- .../covers/filter/SimpleFluidFilter.java | 41 ++--- .../covers/filter/SimpleItemFilter.java | 15 +- .../common/covers/filter/SmartItemFilter.java | 8 +- .../covers/filter/WidgetGroupItemFilter.java | 6 +- .../filter/readers/BaseFilterReader.java | 21 ++- .../pipelike/itempipe/net/ItemNetHandler.java | 4 +- .../provider/CoverInfoProvider.java | 10 +- 22 files changed, 345 insertions(+), 571 deletions(-) create mode 100644 src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index e7540aec580..599c8aeca89 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -58,12 +58,7 @@ public class CoverFluidRegulator extends CoverPump { public CoverFluidRegulator(@NotNull CoverDefinition definition, @NotNull CoverableView coverableView, @NotNull EnumFacing attachedSide, int tier, int mbPerTick) { super(definition, coverableView, attachedSide, tier, mbPerTick); - this.fluidFilter = new FluidFilterContainer(this, this::shouldShowTip, maxFluidTransferRate * 100); - } - - @Override - protected boolean shouldShowTip() { - return transferMode != TransferMode.TRANSFER_ANY; + this.fluidFilter = new FluidFilterContainer(this); } public int getTransferAmount() { @@ -102,7 +97,7 @@ protected int doTransferExact(int transferLimit, IFluidHandler sourceHandler, IF FluidStack sourceFluid = tankProperties.getContents(); if (this.fluidFilter.getFilterWrapper().getFluidFilter() != null && transferMode != TransferMode.TRANSFER_ANY) { - supplyAmount = this.fluidFilter.getFilterWrapper().getFluidFilter().getFluidTransferLimit(sourceFluid); + supplyAmount = this.fluidFilter.getFilterWrapper().getFluidFilter().getTransferLimit(sourceFluid); } if (fluidLeftToTransfer < supplyAmount) break; @@ -146,7 +141,7 @@ protected int doKeepExact(final int transferLimit, if (this.fluidFilter.getFilterWrapper().getFluidFilter() != null && transferMode != TransferMode.TRANSFER_ANY) { - keepAmount = this.fluidFilter.getFilterWrapper().getFluidFilter().getFluidTransferLimit(fluidStack); + keepAmount = this.fluidFilter.getFilterWrapper().getFluidFilter().getTransferLimit(fluidStack); } // if fluid needs to be moved to meet the Keep Exact value @@ -256,10 +251,10 @@ public TransferMode getTransferMode() { } private boolean shouldDisplayAmountSlider() { - if (this.fluidFilter.getFilterWrapper().getFluidFilter() != null) { + if (!this.fluidFilter.hasFilter()) { return false; } - return this.transferMode == TransferMode.TRANSFER_EXACT || this.transferMode == TransferMode.KEEP_EXACT; + return this.transferMode != TransferMode.TRANSFER_ANY && this.fluidFilter.getFilter().showGlobalTransferLimitSlider(); } public String getTransferAmountString() { @@ -368,7 +363,10 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa filterTransferSize.updateCacheFromSource(true); return super.createUI(mainPanel, syncManager) - .child(createTransferModeRow(transferMode)) + .child(new EnumRowBuilder<>(TransferMode.class) + .value(transferMode) + .lang("Transfer Mode") + .build()) .child(new Row().right(0).coverChildrenHeight() .child(new TextFieldWidget().widthRel(0.5f).right(0) .setEnabledIf(w -> shouldDisplayAmountSlider()) diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoiding.java b/src/main/java/gregtech/common/covers/CoverFluidVoiding.java index 4c1f097ccee..f9476a66fcd 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoiding.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoiding.java @@ -39,7 +39,8 @@ public CoverFluidVoiding(@NotNull CoverDefinition definition, @NotNull Coverable @NotNull EnumFacing attachedSide) { super(definition, coverableView, attachedSide, 0, Integer.MAX_VALUE); this.isWorkingAllowed = false; - this.fluidFilter = new FluidFilterContainer(this, this::shouldShowTip, Integer.MAX_VALUE); + this.fluidFilter = new FluidFilterContainer(this); + this.fluidFilter.setMaxTransferSize(Integer.MAX_VALUE); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index 38789b7f25b..44aad613dc8 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -38,11 +38,6 @@ public CoverFluidVoidingAdvanced(@NotNull CoverDefinition definition, @NotNull C super(definition, coverableView, attachedSide); } - @Override - protected boolean shouldShowTip() { - return voidingMode != VoidingMode.VOID_ANY; - } - @Override protected void doTransferFluids() { IFluidHandler myFluidHandler = getCoverableView().getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, @@ -74,7 +69,7 @@ protected void voidOverflow(final IFluidHandler sourceHandler, FluidStack sourceFluid = tankProperties.getContents(); if (this.fluidFilter.getFilterWrapper().getFluidFilter() != null && voidingMode == VoidingMode.VOID_OVERFLOW) { - keepAmount = this.fluidFilter.getFilterWrapper().getFluidFilter().getFluidTransferLimit(sourceFluid); + keepAmount = this.fluidFilter.getFilterWrapper().getFluidFilter().getTransferLimit(sourceFluid); } if (sourceFluid == null || sourceFluid.amount == 0 || !getFluidFilterContainer().testFluidStack(sourceFluid, true)) diff --git a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java index d4fbf8c5931..eb0733cd1d1 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java @@ -35,7 +35,7 @@ public CoverItemVoidingAdvanced(@NotNull CoverDefinition definition, @NotNull Co @NotNull EnumFacing attachedSide) { super(definition, coverableView, attachedSide); this.voidingMode = VoidingMode.VOID_ANY; - this.itemFilterContainer.setMaxStackSize(1); + this.itemFilterContainer.setMaxTransferSize(1); } @Override @@ -57,13 +57,13 @@ protected void voidOverflow(IItemHandler myItemHandler) { for (TypeItemInfo typeItemInfo : itemTypeCount.values()) { int itemToVoidAmount = 0; - if (!getItemFilterContainer().hasItemFilter()) { - itemToVoidAmount = typeItemInfo.totalCount - itemFilterContainer.getTransferStackSize(); + if (!getItemFilterContainer().hasFilter()) { + itemToVoidAmount = typeItemInfo.totalCount - itemFilterContainer.getTransferSize(); } else { AtomicInteger atomicInt = new AtomicInteger(itemToVoidAmount); itemFilterContainer.onMatch(typeItemInfo.itemStack, (matched, match, matchedSlot) -> { if (matched) { - atomicInt.set(typeItemInfo.totalCount - itemFilterContainer.getSlotTransferLimit(matchedSlot)); + atomicInt.set(typeItemInfo.totalCount - itemFilterContainer.getTransferLimit(matchedSlot)); } }); itemToVoidAmount = atomicInt.get(); @@ -127,7 +127,7 @@ public void initFilterUI(int y, Consumer widgetGroup) { .setBackgroundTexture(GuiTextures.SLOT, GuiTextures.FILTER_SLOT_OVERLAY)); ServerWidgetGroup stackSizeGroup = new ServerWidgetGroup( - () -> itemFilterContainer.getItemFilter() == null && + () -> itemFilterContainer.hasFilter() && voidingMode == VoidingMode.VOID_OVERFLOW); stackSizeGroup.addWidget(new ImageWidget(111, 34, 35, 20, GuiTextures.DISPLAY)); @@ -143,9 +143,9 @@ public void initFilterUI(int y, Consumer widgetGroup) { .setShouldClientCallback(false)); stackSizeGroup.addWidget(new TextFieldWidget2(113, 41, 31, 20, - () -> String.valueOf(itemFilterContainer.getTransferStackSize()), val -> { + () -> String.valueOf(itemFilterContainer.getTransferSize()), val -> { if (val != null && !val.isEmpty()) - itemFilterContainer.setTransferStackSize( + itemFilterContainer.setTransferSize( MathHelper.clamp(Integer.parseInt(val), 1, voidingMode.maxStackSize)); }) .setCentered(true) @@ -169,7 +169,7 @@ public void renderCover(CCRenderState renderState, Matrix4 translation, IVertexO public void setVoidingMode(VoidingMode voidingMode) { this.voidingMode = voidingMode; - this.itemFilterContainer.setMaxStackSize(voidingMode.maxStackSize); + this.itemFilterContainer.setMaxTransferSize(voidingMode.maxStackSize); this.getCoverableView().markDirty(); } diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index aa1791cfea7..0084ed3cc3d 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -87,11 +87,7 @@ public CoverPump(@NotNull CoverDefinition definition, @NotNull CoverableView cov this.maxFluidTransferRate = mbPerTick; this.transferRate = mbPerTick; this.fluidLeftToTransferLastSecond = transferRate; - this.fluidFilter = new FluidFilterContainer(this, this::shouldShowTip); - } - - protected boolean shouldShowTip() { - return false; + this.fluidFilter = new FluidFilterContainer(this); } public void setTransferRate(int transferRate) { diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index 1ae75ee968b..ad928f7392f 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -52,7 +52,7 @@ public CoverRoboticArm(@NotNull CoverDefinition definition, @NotNull CoverableVi @NotNull EnumFacing attachedSide, int tier, int itemsPerSecond) { super(definition, coverableView, attachedSide, tier, itemsPerSecond); this.transferMode = TransferMode.TRANSFER_ANY; - this.itemFilterContainer.setMaxStackSize(1); + this.itemFilterContainer.setMaxTransferSize(1); } @Override @@ -88,16 +88,16 @@ protected int doTransferExact(IItemHandler itemHandler, IItemHandler myItemHandl while (iterator.hasNext()) { TypeItemInfo sourceInfo = sourceItemAmount.get(iterator.next()); int itemAmount = sourceInfo.totalCount; - int itemToMoveAmount = itemFilterContainer.getStackTransferLimit(sourceInfo.itemStack); + int itemToMoveAmount = itemFilterContainer.getTransferLimit(sourceInfo.itemStack); // if smart item filter - if (itemFilterContainer.getItemFilter() instanceof SmartItemFilter) { - if (itemFilterContainer.getTransferStackSize() > 1 && itemToMoveAmount * 2 <= itemAmount) { + if (itemFilterContainer.getFilter() instanceof SmartItemFilter) { + if (itemFilterContainer.getTransferSize() > 1 && itemToMoveAmount * 2 <= itemAmount) { // get the max we can extract from the item filter variable int maxMultiplier = Math.floorDiv(maxTransferAmount, itemToMoveAmount); // multiply up to the total count of all the items - itemToMoveAmount *= Math.min(itemFilterContainer.getTransferStackSize(), maxMultiplier); + itemToMoveAmount *= Math.min(itemFilterContainer.getTransferSize(), maxMultiplier); } } @@ -139,16 +139,16 @@ protected int doKeepExact(IItemHandler itemHandler, IItemHandler myItemHandler, while (iterator.hasNext()) { Object filterSlotIndex = iterator.next(); GroupItemInfo sourceInfo = sourceItemAmounts.get(filterSlotIndex); - int itemToKeepAmount = itemFilterContainer.getSlotTransferLimit(sourceInfo.filterSlot); + int itemToKeepAmount = itemFilterContainer.getTransferLimit(sourceInfo.filterSlot); // only run multiplier for smart item - if (itemFilterContainer.getItemFilter() instanceof SmartItemFilter) { - if (itemFilterContainer.getTransferStackSize() > 1 && itemToKeepAmount * 2 <= sourceInfo.totalCount) { + if (itemFilterContainer.getFilter() instanceof SmartItemFilter) { + if (itemFilterContainer.getTransferSize() > 1 && itemToKeepAmount * 2 <= sourceInfo.totalCount) { // get the max we can keep from the item filter variable int maxMultiplier = Math.floorDiv(sourceInfo.totalCount, itemToKeepAmount); // multiply up to the total count of all the items - itemToKeepAmount *= Math.min(itemFilterContainer.getTransferStackSize(), maxMultiplier); + itemToKeepAmount *= Math.min(itemFilterContainer.getTransferSize(), maxMultiplier); } } @@ -181,10 +181,7 @@ public void clearBuffer() { public void setTransferMode(TransferMode transferMode) { this.transferMode = transferMode; this.getCoverableView().markDirty(); - getItemFilterContainer().setFilterStackSizer(this::getMaxStackSize); - if (getItemFilterContainer().hasItemFilter()) { - getItemFilterContainer().getItemFilter().onMaxStackSizeChange(); - } + getItemFilterContainer().setMaxTransferSize(getMaxStackSize()); } public TransferMode getTransferMode() { @@ -214,8 +211,8 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g guiSyncManager.syncValue("transfer_mode", transferMode); var filterTransferSize = new IntSyncValue( - getItemFilterContainer()::getTransferStackSize, - getItemFilterContainer()::setTransferStackSize); + getItemFilterContainer()::getTransferSize, + getItemFilterContainer()::setTransferSize); filterTransferSize.updateCacheFromSource(true); return super.createUI(mainPanel, guiSyncManager) @@ -258,9 +255,9 @@ protected ModularUI buildUI(Builder builder, EntityPlayer player) { .setShouldClientCallback(false)); stackSizeGroup.addWidget(new TextFieldWidget2(113, 77, 31, 20, - () -> String.valueOf(itemFilterContainer.getTransferStackSize()), val -> { + () -> String.valueOf(itemFilterContainer.getTransferSize()), val -> { if (val != null && !val.isEmpty()) - itemFilterContainer.setTransferStackSize( + itemFilterContainer.setTransferSize( MathHelper.clamp(Integer.parseInt(val), 1, transferMode.maxStackSize)); }) .setNumbersOnly(1, transferMode.maxStackSize) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java new file mode 100644 index 00000000000..236333ad6fd --- /dev/null +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -0,0 +1,162 @@ +package gregtech.common.covers.filter; + +import gregtech.api.util.IDirtyNotifiable; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.common.util.INBTSerializable; +import net.minecraftforge.items.ItemStackHandler; + +import com.cleanroommc.modularui.api.widget.IWidget; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import org.jetbrains.annotations.NotNull; + +public abstract class BaseFilterContainer> implements INBTSerializable { + private final IDirtyNotifiable dirtyNotifiable; + private int maxTransferSize = 1; + private T currentItemFilter; + private Runnable onFilterInstanceChange; + private int transferSize; + protected final FilterSlotHandler filterInventory; + + public BaseFilterContainer(IDirtyNotifiable dirtyNotifiable) { + this.dirtyNotifiable = dirtyNotifiable; + filterInventory = new FilterSlotHandler(); + } + + public ItemStackHandler getFilterInventory() { + return filterInventory; + } + + public int getMaxTransferSize() { + return hasFilter() ? currentItemFilter.getMaxTransferSize() : this.maxTransferSize; + } + + public void setMaxTransferSize(int maxTransferSize) { + this.maxTransferSize = maxTransferSize; + if (hasFilter()) currentItemFilter.setMaxTransferSize(maxTransferSize); + } + + public boolean hasFilter() { + return currentItemFilter != null; + } + + public T getFilter() { + return currentItemFilter; + } + + public final void setFilter(T newFilter) { + this.currentItemFilter = newFilter; + if (currentItemFilter != null) { + currentItemFilter.setDirtyNotifiable(dirtyNotifiable); + } + if (onFilterInstanceChange != null) { + this.onFilterInstanceChange.run(); + } + } + + public void onFilterInstanceChange() { + this.maxTransferSize = isBlacklistFilter() ? 1 : getMaxTransferSize(); + dirtyNotifiable.markAsDirty(); + } + + public void setOnFilterInstanceChange(Runnable onFilterInstanceChange) { + this.onFilterInstanceChange = onFilterInstanceChange; + } + + public boolean showGlobalTransferLimitSlider() { + return getMaxTransferSize() > 1 && (isBlacklistFilter() || !hasFilter() || currentItemFilter.showGlobalTransferLimitSlider()); + } + + public int getTransferLimit(int slotIndex) { + if (isBlacklistFilter() || currentItemFilter == null) { + return getTransferSize(); + } + return currentItemFilter.getTransferLimit(slotIndex, getTransferSize()); + } + + public boolean testItemStack(R toTest) { + return hasFilter() || getFilter().test(toTest); + } + + public int getTransferLimit(R stack) { + if (isBlacklistFilter() || currentItemFilter == null) { + return getTransferSize(); + } + return currentItemFilter.getTransferLimit(stack, getTransferSize()); + } + + protected abstract void onFilterSlotChange(boolean notify); + + public int getTransferSize() { + if (!showGlobalTransferLimitSlider()) { + return getMaxTransferSize(); + } + return maxTransferSize; + } + + public void setTransferSize(int transferSize) { + this.transferSize = MathHelper.clamp(transferSize, 1, getMaxTransferSize()); + onFilterInstanceChange(); + dirtyNotifiable.markAsDirty(); + } + + @Deprecated + public void adjustTransferStackSize(int amount) { + setTransferSize(transferSize + amount); + } + + public void setBlacklistFilter(boolean blacklistFilter) { + if (hasFilter()) getFilter().setBlacklistFilter(blacklistFilter); + onFilterInstanceChange(); + } + + public boolean isBlacklistFilter() { + return hasFilter() && getFilter().isBlacklistFilter(); + } + + public void onMatch(R toTest, Filter.OnMatch onMatch) { + this.getFilter().setOnMatched(onMatch); + this.getFilter().match(toTest); + } + + /** Uses Cleanroom MUI*/ + public abstract IWidget initUI(ModularPanel main, GuiSyncManager manager); + + public void writeInitialSyncData(PacketBuffer packetBuffer) { + packetBuffer.writeItemStack(this.filterInventory.getStackInSlot(0)); + } + + public abstract void readInitialSyncData(@NotNull PacketBuffer packetBuffer); + + @Override + public NBTTagCompound serializeNBT() { + NBTTagCompound tagCompound = new NBTTagCompound(); + tagCompound.setInteger("MaxStackSize", getMaxTransferSize()); + tagCompound.setInteger("TransferStackSize", getTransferSize()); + tagCompound.setTag("FilterInventory", filterInventory.serializeNBT()); + return tagCompound; + } + + @Override + public void deserializeNBT(NBTTagCompound tagCompound) { + this.maxTransferSize = tagCompound.getInteger("MaxStackSize"); + this.transferSize = tagCompound.getInteger("TransferStackSize"); + this.filterInventory.deserializeNBT(tagCompound.getCompoundTag("FilterInventory")); + } + + protected class FilterSlotHandler extends ItemStackHandler { + + @Override + public int getSlotLimit(int slot) { + return 1; + } + + @Override + protected void onLoad() { + onFilterSlotChange(false); + } + } +} diff --git a/src/main/java/gregtech/common/covers/filter/Filter.java b/src/main/java/gregtech/common/covers/filter/Filter.java index edbb458eaa7..4d9f5d3f420 100644 --- a/src/main/java/gregtech/common/covers/filter/Filter.java +++ b/src/main/java/gregtech/common/covers/filter/Filter.java @@ -1,13 +1,10 @@ package gregtech.common.covers.filter; +import gregtech.api.util.IDirtyNotifiable; + import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; -import com.cleanroommc.modularui.widget.ParentWidget; - import com.cleanroommc.modularui.widget.Widget; - -import gregtech.api.util.IDirtyNotifiable; - import org.jetbrains.annotations.NotNull; public interface Filter { @@ -32,6 +29,20 @@ public interface Filter { void setOnMatched(OnMatch onMatch); + int getMaxTransferSize(); + + void setMaxTransferSize(int maxTransferSize); + + boolean showGlobalTransferLimitSlider(); + + int getTransferLimit(int slot, int transferSize); + + int getTransferLimit(T stack, int transferSize); + + boolean isBlacklistFilter(); + + void setBlacklistFilter(boolean blacklistFilter); + @FunctionalInterface interface OnMatch { void onMatch(boolean matched, T match, int matchedSlot); diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index 3a132917c30..beead2a65fd 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -24,12 +24,10 @@ import org.jetbrains.annotations.NotNull; import java.util.function.Consumer; -import java.util.function.Supplier; public abstract class FluidFilter implements Filter { private IDirtyNotifiable dirtyNotifiable; - boolean showTip; private OnMatch onMatch = null; private BaseFluidFilterReader filterReader; @@ -51,7 +49,18 @@ protected final void onMatch(boolean matched, FluidStack stack, int index) { if (this.onMatch != null) this.onMatch.onMatch(matched, stack, index); } - public abstract int getFluidTransferLimit(FluidStack fluidStack); + public int getTransferLimit(FluidStack fluidStack, int transferSize) { + return 0; + } + + @Override + public int getTransferLimit(int slot, int transferSize) { + return 0; + } + + public int getTransferLimit(FluidStack stack) { + return getTransferLimit(stack, getMaxTransferSize()); + } @Deprecated public abstract void initUI(Consumer widgetGroup); @@ -72,24 +81,18 @@ public boolean showGlobalTransferLimitSlider() { return false; } - public int getMaxTransferSize() { - return this.filterReader.getMaxCapacity(); - } - - public final void setMaxTransferSize(int maxStackSize) { - setMaxStackSizer(() -> maxStackSize); - } - - public final void setMaxStackSizer(Supplier maxStackSizer) { - this.filterReader.setMaxCapacitySizer(maxStackSizer); + @Override + public final int getMaxTransferSize() { + return this.filterReader.getMaxTransferRate(); } - public Supplier getMaxStackSizer() { - return this.filterReader.getMaxStackSizer(); + @Override + public final void setMaxTransferSize(int maxTransferSize) { + this.filterReader.setMaxTransferRate(maxTransferSize); } public final void onMaxStackSizeChange() { - this.filterReader.onMaxStackSizeChange(); + this.filterReader.onTranferRateChange(); } public abstract void readFromNBT(NBTTagCompound tagCompound); @@ -100,7 +103,8 @@ public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { public abstract void configureFilterTanks(int amount); - public boolean isBlacklist() { + @Override + public boolean isBlacklistFilter() { return this.filterReader.isBlacklistFilter(); } @@ -142,23 +146,6 @@ public FluidStack getFluidStack(int i) { public abstract IFluidTank getFluidTank(int i); @Override - public void onMaxStackSizeChange() { - this.cache = maxStackSizer.get(); - } - - public final void setMaxCapacitySizer(Supplier maxStackSizer) { - if (this.cache != maxStackSizer.get()) { - this.maxStackSizer = maxStackSizer; - onMaxStackSizeChange(); - } - } - - public final int getMaxCapacity() { - return this.isBlacklistFilter() ? 1000 : this.cache; - } - - public Supplier getMaxStackSizer() { - return this.maxStackSizer; - } + public void onTranferRateChange() {} } } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 9a28538549b..a05e97223fc 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -6,7 +6,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; -import net.minecraft.util.math.MathHelper; import net.minecraftforge.common.util.INBTSerializable; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.ItemStackHandler; @@ -27,78 +26,14 @@ import java.io.IOException; import java.util.function.BooleanSupplier; import java.util.function.Consumer; -import java.util.function.Supplier; -public class FluidFilterContainer implements INBTSerializable { +public class FluidFilterContainer extends BaseFilterContainer implements INBTSerializable { - private final ItemStackHandler filterInventory; private final FluidFilterWrapper filterWrapper; - private final IDirtyNotifiable dirtyNotifiable; - private FluidFilter currentFluidFilter; - private Supplier showTipSupplier; - private Supplier maxFluidSizer = () -> this.maxSize; - private int maxSize; - - public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable, int capacity) { - this.filterWrapper = new FluidFilterWrapper(this); // for compat - this.maxSize = capacity; - this.dirtyNotifiable = dirtyNotifiable; - this.filterInventory = new ItemStackHandler(1) { - - @Override - public int getSlotLimit(int slot) { - return 1; - } - - @Override - protected void onLoad() { - onFilterSlotChange(false); - } - }; - } - - public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable, Supplier showTip, int maxSize) { - this(dirtyNotifiable, maxSize); - setTipSupplier(showTip); - } - - public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable, Supplier showTip) { - this(dirtyNotifiable, 1000); - setTipSupplier(showTip); - } - public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable) { - this(dirtyNotifiable, 1000); - setTipSupplier(() -> false); - } - - public void setFluidFilter(FluidFilter fluidFilter) { - this.currentFluidFilter = fluidFilter; - if (hasFluidFilter()) { - currentFluidFilter.setDirtyNotifiable(dirtyNotifiable); - currentFluidFilter.setMaxStackSizer(maxFluidSizer); - } - } - - private Supplier shouldShowTip() { - return showTipSupplier; - } - - protected void setTipSupplier(Supplier supplier) { - this.showTipSupplier = supplier; - } - - public FluidFilter getFluidFilter() { - return currentFluidFilter; - } - - public void onFilterInstanceChange() { - dirtyNotifiable.markAsDirty(); - } - - public ItemStackHandler getFilterInventory() { - return filterInventory; + super(dirtyNotifiable); + this.filterWrapper = new FluidFilterWrapper(this); // for compat } public FluidFilterWrapper getFilterWrapper() { @@ -111,8 +46,8 @@ public boolean testFluidStack(FluidStack fluidStack) { public boolean testFluidStack(FluidStack fluidStack, boolean whitelist) { boolean result = true; - if (hasFluidFilter()) { - result = currentFluidFilter.test(fluidStack); + if (hasFilter()) { + result = getFilter().test(fluidStack); if (!whitelist) { result = !result; } @@ -130,11 +65,11 @@ public void initUI(int y, Consumer widgetGroup) { } public void initFilterUI(int y, Consumer widgetGroup) { - widgetGroup.accept(new WidgetGroupFluidFilter(y, this::getFluidFilter, shouldShowTip())); + widgetGroup.accept(new WidgetGroupFluidFilter(y, this::getFilter, this::showGlobalTransferLimitSlider)); } public void blacklistUI(int y, Consumer widgetGroup, BooleanSupplier showBlacklistButton) { - gregtech.api.gui.widgets.ServerWidgetGroup blacklistButton = new gregtech.api.gui.widgets.ServerWidgetGroup(this::hasFluidFilter); + gregtech.api.gui.widgets.ServerWidgetGroup blacklistButton = new gregtech.api.gui.widgets.ServerWidgetGroup(this::hasFilter); blacklistButton.addWidget(new gregtech.api.gui.widgets.ToggleButtonWidget(144, y, 18, 18, gregtech.api.gui.GuiTextures.BUTTON_BLACKLIST, this::isBlacklistFilter, this::setBlacklistFilter).setPredicate(showBlacklistButton) .setTooltipText("cover.filter.blacklist")); @@ -146,8 +81,8 @@ public IWidget initUI(ModularPanel main, GuiSyncManager manager) { var panel = new PanelSyncHandler(main) { @Override public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { -// getFluidFilter().setMaxStackSizer(stackSizer); - return getFluidFilter().createPopupPanel(syncManager); + getFilter().setMaxTransferSize(getMaxTransferSize()); + return getFilter().createPopupPanel(syncManager); } }; manager.syncValue("filter_panel", panel); @@ -164,14 +99,14 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) }) .singletonSlotGroup(101)) .onUpdateListener(w -> { - if (!hasFluidFilter() && panel.isPanelOpen()) { + if (!hasFilter() && panel.isPanelOpen()) { panel.closePanel(); } }, true) .size(18).marginRight(4) .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY)) .child(new ButtonWidget<>() - .setEnabledIf(w -> hasFluidFilter()) + .setEnabledIf(w -> hasFilter()) .onMousePressed(i -> { boolean success = false; if (!panel.isPanelOpen()) { @@ -184,42 +119,14 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) Interactable.playButtonClickSound(); return success; })) - .child(IKey.dynamic(() -> hasFluidFilter() ? + .child(IKey.dynamic(() -> hasFilter() ? getFilterInventory().getStackInSlot(0).getDisplayName() : IKey.lang("metaitem.fluid_filter.name").get()) .alignment(Alignment.CenterRight).asWidget() .left(36).right(0).height(18)); } - public boolean hasFluidFilter() { - return currentFluidFilter != null; - } - - public boolean showGlobalTransferLimitSlider() { - return getMaxStackSize() > 1 && (isBlacklistFilter() || !hasFluidFilter() || currentFluidFilter.showGlobalTransferLimitSlider()); - } - - public int getMaxTransferSize() { - if (!showGlobalTransferLimitSlider()) { - return getMaxStackSize(); - } - return maxSize; - } - - public void setMaxTransferSize(int transferStackSize) { - this.maxSize = MathHelper.clamp(transferStackSize, 1, getMaxStackSize()); - onFilterInstanceChange(); - dirtyNotifiable.markAsDirty(); - } - - public int getMaxStackSize() { - return hasFluidFilter() ? currentFluidFilter.getMaxTransferSize() : maxFluidSizer.get(); - } - - public void writeInitialSyncData(PacketBuffer packetBuffer) { - packetBuffer.writeItemStack(getFilterInventory().getStackInSlot(0)); - } - + @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { var stack = ItemStack.EMPTY; try { @@ -228,55 +135,35 @@ public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { this.filterInventory.setStackInSlot(0, stack); if (FilterTypeRegistry.isFluidFilter(stack)) - this.currentFluidFilter = FilterTypeRegistry.getFluidFilterForStack(stack); - } - - public void setBlacklistFilter(boolean blacklistFilter) { - if (hasFluidFilter()) getFluidFilter().setBlacklistFilter(blacklistFilter); - } - - public boolean isBlacklistFilter() { - return hasFluidFilter() && getFluidFilter().isBlacklist(); + setFilter(FilterTypeRegistry.getFluidFilterForStack(stack)); } protected void onFilterSlotChange(boolean notify) { ItemStack filterStack = filterInventory.getStackInSlot(0); int newId = FilterTypeRegistry.getFilterIdForStack(filterStack); - int currentId = FilterTypeRegistry.getIdForFilter(getFluidFilter()); + int currentId = FilterTypeRegistry.getIdForFilter(getFilter()); if (!FilterTypeRegistry.isFluidFilter(filterStack)) { - if (hasFluidFilter()) { - setFluidFilter(null); + if (hasFilter()) { + setFilter(null); setBlacklistFilter(false); if (notify) onFilterInstanceChange(); } } else if (currentId == -1 || newId != currentId) { - setFluidFilter(FilterTypeRegistry.getFluidFilterForStack(filterStack)); + setFilter(FilterTypeRegistry.getFluidFilterForStack(filterStack)); if (notify) onFilterInstanceChange(); } } - @Override - public NBTTagCompound serializeNBT() { - NBTTagCompound tagCompound = new NBTTagCompound(); - tagCompound.setTag("FilterInventory", filterInventory.serializeNBT()); -// tagCompound.setBoolean("IsBlacklist", getFluidFilter().isBlacklistFilter()); -// if (getFluidFilter() != null) { -// NBTTagCompound filterInventory = new NBTTagCompound(); -// getFluidFilter().writeToNBT(filterInventory); -// tagCompound.setTag("Filter", filterInventory); -// } - return tagCompound; - } - @Override public void deserializeNBT(NBTTagCompound tagCompound) { - this.filterInventory.deserializeNBT(tagCompound.getCompoundTag("FilterInventory")); - this.setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); - if (getFluidFilter() != null) { - this.getFluidFilter().readFromNBT(tagCompound.getCompoundTag("Filter")); + super.deserializeNBT(tagCompound); + var stack = getFilterInventory().getStackInSlot(0); + if (FilterTypeRegistry.isFluidFilter(stack)) { + setFilter(FilterTypeRegistry.getFluidFilterForStack(stack)); + this.getFilter().readFromNBT(tagCompound.getCompoundTag("Filter")); } } } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java b/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java index a51fceeb3f1..075a0bba86b 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java @@ -12,6 +12,7 @@ import java.util.function.Consumer; import java.util.function.Supplier; +@Deprecated public class FluidFilterWrapper { FluidFilterContainer container; @@ -21,10 +22,10 @@ public FluidFilterWrapper(FluidFilterContainer container) { } public void setFluidFilter(FluidFilter fluidFilter) { - this.container.setFluidFilter(fluidFilter); + this.container.setFilter(fluidFilter); } public FluidFilter getFluidFilter() { - return container.getFluidFilter(); + return container.getFilter(); } } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index 5adadb0d1dd..ee3fc98e5ad 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -45,33 +45,25 @@ public final boolean isBlacklistFilter() { return filterReader.isBlacklistFilter(); } - public final int getMaxStackSize() { - return this.filterReader.getMaxStackSize(); + public final int getMaxTransferSize() { + return this.filterReader.getMaxTransferRate(); } - public final void setMaxStackSize(int maxStackSize) { - setMaxStackSizer(() -> maxStackSize); - } - - public final void setMaxStackSizer(Supplier maxStackSizer) { - this.filterReader.setMaxStackSizer(maxStackSizer); - } - - public Supplier getMaxStackSizer() { - return this.filterReader.getMaxStackSizer(); + public final void setMaxTransferSize(int maxStackSize) { + this.filterReader.setMaxTransferRate(maxStackSize); } public final void onMaxStackSizeChange() { - this.filterReader.onMaxStackSizeChange(); + this.filterReader.onTranferRateChange(); } public abstract boolean showGlobalTransferLimitSlider(); - public int getSlotTransferLimit(int matchSlot, int globalTransferLimit) { + public int getTransferLimit(int matchSlot, int globalTransferLimit) { return 0; } - public int getStackTransferLimit(ItemStack stack, int globalTransferLimit) { + public int getTransferLimit(ItemStack stack, int globalTransferLimit) { return 0; } @@ -132,21 +124,6 @@ public BaseItemFilterReader(ItemStack container, int slots) { super(container, slots); } - public void onMaxStackSizeChange() { - this.cache = getMaxStackSizer().get(); - } - - public final void setMaxStackSizer(Supplier maxStackSizer) { - this.maxStackSizer = maxStackSizer; - this.cache = this.maxStackSizer.get(); - } - - public final int getMaxStackSize() { - return this.isBlacklistFilter() ? 1 : this.cache; - } - - public Supplier getMaxStackSizer() { - return this.maxStackSizer; - } + public void onTranferRateChange() {} } } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index ad15856a5da..441985b1587 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -13,7 +13,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; -import net.minecraft.util.math.MathHelper; import net.minecraftforge.common.util.INBTSerializable; import net.minecraftforge.items.ItemStackHandler; @@ -32,38 +31,14 @@ import java.io.IOException; import java.util.function.BooleanSupplier; import java.util.function.Consumer; -import java.util.function.Supplier; -public class ItemFilterContainer implements INBTSerializable { +public class ItemFilterContainer extends BaseFilterContainer implements INBTSerializable { - private final ItemStackHandler filterInventory; private final ItemFilterWrapper filterWrapper; - private final IDirtyNotifiable dirtyNotifiable; - private int maxStackSize = 1; - private Supplier stackSizer = () -> this.maxStackSize; - private ItemFilter currentItemFilter; - private Runnable onFilterInstanceChange; - private int transferStackSize; public ItemFilterContainer(IDirtyNotifiable dirtyNotifiable) { + super(dirtyNotifiable); this.filterWrapper = new ItemFilterWrapper(this); // for compat - this.dirtyNotifiable = dirtyNotifiable; - this.filterInventory = new ItemStackHandler(1) { - - @Override - public int getSlotLimit(int slot) { - return 1; - } - - @Override - protected void onLoad() { - onFilterSlotChange(false); - } - }; - } - - public ItemStackHandler getFilterInventory() { - return filterInventory; } @Deprecated @@ -71,36 +46,6 @@ public ItemFilterWrapper getFilterWrapper() { return filterWrapper; } - public int getMaxStackSize() { - return hasItemFilter() ? currentItemFilter.getMaxStackSize() : stackSizer.get(); - } - - public int getTransferStackSize() { - if (!showGlobalTransferLimitSlider()) { - return getMaxStackSize(); - } - return transferStackSize; - } - - public void setTransferStackSize(int transferStackSize) { - this.transferStackSize = MathHelper.clamp(transferStackSize, 1, getMaxStackSize()); - onFilterInstanceChange(); - dirtyNotifiable.markAsDirty(); - } - - public void adjustTransferStackSize(int amount) { - setTransferStackSize(transferStackSize + amount); - } - - public void setBlacklistFilter(boolean blacklistFilter) { - if (hasItemFilter()) getItemFilter().setBlacklistFilter(blacklistFilter); - onFilterInstanceChange(); - } - - public boolean isBlacklistFilter() { - return hasItemFilter() && getItemFilter().isBlacklistFilter(); - } - /** Deprecated, uses old builtin MUI*/ @Deprecated public void initUI(int y, Consumer widgetGroup) { @@ -113,12 +58,12 @@ public void initUI(int y, Consumer widgetGroup) { /** Deprecated, uses old builtin MUI*/ @Deprecated public void initFilterUI(int y, Consumer widgetGroup) { - widgetGroup.accept(new WidgetGroupItemFilter(y, this::getItemFilter)); + widgetGroup.accept(new WidgetGroupItemFilter(y, this::getFilter)); } /** Deprecated, uses old builtin MUI*/ @Deprecated public void blacklistUI(int y, Consumer widgetGroup, BooleanSupplier showBlacklistButton) { - ServerWidgetGroup blacklistButton = new ServerWidgetGroup(() -> getItemFilter() != null); + ServerWidgetGroup blacklistButton = new ServerWidgetGroup(this::hasFilter); blacklistButton.addWidget(new ToggleButtonWidget(144, y, 20, 20, GuiTextures.BUTTON_BLACKLIST, this::isBlacklistFilter, this::setBlacklistFilter).setPredicate(showBlacklistButton) .setTooltipText("cover.filter.blacklist")); @@ -130,8 +75,8 @@ public IWidget initUI(ModularPanel main, GuiSyncManager manager) { var panel = new PanelSyncHandler(main) { @Override public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { - getItemFilter().setMaxStackSizer(stackSizer); - return getItemFilter().createPopupPanel(syncManager); + getFilter().setMaxTransferSize(getMaxTransferSize()); + return getFilter().createPopupPanel(syncManager); } }; manager.syncValue("filter_panel", panel); @@ -148,14 +93,14 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) }) .singletonSlotGroup(101)) .onUpdateListener(w -> { - if (!hasItemFilter() && panel.isPanelOpen()) { + if (!hasFilter() && panel.isPanelOpen()) { panel.closePanel(); } }, true) .size(18).marginRight(2) .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY)) .child(new ButtonWidget<>() - .setEnabledIf(w -> hasItemFilter()) + .setEnabledIf(w -> hasFilter()) .onMousePressed(i -> { boolean success = false; if (!panel.isPanelOpen()) { @@ -168,7 +113,7 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) Interactable.playButtonClickSound(); return success; })) - .child(IKey.dynamic(() -> hasItemFilter() ? + .child(IKey.dynamic(() -> hasFilter() ? getFilterInventory().getStackInSlot(0).getDisplayName() : IKey.lang("metaitem.item_filter.name").get()) .alignment(Alignment.CenterRight).asWidget() @@ -178,92 +123,23 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) protected void onFilterSlotChange(boolean notify) { ItemStack filterStack = filterInventory.getStackInSlot(0); int newId = FilterTypeRegistry.getFilterIdForStack(filterStack); - int currentId = FilterTypeRegistry.getIdForFilter(getItemFilter()); + int currentId = FilterTypeRegistry.getIdForFilter(getFilter()); if (!FilterTypeRegistry.isItemFilter(filterStack)) { - if (hasItemFilter()) { - setItemFilter(null); + if (hasFilter()) { + setFilter(null); setBlacklistFilter(false); if (notify) onFilterInstanceChange(); } } else if (currentId == -1 || newId != currentId) { - setItemFilter(FilterTypeRegistry.getItemFilterForStack(filterStack)); + setFilter(FilterTypeRegistry.getItemFilterForStack(filterStack)); if (notify) onFilterInstanceChange(); } } - public void setOnFilterInstanceChange(Runnable onFilterInstanceChange) { - this.onFilterInstanceChange = onFilterInstanceChange; - } - - public void onFilterInstanceChange() { - this.maxStackSize = isBlacklistFilter() ? 1 : getMaxStackSize(); - dirtyNotifiable.markAsDirty(); - } - - public void setMaxStackSize(int maxStackSizeLimit) { - this.maxStackSize = maxStackSizeLimit; - if (hasItemFilter() && !isBlacklistFilter()) { - setFilterStackSizer(() -> this.maxStackSize); - } - } - - public void setFilterStackSizer(Supplier stackSizer) { - this.stackSizer = stackSizer; - } - - public boolean showGlobalTransferLimitSlider() { - return getMaxStackSize() > 1 && (isBlacklistFilter() || !hasItemFilter() || currentItemFilter.showGlobalTransferLimitSlider()); - } - - public int getSlotTransferLimit(int slotIndex) { - if (isBlacklistFilter() || currentItemFilter == null) { - return getTransferStackSize(); - } - return currentItemFilter.getSlotTransferLimit(slotIndex, getTransferStackSize()); - } - - public int getStackTransferLimit(ItemStack stack) { - if (isBlacklistFilter() || currentItemFilter == null) { - return getTransferStackSize(); - } - return currentItemFilter.getStackTransferLimit(stack, getTransferStackSize()); - } - - public void onMatch(ItemStack stack, Filter.OnMatch onMatch) { - this.currentItemFilter.setOnMatched(onMatch); - this.currentItemFilter.match(stack); - } - - public boolean testItemStack(ItemStack itemStack) { - return currentItemFilter == null || currentItemFilter.test(itemStack); - } - - - public void setItemFilter(ItemFilter itemFilter) { - this.currentItemFilter = itemFilter; - if (currentItemFilter != null) { - currentItemFilter.setDirtyNotifiable(dirtyNotifiable); - } - if (onFilterInstanceChange != null) { - this.onFilterInstanceChange.run(); - } - } - - public ItemFilter getItemFilter() { - return currentItemFilter; - } - - public boolean hasItemFilter() { - return currentItemFilter != null; - } - - public void writeInitialSyncData(PacketBuffer packetBuffer) { - packetBuffer.writeItemStack(getFilterInventory().getStackInSlot(0)); - } - + @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { var stack = ItemStack.EMPTY; try { @@ -272,28 +148,16 @@ public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { this.filterInventory.setStackInSlot(0, stack); if (FilterTypeRegistry.isItemFilter(stack)) - this.currentItemFilter = FilterTypeRegistry.getItemFilterForStack(stack); - } - - @Override - public NBTTagCompound serializeNBT() { - NBTTagCompound tagCompound = new NBTTagCompound(); - tagCompound.setTag("FilterInventory", filterInventory.serializeNBT()); - tagCompound.setInteger("MaxStackSize", maxStackSize); - tagCompound.setInteger("TransferStackSize", transferStackSize); - return tagCompound; + setFilter(FilterTypeRegistry.getItemFilterForStack(stack)); } @Override public void deserializeNBT(NBTTagCompound tagCompound) { - this.filterInventory.deserializeNBT(tagCompound.getCompoundTag("FilterInventory")); + super.deserializeNBT(tagCompound); var stack = getFilterInventory().getStackInSlot(0); if (FilterTypeRegistry.isItemFilter(stack)) { - this.currentItemFilter = FilterTypeRegistry.getItemFilterForStack(stack); - this.currentItemFilter.readFromNBT(tagCompound); // try to read old data + setFilter(FilterTypeRegistry.getItemFilterForStack(stack)); + getFilter().readFromNBT(tagCompound); // try to read old data } - - this.maxStackSize = tagCompound.getInteger("MaxStackSize"); - this.transferStackSize = tagCompound.getInteger("TransferStackSize"); } } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java index 81f2446d20c..f6ecceb4f17 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java @@ -22,35 +22,19 @@ public void blacklistUI(int y, Consumer widgetGroup, Bo } public void setItemFilter(ItemFilter itemFilter) { - container.setItemFilter(itemFilter); + container.setFilter(itemFilter); } public ItemFilter getItemFilter() { - return container.getItemFilter(); - } - - public void setOnFilterInstanceChange(Runnable onFilterInstanceChange) { - this.container.setOnFilterInstanceChange(onFilterInstanceChange); - } - - public void onFilterInstanceChange() { - this.container.onFilterInstanceChange(); + return container.getFilter(); } public void setMaxStackSize(int maxStackSize) { - container.setMaxStackSize(maxStackSize); - } - - public void setBlacklistFilter(boolean blacklistFilter) { - container.setBlacklistFilter(blacklistFilter); - } - - public boolean isBlacklistFilter() { - return container.isBlacklistFilter(); + container.setMaxTransferSize(maxStackSize); } public int getMaxStackSize() { - return container.getMaxStackSize(); + return container.getMaxTransferSize(); } public boolean showGlobalTransferLimitSlider() { @@ -58,7 +42,7 @@ public boolean showGlobalTransferLimitSlider() { } public int getSlotTransferLimit(int matchSlot, int globalTransferLimit) { - return container.getSlotTransferLimit(matchSlot); + return container.getTransferLimit(matchSlot); } public boolean testItemStack(ItemStack itemStack) { diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index b76d76e0008..17761478c22 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -87,86 +87,6 @@ protected void clearCache() { @Override public void initUI(Consumer widgetGroup) { -// ItemOreFilterTestSlot[] testSlot = new ItemOreFilterTestSlot[5]; -// for (int i = 0; i < testSlot.length; i++) { -// ItemOreFilterTestSlot slot = new ItemOreFilterTestSlot(20 + 22 * i, 0); -// slot.setGlob(getGlob()); -// slot.setMatchAll(this.filterReader.shouldMatchAll()); -// widgetGroup.accept(slot); -// testSlot[i] = slot; -// } -// OreGlobCompileStatusWidget compilationStatus = new OreGlobCompileStatusWidget(10, 10); -// -// -// HighlightedTextField textField = new HighlightedTextField(14, 26, 152, 14, -// filterReader::getExpression, -// s -> { -// this.filterReader.setExpression(s); -// recompile(compileCallback); -// }); -// compilationStatus.setTextField(textField); -// -// widgetGroup.accept(new ImageWidget(10, 0, 7, 7, gregtech.api.gui.GuiTextures.ORE_FILTER_INFO) -// .setTooltip("cover.ore_dictionary_filter.info")); -// widgetGroup.accept(compilationStatus); -// widgetGroup.accept(new DrawableWidget(10, 22, 156, 16) -// .setBackgroundDrawer((mouseX, mouseY, partialTicks, context, widget) -> { -// gregtech.api.gui.Widget.drawGradientRect(widget.getPosition().x, widget.getPosition().y, -// widget.getSize().width, widget.getSize().height, -// 0xFF808080, 0xFF808080, false); -// gregtech.api.gui.Widget.drawGradientRect(widget.getPosition().x + 1, widget.getPosition().y + 1, -// widget.getSize().width - 2, widget.getSize().height - 2, -// 0xFF000000, 0xFF000000, false); -// })); -// widgetGroup.accept(textField -// .setHighlightRule(h -> { -// String t = h.getOriginalText(); -// for (int i = 0; i < t.length(); i++) { -// switch (t.charAt(i)) { -// case '|', '&', '^', '(', ')' -> h.format(i, TextFormatting.GOLD); -// case '*', '?' -> h.format(i, TextFormatting.GREEN); -// case '!' -> h.format(i, TextFormatting.RED); -// case '\\' -> h.format(i++, TextFormatting.YELLOW); -// case '$' -> { // TODO: remove this switch case in 2.9 -// h.format(i, TextFormatting.DARK_GREEN); -// for (; i < t.length(); i++) { -// switch (t.charAt(i)) { -// case ' ', '\t', '\n', '\r' -> {} -// case '\\' -> { -// i++; -// continue; -// } -// default -> { -// continue; -// } -// } -// break; -// } -// } -// default -> { -// continue; -// } -// } -// h.format(i + 1, TextFormatting.RESET); -// } -// }).setMaxLength(64)); -// widgetGroup.accept(new ForcedInitialSyncImageCycleButtonWidget(130, 38, 18, 18, -// gregtech.api.gui.GuiTextures.ORE_FILTER_BUTTON_CASE_SENSITIVE, filterReader::isCaseSensitive, -// caseSensitive -> { -// this.filterReader.setCaseSensitive(caseSensitive); -// recompile(compileCallback); -// }).setTooltipHoverString( -// i -> "cover.ore_dictionary_filter.button.case_sensitive." + (i == 0 ? "disabled" : "enabled"))); -// widgetGroup.accept(new ForcedInitialSyncImageCycleButtonWidget(148, 38, 18, 18, -// gregtech.api.gui.GuiTextures.ORE_FILTER_BUTTON_MATCH_ALL, filterReader::shouldMatchAll, -// matchAll -> { -// this.filterReader.setMatchAll(matchAll); -// clearCache(); -// for (ItemOreFilterTestSlot slot : testSlot) { -// slot.setMatchAll(matchAll); -// } -// }).setTooltipHoverString( -// i -> "cover.ore_dictionary_filter.button.match_all." + (i == 0 ? "disabled" : "enabled"))); } @Override @@ -387,7 +307,7 @@ public boolean matchesItemStack(@NotNull ItemStack itemStack) { } @Override - public int getSlotTransferLimit(int matchSlot, int globalTransferLimit) { + public int getTransferLimit(int matchSlot, int globalTransferLimit) { return globalTransferLimit; } @@ -415,11 +335,6 @@ public OreDictionaryItemFilterReader(ItemStack container, int slots) { super(container, slots); } - @Override - public Supplier getMaxStackSizer() { - return () -> 1; - } - public void setExpression(String expression) { var old = getStackTag().getString(EXPRESSION); if (expression.equals(old)) return; diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 2c322935fde..5eb78d21864 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -38,6 +38,7 @@ public SimpleFluidFilter(ItemStack stack) { } @Override + @Deprecated public void configureFilterTanks(int amount) { this.filterReader.setFluidAmounts(amount); this.markDirty(); @@ -100,20 +101,21 @@ public void match(FluidStack toMatch) { @Override public boolean test(FluidStack fluidStack) { - return checkInputFluid(fluidStack); + for (int i = 0; i < filterReader.getSlots(); i++) { + var fluid = filterReader.getFluidStack(i); + if (fluid != null && fluid.isFluidEqual(fluidStack)) { + return true; + } + } + return false; } @Override - public void initUI(Consumer widgetGroup) { - for (int i = 0; i < 9; ++i) { - widgetGroup.accept((new gregtech.api.gui.widgets.PhantomFluidWidget(10 + 18 * (i % 3), 18 * (i / 3), 18, 18, - filterReader.getFluidTank(i)::getFluid, filterReader.getFluidTank(i)::setFluid)) - .setBackgroundTexture(gregtech.api.gui.GuiTextures.SLOT).showTipSupplier(this::shouldShowTip)); - } - } + public void initUI(Consumer widgetGroup) {} - private boolean shouldShowTip() { - return showTip; + @Override + public boolean showGlobalTransferLimitSlider() { + return !isBlacklistFilter() || getMaxTransferSize() > 0; } public void readFromNBT(NBTTagCompound tagCompound) { @@ -125,18 +127,8 @@ public void readFromNBT(NBTTagCompound tagCompound) { // } } - public boolean checkInputFluid(FluidStack fluidStack) { - for (int i = 0; i < filterReader.getSlots(); i++) { - var fluid = filterReader.getFluidStack(i); - if (fluid != null && fluid.isFluidEqual(fluidStack)) { - return true; - } - } - return false; - } - @Override - public int getFluidTransferLimit(FluidStack fluidStack) { + public int getTransferLimit(FluidStack fluidStack, int transferSize) { int limit = 0; for (int i = 0; i < this.filterReader.getSlots(); i++) { @@ -147,6 +139,7 @@ public int getFluidTransferLimit(FluidStack fluidStack) { } return limit; } + protected static class SimpleFluidFilterReader extends BaseFluidFilterReader { public SimpleFluidFilterReader(ItemStack container, int slots) { super(container, slots); @@ -163,10 +156,10 @@ public void setFluidAmounts(int amount) { } @Override - public void onMaxStackSizeChange() { - super.onMaxStackSizeChange(); + public void onTranferRateChange() { + super.onTranferRateChange(); for (int i = 0; i < getSlots(); i++) { - getFluidTank(i).setCapacity(getMaxCapacity()); + getFluidTank(i).setCapacity(getMaxTransferRate()); } } } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index b0709b2d7a8..84dbe8a3814 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -1,6 +1,5 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.layout.Column; @@ -57,7 +56,7 @@ public boolean test(ItemStack toTest) { } @Override - public int getSlotTransferLimit(int matchSlot, int globalTransferLimit) { + public int getTransferLimit(int matchSlot, int globalTransferLimit) { ItemStack stackInFilterSlot = filterReader.getStackInSlot(matchSlot); return Math.min(stackInFilterSlot.getCount(), globalTransferLimit); } @@ -113,7 +112,7 @@ public void initUI(Consumer widgetGroup) { if (count > 64) tooltip.addLine(IKey.format("Count: %s", TextFormattingUtil.formatNumbers(count))); }) - .slot(new PhantomItemSlot(this.filterReader, index, getMaxStackSizer()) + .slot(new PhantomItemSlot(this.filterReader, index, this::getMaxTransferSize) .slotGroup(filterInventory) .changeListener((newItem, onlyAmountChanged, client, init) -> { if (onlyAmountChanged && !init) { @@ -210,24 +209,24 @@ public boolean isIgnoreNBT() { @Override public int getSlotLimit(int slot) { - return getMaxStackSize(); + return getMaxTransferRate(); } @Override public void setStackInSlot(int slot, ItemStack stack) { if (!stack.isEmpty()) { - stack.setCount(Math.min(stack.getCount(), getMaxStackSize())); + stack.setCount(Math.min(stack.getCount(), getMaxTransferRate())); } super.setStackInSlot(slot, stack); } @Override - public void onMaxStackSizeChange() { - super.onMaxStackSizeChange(); + public void onTranferRateChange() { + super.onTranferRateChange(); for (int i = 0; i < getSlots(); i++) { ItemStack itemStack = getStackInSlot(i); if (!itemStack.isEmpty()) { - itemStack.setCount(Math.min(itemStack.getCount(), getMaxStackSize())); + itemStack.setCount(Math.min(itemStack.getCount(), getMaxTransferRate())); setStackInSlot(i, itemStack); } } diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 5c50e9d6baa..6859d5874d7 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -1,7 +1,5 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.utils.Alignment; - import com.cleanroommc.modularui.widgets.layout.Row; import gregtech.api.cover.CoverWithUI; @@ -45,7 +43,7 @@ public SmartFilteringMode getFilteringMode() { } @Override - public int getStackTransferLimit(ItemStack stack, int globalTransferLimit) { + public int getTransferLimit(ItemStack stack, int globalTransferLimit) { ItemAndMetadata itemAndMetadata = new ItemAndMetadata(stack); var filterMode = this.filterReader.getFilteringMode(); int cachedTransferRateValue = filterMode.transferStackSizesCache.getOrDefault(itemAndMetadata, -1); @@ -72,13 +70,13 @@ public int getStackTransferLimit(ItemStack stack, int globalTransferLimit) { @Override public void match(ItemStack itemStack) { var stack = itemStack.copy(); - stack.setCount(getStackTransferLimit(itemStack, Integer.MAX_VALUE)); + stack.setCount(getTransferLimit(itemStack, Integer.MAX_VALUE)); this.onMatch(stack.getCount() > 0, stack, this.getFilteringMode().ordinal()); } @Override public boolean test(ItemStack toTest) { - return getStackTransferLimit(toTest, Integer.MAX_VALUE) > 0; + return getTransferLimit(toTest, Integer.MAX_VALUE) > 0; } @Override diff --git a/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java b/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java index eabeb9cd6fd..85c8c83943f 100644 --- a/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java @@ -38,7 +38,7 @@ public void detectAndSendChanges() { } }); } - int newMaxStackSize = itemFilter == null ? 1 : itemFilter.getMaxStackSize(); + int newMaxStackSize = itemFilter == null ? 1 : itemFilter.getMaxTransferSize(); if (maxStackSize != newMaxStackSize) { this.maxStackSize = newMaxStackSize; writeUpdateInfo(3, buffer -> buffer.writeVarInt(maxStackSize)); @@ -55,7 +55,7 @@ public void readUpdateInfo(int id, PacketBuffer buffer) { try { this.itemFilter = FilterTypeRegistry.getItemFilterForStack(buffer.readItemStack()); this.itemFilter.initUI(this::addWidget); - this.itemFilter.setMaxStackSize(maxStackSize); + this.itemFilter.setMaxTransferSize(maxStackSize); } catch (IOException e) { throw new RuntimeException(e); } @@ -63,7 +63,7 @@ public void readUpdateInfo(int id, PacketBuffer buffer) { } else if (id == 3) { this.maxStackSize = buffer.readVarInt(); if (itemFilter != null) { - itemFilter.setMaxStackSize(maxStackSize); + itemFilter.setMaxTransferSize(maxStackSize); } } } 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 3646962e6ed..d0d9dee9eaa 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -7,13 +7,10 @@ import com.cleanroommc.modularui.utils.ItemStackItemHandler; -import java.util.function.Supplier; - public abstract class BaseFilterReader extends ItemStackItemHandler { protected final ItemStack container; - protected Supplier maxStackSizer = () -> 1; - protected int cache; + protected int maxTransferRate; protected static final String KEY_ITEMS = "Items"; protected static final String BLACKLIST = "is_blacklist"; public BaseFilterReader(ItemStack container, int slots) { @@ -25,11 +22,11 @@ public ItemStack getContainer () { return this.container; } - public abstract void onMaxStackSizeChange(); + public abstract void onTranferRateChange(); public final void setBlacklistFilter(boolean blacklistFilter) { getStackTag().setBoolean(BLACKLIST, blacklistFilter); - onMaxStackSizeChange(); + onTranferRateChange(); } public final boolean isBlacklistFilter() { @@ -39,6 +36,18 @@ public final boolean isBlacklistFilter() { return getStackTag().getBoolean(BLACKLIST); } + public final void setMaxTransferRate(int transferRate) { + if (this.maxTransferRate != transferRate) { + this.maxTransferRate = transferRate; + onTranferRateChange(); + } + } + + + public final int getMaxTransferRate() { + return this.isBlacklistFilter() ? 1 : this.maxTransferRate; + } + protected NBTTagCompound getStackTag() { if (!container.hasTagCompound()) { container.setTagCompound(new NBTTagCompound()); diff --git a/src/main/java/gregtech/common/pipelike/itempipe/net/ItemNetHandler.java b/src/main/java/gregtech/common/pipelike/itempipe/net/ItemNetHandler.java index 58c7eb52cb5..69c8dfa6a87 100644 --- a/src/main/java/gregtech/common/pipelike/itempipe/net/ItemNetHandler.java +++ b/src/main/java/gregtech/common/pipelike/itempipe/net/ItemNetHandler.java @@ -370,10 +370,10 @@ public ItemStack insertOverRobotArm(IItemHandler handler, CoverRoboticArm arm, I AtomicBoolean atomicBool = new AtomicBoolean(false); arm.getItemFilterContainer().onMatch(stack, (matched, match, matchedSlot) -> { if (matched && matchedSlot > 0) { - atomicInt.set(arm.getItemFilterContainer().getSlotTransferLimit(matchedSlot)); + atomicInt.set(arm.getItemFilterContainer().getTransferLimit(matchedSlot)); atomicBool.set(true); } else { - atomicInt.set(arm.getItemFilterContainer().getTransferStackSize()); + atomicInt.set(arm.getItemFilterContainer().getTransferSize()); } }); int count, rate = atomicInt.get(); diff --git a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java index 860990db978..a59e30c805b 100644 --- a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java +++ b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java @@ -69,10 +69,10 @@ private static void conveyorInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverCo ItemFilterContainer filter = conveyor.getItemFilterContainer(); if (conveyor instanceof CoverRoboticArm roboticArm) { - transferModeText(probeInfo, roboticArm.getTransferMode(), rateUnit, filter.getTransferStackSize(), - filter.getItemFilter() != null); + transferModeText(probeInfo, roboticArm.getTransferMode(), rateUnit, filter.getTransferSize(), + filter.getFilter() != null); } - itemFilterText(probeInfo, filter.getItemFilter()); + itemFilterText(probeInfo, filter.getFilter()); } /** @@ -87,8 +87,8 @@ private static void itemVoidingInfo(@NotNull IProbeInfo probeInfo, @NotNull Cove ItemFilterContainer container = voiding.getItemFilterContainer(); if (voiding instanceof CoverItemVoidingAdvanced advanced) { VoidingMode mode = advanced.getVoidingMode(); - voidingText(probeInfo, mode, unit, container.getTransferStackSize(), - container.getItemFilter() != null); + voidingText(probeInfo, mode, unit, container.getTransferSize(), + container.getFilter() != null); } } From 9fc7d52647d3c630e216181e01a4507712f8bff0 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 16 Jan 2024 16:31:13 -0700 Subject: [PATCH 097/260] more fixes from changes --- .../gregtech/common/covers/CoverConveyor.java | 4 ++-- .../gregtech/common/covers/CoverFluidFilter.java | 16 ++++++++-------- .../gregtech/common/covers/CoverItemFilter.java | 14 +++++++------- .../covers/filter/WidgetGroupFluidFilter.java | 10 +++++----- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index b1c773f6e50..892669c8340 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -525,8 +525,8 @@ public boolean usesMui2() { public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { var panel = GTGuis.createPanel(this, 176,192); - if (getItemFilterContainer().hasItemFilter()) { - getItemFilterContainer().setFilterStackSizer(this::getMaxStackSize); + if (getItemFilterContainer().hasFilter()) { + getItemFilterContainer().setMaxTransferSize(getMaxStackSize()); } return panel.child(CoverWithUI.createTitleRow(getPickItem())) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index d6809620619..cc46fe6f815 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -80,18 +80,18 @@ public void setFilterMode(FluidFilterMode filterMode) { public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFacing side, @Nullable EntityPlayer player, @NotNull ItemStack itemStack) { super.onAttachment(coverableView, side, player, itemStack); - this.fluidFilterContainer.setFluidFilter(FilterTypeRegistry.getFluidFilterForStack(itemStack)); + this.fluidFilterContainer.setFilter(FilterTypeRegistry.getFluidFilterForStack(itemStack)); } @Override public @NotNull ItemStack getPickItem() { - return this.fluidFilterContainer.hasFluidFilter() ? getFluidFilter().getContainerStack() : super.getPickItem(); + return this.fluidFilterContainer.hasFilter() ? getFluidFilter().getContainerStack() : super.getPickItem(); } @Override public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { - packetBuffer.writeBoolean(this.fluidFilterContainer.hasFluidFilter()); - if (this.fluidFilterContainer.hasFluidFilter()) { + packetBuffer.writeBoolean(this.fluidFilterContainer.hasFilter()); + if (this.fluidFilterContainer.hasFilter()) { packetBuffer.writeItemStack(getFluidFilter().getContainerStack()); } } @@ -100,7 +100,7 @@ public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { if (packetBuffer.readBoolean()) { try { - this.fluidFilterContainer.setFluidFilter(FilterTypeRegistry.getFluidFilterForStack(packetBuffer.readItemStack())); + this.fluidFilterContainer.setFilter(FilterTypeRegistry.getFluidFilterForStack(packetBuffer.readItemStack())); } catch (IOException e) { throw new RuntimeException(e); } @@ -112,7 +112,7 @@ public FluidFilterMode getFilterMode() { } public FluidFilter getFluidFilter() { - return this.fluidFilterContainer.getFluidFilter(); + return this.fluidFilterContainer.getFilter(); } @Override @@ -173,7 +173,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag @Override public @NotNull @Unmodifiable List<@NotNull ItemStack> getDrops() { - return Collections.singletonList(this.fluidFilterContainer.getFluidFilter().getContainerStack()); + return Collections.singletonList(this.fluidFilterContainer.getFilter().getContainerStack()); } @Override @@ -212,7 +212,7 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { this.filterMode = FluidFilterMode.values()[tagCompound.getInteger("FilterMode")]; this.fluidFilterContainer.setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); var stack = new ItemStack(tagCompound.getCompoundTag("Filter")); - this.fluidFilterContainer.setFluidFilter(FilterTypeRegistry.getFluidFilterForStack(stack)); + this.fluidFilterContainer.setFilter(FilterTypeRegistry.getFluidFilterForStack(stack)); } private class FluidHandlerFiltered extends FluidHandlerDelegate { diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index be6ae501a08..f04ec3ae0a2 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -64,8 +64,8 @@ public CoverItemFilter(@NotNull CoverDefinition definition, @NotNull CoverableVi public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFacing side, @Nullable EntityPlayer player, @NotNull ItemStack itemStack) { super.onAttachment(coverableView, side, player, itemStack); - this.itemFilter.setItemFilter(FilterTypeRegistry.getItemFilterForStack(itemStack.copy())); - this.itemFilter.setMaxStackSize(1); + this.itemFilter.setFilter(FilterTypeRegistry.getItemFilterForStack(itemStack.copy())); + this.itemFilter.setMaxTransferSize(1); } @Override @@ -75,8 +75,8 @@ public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFaci @Override public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { - packetBuffer.writeBoolean(itemFilter.hasItemFilter()); - if (itemFilter.hasItemFilter()) { + packetBuffer.writeBoolean(itemFilter.hasFilter()); + if (itemFilter.hasFilter()) { packetBuffer.writeItemStack(getItemFilter().getContainerStack()); } } @@ -85,7 +85,7 @@ public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { if (!packetBuffer.readBoolean()) return; try { - this.itemFilter.setItemFilter(FilterTypeRegistry.getItemFilterForStack(packetBuffer.readItemStack())); + this.itemFilter.setFilter(FilterTypeRegistry.getItemFilterForStack(packetBuffer.readItemStack())); } catch (IOException e) { throw new RuntimeException(e); } @@ -101,7 +101,7 @@ public ItemFilterMode getFilterMode() { } public ItemFilter getItemFilter() { - return this.itemFilter.getItemFilter(); + return this.itemFilter.getFilter(); } @Override @@ -186,7 +186,7 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); this.filterMode = ItemFilterMode.values()[tagCompound.getInteger("FilterMode")]; var stack = new ItemStack(tagCompound.getCompoundTag("Filter")); - this.itemFilter.setItemFilter(FilterTypeRegistry.getItemFilterForStack(stack)); + this.itemFilter.setFilter(FilterTypeRegistry.getItemFilterForStack(stack)); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java b/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java index f2c08f856b3..191f038ccc3 100644 --- a/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java @@ -40,10 +40,10 @@ public void detectAndSendChanges() { } }); } - if (fluidFilter != null && showTipSupplier != null && fluidFilter.showTip != showTipSupplier.get()) { - fluidFilter.showTip = showTipSupplier.get(); - writeUpdateInfo(3, buffer -> buffer.writeBoolean(fluidFilter.showTip)); - } +// if (fluidFilter != null && showTipSupplier != null && fluidFilter.showTip != showTipSupplier.get()) { +// fluidFilter.showTip = showTipSupplier.get(); +// writeUpdateInfo(3, buffer -> buffer.writeBoolean(fluidFilter.showTip)); +// } } @Override @@ -57,7 +57,7 @@ public void readUpdateInfo(int id, PacketBuffer buffer) { this.fluidFilter.initUI(this::addWidget); } } else if (id == 3) { - fluidFilter.showTip = buffer.readBoolean(); +// fluidFilter.showTip = buffer.readBoolean(); } } } From 1efc372a80b333c7feb72b442b9a0b13c08ed8c0 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 16 Jan 2024 17:41:50 -0700 Subject: [PATCH 098/260] more work on filters --- .../gregtech/common/covers/CoverFluidRegulator.java | 5 +++-- .../common/covers/filter/BaseFilterContainer.java | 6 +++--- .../gregtech/common/covers/filter/FluidFilter.java | 6 +++--- .../common/covers/filter/FluidFilterContainer.java | 2 +- .../common/covers/filter/SimpleFluidFilter.java | 9 +++++---- .../common/covers/filter/SimpleItemFilter.java | 1 - .../covers/filter/readers/BaseFilterReader.java | 13 +++++++++---- 7 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 599c8aeca89..22959891d94 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -59,6 +59,7 @@ public CoverFluidRegulator(@NotNull CoverDefinition definition, @NotNull Coverab @NotNull EnumFacing attachedSide, int tier, int mbPerTick) { super(definition, coverableView, attachedSide, tier, mbPerTick); this.fluidFilter = new FluidFilterContainer(this); + this.fluidFilter.setMaxTransferSize(1000); } public int getTransferAmount() { @@ -251,10 +252,10 @@ public TransferMode getTransferMode() { } private boolean shouldDisplayAmountSlider() { - if (!this.fluidFilter.hasFilter()) { + if (transferMode == TransferMode.TRANSFER_ANY) { return false; } - return this.transferMode != TransferMode.TRANSFER_ANY && this.fluidFilter.getFilter().showGlobalTransferLimitSlider(); + return fluidFilter.showGlobalTransferLimitSlider(); } public String getTransferAmountString() { diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 236333ad6fd..da82de27137 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -35,8 +35,8 @@ public int getMaxTransferSize() { } public void setMaxTransferSize(int maxTransferSize) { - this.maxTransferSize = maxTransferSize; - if (hasFilter()) currentItemFilter.setMaxTransferSize(maxTransferSize); + this.maxTransferSize = MathHelper.clamp(maxTransferSize, 1, Integer.MAX_VALUE); + if (hasFilter()) currentItemFilter.setMaxTransferSize(this.maxTransferSize); } public boolean hasFilter() { @@ -67,7 +67,7 @@ public void setOnFilterInstanceChange(Runnable onFilterInstanceChange) { } public boolean showGlobalTransferLimitSlider() { - return getMaxTransferSize() > 1 && (isBlacklistFilter() || !hasFilter() || currentItemFilter.showGlobalTransferLimitSlider()); + return getMaxTransferSize() > 0 && (isBlacklistFilter() || !hasFilter() || currentItemFilter.showGlobalTransferLimitSlider()); } public int getTransferLimit(int slotIndex) { diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index beead2a65fd..09982338c25 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -22,6 +22,7 @@ import net.minecraftforge.fluids.IFluidTank; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.function.Consumer; @@ -124,6 +125,7 @@ protected abstract static class BaseFluidFilterReader extends BaseFilterReader { public BaseFluidFilterReader(ItemStack container, int slots) { super(container, slots); + this.maxTransferRate = 1000; } @Override @@ -139,13 +141,11 @@ public NBTTagList getItemsNbt() { return nbt.getTagList(KEY_FLUIDS, Constants.NBT.TAG_COMPOUND); } + @Nullable public FluidStack getFluidStack(int i) { return getFluidTank(i).getFluid(); } public abstract IFluidTank getFluidTank(int i); - - @Override - public void onTranferRateChange() {} } } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index a05e97223fc..18dac9533df 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -103,7 +103,7 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) panel.closePanel(); } }, true) - .size(18).marginRight(4) + .size(18).marginRight(2) .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY)) .child(new ButtonWidget<>() .setEnabledIf(w -> hasFilter()) diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 5eb78d21864..bfd44a32526 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -68,7 +68,7 @@ public ItemStack getContainerStack() { for (int i = 0; i < syncHandlers.length; i++) { var tank = this.filterReader.getFluidTank(i); syncHandlers[i] = new FixedFluidSlotSH(tank).phantom(true); - syncHandlers[i].setValue(tank.getFluid(), false, false); + syncHandlers[i].updateCacheFromSource(true); } return new Row().coverChildrenHeight().widthRel(1f) @@ -115,7 +115,7 @@ public void initUI(Consumer widgetGroup) {} @Override public boolean showGlobalTransferLimitSlider() { - return !isBlacklistFilter() || getMaxTransferSize() > 0; + return isBlacklistFilter() && getMaxTransferSize() > 0; } public void readFromNBT(NBTTagCompound tagCompound) { @@ -157,9 +157,10 @@ public void setFluidAmounts(int amount) { @Override public void onTranferRateChange() { - super.onTranferRateChange(); for (int i = 0; i < getSlots(); i++) { - getFluidTank(i).setCapacity(getMaxTransferRate()); + var stack = getFluidStack(i); + if (stack == null) continue; + getFluidTank(i).setFluidAmount(Math.min(stack.amount, getMaxTransferRate())); } } } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 84dbe8a3814..5cb50272fdf 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -222,7 +222,6 @@ public void setStackInSlot(int slot, ItemStack stack) { @Override public void onTranferRateChange() { - super.onTranferRateChange(); for (int i = 0; i < getSlots(); i++) { ItemStack itemStack = getStackInSlot(i); if (!itemStack.isEmpty()) { diff --git a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java index d0d9dee9eaa..1a77104c5cb 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -3,6 +3,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.math.MathHelper; import net.minecraftforge.common.util.Constants; import com.cleanroommc.modularui.utils.ItemStackItemHandler; @@ -10,7 +11,7 @@ public abstract class BaseFilterReader extends ItemStackItemHandler { protected final ItemStack container; - protected int maxTransferRate; + protected int maxTransferRate = 1; protected static final String KEY_ITEMS = "Items"; protected static final String BLACKLIST = "is_blacklist"; public BaseFilterReader(ItemStack container, int slots) { @@ -25,8 +26,11 @@ public ItemStack getContainer () { public abstract void onTranferRateChange(); public final void setBlacklistFilter(boolean blacklistFilter) { - getStackTag().setBoolean(BLACKLIST, blacklistFilter); - onTranferRateChange(); + var old = getStackTag().getBoolean(BLACKLIST); + if (old != blacklistFilter) { + getStackTag().setBoolean(BLACKLIST, blacklistFilter); + onTranferRateChange(); + } } public final boolean isBlacklistFilter() { @@ -37,6 +41,7 @@ public final boolean isBlacklistFilter() { } public final void setMaxTransferRate(int transferRate) { + transferRate = MathHelper.clamp(transferRate, 1, Integer.MAX_VALUE); if (this.maxTransferRate != transferRate) { this.maxTransferRate = transferRate; onTranferRateChange(); @@ -45,7 +50,7 @@ public final void setMaxTransferRate(int transferRate) { public final int getMaxTransferRate() { - return this.isBlacklistFilter() ? 1 : this.maxTransferRate; + return this.maxTransferRate; } protected NBTTagCompound getStackTag() { From 21a3db45e64adb740efbf894998eb4d312bbbe81 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 17 Jan 2024 15:22:18 -0700 Subject: [PATCH 099/260] fix typo --- .../java/gregtech/common/covers/filter/FluidFilter.java | 2 +- src/main/java/gregtech/common/covers/filter/ItemFilter.java | 5 ++--- .../gregtech/common/covers/filter/SimpleFluidFilter.java | 2 +- .../gregtech/common/covers/filter/SimpleItemFilter.java | 2 +- .../common/covers/filter/readers/BaseFilterReader.java | 6 +++--- 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index 09982338c25..f525f6eccdf 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -93,7 +93,7 @@ public final void setMaxTransferSize(int maxTransferSize) { } public final void onMaxStackSizeChange() { - this.filterReader.onTranferRateChange(); + this.filterReader.onTransferRateChange(); } public abstract void readFromNBT(NBTTagCompound tagCompound); diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index ee3fc98e5ad..ce3ff5d0385 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -17,7 +17,6 @@ import org.jetbrains.annotations.NotNull; import java.util.function.Consumer; -import java.util.function.Supplier; public abstract class ItemFilter implements Filter { @@ -54,7 +53,7 @@ public final void setMaxTransferSize(int maxStackSize) { } public final void onMaxStackSizeChange() { - this.filterReader.onTranferRateChange(); + this.filterReader.onTransferRateChange(); } public abstract boolean showGlobalTransferLimitSlider(); @@ -124,6 +123,6 @@ public BaseItemFilterReader(ItemStack container, int slots) { super(container, slots); } - public void onTranferRateChange() {} + public void onTransferRateChange() {} } } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index bfd44a32526..5406c59f18c 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -156,7 +156,7 @@ public void setFluidAmounts(int amount) { } @Override - public void onTranferRateChange() { + public void onTransferRateChange() { for (int i = 0; i < getSlots(); i++) { var stack = getFluidStack(i); if (stack == null) continue; diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 5cb50272fdf..d9e8e764d30 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -221,7 +221,7 @@ public void setStackInSlot(int slot, ItemStack stack) { } @Override - public void onTranferRateChange() { + public void onTransferRateChange() { for (int i = 0; i < getSlots(); i++) { ItemStack itemStack = getStackInSlot(i); if (!itemStack.isEmpty()) { diff --git a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java index 1a77104c5cb..26c082e1ed8 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -23,13 +23,13 @@ public ItemStack getContainer () { return this.container; } - public abstract void onTranferRateChange(); + public abstract void onTransferRateChange(); public final void setBlacklistFilter(boolean blacklistFilter) { var old = getStackTag().getBoolean(BLACKLIST); if (old != blacklistFilter) { getStackTag().setBoolean(BLACKLIST, blacklistFilter); - onTranferRateChange(); + onTransferRateChange(); } } @@ -44,7 +44,7 @@ public final void setMaxTransferRate(int transferRate) { transferRate = MathHelper.clamp(transferRate, 1, Integer.MAX_VALUE); if (this.maxTransferRate != transferRate) { this.maxTransferRate = transferRate; - onTranferRateChange(); + onTransferRateChange(); } } From 9ba301fbc10a24c771f66f9594d0a5a36e05d639 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 17 Jan 2024 15:23:13 -0700 Subject: [PATCH 100/260] try fix fluid slot SH more --- .../covers/filter/SimpleFluidFilter.java | 35 +++++++++++++++---- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 5406c59f18c..e7c277b790c 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -64,12 +64,12 @@ public ItemStack getContainerStack() { @Override public @NotNull Widget createWidgets(GuiSyncManager syncManager) { - FluidSlotSyncHandler[] syncHandlers = new FluidSlotSyncHandler[MAX_FLUID_SLOTS]; - for (int i = 0; i < syncHandlers.length; i++) { - var tank = this.filterReader.getFluidTank(i); - syncHandlers[i] = new FixedFluidSlotSH(tank).phantom(true); - syncHandlers[i].updateCacheFromSource(true); - } +// FluidSlotSyncHandler[] syncHandlers = new FluidSlotSyncHandler[MAX_FLUID_SLOTS]; +// for (int i = 0; i < syncHandlers.length; i++) { +// var tank = this.filterReader.getFluidTank(i); +// syncHandlers[i] = new FixedFluidSlotSH(tank).phantom(true); +// syncHandlers[i].updateCacheFromSource(true); +// } return new Row().coverChildrenHeight().widthRel(1f) .child(SlotGroupWidget.builder() @@ -77,7 +77,7 @@ public ItemStack getContainerStack() { "FFF", "FFF") .key('F', i -> new FluidSlot() - .syncHandler(syncHandlers[i])) + .syncHandler(new FixedFluidSlotSH(filterReader.getFluidTank(i)).phantom(true))) .build().marginRight(4)) .child(super.createWidgets(syncManager)); } @@ -265,6 +265,9 @@ public static class FixedFluidSlotSH extends FluidSlotSyncHandler { public FixedFluidSlotSH(IFluidTank fluidTank) { super(fluidTank); + if (this.updateCacheFromSource(true) && fluidTank.getFluid() != null) { + this.lastStoredPhantomFluid = fluidTank.getFluid().copy(); + } } @Override @@ -279,6 +282,17 @@ public void readOnServer(int id, PacketBuffer buf) { } } + @Override + public void setValue(@Nullable FluidStack value, boolean setSource, boolean sync) { + super.setValue(value, setSource, sync); + if (setSource) { + this.getFluidTank().drain(Integer.MAX_VALUE, true); + if (!isFluidEmpty(value)) { + this.getFluidTank().fill(value.copy(), true); + } + } + } + @Override public void tryClickPhantom(MouseData mouseData) { EntityPlayer player = getSyncManager().getPlayer(); @@ -290,6 +304,7 @@ public void tryClickPhantom(MouseData mouseData) { if (currentStack.isEmpty() || fluidHandlerItem == null) { if (this.canDrainSlot()) { this.getFluidTank().drain(mouseData.shift ? Integer.MAX_VALUE : 1000, true); + this.setValue(this.getFluidTank().getFluid(), false, true); } } else { FluidStack cellFluid = fluidHandlerItem.drain(Integer.MAX_VALUE, false); @@ -305,6 +320,7 @@ public void tryClickPhantom(MouseData mouseData) { } else { if (this.canDrainSlot()) { this.getFluidTank().drain(mouseData.shift ? Integer.MAX_VALUE : 1000, true); + this.setValue(this.getFluidTank().getFluid(), false, true); } } } @@ -315,15 +331,18 @@ public void tryClickPhantom(MouseData mouseData) { FluidStack toFill = currentFluid.copy(); toFill.amount = 1000; this.getFluidTank().fill(toFill, true); + this.setValue(this.getFluidTank().getFluid(), false, true); } } else if (this.lastStoredPhantomFluid != null) { FluidStack toFill = this.lastStoredPhantomFluid.copy(); toFill.amount = this.controlsAmount() ? 1000 : 1; this.getFluidTank().fill(toFill, true); + this.setValue(this.getFluidTank().getFluid(), false, true); } } } else if (mouseData.mouseButton == 2 && currentFluid != null && this.canDrainSlot()) { this.getFluidTank().drain(mouseData.shift ? Integer.MAX_VALUE : 1000, true); + this.setValue(this.getFluidTank().getFluid(), false, true); } } @@ -346,6 +365,7 @@ public void tryScrollPhantom(MouseData mouseData) { toFill.amount = this.controlsAmount() ? amount : 1; this.getFluidTank().fill(toFill, true); } + this.setValue(this.getFluidTank().getFluid(), false, true); return; } if (amount > 0 && this.controlsAmount()) { @@ -355,6 +375,7 @@ public void tryScrollPhantom(MouseData mouseData) { } else if (amount < 0) { this.getFluidTank().drain(-amount, true); } + this.setValue(this.getFluidTank().getFluid(), false, true); } } } From 216d5df5c012ac961328683f24fc298d2a51819b Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 17 Jan 2024 15:27:49 -0700 Subject: [PATCH 101/260] add bucket mode rename filter container fix issues with regulator --- .../common/covers/CoverFluidRegulator.java | 105 +++++++++++------- .../gregtech/common/covers/CoverPump.java | 20 ++-- .../covers/filter/SimpleFluidFilter.java | 37 ++++-- 3 files changed, 104 insertions(+), 58 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 22959891d94..d8e40c8e2ad 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -1,32 +1,26 @@ package gregtech.common.covers; -import com.cleanroommc.modularui.factory.SidedPosGuiData; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Color; -import com.cleanroommc.modularui.value.sync.EnumSyncValue; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; -import com.cleanroommc.modularui.value.sync.IntSyncValue; -import com.cleanroommc.modularui.widget.ParentWidget; - -import com.cleanroommc.modularui.widgets.layout.Row; - -import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; - import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.ModularUI; -import gregtech.api.gui.widgets.*; +import gregtech.api.gui.widgets.CycleButtonWidget; +import gregtech.api.gui.widgets.ImageWidget; +import gregtech.api.gui.widgets.IncrementButtonWidget; +import gregtech.api.gui.widgets.ServerWidgetGroup; +import gregtech.api.gui.widgets.SimpleTextWidget; +import gregtech.api.gui.widgets.TextFieldWidget2; +import gregtech.api.gui.widgets.WidgetGroup; import gregtech.api.util.GTTransferUtils; import gregtech.api.util.TextFormattingUtil; import gregtech.client.renderer.texture.Textures; import gregtech.client.renderer.texture.cube.SimpleSidedCubeRenderer; -import gregtech.common.covers.filter.FluidFilter; import gregtech.common.covers.filter.FluidFilterContainer; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.MathHelper; import net.minecraft.util.text.ITextComponent; @@ -39,6 +33,15 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import com.cleanroommc.modularui.factory.SidedPosGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Color; +import com.cleanroommc.modularui.value.sync.EnumSyncValue; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.value.sync.StringSyncValue; +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widgets.layout.Row; +import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; import com.google.common.math.IntMath; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import org.apache.logging.log4j.message.FormattedMessage; @@ -58,8 +61,7 @@ public class CoverFluidRegulator extends CoverPump { public CoverFluidRegulator(@NotNull CoverDefinition definition, @NotNull CoverableView coverableView, @NotNull EnumFacing attachedSide, int tier, int mbPerTick) { super(definition, coverableView, attachedSide, tier, mbPerTick); - this.fluidFilter = new FluidFilterContainer(this); - this.fluidFilter.setMaxTransferSize(1000); + this.fluidFilterContainer = new FluidFilterContainer(this); } public int getTransferAmount() { @@ -83,11 +85,11 @@ protected int doTransferFluidsInternal(IFluidHandler myFluidHandler, IFluidHandl } return switch (transferMode) { case TRANSFER_ANY -> GTTransferUtils.transferFluids(sourceHandler, destHandler, transferLimit, - fluidFilter::testFluidStack); - case KEEP_EXACT -> doKeepExact(transferLimit, sourceHandler, destHandler, fluidFilter::testFluidStack, + fluidFilterContainer::testFluidStack); + case KEEP_EXACT -> doKeepExact(transferLimit, sourceHandler, destHandler, fluidFilterContainer::testFluidStack, this.transferAmount); case TRANSFER_EXACT -> doTransferExact(transferLimit, sourceHandler, destHandler, - fluidFilter::testFluidStack, this.transferAmount); + fluidFilterContainer::testFluidStack, this.transferAmount); }; } @@ -96,9 +98,8 @@ protected int doTransferExact(int transferLimit, IFluidHandler sourceHandler, IF int fluidLeftToTransfer = transferLimit; for (IFluidTankProperties tankProperties : sourceHandler.getTankProperties()) { FluidStack sourceFluid = tankProperties.getContents(); - if (this.fluidFilter.getFilterWrapper().getFluidFilter() != null && - transferMode != TransferMode.TRANSFER_ANY) { - supplyAmount = this.fluidFilter.getFilterWrapper().getFluidFilter().getTransferLimit(sourceFluid); + if (this.fluidFilterContainer.hasFilter()) { + supplyAmount = this.fluidFilterContainer.getFilter().getTransferLimit(sourceFluid, supplyAmount); } if (fluidLeftToTransfer < supplyAmount) break; @@ -140,9 +141,8 @@ protected int doKeepExact(final int transferLimit, if (transferred >= transferLimit) break; - if (this.fluidFilter.getFilterWrapper().getFluidFilter() != null && - transferMode != TransferMode.TRANSFER_ANY) { - keepAmount = this.fluidFilter.getFilterWrapper().getFluidFilter().getTransferLimit(fluidStack); + if (this.fluidFilterContainer.hasFilter()) { + keepAmount = this.fluidFilterContainer.getFilter().getTransferLimit(fluidStack, keepAmount); } // if fluid needs to be moved to meet the Keep Exact value @@ -243,8 +243,21 @@ private static Map collectDistinctFluids(IFluidHandler hand } public void setTransferMode(TransferMode transferMode) { - this.transferMode = transferMode; - this.markDirty(); + if (this.transferMode != transferMode) { + this.transferMode = transferMode; + this.fluidFilterContainer.setBucketOnly(transferMode == TransferMode.TRANSFER_ANY); + this.fluidFilterContainer.setMaxTransferSize(getMaxTransferSize()); + this.setTransferAmount(getTransferAmount()); + this.markDirty(); + } + } + + public int getMaxTransferSize() { + return switch (this.transferMode) { + case TRANSFER_ANY -> 0; + case TRANSFER_EXACT -> maxFluidTransferRate; + case KEEP_EXACT -> Integer.MAX_VALUE; + }; } public TransferMode getTransferMode() { @@ -255,7 +268,7 @@ private boolean shouldDisplayAmountSlider() { if (transferMode == TransferMode.TRANSFER_ANY) { return false; } - return fluidFilter.showGlobalTransferLimitSlider(); + return fluidFilterContainer.showGlobalTransferLimitSlider(); } public String getTransferAmountString() { @@ -289,15 +302,12 @@ public void setBucketMode(BucketMode bucketMode) { private void adjustTransferSize(int amount) { if (bucketMode == BucketMode.BUCKET) amount *= 1000; - switch (this.transferMode) { - case TRANSFER_EXACT -> setTransferAmount( - MathHelper.clamp(this.transferAmount + amount, 0, this.maxFluidTransferRate)); - case KEEP_EXACT -> setTransferAmount(MathHelper.clamp(this.transferAmount + amount, 0, Integer.MAX_VALUE)); - } + + setTransferAmount(this.transferAmount + amount); } private void setTransferAmount(int transferAmount) { - this.transferAmount = transferAmount; + this.transferAmount = MathHelper.clamp(transferAmount, 0, getMaxTransferSize()); markDirty(); } @@ -358,9 +368,9 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa var transferMode = new EnumSyncValue<>(TransferMode.class, this::getTransferMode, this::setTransferMode); syncManager.syncValue("transfer_mode", transferMode); - var filterTransferSize = new IntSyncValue( - getFluidFilterContainer()::getMaxTransferSize, - getFluidFilterContainer()::setMaxTransferSize); + var filterTransferSize = new StringSyncValue( + this::getTransferAmountString, + s -> setTransferAmount(Integer.parseInt(s))); filterTransferSize.updateCacheFromSource(true); return super.createUI(mainPanel, syncManager) @@ -371,10 +381,25 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa .child(new Row().right(0).coverChildrenHeight() .child(new TextFieldWidget().widthRel(0.5f).right(0) .setEnabledIf(w -> shouldDisplayAmountSlider()) + .setNumbers(0, Integer.MAX_VALUE) .value(filterTransferSize) .setTextColor(Color.WHITE.darker(1)))); } + @Override + public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { + super.writeInitialSyncData(packetBuffer); + packetBuffer.writeEnumValue(this.transferMode); + packetBuffer.writeInt(this.transferAmount); + } + + @Override + public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { + super.readInitialSyncData(packetBuffer); + this.transferMode = packetBuffer.readEnumValue(TransferMode.class); + this.transferAmount = packetBuffer.readInt(); + } + @Override public void writeToNBT(@NotNull NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); @@ -387,11 +412,11 @@ public void writeToNBT(@NotNull NBTTagCompound tagCompound) { public void readFromNBT(@NotNull NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); this.transferMode = TransferMode.values()[tagCompound.getInteger("TransferMode")]; + this.fluidFilterContainer.setBucketOnly(transferMode == TransferMode.TRANSFER_ANY); // legacy NBT tag if (!tagCompound.hasKey("filterv2") && tagCompound.hasKey("TransferAmount")) { - FluidFilter filter = getFluidFilterContainer().getFilterWrapper().getFluidFilter(); - if (filter != null) { - filter.configureFilterTanks(tagCompound.getInteger("TransferAmount")); + if (this.fluidFilterContainer.hasFilter()) { + this.fluidFilterContainer.getFilter().configureFilterTanks(tagCompound.getInteger("TransferAmount")); } } this.transferAmount = tagCompound.getInteger("TransferAmount"); diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 0084ed3cc3d..5a984dc529f 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -77,7 +77,7 @@ public class CoverPump extends CoverBase implements CoverWithUI, ITickable, ICon protected int fluidLeftToTransferLastSecond; private CoverableFluidHandlerWrapper fluidHandlerWrapper; protected boolean isWorkingAllowed = true; - protected FluidFilterContainer fluidFilter; + protected FluidFilterContainer fluidFilterContainer; protected BucketMode bucketMode = BucketMode.MILLI_BUCKET; public CoverPump(@NotNull CoverDefinition definition, @NotNull CoverableView coverableView, @@ -87,7 +87,7 @@ public CoverPump(@NotNull CoverDefinition definition, @NotNull CoverableView cov this.maxFluidTransferRate = mbPerTick; this.transferRate = mbPerTick; this.fluidLeftToTransferLastSecond = transferRate; - this.fluidFilter = new FluidFilterContainer(this); + this.fluidFilterContainer = new FluidFilterContainer(this); } public void setTransferRate(int transferRate) { @@ -135,7 +135,7 @@ protected void setManualImportExportMode(ManualImportExportMode manualImportExpo } public FluidFilterContainer getFluidFilterContainer() { - return fluidFilter; + return fluidFilterContainer; } @Override @@ -165,16 +165,16 @@ protected int doTransferFluidsInternal(IFluidHandler myFluidHandler, IFluidHandl int transferLimit) { if (pumpMode == PumpMode.IMPORT) { return GTTransferUtils.transferFluids(fluidHandler, myFluidHandler, transferLimit, - fluidFilter::testFluidStack); + fluidFilterContainer::testFluidStack); } else if (pumpMode == PumpMode.EXPORT) { return GTTransferUtils.transferFluids(myFluidHandler, fluidHandler, transferLimit, - fluidFilter::testFluidStack); + fluidFilterContainer::testFluidStack); } return 0; } protected boolean checkInputFluid(FluidStack fluidStack) { - return fluidFilter.testFluidStack(fluidStack); + return fluidFilterContainer.testFluidStack(fluidStack); } protected ModularUI buildUI(ModularUI.Builder builder, EntityPlayer player) { @@ -230,7 +230,7 @@ public ModularUI createUI(EntityPlayer player) { ManualImportExportMode.class, this::getManualImportExportMode, this::setManualImportExportMode) .setTooltipHoverString("cover.universal.manual_import_export.mode.description")); - this.fluidFilter.initUI(88, primaryGroup::addWidget); + this.fluidFilterContainer.initUI(88, primaryGroup::addWidget); ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176, 184 + 82) .widget(primaryGroup) @@ -356,7 +356,7 @@ public boolean canInteractWithOutputSide() { @Override public void onRemoval() { - dropInventoryContents(fluidFilter.getFilterInventory()); + dropInventoryContents(fluidFilterContainer.getFilterInventory()); } @Override @@ -405,7 +405,7 @@ public void writeToNBT(@NotNull NBTTagCompound tagCompound) { tagCompound.setInteger("DistributionMode", distributionMode.ordinal()); tagCompound.setBoolean("WorkingAllowed", isWorkingAllowed); tagCompound.setInteger("ManualImportExportMode", manualImportExportMode.ordinal()); - tagCompound.setTag("Filter", fluidFilter.serializeNBT()); + tagCompound.setTag("Filter", fluidFilterContainer.serializeNBT()); } @Override @@ -417,6 +417,8 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { this.isWorkingAllowed = tagCompound.getBoolean("WorkingAllowed"); this.manualImportExportMode = ManualImportExportMode.values()[tagCompound.getInteger("ManualImportExportMode")]; this.fluidFilter.deserializeNBT(tagCompound.getCompoundTag("Filter")); + this.fluidFilterContainer.deserializeNBT(tagCompound.getCompoundTag("Filter")); + this.fluidFilterContainer.setBucketOnly(true); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index e7c277b790c..52e82b4fbff 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -137,16 +137,22 @@ public int getTransferLimit(FluidStack fluidStack, int transferSize) { limit = fluid.amount; } } - return limit; + return isBlacklistFilter() ? transferSize : limit; } protected static class SimpleFluidFilterReader extends BaseFluidFilterReader { + + protected WritableFluidTank[] fluidTanks; public SimpleFluidFilterReader(ItemStack container, int slots) { super(container, slots); + fluidTanks = new WritableFluidTank[slots]; + for (int i = 0; i < fluidTanks.length; i++) { + fluidTanks[i] = new WritableFluidTank(this, getItemsNbt().getCompoundTagAt(i), 1000); + } } public WritableFluidTank getFluidTank(int i) { - return new WritableFluidTank(getItemsNbt().getCompoundTagAt(i), 1000); + return fluidTanks[i]; } public void setFluidAmounts(int amount) { @@ -161,20 +167,23 @@ public void onTransferRateChange() { var stack = getFluidStack(i); if (stack == null) continue; getFluidTank(i).setFluidAmount(Math.min(stack.amount, getMaxTransferRate())); + getFluidTank(i).setCapacity(getMaxTransferRate()); } } } public static class WritableFluidTank implements IFluidTank { - private final NBTTagCompound fluidTank; + private final SimpleFluidFilterReader filterReader; protected static final String FLUID_AMOUNT = "Amount"; protected static final String CAPACITY = "Capacity"; protected static final String FLUID = "Fluid"; protected static final String EMPTY = "Empty"; - public WritableFluidTank(NBTTagCompound fluidTank, int initialCapacity) { + + protected WritableFluidTank(SimpleFluidFilterReader filterReader, NBTTagCompound fluidTank, int initialCapacity) { + this.filterReader = filterReader; this.fluidTank = fluidTank; - setCapacity(initialCapacity); + setCapacity(fluidTank.hasKey(CAPACITY) ? fluidTank.getInteger(CAPACITY) : initialCapacity); } public void setCapacity(int capacity) { @@ -210,6 +219,10 @@ public void setFluid(@Nullable FluidStack stack) { } } + protected boolean isBucketOnly() { + return filterReader.isBucketOnly(); + } + @Override public int getFluidAmount() { return isEmpty() ? 0 : getFluidTag().getInteger(FLUID_AMOUNT); @@ -230,14 +243,16 @@ public FluidTankInfo getInfo() { public int fill(FluidStack resource, boolean doFill) { if (isEmpty() || !getFluid().isFluidEqual(resource)) { setFluid(resource); + if (isBucketOnly()) setFluidAmount(1000); return resource.amount; - } else { + } else if (!isBucketOnly()) { var fluid = getFluid(); int accepted = Math.min(resource.amount, getCapacity() - fluid.amount); fluid.amount += accepted; setFluid(fluid); return accepted; } + return 0; } @SuppressWarnings("DataFlowIssue") @@ -250,11 +265,15 @@ public FluidStack drain(int maxDrain, boolean doDrain) { var copy = getFluid(); copy.amount -= fluid.amount; - if (copy.amount == 0) + if (isBucketOnly()) { setFluid(null); - else - setFluid(copy); + } else { + if (copy.amount == 0) + setFluid(null); + else + setFluid(copy); + } return fluid; } } From 97a17663c199247503c4844e39f2ed8ecaa5bdc2 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 17 Jan 2024 15:28:32 -0700 Subject: [PATCH 102/260] use int instead of object --- .../java/gregtech/common/covers/CoverConveyor.java | 12 +++++++----- .../java/gregtech/common/covers/CoverRoboticArm.java | 8 ++++---- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 892669c8340..c7661745ab4 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -26,6 +26,8 @@ import gregtech.common.covers.filter.ItemFilterContainer; import gregtech.common.pipelike.itempipe.tile.TileEntityItemPipe; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; + import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -195,7 +197,7 @@ protected int doTransferItemsAny(IItemHandler itemHandler, IItemHandler myItemHa } protected int doTransferItemsByGroup(IItemHandler itemHandler, IItemHandler myItemHandler, - Map itemInfos, int maxTransferAmount) { + Map itemInfos, int maxTransferAmount) { if (conveyorMode == ConveyorMode.IMPORT) { return moveInventoryItems(itemHandler, myItemHandler, itemInfos, maxTransferAmount); } else if (conveyorMode == ConveyorMode.EXPORT) { @@ -204,7 +206,7 @@ protected int doTransferItemsByGroup(IItemHandler itemHandler, IItemHandler myIt return 0; } - protected Map doCountDestinationInventoryItemsByMatchIndex(IItemHandler itemHandler, + protected Map doCountDestinationInventoryItemsByMatchIndex(IItemHandler itemHandler, IItemHandler myItemHandler) { if (conveyorMode == ConveyorMode.IMPORT) { return countInventoryItemsByMatchSlot(myItemHandler); @@ -292,7 +294,7 @@ protected static boolean moveInventoryItemsExact(IItemHandler sourceInventory, I } protected int moveInventoryItems(IItemHandler sourceInventory, IItemHandler targetInventory, - Map itemInfos, int maxTransferAmount) { + Map itemInfos, int maxTransferAmount) { int itemsLeftToTransfer = maxTransferAmount; for (int i = 0; i < sourceInventory.getSlots(); i++) { ItemStack itemStack = sourceInventory.getStackInSlot(i); @@ -432,8 +434,8 @@ protected Map countInventoryItemsByType(@NotNull IItemH } @NotNull - protected Map countInventoryItemsByMatchSlot(@NotNull IItemHandler inventory) { - Map result = new Object2ObjectOpenHashMap<>(); + protected Map countInventoryItemsByMatchSlot(@NotNull IItemHandler inventory) { + Map result = new Int2ObjectOpenHashMap<>(); for (int srcIndex = 0; srcIndex < inventory.getSlots(); srcIndex++) { ItemStack itemStack = inventory.getStackInSlot(srcIndex); if (itemStack.isEmpty()) { diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index ad928f7392f..18f762bc507 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -131,13 +131,13 @@ protected int doTransferExact(IItemHandler itemHandler, IItemHandler myItemHandl } protected int doKeepExact(IItemHandler itemHandler, IItemHandler myItemHandler, int maxTransferAmount) { - Map currentItemAmount = doCountDestinationInventoryItemsByMatchIndex(itemHandler, + Map currentItemAmount = doCountDestinationInventoryItemsByMatchIndex(itemHandler, myItemHandler); - Map sourceItemAmounts = doCountDestinationInventoryItemsByMatchIndex(myItemHandler, + Map sourceItemAmounts = doCountDestinationInventoryItemsByMatchIndex(myItemHandler, itemHandler); - Iterator iterator = sourceItemAmounts.keySet().iterator(); + Iterator iterator = sourceItemAmounts.keySet().iterator(); while (iterator.hasNext()) { - Object filterSlotIndex = iterator.next(); + int filterSlotIndex = iterator.next(); GroupItemInfo sourceInfo = sourceItemAmounts.get(filterSlotIndex); int itemToKeepAmount = itemFilterContainer.getTransferLimit(sourceInfo.filterSlot); From 444164d80d38cfb6e75a51b4f919164ce86a3eeb Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 17 Jan 2024 15:29:55 -0700 Subject: [PATCH 103/260] use throughput as string make text field number only force synchandlers to update cache --- .../java/gregtech/common/covers/CoverPump.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 5a984dc529f..d24fec54b24 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -1,5 +1,7 @@ package gregtech.common.covers; +import com.cleanroommc.modularui.value.sync.StringSyncValue; + import gregtech.api.GTValues; import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; @@ -91,7 +93,7 @@ public CoverPump(@NotNull CoverDefinition definition, @NotNull CoverableView cov } public void setTransferRate(int transferRate) { - this.transferRate = transferRate; + this.transferRate = MathHelper.clamp(transferRate, 1, maxFluidTransferRate); markDirty(); } @@ -101,7 +103,7 @@ public int getTransferRate() { protected void adjustTransferRate(int amount) { amount *= this.bucketMode == BucketMode.BUCKET ? 1000 : 1; - setTransferRate(MathHelper.clamp(transferRate + amount, 1, maxFluidTransferRate)); + setTransferRate(this.transferRate + amount); } public void setPumpMode(PumpMode pumpMode) { @@ -257,11 +259,20 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { var manualIOmode = new EnumSyncValue<>(ManualImportExportMode.class, this::getManualImportExportMode, this::setManualImportExportMode); + manualIOmode.updateCacheFromSource(true); + var throughput = new IntSyncValue(this::getTransferRate, this::setTransferRate); + throughput.updateCacheFromSource(true); + + var throughputString = new StringSyncValue(throughput::getStringValue, throughput::setStringValue); + throughputString.updateCacheFromSource(true); + var pumpMode = new EnumSyncValue<>(PumpMode.class, this::getPumpMode, this::setPumpMode); + pumpMode.updateCacheFromSource(true); syncManager.syncValue("manual_io", manualIOmode); syncManager.syncValue("pump_mode", pumpMode); + syncManager.syncValue("throughput", throughput); return new Column().top(24).margin(7, 0) .widthRel(1f).coverChildrenHeight() @@ -281,7 +292,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa .left(18).right(18) .setTextColor(Color.WHITE.darker(1)) .setNumbers(1, maxFluidTransferRate) - .value(throughput) + .value(throughputString) .background(GTGuiTextures.DISPLAY) .onUpdateListener(w -> { if (throughput.updateCacheFromSource(false)) { @@ -416,7 +427,6 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { this.distributionMode = DistributionMode.values()[tagCompound.getInteger("DistributionMode")]; this.isWorkingAllowed = tagCompound.getBoolean("WorkingAllowed"); this.manualImportExportMode = ManualImportExportMode.values()[tagCompound.getInteger("ManualImportExportMode")]; - this.fluidFilter.deserializeNBT(tagCompound.getCompoundTag("Filter")); this.fluidFilterContainer.deserializeNBT(tagCompound.getCompoundTag("Filter")); this.fluidFilterContainer.setBucketOnly(true); } From 6317422fefcc7fe9b1c6e84821204cb27333454e Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 17 Jan 2024 15:30:13 -0700 Subject: [PATCH 104/260] classes affected by rename --- .../common/covers/CoverFluidVoiding.java | 10 +++++----- .../common/covers/CoverFluidVoidingAdvanced.java | 16 ++++++++-------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoiding.java b/src/main/java/gregtech/common/covers/CoverFluidVoiding.java index f9476a66fcd..b0e8637ae65 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoiding.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoiding.java @@ -39,8 +39,8 @@ public CoverFluidVoiding(@NotNull CoverDefinition definition, @NotNull Coverable @NotNull EnumFacing attachedSide) { super(definition, coverableView, attachedSide, 0, Integer.MAX_VALUE); this.isWorkingAllowed = false; - this.fluidFilter = new FluidFilterContainer(this); - this.fluidFilter.setMaxTransferSize(Integer.MAX_VALUE); + this.fluidFilterContainer = new FluidFilterContainer(this); + this.fluidFilterContainer.setMaxTransferSize(Integer.MAX_VALUE); } @Override @@ -56,7 +56,7 @@ protected void doTransferFluids() { if (myFluidHandler == null) { return; } - GTTransferUtils.transferFluids(myFluidHandler, nullFluidTank, Integer.MAX_VALUE, fluidFilter::testFluidStack); + GTTransferUtils.transferFluids(myFluidHandler, nullFluidTank, Integer.MAX_VALUE, fluidFilterContainer::testFluidStack); } @Override @@ -69,7 +69,7 @@ public ModularUI createUI(EntityPlayer player) { WidgetGroup primaryGroup = new WidgetGroup(); primaryGroup.addWidget(new LabelWidget(10, 5, getUITitle())); - this.fluidFilter.initUI(20, primaryGroup::addWidget); + this.fluidFilterContainer.initUI(20, primaryGroup::addWidget); primaryGroup.addWidget(new CycleButtonWidget(10, 92, 80, 18, this::isWorkingEnabled, this::setWorkingEnabled, "cover.voiding.label.disabled", "cover.voiding.label.enabled") @@ -121,7 +121,7 @@ public NullFluidTank() { @Override public int fill(FluidStack resource, boolean doFill) { - if (fluidFilter.testFluidStack(resource)) { + if (fluidFilterContainer.testFluidStack(resource)) { return resource.amount; } return 0; diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index 44aad613dc8..623f8ef9d13 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -47,8 +47,8 @@ protected void doTransferFluids() { } switch (voidingMode) { case VOID_ANY -> GTTransferUtils.transferFluids(myFluidHandler, nullFluidTank, Integer.MAX_VALUE, - fluidFilter::testFluidStack); - case VOID_OVERFLOW -> voidOverflow(myFluidHandler, fluidFilter::testFluidStack, this.transferAmount); + fluidFilterContainer::testFluidStack); + case VOID_OVERFLOW -> voidOverflow(myFluidHandler, fluidFilterContainer::testFluidStack, this.transferAmount); } } @@ -67,9 +67,9 @@ protected void voidOverflow(final IFluidHandler sourceHandler, for (IFluidTankProperties tankProperties : sourceHandler.getTankProperties()) { FluidStack sourceFluid = tankProperties.getContents(); - if (this.fluidFilter.getFilterWrapper().getFluidFilter() != null && + if (this.fluidFilterContainer.getFilterWrapper().getFluidFilter() != null && voidingMode == VoidingMode.VOID_OVERFLOW) { - keepAmount = this.fluidFilter.getFilterWrapper().getFluidFilter().getTransferLimit(sourceFluid); + keepAmount = this.fluidFilterContainer.getFilterWrapper().getFluidFilter().getTransferLimit(sourceFluid); } if (sourceFluid == null || sourceFluid.amount == 0 || !getFluidFilterContainer().testFluidStack(sourceFluid, true)) @@ -114,7 +114,7 @@ public VoidingMode getVoidingMode() { } private boolean shouldDisplayAmountSlider() { - if (this.fluidFilter.getFilterWrapper().getFluidFilter() != null) { + if (this.fluidFilterContainer.getFilterWrapper().getFluidFilter() != null) { return false; } @@ -157,7 +157,7 @@ public ModularUI createUI(EntityPlayer player) { public void initFilterUI(int y, Consumer widgetGroup) { widgetGroup.accept(new LabelWidget(10, y, "cover.pump.fluid_filter.title")); - widgetGroup.accept(new SlotWidget(fluidFilter.getFilterInventory(), 0, 10, y + 15) + widgetGroup.accept(new SlotWidget(fluidFilterContainer.getFilterInventory(), 0, 10, y + 15) .setBackgroundTexture(GuiTextures.SLOT, GuiTextures.FILTER_SLOT_OVERLAY)); ServerWidgetGroup stackSizeGroup = new ServerWidgetGroup(this::shouldDisplayAmountSlider); @@ -199,8 +199,8 @@ public void initFilterUI(int y, Consumer widgetGroup) { widgetGroup.accept(stackSizeGroup); - this.fluidFilter.initUI(y + 15, widgetGroup); - this.fluidFilter.blacklistUI(y + 15, widgetGroup, + this.fluidFilterContainer.initUI(y + 15, widgetGroup); + this.fluidFilterContainer.blacklistUI(y + 15, widgetGroup, () -> voidingMode != VoidingMode.VOID_OVERFLOW); } From 9efdd249034d37b6a229e48afe0181976d1bab3c Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 17 Jan 2024 15:30:41 -0700 Subject: [PATCH 105/260] forgor bucket only methods --- .../gregtech/common/covers/filter/FluidFilter.java | 13 +++++++++++++ .../common/covers/filter/FluidFilterContainer.java | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index f525f6eccdf..2e3101c9376 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -76,6 +76,10 @@ public int getTransferLimit(FluidStack stack) { .addTooltip(1, IKey.lang("cover.filter.blacklist.enabled"))); } + public final void setBucketOnly(boolean bucketOnly) { + this.filterReader.setBucketOnly(bucketOnly); + } + public abstract ItemStack getContainerStack(); public boolean showGlobalTransferLimitSlider() { @@ -122,12 +126,21 @@ public final void markDirty() { protected abstract static class BaseFluidFilterReader extends BaseFilterReader { protected static final String KEY_FLUIDS = "FluidTank"; + protected static final String BUCKET_ONLY = "BucketOnly"; public BaseFluidFilterReader(ItemStack container, int slots) { super(container, slots); this.maxTransferRate = 1000; } + public final void setBucketOnly(boolean bucketOnly) { + getStackTag().setBoolean(BUCKET_ONLY, bucketOnly); + } + + public final boolean isBucketOnly() { + return getStackTag().getBoolean(BUCKET_ONLY); + } + @Override public NBTTagList getItemsNbt() { NBTTagCompound nbt = getStackTag(); diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 18dac9533df..b878f30153f 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -126,6 +126,12 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) .left(36).right(0).height(18)); } + public void setBucketOnly(boolean bucketOnly) { + if (hasFilter()) { + getFilter().setBucketOnly(bucketOnly); + } + } + @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { var stack = ItemStack.EMPTY; From 52cbf660b23da4cae6c27e446aed948b56d78efc Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 17 Jan 2024 16:22:38 -0700 Subject: [PATCH 106/260] i think fluid filters are done now? --- .../gregtech/common/covers/CoverFluidRegulator.java | 1 + src/main/java/gregtech/common/covers/CoverPump.java | 1 + .../gregtech/common/covers/filter/FluidFilter.java | 7 ++++++- .../common/covers/filter/SimpleFluidFilter.java | 11 ++++++----- .../covers/filter/readers/BaseFilterReader.java | 2 +- 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index d8e40c8e2ad..2167a87fb97 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -397,6 +397,7 @@ public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.readInitialSyncData(packetBuffer); this.transferMode = packetBuffer.readEnumValue(TransferMode.class); + getFluidFilterContainer().setBucketOnly(this.transferMode == TransferMode.TRANSFER_ANY); this.transferAmount = packetBuffer.readInt(); } diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index d24fec54b24..020ea2a6a32 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -353,6 +353,7 @@ public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.readInitialSyncData(packetBuffer); this.pumpMode = packetBuffer.readEnumValue(PumpMode.class); getFluidFilterContainer().readInitialSyncData(packetBuffer); + getFluidFilterContainer().setBucketOnly(true); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index 2e3101c9376..01c2c008d73 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -138,7 +138,7 @@ public final void setBucketOnly(boolean bucketOnly) { } public final boolean isBucketOnly() { - return getStackTag().getBoolean(BUCKET_ONLY); + return getStackTag().getBoolean(BUCKET_ONLY) || isBlacklistFilter(); } @Override @@ -160,5 +160,10 @@ public FluidStack getFluidStack(int i) { } public abstract IFluidTank getFluidTank(int i); + + @Override + public void setMaxTransferRate(int transferRate) { + super.setMaxTransferRate(isBucketOnly() ? 1000 : transferRate); + } } } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 52e82b4fbff..2f4175e7285 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -161,6 +161,11 @@ public void setFluidAmounts(int amount) { } } + @Override + public int getMaxTransferRate() { + return isBucketOnly() ? 1000 : super.getMaxTransferRate(); + } + @Override public void onTransferRateChange() { for (int i = 0; i < getSlots(); i++) { @@ -323,7 +328,6 @@ public void tryClickPhantom(MouseData mouseData) { if (currentStack.isEmpty() || fluidHandlerItem == null) { if (this.canDrainSlot()) { this.getFluidTank().drain(mouseData.shift ? Integer.MAX_VALUE : 1000, true); - this.setValue(this.getFluidTank().getFluid(), false, true); } } else { FluidStack cellFluid = fluidHandlerItem.drain(Integer.MAX_VALUE, false); @@ -339,7 +343,6 @@ public void tryClickPhantom(MouseData mouseData) { } else { if (this.canDrainSlot()) { this.getFluidTank().drain(mouseData.shift ? Integer.MAX_VALUE : 1000, true); - this.setValue(this.getFluidTank().getFluid(), false, true); } } } @@ -350,19 +353,17 @@ public void tryClickPhantom(MouseData mouseData) { FluidStack toFill = currentFluid.copy(); toFill.amount = 1000; this.getFluidTank().fill(toFill, true); - this.setValue(this.getFluidTank().getFluid(), false, true); } } else if (this.lastStoredPhantomFluid != null) { FluidStack toFill = this.lastStoredPhantomFluid.copy(); toFill.amount = this.controlsAmount() ? 1000 : 1; this.getFluidTank().fill(toFill, true); - this.setValue(this.getFluidTank().getFluid(), false, true); } } } else if (mouseData.mouseButton == 2 && currentFluid != null && this.canDrainSlot()) { this.getFluidTank().drain(mouseData.shift ? Integer.MAX_VALUE : 1000, true); - this.setValue(this.getFluidTank().getFluid(), false, true); } + this.setValue(this.getFluidTank().getFluid(), false, true); } @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 26c082e1ed8..7f5c7150d96 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -49,7 +49,7 @@ public final void setMaxTransferRate(int transferRate) { } - public final int getMaxTransferRate() { + public int getMaxTransferRate() { return this.maxTransferRate; } From 6f987181c9b7912388f1f780cf990c8b067fb01e Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 17 Jan 2024 16:22:59 -0700 Subject: [PATCH 107/260] shit --- .../gregtech/common/covers/filter/readers/BaseFilterReader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 7f5c7150d96..e1260378e19 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -40,7 +40,7 @@ public final boolean isBlacklistFilter() { return getStackTag().getBoolean(BLACKLIST); } - public final void setMaxTransferRate(int transferRate) { + public void setMaxTransferRate(int transferRate) { transferRate = MathHelper.clamp(transferRate, 1, Integer.MAX_VALUE); if (this.maxTransferRate != transferRate) { this.maxTransferRate = transferRate; From e017159bb11d515715ff539f797989a604959279 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 17 Jan 2024 17:04:50 -0700 Subject: [PATCH 108/260] add null check for lang --- src/main/java/gregtech/api/cover/CoverWithUI.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/cover/CoverWithUI.java b/src/main/java/gregtech/api/cover/CoverWithUI.java index 1f568a9f6c6..d17234430a9 100644 --- a/src/main/java/gregtech/api/cover/CoverWithUI.java +++ b/src/main/java/gregtech/api/cover/CoverWithUI.java @@ -222,7 +222,10 @@ public Row build() { row.child(button); } } - row.child(IKey.lang(this.lang).asWidget().align(Alignment.CenterRight).height(18)); + + if (this.lang != null && !this.lang.isEmpty()) + row.child(IKey.lang(this.lang).asWidget().align(Alignment.CenterRight).height(18)); + return row; } } From e7b33041ba0ccb35795c14e16053fb83c0168fc4 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 17 Jan 2024 17:05:39 -0700 Subject: [PATCH 109/260] set number to avoid number format exception --- src/main/java/gregtech/common/covers/CoverRoboticArm.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index 18f762bc507..aa2cc393f5f 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -224,6 +224,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g .child(new Row().right(0).coverChildrenHeight() .child(new TextFieldWidget().widthRel(0.5f).right(0) .setEnabledIf(w -> shouldDisplayAmountSlider()) + .setNumbers(0, Integer.MAX_VALUE) .value(filterTransferSize) .setTextColor(Color.WHITE.darker(1)))); } From b0a6c53b5c4b25d41780d70c4717a6f202a264a9 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 17 Jan 2024 17:06:41 -0700 Subject: [PATCH 110/260] update synchandlers after creation handle bucketmode --- .../common/covers/CoverFluidRegulator.java | 14 ++++++++++++-- .../gregtech/common/covers/CoverPump.java | 19 ++++++++++--------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 2167a87fb97..9ecfbfaea80 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -366,11 +366,18 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag @Override protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { var transferMode = new EnumSyncValue<>(TransferMode.class, this::getTransferMode, this::setTransferMode); + transferMode.updateCacheFromSource(true); syncManager.syncValue("transfer_mode", transferMode); + var bucketMode = new EnumSyncValue<>(BucketMode.class, this::getBucketMode, this::setBucketMode); + bucketMode.updateCacheFromSource(true); + syncManager.syncValue("bucket_mode", bucketMode); + var filterTransferSize = new StringSyncValue( this::getTransferAmountString, - s -> setTransferAmount(Integer.parseInt(s))); + s -> setTransferAmount(getBucketMode() == BucketMode.MILLI_BUCKET ? + Integer.parseInt(s) : + Integer.parseInt(s) * 1000)); filterTransferSize.updateCacheFromSource(true); return super.createUI(mainPanel, syncManager) @@ -378,7 +385,10 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa .value(transferMode) .lang("Transfer Mode") .build()) - .child(new Row().right(0).coverChildrenHeight() + .child(new EnumRowBuilder<>(BucketMode.class) + .value(bucketMode) +// .overlay() todo bucket mode overlays + .build() .child(new TextFieldWidget().widthRel(0.5f).right(0) .setEnabledIf(w -> shouldDisplayAmountSlider()) .setNumbers(0, Integer.MAX_VALUE) diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 020ea2a6a32..f68c9648f39 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -264,7 +264,15 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa var throughput = new IntSyncValue(this::getTransferRate, this::setTransferRate); throughput.updateCacheFromSource(true); - var throughputString = new StringSyncValue(throughput::getStringValue, throughput::setStringValue); + var throughputString = new StringSyncValue( + () -> String.valueOf(switch (getBucketMode()) { + case BUCKET -> throughput.getIntValue() / 1000; + case MILLI_BUCKET -> throughput.getIntValue(); + }), + s -> throughput.setValue(switch (getBucketMode()) { + case BUCKET -> Integer.parseInt(s) * 1000; + case MILLI_BUCKET -> Integer.parseInt(s); + })); throughputString.updateCacheFromSource(true); var pumpMode = new EnumSyncValue<>(PumpMode.class, this::getPumpMode, this::setPumpMode); @@ -281,7 +289,6 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa .child(new ButtonWidget<>() .left(0).width(18) .onMousePressed(mouseButton -> { - throughput.updateCacheFromSource(false); int val = throughput.getValue() - getIncrementValue(MouseData.create(mouseButton)); throughput.setValue(val, true, true); Interactable.playButtonClickSound(); @@ -293,16 +300,10 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa .setTextColor(Color.WHITE.darker(1)) .setNumbers(1, maxFluidTransferRate) .value(throughputString) - .background(GTGuiTextures.DISPLAY) - .onUpdateListener(w -> { - if (throughput.updateCacheFromSource(false)) { - w.setText(throughput.getStringValue()); - } - })) + .background(GTGuiTextures.DISPLAY)) .child(new ButtonWidget<>() .right(0).width(18) .onMousePressed(mouseButton -> { - throughput.updateCacheFromSource(false); int val = throughput.getValue() + getIncrementValue(MouseData.create(mouseButton)); throughput.setValue(val, true, true); Interactable.playButtonClickSound(); From 2af4b8c381f787c773233e6369ef912a0cc24852 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 17 Jan 2024 17:07:17 -0700 Subject: [PATCH 111/260] update synchandlers after creation (part two) --- .../gregtech/common/covers/CoverConveyor.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index c7661745ab4..2dfbe0dd565 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -1,5 +1,7 @@ package gregtech.common.covers; +import com.cleanroommc.modularui.value.sync.StringSyncValue; + import gregtech.api.GTValues; import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; @@ -544,9 +546,13 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g this::getConveyorMode, this::setConveyorMode); IntSyncValue throughput = new IntSyncValue(this::getTransferRate, this::setTransferRate); + throughput.updateCacheFromSource(true); + + StringSyncValue formattedThroughput = new StringSyncValue(throughput::getStringValue, throughput::setStringValue); guiSyncManager.syncValue("manual_io", manualIOmode); guiSyncManager.syncValue("conveyor_mode", conveyorMode); + guiSyncManager.syncValue("throughput", throughput); return new Column().top(24).margin(7, 0) .widthRel(1f).coverChildrenHeight() @@ -555,7 +561,6 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g .child(new ButtonWidget<>() .left(0).width(18) .onMousePressed(mouseButton -> { - throughput.updateCacheFromSource(false); int val = throughput.getValue() - getIncrementValue(MouseData.create(mouseButton)); throughput.setValue(val, true, true); Interactable.playButtonClickSound(); @@ -566,17 +571,11 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g .left(18).right(18) .setTextColor(Color.WHITE.darker(1)) .setNumbers(1, maxItemTransferRate) - .value(throughput) - .background(GTGuiTextures.DISPLAY) - .onUpdateListener(w -> { - if (throughput.updateCacheFromSource(false)) { - w.setText(throughput.getStringValue()); - } - })) + .value(formattedThroughput) + .background(GTGuiTextures.DISPLAY)) .child(new ButtonWidget<>() .right(0).width(18) .onMousePressed(mouseButton -> { - throughput.updateCacheFromSource(false); int val = throughput.getValue() + getIncrementValue(MouseData.create(mouseButton)); throughput.setValue(val, true, true); Interactable.playButtonClickSound(); From ec0524df8ae05c51fa8d0e93162b38e58ee4576c Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 17 Jan 2024 19:04:28 -0700 Subject: [PATCH 112/260] small fixes for filter container --- .../gregtech/common/covers/filter/BaseFilterContainer.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index da82de27137..a851c4d76c9 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -36,6 +36,7 @@ public int getMaxTransferSize() { public void setMaxTransferSize(int maxTransferSize) { this.maxTransferSize = MathHelper.clamp(maxTransferSize, 1, Integer.MAX_VALUE); + this.transferSize = MathHelper.clamp(this.transferSize, 1, this.maxTransferSize); if (hasFilter()) currentItemFilter.setMaxTransferSize(this.maxTransferSize); } @@ -58,7 +59,6 @@ public final void setFilter(T newFilter) { } public void onFilterInstanceChange() { - this.maxTransferSize = isBlacklistFilter() ? 1 : getMaxTransferSize(); dirtyNotifiable.markAsDirty(); } @@ -94,13 +94,12 @@ public int getTransferSize() { if (!showGlobalTransferLimitSlider()) { return getMaxTransferSize(); } - return maxTransferSize; + return this.transferSize; } public void setTransferSize(int transferSize) { this.transferSize = MathHelper.clamp(transferSize, 1, getMaxTransferSize()); onFilterInstanceChange(); - dirtyNotifiable.markAsDirty(); } @Deprecated From b682296be1150d1942ab1b17e85b80ffcdbc842c Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 17 Jan 2024 19:04:50 -0700 Subject: [PATCH 113/260] add overlay for transfer modes --- src/main/java/gregtech/api/mui/GTGuiTextures.java | 3 +++ .../gui/overlay/transfer_mode_overlay.png | Bin 0 -> 455 bytes 2 files changed, 3 insertions(+) create mode 100644 src/main/resources/assets/gregtech/textures/gui/overlay/transfer_mode_overlay.png diff --git a/src/main/java/gregtech/api/mui/GTGuiTextures.java b/src/main/java/gregtech/api/mui/GTGuiTextures.java index 22b4760c150..7861cf1914e 100644 --- a/src/main/java/gregtech/api/mui/GTGuiTextures.java +++ b/src/main/java/gregtech/api/mui/GTGuiTextures.java @@ -180,6 +180,9 @@ public static class IDs { public static final UITexture[] CONVEYOR_MODE_OVERLAY = slice("textures/gui/overlay/conveyor_mode_overlay.png", 18, 18 * 2, 18, 18, true); + public static final UITexture[] TRANSFER_MODE_OVERLAY = slice("textures/gui/overlay/transfer_mode_overlay.png", + 18, 18 * 3, 18, 18, true); + // todo bronze/steel/primitive fluid slots? // SLOT OVERLAYS diff --git a/src/main/resources/assets/gregtech/textures/gui/overlay/transfer_mode_overlay.png b/src/main/resources/assets/gregtech/textures/gui/overlay/transfer_mode_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..9364d84544d7df924d3ff3b2d05f8624158a2d44 GIT binary patch literal 455 zcmV;&0XY7NP)Px$fk{L`R7i>Kma$I5Fc5}6R}2*^8%Qi2k-AnHv+)K6hDe=I1_qvjM_`P^5YeGC zyn)rVV(r4vM_@HW>e#O13k)Dt$}d@oe3xHmJN|Sq=*VSWFu}wkGl|qFcjO0_YcHY4 zB*+DnAF#Ul%3yj9n_X;@Yy8~#3{-(?jR2Nw&m>jN*$SIGpY5wDQ0>xe;Pq6yN;bQA zc)5OM%3pUoS)kfIsI3 zbRYXq@b}0!tF*GC9&7X#vI*#I6Bbb$?9~BY>(ZUj-7~5ewUT@@7*IRtAC;n@qzG&h z1%GVRM?oM7zo;UKf)YX7n_HI{k%9t2sdUpr)+NTWri+4oeI<`8*F#DaG Date: Wed, 17 Jan 2024 19:05:06 -0700 Subject: [PATCH 114/260] move blacklist check to here --- src/main/java/gregtech/common/covers/filter/ItemFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index ce3ff5d0385..de48e2c598d 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -45,7 +45,7 @@ public final boolean isBlacklistFilter() { } public final int getMaxTransferSize() { - return this.filterReader.getMaxTransferRate(); + return isBlacklistFilter() ? 1 : this.filterReader.getMaxTransferRate(); } public final void setMaxTransferSize(int maxStackSize) { From 98dc36d0017d3d896ce4766551dd6e1dee223eda Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 17 Jan 2024 19:05:34 -0700 Subject: [PATCH 115/260] add method to set size for overlays --- src/main/java/gregtech/api/cover/CoverWithUI.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/gregtech/api/cover/CoverWithUI.java b/src/main/java/gregtech/api/cover/CoverWithUI.java index d17234430a9..934051121a0 100644 --- a/src/main/java/gregtech/api/cover/CoverWithUI.java +++ b/src/main/java/gregtech/api/cover/CoverWithUI.java @@ -192,6 +192,14 @@ public EnumRowBuilder overlay(IDrawable... overlay) { return this; } + public EnumRowBuilder overlay(int size, IDrawable... overlay) { + this.overlay = new IDrawable[overlay.length]; + for (int i = 0; i < overlay.length; i++) { + this.overlay[i] = overlay[i].asIcon().size(size); + } + return this; + } + private BoolValue.Dynamic boolValueOf(EnumSyncValue syncValue, T value) { return new BoolValue.Dynamic(() -> syncValue.getValue() == value, $ -> syncValue.setValue(value)); } From fb9656ef2892d6b8914a65a9cbcb367fde15d6ac Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 17 Jan 2024 19:07:21 -0700 Subject: [PATCH 116/260] comment out old mui code (remove later) remove redundant methods in fluid regulator fix issues with setting filter transfer size in UI --- .../common/covers/CoverFluidRegulator.java | 190 +++++++----------- .../common/covers/CoverRoboticArm.java | 100 +++++---- 2 files changed, 121 insertions(+), 169 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 9ecfbfaea80..678faa01eb9 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -2,31 +2,16 @@ import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; -import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.ModularUI; -import gregtech.api.gui.widgets.CycleButtonWidget; -import gregtech.api.gui.widgets.ImageWidget; -import gregtech.api.gui.widgets.IncrementButtonWidget; -import gregtech.api.gui.widgets.ServerWidgetGroup; -import gregtech.api.gui.widgets.SimpleTextWidget; -import gregtech.api.gui.widgets.TextFieldWidget2; -import gregtech.api.gui.widgets.WidgetGroup; +import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.GTTransferUtils; -import gregtech.api.util.TextFormattingUtil; import gregtech.client.renderer.texture.Textures; import gregtech.client.renderer.texture.cube.SimpleSidedCubeRenderer; import gregtech.common.covers.filter.FluidFilterContainer; import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.util.text.event.HoverEvent; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidTankProperties; @@ -40,15 +25,12 @@ import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.StringSyncValue; import com.cleanroommc.modularui.widget.ParentWidget; -import com.cleanroommc.modularui.widgets.layout.Row; import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; -import com.google.common.math.IntMath; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import org.apache.logging.log4j.message.FormattedMessage; import org.jetbrains.annotations.NotNull; import java.util.Arrays; -import java.util.List; import java.util.Map; import java.util.Objects; import java.util.function.Predicate; @@ -56,7 +38,6 @@ public class CoverFluidRegulator extends CoverPump { protected TransferMode transferMode = TransferMode.TRANSFER_ANY; - protected int transferAmount = 0; public CoverFluidRegulator(@NotNull CoverDefinition definition, @NotNull CoverableView coverableView, @NotNull EnumFacing attachedSide, int tier, int mbPerTick) { @@ -64,10 +45,6 @@ public CoverFluidRegulator(@NotNull CoverDefinition definition, @NotNull Coverab this.fluidFilterContainer = new FluidFilterContainer(this); } - public int getTransferAmount() { - return transferAmount; - } - @Override protected int doTransferFluidsInternal(IFluidHandler myFluidHandler, IFluidHandler fluidHandler, int transferLimit) { @@ -87,9 +64,9 @@ protected int doTransferFluidsInternal(IFluidHandler myFluidHandler, IFluidHandl case TRANSFER_ANY -> GTTransferUtils.transferFluids(sourceHandler, destHandler, transferLimit, fluidFilterContainer::testFluidStack); case KEEP_EXACT -> doKeepExact(transferLimit, sourceHandler, destHandler, fluidFilterContainer::testFluidStack, - this.transferAmount); + this.fluidFilterContainer.getTransferSize()); case TRANSFER_EXACT -> doTransferExact(transferLimit, sourceHandler, destHandler, - fluidFilterContainer::testFluidStack, this.transferAmount); + fluidFilterContainer::testFluidStack, this.fluidFilterContainer.getTransferSize()); }; } @@ -247,7 +224,6 @@ public void setTransferMode(TransferMode transferMode) { this.transferMode = transferMode; this.fluidFilterContainer.setBucketOnly(transferMode == TransferMode.TRANSFER_ANY); this.fluidFilterContainer.setMaxTransferSize(getMaxTransferSize()); - this.setTransferAmount(getTransferAmount()); this.markDirty(); } } @@ -271,92 +247,72 @@ private boolean shouldDisplayAmountSlider() { return fluidFilterContainer.showGlobalTransferLimitSlider(); } - public String getTransferAmountString() { - return Integer.toString(this.bucketMode == BucketMode.BUCKET ? transferAmount / 1000 : transferAmount); - } - - private String getTransferSizeString() { - int val = transferAmount; - if (this.bucketMode == BucketMode.BUCKET) { - val /= 1000; - } - return val == -1 ? "" : TextFormattingUtil.formatLongToCompactString(val); - } - - protected void getHoverString(List textList) { - ITextComponent keepComponent = new TextComponentString(getTransferSizeString()); - TextComponentTranslation hoverKeep = new TextComponentTranslation( - "cover.fluid_regulator." + transferMode.name().toLowerCase(), this.transferAmount); - keepComponent.getStyle().setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverKeep)); - textList.add(keepComponent); - } - - @Override - public void setBucketMode(BucketMode bucketMode) { - super.setBucketMode(bucketMode); - if (this.bucketMode == BucketMode.BUCKET) { - setTransferAmount(transferAmount / 1000 * 1000); - } - } - - private void adjustTransferSize(int amount) { - if (bucketMode == BucketMode.BUCKET) - amount *= 1000; - - setTransferAmount(this.transferAmount + amount); - } - - private void setTransferAmount(int transferAmount) { - this.transferAmount = MathHelper.clamp(transferAmount, 0, getMaxTransferSize()); - markDirty(); - } +// @Override +// public void setBucketMode(BucketMode bucketMode) { +// super.setBucketMode(bucketMode); +// if (this.bucketMode == BucketMode.BUCKET) { +// setTransferAmount(transferAmount / 1000 * 1000); +// } +// } +// +// private void adjustTransferSize(int amount) { +// if (bucketMode == BucketMode.BUCKET) +// amount *= 1000; +// +// setTransferAmount(this.transferAmount + amount); +// } +// +// private void setTransferAmount(int transferAmount) { +// this.transferAmount = MathHelper.clamp(transferAmount, 0, getMaxTransferSize()); +// markDirty(); +// } @Override protected String getUITitle() { return "cover.fluid_regulator.title"; } - @SuppressWarnings("UnstableApiUsage") - @Override - protected ModularUI buildUI(ModularUI.Builder builder, EntityPlayer player) { - WidgetGroup filterGroup = new WidgetGroup(); - filterGroup.addWidget(new CycleButtonWidget(92, 43, 75, 18, - TransferMode.class, this::getTransferMode, this::setTransferMode) - .setTooltipHoverString("cover.fluid_regulator.transfer_mode.description")); - - ServerWidgetGroup stackSizeGroup = new ServerWidgetGroup(this::shouldDisplayAmountSlider); - stackSizeGroup.addWidget(new ImageWidget(110, 64, 38, 18, GuiTextures.DISPLAY)); - - stackSizeGroup.addWidget(new IncrementButtonWidget(148, 64, 18, 18, 1, 10, 100, 1000, this::adjustTransferSize) - .setDefaultTooltip() - .setTextScale(0.7f) - .setShouldClientCallback(false)); - stackSizeGroup - .addWidget(new IncrementButtonWidget(92, 64, 18, 18, -1, -10, -100, -1000, this::adjustTransferSize) - .setDefaultTooltip() - .setTextScale(0.7f) - .setShouldClientCallback(false)); - - stackSizeGroup.addWidget(new TextFieldWidget2(111, 70, 36, 11, this::getTransferAmountString, val -> { - if (val != null && !val.isEmpty()) { - int amount = Integer.parseInt(val); - if (this.bucketMode == BucketMode.BUCKET) { - amount = IntMath.saturatedMultiply(amount, 1000); - } - setTransferAmount(amount); - } - }) - .setCentered(true) - .setNumbersOnly(1, - transferMode == TransferMode.TRANSFER_EXACT ? maxFluidTransferRate : Integer.MAX_VALUE) - .setMaxLength(10) - .setScale(0.6f)); - - stackSizeGroup - .addWidget(new SimpleTextWidget(129, 78, "", 0xFFFFFF, () -> bucketMode.localeName).setScale(0.6f)); - - return super.buildUI(builder.widget(filterGroup).widget(stackSizeGroup), player); - } +// @SuppressWarnings("UnstableApiUsage") +// @Override +// protected ModularUI buildUI(ModularUI.Builder builder, EntityPlayer player) { +// WidgetGroup filterGroup = new WidgetGroup(); +// filterGroup.addWidget(new CycleButtonWidget(92, 43, 75, 18, +// TransferMode.class, this::getTransferMode, this::setTransferMode) +// .setTooltipHoverString("cover.fluid_regulator.transfer_mode.description")); +// +// ServerWidgetGroup stackSizeGroup = new ServerWidgetGroup(this::shouldDisplayAmountSlider); +// stackSizeGroup.addWidget(new ImageWidget(110, 64, 38, 18, GuiTextures.DISPLAY)); +// +// stackSizeGroup.addWidget(new IncrementButtonWidget(148, 64, 18, 18, 1, 10, 100, 1000, this::adjustTransferSize) +// .setDefaultTooltip() +// .setTextScale(0.7f) +// .setShouldClientCallback(false)); +// stackSizeGroup +// .addWidget(new IncrementButtonWidget(92, 64, 18, 18, -1, -10, -100, -1000, this::adjustTransferSize) +// .setDefaultTooltip() +// .setTextScale(0.7f) +// .setShouldClientCallback(false)); +// +// stackSizeGroup.addWidget(new TextFieldWidget2(111, 70, 36, 11, this::getTransferAmountString, val -> { +// if (val != null && !val.isEmpty()) { +// int amount = Integer.parseInt(val); +// if (this.bucketMode == BucketMode.BUCKET) { +// amount = IntMath.saturatedMultiply(amount, 1000); +// } +// setTransferAmount(amount); +// } +// }) +// .setCentered(true) +// .setNumbersOnly(1, +// transferMode == TransferMode.TRANSFER_EXACT ? maxFluidTransferRate : Integer.MAX_VALUE) +// .setMaxLength(10) +// .setScale(0.6f)); +// +// stackSizeGroup +// .addWidget(new SimpleTextWidget(129, 78, "", 0xFFFFFF, () -> bucketMode.localeName).setScale(0.6f)); +// +// return super.buildUI(builder.widget(filterGroup).widget(stackSizeGroup), player); +// } @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { @@ -374,16 +330,19 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa syncManager.syncValue("bucket_mode", bucketMode); var filterTransferSize = new StringSyncValue( - this::getTransferAmountString, - s -> setTransferAmount(getBucketMode() == BucketMode.MILLI_BUCKET ? - Integer.parseInt(s) : - Integer.parseInt(s) * 1000)); + () -> String.valueOf(this.fluidFilterContainer.getTransferSize()), + s -> this.fluidFilterContainer.setTransferSize( + getBucketMode() == BucketMode.MILLI_BUCKET ? + Integer.parseInt(s) : + Integer.parseInt(s) * 1000 + )); filterTransferSize.updateCacheFromSource(true); return super.createUI(mainPanel, syncManager) .child(new EnumRowBuilder<>(TransferMode.class) .value(transferMode) .lang("Transfer Mode") + .overlay(GTGuiTextures.TRANSFER_MODE_OVERLAY) .build()) .child(new EnumRowBuilder<>(BucketMode.class) .value(bucketMode) @@ -400,7 +359,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.writeInitialSyncData(packetBuffer); packetBuffer.writeEnumValue(this.transferMode); - packetBuffer.writeInt(this.transferAmount); +// packetBuffer.writeInt(this.transferAmount); } @Override @@ -408,14 +367,14 @@ public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.readInitialSyncData(packetBuffer); this.transferMode = packetBuffer.readEnumValue(TransferMode.class); getFluidFilterContainer().setBucketOnly(this.transferMode == TransferMode.TRANSFER_ANY); - this.transferAmount = packetBuffer.readInt(); +// this.transferAmount = packetBuffer.readInt(); } @Override public void writeToNBT(@NotNull NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); tagCompound.setInteger("TransferMode", transferMode.ordinal()); - tagCompound.setInteger("TransferAmount", transferAmount); +// tagCompound.setInteger("TransferAmount", transferAmount); tagCompound.setTag("filterv2", new NBTTagCompound()); } @@ -430,7 +389,8 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { this.fluidFilterContainer.getFilter().configureFilterTanks(tagCompound.getInteger("TransferAmount")); } } - this.transferAmount = tagCompound.getInteger("TransferAmount"); +// this.transferAmount = tagCompound.getInteger("TransferAmount"); + this.fluidFilterContainer.setTransferSize(tagCompound.getInteger("TransferAmount")); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index aa2cc393f5f..97336b877c7 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -2,26 +2,16 @@ import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; -import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.ModularUI; -import gregtech.api.gui.ModularUI.Builder; -import gregtech.api.gui.widgets.CycleButtonWidget; -import gregtech.api.gui.widgets.ImageWidget; -import gregtech.api.gui.widgets.IncrementButtonWidget; -import gregtech.api.gui.widgets.ServerWidgetGroup; -import gregtech.api.gui.widgets.TextFieldWidget2; -import gregtech.api.gui.widgets.WidgetGroup; +import gregtech.api.mui.GTGuiTextures; import gregtech.client.renderer.texture.Textures; import gregtech.common.covers.filter.SmartItemFilter; import gregtech.common.pipelike.itempipe.net.ItemNetHandler; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.MathHelper; import net.minecraftforge.items.IItemHandler; import codechicken.lib.render.CCRenderState; @@ -33,7 +23,7 @@ import com.cleanroommc.modularui.utils.Color; import com.cleanroommc.modularui.value.sync.EnumSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; -import com.cleanroommc.modularui.value.sync.IntSyncValue; +import com.cleanroommc.modularui.value.sync.StringSyncValue; import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widgets.layout.Column; import com.cleanroommc.modularui.widgets.layout.Row; @@ -179,9 +169,11 @@ public void clearBuffer() { } public void setTransferMode(TransferMode transferMode) { - this.transferMode = transferMode; - this.getCoverableView().markDirty(); - getItemFilterContainer().setMaxTransferSize(getMaxStackSize()); + if (this.transferMode != transferMode) { + this.transferMode = transferMode; + this.getCoverableView().markDirty(); + this.itemFilterContainer.setMaxTransferSize(transferMode.maxStackSize); + } } public TransferMode getTransferMode() { @@ -210,16 +202,16 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g EnumSyncValue transferMode = new EnumSyncValue<>(TransferMode.class, this::getTransferMode, this::setTransferMode); guiSyncManager.syncValue("transfer_mode", transferMode); - var filterTransferSize = new IntSyncValue( - getItemFilterContainer()::getTransferSize, - getItemFilterContainer()::setTransferSize); + var filterTransferSize = new StringSyncValue( + () -> String.valueOf(this.itemFilterContainer.getTransferSize()), + s -> this.itemFilterContainer.setTransferSize(Integer.parseInt(s))); filterTransferSize.updateCacheFromSource(true); return super.createUI(mainPanel, guiSyncManager) .child(new EnumRowBuilder<>(TransferMode.class) .value(transferMode) .lang("Transfer Mode") -// .overlay() todo transfer mode overlays + .overlay(GTGuiTextures.TRANSFER_MODE_OVERLAY) .build()) .child(new Row().right(0).coverChildrenHeight() .child(new TextFieldWidget().widthRel(0.5f).right(0) @@ -234,41 +226,41 @@ protected int getMaxStackSize() { return getTransferMode().maxStackSize; } - @Override - protected ModularUI buildUI(Builder builder, EntityPlayer player) { - WidgetGroup primaryGroup = new WidgetGroup(); - primaryGroup.addWidget(new CycleButtonWidget(91, 45, 75, 20, - TransferMode.class, this::getTransferMode, this::setTransferMode) - .setTooltipHoverString("cover.robotic_arm.transfer_mode.description")); - - ServerWidgetGroup stackSizeGroup = new ServerWidgetGroup(this::shouldDisplayAmountSlider); - stackSizeGroup.addWidget(new ImageWidget(111, 70, 35, 20, GuiTextures.DISPLAY)); - - stackSizeGroup.addWidget( - new IncrementButtonWidget(146, 70, 20, 20, 1, 8, 64, 512, itemFilterContainer::adjustTransferStackSize) - .setDefaultTooltip() - .setTextScale(0.7f) - .setShouldClientCallback(false)); - stackSizeGroup.addWidget(new IncrementButtonWidget(91, 70, 20, 20, -1, -8, -64, -512, - itemFilterContainer::adjustTransferStackSize) - .setDefaultTooltip() - .setTextScale(0.7f) - .setShouldClientCallback(false)); - - stackSizeGroup.addWidget(new TextFieldWidget2(113, 77, 31, 20, - () -> String.valueOf(itemFilterContainer.getTransferSize()), val -> { - if (val != null && !val.isEmpty()) - itemFilterContainer.setTransferSize( - MathHelper.clamp(Integer.parseInt(val), 1, transferMode.maxStackSize)); - }) - .setNumbersOnly(1, transferMode.maxStackSize) - .setMaxLength(4) - .setScale(0.9f)); - - primaryGroup.addWidget(stackSizeGroup); - - return super.buildUI(builder.widget(primaryGroup), player); - } +// @Override +// protected ModularUI buildUI(Builder builder, EntityPlayer player) { +// WidgetGroup primaryGroup = new WidgetGroup(); +// primaryGroup.addWidget(new CycleButtonWidget(91, 45, 75, 20, +// TransferMode.class, this::getTransferMode, this::setTransferMode) +// .setTooltipHoverString("cover.robotic_arm.transfer_mode.description")); +// +// ServerWidgetGroup stackSizeGroup = new ServerWidgetGroup(this::shouldDisplayAmountSlider); +// stackSizeGroup.addWidget(new ImageWidget(111, 70, 35, 20, GuiTextures.DISPLAY)); +// +// stackSizeGroup.addWidget( +// new IncrementButtonWidget(146, 70, 20, 20, 1, 8, 64, 512, itemFilterContainer::adjustTransferStackSize) +// .setDefaultTooltip() +// .setTextScale(0.7f) +// .setShouldClientCallback(false)); +// stackSizeGroup.addWidget(new IncrementButtonWidget(91, 70, 20, 20, -1, -8, -64, -512, +// itemFilterContainer::adjustTransferStackSize) +// .setDefaultTooltip() +// .setTextScale(0.7f) +// .setShouldClientCallback(false)); +// +// stackSizeGroup.addWidget(new TextFieldWidget2(113, 77, 31, 20, +// () -> String.valueOf(itemFilterContainer.getTransferSize()), val -> { +// if (val != null && !val.isEmpty()) +// itemFilterContainer.setTransferSize( +// MathHelper.clamp(Integer.parseInt(val), 1, transferMode.maxStackSize)); +// }) +// .setNumbersOnly(1, transferMode.maxStackSize) +// .setMaxLength(4) +// .setScale(0.9f)); +// +// primaryGroup.addWidget(stackSizeGroup); +// +// return super.buildUI(builder.widget(primaryGroup), player); +// } @Override public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { From 669ccb574f0a99f5d73b421b670d70d40d555b21 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 17 Jan 2024 19:48:35 -0700 Subject: [PATCH 117/260] use lang for new ui fix TOP being slightly incorrect --- .../gregtech/common/covers/CoverConveyor.java | 4 +-- .../common/covers/CoverFluidRegulator.java | 2 +- .../gregtech/common/covers/CoverPump.java | 4 +-- .../common/covers/CoverRoboticArm.java | 2 +- .../provider/CoverInfoProvider.java | 36 +++++++++++-------- .../resources/assets/gregtech/lang/en_us.lang | 13 +++++-- 6 files changed, 39 insertions(+), 22 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 2dfbe0dd565..6c4e9225003 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -586,12 +586,12 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g .initUI(mainPanel, guiSyncManager)) .child(new EnumRowBuilder<>(ManualImportExportMode.class) .value(manualIOmode) - .lang("Manual IO Mode") + .lang("cover.generic.manual_io") .overlay(GTGuiTextures.MANUAL_IO_OVERLAY) .build()) .child(new EnumRowBuilder<>(ConveyorMode.class) .value(conveyorMode) - .lang("Conveyor Mode") + .lang("cover.conveyor.mode") .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY) .build()); } diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 678faa01eb9..7acc3e1f4e2 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -341,7 +341,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa return super.createUI(mainPanel, syncManager) .child(new EnumRowBuilder<>(TransferMode.class) .value(transferMode) - .lang("Transfer Mode") + .lang("cover.generic.transfer_mode") .overlay(GTGuiTextures.TRANSFER_MODE_OVERLAY) .build()) .child(new EnumRowBuilder<>(BucketMode.class) diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index f68c9648f39..befe8b58192 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -314,12 +314,12 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa .initUI(mainPanel, syncManager)) .child(new EnumRowBuilder<>(ManualImportExportMode.class) .value(manualIOmode) - .lang("Manual IO") + .lang("cover.generic.manual_io") .overlay(GTGuiTextures.MANUAL_IO_OVERLAY) .build()) .child(new EnumRowBuilder<>(PumpMode.class) .value(pumpMode) - .lang("Pump Mode") + .lang("cover.pump.mode") .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY) // todo pump mode overlays .build()); } diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index 97336b877c7..01d813ca755 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -210,7 +210,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g return super.createUI(mainPanel, guiSyncManager) .child(new EnumRowBuilder<>(TransferMode.class) .value(transferMode) - .lang("Transfer Mode") + .lang("cover.generic.transfer_mode") .overlay(GTGuiTextures.TRANSFER_MODE_OVERLAY) .build()) .child(new Row().right(0).coverChildrenHeight() diff --git a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java index a59e30c805b..27d3b7eaa9d 100644 --- a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java +++ b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java @@ -57,20 +57,23 @@ protected void addProbeInfo(@NotNull CoverHolder capability, @NotNull IProbeInfo * @param conveyor the conveyor to get data from */ private static void conveyorInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverConveyor conveyor) { - String rateUnit = " {*cover.conveyor.transfer_rate*}"; + String rateUnit = IProbeInfo.STARTLOC + "{*cover.conveyor.transfer_rate*}" + IProbeInfo.ENDLOC; if (conveyor instanceof CoverItemVoiding) { itemVoidingInfo(probeInfo, (CoverItemVoiding) conveyor); - } else if (!(conveyor instanceof CoverRoboticArm) || - ((CoverRoboticArm) conveyor).getTransferMode() == TransferMode.TRANSFER_ANY) { + } else if (!(conveyor instanceof CoverRoboticArm arm) || + arm.getTransferMode() == TransferMode.TRANSFER_ANY) { // only display the regular rate if the cover does not have a specialized rate - transferRateText(probeInfo, conveyor.getConveyorMode(), rateUnit, conveyor.getTransferRate()); - } + transferRateText(probeInfo, conveyor.getConveyorMode(), " " + rateUnit, conveyor.getTransferRate()); + } ItemFilterContainer filter = conveyor.getItemFilterContainer(); if (conveyor instanceof CoverRoboticArm roboticArm) { - transferModeText(probeInfo, roboticArm.getTransferMode(), rateUnit, filter.getTransferSize(), - filter.getFilter() != null); + if (roboticArm.getTransferMode() != TransferMode.TRANSFER_ANY) + rateUnit = IProbeInfo.STARTLOC + "{*cover.robotic_arm.exact*}" + IProbeInfo.ENDLOC; + + transferModeText(probeInfo, roboticArm.getTransferMode(), rateUnit, + filter.getTransferSize(), filter.getFilter() != null); } itemFilterText(probeInfo, filter.getFilter()); } @@ -99,12 +102,13 @@ private static void itemVoidingInfo(@NotNull IProbeInfo probeInfo, @NotNull Cove * @param pump the pump to get data from */ private static void pumpInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverPump pump) { - String rateUnit = IProbeInfo.STARTLOC + pump.getBucketMode().getName() + IProbeInfo.ENDLOC; + String rateUnit = IProbeInfo.STARTLOC + (pump.getBucketMode() == CoverPump.BucketMode.BUCKET ? + "{*cover.bucket.mode.bucket_rate*}" : "{*cover.bucket.mode.milli_bucket_rate*}") + IProbeInfo.ENDLOC; if (pump instanceof CoverFluidVoiding) { fluidVoidingInfo(probeInfo, (CoverFluidVoiding) pump); - } else if (!(pump instanceof CoverFluidRegulator) || - ((CoverFluidRegulator) pump).getTransferMode() == TransferMode.TRANSFER_ANY) { + } else if (!(pump instanceof CoverFluidRegulator regulator) || + regulator.getTransferMode() == TransferMode.TRANSFER_ANY) { // do not display the regular rate if the cover has a specialized rate transferRateText(probeInfo, pump.getPumpMode(), " " + rateUnit, pump.getBucketMode() == CoverPump.BucketMode.BUCKET ? pump.getTransferRate() / 1000 : @@ -113,8 +117,12 @@ private static void pumpInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverPump p FluidFilterContainer filter = pump.getFluidFilterContainer(); if (pump instanceof CoverFluidRegulator regulator) { - transferModeText(probeInfo, regulator.getTransferMode(), rateUnit, regulator.getTransferAmount(), - filter.getFilterWrapper().getFluidFilter() != null); + if (regulator.getTransferMode() != TransferMode.TRANSFER_ANY) + rateUnit = IProbeInfo.STARTLOC + (regulator.getBucketMode() == CoverPump.BucketMode.BUCKET ? + "{*cover.bucket.mode.bucket_exact*}" : "{*cover.bucket.mode.milli_bucket_exact*}") + IProbeInfo.ENDLOC; + + transferModeText(probeInfo, regulator.getTransferMode(), rateUnit, regulator + .getFluidFilterContainer().getTransferSize(), filter.hasFilter()); } fluidFilterText(probeInfo, filter.getFilterWrapper().getFluidFilter()); } @@ -197,7 +205,6 @@ private static void transferRateText(@NotNull IProbeInfo probeInfo, @NotNull IIO * * @param probeInfo the info to add the text to * @param mode the transfer mode of the cover - * @param rateUnit the unit of what is transferred * @param rate the transfer rate of the mode * @param hasFilter whether the cover has a filter installed */ @@ -205,7 +212,8 @@ private static void transferModeText(@NotNull IProbeInfo probeInfo, @NotNull Tra @NotNull String rateUnit, int rate, boolean hasFilter) { String text = TextStyleClass.OK + IProbeInfo.STARTLOC + mode.getName() + IProbeInfo.ENDLOC; if (!hasFilter && mode != TransferMode.TRANSFER_ANY) - text += TextStyleClass.LABEL + " " + TextFormattingUtil.formatNumbers(rate) + rateUnit; + text += TextStyleClass.LABEL + " " + TextFormattingUtil.formatNumbers(rate) + " " + rateUnit; + probeInfo.text(text); } diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index cd4ee83dc74..d038be1be81 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -1275,6 +1275,10 @@ cover.smart_item_filter.filtering_mode.centrifuge=Centrifuge cover.smart_item_filter.filtering_mode.sifter=Sifter cover.smart_item_filter.filtering_mode.description=Select Machine this Smart Filter will use for filtering./nIt will automatically pick right portions of items for robotic arm. +cover.generic.transfer_mode=Transfer Mode +cover.generic.manual_io=Manual IO Mode +cover.conveyor.mode=Conveyor Mode +cover.pump.mode=Pump Mode cover.conveyor.title=Conveyor Cover Settings (%s) cover.conveyor.transfer_rate=§7items/sec cover.conveyor.mode.export=Mode: Export @@ -1292,6 +1296,7 @@ cover.conveyor.item_filter.title=Item Filter cover.conveyor.ore_dictionary.title=Ore Dictionary Name cover.conveyor.ore_dictionary.title2=(use * for wildcard) cover.robotic_arm.title=Robotic Arm Settings (%s) +cover.robotic_arm.exact=§7items cover.robotic_arm.transfer_mode.transfer_any=Transfer Any cover.robotic_arm.transfer_mode.transfer_exact=Supply Exact cover.robotic_arm.transfer_mode.keep_exact=Keep Exact @@ -1302,8 +1307,12 @@ cover.pump.transfer_rate=%s cover.pump.mode.export=Mode: Export cover.pump.mode.import=Mode: Import cover.pump.fluid_filter.title=Fluid Filter -cover.bucket.mode.bucket=kL/s -cover.bucket.mode.milli_bucket=L/s +cover.bucket.mode.bucket=Bucket Mode: kL +cover.bucket.mode.milli_bucket=Bucket Mode: L +cover.bucket.mode.bucket_rate=kL/s +cover.bucket.mode.bucket_exact=kL +cover.bucket.mode.milli_bucket_rate=L/s +cover.bucket.mode.milli_bucket_exact=L cover.fluid_regulator.title=Fluid Regulator Settings (%s) cover.fluid_regulator.transfer_mode.description=§eTransfer Any§r - in this mode, cover will transfer as many fluids matching its filter as possible./n§eSupply Exact§r - in this mode, cover will supply fluids in portions specified in the window underneath this button. If amount of fluids is less than portion size, fluids won't be moved./n§eKeep Exact§r - in this mode, cover will keep specified amount of fluids in the destination inventory, supplying additional amount of fluids if required./n§7Tip: shift click will multiply increase/decrease amounts by 10 and ctrl click will multiply by 100. cover.fluid_regulator.supply_exact=Supply Exact: %s From d7a19ca6b7cc28a8a7385fc66b3dae4a920b242d Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 18 Jan 2024 12:51:52 -0700 Subject: [PATCH 118/260] use text as bucket mode overlay --- src/main/java/gregtech/common/covers/CoverFluidRegulator.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 7acc3e1f4e2..ca822c63b8d 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -1,5 +1,7 @@ package gregtech.common.covers; +import com.cleanroommc.modularui.api.drawable.IKey; + import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; import gregtech.api.mui.GTGuiTextures; @@ -346,7 +348,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa .build()) .child(new EnumRowBuilder<>(BucketMode.class) .value(bucketMode) -// .overlay() todo bucket mode overlays + .overlay(IKey.str("kL"), IKey.str("L")) .build() .child(new TextFieldWidget().widthRel(0.5f).right(0) .setEnabledIf(w -> shouldDisplayAmountSlider()) From c89deed23b72c3937280b2b2a3eacae25054b900 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 18 Jan 2024 12:53:23 -0700 Subject: [PATCH 119/260] redundant locale keys show throughput if filter is blacklist --- .../theoneprobe/provider/CoverInfoProvider.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java index 27d3b7eaa9d..9df5b290794 100644 --- a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java +++ b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java @@ -103,7 +103,7 @@ private static void itemVoidingInfo(@NotNull IProbeInfo probeInfo, @NotNull Cove */ private static void pumpInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverPump pump) { String rateUnit = IProbeInfo.STARTLOC + (pump.getBucketMode() == CoverPump.BucketMode.BUCKET ? - "{*cover.bucket.mode.bucket_rate*}" : "{*cover.bucket.mode.milli_bucket_rate*}") + IProbeInfo.ENDLOC; + "cover.bucket.mode.bucket_rate" : "cover.bucket.mode.milli_bucket_rate") + IProbeInfo.ENDLOC; if (pump instanceof CoverFluidVoiding) { fluidVoidingInfo(probeInfo, (CoverFluidVoiding) pump); @@ -119,12 +119,12 @@ private static void pumpInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverPump p if (pump instanceof CoverFluidRegulator regulator) { if (regulator.getTransferMode() != TransferMode.TRANSFER_ANY) rateUnit = IProbeInfo.STARTLOC + (regulator.getBucketMode() == CoverPump.BucketMode.BUCKET ? - "{*cover.bucket.mode.bucket_exact*}" : "{*cover.bucket.mode.milli_bucket_exact*}") + IProbeInfo.ENDLOC; + "cover.bucket.mode.bucket_exact" : "cover.bucket.mode.milli_bucket_exact") + IProbeInfo.ENDLOC; transferModeText(probeInfo, regulator.getTransferMode(), rateUnit, regulator - .getFluidFilterContainer().getTransferSize(), filter.hasFilter()); + .getFluidFilterContainer().getTransferSize(), filter.hasFilter() && !filter.isBlacklistFilter()); } - fluidFilterText(probeInfo, filter.getFilterWrapper().getFluidFilter()); + fluidFilterText(probeInfo, filter.getFilter()); } /** From b924e3bde7c0c4a2773709a0ceea109371a384aa Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 18 Jan 2024 13:02:27 -0700 Subject: [PATCH 120/260] match mui 2.4.1 --- src/main/java/gregtech/common/covers/CoverFluidFilter.java | 2 +- src/main/java/gregtech/common/covers/CoverItemFilter.java | 2 +- .../common/items/behaviors/filter/OreDictFilterUIManager.java | 2 +- .../common/items/behaviors/filter/SmartFilterUIManager.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index cc46fe6f815..64dc5dc5ca4 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -168,7 +168,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() .height(1).widthRel(0.95f).margin(0, 4)) .child(getFluidFilter().createWidgets(guiSyncManager))) - .child(SlotGroupWidget.playerInventory(0).bottom(7).left(7)); + .child(SlotGroupWidget.playerInventory().bottom(7).left(7)); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index f04ec3ae0a2..f7a0bf80495 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -165,7 +165,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() .height(1).widthRel(0.95f).margin(0, 4)) .child(getItemFilter().createWidgets(guiSyncManager).left(0))) - .child(SlotGroupWidget.playerInventory(0).bottom(7).left(7)); + .child(SlotGroupWidget.playerInventory().bottom(7).left(7)); } @Override 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 e4009d174a6..17c30b5c734 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java @@ -15,6 +15,6 @@ public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) var filter = FilterTypeRegistry.getItemFilterForStack(guiData.getUsedItemStack()); return createBasePanel(filter.getContainerStack()).height(160) .child(filter.createWidgets(guiSyncManager).top(22).margin(7, 0)) - .child(SlotGroupWidget.playerInventory(0).bottom(7).left(7)); + .child(SlotGroupWidget.playerInventory().bottom(7).left(7)); } } 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 1a11e4eea35..27d18e3c984 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java @@ -14,6 +14,6 @@ public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) var filter = FilterTypeRegistry.getItemFilterForStack(guiData.getUsedItemStack()); return createBasePanel(filter.getContainerStack()).height(166) .child(filter.createWidgets(guiSyncManager).left(7).top(22)) - .child(SlotGroupWidget.playerInventory(0).bottom(7).left(7)); + .child(SlotGroupWidget.playerInventory().bottom(7).left(7)); } } From 853c7a4b9f12d7daec6acec060187d39b2c2143d Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 18 Jan 2024 14:04:28 -0700 Subject: [PATCH 121/260] split ui creation behind if checks --- .../gregtech/common/covers/CoverConveyor.java | 111 +++++++++++------- 1 file changed, 68 insertions(+), 43 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 6c4e9225003..486d16c7290 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -529,9 +529,7 @@ public boolean usesMui2() { public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { var panel = GTGuis.createPanel(this, 176,192); - if (getItemFilterContainer().hasFilter()) { - getItemFilterContainer().setMaxTransferSize(getMaxStackSize()); - } + getItemFilterContainer().setMaxTransferSize(getMaxStackSize()); return panel.child(CoverWithUI.createTitleRow(getPickItem())) .child(createUI(panel, guiSyncManager)) @@ -539,6 +537,9 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag } protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager guiSyncManager) { + var column = new Column().top(24).margin(7, 0) + .widthRel(1f).coverChildrenHeight(); + EnumSyncValue manualIOmode = new EnumSyncValue<>(ManualImportExportMode.class, this::getManualImportExportMode, this::setManualImportExportMode); @@ -554,46 +555,70 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g guiSyncManager.syncValue("conveyor_mode", conveyorMode); guiSyncManager.syncValue("throughput", throughput); - return new Column().top(24).margin(7, 0) - .widthRel(1f).coverChildrenHeight() - .child(new Row().coverChildrenHeight() - .marginBottom(2).widthRel(1f) - .child(new ButtonWidget<>() - .left(0).width(18) - .onMousePressed(mouseButton -> { - int val = throughput.getValue() - getIncrementValue(MouseData.create(mouseButton)); - throughput.setValue(val, true, true); - Interactable.playButtonClickSound(); - return true; - }) - .onUpdateListener(w -> w.overlay(createAdjustOverlay(false)))) - .child(new TextFieldWidget() - .left(18).right(18) - .setTextColor(Color.WHITE.darker(1)) - .setNumbers(1, maxItemTransferRate) - .value(formattedThroughput) - .background(GTGuiTextures.DISPLAY)) - .child(new ButtonWidget<>() - .right(0).width(18) - .onMousePressed(mouseButton -> { - int val = throughput.getValue() + getIncrementValue(MouseData.create(mouseButton)); - throughput.setValue(val, true, true); - Interactable.playButtonClickSound(); - return true; - }) - .onUpdateListener(w -> w.overlay(createAdjustOverlay(true))))) - .child(getItemFilterContainer() - .initUI(mainPanel, guiSyncManager)) - .child(new EnumRowBuilder<>(ManualImportExportMode.class) - .value(manualIOmode) - .lang("cover.generic.manual_io") - .overlay(GTGuiTextures.MANUAL_IO_OVERLAY) - .build()) - .child(new EnumRowBuilder<>(ConveyorMode.class) - .value(conveyorMode) - .lang("cover.conveyor.mode") - .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY) - .build()); + if (createThroughputRow()) + column.child(new Row().coverChildrenHeight() + .marginBottom(2).widthRel(1f) + .child(new ButtonWidget<>() + .left(0).width(18) + .onMousePressed(mouseButton -> { + int val = throughput.getValue() - getIncrementValue(MouseData.create(mouseButton)); + throughput.setValue(val, true, true); + Interactable.playButtonClickSound(); + return true; + }) + .onUpdateListener(w -> w.overlay(createAdjustOverlay(false)))) + .child(new TextFieldWidget() + .left(18).right(18) + .setTextColor(Color.WHITE.darker(1)) + .setNumbers(1, maxItemTransferRate) + .value(formattedThroughput) + .background(GTGuiTextures.DISPLAY)) + .child(new ButtonWidget<>() + .right(0).width(18) + .onMousePressed(mouseButton -> { + int val = throughput.getValue() + getIncrementValue(MouseData.create(mouseButton)); + throughput.setValue(val, true, true); + Interactable.playButtonClickSound(); + return true; + }) + .onUpdateListener(w -> w.overlay(createAdjustOverlay(true))))); + + + if (createFilterRow()) + column.child(getItemFilterContainer().initUI(mainPanel, guiSyncManager)); + + if (createManualIOModeRow()) + column.child(new EnumRowBuilder<>(ManualImportExportMode.class) + .value(manualIOmode) + .lang("cover.generic.manual_io") + .overlay(GTGuiTextures.MANUAL_IO_OVERLAY) + .build()); + + if (createConveyorModeRow()) + column.child(new EnumRowBuilder<>(ConveyorMode.class) + .value(conveyorMode) + .lang("cover.conveyor.mode") + .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY) + .build()); + + return column; + + } + + protected boolean createThroughputRow() { + return true; + } + + protected boolean createFilterRow() { + return true; + } + + protected boolean createManualIOModeRow() { + return true; + } + + protected boolean createConveyorModeRow() { + return true; } protected int getMaxStackSize() { From 3cba0f1b513958af8a256869be37f556f37e3135 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 18 Jan 2024 14:04:49 -0700 Subject: [PATCH 122/260] work on porting item voiding covers --- .../common/covers/CoverItemVoiding.java | 43 +++++++++++++++++++ .../covers/CoverItemVoidingAdvanced.java | 21 +++++++++ .../provider/CoverInfoProvider.java | 2 +- 3 files changed, 65 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/CoverItemVoiding.java b/src/main/java/gregtech/common/covers/CoverItemVoiding.java index 9a515b670d3..e91be06d4c8 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoiding.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoiding.java @@ -1,5 +1,17 @@ package gregtech.common.covers; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.factory.SidedPosGuiData; +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.GuiSyncManager; +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widgets.ToggleButton; +import com.cleanroommc.modularui.widgets.layout.Column; + +import com.cleanroommc.modularui.widgets.layout.Row; + import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; @@ -93,6 +105,37 @@ public ModularUI createUI(EntityPlayer player) { return builder.build(this, player); } + @Override + public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { + return super.buildUI(guiData, guiSyncManager).height(192); + } + + @Override + protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager guiSyncManager) { + var isWorking = new BooleanSyncValue(this::isWorkingEnabled, this::setWorkingEnabled); + return super.createUI(mainPanel, guiSyncManager) + .child(new Row().height(18).widthRel(1f) + .marginBottom(2) + .child(new ToggleButton() + .value(isWorking) + .overlay(IKey.dynamic(() -> this.isWorkingAllowed ? + "Working Enabled" : + "Working Disabled") + .color(Color.WHITE.darker(1))) + .widthRel(0.6f) + .left(0))); + } + + @Override + protected boolean createThroughputRow() { + return false; + } + + @Override + protected boolean createConveyorModeRow() { + return false; + } + @Override public void renderCover(CCRenderState renderState, Matrix4 translation, IVertexOperation[] pipeline, Cuboid6 plateBox, BlockRenderLayer layer) { diff --git a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java index eb0733cd1d1..d772fa72765 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java @@ -1,5 +1,14 @@ package gregtech.common.covers; +import com.cleanroommc.modularui.factory.SidedPosGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; + +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widgets.layout.Column; + +import com.cleanroommc.modularui.widgets.layout.Row; + import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; import gregtech.api.gui.GuiTextures; @@ -161,6 +170,18 @@ public void initFilterUI(int y, Consumer widgetGroup) { () -> voidingMode != VoidingMode.VOID_OVERFLOW); } + @Override + public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { + return super.buildUI(guiData, guiSyncManager).height(192); + } + + @Override + protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager guiSyncManager) { + return super.createUI(mainPanel, guiSyncManager); +// .child(new Row() +// .child()); + } + @Override public void renderCover(CCRenderState renderState, Matrix4 translation, IVertexOperation[] pipeline, Cuboid6 plateBox, BlockRenderLayer layer) { diff --git a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java index 9df5b290794..c328d49715b 100644 --- a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java +++ b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java @@ -91,7 +91,7 @@ private static void itemVoidingInfo(@NotNull IProbeInfo probeInfo, @NotNull Cove if (voiding instanceof CoverItemVoidingAdvanced advanced) { VoidingMode mode = advanced.getVoidingMode(); voidingText(probeInfo, mode, unit, container.getTransferSize(), - container.getFilter() != null); + container.hasFilter() && !container.isBlacklistFilter()); } } From 632cfd25d1ae1e3562c5eae40a136816c6232f2b Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 18 Jan 2024 14:55:14 -0700 Subject: [PATCH 123/260] add method for lang fix issues with ender fluid link --- .../provider/CoverInfoProvider.java | 50 +++++++++++-------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java index c328d49715b..97bce4154c3 100644 --- a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java +++ b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java @@ -57,7 +57,7 @@ protected void addProbeInfo(@NotNull CoverHolder capability, @NotNull IProbeInfo * @param conveyor the conveyor to get data from */ private static void conveyorInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverConveyor conveyor) { - String rateUnit = IProbeInfo.STARTLOC + "{*cover.conveyor.transfer_rate*}" + IProbeInfo.ENDLOC; + String rateUnit = lang("cover.conveyor.transfer_rate"); if (conveyor instanceof CoverItemVoiding) { itemVoidingInfo(probeInfo, (CoverItemVoiding) conveyor); @@ -70,7 +70,7 @@ private static void conveyorInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverCo ItemFilterContainer filter = conveyor.getItemFilterContainer(); if (conveyor instanceof CoverRoboticArm roboticArm) { if (roboticArm.getTransferMode() != TransferMode.TRANSFER_ANY) - rateUnit = IProbeInfo.STARTLOC + "{*cover.robotic_arm.exact*}" + IProbeInfo.ENDLOC; + rateUnit = lang("cover.robotic_arm.exact"); transferModeText(probeInfo, roboticArm.getTransferMode(), rateUnit, filter.getTransferSize(), filter.getFilter() != null); @@ -85,7 +85,7 @@ private static void conveyorInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverCo * @param voiding the voiding cover to get data from */ private static void itemVoidingInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverItemVoiding voiding) { - String unit = " {*gregtech.top.unit.items*}"; + String unit = lang("gregtech.top.unit.items"); ItemFilterContainer container = voiding.getItemFilterContainer(); if (voiding instanceof CoverItemVoidingAdvanced advanced) { @@ -102,8 +102,9 @@ private static void itemVoidingInfo(@NotNull IProbeInfo probeInfo, @NotNull Cove * @param pump the pump to get data from */ private static void pumpInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverPump pump) { - String rateUnit = IProbeInfo.STARTLOC + (pump.getBucketMode() == CoverPump.BucketMode.BUCKET ? - "cover.bucket.mode.bucket_rate" : "cover.bucket.mode.milli_bucket_rate") + IProbeInfo.ENDLOC; + String rateUnit = lang(pump.getBucketMode() == CoverPump.BucketMode.BUCKET ? + "cover.bucket.mode.bucket_rate" : + "cover.bucket.mode.milli_bucket_rate"); if (pump instanceof CoverFluidVoiding) { fluidVoidingInfo(probeInfo, (CoverFluidVoiding) pump); @@ -118,8 +119,9 @@ private static void pumpInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverPump p FluidFilterContainer filter = pump.getFluidFilterContainer(); if (pump instanceof CoverFluidRegulator regulator) { if (regulator.getTransferMode() != TransferMode.TRANSFER_ANY) - rateUnit = IProbeInfo.STARTLOC + (regulator.getBucketMode() == CoverPump.BucketMode.BUCKET ? - "cover.bucket.mode.bucket_exact" : "cover.bucket.mode.milli_bucket_exact") + IProbeInfo.ENDLOC; + rateUnit = lang(regulator.getBucketMode() == CoverPump.BucketMode.BUCKET ? + "gregtech.top.unit.fluid_buckets" : + "gregtech.top.unit.fluid_milibuckets"); transferModeText(probeInfo, regulator.getTransferMode(), rateUnit, regulator .getFluidFilterContainer().getTransferSize(), filter.hasFilter() && !filter.isBlacklistFilter()); @@ -134,8 +136,10 @@ private static void pumpInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverPump p * @param voiding the voiding cover to get data from */ private static void fluidVoidingInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverFluidVoiding voiding) { - String unit = voiding.getBucketMode() == CoverPump.BucketMode.BUCKET ? " {*gregtech.top.unit.fluid_buckets*}" : - " {*gregtech.top.unit.fluid_milibuckets*}"; + String unit = lang(voiding.getBucketMode() == CoverPump.BucketMode.BUCKET ? + "gregtech.top.unit.fluid_buckets" : + "gregtech.top.unit.fluid_milibuckets"); + var container = voiding.getFluidFilterContainer(); if (voiding instanceof CoverFluidVoidingAdvanced advanced) { VoidingMode mode = advanced.getVoidingMode(); @@ -143,7 +147,7 @@ private static void fluidVoidingInfo(@NotNull IProbeInfo probeInfo, @NotNull Cov voidingText(probeInfo, mode, unit, voiding.getBucketMode() == CoverPump.BucketMode.BUCKET ? advanced.getTransferAmount() / 1000 : advanced.getTransferAmount(), - voiding.getFluidFilterContainer().getFilterWrapper().getFluidFilter() != null); + container.hasFilter() && !container.isBlacklistFilter()); } } @@ -176,12 +180,12 @@ private static void fluidFilterInfo(@NotNull IProbeInfo probeInfo, @NotNull Cove * @param enderFluidLink the ender fluid link cover to get data from */ private static void enderFluidLinkInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverEnderFluidLink enderFluidLink) { - transferRateText(probeInfo, enderFluidLink.getPumpMode(), " {*cover.bucket.mode.milli_bucket*}", + transferRateText(probeInfo, enderFluidLink.getPumpMode(), " " + lang("cover.bucket.mode.milli_bucket_rate"), enderFluidLink.isIOEnabled() ? CoverEnderFluidLink.TRANSFER_RATE : 0); - fluidFilterText(probeInfo, enderFluidLink.getFluidFilterContainer().getFilterWrapper().getFluidFilter()); + fluidFilterText(probeInfo, enderFluidLink.getFluidFilterContainer().getFilter()); if (!enderFluidLink.getColorStr().isEmpty()) { - probeInfo.text(TextStyleClass.INFO + "{*gregtech.top.link_cover.color*} " + enderFluidLink.getColorStr()); + probeInfo.text(TextStyleClass.INFO + lang("gregtech.top.link_cover.color") + " " + enderFluidLink.getColorStr()); } } @@ -195,7 +199,8 @@ private static void enderFluidLinkInfo(@NotNull IProbeInfo probeInfo, @NotNull C */ private static void transferRateText(@NotNull IProbeInfo probeInfo, @NotNull IIOMode mode, @NotNull String rateUnit, int rate) { - String modeText = mode.isImport() ? "{*gregtech.top.mode.import*} " : "{*gregtech.top.mode.export*} "; + String modeText = mode.isImport() ? lang("gregtech.top.mode.import") : lang("gregtech.top.mode.export"); + modeText += " "; probeInfo.text(TextStyleClass.OK + modeText + TextStyleClass.LABEL + TextFormattingUtil.formatNumbers(rate) + rateUnit); } @@ -210,7 +215,7 @@ private static void transferRateText(@NotNull IProbeInfo probeInfo, @NotNull IIO */ private static void transferModeText(@NotNull IProbeInfo probeInfo, @NotNull TransferMode mode, @NotNull String rateUnit, int rate, boolean hasFilter) { - String text = TextStyleClass.OK + IProbeInfo.STARTLOC + mode.getName() + IProbeInfo.ENDLOC; + String text = TextStyleClass.OK + lang(mode.getName()); if (!hasFilter && mode != TransferMode.TRANSFER_ANY) text += TextStyleClass.LABEL + " " + TextFormattingUtil.formatNumbers(rate) + " " + rateUnit; @@ -228,7 +233,7 @@ private static void transferModeText(@NotNull IProbeInfo probeInfo, @NotNull Tra */ private static void voidingText(@NotNull IProbeInfo probeInfo, @NotNull VoidingMode mode, @NotNull String unit, int amount, boolean hasFilter) { - String text = TextFormatting.RED + IProbeInfo.STARTLOC + mode.getName() + IProbeInfo.ENDLOC; + String text = TextFormatting.RED + lang(mode.getName()); if (mode != VoidingMode.VOID_ANY && !hasFilter) text += " " + TextFormattingUtil.formatNumbers(amount) + unit; probeInfo.text(text); } @@ -240,7 +245,7 @@ private static void voidingText(@NotNull IProbeInfo probeInfo, @NotNull VoidingM * @param mode the filter mode of the cover */ private static void filterModeText(@NotNull IProbeInfo probeInfo, @NotNull IFilterMode mode) { - probeInfo.text(TextStyleClass.WARNING + IProbeInfo.STARTLOC + mode.getName() + IProbeInfo.ENDLOC); + probeInfo.text(TextStyleClass.WARNING + lang(mode.getName())); } /** @@ -250,13 +255,12 @@ private static void filterModeText(@NotNull IProbeInfo probeInfo, @NotNull IFilt * @param filter the filter to display info from */ private static void itemFilterText(@NotNull IProbeInfo probeInfo, @Nullable ItemFilter filter) { - String label = TextStyleClass.INFO + "{*gregtech.top.filter.label*} "; + String label = TextStyleClass.INFO + lang("gregtech.top.filter.label"); if (filter instanceof OreDictionaryItemFilter) { String expression = ((OreDictionaryItemFilter) filter).getExpression(); if (!expression.isEmpty()) probeInfo.text(label + expression); - } else if (filter instanceof SmartItemFilter) { - probeInfo.text(label + IProbeInfo.STARTLOC + ((SmartItemFilter) filter).getFilteringMode().getName() + - IProbeInfo.ENDLOC); + } else if (filter instanceof SmartItemFilter smartItemFilter) { + probeInfo.text(label + lang(smartItemFilter.getFilteringMode().getName())); } } @@ -269,4 +273,8 @@ private static void itemFilterText(@NotNull IProbeInfo probeInfo, @Nullable Item private static void fluidFilterText(@NotNull IProbeInfo probeInfo, @Nullable FluidFilter filter) { // TODO If more unique fluid filtration is added, providers for it go here } + + private static String lang(String lang) { + return IProbeInfo.STARTLOC + lang + IProbeInfo.ENDLOC; + } } From 17d89a593607fa2201a7c38ec37527e01104dc23 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 18 Jan 2024 15:12:20 -0700 Subject: [PATCH 124/260] port item voiding + advanced covers add lang for voiding mode make void overflow limit to int limit --- .../common/covers/CoverItemVoiding.java | 23 +++++++------ .../covers/CoverItemVoidingAdvanced.java | 32 ++++++++++++++++--- .../gregtech/common/covers/VoidingMode.java | 2 +- .../resources/assets/gregtech/lang/en_us.lang | 1 + 4 files changed, 41 insertions(+), 17 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverItemVoiding.java b/src/main/java/gregtech/common/covers/CoverItemVoiding.java index e91be06d4c8..96c9b9d1ba3 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoiding.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoiding.java @@ -1,17 +1,5 @@ package gregtech.common.covers; -import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.factory.SidedPosGuiData; -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.GuiSyncManager; -import com.cleanroommc.modularui.widget.ParentWidget; -import com.cleanroommc.modularui.widgets.ToggleButton; -import com.cleanroommc.modularui.widgets.layout.Column; - -import com.cleanroommc.modularui.widgets.layout.Row; - import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; @@ -38,6 +26,16 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.factory.SidedPosGuiData; +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.GuiSyncManager; +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widgets.ToggleButton; +import com.cleanroommc.modularui.widgets.layout.Column; +import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.NotNull; public class CoverItemVoiding extends CoverConveyor { @@ -113,6 +111,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag @Override protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager guiSyncManager) { var isWorking = new BooleanSyncValue(this::isWorkingEnabled, this::setWorkingEnabled); + return super.createUI(mainPanel, guiSyncManager) .child(new Row().height(18).widthRel(1f) .marginBottom(2) diff --git a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java index d772fa72765..3b0b78b07c7 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java @@ -2,19 +2,25 @@ import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Color; +import com.cleanroommc.modularui.value.sync.EnumSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.value.sync.StringSyncValue; import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widgets.layout.Column; import com.cleanroommc.modularui.widgets.layout.Row; +import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; + import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.ModularUI; import gregtech.api.gui.Widget; import gregtech.api.gui.widgets.*; +import gregtech.api.mui.GTGuiTextures; import gregtech.client.renderer.texture.Textures; import net.minecraft.entity.player.EntityPlayer; @@ -172,14 +178,32 @@ public void initFilterUI(int y, Consumer widgetGroup) { @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { - return super.buildUI(guiData, guiSyncManager).height(192); + return super.buildUI(guiData, guiSyncManager).height(192 + 18); } @Override protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager guiSyncManager) { - return super.createUI(mainPanel, guiSyncManager); -// .child(new Row() -// .child()); + var voidingMode = new EnumSyncValue<>(VoidingMode.class, this::getVoidingMode, this::setVoidingMode); + guiSyncManager.syncValue("transfer_mode", voidingMode); + + var filterTransferSize = new StringSyncValue( + () -> String.valueOf(this.itemFilterContainer.getTransferSize()), + s -> this.itemFilterContainer.setTransferSize(Integer.parseInt(s))); + filterTransferSize.updateCacheFromSource(true); + + return super.createUI(mainPanel, guiSyncManager) + .child(new EnumRowBuilder<>(VoidingMode.class) + .value(voidingMode) + .lang("cover.voiding.voiding_mode") +// .overlay(GTGuiTextures.TRANSFER_MODE_OVERLAY) todo voiding mode overlay + .build()) + .child(new Row().right(0).coverChildrenHeight() + .child(new TextFieldWidget().widthRel(0.5f).right(0) + .setEnabledIf(w -> this.itemFilterContainer.showGlobalTransferLimitSlider() && + this.voidingMode == VoidingMode.VOID_OVERFLOW) + .setNumbers(0, Integer.MAX_VALUE) + .value(filterTransferSize) + .setTextColor(Color.WHITE.darker(1)))); } @Override diff --git a/src/main/java/gregtech/common/covers/VoidingMode.java b/src/main/java/gregtech/common/covers/VoidingMode.java index 48aa9d0b8de..93b1250dd8e 100644 --- a/src/main/java/gregtech/common/covers/VoidingMode.java +++ b/src/main/java/gregtech/common/covers/VoidingMode.java @@ -7,7 +7,7 @@ public enum VoidingMode implements IStringSerializable { VOID_ANY("cover.voiding.voiding_mode.void_any", 1), - VOID_OVERFLOW("cover.voiding.voiding_mode.void_overflow", 1024); + VOID_OVERFLOW("cover.voiding.voiding_mode.void_overflow", Integer.MAX_VALUE); public final String localeName; public final int maxStackSize; diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index d038be1be81..a41194af1f7 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -1255,6 +1255,7 @@ cover.item_filter.ignore_nbt.disabled=Respect NBT cover.voiding.voiding_mode.void_any=Void Matching cover.voiding.voiding_mode.void_overflow=Void Overflow +cover.voiding.voiding_mode=Voiding Mode cover.voiding.voiding_mode.description=§eVoid Matching§r will void anything matching the filter. /n§eVoid Overflow§r will void anything matching the filter, up to the specified amount. cover.fluid.voiding.title=Fluid Voiding Settings cover.fluid.voiding.advanced.title=Advanced Fluid Voiding Settings From d0b294c40e4dc96078ead4a425da5955c8c244b9 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 18 Jan 2024 16:11:30 -0700 Subject: [PATCH 125/260] fix missing space --- .../integration/theoneprobe/provider/CoverInfoProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java index 97bce4154c3..9b89de3f59c 100644 --- a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java +++ b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java @@ -234,7 +234,7 @@ private static void transferModeText(@NotNull IProbeInfo probeInfo, @NotNull Tra private static void voidingText(@NotNull IProbeInfo probeInfo, @NotNull VoidingMode mode, @NotNull String unit, int amount, boolean hasFilter) { String text = TextFormatting.RED + lang(mode.getName()); - if (mode != VoidingMode.VOID_ANY && !hasFilter) text += " " + TextFormattingUtil.formatNumbers(amount) + unit; + if (mode != VoidingMode.VOID_ANY && !hasFilter) text += " " + TextFormattingUtil.formatNumbers(amount) + " " + unit; probeInfo.text(text); } From 02b2b53efa74b970a367c9f830fc781259c3b0b5 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 18 Jan 2024 16:13:00 -0700 Subject: [PATCH 126/260] add methods for get/set transfer rate as string override proper method more fixes for fluid voiding + advanced --- .../common/covers/CoverFluidRegulator.java | 27 ++++---- .../common/covers/CoverFluidVoiding.java | 38 +++++++++++ .../covers/CoverFluidVoidingAdvanced.java | 61 +++++++++++++++--- .../covers/CoverItemVoidingAdvanced.java | 7 ++- .../gregtech/common/covers/CoverPump.java | 63 ++++++++++++++++--- 5 files changed, 161 insertions(+), 35 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index ca822c63b8d..99d374a1923 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -225,19 +225,11 @@ public void setTransferMode(TransferMode transferMode) { if (this.transferMode != transferMode) { this.transferMode = transferMode; this.fluidFilterContainer.setBucketOnly(transferMode == TransferMode.TRANSFER_ANY); - this.fluidFilterContainer.setMaxTransferSize(getMaxTransferSize()); + this.fluidFilterContainer.setMaxTransferSize(getMaxTransferRate()); this.markDirty(); } } - public int getMaxTransferSize() { - return switch (this.transferMode) { - case TRANSFER_ANY -> 0; - case TRANSFER_EXACT -> maxFluidTransferRate; - case KEEP_EXACT -> Integer.MAX_VALUE; - }; - } - public TransferMode getTransferMode() { return transferMode; } @@ -331,13 +323,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa bucketMode.updateCacheFromSource(true); syncManager.syncValue("bucket_mode", bucketMode); - var filterTransferSize = new StringSyncValue( - () -> String.valueOf(this.fluidFilterContainer.getTransferSize()), - s -> this.fluidFilterContainer.setTransferSize( - getBucketMode() == BucketMode.MILLI_BUCKET ? - Integer.parseInt(s) : - Integer.parseInt(s) * 1000 - )); + var filterTransferSize = new StringSyncValue(this::getStringTransferRate, this::setStringTransferRate); filterTransferSize.updateCacheFromSource(true); return super.createUI(mainPanel, syncManager) @@ -357,6 +343,15 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa .setTextColor(Color.WHITE.darker(1)))); } + @Override + public int getMaxTransferRate() { + return switch (this.transferMode) { + case TRANSFER_ANY -> 0; + case TRANSFER_EXACT -> maxFluidTransferRate; + case KEEP_EXACT -> Integer.MAX_VALUE; + }; + } + @Override public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.writeInitialSyncData(packetBuffer); diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoiding.java b/src/main/java/gregtech/common/covers/CoverFluidVoiding.java index b0e8637ae65..c6d092b82ca 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoiding.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoiding.java @@ -1,5 +1,16 @@ package gregtech.common.covers; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.factory.SidedPosGuiData; +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.GuiSyncManager; +import com.cleanroommc.modularui.widget.ParentWidget; + +import com.cleanroommc.modularui.widgets.ToggleButton; +import com.cleanroommc.modularui.widgets.layout.Row; + import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; @@ -91,6 +102,33 @@ public void renderCover(@NotNull CCRenderState renderState, @NotNull Matrix4 tra Textures.FLUID_VOIDING.renderSided(getAttachedSide(), plateBox, renderState, pipeline, translation); } + @Override + public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { + return super.buildUI(guiData, guiSyncManager).height(192); + } + + @Override + protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { + var isWorking = new BooleanSyncValue(this::isWorkingEnabled, this::setWorkingEnabled); + + return super.createUI(mainPanel, syncManager) + .child(new Row().height(18).widthRel(1f) + .marginBottom(2) + .child(new ToggleButton() + .value(isWorking) + .overlay(IKey.dynamic(() -> this.isWorkingAllowed ? + "Working Enabled" : + "Working Disabled") + .color(Color.WHITE.darker(1))) + .widthRel(0.6f) + .left(0))); + } + + @Override + protected boolean createThroughputRow() { + return false; + } + @Override public @NotNull EnumActionResult onSoftMalletClick(@NotNull EntityPlayer playerIn, @NotNull EnumHand hand, @NotNull CuboidRayTraceResult hitResult) { diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index 623f8ef9d13..d955c4fd27d 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -1,11 +1,24 @@ package gregtech.common.covers; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.factory.SidedPosGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Color; +import com.cleanroommc.modularui.value.sync.EnumSyncValue; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; + +import com.cleanroommc.modularui.value.sync.StringSyncValue; +import com.cleanroommc.modularui.widget.ParentWidget; + +import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; + import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.ModularUI; import gregtech.api.gui.Widget; import gregtech.api.gui.widgets.*; +import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.GTTransferUtils; import gregtech.client.renderer.texture.Textures; @@ -79,14 +92,6 @@ protected void voidOverflow(final IFluidHandler sourceHandler, } } - @Override - public void setBucketMode(BucketMode bucketMode) { - super.setBucketMode(bucketMode); - if (this.bucketMode == BucketMode.BUCKET) { - setTransferAmount(transferAmount / 1000 * 1000); - } - } - private void adjustTransferSize(int amount) { if (bucketMode == BucketMode.BUCKET) amount *= 1000; @@ -204,6 +209,46 @@ public void initFilterUI(int y, Consumer widgetGroup) { () -> voidingMode != VoidingMode.VOID_OVERFLOW); } + @Override + public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { + return super.buildUI(guiData, guiSyncManager).height(192 + 38); + } + + @Override + protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { + var voidingMode = new EnumSyncValue<>(VoidingMode.class, this::getVoidingMode, this::setVoidingMode); + syncManager.syncValue("voiding_mode", voidingMode); + + var bucketMode = new EnumSyncValue<>(BucketMode.class, this::getBucketMode, this::setBucketMode); + bucketMode.updateCacheFromSource(true); + syncManager.syncValue("bucket_mode", bucketMode); + + var filterTransferSize = new StringSyncValue(this::getTransferAmountString, this::setStringTransferRate); + filterTransferSize.updateCacheFromSource(true); + + return super.createUI(mainPanel, syncManager) + .child(new EnumRowBuilder<>(VoidingMode.class) + .value(voidingMode) + .lang("cover.voiding.voiding_mode") +// .overlay(GTGuiTextures.TRANSFER_MODE_OVERLAY) todo voiding mode overlay + .build()) + .child(new EnumRowBuilder<>(BucketMode.class) + .value(bucketMode) + .overlay(IKey.str("kL"), IKey.str("L")) + .build() + .child(new TextFieldWidget().widthRel(0.5f).right(0) + .setEnabledIf(w -> this.fluidFilterContainer.showGlobalTransferLimitSlider() && + this.voidingMode == VoidingMode.VOID_OVERFLOW) + .setNumbers(0, Integer.MAX_VALUE) + .value(filterTransferSize) + .setTextColor(Color.WHITE.darker(1)))); + } + + @Override + protected int getMaxTransferRate() { + return getVoidingMode().maxStackSize; + } + @Override public void renderCover(@NotNull CCRenderState renderState, @NotNull Matrix4 translation, IVertexOperation[] pipeline, @NotNull Cuboid6 plateBox, @NotNull BlockRenderLayer layer) { diff --git a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java index 3b0b78b07c7..2473417782d 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java @@ -184,7 +184,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag @Override protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager guiSyncManager) { var voidingMode = new EnumSyncValue<>(VoidingMode.class, this::getVoidingMode, this::setVoidingMode); - guiSyncManager.syncValue("transfer_mode", voidingMode); + guiSyncManager.syncValue("voiding_mode", voidingMode); var filterTransferSize = new StringSyncValue( () -> String.valueOf(this.itemFilterContainer.getTransferSize()), @@ -206,6 +206,11 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g .setTextColor(Color.WHITE.darker(1)))); } + @Override + protected int getMaxStackSize() { + return getVoidingMode().maxStackSize; + } + @Override public void renderCover(CCRenderState renderState, Matrix4 translation, IVertexOperation[] pipeline, Cuboid6 plateBox, BlockRenderLayer layer) { diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index befe8b58192..fe22399783e 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -92,6 +92,19 @@ public CoverPump(@NotNull CoverDefinition definition, @NotNull CoverableView cov this.fluidFilterContainer = new FluidFilterContainer(this); } + public void setStringTransferRate(String s) { + this.fluidFilterContainer.setTransferSize( + getBucketMode() == BucketMode.MILLI_BUCKET ? + Integer.parseInt(s) : + Integer.parseInt(s) * 1000); + } + + public String getStringTransferRate() { + return String.valueOf(getBucketMode() == BucketMode.MILLI_BUCKET ? + this.fluidFilterContainer.getTransferSize() : + this.fluidFilterContainer.getTransferSize() / 1000); + } + public void setTransferRate(int transferRate) { this.transferRate = MathHelper.clamp(transferRate, 1, maxFluidTransferRate); markDirty(); @@ -249,7 +262,7 @@ public boolean usesMui2() { public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { var panel = GTGuis.createPanel(this, 176,192); - //todo set fluid filter stuffs here + getFluidFilterContainer().setMaxTransferSize(getMaxTransferRate()); return panel.child(CoverWithUI.createTitleRow(getPickItem())) .child(createUI(panel, guiSyncManager)) @@ -282,9 +295,11 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa syncManager.syncValue("pump_mode", pumpMode); syncManager.syncValue("throughput", throughput); - return new Column().top(24).margin(7, 0) - .widthRel(1f).coverChildrenHeight() - .child(new Row().coverChildrenHeight() + var column = new Column().top(24).margin(7, 0) + .widthRel(1f).coverChildrenHeight(); + + if (createThroughputRow()) + column.child(new Row().coverChildrenHeight() .marginBottom(2).widthRel(1f) .child(new ButtonWidget<>() .left(0).width(18) @@ -309,19 +324,47 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa Interactable.playButtonClickSound(); return true; }) - .onUpdateListener(w -> w.overlay(createAdjustOverlay(true))))) - .child(getFluidFilterContainer() - .initUI(mainPanel, syncManager)) - .child(new EnumRowBuilder<>(ManualImportExportMode.class) + .onUpdateListener(w -> w.overlay(createAdjustOverlay(true))))); + + if (createFilterRow()) + column.child(getFluidFilterContainer() + .initUI(mainPanel, syncManager)); + + if (createManualIOModeRow()) + column.child(new EnumRowBuilder<>(ManualImportExportMode.class) .value(manualIOmode) .lang("cover.generic.manual_io") .overlay(GTGuiTextures.MANUAL_IO_OVERLAY) - .build()) - .child(new EnumRowBuilder<>(PumpMode.class) + .build()); + + if (createPumpModeRow()) + column.child(new EnumRowBuilder<>(PumpMode.class) .value(pumpMode) .lang("cover.pump.mode") .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY) // todo pump mode overlays .build()); + + return column; + } + + protected boolean createThroughputRow() { + return true; + } + + protected boolean createFilterRow() { + return true; + } + + protected boolean createManualIOModeRow() { + return true; + } + + protected boolean createPumpModeRow() { + return true; + } + + protected int getMaxTransferRate() { + return 1000; } @Override From eed7d84e4d91a1ef5698782f82d2d1007bf76b4d Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 18 Jan 2024 16:40:01 -0700 Subject: [PATCH 127/260] make sure button is set on init --- .../gregtech/common/covers/filter/FluidFilterContainer.java | 4 +++- .../gregtech/common/covers/filter/ItemFilterContainer.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index b878f30153f..a03fc21c02b 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -86,6 +86,8 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) } }; manager.syncValue("filter_panel", panel); + var filterButton = new ButtonWidget<>(); + filterButton.setEnabled(hasFilter()); return new Row().coverChildrenHeight() .marginBottom(2).widthRel(1f) @@ -105,7 +107,7 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) }, true) .size(18).marginRight(2) .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY)) - .child(new ButtonWidget<>() + .child(filterButton .setEnabledIf(w -> hasFilter()) .onMousePressed(i -> { boolean success = false; diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 441985b1587..f9e46f39b7d 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -80,6 +80,8 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) } }; manager.syncValue("filter_panel", panel); + var filterButton = new ButtonWidget<>(); + filterButton.setEnabled(hasFilter()); return new Row().coverChildrenHeight() .marginBottom(2).widthRel(1f) @@ -99,7 +101,7 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) }, true) .size(18).marginRight(2) .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY)) - .child(new ButtonWidget<>() + .child(filterButton .setEnabledIf(w -> hasFilter()) .onMousePressed(i -> { boolean success = false; From 8b3be562dd6886573eced0966ef53ed55f213c4b Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 18 Jan 2024 16:40:38 -0700 Subject: [PATCH 128/260] sync voiding mode --- .../covers/CoverFluidVoidingAdvanced.java | 45 +++++++++++------ .../covers/CoverItemVoidingAdvanced.java | 48 ++++++++++++------- 2 files changed, 63 insertions(+), 30 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index d955c4fd27d..9bfe44b0b86 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -1,29 +1,25 @@ package gregtech.common.covers; -import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.factory.SidedPosGuiData; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Color; -import com.cleanroommc.modularui.value.sync.EnumSyncValue; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; - -import com.cleanroommc.modularui.value.sync.StringSyncValue; -import com.cleanroommc.modularui.widget.ParentWidget; - -import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; - import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.ModularUI; import gregtech.api.gui.Widget; -import gregtech.api.gui.widgets.*; -import gregtech.api.mui.GTGuiTextures; +import gregtech.api.gui.widgets.CycleButtonWidget; +import gregtech.api.gui.widgets.ImageWidget; +import gregtech.api.gui.widgets.IncrementButtonWidget; +import gregtech.api.gui.widgets.LabelWidget; +import gregtech.api.gui.widgets.ServerWidgetGroup; +import gregtech.api.gui.widgets.SimpleTextWidget; +import gregtech.api.gui.widgets.SlotWidget; +import gregtech.api.gui.widgets.TextFieldWidget2; +import gregtech.api.gui.widgets.WidgetGroup; import gregtech.api.util.GTTransferUtils; import gregtech.client.renderer.texture.Textures; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.MathHelper; @@ -36,6 +32,15 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.factory.SidedPosGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Color; +import com.cleanroommc.modularui.value.sync.EnumSyncValue; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.value.sync.StringSyncValue; +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; import org.jetbrains.annotations.NotNull; import java.util.function.Consumer; @@ -255,6 +260,18 @@ public void renderCover(@NotNull CCRenderState renderState, @NotNull Matrix4 tra Textures.FLUID_VOIDING_ADVANCED.renderSided(getAttachedSide(), plateBox, renderState, pipeline, translation); } + @Override + public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { + super.readInitialSyncData(packetBuffer); + this.voidingMode = packetBuffer.readEnumValue(VoidingMode.class); + } + + @Override + public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { + super.writeInitialSyncData(packetBuffer); + packetBuffer.writeEnumValue(voidingMode); + } + @Override public void writeToNBT(@NotNull NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); diff --git a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java index 2473417782d..45f8ff689fc 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java @@ -1,31 +1,24 @@ package gregtech.common.covers; -import com.cleanroommc.modularui.factory.SidedPosGuiData; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Color; -import com.cleanroommc.modularui.value.sync.EnumSyncValue; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; - -import com.cleanroommc.modularui.value.sync.StringSyncValue; -import com.cleanroommc.modularui.widget.ParentWidget; -import com.cleanroommc.modularui.widgets.layout.Column; - -import com.cleanroommc.modularui.widgets.layout.Row; - -import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; - import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.ModularUI; import gregtech.api.gui.Widget; -import gregtech.api.gui.widgets.*; -import gregtech.api.mui.GTGuiTextures; +import gregtech.api.gui.widgets.CycleButtonWidget; +import gregtech.api.gui.widgets.ImageWidget; +import gregtech.api.gui.widgets.IncrementButtonWidget; +import gregtech.api.gui.widgets.LabelWidget; +import gregtech.api.gui.widgets.ServerWidgetGroup; +import gregtech.api.gui.widgets.SlotWidget; +import gregtech.api.gui.widgets.TextFieldWidget2; +import gregtech.api.gui.widgets.WidgetGroup; import gregtech.client.renderer.texture.Textures; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.MathHelper; @@ -36,6 +29,16 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; +import com.cleanroommc.modularui.factory.SidedPosGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Color; +import com.cleanroommc.modularui.value.sync.EnumSyncValue; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.value.sync.StringSyncValue; +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widgets.layout.Column; +import com.cleanroommc.modularui.widgets.layout.Row; +import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; import org.jetbrains.annotations.NotNull; import java.util.Map; @@ -227,6 +230,19 @@ public VoidingMode getVoidingMode() { return voidingMode; } + + @Override + public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { + super.readInitialSyncData(packetBuffer); + this.voidingMode = packetBuffer.readEnumValue(VoidingMode.class); + } + + @Override + public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { + super.writeInitialSyncData(packetBuffer); + packetBuffer.writeEnumValue(voidingMode); + } + @Override public void writeToNBT(NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); From 4a4556a9291926a045eb0e74b15b27d26a87c9d5 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 18 Jan 2024 17:09:59 -0700 Subject: [PATCH 129/260] properly handle stack when filter is blacklist --- src/main/java/gregtech/common/covers/filter/ItemFilter.java | 2 +- .../java/gregtech/common/covers/filter/SimpleItemFilter.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index de48e2c598d..ce3ff5d0385 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -45,7 +45,7 @@ public final boolean isBlacklistFilter() { } public final int getMaxTransferSize() { - return isBlacklistFilter() ? 1 : this.filterReader.getMaxTransferRate(); + return this.filterReader.getMaxTransferRate(); } public final void setMaxTransferSize(int maxStackSize) { diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index d9e8e764d30..21113000e3c 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -215,7 +215,7 @@ public int getSlotLimit(int slot) { @Override public void setStackInSlot(int slot, ItemStack stack) { if (!stack.isEmpty()) { - stack.setCount(Math.min(stack.getCount(), getMaxTransferRate())); + stack.setCount(Math.min(stack.getCount(), isBlacklistFilter() ? 1 : getMaxTransferRate())); } super.setStackInSlot(slot, stack); } @@ -225,7 +225,7 @@ public void onTransferRateChange() { for (int i = 0; i < getSlots(); i++) { ItemStack itemStack = getStackInSlot(i); if (!itemStack.isEmpty()) { - itemStack.setCount(Math.min(itemStack.getCount(), getMaxTransferRate())); + itemStack.setCount(Math.min(itemStack.getCount(), isBlacklistFilter() ? 1 : getMaxTransferRate())); setStackInSlot(i, itemStack); } } From fad7f3c7e36c05ba5bc75e18e1b65d65544d8738 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 18 Jan 2024 17:10:35 -0700 Subject: [PATCH 130/260] adjust height use lang --- .../gregtech/common/covers/CoverFluidVoiding.java | 13 +++++++++---- .../gregtech/common/covers/CoverItemVoiding.java | 8 ++++---- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoiding.java b/src/main/java/gregtech/common/covers/CoverFluidVoiding.java index c6d092b82ca..26d82481470 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoiding.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoiding.java @@ -104,7 +104,7 @@ public void renderCover(@NotNull CCRenderState renderState, @NotNull Matrix4 tra @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { - return super.buildUI(guiData, guiSyncManager).height(192); + return super.buildUI(guiData, guiSyncManager).height(192 - 22); } @Override @@ -116,14 +116,19 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa .marginBottom(2) .child(new ToggleButton() .value(isWorking) - .overlay(IKey.dynamic(() -> this.isWorkingAllowed ? - "Working Enabled" : - "Working Disabled") + .overlay(IKey.dynamic(() -> IKey.lang(this.isWorkingAllowed ? + "behaviour.soft_hammer.enabled" : + "behaviour.soft_hammer.disabled").get()) .color(Color.WHITE.darker(1))) .widthRel(0.6f) .left(0))); } + @Override + protected boolean createPumpModeRow() { + return false; + } + @Override protected boolean createThroughputRow() { return false; diff --git a/src/main/java/gregtech/common/covers/CoverItemVoiding.java b/src/main/java/gregtech/common/covers/CoverItemVoiding.java index 96c9b9d1ba3..7ee6f9f13d3 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoiding.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoiding.java @@ -105,7 +105,7 @@ public ModularUI createUI(EntityPlayer player) { @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { - return super.buildUI(guiData, guiSyncManager).height(192); + return super.buildUI(guiData, guiSyncManager).height(192 - 22); } @Override @@ -117,9 +117,9 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g .marginBottom(2) .child(new ToggleButton() .value(isWorking) - .overlay(IKey.dynamic(() -> this.isWorkingAllowed ? - "Working Enabled" : - "Working Disabled") + .overlay(IKey.dynamic(() -> IKey.lang(this.isWorkingAllowed ? + "behaviour.soft_hammer.enabled" : + "behaviour.soft_hammer.disabled").get()) .color(Color.WHITE.darker(1))) .widthRel(0.6f) .left(0))); From 58f8ebba730595174558348892ef99c3e07d1c3f Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 18 Jan 2024 17:10:53 -0700 Subject: [PATCH 131/260] set text field on init --- .../gregtech/common/covers/CoverFluidVoidingAdvanced.java | 5 ++++- .../gregtech/common/covers/CoverItemVoidingAdvanced.java | 7 +++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index 9bfe44b0b86..f65a83df756 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -230,6 +230,9 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa var filterTransferSize = new StringSyncValue(this::getTransferAmountString, this::setStringTransferRate); filterTransferSize.updateCacheFromSource(true); + var transferTextField = new TextFieldWidget().widthRel(0.5f).right(0); + transferTextField.setEnabled(this.fluidFilterContainer.showGlobalTransferLimitSlider() && + this.voidingMode == VoidingMode.VOID_OVERFLOW); return super.createUI(mainPanel, syncManager) .child(new EnumRowBuilder<>(VoidingMode.class) @@ -241,7 +244,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa .value(bucketMode) .overlay(IKey.str("kL"), IKey.str("L")) .build() - .child(new TextFieldWidget().widthRel(0.5f).right(0) + .child(transferTextField .setEnabledIf(w -> this.fluidFilterContainer.showGlobalTransferLimitSlider() && this.voidingMode == VoidingMode.VOID_OVERFLOW) .setNumbers(0, Integer.MAX_VALUE) diff --git a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java index 45f8ff689fc..ec61ac0d480 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java @@ -193,6 +193,9 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g () -> String.valueOf(this.itemFilterContainer.getTransferSize()), s -> this.itemFilterContainer.setTransferSize(Integer.parseInt(s))); filterTransferSize.updateCacheFromSource(true); + var transferTextField = new TextFieldWidget().widthRel(0.5f).right(0); + transferTextField.setEnabled(this.itemFilterContainer.showGlobalTransferLimitSlider() && + this.voidingMode == VoidingMode.VOID_OVERFLOW); return super.createUI(mainPanel, guiSyncManager) .child(new EnumRowBuilder<>(VoidingMode.class) @@ -201,7 +204,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g // .overlay(GTGuiTextures.TRANSFER_MODE_OVERLAY) todo voiding mode overlay .build()) .child(new Row().right(0).coverChildrenHeight() - .child(new TextFieldWidget().widthRel(0.5f).right(0) + .child(transferTextField .setEnabledIf(w -> this.itemFilterContainer.showGlobalTransferLimitSlider() && this.voidingMode == VoidingMode.VOID_OVERFLOW) .setNumbers(0, Integer.MAX_VALUE) @@ -222,7 +225,7 @@ public void renderCover(CCRenderState renderState, Matrix4 translation, IVertexO public void setVoidingMode(VoidingMode voidingMode) { this.voidingMode = voidingMode; - this.itemFilterContainer.setMaxTransferSize(voidingMode.maxStackSize); + this.itemFilterContainer.setMaxTransferSize(getMaxStackSize()); this.getCoverableView().markDirty(); } From 6132b6bbd68fbf9dd22ff125be24190490156d45 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 18 Jan 2024 17:43:16 -0700 Subject: [PATCH 132/260] try fix weird throughput and bucket mode issues --- .../common/covers/CoverFluidVoidingAdvanced.java | 4 +++- src/main/java/gregtech/common/covers/CoverPump.java | 13 ++++--------- .../common/covers/filter/SimpleFluidFilter.java | 7 +------ 3 files changed, 8 insertions(+), 16 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index f65a83df756..b886c1a6278 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -116,6 +116,8 @@ public int getTransferAmount() { public void setVoidingMode(VoidingMode transferMode) { this.voidingMode = transferMode; + this.fluidFilterContainer.setBucketOnly(transferMode == VoidingMode.VOID_ANY); + this.fluidFilterContainer.setMaxTransferSize(getMaxTransferRate()); this.markDirty(); } @@ -216,7 +218,7 @@ public void initFilterUI(int y, Consumer widgetGroup) { @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { - return super.buildUI(guiData, guiSyncManager).height(192 + 38); + return super.buildUI(guiData, guiSyncManager).height(192 + 20); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index fe22399783e..05626a31546 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -106,12 +106,13 @@ public String getStringTransferRate() { } public void setTransferRate(int transferRate) { + if (bucketMode == BucketMode.BUCKET) transferRate *= 1000; this.transferRate = MathHelper.clamp(transferRate, 1, maxFluidTransferRate); markDirty(); } public int getTransferRate() { - return transferRate; + return bucketMode == BucketMode.BUCKET ? transferRate / 1000 : transferRate; } protected void adjustTransferRate(int amount) { @@ -278,14 +279,8 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa throughput.updateCacheFromSource(true); var throughputString = new StringSyncValue( - () -> String.valueOf(switch (getBucketMode()) { - case BUCKET -> throughput.getIntValue() / 1000; - case MILLI_BUCKET -> throughput.getIntValue(); - }), - s -> throughput.setValue(switch (getBucketMode()) { - case BUCKET -> Integer.parseInt(s) * 1000; - case MILLI_BUCKET -> Integer.parseInt(s); - })); + throughput::getStringValue, + throughput::setStringValue); throughputString.updateCacheFromSource(true); var pumpMode = new EnumSyncValue<>(PumpMode.class, this::getPumpMode, this::setPumpMode); diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 2f4175e7285..786ec4c51ab 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -161,11 +161,6 @@ public void setFluidAmounts(int amount) { } } - @Override - public int getMaxTransferRate() { - return isBucketOnly() ? 1000 : super.getMaxTransferRate(); - } - @Override public void onTransferRateChange() { for (int i = 0; i < getSlots(); i++) { @@ -230,7 +225,7 @@ protected boolean isBucketOnly() { @Override public int getFluidAmount() { - return isEmpty() ? 0 : getFluidTag().getInteger(FLUID_AMOUNT); + return getFluidTag().getInteger(FLUID_AMOUNT); } @Override From 7601409c680d77f9d56c5d01c1597be1a8a9b7d1 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jan 2024 14:29:20 -0700 Subject: [PATCH 133/260] begin work on porting CoverEnderFluidLink --- .../common/covers/CoverEnderFluidLink.java | 104 ++++++++++++++++-- .../covers/filter/SimpleFluidFilter.java | 14 ++- 2 files changed, 101 insertions(+), 17 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java b/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java index b34348c69bb..d2501c126e5 100644 --- a/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java +++ b/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java @@ -1,5 +1,12 @@ package gregtech.common.covers; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.drawable.DynamicDrawable; +import com.cleanroommc.modularui.utils.Color; +import com.cleanroommc.modularui.value.sync.EnumSyncValue; +import com.cleanroommc.modularui.widgets.FluidSlot; +import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; + import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IControllable; import gregtech.api.cover.CoverBase; @@ -8,7 +15,7 @@ import gregtech.api.cover.CoverableView; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.ModularUI; -import gregtech.api.gui.widgets.*; +import gregtech.api.mui.GTGuis; import gregtech.api.util.FluidTankSwitchShim; import gregtech.api.util.GTTransferUtils; import gregtech.api.util.VirtualTankRegistry; @@ -20,7 +27,11 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; -import net.minecraft.util.*; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ITickable; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; @@ -30,6 +41,15 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; +import com.cleanroommc.modularui.drawable.Rectangle; +import com.cleanroommc.modularui.factory.SidedPosGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.BooleanSyncValue; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.value.sync.StringSyncValue; +import com.cleanroommc.modularui.widgets.ToggleButton; +import com.cleanroommc.modularui.widgets.layout.Column; +import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -144,28 +164,28 @@ public void openUI(EntityPlayerMP player) { @Override public ModularUI createUI(EntityPlayer player) { - WidgetGroup widgetGroup = new WidgetGroup(); - widgetGroup.addWidget(new LabelWidget(10, 5, "cover.ender_fluid_link.title")); - widgetGroup.addWidget(new ToggleButtonWidget(12, 18, 18, 18, GuiTextures.BUTTON_PUBLIC_PRIVATE, + gregtech.api.gui.widgets.WidgetGroup widgetGroup = new gregtech.api.gui.widgets.WidgetGroup(); + widgetGroup.addWidget(new gregtech.api.gui.widgets.LabelWidget(10, 5, "cover.ender_fluid_link.title")); + widgetGroup.addWidget(new gregtech.api.gui.widgets.ToggleButtonWidget(12, 18, 18, 18, GuiTextures.BUTTON_PUBLIC_PRIVATE, this::isPrivate, this::setPrivate) .setTooltipText("cover.ender_fluid_link.private.tooltip")); - widgetGroup.addWidget(new SyncableColorRectWidget(35, 18, 18, 18, () -> color) + widgetGroup.addWidget(new gregtech.api.gui.widgets.SyncableColorRectWidget(35, 18, 18, 18, () -> color) .setBorderWidth(1) .drawCheckerboard(4, 4)); - widgetGroup.addWidget(new TextFieldWidget(58, 13, 58, 18, true, + widgetGroup.addWidget(new gregtech.api.gui.widgets.TextFieldWidget(58, 13, 58, 18, true, this::getColorStr, this::updateColor, 8) .setValidator(str -> COLOR_INPUT_PATTERN.matcher(str).matches())); - widgetGroup.addWidget(new TankWidget(this.linkedTank, 123, 18, 18, 18) + widgetGroup.addWidget(new gregtech.api.gui.widgets.TankWidget(this.linkedTank, 123, 18, 18, 18) .setContainerClicking(true, true) .setBackgroundTexture(GuiTextures.FLUID_SLOT).setAlwaysShowFull(true)); - widgetGroup.addWidget(new ImageWidget(147, 19, 16, 16) + widgetGroup.addWidget(new gregtech.api.gui.widgets.ImageWidget(147, 19, 16, 16) .setImage(GuiTextures.INFO_ICON) .setPredicate(() -> isColorTemp) .setTooltip("cover.ender_fluid_link.incomplete_hex") .setIgnoreColor(true)); - widgetGroup.addWidget(new CycleButtonWidget(10, 42, 75, 18, + widgetGroup.addWidget(new gregtech.api.gui.widgets.CycleButtonWidget(10, 42, 75, 18, CoverPump.PumpMode.class, this::getPumpMode, this::setPumpMode)); - widgetGroup.addWidget(new CycleButtonWidget(92, 42, 75, 18, + widgetGroup.addWidget(new gregtech.api.gui.widgets.CycleButtonWidget(92, 42, 75, 18, this::isIoEnabled, this::setIoEnabled, "cover.ender_fluid_link.iomode.disabled", "cover.ender_fluid_link.iomode.enabled")); this.fluidFilter.initUI(65, widgetGroup::addWidget); @@ -175,6 +195,68 @@ public ModularUI createUI(EntityPlayer player) { .build(this, player); } + @Override + public boolean usesMui2() { + return true; + } + + @Override + public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { + var panel = GTGuis.createPanel(this, 176,192); + + getFluidFilterContainer().setMaxTransferSize(1000); + + return panel.child(CoverWithUI.createTitleRow(getPickItem())) + .child(createWidgets(panel, guiSyncManager)) + .bindPlayerInventory(); + } + + protected Column createWidgets(ModularPanel panel, GuiSyncManager syncManager) { + var isPrivate = new BooleanSyncValue(this::isPrivate, this::setPrivate); + isPrivate.updateCacheFromSource(true); + + var color = new StringSyncValue(this::getColorStr, this::updateColor); + color.updateCacheFromSource(true); + + var pumpMode = new EnumSyncValue<>(CoverPump.PumpMode.class, this::getPumpMode, this::setPumpMode); + syncManager.syncValue("pump_mode", pumpMode); + pumpMode.updateCacheFromSource(true); + + var ioEnabled = new BooleanSyncValue(this::isIOEnabled, this::setIoEnabled); + + return new Column().coverChildrenHeight().top(24) + .margin(7, 0).widthRel(1f) + .child(new Row().marginBottom(2) + .coverChildrenHeight() + .child(new ToggleButton() + .marginRight(2) + .value(isPrivate)) + .child(new DynamicDrawable(() -> new Rectangle().setColor(this.color)) + .asWidget() + .size(18).marginRight(2)) + .child(new TextFieldWidget().height(18) + .value(color) + .setPattern(COLOR_INPUT_PATTERN) + .widthRel(0.5f).marginRight(2)) + .child(new FluidSlot().size(18) + .syncHandler(this.linkedTank))) + .child(new Row().marginBottom(2) + .coverChildrenHeight() + .child(new ToggleButton() + .value(ioEnabled) + .overlay(IKey.dynamic(() -> IKey.lang(this.ioEnabled ? + "behaviour.soft_hammer.enabled" : + "behaviour.soft_hammer.disabled").get()) + .color(Color.WHITE.darker(1))) + .widthRel(0.6f) + .left(0))) + .child(new EnumRowBuilder<>(CoverPump.PumpMode.class) + .value(pumpMode) + .lang("Pump Mode") + .build()) + .child(getFluidFilterContainer().initUI(panel, syncManager)); + } + public void updateColor(String str) { if (str.length() == 8) { isColorTemp = false; diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 786ec4c51ab..aa8b57fcafb 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -6,6 +6,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.network.PacketBuffer; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; @@ -119,12 +120,13 @@ public boolean showGlobalTransferLimitSlider() { } public void readFromNBT(NBTTagCompound tagCompound) { -// NBTTagList filterSlots = tagCompound.getTagList("FluidFilter", 10); -// for (NBTBase nbtBase : filterSlots) { -// NBTTagCompound stackTag = (NBTTagCompound) nbtBase; -// FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(stackTag); -// this.fluidFilterTanks[stackTag.getInteger("Slot")].setFluid(fluidStack); -// } + NBTTagList filterSlots = tagCompound.getTagList("FluidFilter", 10); + for (int i = 0; i < this.filterReader.getSlots(); i++) { + NBTTagCompound stackTag = filterSlots.getCompoundTagAt(i); + FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(stackTag); + if (fluidStack == null) continue; + this.filterReader.getFluidTank(i).setFluid(fluidStack); + } } @Override From 5f4c943117464829a5d9597c3c87f644b354e35f Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jan 2024 14:57:07 -0700 Subject: [PATCH 134/260] CoverEnderFluidLink fully ported fix lang --- .../common/covers/CoverEnderFluidLink.java | 29 ++++++++++++++++--- .../resources/assets/gregtech/lang/en_us.lang | 2 +- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java b/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java index d2501c126e5..ee416450f5a 100644 --- a/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java +++ b/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java @@ -4,6 +4,7 @@ import com.cleanroommc.modularui.drawable.DynamicDrawable; import com.cleanroommc.modularui.utils.Color; import com.cleanroommc.modularui.value.sync.EnumSyncValue; +import com.cleanroommc.modularui.value.sync.FluidSlotSyncHandler; import com.cleanroommc.modularui.widgets.FluidSlot; import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; @@ -15,6 +16,7 @@ import gregtech.api.cover.CoverableView; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.ModularUI; +import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.api.util.FluidTankSwitchShim; import gregtech.api.util.GTTransferUtils; @@ -205,6 +207,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag var panel = GTGuis.createPanel(this, 176,192); getFluidFilterContainer().setMaxTransferSize(1000); + getFluidFilterContainer().setBucketOnly(true); return panel.child(CoverWithUI.createTitleRow(getPickItem())) .child(createWidgets(panel, guiSyncManager)) @@ -224,22 +227,40 @@ protected Column createWidgets(ModularPanel panel, GuiSyncManager syncManager) { var ioEnabled = new BooleanSyncValue(this::isIOEnabled, this::setIoEnabled); + var fluidTank = new FluidSlotSyncHandler(this.linkedTank); + fluidTank.updateCacheFromSource(true); + return new Column().coverChildrenHeight().top(24) .margin(7, 0).widthRel(1f) .child(new Row().marginBottom(2) .coverChildrenHeight() .child(new ToggleButton() + .tooltip(tooltip -> tooltip.setAutoUpdate(true)) + .tooltipBuilder(tooltip -> + tooltip.addLine(IKey.lang(this.isPrivate ? + "cover.ender_fluid_link.private.tooltip.enabled" : + "cover.ender_fluid_link.private.tooltip.disabled"))) .marginRight(2) .value(isPrivate)) - .child(new DynamicDrawable(() -> new Rectangle().setColor(this.color)) + .child(new DynamicDrawable(() -> + new Rectangle() + .setColor(this.color) + .asIcon().size(16)) .asWidget() + .background(GTGuiTextures.SLOT) .size(18).marginRight(2)) .child(new TextFieldWidget().height(18) .value(color) + .setValidator(s -> { + if (s.length() != 8) { + return color.getStringValue(); + } + return s; + }) .setPattern(COLOR_INPUT_PATTERN) .widthRel(0.5f).marginRight(2)) .child(new FluidSlot().size(18) - .syncHandler(this.linkedTank))) + .syncHandler(fluidTank))) .child(new Row().marginBottom(2) .coverChildrenHeight() .child(new ToggleButton() @@ -250,11 +271,11 @@ protected Column createWidgets(ModularPanel panel, GuiSyncManager syncManager) { .color(Color.WHITE.darker(1))) .widthRel(0.6f) .left(0))) + .child(getFluidFilterContainer().initUI(panel, syncManager)) .child(new EnumRowBuilder<>(CoverPump.PumpMode.class) .value(pumpMode) .lang("Pump Mode") - .build()) - .child(getFluidFilterContainer().initUI(panel, syncManager)); + .build()); } public void updateColor(String str) { diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index a41194af1f7..8e0bc8b5449 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -1336,7 +1336,7 @@ cover.machine_controller.disable_with_redstone=Disable with Redstone cover.ender_fluid_link.title=Ender Fluid Link cover.ender_fluid_link.iomode.enabled=I/O Enabled cover.ender_fluid_link.iomode.disabled=I/O Disabled -cover.ender_fluid_link.private.tooltip.disabled=Switch to private tank mode/nPrivate mode uses the player who originally placed the cover +cover.ender_fluid_link.private.tooltip.disabled=Switch to private tank mode\nPrivate mode uses the player who originally placed the cover cover.ender_fluid_link.private.tooltip.enabled=Switch to public tank mode cover.ender_fluid_link.incomplete_hex=Inputted color is incomplete!/nIt will be applied once complete (all 8 hex digits)/nClosing the gui will lose edits! From c78293e67a6818afc8389affa49bd58e9a9770aa Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jan 2024 15:11:25 -0700 Subject: [PATCH 135/260] use the right method, silly --- .../java/gregtech/common/covers/CoverFluidVoidingAdvanced.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index b886c1a6278..539f7caa4c7 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -230,8 +230,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa bucketMode.updateCacheFromSource(true); syncManager.syncValue("bucket_mode", bucketMode); - var filterTransferSize = new StringSyncValue(this::getTransferAmountString, this::setStringTransferRate); - filterTransferSize.updateCacheFromSource(true); + var filterTransferSize = new StringSyncValue(this::getStringTransferRate, this::setStringTransferRate); var transferTextField = new TextFieldWidget().widthRel(0.5f).right(0); transferTextField.setEnabled(this.fluidFilterContainer.showGlobalTransferLimitSlider() && this.voidingMode == VoidingMode.VOID_OVERFLOW); From 6ab019c80017c5e3ffe4629d413ef0e8b5a59b70 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jan 2024 15:47:01 -0700 Subject: [PATCH 136/260] undo changes to PhantomFluidWidget make writeable fluid tank extend fluid tank --- .../api/gui/widgets/PhantomFluidWidget.java | 5 +++-- .../covers/filter/SimpleFluidFilter.java | 19 +++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/main/java/gregtech/api/gui/widgets/PhantomFluidWidget.java b/src/main/java/gregtech/api/gui/widgets/PhantomFluidWidget.java index 6ed404a3ebe..43212ebfae0 100644 --- a/src/main/java/gregtech/api/gui/widgets/PhantomFluidWidget.java +++ b/src/main/java/gregtech/api/gui/widgets/PhantomFluidWidget.java @@ -23,6 +23,7 @@ import net.minecraft.network.PacketBuffer; import net.minecraft.util.math.MathHelper; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandlerItem; @@ -42,7 +43,7 @@ public class PhantomFluidWidget extends Widget implements IIngredientSlot, IGhostIngredientTarget { - private SimpleFluidFilter.WritableFluidTank fluidTank = null; + private FluidTank fluidTank = null; protected IGuiTexture backgroundTexture = GuiTextures.FLUID_SLOT; private Supplier fluidStackSupplier; @@ -59,7 +60,7 @@ public PhantomFluidWidget(int xPosition, int yPosition, int width, int height, this.fluidStackUpdater = fluidStackUpdater; } - public PhantomFluidWidget(int xPosition, int yPosition, int width, int height, SimpleFluidFilter.WritableFluidTank fluidTank) { + public PhantomFluidWidget(int xPosition, int yPosition, int width, int height, FluidTank fluidTank) { super(new Position(xPosition, yPosition), new Size(width, height)); this.fluidTank = fluidTank; this.fluidStackSupplier = fluidTank::getFluid; diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index aa8b57fcafb..d1d3a7c86c4 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -9,7 +9,7 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.network.PacketBuffer; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.IFluidTank; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandlerItem; @@ -112,7 +112,13 @@ public boolean test(FluidStack fluidStack) { } @Override - public void initUI(Consumer widgetGroup) {} + public void initUI(Consumer widgetGroup) { + for (int i = 0; i < 9; ++i) { + widgetGroup.accept((new gregtech.api.gui.widgets.PhantomFluidWidget(10 + 18 * (i % 3), 18 * (i / 3), 18, 18, + filterReader.getFluidTank(i))) + .setBackgroundTexture(gregtech.api.gui.GuiTextures.SLOT)); + } + } @Override public boolean showGlobalTransferLimitSlider() { @@ -174,7 +180,7 @@ public void onTransferRateChange() { } } - public static class WritableFluidTank implements IFluidTank { + public static class WritableFluidTank extends FluidTank { private final NBTTagCompound fluidTank; private final SimpleFluidFilterReader filterReader; protected static final String FLUID_AMOUNT = "Amount"; @@ -183,6 +189,7 @@ public static class WritableFluidTank implements IFluidTank { protected static final String EMPTY = "Empty"; protected WritableFluidTank(SimpleFluidFilterReader filterReader, NBTTagCompound fluidTank, int initialCapacity) { + super(initialCapacity); this.filterReader = filterReader; this.fluidTank = fluidTank; setCapacity(fluidTank.hasKey(CAPACITY) ? fluidTank.getInteger(CAPACITY) : initialCapacity); @@ -213,6 +220,7 @@ public FluidStack getFluid() { return FluidStack.loadFluidStackFromNBT(getFluidTag()); } + @Override public void setFluid(@Nullable FluidStack stack) { if (stack == null) { this.fluidTank.setTag(FLUID, new NBTTagCompound()); @@ -235,11 +243,6 @@ public int getCapacity() { return this.fluidTank.getInteger(CAPACITY); } - @Override - public FluidTankInfo getInfo() { - return new FluidTankInfo(getFluid(), getCapacity()); - } - @SuppressWarnings("DataFlowIssue") @Override public int fill(FluidStack resource, boolean doFill) { From 421e4443e0fea9a7abdc3a3e873a17928a3e4a57 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jan 2024 15:47:13 -0700 Subject: [PATCH 137/260] mark classes as deprecated --- .../gregtech/common/covers/filter/WidgetGroupFluidFilter.java | 1 + .../gregtech/common/covers/filter/WidgetGroupItemFilter.java | 1 + 2 files changed, 2 insertions(+) diff --git a/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java b/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java index 191f038ccc3..78f1a73edd1 100644 --- a/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java @@ -7,6 +7,7 @@ import java.util.function.Supplier; +@Deprecated public class WidgetGroupFluidFilter extends AbstractWidgetGroup { private final Supplier fluidFilterSupplier; diff --git a/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java b/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java index 85c8c83943f..0ede4618dd0 100644 --- a/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java @@ -8,6 +8,7 @@ import java.io.IOException; import java.util.function.Supplier; +@Deprecated public class WidgetGroupItemFilter extends AbstractWidgetGroup { private final Supplier itemFilterSupplier; From 21bfc7fd1ba3e7186317c42abdf2c569c03c9cba Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jan 2024 15:47:26 -0700 Subject: [PATCH 138/260] fix lang issues with detector covers --- .../common/covers/detector/CoverDetectorFluidAdvanced.java | 2 +- .../common/covers/detector/CoverDetectorItemAdvanced.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/covers/detector/CoverDetectorFluidAdvanced.java b/src/main/java/gregtech/common/covers/detector/CoverDetectorFluidAdvanced.java index 32239be9036..ed6eb97ff37 100644 --- a/src/main/java/gregtech/common/covers/detector/CoverDetectorFluidAdvanced.java +++ b/src/main/java/gregtech/common/covers/detector/CoverDetectorFluidAdvanced.java @@ -92,7 +92,7 @@ public ModularUI createUI(EntityPlayer player) { // "cover.generic.advanced_detector.invert_label")); group.addWidget( new CycleButtonWidget(10, 3 * (SIZE + PADDING), 4 * SIZE, SIZE, this::isInverted, this::setInverted, - "cover.machine_controller.normal", "cover.machine_controller.inverted") + "behaviour.soft_hammer.enabled", "behaviour.soft_hammer.disabled") .setTooltipHoverString("cover.generic.advanced_detector.invert_tooltip")); group.addWidget( new CycleButtonWidget(94, 3 * (SIZE + PADDING), 4 * SIZE, SIZE, this::isLatched, this::setLatched, diff --git a/src/main/java/gregtech/common/covers/detector/CoverDetectorItemAdvanced.java b/src/main/java/gregtech/common/covers/detector/CoverDetectorItemAdvanced.java index 7d992674a93..66d33172900 100644 --- a/src/main/java/gregtech/common/covers/detector/CoverDetectorItemAdvanced.java +++ b/src/main/java/gregtech/common/covers/detector/CoverDetectorItemAdvanced.java @@ -78,7 +78,7 @@ public ModularUI createUI(EntityPlayer player) { // "cover.generic.advanced_detector.invert_label")); group.addWidget( new CycleButtonWidget(10, 3 * (SIZE + PADDING), 4 * SIZE, SIZE, this::isInverted, this::setInverted, - "cover.machine_controller.normal", "cover.machine_controller.inverted") + "behaviour.soft_hammer.enabled", "behaviour.soft_hammer.disabled") .setTooltipHoverString("cover.generic.advanced_detector.invert_tooltip")); // group.addWidget(new LabelWidget(10, 5 + 4 * (SIZE + PADDING), // "cover.generic.advanced_detector.latch_label")); From 4355592d0a487fc3f9fdbf8d278f60f289153ff1 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jan 2024 15:48:07 -0700 Subject: [PATCH 139/260] fix NPE crash update current filter on contents changed --- .../gregtech/common/covers/filter/BaseFilterContainer.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index a851c4d76c9..07b0d0367f5 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -78,7 +78,7 @@ public int getTransferLimit(int slotIndex) { } public boolean testItemStack(R toTest) { - return hasFilter() || getFilter().test(toTest); + return !hasFilter() || getFilter().test(toTest); } public int getTransferLimit(R stack) { @@ -157,5 +157,10 @@ public int getSlotLimit(int slot) { protected void onLoad() { onFilterSlotChange(false); } + + @Override + protected void onContentsChanged(int slot) { + onFilterSlotChange(true); + } } } From 70c44dc4d854302ed753ca84fef6723aec027780 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jan 2024 16:40:18 -0700 Subject: [PATCH 140/260] remove onMatched replace with MatchResult (again) rename some methods --- .../gregtech/common/covers/CoverConveyor.java | 86 ++++++++----------- .../common/covers/CoverItemFilter.java | 6 +- .../common/covers/CoverItemVoiding.java | 4 +- .../covers/CoverItemVoidingAdvanced.java | 10 +-- .../detector/CoverDetectorItemAdvanced.java | 2 +- .../covers/filter/BaseFilterContainer.java | 14 +-- .../gregtech/common/covers/filter/Filter.java | 9 +- .../common/covers/filter/FluidFilter.java | 19 +--- .../common/covers/filter/ItemFilter.java | 15 +--- .../covers/filter/ItemFilterWrapper.java | 2 +- .../common/covers/filter/MatchResult.java | 25 ++++++ .../filter/OreDictionaryItemFilter.java | 6 +- .../covers/filter/SimpleFluidFilter.java | 10 +-- .../covers/filter/SimpleItemFilter.java | 4 +- .../common/covers/filter/SmartItemFilter.java | 4 +- .../electric/MetaTileEntityItemCollector.java | 2 +- .../pipelike/itempipe/net/ItemNetHandler.java | 34 ++++---- 17 files changed, 115 insertions(+), 137 deletions(-) create mode 100644 src/main/java/gregtech/common/covers/filter/MatchResult.java diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 486d16c7290..77fb21181a9 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -1,7 +1,5 @@ package gregtech.common.covers; -import com.cleanroommc.modularui.value.sync.StringSyncValue; - import gregtech.api.GTValues; import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; @@ -28,8 +26,6 @@ import gregtech.common.covers.filter.ItemFilterContainer; import gregtech.common.pipelike.itempipe.tile.TileEntityItemPipe; -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; - import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -63,23 +59,22 @@ import com.cleanroommc.modularui.value.sync.EnumSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.IntSyncValue; +import com.cleanroommc.modularui.value.sync.StringSyncValue; import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widgets.ButtonWidget; import com.cleanroommc.modularui.widgets.layout.Column; import com.cleanroommc.modularui.widgets.layout.Row; import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet; import org.jetbrains.annotations.NotNull; import java.util.Collections; import java.util.Map; import java.util.Set; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; public class CoverConveyor extends CoverBase implements CoverWithUI, ITickable, IControllable { @@ -304,13 +299,9 @@ protected int moveInventoryItems(IItemHandler sourceInventory, IItemHandler targ continue; } - AtomicBoolean matchResult = new AtomicBoolean(true); - AtomicInteger matchSlotIndex = new AtomicInteger(-1); - itemFilterContainer.onMatch(itemStack, (matched, match, matchedSlot) -> { - matchResult.set(matched); - matchSlotIndex.set(matchedSlot); - }); - if (!matchResult.get() || !itemInfos.containsKey(matchSlotIndex.get())) { + var matchResult = itemFilterContainer.match(itemStack); + int matchSlotIndex = matchResult.getFilterIndex(); + if (!matchResult.isMatched() || !itemInfos.containsKey(matchSlotIndex)) { continue; } @@ -355,11 +346,8 @@ protected int moveInventoryItems(IItemHandler sourceInventory, IItemHandler targ continue; } - AtomicBoolean didMatch = new AtomicBoolean(true); - itemFilterContainer.onMatch(sourceStack, (matched, match, matchedSlot) -> { - didMatch.set(matched); - }); - if (!didMatch.get()) continue; + var result = itemFilterContainer.match(sourceStack); + if (!result.isMatched()) continue; ItemStack remainder = GTTransferUtils.insertItem(targetInventory, sourceStack, true); int amountToInsert = sourceStack.getCount() - remainder.getCount(); @@ -417,20 +405,19 @@ protected Map countInventoryItemsByType(@NotNull IItemH continue; } - int finalSrcIndex = srcIndex; - itemFilterContainer.onMatch(itemStack, (matched, match, matchedSlot) -> { - if (!matched) return; - if (!result.containsKey(itemStack)) { - TypeItemInfo itemInfo = new TypeItemInfo(itemStack.copy(), matchedSlot, new IntArrayList(), 0); - itemInfo.totalCount += itemStack.getCount(); - itemInfo.slots.add(finalSrcIndex); - result.put(itemStack.copy(), itemInfo); - } else { - TypeItemInfo itemInfo = result.get(itemStack); - itemInfo.totalCount += itemStack.getCount(); - itemInfo.slots.add(finalSrcIndex); - } - }); + var matchResult = itemFilterContainer.match(itemStack); + if (!matchResult.isMatched()) continue; + + if (!result.containsKey(itemStack)) { + TypeItemInfo itemInfo = new TypeItemInfo(itemStack.copy(), matchResult.getFilterIndex(), new IntArrayList(), 0); + itemInfo.totalCount += itemStack.getCount(); + itemInfo.slots.add(srcIndex); + result.put(itemStack.copy(), itemInfo); + } else { + TypeItemInfo itemInfo = result.get(itemStack); + itemInfo.totalCount += itemStack.getCount(); + itemInfo.slots.add(srcIndex); + } } return result; } @@ -444,20 +431,21 @@ protected Map countInventoryItemsByMatchSlot(@NotNull II continue; } - itemFilterContainer.onMatch(itemStack, (matched, match, matchedSlot) -> { - if (!matched) return; - if (!result.containsKey(matchedSlot)) { - GroupItemInfo itemInfo = new GroupItemInfo(matchedSlot, - new ObjectOpenCustomHashSet<>(ItemStackHashStrategy.comparingAllButCount()), 0); - itemInfo.itemStackTypes.add(itemStack.copy()); - itemInfo.totalCount += itemStack.getCount(); - result.put(matchedSlot, itemInfo); - } else { - GroupItemInfo itemInfo = result.get(matchedSlot); - itemInfo.itemStackTypes.add(itemStack.copy()); - itemInfo.totalCount += itemStack.getCount(); - } - }); + var matchResult = itemFilterContainer.match(itemStack); + if (!matchResult.isMatched()) continue; + int matchedSlot = matchResult.getFilterIndex(); + + if (!result.containsKey(matchedSlot)) { + GroupItemInfo itemInfo = new GroupItemInfo(matchedSlot, + new ObjectOpenCustomHashSet<>(ItemStackHashStrategy.comparingAllButCount()), 0); + itemInfo.itemStackTypes.add(itemStack.copy()); + itemInfo.totalCount += itemStack.getCount(); + result.put(matchedSlot, itemInfo); + } else { + GroupItemInfo itemInfo = result.get(matchedSlot); + itemInfo.itemStackTypes.add(itemStack.copy()); + itemInfo.totalCount += itemStack.getCount(); + } } return result; @@ -775,7 +763,7 @@ public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate return stack; } if (manualImportExportMode == ManualImportExportMode.FILTERED && - !itemFilterContainer.testItemStack(stack)) { + !itemFilterContainer.test(stack)) { return stack; } return super.insertItem(slot, stack, simulate); @@ -789,7 +777,7 @@ public ItemStack extractItem(int slot, int amount, boolean simulate) { } if (manualImportExportMode == ManualImportExportMode.FILTERED) { ItemStack result = super.extractItem(slot, amount, true); - if (result.isEmpty() || !itemFilterContainer.testItemStack(result)) { + if (result.isEmpty() || !itemFilterContainer.test(result)) { return ItemStack.EMPTY; } return simulate ? result : super.extractItem(slot, amount, false); diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index f7a0bf80495..a77551ca3b0 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -124,7 +124,7 @@ public boolean canPipePassThrough() { } public boolean testItemStack(ItemStack stack) { - return itemFilter.testItemStack(stack); + return itemFilter.test(stack); } @Override @@ -213,7 +213,7 @@ public ItemHandlerFiltered(IItemHandler delegate) { @NotNull @Override public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate) { - if (getFilterMode() == ItemFilterMode.FILTER_EXTRACT || !itemFilter.testItemStack(stack)) { + if (getFilterMode() == ItemFilterMode.FILTER_EXTRACT || !itemFilter.test(stack)) { return stack; } return super.insertItem(slot, stack, simulate); @@ -224,7 +224,7 @@ public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate public ItemStack extractItem(int slot, int amount, boolean simulate) { if (getFilterMode() != ItemFilterMode.FILTER_INSERT) { ItemStack result = super.extractItem(slot, amount, true); - if (result.isEmpty() || !itemFilter.testItemStack(result)) { + if (result.isEmpty() || !itemFilter.test(result)) { return ItemStack.EMPTY; } return simulate ? result : super.extractItem(slot, amount, false); diff --git a/src/main/java/gregtech/common/covers/CoverItemVoiding.java b/src/main/java/gregtech/common/covers/CoverItemVoiding.java index 7ee6f9f13d3..d6e2a548a1a 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoiding.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoiding.java @@ -70,7 +70,7 @@ void voidAny(IItemHandler myItemHandler) { if (sourceStack.isEmpty()) { continue; } - if (!itemFilterContainer.testItemStack(sourceStack)) { + if (!itemFilterContainer.test(sourceStack)) { continue; } myItemHandler.extractItem(srcIndex, Integer.MAX_VALUE, false); @@ -179,7 +179,7 @@ public ItemStack getStackInSlot(int slot) { @NotNull @Override public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate) { - if (!itemFilterContainer.testItemStack(stack)) { + if (!itemFilterContainer.test(stack)) { return stack; } return ItemStack.EMPTY; diff --git a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java index ec61ac0d480..37851648ae5 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java @@ -42,7 +42,6 @@ import org.jetbrains.annotations.NotNull; import java.util.Map; -import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; public class CoverItemVoidingAdvanced extends CoverItemVoiding { @@ -78,13 +77,8 @@ protected void voidOverflow(IItemHandler myItemHandler) { if (!getItemFilterContainer().hasFilter()) { itemToVoidAmount = typeItemInfo.totalCount - itemFilterContainer.getTransferSize(); } else { - AtomicInteger atomicInt = new AtomicInteger(itemToVoidAmount); - itemFilterContainer.onMatch(typeItemInfo.itemStack, (matched, match, matchedSlot) -> { - if (matched) { - atomicInt.set(typeItemInfo.totalCount - itemFilterContainer.getTransferLimit(matchedSlot)); - } - }); - itemToVoidAmount = atomicInt.get(); + var result = itemFilterContainer.match(typeItemInfo.itemStack); + itemToVoidAmount = result.getMatchedStack().getCount(); } if (itemToVoidAmount <= 0) { diff --git a/src/main/java/gregtech/common/covers/detector/CoverDetectorItemAdvanced.java b/src/main/java/gregtech/common/covers/detector/CoverDetectorItemAdvanced.java index 66d33172900..c3c59a6a8de 100644 --- a/src/main/java/gregtech/common/covers/detector/CoverDetectorItemAdvanced.java +++ b/src/main/java/gregtech/common/covers/detector/CoverDetectorItemAdvanced.java @@ -151,7 +151,7 @@ public void update() { int storedItems = 0; for (int i = 0; i < itemHandler.getSlots(); i++) { - if (itemFilter.testItemStack(itemHandler.getStackInSlot(i))) + if (itemFilter.test(itemHandler.getStackInSlot(i))) storedItems += itemHandler.getStackInSlot(i).getCount(); } diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 07b0d0367f5..a047f920022 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -77,10 +77,17 @@ public int getTransferLimit(int slotIndex) { return currentItemFilter.getTransferLimit(slotIndex, getTransferSize()); } - public boolean testItemStack(R toTest) { + public boolean test(R toTest) { return !hasFilter() || getFilter().test(toTest); } + public MatchResult match(R toMatch) { + if (!hasFilter()) + return new MatchResult<>(true, toMatch, -1); + + return getFilter().match(toMatch); + } + public int getTransferLimit(R stack) { if (isBlacklistFilter() || currentItemFilter == null) { return getTransferSize(); @@ -116,11 +123,6 @@ public boolean isBlacklistFilter() { return hasFilter() && getFilter().isBlacklistFilter(); } - public void onMatch(R toTest, Filter.OnMatch onMatch) { - this.getFilter().setOnMatched(onMatch); - this.getFilter().match(toTest); - } - /** Uses Cleanroom MUI*/ public abstract IWidget initUI(ModularPanel main, GuiSyncManager manager); diff --git a/src/main/java/gregtech/common/covers/filter/Filter.java b/src/main/java/gregtech/common/covers/filter/Filter.java index 4d9f5d3f420..30a05395a17 100644 --- a/src/main/java/gregtech/common/covers/filter/Filter.java +++ b/src/main/java/gregtech/common/covers/filter/Filter.java @@ -19,7 +19,7 @@ public interface Filter { @NotNull Widget createWidgets(GuiSyncManager syncManager); - void match(T toMatch); + MatchResult match(T toMatch); boolean test(T toTest); @@ -27,8 +27,6 @@ public interface Filter { void markDirty(); - void setOnMatched(OnMatch onMatch); - int getMaxTransferSize(); void setMaxTransferSize(int maxTransferSize); @@ -42,9 +40,4 @@ public interface Filter { boolean isBlacklistFilter(); void setBlacklistFilter(boolean blacklistFilter); - - @FunctionalInterface - interface OnMatch { - void onMatch(boolean matched, T match, int matchedSlot); - } } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index 01c2c008d73..12fdadcec45 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -29,27 +29,12 @@ public abstract class FluidFilter implements Filter { private IDirtyNotifiable dirtyNotifiable; - - private OnMatch onMatch = null; private BaseFluidFilterReader filterReader; protected void setFilterReader(BaseFluidFilterReader filterReader) { this.filterReader = filterReader; } - public abstract void match(FluidStack toMatch); - - public abstract boolean test(FluidStack fluidStack); - - @Override - public final void setOnMatched(OnMatch onMatch) { - this.onMatch = onMatch; - } - - protected final void onMatch(boolean matched, FluidStack stack, int index) { - if (this.onMatch != null) this.onMatch.onMatch(matched, stack, index); - } - public int getTransferLimit(FluidStack fluidStack, int transferSize) { return 0; } @@ -66,6 +51,10 @@ public int getTransferLimit(FluidStack stack) { @Deprecated public abstract void initUI(Consumer widgetGroup); + protected static MatchResult createResult(boolean matched, FluidStack fluidStack, int index) { + return new MatchResult<>(matched, fluidStack, index); + } + public @NotNull Widget createWidgets(GuiSyncManager syncManager) { var blacklist = new BooleanSyncValue(this.filterReader::isBlacklistFilter, this.filterReader::setBlacklistFilter); return new ParentWidget<>().coverChildren() diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index ce3ff5d0385..771e89fe6cb 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -23,8 +23,6 @@ public abstract class ItemFilter implements Filter { private IDirtyNotifiable dirtyNotifiable; private BaseItemFilterReader filterReader; - private OnMatch onMatch = null; - protected void setFilterReader(BaseItemFilterReader reader) { this.filterReader = reader; } @@ -94,14 +92,10 @@ public void readFromNBT(NBTTagCompound tagCompound) { markDirty(); } - public abstract void match(ItemStack itemStack); - - protected final void onMatch(boolean matched, ItemStack stack, int matchSlot) { - if (this.onMatch != null) this.onMatch.onMatch(matched, stack, matchSlot); + protected static MatchResult createResult(boolean matched, ItemStack stack, int index) { + return new MatchResult<>(matched, stack, index); } - public abstract boolean test(ItemStack toTest); - public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { this.dirtyNotifiable = dirtyNotifiable; } @@ -112,11 +106,6 @@ public final void markDirty() { } } - @Override - public void setOnMatched(OnMatch onMatch) { - this.onMatch = onMatch; - } - protected static class BaseItemFilterReader extends BaseFilterReader { protected static final String COUNT = "Count"; public BaseItemFilterReader(ItemStack container, int slots) { diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java index f6ecceb4f17..edf25e0ab27 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java @@ -46,6 +46,6 @@ public int getSlotTransferLimit(int matchSlot, int globalTransferLimit) { } public boolean testItemStack(ItemStack itemStack) { - return container.testItemStack(itemStack); + return container.test(itemStack); } } diff --git a/src/main/java/gregtech/common/covers/filter/MatchResult.java b/src/main/java/gregtech/common/covers/filter/MatchResult.java new file mode 100644 index 00000000000..e2cf2f4dacc --- /dev/null +++ b/src/main/java/gregtech/common/covers/filter/MatchResult.java @@ -0,0 +1,25 @@ +package gregtech.common.covers.filter; + +public class MatchResult { + boolean matched; + T matchedStack; + int filterIndex; + + MatchResult(boolean matched, T matchedStack, int filterIndex) { + this.matched = matched; + this.matchedStack = matchedStack; + this.filterIndex = filterIndex; + } + + public boolean isMatched() { + return matched; + } + + public T getMatchedStack() { + return matchedStack; + } + + public int getFilterIndex() { + return filterIndex; + } +} diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 17761478c22..3607ee76f76 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -41,7 +41,6 @@ import java.util.Map; import java.util.Set; import java.util.function.Consumer; -import java.util.function.Supplier; public class OreDictionaryItemFilter extends ItemFilter { @@ -250,12 +249,11 @@ protected String highlightRule(StringBuilder h) { } @Override - public void match(ItemStack itemStack) { + public MatchResult match(ItemStack itemStack) { // "wtf is this system?? i can put any non null object here and it i will work??? $arch" // not anymore :thanosdaddy: -ghzdude var match = matchesItemStack(itemStack); - this.onMatch(match, match ? itemStack.copy() : ItemStack.EMPTY, -1); -// return ItemFilter.createResult(match, -1); + return createResult(match, match ? itemStack.copy() : ItemStack.EMPTY, -1); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index d1d3a7c86c4..8c6a1c522b3 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -84,20 +84,18 @@ public ItemStack getContainerStack() { } @Override - public void match(FluidStack toMatch) { - boolean matched = false; + public MatchResult match(FluidStack toMatch) { int index = -1; - var returnable = toMatch.copy(); + FluidStack returnable = null; for (int i = 0; i < filterReader.getSlots(); i++) { var fluid = filterReader.getFluidStack(i); if (fluid != null && fluid.isFluidEqual(toMatch)) { - matched = true; index = i; - returnable.amount = fluid.amount; + returnable = fluid.copy(); break; } } - this.onMatch(matched, returnable, index); + return createResult(index != -1, returnable, index); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 21113000e3c..889e16ed651 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -44,9 +44,9 @@ public SimpleItemFilter(ItemStack stack) { } @Override - public void match(ItemStack itemStack) { + public MatchResult match(ItemStack itemStack) { int matchedSlot = itemFilterMatch(filterReader, filterReader.isIgnoreDamage(), filterReader.isIgnoreNBT(), itemStack); - this.onMatch(matchedSlot != -1, itemStack.copy(), matchedSlot); + return createResult(matchedSlot != -1, filterReader.getStackInSlot(matchedSlot), matchedSlot); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 6859d5874d7..c7a0b980325 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -68,10 +68,10 @@ public int getTransferLimit(ItemStack stack, int globalTransferLimit) { } @Override - public void match(ItemStack itemStack) { + public MatchResult match(ItemStack itemStack) { var stack = itemStack.copy(); stack.setCount(getTransferLimit(itemStack, Integer.MAX_VALUE)); - this.onMatch(stack.getCount() > 0, stack, this.getFilteringMode().ordinal()); + return createResult(stack.getCount() > 0, stack, this.getFilteringMode().ordinal()); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityItemCollector.java b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityItemCollector.java index d49fb520bf1..1128819ff6d 100644 --- a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityItemCollector.java +++ b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityItemCollector.java @@ -144,7 +144,7 @@ protected void moveItemsInEffectRange() { double distanceX = (areaCenterPos.getX() + 0.5) - entityItem.posX; double distanceZ = (areaCenterPos.getZ() + 0.5) - entityItem.posZ; double distance = MathHelper.sqrt(distanceX * distanceX + distanceZ * distanceZ); - if (!itemFilter.testItemStack(entityItem.getItem())) { + if (!itemFilter.test(entityItem.getItem())) { continue; } if (distance >= 0.7) { diff --git a/src/main/java/gregtech/common/pipelike/itempipe/net/ItemNetHandler.java b/src/main/java/gregtech/common/pipelike/itempipe/net/ItemNetHandler.java index 69c8dfa6a87..48778c15269 100644 --- a/src/main/java/gregtech/common/pipelike/itempipe/net/ItemNetHandler.java +++ b/src/main/java/gregtech/common/pipelike/itempipe/net/ItemNetHandler.java @@ -6,7 +6,11 @@ import gregtech.api.util.FacingPos; import gregtech.api.util.GTTransferUtils; import gregtech.api.util.ItemStackHashStrategy; -import gregtech.common.covers.*; +import gregtech.common.covers.CoverConveyor; +import gregtech.common.covers.CoverItemFilter; +import gregtech.common.covers.CoverRoboticArm; +import gregtech.common.covers.DistributionMode; +import gregtech.common.covers.ItemFilterMode; import gregtech.common.pipelike.itempipe.tile.TileEntityItemPipe; import net.minecraft.item.ItemStack; @@ -26,8 +30,6 @@ import java.util.Comparator; import java.util.Iterator; import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; public class ItemNetHandler implements IItemHandler { @@ -366,18 +368,18 @@ public Cover getCoverOnNeighbour(TileEntityItemPipe itemPipe, EnumFacing facing) public ItemStack insertOverRobotArm(IItemHandler handler, CoverRoboticArm arm, ItemStack stack, boolean simulate, int allowed, boolean ignoreLimit) { - AtomicInteger atomicInt = new AtomicInteger(); - AtomicBoolean atomicBool = new AtomicBoolean(false); - arm.getItemFilterContainer().onMatch(stack, (matched, match, matchedSlot) -> { - if (matched && matchedSlot > 0) { - atomicInt.set(arm.getItemFilterContainer().getTransferLimit(matchedSlot)); - atomicBool.set(true); - } else { - atomicInt.set(arm.getItemFilterContainer().getTransferSize()); - } - }); - int count, rate = atomicInt.get(); - boolean isStackSpecific = atomicBool.get(); + + var matched = arm.getItemFilterContainer().match(stack); + boolean isStackSpecific = false; + int rate, count; + + if (matched.isMatched()) { + int index = matched.getFilterIndex(); + rate = arm.getItemFilterContainer().getTransferLimit(index); + isStackSpecific = true; + } else { + rate = arm.getItemFilterContainer().getTransferSize(); + } switch (arm.getTransferMode()) { case TRANSFER_ANY: @@ -411,7 +413,7 @@ public static int countStack(IItemHandler handler, ItemStack stack, CoverRobotic ItemStack slot = handler.getStackInSlot(i); if (slot.isEmpty()) continue; if (isStackSpecific ? ItemStackHashStrategy.comparingAllButCount().equals(stack, slot) : - arm.getItemFilterContainer().testItemStack(slot)) { + arm.getItemFilterContainer().test(slot)) { count += slot.getCount(); } } From c19ab814cb75bb5303665bb3c9e2a71d2692dac4 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jan 2024 16:43:45 -0700 Subject: [PATCH 141/260] sbobless --- .../api/gui/widgets/PhantomFluidWidget.java | 1 - .../java/gregtech/api/mui/GTGuiTextures.java | 10 +- .../api/mui/slot/PhantomItemSlot.java | 6 +- .../common/covers/CoverBehaviors.java | 4 - .../gregtech/common/covers/CoverConveyor.java | 12 +- .../common/covers/CoverEnderFluidLink.java | 48 +++---- .../common/covers/CoverFluidFilter.java | 22 ++- .../common/covers/CoverFluidRegulator.java | 134 +++++++++--------- .../common/covers/CoverFluidVoiding.java | 27 ++-- .../covers/CoverFluidVoidingAdvanced.java | 8 +- .../common/covers/CoverItemFilter.java | 2 +- .../covers/CoverItemVoidingAdvanced.java | 3 +- .../gregtech/common/covers/CoverPump.java | 81 ++++++----- .../common/covers/CoverRoboticArm.java | 73 +++++----- .../covers/filter/BaseFilterContainer.java | 6 +- .../gregtech/common/covers/filter/Filter.java | 9 +- .../covers/filter/FilterTypeRegistry.java | 12 +- .../common/covers/filter/FluidFilter.java | 19 ++- .../covers/filter/FluidFilterContainer.java | 22 +-- .../covers/filter/FluidFilterWrapper.java | 12 -- .../common/covers/filter/ItemFilter.java | 5 +- .../covers/filter/ItemFilterContainer.java | 30 ++-- .../covers/filter/ItemFilterWrapper.java | 1 + .../common/covers/filter/MatchResult.java | 1 + .../filter/OreDictionaryItemFilter.java | 16 +-- .../covers/filter/SimpleFluidFilter.java | 37 ++--- .../covers/filter/SimpleItemFilter.java | 27 ++-- .../common/covers/filter/SmartItemFilter.java | 13 +- .../covers/filter/WidgetGroupFluidFilter.java | 10 +- .../covers/filter/WidgetGroupItemFilter.java | 2 +- .../filter/readers/BaseFilterReader.java | 4 +- .../orefilter/ItemOreFilterTestSlot.java | 66 +++++---- .../widget/orefilter/OreFilterTestSlot.java | 27 ++-- .../behaviors/filter/BaseFilterUIManager.java | 15 +- .../filter/OreDictFilterUIManager.java | 7 +- .../filter/SimpleFilterUIManager.java | 2 +- .../filter/SimpleFluidFilterUIManager.java | 4 +- .../pipelike/itempipe/net/ItemNetHandler.java | 1 - .../provider/CoverInfoProvider.java | 8 +- 39 files changed, 394 insertions(+), 393 deletions(-) diff --git a/src/main/java/gregtech/api/gui/widgets/PhantomFluidWidget.java b/src/main/java/gregtech/api/gui/widgets/PhantomFluidWidget.java index 43212ebfae0..7fed3591548 100644 --- a/src/main/java/gregtech/api/gui/widgets/PhantomFluidWidget.java +++ b/src/main/java/gregtech/api/gui/widgets/PhantomFluidWidget.java @@ -13,7 +13,6 @@ import gregtech.api.util.TextFormattingUtil; import gregtech.client.utils.RenderUtil; import gregtech.client.utils.TooltipHelper; -import gregtech.common.covers.filter.SimpleFluidFilter; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; diff --git a/src/main/java/gregtech/api/mui/GTGuiTextures.java b/src/main/java/gregtech/api/mui/GTGuiTextures.java index 7861cf1914e..2364530c391 100644 --- a/src/main/java/gregtech/api/mui/GTGuiTextures.java +++ b/src/main/java/gregtech/api/mui/GTGuiTextures.java @@ -157,11 +157,12 @@ public static class IDs { public static final UITexture[] BUTTON_BLACKLIST = slice("textures/gui/widget/button_blacklist.png", 16, 32, 16, 16, true); public static final UITexture[] BUTTON_IGNORE_DAMAGE = slice("textures/gui/widget/button_filter_damage.png", - 16, 32, 16, 16,true); + 16, 32, 16, 16, true); public static final UITexture[] BUTTON_IGNORE_NBT = slice("textures/gui/widget/button_filter_nbt.png", - 16, 32, 16, 16,true); + 16, 32, 16, 16, true); - public static final UITexture[] BUTTON_CASE_SENSITIVE = slice("textures/gui/widget/ore_filter/button_case_sensitive.png", + public static final UITexture[] BUTTON_CASE_SENSITIVE = slice( + "textures/gui/widget/ore_filter/button_case_sensitive.png", 16, 32, 16, 16, true); public static final UITexture[] BUTTON_MATCH_ALL = slice("textures/gui/widget/ore_filter/button_match_all.png", @@ -484,7 +485,8 @@ private static UITexture fullImage(String path, boolean canApplyTheme) { } @SuppressWarnings("SameParameterValue") - private static UITexture[] slice(String path, int imageWidth, int imageHeight, int sliceWidth, int sliceHeight, boolean canApplyTheme) { + private static UITexture[] slice(String path, int imageWidth, int imageHeight, int sliceWidth, int sliceHeight, + boolean canApplyTheme) { if (imageWidth % sliceWidth != 0 || imageHeight % sliceHeight != 0) throw new IllegalArgumentException("Slice height and slice width must divide the image evenly!"); diff --git a/src/main/java/gregtech/api/mui/slot/PhantomItemSlot.java b/src/main/java/gregtech/api/mui/slot/PhantomItemSlot.java index 77a3999ed82..cf5e2d428c9 100644 --- a/src/main/java/gregtech/api/mui/slot/PhantomItemSlot.java +++ b/src/main/java/gregtech/api/mui/slot/PhantomItemSlot.java @@ -1,13 +1,15 @@ package gregtech.api.mui.slot; -import com.cleanroommc.modularui.widgets.slot.ModularSlot; - import net.minecraftforge.items.IItemHandler; +import com.cleanroommc.modularui.widgets.slot.ModularSlot; + import java.util.function.Supplier; public class PhantomItemSlot extends ModularSlot { + protected Supplier maxStackSizer; + public PhantomItemSlot(IItemHandler itemHandler, int index, Supplier maxStackSizer) { super(itemHandler, index); this.maxStackSizer = maxStackSizer; diff --git a/src/main/java/gregtech/common/covers/CoverBehaviors.java b/src/main/java/gregtech/common/covers/CoverBehaviors.java index 1160cc20155..78413327163 100644 --- a/src/main/java/gregtech/common/covers/CoverBehaviors.java +++ b/src/main/java/gregtech/common/covers/CoverBehaviors.java @@ -8,10 +8,6 @@ import gregtech.api.util.GTLog; import gregtech.client.renderer.texture.Textures; import gregtech.common.covers.detector.*; -import gregtech.common.covers.filter.OreDictionaryItemFilter; -import gregtech.common.covers.filter.SimpleFluidFilter; -import gregtech.common.covers.filter.SimpleItemFilter; -import gregtech.common.covers.filter.SmartItemFilter; import gregtech.common.items.MetaItems; import gregtech.common.items.behaviors.CoverDigitalInterfaceWirelessPlaceBehaviour; diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 77fb21181a9..b371e1d2e0b 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -204,7 +204,7 @@ protected int doTransferItemsByGroup(IItemHandler itemHandler, IItemHandler myIt } protected Map doCountDestinationInventoryItemsByMatchIndex(IItemHandler itemHandler, - IItemHandler myItemHandler) { + IItemHandler myItemHandler) { if (conveyorMode == ConveyorMode.IMPORT) { return countInventoryItemsByMatchSlot(myItemHandler); } else if (conveyorMode == ConveyorMode.EXPORT) { @@ -409,7 +409,8 @@ protected Map countInventoryItemsByType(@NotNull IItemH if (!matchResult.isMatched()) continue; if (!result.containsKey(itemStack)) { - TypeItemInfo itemInfo = new TypeItemInfo(itemStack.copy(), matchResult.getFilterIndex(), new IntArrayList(), 0); + TypeItemInfo itemInfo = new TypeItemInfo(itemStack.copy(), matchResult.getFilterIndex(), + new IntArrayList(), 0); itemInfo.totalCount += itemStack.getCount(); itemInfo.slots.add(srcIndex); result.put(itemStack.copy(), itemInfo); @@ -515,7 +516,7 @@ public boolean usesMui2() { @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { - var panel = GTGuis.createPanel(this, 176,192); + var panel = GTGuis.createPanel(this, 176, 192); getItemFilterContainer().setMaxTransferSize(getMaxStackSize()); @@ -537,7 +538,8 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g IntSyncValue throughput = new IntSyncValue(this::getTransferRate, this::setTransferRate); throughput.updateCacheFromSource(true); - StringSyncValue formattedThroughput = new StringSyncValue(throughput::getStringValue, throughput::setStringValue); + StringSyncValue formattedThroughput = new StringSyncValue(throughput::getStringValue, + throughput::setStringValue); guiSyncManager.syncValue("manual_io", manualIOmode); guiSyncManager.syncValue("conveyor_mode", conveyorMode); @@ -571,7 +573,6 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g }) .onUpdateListener(w -> w.overlay(createAdjustOverlay(true))))); - if (createFilterRow()) column.child(getItemFilterContainer().initUI(mainPanel, guiSyncManager)); @@ -590,7 +591,6 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g .build()); return column; - } protected boolean createThroughputRow() { diff --git a/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java b/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java index ee416450f5a..ab155cd0755 100644 --- a/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java +++ b/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java @@ -1,13 +1,5 @@ package gregtech.common.covers; -import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.drawable.DynamicDrawable; -import com.cleanroommc.modularui.utils.Color; -import com.cleanroommc.modularui.value.sync.EnumSyncValue; -import com.cleanroommc.modularui.value.sync.FluidSlotSyncHandler; -import com.cleanroommc.modularui.widgets.FluidSlot; -import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; - import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IControllable; import gregtech.api.cover.CoverBase; @@ -43,15 +35,22 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.drawable.DynamicDrawable; import com.cleanroommc.modularui.drawable.Rectangle; import com.cleanroommc.modularui.factory.SidedPosGuiData; 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.EnumSyncValue; +import com.cleanroommc.modularui.value.sync.FluidSlotSyncHandler; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.StringSyncValue; +import com.cleanroommc.modularui.widgets.FluidSlot; import com.cleanroommc.modularui.widgets.ToggleButton; import com.cleanroommc.modularui.widgets.layout.Column; import com.cleanroommc.modularui.widgets.layout.Row; +import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -168,9 +167,10 @@ public void openUI(EntityPlayerMP player) { public ModularUI createUI(EntityPlayer player) { gregtech.api.gui.widgets.WidgetGroup widgetGroup = new gregtech.api.gui.widgets.WidgetGroup(); widgetGroup.addWidget(new gregtech.api.gui.widgets.LabelWidget(10, 5, "cover.ender_fluid_link.title")); - widgetGroup.addWidget(new gregtech.api.gui.widgets.ToggleButtonWidget(12, 18, 18, 18, GuiTextures.BUTTON_PUBLIC_PRIVATE, - this::isPrivate, this::setPrivate) - .setTooltipText("cover.ender_fluid_link.private.tooltip")); + widgetGroup.addWidget( + new gregtech.api.gui.widgets.ToggleButtonWidget(12, 18, 18, 18, GuiTextures.BUTTON_PUBLIC_PRIVATE, + this::isPrivate, this::setPrivate) + .setTooltipText("cover.ender_fluid_link.private.tooltip")); widgetGroup.addWidget(new gregtech.api.gui.widgets.SyncableColorRectWidget(35, 18, 18, 18, () -> color) .setBorderWidth(1) .drawCheckerboard(4, 4)); @@ -204,7 +204,7 @@ public boolean usesMui2() { @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { - var panel = GTGuis.createPanel(this, 176,192); + var panel = GTGuis.createPanel(this, 176, 192); getFluidFilterContainer().setMaxTransferSize(1000); getFluidFilterContainer().setBucketOnly(true); @@ -236,19 +236,17 @@ protected Column createWidgets(ModularPanel panel, GuiSyncManager syncManager) { .coverChildrenHeight() .child(new ToggleButton() .tooltip(tooltip -> tooltip.setAutoUpdate(true)) - .tooltipBuilder(tooltip -> - tooltip.addLine(IKey.lang(this.isPrivate ? - "cover.ender_fluid_link.private.tooltip.enabled" : - "cover.ender_fluid_link.private.tooltip.disabled"))) + .tooltipBuilder(tooltip -> tooltip.addLine(IKey.lang(this.isPrivate ? + "cover.ender_fluid_link.private.tooltip.enabled" : + "cover.ender_fluid_link.private.tooltip.disabled"))) .marginRight(2) .value(isPrivate)) - .child(new DynamicDrawable(() -> - new Rectangle() - .setColor(this.color) - .asIcon().size(16)) - .asWidget() - .background(GTGuiTextures.SLOT) - .size(18).marginRight(2)) + .child(new DynamicDrawable(() -> new Rectangle() + .setColor(this.color) + .asIcon().size(16)) + .asWidget() + .background(GTGuiTextures.SLOT) + .size(18).marginRight(2)) .child(new TextFieldWidget().height(18) .value(color) .setValidator(s -> { @@ -266,8 +264,8 @@ protected Column createWidgets(ModularPanel panel, GuiSyncManager syncManager) { .child(new ToggleButton() .value(ioEnabled) .overlay(IKey.dynamic(() -> IKey.lang(this.ioEnabled ? - "behaviour.soft_hammer.enabled" : - "behaviour.soft_hammer.disabled").get()) + "behaviour.soft_hammer.enabled" : + "behaviour.soft_hammer.disabled").get()) .color(Color.WHITE.darker(1))) .widthRel(0.6f) .left(0))) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 64dc5dc5ca4..95f9423fe58 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -1,12 +1,5 @@ package gregtech.common.covers; -import com.cleanroommc.modularui.drawable.Rectangle; - -import com.cleanroommc.modularui.utils.Alignment; -import com.cleanroommc.modularui.value.sync.EnumSyncValue; - -import com.cleanroommc.modularui.widgets.layout.Column; - import gregtech.api.capability.impl.FluidHandlerDelegate; import gregtech.api.cover.CoverBase; import gregtech.api.cover.CoverDefinition; @@ -42,10 +35,14 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; +import com.cleanroommc.modularui.drawable.Rectangle; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Alignment; +import com.cleanroommc.modularui.value.sync.EnumSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.widgets.SlotGroupWidget; +import com.cleanroommc.modularui.widgets.layout.Column; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Unmodifiable; @@ -100,7 +97,8 @@ public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { if (packetBuffer.readBoolean()) { try { - this.fluidFilterContainer.setFilter(FilterTypeRegistry.getFluidFilterForStack(packetBuffer.readItemStack())); + this.fluidFilterContainer + .setFilter(FilterTypeRegistry.getFluidFilterForStack(packetBuffer.readItemStack())); } catch (IOException e) { throw new RuntimeException(e); } @@ -163,7 +161,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .child(new EnumRowBuilder<>(FluidFilterMode.class) .value(filteringMode) .lang("Filter Mode") -// .overlay() todo fluid filter overlays + // .overlay() todo fluid filter overlays .build()) .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() .height(1).widthRel(0.95f).margin(0, 4)) @@ -200,9 +198,9 @@ public T getCapability(@NotNull Capability capability, @Nullable T defaul public void writeToNBT(@NotNull NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); tagCompound.setInteger("FilterMode", this.filterMode.ordinal()); -// tagCompound.setBoolean("IsBlacklist", this.fluidFilter.isBlacklistFilter()); -// NBTTagCompound filterComponent = new NBTTagCompound(); -// this.fluidFilter.getFluidFilter().writeToNBT(filterComponent); + // tagCompound.setBoolean("IsBlacklist", this.fluidFilter.isBlacklistFilter()); + // NBTTagCompound filterComponent = new NBTTagCompound(); + // this.fluidFilter.getFluidFilter().writeToNBT(filterComponent); tagCompound.setTag("Filter", getFluidFilter().getContainerStack().serializeNBT()); } diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 99d374a1923..5f4eaf07a80 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -1,7 +1,5 @@ package gregtech.common.covers; -import com.cleanroommc.modularui.api.drawable.IKey; - import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; import gregtech.api.mui.GTGuiTextures; @@ -20,6 +18,7 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.utils.Color; @@ -65,7 +64,8 @@ protected int doTransferFluidsInternal(IFluidHandler myFluidHandler, IFluidHandl return switch (transferMode) { case TRANSFER_ANY -> GTTransferUtils.transferFluids(sourceHandler, destHandler, transferLimit, fluidFilterContainer::testFluidStack); - case KEEP_EXACT -> doKeepExact(transferLimit, sourceHandler, destHandler, fluidFilterContainer::testFluidStack, + case KEEP_EXACT -> doKeepExact(transferLimit, sourceHandler, destHandler, + fluidFilterContainer::testFluidStack, this.fluidFilterContainer.getTransferSize()); case TRANSFER_EXACT -> doTransferExact(transferLimit, sourceHandler, destHandler, fluidFilterContainer::testFluidStack, this.fluidFilterContainer.getTransferSize()); @@ -241,72 +241,72 @@ private boolean shouldDisplayAmountSlider() { return fluidFilterContainer.showGlobalTransferLimitSlider(); } -// @Override -// public void setBucketMode(BucketMode bucketMode) { -// super.setBucketMode(bucketMode); -// if (this.bucketMode == BucketMode.BUCKET) { -// setTransferAmount(transferAmount / 1000 * 1000); -// } -// } -// -// private void adjustTransferSize(int amount) { -// if (bucketMode == BucketMode.BUCKET) -// amount *= 1000; -// -// setTransferAmount(this.transferAmount + amount); -// } -// -// private void setTransferAmount(int transferAmount) { -// this.transferAmount = MathHelper.clamp(transferAmount, 0, getMaxTransferSize()); -// markDirty(); -// } + // @Override + // public void setBucketMode(BucketMode bucketMode) { + // super.setBucketMode(bucketMode); + // if (this.bucketMode == BucketMode.BUCKET) { + // setTransferAmount(transferAmount / 1000 * 1000); + // } + // } + // + // private void adjustTransferSize(int amount) { + // if (bucketMode == BucketMode.BUCKET) + // amount *= 1000; + // + // setTransferAmount(this.transferAmount + amount); + // } + // + // private void setTransferAmount(int transferAmount) { + // this.transferAmount = MathHelper.clamp(transferAmount, 0, getMaxTransferSize()); + // markDirty(); + // } @Override protected String getUITitle() { return "cover.fluid_regulator.title"; } -// @SuppressWarnings("UnstableApiUsage") -// @Override -// protected ModularUI buildUI(ModularUI.Builder builder, EntityPlayer player) { -// WidgetGroup filterGroup = new WidgetGroup(); -// filterGroup.addWidget(new CycleButtonWidget(92, 43, 75, 18, -// TransferMode.class, this::getTransferMode, this::setTransferMode) -// .setTooltipHoverString("cover.fluid_regulator.transfer_mode.description")); -// -// ServerWidgetGroup stackSizeGroup = new ServerWidgetGroup(this::shouldDisplayAmountSlider); -// stackSizeGroup.addWidget(new ImageWidget(110, 64, 38, 18, GuiTextures.DISPLAY)); -// -// stackSizeGroup.addWidget(new IncrementButtonWidget(148, 64, 18, 18, 1, 10, 100, 1000, this::adjustTransferSize) -// .setDefaultTooltip() -// .setTextScale(0.7f) -// .setShouldClientCallback(false)); -// stackSizeGroup -// .addWidget(new IncrementButtonWidget(92, 64, 18, 18, -1, -10, -100, -1000, this::adjustTransferSize) -// .setDefaultTooltip() -// .setTextScale(0.7f) -// .setShouldClientCallback(false)); -// -// stackSizeGroup.addWidget(new TextFieldWidget2(111, 70, 36, 11, this::getTransferAmountString, val -> { -// if (val != null && !val.isEmpty()) { -// int amount = Integer.parseInt(val); -// if (this.bucketMode == BucketMode.BUCKET) { -// amount = IntMath.saturatedMultiply(amount, 1000); -// } -// setTransferAmount(amount); -// } -// }) -// .setCentered(true) -// .setNumbersOnly(1, -// transferMode == TransferMode.TRANSFER_EXACT ? maxFluidTransferRate : Integer.MAX_VALUE) -// .setMaxLength(10) -// .setScale(0.6f)); -// -// stackSizeGroup -// .addWidget(new SimpleTextWidget(129, 78, "", 0xFFFFFF, () -> bucketMode.localeName).setScale(0.6f)); -// -// return super.buildUI(builder.widget(filterGroup).widget(stackSizeGroup), player); -// } + // @SuppressWarnings("UnstableApiUsage") + // @Override + // protected ModularUI buildUI(ModularUI.Builder builder, EntityPlayer player) { + // WidgetGroup filterGroup = new WidgetGroup(); + // filterGroup.addWidget(new CycleButtonWidget(92, 43, 75, 18, + // TransferMode.class, this::getTransferMode, this::setTransferMode) + // .setTooltipHoverString("cover.fluid_regulator.transfer_mode.description")); + // + // ServerWidgetGroup stackSizeGroup = new ServerWidgetGroup(this::shouldDisplayAmountSlider); + // stackSizeGroup.addWidget(new ImageWidget(110, 64, 38, 18, GuiTextures.DISPLAY)); + // + // stackSizeGroup.addWidget(new IncrementButtonWidget(148, 64, 18, 18, 1, 10, 100, 1000, this::adjustTransferSize) + // .setDefaultTooltip() + // .setTextScale(0.7f) + // .setShouldClientCallback(false)); + // stackSizeGroup + // .addWidget(new IncrementButtonWidget(92, 64, 18, 18, -1, -10, -100, -1000, this::adjustTransferSize) + // .setDefaultTooltip() + // .setTextScale(0.7f) + // .setShouldClientCallback(false)); + // + // stackSizeGroup.addWidget(new TextFieldWidget2(111, 70, 36, 11, this::getTransferAmountString, val -> { + // if (val != null && !val.isEmpty()) { + // int amount = Integer.parseInt(val); + // if (this.bucketMode == BucketMode.BUCKET) { + // amount = IntMath.saturatedMultiply(amount, 1000); + // } + // setTransferAmount(amount); + // } + // }) + // .setCentered(true) + // .setNumbersOnly(1, + // transferMode == TransferMode.TRANSFER_EXACT ? maxFluidTransferRate : Integer.MAX_VALUE) + // .setMaxLength(10) + // .setScale(0.6f)); + // + // stackSizeGroup + // .addWidget(new SimpleTextWidget(129, 78, "", 0xFFFFFF, () -> bucketMode.localeName).setScale(0.6f)); + // + // return super.buildUI(builder.widget(filterGroup).widget(stackSizeGroup), player); + // } @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { @@ -356,7 +356,7 @@ public int getMaxTransferRate() { public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.writeInitialSyncData(packetBuffer); packetBuffer.writeEnumValue(this.transferMode); -// packetBuffer.writeInt(this.transferAmount); + // packetBuffer.writeInt(this.transferAmount); } @Override @@ -364,14 +364,14 @@ public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.readInitialSyncData(packetBuffer); this.transferMode = packetBuffer.readEnumValue(TransferMode.class); getFluidFilterContainer().setBucketOnly(this.transferMode == TransferMode.TRANSFER_ANY); -// this.transferAmount = packetBuffer.readInt(); + // this.transferAmount = packetBuffer.readInt(); } @Override public void writeToNBT(@NotNull NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); tagCompound.setInteger("TransferMode", transferMode.ordinal()); -// tagCompound.setInteger("TransferAmount", transferAmount); + // tagCompound.setInteger("TransferAmount", transferAmount); tagCompound.setTag("filterv2", new NBTTagCompound()); } @@ -386,7 +386,7 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { this.fluidFilterContainer.getFilter().configureFilterTanks(tagCompound.getInteger("TransferAmount")); } } -// this.transferAmount = tagCompound.getInteger("TransferAmount"); + // this.transferAmount = tagCompound.getInteger("TransferAmount"); this.fluidFilterContainer.setTransferSize(tagCompound.getInteger("TransferAmount")); } diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoiding.java b/src/main/java/gregtech/common/covers/CoverFluidVoiding.java index 26d82481470..dd0698778b1 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoiding.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoiding.java @@ -1,16 +1,5 @@ package gregtech.common.covers; -import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.factory.SidedPosGuiData; -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.GuiSyncManager; -import com.cleanroommc.modularui.widget.ParentWidget; - -import com.cleanroommc.modularui.widgets.ToggleButton; -import com.cleanroommc.modularui.widgets.layout.Row; - import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; @@ -40,6 +29,15 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.factory.SidedPosGuiData; +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.GuiSyncManager; +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widgets.ToggleButton; +import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.NotNull; public class CoverFluidVoiding extends CoverPump { @@ -67,7 +65,8 @@ protected void doTransferFluids() { if (myFluidHandler == null) { return; } - GTTransferUtils.transferFluids(myFluidHandler, nullFluidTank, Integer.MAX_VALUE, fluidFilterContainer::testFluidStack); + GTTransferUtils.transferFluids(myFluidHandler, nullFluidTank, Integer.MAX_VALUE, + fluidFilterContainer::testFluidStack); } @Override @@ -117,8 +116,8 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa .child(new ToggleButton() .value(isWorking) .overlay(IKey.dynamic(() -> IKey.lang(this.isWorkingAllowed ? - "behaviour.soft_hammer.enabled" : - "behaviour.soft_hammer.disabled").get()) + "behaviour.soft_hammer.enabled" : + "behaviour.soft_hammer.disabled").get()) .color(Color.WHITE.darker(1))) .widthRel(0.6f) .left(0))); diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index 539f7caa4c7..2565ff7d8d3 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -66,7 +66,8 @@ protected void doTransferFluids() { switch (voidingMode) { case VOID_ANY -> GTTransferUtils.transferFluids(myFluidHandler, nullFluidTank, Integer.MAX_VALUE, fluidFilterContainer::testFluidStack); - case VOID_OVERFLOW -> voidOverflow(myFluidHandler, fluidFilterContainer::testFluidStack, this.transferAmount); + case VOID_OVERFLOW -> voidOverflow(myFluidHandler, fluidFilterContainer::testFluidStack, + this.transferAmount); } } @@ -87,7 +88,8 @@ protected void voidOverflow(final IFluidHandler sourceHandler, FluidStack sourceFluid = tankProperties.getContents(); if (this.fluidFilterContainer.getFilterWrapper().getFluidFilter() != null && voidingMode == VoidingMode.VOID_OVERFLOW) { - keepAmount = this.fluidFilterContainer.getFilterWrapper().getFluidFilter().getTransferLimit(sourceFluid); + keepAmount = this.fluidFilterContainer.getFilterWrapper().getFluidFilter() + .getTransferLimit(sourceFluid); } if (sourceFluid == null || sourceFluid.amount == 0 || !getFluidFilterContainer().testFluidStack(sourceFluid, true)) @@ -239,7 +241,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa .child(new EnumRowBuilder<>(VoidingMode.class) .value(voidingMode) .lang("cover.voiding.voiding_mode") -// .overlay(GTGuiTextures.TRANSFER_MODE_OVERLAY) todo voiding mode overlay + // .overlay(GTGuiTextures.TRANSFER_MODE_OVERLAY) todo voiding mode overlay .build()) .child(new EnumRowBuilder<>(BucketMode.class) .value(bucketMode) diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index a77551ca3b0..48974a85f30 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -160,7 +160,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .child(new EnumRowBuilder<>(ItemFilterMode.class) .value(filteringMode) .lang("Filter Mode") -// .overlay() todo item filter overlays + // .overlay() todo item filter overlays .build()) .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() .height(1).widthRel(0.95f).margin(0, 4)) diff --git a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java index 37851648ae5..d8c674dc560 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java @@ -195,7 +195,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g .child(new EnumRowBuilder<>(VoidingMode.class) .value(voidingMode) .lang("cover.voiding.voiding_mode") -// .overlay(GTGuiTextures.TRANSFER_MODE_OVERLAY) todo voiding mode overlay + // .overlay(GTGuiTextures.TRANSFER_MODE_OVERLAY) todo voiding mode overlay .build()) .child(new Row().right(0).coverChildrenHeight() .child(transferTextField @@ -227,7 +227,6 @@ public VoidingMode getVoidingMode() { return voidingMode; } - @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.readInitialSyncData(packetBuffer); diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 05626a31546..c58db5451ae 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -1,7 +1,5 @@ package gregtech.common.covers; -import com.cleanroommc.modularui.value.sync.StringSyncValue; - import gregtech.api.GTValues; import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; @@ -59,6 +57,7 @@ import com.cleanroommc.modularui.value.sync.EnumSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.IntSyncValue; +import com.cleanroommc.modularui.value.sync.StringSyncValue; import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widgets.ButtonWidget; import com.cleanroommc.modularui.widgets.layout.Column; @@ -261,7 +260,7 @@ public boolean usesMui2() { @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { - var panel = GTGuis.createPanel(this, 176,192); + var panel = GTGuis.createPanel(this, 176, 192); getFluidFilterContainer().setMaxTransferSize(getMaxTransferRate()); @@ -294,50 +293,50 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa .widthRel(1f).coverChildrenHeight(); if (createThroughputRow()) - column.child(new Row().coverChildrenHeight() - .marginBottom(2).widthRel(1f) - .child(new ButtonWidget<>() - .left(0).width(18) - .onMousePressed(mouseButton -> { - int val = throughput.getValue() - getIncrementValue(MouseData.create(mouseButton)); - throughput.setValue(val, true, true); - Interactable.playButtonClickSound(); - return true; - }) - .onUpdateListener(w -> w.overlay(createAdjustOverlay(false)))) - .child(new TextFieldWidget() - .left(18).right(18) - .setTextColor(Color.WHITE.darker(1)) - .setNumbers(1, maxFluidTransferRate) - .value(throughputString) - .background(GTGuiTextures.DISPLAY)) - .child(new ButtonWidget<>() - .right(0).width(18) - .onMousePressed(mouseButton -> { - int val = throughput.getValue() + getIncrementValue(MouseData.create(mouseButton)); - throughput.setValue(val, true, true); - Interactable.playButtonClickSound(); - return true; - }) - .onUpdateListener(w -> w.overlay(createAdjustOverlay(true))))); + column.child(new Row().coverChildrenHeight() + .marginBottom(2).widthRel(1f) + .child(new ButtonWidget<>() + .left(0).width(18) + .onMousePressed(mouseButton -> { + int val = throughput.getValue() - getIncrementValue(MouseData.create(mouseButton)); + throughput.setValue(val, true, true); + Interactable.playButtonClickSound(); + return true; + }) + .onUpdateListener(w -> w.overlay(createAdjustOverlay(false)))) + .child(new TextFieldWidget() + .left(18).right(18) + .setTextColor(Color.WHITE.darker(1)) + .setNumbers(1, maxFluidTransferRate) + .value(throughputString) + .background(GTGuiTextures.DISPLAY)) + .child(new ButtonWidget<>() + .right(0).width(18) + .onMousePressed(mouseButton -> { + int val = throughput.getValue() + getIncrementValue(MouseData.create(mouseButton)); + throughput.setValue(val, true, true); + Interactable.playButtonClickSound(); + return true; + }) + .onUpdateListener(w -> w.overlay(createAdjustOverlay(true))))); if (createFilterRow()) - column.child(getFluidFilterContainer() - .initUI(mainPanel, syncManager)); + column.child(getFluidFilterContainer() + .initUI(mainPanel, syncManager)); if (createManualIOModeRow()) - column.child(new EnumRowBuilder<>(ManualImportExportMode.class) - .value(manualIOmode) - .lang("cover.generic.manual_io") - .overlay(GTGuiTextures.MANUAL_IO_OVERLAY) - .build()); + column.child(new EnumRowBuilder<>(ManualImportExportMode.class) + .value(manualIOmode) + .lang("cover.generic.manual_io") + .overlay(GTGuiTextures.MANUAL_IO_OVERLAY) + .build()); if (createPumpModeRow()) - column.child(new EnumRowBuilder<>(PumpMode.class) - .value(pumpMode) - .lang("cover.pump.mode") - .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY) // todo pump mode overlays - .build()); + column.child(new EnumRowBuilder<>(PumpMode.class) + .value(pumpMode) + .lang("cover.pump.mode") + .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY) // todo pump mode overlays + .build()); return column; } diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index 01d813ca755..6d247cc1fc4 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -199,7 +199,8 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag @Override protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager guiSyncManager) { - EnumSyncValue transferMode = new EnumSyncValue<>(TransferMode.class, this::getTransferMode, this::setTransferMode); + EnumSyncValue transferMode = new EnumSyncValue<>(TransferMode.class, this::getTransferMode, + this::setTransferMode); guiSyncManager.syncValue("transfer_mode", transferMode); var filterTransferSize = new StringSyncValue( @@ -226,41 +227,41 @@ protected int getMaxStackSize() { return getTransferMode().maxStackSize; } -// @Override -// protected ModularUI buildUI(Builder builder, EntityPlayer player) { -// WidgetGroup primaryGroup = new WidgetGroup(); -// primaryGroup.addWidget(new CycleButtonWidget(91, 45, 75, 20, -// TransferMode.class, this::getTransferMode, this::setTransferMode) -// .setTooltipHoverString("cover.robotic_arm.transfer_mode.description")); -// -// ServerWidgetGroup stackSizeGroup = new ServerWidgetGroup(this::shouldDisplayAmountSlider); -// stackSizeGroup.addWidget(new ImageWidget(111, 70, 35, 20, GuiTextures.DISPLAY)); -// -// stackSizeGroup.addWidget( -// new IncrementButtonWidget(146, 70, 20, 20, 1, 8, 64, 512, itemFilterContainer::adjustTransferStackSize) -// .setDefaultTooltip() -// .setTextScale(0.7f) -// .setShouldClientCallback(false)); -// stackSizeGroup.addWidget(new IncrementButtonWidget(91, 70, 20, 20, -1, -8, -64, -512, -// itemFilterContainer::adjustTransferStackSize) -// .setDefaultTooltip() -// .setTextScale(0.7f) -// .setShouldClientCallback(false)); -// -// stackSizeGroup.addWidget(new TextFieldWidget2(113, 77, 31, 20, -// () -> String.valueOf(itemFilterContainer.getTransferSize()), val -> { -// if (val != null && !val.isEmpty()) -// itemFilterContainer.setTransferSize( -// MathHelper.clamp(Integer.parseInt(val), 1, transferMode.maxStackSize)); -// }) -// .setNumbersOnly(1, transferMode.maxStackSize) -// .setMaxLength(4) -// .setScale(0.9f)); -// -// primaryGroup.addWidget(stackSizeGroup); -// -// return super.buildUI(builder.widget(primaryGroup), player); -// } + // @Override + // protected ModularUI buildUI(Builder builder, EntityPlayer player) { + // WidgetGroup primaryGroup = new WidgetGroup(); + // primaryGroup.addWidget(new CycleButtonWidget(91, 45, 75, 20, + // TransferMode.class, this::getTransferMode, this::setTransferMode) + // .setTooltipHoverString("cover.robotic_arm.transfer_mode.description")); + // + // ServerWidgetGroup stackSizeGroup = new ServerWidgetGroup(this::shouldDisplayAmountSlider); + // stackSizeGroup.addWidget(new ImageWidget(111, 70, 35, 20, GuiTextures.DISPLAY)); + // + // stackSizeGroup.addWidget( + // new IncrementButtonWidget(146, 70, 20, 20, 1, 8, 64, 512, itemFilterContainer::adjustTransferStackSize) + // .setDefaultTooltip() + // .setTextScale(0.7f) + // .setShouldClientCallback(false)); + // stackSizeGroup.addWidget(new IncrementButtonWidget(91, 70, 20, 20, -1, -8, -64, -512, + // itemFilterContainer::adjustTransferStackSize) + // .setDefaultTooltip() + // .setTextScale(0.7f) + // .setShouldClientCallback(false)); + // + // stackSizeGroup.addWidget(new TextFieldWidget2(113, 77, 31, 20, + // () -> String.valueOf(itemFilterContainer.getTransferSize()), val -> { + // if (val != null && !val.isEmpty()) + // itemFilterContainer.setTransferSize( + // MathHelper.clamp(Integer.parseInt(val), 1, transferMode.maxStackSize)); + // }) + // .setNumbersOnly(1, transferMode.maxStackSize) + // .setMaxLength(4) + // .setScale(0.9f)); + // + // primaryGroup.addWidget(stackSizeGroup); + // + // return super.buildUI(builder.widget(primaryGroup), player); + // } @Override public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index a047f920022..f1e7baf4139 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -14,6 +14,7 @@ import org.jetbrains.annotations.NotNull; public abstract class BaseFilterContainer> implements INBTSerializable { + private final IDirtyNotifiable dirtyNotifiable; private int maxTransferSize = 1; private T currentItemFilter; @@ -67,7 +68,8 @@ public void setOnFilterInstanceChange(Runnable onFilterInstanceChange) { } public boolean showGlobalTransferLimitSlider() { - return getMaxTransferSize() > 0 && (isBlacklistFilter() || !hasFilter() || currentItemFilter.showGlobalTransferLimitSlider()); + return getMaxTransferSize() > 0 && + (isBlacklistFilter() || !hasFilter() || currentItemFilter.showGlobalTransferLimitSlider()); } public int getTransferLimit(int slotIndex) { @@ -123,7 +125,7 @@ public boolean isBlacklistFilter() { return hasFilter() && getFilter().isBlacklistFilter(); } - /** Uses Cleanroom MUI*/ + /** Uses Cleanroom MUI */ public abstract IWidget initUI(ModularPanel main, GuiSyncManager manager); public void writeInitialSyncData(PacketBuffer packetBuffer) { diff --git a/src/main/java/gregtech/common/covers/filter/Filter.java b/src/main/java/gregtech/common/covers/filter/Filter.java index 30a05395a17..e2f94391da3 100644 --- a/src/main/java/gregtech/common/covers/filter/Filter.java +++ b/src/main/java/gregtech/common/covers/filter/Filter.java @@ -10,14 +10,17 @@ public interface Filter { /** Uses Cleanroom MUI */ - @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager); + @NotNull + ModularPanel createPopupPanel(GuiSyncManager syncManager); /** Uses Cleanroom MUI */ - @NotNull ModularPanel createPanel(GuiSyncManager syncManager); + @NotNull + ModularPanel createPanel(GuiSyncManager syncManager); /** Uses Cleanroom MUI - Creates the widgets standalone so that they can be put into their own panel */ - @NotNull Widget createWidgets(GuiSyncManager syncManager); + @NotNull + Widget createWidgets(GuiSyncManager syncManager); MatchResult match(T toMatch); diff --git a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java index 95b67a867e0..e9b7a7f22e7 100644 --- a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java +++ b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java @@ -1,7 +1,6 @@ package gregtech.common.covers.filter; import gregtech.api.unification.stack.ItemAndMetadata; -import gregtech.api.util.GTLog; import gregtech.common.items.MetaItems; import net.minecraft.item.ItemStack; @@ -92,7 +91,8 @@ public static FluidFilter createFluidFilterById(int filterId) { public static @NotNull ItemFilter getItemFilterForStack(ItemStack itemStack) { int filterId = getFilterIdForStack(itemStack); if (filterId == -1) { - throw new IllegalArgumentException(String.format("Failed to create filter instance for stack %s", itemStack)); + throw new IllegalArgumentException( + String.format("Failed to create filter instance for stack %s", itemStack)); } Class filterClass = itemFilterById.get(filterId); return createNewFilterInstance(filterClass, itemStack); @@ -101,7 +101,8 @@ public static FluidFilter createFluidFilterById(int filterId) { public static @NotNull FluidFilter getFluidFilterForStack(ItemStack itemStack) { int filterId = getFilterIdForStack(itemStack); if (filterId == -1) { - throw new IllegalArgumentException(String.format("Failed to create filter instance for stack %s", itemStack)); + throw new IllegalArgumentException( + String.format("Failed to create filter instance for stack %s", itemStack)); } Class filterClass = fluidFilterById.get(filterId); return createNewFilterInstance(filterClass, itemStack); @@ -118,8 +119,9 @@ public static int getFilterIdForStack(ItemStack stack) { try { return filterClass.getDeclaredConstructor(stack.getClass()).newInstance(stack); } catch (ReflectiveOperationException exception) { -// GTLog.logger.error("Failed to create filter instance for class {}", filterClass, exception); - throw new IllegalArgumentException(String.format("Failed to create filter instance for class %s", filterClass), exception); + // GTLog.logger.error("Failed to create filter instance for class {}", filterClass, exception); + throw new IllegalArgumentException( + String.format("Failed to create filter instance for class %s", filterClass), exception); } } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index 12fdadcec45..8ac98465f6b 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -1,16 +1,7 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.value.sync.BooleanSyncValue; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; - -import com.cleanroommc.modularui.widget.ParentWidget; -import com.cleanroommc.modularui.widget.Widget; -import com.cleanroommc.modularui.widgets.CycleButtonWidget; - import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.IDirtyNotifiable; - import gregtech.common.covers.filter.readers.BaseFilterReader; import net.minecraft.item.ItemStack; @@ -18,9 +9,14 @@ import net.minecraft.nbt.NBTTagList; import net.minecraftforge.common.util.Constants; import net.minecraftforge.fluids.FluidStack; - import net.minecraftforge.fluids.IFluidTank; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.value.sync.BooleanSyncValue; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widget.Widget; +import com.cleanroommc.modularui.widgets.CycleButtonWidget; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -56,7 +52,8 @@ protected static MatchResult createResult(boolean matched, FluidStac } public @NotNull Widget createWidgets(GuiSyncManager syncManager) { - var blacklist = new BooleanSyncValue(this.filterReader::isBlacklistFilter, this.filterReader::setBlacklistFilter); + var blacklist = new BooleanSyncValue(this.filterReader::isBlacklistFilter, + this.filterReader::setBlacklistFilter); return new ParentWidget<>().coverChildren() .child(new CycleButtonWidget() .value(blacklist) diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index a03fc21c02b..6ee2001c4d5 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -8,7 +8,6 @@ import net.minecraft.network.PacketBuffer; import net.minecraftforge.common.util.INBTSerializable; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.items.ItemStackHandler; import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.api.widget.IWidget; @@ -27,7 +26,8 @@ import java.util.function.BooleanSupplier; import java.util.function.Consumer; -public class FluidFilterContainer extends BaseFilterContainer implements INBTSerializable { +public class FluidFilterContainer extends BaseFilterContainer + implements INBTSerializable { private final FluidFilterWrapper filterWrapper; @@ -58,7 +58,8 @@ public boolean testFluidStack(FluidStack fluidStack, boolean whitelist) { public void initUI(int y, Consumer widgetGroup) { widgetGroup.accept(new gregtech.api.gui.widgets.LabelWidget(10, y, "cover.pump.fluid_filter.title")); widgetGroup.accept(new gregtech.api.gui.widgets.SlotWidget(filterInventory, 0, 10, y + 15) - .setBackgroundTexture(gregtech.api.gui.GuiTextures.SLOT, gregtech.api.gui.GuiTextures.FILTER_SLOT_OVERLAY)); + .setBackgroundTexture(gregtech.api.gui.GuiTextures.SLOT, + gregtech.api.gui.GuiTextures.FILTER_SLOT_OVERLAY)); this.initFilterUI(y + 15, widgetGroup); this.blacklistUI(y + 15, widgetGroup, () -> true); @@ -69,16 +70,19 @@ public void initFilterUI(int y, Consumer widgetGroup) { } public void blacklistUI(int y, Consumer widgetGroup, BooleanSupplier showBlacklistButton) { - gregtech.api.gui.widgets.ServerWidgetGroup blacklistButton = new gregtech.api.gui.widgets.ServerWidgetGroup(this::hasFilter); - blacklistButton.addWidget(new gregtech.api.gui.widgets.ToggleButtonWidget(144, y, 18, 18, gregtech.api.gui.GuiTextures.BUTTON_BLACKLIST, + gregtech.api.gui.widgets.ServerWidgetGroup blacklistButton = new gregtech.api.gui.widgets.ServerWidgetGroup( + this::hasFilter); + blacklistButton.addWidget(new gregtech.api.gui.widgets.ToggleButtonWidget(144, y, 18, 18, + gregtech.api.gui.GuiTextures.BUTTON_BLACKLIST, this::isBlacklistFilter, this::setBlacklistFilter).setPredicate(showBlacklistButton) - .setTooltipText("cover.filter.blacklist")); + .setTooltipText("cover.filter.blacklist")); widgetGroup.accept(blacklistButton); } - /** Uses Cleanroom MUI*/ + /** Uses Cleanroom MUI */ public IWidget initUI(ModularPanel main, GuiSyncManager manager) { var panel = new PanelSyncHandler(main) { + @Override public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { getFilter().setMaxTransferSize(getMaxTransferSize()); @@ -122,8 +126,8 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) return success; })) .child(IKey.dynamic(() -> hasFilter() ? - getFilterInventory().getStackInSlot(0).getDisplayName() : - IKey.lang("metaitem.fluid_filter.name").get()) + getFilterInventory().getStackInSlot(0).getDisplayName() : + IKey.lang("metaitem.fluid_filter.name").get()) .alignment(Alignment.CenterRight).asWidget() .left(36).right(0).height(18)); } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java b/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java index 075a0bba86b..cd84ef2974c 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java @@ -1,17 +1,5 @@ package gregtech.common.covers.filter; -import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.Widget; -import gregtech.api.gui.widgets.ServerWidgetGroup; -import gregtech.api.gui.widgets.ToggleButtonWidget; -import gregtech.api.util.IDirtyNotifiable; - -import net.minecraftforge.fluids.FluidStack; - -import java.util.function.BooleanSupplier; -import java.util.function.Consumer; -import java.util.function.Supplier; - @Deprecated public class FluidFilterWrapper { diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index 771e89fe6cb..45dd4afb321 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -77,7 +77,8 @@ public int getTransferLimit(ItemStack stack, int globalTransferLimit) { /** Uses Cleanroom MUI - Creates the widgets standalone so that they can be put into their own panel */ public @NotNull Widget createWidgets(GuiSyncManager syncManager) { - var blacklist = new BooleanSyncValue(this.filterReader::isBlacklistFilter, this.filterReader::setBlacklistFilter); + var blacklist = new BooleanSyncValue(this.filterReader::isBlacklistFilter, + this.filterReader::setBlacklistFilter); return new ParentWidget<>().coverChildren() .child(new CycleButtonWidget() .value(blacklist) @@ -107,7 +108,9 @@ public final void markDirty() { } protected static class BaseItemFilterReader extends BaseFilterReader { + protected static final String COUNT = "Count"; + public BaseItemFilterReader(ItemStack container, int slots) { super(container, slots); } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index f9e46f39b7d..073327477c5 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -1,7 +1,5 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.value.sync.SyncHandlers; - import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.LabelWidget; import gregtech.api.gui.widgets.ServerWidgetGroup; @@ -14,7 +12,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; import net.minecraftforge.common.util.INBTSerializable; -import net.minecraftforge.items.ItemStackHandler; import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.api.widget.IWidget; @@ -23,6 +20,7 @@ import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.PanelSyncHandler; +import com.cleanroommc.modularui.value.sync.SyncHandlers; import com.cleanroommc.modularui.widgets.ButtonWidget; import com.cleanroommc.modularui.widgets.ItemSlot; import com.cleanroommc.modularui.widgets.layout.Row; @@ -32,7 +30,8 @@ import java.util.function.BooleanSupplier; import java.util.function.Consumer; -public class ItemFilterContainer extends BaseFilterContainer implements INBTSerializable { +public class ItemFilterContainer extends BaseFilterContainer + implements INBTSerializable { private final ItemFilterWrapper filterWrapper; @@ -46,7 +45,7 @@ public ItemFilterWrapper getFilterWrapper() { return filterWrapper; } - /** Deprecated, uses old builtin MUI*/ + /** Deprecated, uses old builtin MUI */ @Deprecated public void initUI(int y, Consumer widgetGroup) { widgetGroup.accept(new LabelWidget(10, y, "cover.conveyor.item_filter.title")); @@ -55,24 +54,27 @@ public void initUI(int y, Consumer widgetGroup) { this.initFilterUI(y + 38, widgetGroup); } - /** Deprecated, uses old builtin MUI*/ + + /** Deprecated, uses old builtin MUI */ @Deprecated public void initFilterUI(int y, Consumer widgetGroup) { widgetGroup.accept(new WidgetGroupItemFilter(y, this::getFilter)); } - /** Deprecated, uses old builtin MUI*/ + + /** Deprecated, uses old builtin MUI */ @Deprecated public void blacklistUI(int y, Consumer widgetGroup, BooleanSupplier showBlacklistButton) { ServerWidgetGroup blacklistButton = new ServerWidgetGroup(this::hasFilter); blacklistButton.addWidget(new ToggleButtonWidget(144, y, 20, 20, GuiTextures.BUTTON_BLACKLIST, this::isBlacklistFilter, this::setBlacklistFilter).setPredicate(showBlacklistButton) - .setTooltipText("cover.filter.blacklist")); + .setTooltipText("cover.filter.blacklist")); widgetGroup.accept(blacklistButton); } - /** Uses Cleanroom MUI*/ + /** Uses Cleanroom MUI */ public IWidget initUI(ModularPanel main, GuiSyncManager manager) { var panel = new PanelSyncHandler(main) { + @Override public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { getFilter().setMaxTransferSize(getMaxTransferSize()); @@ -116,8 +118,8 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) return success; })) .child(IKey.dynamic(() -> hasFilter() ? - getFilterInventory().getStackInSlot(0).getDisplayName() : - IKey.lang("metaitem.item_filter.name").get()) + getFilterInventory().getStackInSlot(0).getDisplayName() : + IKey.lang("metaitem.item_filter.name").get()) .alignment(Alignment.CenterRight).asWidget() .left(36).right(0).height(18)); } @@ -135,9 +137,9 @@ protected void onFilterSlotChange(boolean notify) { onFilterInstanceChange(); } } else if (currentId == -1 || newId != currentId) { - setFilter(FilterTypeRegistry.getItemFilterForStack(filterStack)); - if (notify) - onFilterInstanceChange(); + setFilter(FilterTypeRegistry.getItemFilterForStack(filterStack)); + if (notify) + onFilterInstanceChange(); } } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java index edf25e0ab27..23c689b6b3f 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java @@ -7,6 +7,7 @@ @Deprecated public class ItemFilterWrapper { + private final ItemFilterContainer container; public ItemFilterWrapper(ItemFilterContainer container) { diff --git a/src/main/java/gregtech/common/covers/filter/MatchResult.java b/src/main/java/gregtech/common/covers/filter/MatchResult.java index e2cf2f4dacc..3cd49257ab7 100644 --- a/src/main/java/gregtech/common/covers/filter/MatchResult.java +++ b/src/main/java/gregtech/common/covers/filter/MatchResult.java @@ -1,6 +1,7 @@ package gregtech.common.covers.filter; public class MatchResult { + boolean matched; T matchedStack; int filterIndex; diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 3607ee76f76..6966742ecab 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -1,7 +1,5 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.utils.Color; - import gregtech.api.cover.CoverWithUI; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; @@ -25,6 +23,7 @@ import com.cleanroommc.modularui.drawable.UITexture; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.screen.Tooltip; +import com.cleanroommc.modularui.utils.Color; import com.cleanroommc.modularui.value.sync.BooleanSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.value.sync.StringSyncValue; @@ -85,8 +84,7 @@ protected void clearCache() { } @Override - public void initUI(Consumer widgetGroup) { - } + public void initUI(Consumer widgetGroup) {} @Override public @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager) { @@ -104,7 +102,8 @@ public void initUI(Consumer widgetGroup) { @Override public @NotNull Widget createWidgets(GuiSyncManager syncManager) { var expression = new StringSyncValue(this.filterReader::getExpression, this.filterReader::setExpression); - var caseSensitive = new BooleanSyncValue(this.filterReader::isCaseSensitive, this.filterReader::setCaseSensitive); + var caseSensitive = new BooleanSyncValue(this.filterReader::isCaseSensitive, + this.filterReader::setCaseSensitive); var matchAll = new BooleanSyncValue(this.filterReader::shouldMatchAll, this.filterReader::setMatchAll); List oreSlots = new ArrayList<>(); @@ -299,7 +298,8 @@ public boolean matchesItemStack(@NotNull ItemStack itemStack) { } this.matchCache.put(item, cacheEntry); } - boolean matches = this.filterReader.shouldMatchAll() ? this.glob.matchesAll(itemStack) : this.glob.matchesAny(itemStack); + boolean matches = this.filterReader.shouldMatchAll() ? this.glob.matchesAll(itemStack) : + this.glob.matchesAny(itemStack); cacheEntry.put(itemStack, matches); return matches; } @@ -369,7 +369,8 @@ public void setMatchAll(boolean matchAll) { } /** - * {@code false} requires any of the entry to be match in order for the match to be success, {@code true} requires + * {@code false} requires any of the entry to be match in order for the match to be success, {@code true} + * requires * all entries to match */ public boolean shouldMatchAll() { @@ -379,5 +380,4 @@ public boolean shouldMatchAll() { return getStackTag().getBoolean(MATCH_ALL); } } - } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 8c6a1c522b3..62cf41b2129 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -65,21 +65,21 @@ public ItemStack getContainerStack() { @Override public @NotNull Widget createWidgets(GuiSyncManager syncManager) { -// FluidSlotSyncHandler[] syncHandlers = new FluidSlotSyncHandler[MAX_FLUID_SLOTS]; -// for (int i = 0; i < syncHandlers.length; i++) { -// var tank = this.filterReader.getFluidTank(i); -// syncHandlers[i] = new FixedFluidSlotSH(tank).phantom(true); -// syncHandlers[i].updateCacheFromSource(true); -// } + // FluidSlotSyncHandler[] syncHandlers = new FluidSlotSyncHandler[MAX_FLUID_SLOTS]; + // for (int i = 0; i < syncHandlers.length; i++) { + // var tank = this.filterReader.getFluidTank(i); + // syncHandlers[i] = new FixedFluidSlotSH(tank).phantom(true); + // syncHandlers[i].updateCacheFromSource(true); + // } return new Row().coverChildrenHeight().widthRel(1f) - .child(SlotGroupWidget.builder() - .matrix("FFF", - "FFF", - "FFF") - .key('F', i -> new FluidSlot() - .syncHandler(new FixedFluidSlotSH(filterReader.getFluidTank(i)).phantom(true))) - .build().marginRight(4)) + .child(SlotGroupWidget.builder() + .matrix("FFF", + "FFF", + "FFF") + .key('F', i -> new FluidSlot() + .syncHandler(new FixedFluidSlotSH(filterReader.getFluidTank(i)).phantom(true))) + .build().marginRight(4)) .child(super.createWidgets(syncManager)); } @@ -114,7 +114,7 @@ public void initUI(Consumer widgetGroup) { for (int i = 0; i < 9; ++i) { widgetGroup.accept((new gregtech.api.gui.widgets.PhantomFluidWidget(10 + 18 * (i % 3), 18 * (i / 3), 18, 18, filterReader.getFluidTank(i))) - .setBackgroundTexture(gregtech.api.gui.GuiTextures.SLOT)); + .setBackgroundTexture(gregtech.api.gui.GuiTextures.SLOT)); } } @@ -149,6 +149,7 @@ public int getTransferLimit(FluidStack fluidStack, int transferSize) { protected static class SimpleFluidFilterReader extends BaseFluidFilterReader { protected WritableFluidTank[] fluidTanks; + public SimpleFluidFilterReader(ItemStack container, int slots) { super(container, slots); fluidTanks = new WritableFluidTank[slots]; @@ -179,6 +180,7 @@ public void onTransferRateChange() { } public static class WritableFluidTank extends FluidTank { + private final NBTTagCompound fluidTank; private final SimpleFluidFilterReader filterReader; protected static final String FLUID_AMOUNT = "Amount"; @@ -186,7 +188,8 @@ public static class WritableFluidTank extends FluidTank { protected static final String FLUID = "Fluid"; protected static final String EMPTY = "Empty"; - protected WritableFluidTank(SimpleFluidFilterReader filterReader, NBTTagCompound fluidTank, int initialCapacity) { + protected WritableFluidTank(SimpleFluidFilterReader filterReader, NBTTagCompound fluidTank, + int initialCapacity) { super(initialCapacity); this.filterReader = filterReader; this.fluidTank = fluidTank; @@ -282,6 +285,7 @@ public FluidStack drain(int maxDrain, boolean doDrain) { } public static class FixedFluidSlotSH extends FluidSlotSyncHandler { + @Nullable private FluidStack lastStoredPhantomFluid; @@ -320,7 +324,8 @@ public void tryClickPhantom(MouseData mouseData) { EntityPlayer player = getSyncManager().getPlayer(); ItemStack currentStack = player.inventory.getItemStack(); FluidStack currentFluid = this.getFluidTank().getFluid(); - IFluidHandlerItem fluidHandlerItem = currentStack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); + IFluidHandlerItem fluidHandlerItem = currentStack + .getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); if (mouseData.mouseButton == 0) { if (currentStack.isEmpty() || fluidHandlerItem == null) { diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 889e16ed651..e58ab048277 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -1,8 +1,5 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.widget.Widget; -import com.cleanroommc.modularui.widgets.layout.Column; - import gregtech.api.cover.CoverWithUI; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.PhantomSlotWidget; @@ -10,25 +7,24 @@ import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.api.mui.slot.PhantomItemSlot; - import gregtech.api.util.TextFormattingUtil; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemStackHandler; import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.BooleanSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.CycleButtonWidget; import com.cleanroommc.modularui.widgets.ItemSlot; import com.cleanroommc.modularui.widgets.SlotGroupWidget; +import com.cleanroommc.modularui.widgets.layout.Column; import com.cleanroommc.modularui.widgets.layout.Row; import com.cleanroommc.modularui.widgets.slot.SlotGroup; - -import net.minecraftforge.items.ItemStackHandler; - import org.jetbrains.annotations.NotNull; import java.util.function.Consumer; @@ -45,13 +41,15 @@ public SimpleItemFilter(ItemStack stack) { @Override public MatchResult match(ItemStack itemStack) { - int matchedSlot = itemFilterMatch(filterReader, filterReader.isIgnoreDamage(), filterReader.isIgnoreNBT(), itemStack); + int matchedSlot = itemFilterMatch(filterReader, filterReader.isIgnoreDamage(), filterReader.isIgnoreNBT(), + itemStack); return createResult(matchedSlot != -1, filterReader.getStackInSlot(matchedSlot), matchedSlot); } @Override public boolean test(ItemStack toTest) { - int matchedSlot = itemFilterMatch(filterReader, filterReader.isIgnoreDamage(), filterReader.isIgnoreNBT(), toTest); + int matchedSlot = itemFilterMatch(filterReader, filterReader.isIgnoreDamage(), filterReader.isIgnoreNBT(), + toTest); return matchedSlot != -1; } @@ -73,7 +71,8 @@ public void initUI(Consumer widgetGroup) { .setBackgroundTexture(GuiTextures.SLOT)); } widgetGroup.accept(new ToggleButtonWidget(74, 0, 20, 20, GuiTextures.BUTTON_FILTER_DAMAGE, - filterReader::isIgnoreDamage, filterReader::setIgnoreDamage).setTooltipText("cover.item_filter.ignore_damage")); + filterReader::isIgnoreDamage, filterReader::setIgnoreDamage) + .setTooltipText("cover.item_filter.ignore_damage")); widgetGroup.accept(new ToggleButtonWidget(99, 0, 20, 20, GuiTextures.BUTTON_FILTER_NBT, filterReader::isIgnoreNBT, filterReader::setIgnoreNBT).setTooltipText("cover.item_filter.ignore_nbt")); } @@ -110,7 +109,8 @@ public void initUI(Consumer widgetGroup) { .getCompoundTagAt(index) .getInteger(SimpleItemFilterReader.COUNT); if (count > 64) - tooltip.addLine(IKey.format("Count: %s", TextFormattingUtil.formatNumbers(count))); + tooltip.addLine( + IKey.format("Count: %s", TextFormattingUtil.formatNumbers(count))); }) .slot(new PhantomItemSlot(this.filterReader, index, this::getMaxTransferSize) .slotGroup(filterInventory) @@ -153,7 +153,7 @@ public void readFromNBT(NBTTagCompound tagCompound) { } public int itemFilterMatch(IItemHandler filterSlots, boolean ignoreDamage, boolean ignoreNBTData, - ItemStack itemStack) { + ItemStack itemStack) { for (int i = 0; i < filterSlots.getSlots(); i++) { ItemStack filterStack = filterSlots.getStackInSlot(i); if (!filterStack.isEmpty() && areItemsEqual(ignoreDamage, ignoreNBTData, filterStack, itemStack)) { @@ -164,7 +164,7 @@ public int itemFilterMatch(IItemHandler filterSlots, boolean ignoreDamage, boole } private boolean areItemsEqual(boolean ignoreDamage, boolean ignoreNBTData, ItemStack filterStack, - ItemStack itemStack) { + ItemStack itemStack) { if (ignoreDamage) { if (!filterStack.isItemEqualIgnoreDurability(itemStack)) { return false; @@ -179,6 +179,7 @@ protected class SimpleItemFilterReader extends BaseItemFilterReader { public static final String IGNORE_NBT = "ignore_nbt"; public static final String IGNORE_DAMAGE = "ignore_damage"; + public SimpleItemFilterReader(ItemStack container, int slots) { super(container, slots); } diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index c7a0b980325..012d127f9f2 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -1,7 +1,5 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.widgets.layout.Row; - import gregtech.api.cover.CoverWithUI; import gregtech.api.gui.widgets.CycleButtonWidget; import gregtech.api.mui.GTGuiTextures; @@ -24,6 +22,7 @@ import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.ToggleButton; import com.cleanroommc.modularui.widgets.layout.Column; +import com.cleanroommc.modularui.widgets.layout.Row; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import org.jetbrains.annotations.NotNull; @@ -31,6 +30,7 @@ import java.util.function.Consumer; public class SmartItemFilter extends ItemFilter { + private SmartItemFilterReader filterReader; public SmartItemFilter(ItemStack stack) { @@ -100,7 +100,8 @@ public void initUI(Consumer widgetGroup) { @Override public @NotNull Widget createWidgets(GuiSyncManager syncManager) { - var filterMode = new EnumSyncValue<>(SmartFilteringMode.class, filterReader::getFilteringMode, filterReader::setFilteringMode); + var filterMode = new EnumSyncValue<>(SmartFilteringMode.class, filterReader::getFilteringMode, + filterReader::setFilteringMode); syncManager.syncValue("filter_mode", filterMode); return new Row().coverChildren() @@ -111,7 +112,8 @@ public void initUI(Consumer widgetGroup) { .child(super.createWidgets(syncManager)); } - private Widget createFilterModeButton(EnumSyncValue value, SmartFilteringMode mode) { + private Widget createFilterModeButton(EnumSyncValue value, + SmartFilteringMode mode) { return new ToggleButton().height(18).width(18 * 5) .value(boolValueOf(value, mode)) .background(GTGuiTextures.MC_BUTTON_DISABLED) @@ -120,7 +122,7 @@ private Widget createFilterModeButton(EnumSyncValue> BoolValue.Dynamic boolValueOf(EnumSyncValue syncValue, T value) { + protected > BoolValue.Dynamic boolValueOf(EnumSyncValue syncValue, T value) { return new BoolValue.Dynamic(() -> syncValue.getValue() == value, $ -> syncValue.setValue(value)); } @@ -184,6 +186,7 @@ public String getName() { protected class SmartItemFilterReader extends BaseItemFilterReader { private static final String FILTER_MODE = "FilterMode"; + public SmartItemFilterReader(ItemStack container) { super(container, 0); } diff --git a/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java b/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java index 78f1a73edd1..15a52fbc8db 100644 --- a/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java @@ -41,10 +41,10 @@ public void detectAndSendChanges() { } }); } -// if (fluidFilter != null && showTipSupplier != null && fluidFilter.showTip != showTipSupplier.get()) { -// fluidFilter.showTip = showTipSupplier.get(); -// writeUpdateInfo(3, buffer -> buffer.writeBoolean(fluidFilter.showTip)); -// } + // if (fluidFilter != null && showTipSupplier != null && fluidFilter.showTip != showTipSupplier.get()) { + // fluidFilter.showTip = showTipSupplier.get(); + // writeUpdateInfo(3, buffer -> buffer.writeBoolean(fluidFilter.showTip)); + // } } @Override @@ -58,7 +58,7 @@ public void readUpdateInfo(int id, PacketBuffer buffer) { this.fluidFilter.initUI(this::addWidget); } } else if (id == 3) { -// fluidFilter.showTip = buffer.readBoolean(); + // fluidFilter.showTip = buffer.readBoolean(); } } } diff --git a/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java b/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java index 0ede4618dd0..44f5e59c40d 100644 --- a/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java @@ -52,7 +52,7 @@ public void readUpdateInfo(int id, PacketBuffer buffer) { if (id == 2) { clearAllWidgets(); if (buffer.readBoolean()) { -// int filterId = buffer.readVarInt(); + // int filterId = buffer.readVarInt(); try { this.itemFilter = FilterTypeRegistry.getItemFilterForStack(buffer.readItemStack()); this.itemFilter.initUI(this::addWidget); 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 e1260378e19..3c67f351d75 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -14,12 +14,13 @@ public abstract class BaseFilterReader extends ItemStackItemHandler { protected int maxTransferRate = 1; protected static final String KEY_ITEMS = "Items"; protected static final String BLACKLIST = "is_blacklist"; + public BaseFilterReader(ItemStack container, int slots) { super(container, slots); this.container = container; } - public ItemStack getContainer () { + public ItemStack getContainer() { return this.container; } @@ -48,7 +49,6 @@ public void setMaxTransferRate(int transferRate) { } } - public int getMaxTransferRate() { return this.maxTransferRate; } diff --git a/src/main/java/gregtech/common/gui/widget/orefilter/ItemOreFilterTestSlot.java b/src/main/java/gregtech/common/gui/widget/orefilter/ItemOreFilterTestSlot.java index 22f8fdfe453..1ef42340b0e 100644 --- a/src/main/java/gregtech/common/gui/widget/orefilter/ItemOreFilterTestSlot.java +++ b/src/main/java/gregtech/common/gui/widget/orefilter/ItemOreFilterTestSlot.java @@ -22,23 +22,21 @@ void setParent(OreFilterTestSlot parent) { this.parent = parent; } - public void setGlob(@Nullable OreGlob glob) { if (this.glob == glob) return; this.glob = glob; } - -// @Override -// @SideOnly(Side.CLIENT) -// public boolean mouseClicked(int mouseX, int mouseY, int button) { -// if (isMouseOverElement(mouseX, mouseY)) { -// EntityPlayer player = Minecraft.getMinecraft().player; -// putItem(player.inventory.getItemStack()); -// return true; -// } -// return false; -// } + // @Override + // @SideOnly(Side.CLIENT) + // public boolean mouseClicked(int mouseX, int mouseY, int button) { + // if (isMouseOverElement(mouseX, mouseY)) { + // EntityPlayer player = Minecraft.getMinecraft().player; + // putItem(player.inventory.getItemStack()); + // return true; + // } + // return false; + // } @Override public void putStack(ItemStack stack) { @@ -52,26 +50,26 @@ public void putStack(ItemStack stack) { } } -// @Override -// public List> getPhantomTargets(Object ingredient) { -// if (!(ingredient instanceof ItemStack)) { -// return Collections.emptyList(); -// } -// Rectangle rectangle = toRectangleBox(); -// return Lists.newArrayList(new IGhostIngredientHandler.Target() { -// -// @NotNull -// @Override -// public Rectangle getArea() { -// return rectangle; -// } -// -// @Override -// public void accept(@NotNull Object ingredient) { -// if (ingredient instanceof ItemStack) { -// putItem((ItemStack) ingredient); -// } -// } -// }); -// } + // @Override + // public List> getPhantomTargets(Object ingredient) { + // if (!(ingredient instanceof ItemStack)) { + // return Collections.emptyList(); + // } + // Rectangle rectangle = toRectangleBox(); + // return Lists.newArrayList(new IGhostIngredientHandler.Target() { + // + // @NotNull + // @Override + // public Rectangle getArea() { + // return rectangle; + // } + // + // @Override + // public void accept(@NotNull Object ingredient) { + // if (ingredient instanceof ItemStack) { + // putItem((ItemStack) ingredient); + // } + // } + // }); + // } } diff --git a/src/main/java/gregtech/common/gui/widget/orefilter/OreFilterTestSlot.java b/src/main/java/gregtech/common/gui/widget/orefilter/OreFilterTestSlot.java index e02cda8e6b9..f5a2981895e 100644 --- a/src/main/java/gregtech/common/gui/widget/orefilter/OreFilterTestSlot.java +++ b/src/main/java/gregtech/common/gui/widget/orefilter/OreFilterTestSlot.java @@ -1,7 +1,5 @@ package gregtech.common.gui.widget.orefilter; -import com.cleanroommc.modularui.drawable.UITexture; - import gregtech.api.unification.OreDictUnifier; import gregtech.api.util.function.BooleanConsumer; import gregtech.api.util.oreglob.OreGlob; @@ -33,7 +31,7 @@ public class OreFilterTestSlot extends ItemSlot { private MatchType matchType = MatchType.INVALID; private boolean matchSuccess; -// private boolean initialized = false; + // private boolean initialized = false; private boolean matchAll; @@ -49,18 +47,17 @@ public OreFilterTestSlot() { "cover.ore_dictionary_filter.test_slot.no_oredict.matches" : "cover.ore_dictionary_filter.test_slot.no_oredict.matches_not")); case ORE_DICT_MATCH -> this.testResult.object2BooleanEntrySet() - .stream().map(e -> - IKey.lang(e.getBooleanValue() ? - "cover.ore_dictionary_filter.test_slot.matches" : - "cover.ore_dictionary_filter.test_slot.matches_not", e.getKey())) + .stream().map(e -> IKey.lang(e.getBooleanValue() ? + "cover.ore_dictionary_filter.test_slot.matches" : + "cover.ore_dictionary_filter.test_slot.matches_not", e.getKey())) .collect(Collectors.toList()); default -> Collections.singletonList(IKey.lang("cover.ore_dictionary_filter.test_slot.info")); }); }); -// this.match = new ImageWidget(18 - 5, -3, 9, 6, GuiTextures.ORE_FILTER_MATCH); -// this.noMatch = new ImageWidget(18 - 5, -3, 7, 7, GuiTextures.ORE_FILTER_NO_MATCH); -// child(this.match); -// child(this.noMatch); + // this.match = new ImageWidget(18 - 5, -3, 9, 6, GuiTextures.ORE_FILTER_MATCH); + // this.noMatch = new ImageWidget(18 - 5, -3, 7, 7, GuiTextures.ORE_FILTER_NO_MATCH); + // child(this.match); + // child(this.noMatch); } public OreFilterTestSlot setGlobSupplier(Supplier supplier) { @@ -121,15 +118,15 @@ public void updatePreview() { } updateAndNotifyMatchSuccess(this.expectedResult == success); this.tooltip().markDirty(); -// this.match.setVisible(this.expectedResult == success); -// this.noMatch.setVisible(this.expectedResult != success); + // this.match.setVisible(this.expectedResult == success); + // this.noMatch.setVisible(this.expectedResult != success); return; } this.testResult = Object2BooleanMaps.emptyMap(); this.matchType = MatchType.INVALID; updateAndNotifyMatchSuccess(false); -// this.match.setVisible(false); -// this.noMatch.setVisible(false); + // this.match.setVisible(false); + // this.noMatch.setVisible(false); } private void updateAndNotifyMatchSuccess(boolean newValue) { 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 6b0e1fccacc..56f17b9606c 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java @@ -1,16 +1,8 @@ package gregtech.common.items.behaviors.filter; -import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.api.widget.Interactable; -import com.cleanroommc.modularui.factory.HandGuiData; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Alignment; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; - import gregtech.api.cover.CoverWithUI; import gregtech.api.items.gui.ItemUIFactory; import gregtech.api.items.metaitem.stats.IItemBehaviour; - import gregtech.api.mui.GTGuiTheme; import gregtech.api.mui.GTGuis; import gregtech.api.mui.factory.MetaItemGuiFactory; @@ -22,6 +14,13 @@ import net.minecraft.util.EnumHand; import net.minecraft.world.World; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.api.widget.Interactable; +import com.cleanroommc.modularui.factory.HandGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Alignment; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; + public abstract class BaseFilterUIManager implements IItemBehaviour, ItemUIFactory { protected static final ModularPanel ERROR = GTGuis.createPanel("ERROR", 100, 100) 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 17c30b5c734..1eebc5780f3 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java @@ -1,14 +1,13 @@ package gregtech.common.items.behaviors.filter; +import gregtech.common.covers.filter.FilterTypeRegistry; + import com.cleanroommc.modularui.factory.HandGuiData; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; - import com.cleanroommc.modularui.widgets.SlotGroupWidget; -import gregtech.common.covers.filter.FilterTypeRegistry; - -public class OreDictFilterUIManager extends BaseFilterUIManager{ +public class OreDictFilterUIManager extends BaseFilterUIManager { @Override public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { 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 8a150f1a3ed..6599832f9cf 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java @@ -7,7 +7,7 @@ import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.widgets.SlotGroupWidget; -public class SimpleFilterUIManager extends BaseFilterUIManager{ +public class SimpleFilterUIManager extends BaseFilterUIManager { @Override public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { 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 58e796a9cb1..9420d80dea4 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java @@ -1,12 +1,12 @@ package gregtech.common.items.behaviors.filter; +import gregtech.common.covers.filter.FilterTypeRegistry; + import com.cleanroommc.modularui.factory.HandGuiData; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.widgets.SlotGroupWidget; -import gregtech.common.covers.filter.FilterTypeRegistry; - public class SimpleFluidFilterUIManager extends BaseFilterUIManager { @Override diff --git a/src/main/java/gregtech/common/pipelike/itempipe/net/ItemNetHandler.java b/src/main/java/gregtech/common/pipelike/itempipe/net/ItemNetHandler.java index 48778c15269..20967af87e4 100644 --- a/src/main/java/gregtech/common/pipelike/itempipe/net/ItemNetHandler.java +++ b/src/main/java/gregtech/common/pipelike/itempipe/net/ItemNetHandler.java @@ -368,7 +368,6 @@ public Cover getCoverOnNeighbour(TileEntityItemPipe itemPipe, EnumFacing facing) public ItemStack insertOverRobotArm(IItemHandler handler, CoverRoboticArm arm, ItemStack stack, boolean simulate, int allowed, boolean ignoreLimit) { - var matched = arm.getItemFilterContainer().match(stack); boolean isStackSpecific = false; int rate, count; diff --git a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java index 9b89de3f59c..a9d738fcfb9 100644 --- a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java +++ b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java @@ -65,7 +65,7 @@ private static void conveyorInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverCo arm.getTransferMode() == TransferMode.TRANSFER_ANY) { // only display the regular rate if the cover does not have a specialized rate transferRateText(probeInfo, conveyor.getConveyorMode(), " " + rateUnit, conveyor.getTransferRate()); - } + } ItemFilterContainer filter = conveyor.getItemFilterContainer(); if (conveyor instanceof CoverRoboticArm roboticArm) { @@ -185,7 +185,8 @@ private static void enderFluidLinkInfo(@NotNull IProbeInfo probeInfo, @NotNull C fluidFilterText(probeInfo, enderFluidLink.getFluidFilterContainer().getFilter()); if (!enderFluidLink.getColorStr().isEmpty()) { - probeInfo.text(TextStyleClass.INFO + lang("gregtech.top.link_cover.color") + " " + enderFluidLink.getColorStr()); + probeInfo.text( + TextStyleClass.INFO + lang("gregtech.top.link_cover.color") + " " + enderFluidLink.getColorStr()); } } @@ -234,7 +235,8 @@ private static void transferModeText(@NotNull IProbeInfo probeInfo, @NotNull Tra private static void voidingText(@NotNull IProbeInfo probeInfo, @NotNull VoidingMode mode, @NotNull String unit, int amount, boolean hasFilter) { String text = TextFormatting.RED + lang(mode.getName()); - if (mode != VoidingMode.VOID_ANY && !hasFilter) text += " " + TextFormattingUtil.formatNumbers(amount) + " " + unit; + if (mode != VoidingMode.VOID_ANY && !hasFilter) + text += " " + TextFormattingUtil.formatNumbers(amount) + " " + unit; probeInfo.text(text); } From dd06276b5c53e9ec2241c67d31894992515c1676 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jan 2024 16:46:25 -0700 Subject: [PATCH 142/260] update MUI to 2.4.2 --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 445b5e3963b..ccfcf8a750c 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -40,7 +40,7 @@ dependencies { // Published dependencies api("codechicken:codechickenlib:3.2.3.358") - api("com.cleanroommc:modularui:2.4.1") { transitive = false } + api("com.cleanroommc:modularui:2.4.2") { transitive = false } api("com.cleanroommc:groovyscript:0.8.0") { transitive = false } api("CraftTweaker2:CraftTweaker2-MC1120-Main:1.12-4.1.20.684") api rfg.deobf("curse.maven:ae2-extended-life-570458:4402048") // AE2UEL 0.55.6 From d62cd6939e9278818d22e016afd8b63842a43e93 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jan 2024 17:07:17 -0700 Subject: [PATCH 143/260] remove commented out code --- .../common/covers/CoverFluidRegulator.java | 65 ------------------- .../common/covers/CoverRoboticArm.java | 36 ---------- .../covers/filter/SimpleFluidFilter.java | 7 -- 3 files changed, 108 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 5f4eaf07a80..159fd5792ba 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -241,73 +241,11 @@ private boolean shouldDisplayAmountSlider() { return fluidFilterContainer.showGlobalTransferLimitSlider(); } - // @Override - // public void setBucketMode(BucketMode bucketMode) { - // super.setBucketMode(bucketMode); - // if (this.bucketMode == BucketMode.BUCKET) { - // setTransferAmount(transferAmount / 1000 * 1000); - // } - // } - // - // private void adjustTransferSize(int amount) { - // if (bucketMode == BucketMode.BUCKET) - // amount *= 1000; - // - // setTransferAmount(this.transferAmount + amount); - // } - // - // private void setTransferAmount(int transferAmount) { - // this.transferAmount = MathHelper.clamp(transferAmount, 0, getMaxTransferSize()); - // markDirty(); - // } - @Override protected String getUITitle() { return "cover.fluid_regulator.title"; } - // @SuppressWarnings("UnstableApiUsage") - // @Override - // protected ModularUI buildUI(ModularUI.Builder builder, EntityPlayer player) { - // WidgetGroup filterGroup = new WidgetGroup(); - // filterGroup.addWidget(new CycleButtonWidget(92, 43, 75, 18, - // TransferMode.class, this::getTransferMode, this::setTransferMode) - // .setTooltipHoverString("cover.fluid_regulator.transfer_mode.description")); - // - // ServerWidgetGroup stackSizeGroup = new ServerWidgetGroup(this::shouldDisplayAmountSlider); - // stackSizeGroup.addWidget(new ImageWidget(110, 64, 38, 18, GuiTextures.DISPLAY)); - // - // stackSizeGroup.addWidget(new IncrementButtonWidget(148, 64, 18, 18, 1, 10, 100, 1000, this::adjustTransferSize) - // .setDefaultTooltip() - // .setTextScale(0.7f) - // .setShouldClientCallback(false)); - // stackSizeGroup - // .addWidget(new IncrementButtonWidget(92, 64, 18, 18, -1, -10, -100, -1000, this::adjustTransferSize) - // .setDefaultTooltip() - // .setTextScale(0.7f) - // .setShouldClientCallback(false)); - // - // stackSizeGroup.addWidget(new TextFieldWidget2(111, 70, 36, 11, this::getTransferAmountString, val -> { - // if (val != null && !val.isEmpty()) { - // int amount = Integer.parseInt(val); - // if (this.bucketMode == BucketMode.BUCKET) { - // amount = IntMath.saturatedMultiply(amount, 1000); - // } - // setTransferAmount(amount); - // } - // }) - // .setCentered(true) - // .setNumbersOnly(1, - // transferMode == TransferMode.TRANSFER_EXACT ? maxFluidTransferRate : Integer.MAX_VALUE) - // .setMaxLength(10) - // .setScale(0.6f)); - // - // stackSizeGroup - // .addWidget(new SimpleTextWidget(129, 78, "", 0xFFFFFF, () -> bucketMode.localeName).setScale(0.6f)); - // - // return super.buildUI(builder.widget(filterGroup).widget(stackSizeGroup), player); - // } - @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { return super.buildUI(guiData, guiSyncManager).height(192 + 36); @@ -356,7 +294,6 @@ public int getMaxTransferRate() { public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.writeInitialSyncData(packetBuffer); packetBuffer.writeEnumValue(this.transferMode); - // packetBuffer.writeInt(this.transferAmount); } @Override @@ -364,14 +301,12 @@ public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.readInitialSyncData(packetBuffer); this.transferMode = packetBuffer.readEnumValue(TransferMode.class); getFluidFilterContainer().setBucketOnly(this.transferMode == TransferMode.TRANSFER_ANY); - // this.transferAmount = packetBuffer.readInt(); } @Override public void writeToNBT(@NotNull NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); tagCompound.setInteger("TransferMode", transferMode.ordinal()); - // tagCompound.setInteger("TransferAmount", transferAmount); tagCompound.setTag("filterv2", new NBTTagCompound()); } diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index 6d247cc1fc4..2bc730cbb2c 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -227,42 +227,6 @@ protected int getMaxStackSize() { return getTransferMode().maxStackSize; } - // @Override - // protected ModularUI buildUI(Builder builder, EntityPlayer player) { - // WidgetGroup primaryGroup = new WidgetGroup(); - // primaryGroup.addWidget(new CycleButtonWidget(91, 45, 75, 20, - // TransferMode.class, this::getTransferMode, this::setTransferMode) - // .setTooltipHoverString("cover.robotic_arm.transfer_mode.description")); - // - // ServerWidgetGroup stackSizeGroup = new ServerWidgetGroup(this::shouldDisplayAmountSlider); - // stackSizeGroup.addWidget(new ImageWidget(111, 70, 35, 20, GuiTextures.DISPLAY)); - // - // stackSizeGroup.addWidget( - // new IncrementButtonWidget(146, 70, 20, 20, 1, 8, 64, 512, itemFilterContainer::adjustTransferStackSize) - // .setDefaultTooltip() - // .setTextScale(0.7f) - // .setShouldClientCallback(false)); - // stackSizeGroup.addWidget(new IncrementButtonWidget(91, 70, 20, 20, -1, -8, -64, -512, - // itemFilterContainer::adjustTransferStackSize) - // .setDefaultTooltip() - // .setTextScale(0.7f) - // .setShouldClientCallback(false)); - // - // stackSizeGroup.addWidget(new TextFieldWidget2(113, 77, 31, 20, - // () -> String.valueOf(itemFilterContainer.getTransferSize()), val -> { - // if (val != null && !val.isEmpty()) - // itemFilterContainer.setTransferSize( - // MathHelper.clamp(Integer.parseInt(val), 1, transferMode.maxStackSize)); - // }) - // .setNumbersOnly(1, transferMode.maxStackSize) - // .setMaxLength(4) - // .setScale(0.9f)); - // - // primaryGroup.addWidget(stackSizeGroup); - // - // return super.buildUI(builder.widget(primaryGroup), player); - // } - @Override public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.writeInitialSyncData(packetBuffer); diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 62cf41b2129..0b471bfaee7 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -65,13 +65,6 @@ public ItemStack getContainerStack() { @Override public @NotNull Widget createWidgets(GuiSyncManager syncManager) { - // FluidSlotSyncHandler[] syncHandlers = new FluidSlotSyncHandler[MAX_FLUID_SLOTS]; - // for (int i = 0; i < syncHandlers.length; i++) { - // var tank = this.filterReader.getFluidTank(i); - // syncHandlers[i] = new FixedFluidSlotSH(tank).phantom(true); - // syncHandlers[i].updateCacheFromSource(true); - // } - return new Row().coverChildrenHeight().widthRel(1f) .child(SlotGroupWidget.builder() .matrix("FFF", From 9e3ffd67d2c257595217e7fd0a8b7c2c15af3f87 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jan 2024 17:56:34 -0700 Subject: [PATCH 144/260] flip backgrounds --- src/main/java/gregtech/api/cover/CoverWithUI.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/cover/CoverWithUI.java b/src/main/java/gregtech/api/cover/CoverWithUI.java index 934051121a0..d8780c611d9 100644 --- a/src/main/java/gregtech/api/cover/CoverWithUI.java +++ b/src/main/java/gregtech/api/cover/CoverWithUI.java @@ -214,12 +214,12 @@ public Row build() { if (this.background != null && this.background.length > 0) button.background(this.background); else - button.background(GTGuiTextures.MC_BUTTON_DISABLED); + button.background(GTGuiTextures.MC_BUTTON); if (this.selectedBackground != null) button.selectedBackground(this.selectedBackground); else - button.selectedBackground(GTGuiTextures.MC_BUTTON); + button.selectedBackground(GTGuiTextures.MC_BUTTON_DISABLED); if (this.overlay != null) button.overlay(this.overlay[enumVal.ordinal()]); From d371f9252ba8dcc504c09941022f76b897b1734d Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jan 2024 18:51:50 -0700 Subject: [PATCH 145/260] remove IFilterMode and use IStringSerializable instead --- src/main/java/gregtech/common/covers/FluidFilterMode.java | 4 +++- src/main/java/gregtech/common/covers/IFilterMode.java | 6 ------ src/main/java/gregtech/common/covers/ItemFilterMode.java | 4 +++- .../integration/theoneprobe/provider/CoverInfoProvider.java | 5 +++-- 4 files changed, 9 insertions(+), 10 deletions(-) delete mode 100644 src/main/java/gregtech/common/covers/IFilterMode.java diff --git a/src/main/java/gregtech/common/covers/FluidFilterMode.java b/src/main/java/gregtech/common/covers/FluidFilterMode.java index ee372ff8b09..c2f3cb21c0a 100644 --- a/src/main/java/gregtech/common/covers/FluidFilterMode.java +++ b/src/main/java/gregtech/common/covers/FluidFilterMode.java @@ -1,6 +1,8 @@ package gregtech.common.covers; -public enum FluidFilterMode implements IFilterMode { +import net.minecraft.util.IStringSerializable; + +public enum FluidFilterMode implements IStringSerializable { FILTER_FILL("cover.fluid_filter.mode.filter_fill"), FILTER_DRAIN("cover.fluid_filter.mode.filter_drain"), diff --git a/src/main/java/gregtech/common/covers/IFilterMode.java b/src/main/java/gregtech/common/covers/IFilterMode.java deleted file mode 100644 index ecc0fde802f..00000000000 --- a/src/main/java/gregtech/common/covers/IFilterMode.java +++ /dev/null @@ -1,6 +0,0 @@ -package gregtech.common.covers; - -public interface IFilterMode { - - String getName(); -} diff --git a/src/main/java/gregtech/common/covers/ItemFilterMode.java b/src/main/java/gregtech/common/covers/ItemFilterMode.java index 2a871e2984e..02fef3d1570 100644 --- a/src/main/java/gregtech/common/covers/ItemFilterMode.java +++ b/src/main/java/gregtech/common/covers/ItemFilterMode.java @@ -1,6 +1,8 @@ package gregtech.common.covers; -public enum ItemFilterMode implements IFilterMode { +import net.minecraft.util.IStringSerializable; + +public enum ItemFilterMode implements IStringSerializable { FILTER_INSERT("cover.filter.mode.filter_insert"), FILTER_EXTRACT("cover.filter.mode.filter_extract"), diff --git a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java index a9d738fcfb9..29ab14e9a9b 100644 --- a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java +++ b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java @@ -10,6 +10,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IStringSerializable; import net.minecraft.util.text.TextFormatting; import net.minecraftforge.common.capabilities.Capability; @@ -241,12 +242,12 @@ private static void voidingText(@NotNull IProbeInfo probeInfo, @NotNull VoidingM } /** - * Displays text for {@link IFilterMode} covers + * Displays text for {@link net.minecraft.util.IStringSerializable} covers * * @param probeInfo the info to add the text to * @param mode the filter mode of the cover */ - private static void filterModeText(@NotNull IProbeInfo probeInfo, @NotNull IFilterMode mode) { + private static void filterModeText(@NotNull IProbeInfo probeInfo, @NotNull IStringSerializable mode) { probeInfo.text(TextStyleClass.WARNING + lang(mode.getName())); } From 96db3977753b99f8c051942d78265ca4843ec78b Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jan 2024 19:09:52 -0700 Subject: [PATCH 146/260] add separate icons for fluid transfer overlays --- src/main/java/gregtech/api/mui/GTGuiTextures.java | 3 +++ .../common/covers/CoverFluidRegulator.java | 2 +- .../gui/overlay/fluid_transfer_mode_overlay.png | Bin 0 -> 454 bytes 3 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/assets/gregtech/textures/gui/overlay/fluid_transfer_mode_overlay.png diff --git a/src/main/java/gregtech/api/mui/GTGuiTextures.java b/src/main/java/gregtech/api/mui/GTGuiTextures.java index 2364530c391..2b12310b02f 100644 --- a/src/main/java/gregtech/api/mui/GTGuiTextures.java +++ b/src/main/java/gregtech/api/mui/GTGuiTextures.java @@ -184,6 +184,9 @@ public static class IDs { public static final UITexture[] TRANSFER_MODE_OVERLAY = slice("textures/gui/overlay/transfer_mode_overlay.png", 18, 18 * 3, 18, 18, true); + public static final UITexture[] FLUID_TRANSFER_MODE_OVERLAY = slice("textures/gui/overlay/fluid_transfer_mode_overlay.png", + 18, 18 * 3, 18, 18, true); + // todo bronze/steel/primitive fluid slots? // SLOT OVERLAYS diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 159fd5792ba..e9b2f3d719c 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -268,7 +268,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa .child(new EnumRowBuilder<>(TransferMode.class) .value(transferMode) .lang("cover.generic.transfer_mode") - .overlay(GTGuiTextures.TRANSFER_MODE_OVERLAY) + .overlay(GTGuiTextures.FLUID_TRANSFER_MODE_OVERLAY) .build()) .child(new EnumRowBuilder<>(BucketMode.class) .value(bucketMode) diff --git a/src/main/resources/assets/gregtech/textures/gui/overlay/fluid_transfer_mode_overlay.png b/src/main/resources/assets/gregtech/textures/gui/overlay/fluid_transfer_mode_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..6fe690f9fbb682ac344ff0608317066f3fc5bf72 GIT binary patch literal 454 zcmV;%0XhDOP)Px$fJsC_R7i>KmN84iKp2LfNPdAshn8;6MZ~2`=?@5Wb14p8>z{GawS%~13v_TP zxMh)23vS}j(he3J#Jvt_a(Bsh*IFzhqYBeyF>nxjhIb<`OI}3D%;`Nes`fREuF1TRgbnMSUocL( zz$R?EvVK>CAYKtS*nXhmJ#pQy z&lffRdV_I4^O+Uxg4XxPEfwih%xe{@_t%@`S!o+p`9=uHbR1DY>wXnYy6U~wNvf)} zVHU#iIgI-nY6r2G?UBCO!F&xGqtj*0LSxF@Z0WQlp53ak_6w9Mbr@MF z=+c1*xrKs&m7sD(77DruD)&bc1zo%v#Gc%YN|m?>N{U*&8C^tha;2*Jc!K9k;Lh1s w$~|PdEFEArf^K9#eu086g4&zWl7hdkZ`&=b6JY2k-2eap07*qoM6N<$g6=8K&j0`b literal 0 HcmV?d00001 From 1646082e2944d7148ab4bef02761c94f81ba77ce Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jan 2024 19:12:32 -0700 Subject: [PATCH 147/260] yeet error panel --- .../common/items/behaviors/filter/BaseFilterUIManager.java | 3 --- 1 file changed, 3 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 56f17b9606c..4fa60df162a 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java @@ -23,9 +23,6 @@ public abstract class BaseFilterUIManager implements IItemBehaviour, ItemUIFactory { - protected static final ModularPanel ERROR = GTGuis.createPanel("ERROR", 100, 100) - .child(IKey.str("This is an error!").asWidget().align(Alignment.Center)); - @Override public final ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { ItemStack heldItem = player.getHeldItem(hand); From 9af2347e0d534067e48125604a5e5d543467e0a3 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jan 2024 19:35:47 -0700 Subject: [PATCH 148/260] yeet old mui methods --- .../gregtech/common/covers/CoverConveyor.java | 53 ------------- .../common/covers/CoverFluidRegulator.java | 5 -- .../common/covers/CoverFluidVoiding.java | 26 ------ .../covers/CoverFluidVoidingAdvanced.java | 79 ------------------- .../common/covers/CoverItemVoiding.java | 26 ------ .../covers/CoverItemVoidingAdvanced.java | 72 ----------------- .../gregtech/common/covers/CoverPump.java | 61 -------------- .../common/covers/CoverRoboticArm.java | 5 -- 8 files changed, 327 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index b371e1d2e0b..6d6f399bfa9 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -505,10 +505,6 @@ public T getCapability(Capability capability, T defaultValue) { return defaultValue; } - protected String getUITitle() { - return "cover.conveyor.title"; - } - @Override public boolean usesMui2() { return true; @@ -613,55 +609,6 @@ protected int getMaxStackSize() { return 1; } - protected ModularUI buildUI(ModularUI.Builder builder, EntityPlayer player) { - return builder.build(this, player); - } - - @Override - public ModularUI createUI(EntityPlayer player) { - WidgetGroup primaryGroup = new WidgetGroup(); - primaryGroup.addWidget(new LabelWidget(10, 5, getUITitle(), GTValues.VN[tier])); - - primaryGroup.addWidget(new IncrementButtonWidget(136, 20, 30, 20, 1, 8, 64, 512, this::adjustTransferRate) - .setDefaultTooltip() - .setShouldClientCallback(false)); - primaryGroup.addWidget(new IncrementButtonWidget(10, 20, 30, 20, -1, -8, -64, -512, this::adjustTransferRate) - .setDefaultTooltip() - .setShouldClientCallback(false)); - - primaryGroup.addWidget(new ImageWidget(40, 20, 96, 20, GuiTextures.DISPLAY)); - primaryGroup.addWidget(new TextFieldWidget2(42, 26, 92, 20, () -> String.valueOf(transferRate), val -> { - if (val != null && !val.isEmpty()) - setTransferRate(MathHelper.clamp(Integer.parseInt(val), 1, maxItemTransferRate)); - }) - .setNumbersOnly(1, maxItemTransferRate) - .setMaxLength(4) - .setPostFix("cover.conveyor.transfer_rate")); - - primaryGroup.addWidget(new gregtech.api.gui.widgets.CycleButtonWidget(10, 45, 75, 20, - ConveyorMode.class, this::getConveyorMode, this::setConveyorMode)); - primaryGroup.addWidget(new gregtech.api.gui.widgets.CycleButtonWidget(7, 166, 116, 20, - ManualImportExportMode.class, this::getManualImportExportMode, this::setManualImportExportMode) - .setTooltipHoverString("cover.universal.manual_import_export.mode.description")); - - if (getTileEntityHere() instanceof TileEntityItemPipe || - getNeighbor(getAttachedSide()) instanceof TileEntityItemPipe) { - final ImageCycleButtonWidget distributionModeButton = new ImageCycleButtonWidget(149, 166, 20, 20, - GuiTextures.DISTRIBUTION_MODE, 3, - () -> distributionMode.ordinal(), - val -> setDistributionMode(DistributionMode.values()[val])) - .setTooltipHoverString(val -> DistributionMode.values()[val].getName()); - primaryGroup.addWidget(distributionModeButton); - } - - this.itemFilterContainer.initUI(70, primaryGroup::addWidget); - - ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176, 190 + 82) - .widget(primaryGroup) - .bindPlayerInventory(player.inventory, GuiTextures.SLOT, 7, 190); - return buildUI(builder, player); - } - @Override public boolean isWorkingEnabled() { return isWorkingAllowed; diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index e9b2f3d719c..3fe67a77ded 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -241,11 +241,6 @@ private boolean shouldDisplayAmountSlider() { return fluidFilterContainer.showGlobalTransferLimitSlider(); } - @Override - protected String getUITitle() { - return "cover.fluid_regulator.title"; - } - @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { return super.buildUI(guiData, guiSyncManager).height(192 + 36); diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoiding.java b/src/main/java/gregtech/common/covers/CoverFluidVoiding.java index dd0698778b1..f3f2c0b3c8b 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoiding.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoiding.java @@ -69,32 +69,6 @@ protected void doTransferFluids() { fluidFilterContainer::testFluidStack); } - @Override - protected String getUITitle() { - return "cover.fluid.voiding.title"; - } - - @Override - public ModularUI createUI(EntityPlayer player) { - WidgetGroup primaryGroup = new WidgetGroup(); - primaryGroup.addWidget(new LabelWidget(10, 5, getUITitle())); - - this.fluidFilterContainer.initUI(20, primaryGroup::addWidget); - - primaryGroup.addWidget(new CycleButtonWidget(10, 92, 80, 18, this::isWorkingEnabled, this::setWorkingEnabled, - "cover.voiding.label.disabled", "cover.voiding.label.enabled") - .setTooltipHoverString("cover.voiding.tooltip")); - - primaryGroup.addWidget(new CycleButtonWidget(10, 112, 116, 18, - ManualImportExportMode.class, this::getManualImportExportMode, this::setManualImportExportMode) - .setTooltipHoverString("cover.universal.manual_import_export.mode.description")); - - ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176, 100 + 82 + 16 + 24) - .widget(primaryGroup) - .bindPlayerInventory(player.inventory, GuiTextures.SLOT, 7, 100 + 16 + 24); - return builder.build(this, player); - } - @Override public void renderCover(@NotNull CCRenderState renderState, @NotNull Matrix4 translation, IVertexOperation[] pipeline, @NotNull Cuboid6 plateBox, @NotNull BlockRenderLayer layer) { diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index 2565ff7d8d3..a773cc7c23b 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -139,85 +139,6 @@ public String getTransferAmountString() { return Integer.toString(this.bucketMode == BucketMode.BUCKET ? transferAmount / 1000 : transferAmount); } - @Override - protected String getUITitle() { - return "cover.fluid.voiding.advanced.title"; - } - - @Override - public ModularUI createUI(EntityPlayer player) { - WidgetGroup primaryGroup = new WidgetGroup(); - primaryGroup.addWidget(new LabelWidget(10, 5, getUITitle())); - - primaryGroup.addWidget(new CycleButtonWidget(92, 15, 75, 18, - VoidingMode.class, this::getVoidingMode, this::setVoidingMode) - .setTooltipHoverString("cover.voiding.voiding_mode.description")); - - this.initFilterUI(20, primaryGroup::addWidget); - - primaryGroup.addWidget(new CycleButtonWidget(10, 92, 80, 18, this::isWorkingEnabled, this::setWorkingEnabled, - "cover.voiding.label.disabled", "cover.voiding.label.enabled") - .setTooltipHoverString("cover.voiding.tooltip")); - - primaryGroup.addWidget(new CycleButtonWidget(10, 112, 116, 18, - ManualImportExportMode.class, this::getManualImportExportMode, this::setManualImportExportMode) - .setTooltipHoverString("cover.universal.manual_import_export.mode.description")); - - ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176, 100 + 82 + 16 + 24) - .widget(primaryGroup) - .bindPlayerInventory(player.inventory, GuiTextures.SLOT, 7, 100 + 16 + 24); - return buildUI(builder, player); - } - - public void initFilterUI(int y, Consumer widgetGroup) { - widgetGroup.accept(new LabelWidget(10, y, "cover.pump.fluid_filter.title")); - widgetGroup.accept(new SlotWidget(fluidFilterContainer.getFilterInventory(), 0, 10, y + 15) - .setBackgroundTexture(GuiTextures.SLOT, GuiTextures.FILTER_SLOT_OVERLAY)); - - ServerWidgetGroup stackSizeGroup = new ServerWidgetGroup(this::shouldDisplayAmountSlider); - stackSizeGroup.addWidget(new ImageWidget(110, 34, 38, 18, GuiTextures.DISPLAY)); - - stackSizeGroup.addWidget(new IncrementButtonWidget(148, 34, 18, 18, 1, 10, 100, 1000, this::adjustTransferSize) - .setDefaultTooltip() - .setTextScale(0.7f) - .setShouldClientCallback(false)); - stackSizeGroup - .addWidget(new IncrementButtonWidget(92, 34, 18, 18, -1, -10, -100, -1000, this::adjustTransferSize) - .setDefaultTooltip() - .setTextScale(0.7f) - .setShouldClientCallback(false)); - - stackSizeGroup.addWidget(new TextFieldWidget2(111, 39, 37, 11, this::getTransferAmountString, val -> { - if (val != null && !val.isEmpty()) { - int amount = Integer.parseInt(val); - if (this.bucketMode == BucketMode.BUCKET) { - amount *= 1000; - } - setTransferAmount(amount); - } - }) - .setCentered(true) - .setNumbersOnly(1, Integer.MAX_VALUE) - .setMaxLength(10) - .setScale(0.6f)); - - stackSizeGroup - .addWidget(new SimpleTextWidget(129, 47, "", 0xFFFFFF, () -> bucketMode.localeName).setScale(0.6f)); - - stackSizeGroup.addWidget(new CycleButtonWidget(114, 53, 30, 20, - BucketMode.class, this::getBucketMode, mode -> { - if (mode != bucketMode) { - setBucketMode(mode); - } - })); - - widgetGroup.accept(stackSizeGroup); - - this.fluidFilterContainer.initUI(y + 15, widgetGroup); - this.fluidFilterContainer.blacklistUI(y + 15, widgetGroup, - () -> voidingMode != VoidingMode.VOID_OVERFLOW); - } - @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { return super.buildUI(guiData, guiSyncManager).height(192 + 20); diff --git a/src/main/java/gregtech/common/covers/CoverItemVoiding.java b/src/main/java/gregtech/common/covers/CoverItemVoiding.java index d6e2a548a1a..f077a168330 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoiding.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoiding.java @@ -77,32 +77,6 @@ void voidAny(IItemHandler myItemHandler) { } } - @Override - protected String getUITitle() { - return "cover.item.voiding.title"; - } - - @Override - public ModularUI createUI(EntityPlayer player) { - WidgetGroup primaryGroup = new WidgetGroup(); - primaryGroup.addWidget(new LabelWidget(10, 5, getUITitle())); - this.itemFilterContainer.initUI(20, primaryGroup::addWidget); - - primaryGroup - .addWidget(new CycleButtonWidget(10, 92 + 23, 80, 18, this::isWorkingEnabled, this::setWorkingEnabled, - "cover.voiding.label.disabled", "cover.voiding.label.enabled") - .setTooltipHoverString("cover.voiding.tooltip")); - - primaryGroup.addWidget(new CycleButtonWidget(10, 112 + 23, 116, 18, - ManualImportExportMode.class, this::getManualImportExportMode, this::setManualImportExportMode) - .setTooltipHoverString("cover.universal.manual_import_export.mode.description")); - - ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176, 125 + 82 + 16 + 24) - .widget(primaryGroup) - .bindPlayerInventory(player.inventory, GuiTextures.SLOT, 7, 125 + 16 + 24); - return builder.build(this, player); - } - @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { return super.buildUI(guiData, guiSyncManager).height(192 - 22); diff --git a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java index d8c674dc560..abd420feebc 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java @@ -101,78 +101,6 @@ protected void voidOverflow(IItemHandler myItemHandler) { } } - @Override - protected String getUITitle() { - return "cover.item.voiding.advanced.title"; - } - - @Override - public ModularUI createUI(EntityPlayer player) { - WidgetGroup primaryGroup = new WidgetGroup(); - primaryGroup.addWidget(new LabelWidget(10, 5, getUITitle())); - - primaryGroup.addWidget(new CycleButtonWidget(91, 14, 75, 20, - VoidingMode.class, this::getVoidingMode, this::setVoidingMode) - .setTooltipHoverString("cover.voiding.voiding_mode.description")); - - this.initFilterUI(20, primaryGroup::addWidget); - - primaryGroup - .addWidget(new CycleButtonWidget(10, 92 + 23, 80, 18, this::isWorkingEnabled, this::setWorkingEnabled, - "cover.voiding.label.disabled", "cover.voiding.label.enabled") - .setTooltipHoverString("cover.voiding.tooltip")); - - primaryGroup.addWidget(new CycleButtonWidget(10, 112 + 23, 116, 18, - ManualImportExportMode.class, this::getManualImportExportMode, this::setManualImportExportMode) - .setTooltipHoverString("cover.universal.manual_import_export.mode.description")); - - ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176, 125 + 82 + 16 + 24) - .widget(primaryGroup) - .bindPlayerInventory(player.inventory, GuiTextures.SLOT, 7, 125 + 16 + 24); - return buildUI(builder, player); - } - - // Basically the item filter container GUI code, with different Y widget positioning - public void initFilterUI(int y, Consumer widgetGroup) { - widgetGroup.accept(new LabelWidget(10, y, "cover.conveyor.item_filter.title")); - widgetGroup.accept(new SlotWidget(itemFilterContainer.getFilterInventory(), 0, 10, y + 15) - .setBackgroundTexture(GuiTextures.SLOT, GuiTextures.FILTER_SLOT_OVERLAY)); - - ServerWidgetGroup stackSizeGroup = new ServerWidgetGroup( - () -> itemFilterContainer.hasFilter() && - voidingMode == VoidingMode.VOID_OVERFLOW); - stackSizeGroup.addWidget(new ImageWidget(111, 34, 35, 20, GuiTextures.DISPLAY)); - - stackSizeGroup.addWidget( - new IncrementButtonWidget(146, 34, 20, 20, 1, 8, 64, 512, itemFilterContainer::adjustTransferStackSize) - .setDefaultTooltip() - .setTextScale(0.7f) - .setShouldClientCallback(false)); - stackSizeGroup.addWidget(new IncrementButtonWidget(91, 34, 20, 20, -1, -8, -64, -512, - itemFilterContainer::adjustTransferStackSize) - .setDefaultTooltip() - .setTextScale(0.7f) - .setShouldClientCallback(false)); - - stackSizeGroup.addWidget(new TextFieldWidget2(113, 41, 31, 20, - () -> String.valueOf(itemFilterContainer.getTransferSize()), val -> { - if (val != null && !val.isEmpty()) - itemFilterContainer.setTransferSize( - MathHelper.clamp(Integer.parseInt(val), 1, voidingMode.maxStackSize)); - }) - .setCentered(true) - .setNumbersOnly(1, Integer.MAX_VALUE) - .setMaxLength(10) - .setScale(0.9f)); - - widgetGroup.accept(stackSizeGroup); - - this.itemFilterContainer.initUI(y + 38, widgetGroup); - - this.itemFilterContainer.blacklistUI(y + 38, widgetGroup, - () -> voidingMode != VoidingMode.VOID_OVERFLOW); - } - @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { return super.buildUI(guiData, guiSyncManager).height(192 + 18); diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index c58db5451ae..82843b9fb61 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -192,67 +192,6 @@ protected boolean checkInputFluid(FluidStack fluidStack) { return fluidFilterContainer.testFluidStack(fluidStack); } - protected ModularUI buildUI(ModularUI.Builder builder, EntityPlayer player) { - return builder.build(this, player); - } - - protected String getUITitle() { - return "cover.pump.title"; - } - - @SuppressWarnings("UnstableApiUsage") - @Override - public ModularUI createUI(EntityPlayer player) { - WidgetGroup primaryGroup = new WidgetGroup(); - primaryGroup.addWidget(new LabelWidget(10, 5, getUITitle(), GTValues.VN[tier])); - - primaryGroup.addWidget(new ImageWidget(44, 20, 62, 20, GuiTextures.DISPLAY)); - - primaryGroup.addWidget(new IncrementButtonWidget(136, 20, 30, 20, 1, 10, 100, 1000, this::adjustTransferRate) - .setDefaultTooltip() - .setShouldClientCallback(false)); - primaryGroup.addWidget(new IncrementButtonWidget(10, 20, 34, 20, -1, -10, -100, -1000, this::adjustTransferRate) - .setDefaultTooltip() - .setShouldClientCallback(false)); - - TextFieldWidget2 textField = new TextFieldWidget2(45, 26, 60, 20, () -> bucketMode == BucketMode.BUCKET ? - Integer.toString(transferRate / 1000) : Integer.toString(transferRate), val -> { - if (val != null && !val.isEmpty()) { - int amount = Integer.parseInt(val); - if (this.bucketMode == BucketMode.BUCKET) { - amount = IntMath.saturatedMultiply(amount, 1000); - } - setTransferRate(amount); - } - }) - .setCentered(true) - .setNumbersOnly(1, - bucketMode == BucketMode.BUCKET ? maxFluidTransferRate / 1000 : maxFluidTransferRate) - .setMaxLength(8); - primaryGroup.addWidget(textField); - - primaryGroup.addWidget(new CycleButtonWidget(106, 20, 30, 20, - BucketMode.class, this::getBucketMode, mode -> { - if (mode != bucketMode) { - setBucketMode(mode); - } - })); - - primaryGroup.addWidget(new CycleButtonWidget(10, 43, 75, 18, - PumpMode.class, this::getPumpMode, this::setPumpMode)); - - primaryGroup.addWidget(new CycleButtonWidget(7, 160, 116, 20, - ManualImportExportMode.class, this::getManualImportExportMode, this::setManualImportExportMode) - .setTooltipHoverString("cover.universal.manual_import_export.mode.description")); - - this.fluidFilterContainer.initUI(88, primaryGroup::addWidget); - - ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176, 184 + 82) - .widget(primaryGroup) - .bindPlayerInventory(player.inventory, GuiTextures.SLOT, 7, 184); - return buildUI(builder, player); - } - @Override public boolean usesMui2() { return true; diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index 2bc730cbb2c..4f13a10c91e 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -187,11 +187,6 @@ private boolean shouldDisplayAmountSlider() { return itemFilterContainer.showGlobalTransferLimitSlider(); } - @Override - protected String getUITitle() { - return "cover.robotic_arm.title"; - } - @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { return super.buildUI(guiData, guiSyncManager).height(192 + 36); From 164609cd37ab63f01ed30f54e111cc185b8451a4 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jan 2024 19:42:02 -0700 Subject: [PATCH 149/260] fix filters being voided on configuration --- src/main/java/gregtech/common/covers/CoverFluidFilter.java | 6 +++++- src/main/java/gregtech/common/covers/CoverItemFilter.java | 6 +++++- src/main/java/gregtech/common/covers/filter/ItemFilter.java | 4 +--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 95f9423fe58..9d1275e7ac3 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -82,7 +82,11 @@ public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFaci @Override public @NotNull ItemStack getPickItem() { - return this.fluidFilterContainer.hasFilter() ? getFluidFilter().getContainerStack() : super.getPickItem(); + if (this.fluidFilterContainer.hasFilter()) { + var stack = getFluidFilter().getContainerStack(); + return GTUtility.copy(1, stack); + } + return super.getPickItem(); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 48974a85f30..8e6b35c4d62 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -70,7 +70,11 @@ public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFaci @Override public @NotNull ItemStack getPickItem() { - return this.getItemFilter() == null ? super.getPickItem() : this.getItemFilter().getContainerStack(); + if (this.itemFilter.hasFilter()) { + var stack = getItemFilter().getContainerStack(); + return GTUtility.copy(1, stack); + } + return super.getPickItem(); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index 45dd4afb321..810adb6aeb0 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -28,9 +28,7 @@ protected void setFilterReader(BaseItemFilterReader reader) { } public ItemStack getContainerStack() { - var stack = this.filterReader.getContainer(); - stack.setCount(1); - return stack; + return this.filterReader.getContainer(); } public final void setBlacklistFilter(boolean blacklistFilter) { From d5bccab5a7fba695d99b815d14daa186e95623b3 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jan 2024 19:55:50 -0700 Subject: [PATCH 150/260] add tooltip explanation for new behavior --- src/main/resources/assets/gregtech/lang/en_us.lang | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 8e0bc8b5449..6d828255dc5 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -815,13 +815,13 @@ metaitem.gravistar.name=Gravi Star metaitem.gravistar.tooltip=Ultimate Nether Star metaitem.item_filter.name=Item Filter -metaitem.item_filter.tooltip=Filters §fItem§7 I/O as §fCover§7./nCan be used as a §fConveyor Module§7 and §fRobotic Arm§7 upgrade. +metaitem.item_filter.tooltip=Filters §fItem§7 I/O as §fCover§7./n§fRight-Click§7 to configure, §fShift Right-Click§7 to clear configuration/nCan be used as a §fConveyor Module§7 and §fRobotic Arm§7 upgrade. metaitem.ore_dictionary_filter.name=Ore Dictionary Filter -metaitem.ore_dictionary_filter.tooltip=Filters §fItem§7 I/O with §fOre Dictionary§7 as §fCover§7./nCan be used as a §fConveyor Module§7 and §fRobotic Arm§7 upgrade. +metaitem.ore_dictionary_filter.tooltip=Filters §fItem§7 I/O with §fOre Dictionary§7 as §fCover§7./n§fRight-Click§7 to configure, §fShift Right-Click§7 to clear configuration/nCan be used as a §fConveyor Module§7 and §fRobotic Arm§7 upgrade. metaitem.fluid_filter.name=Fluid Filter -metaitem.fluid_filter.tooltip=Filters §fFluid§7 I/O as §fCover§7./nCan be used as an §fElectric Pump§7 and §fFluid Regulator§7 upgrade. +metaitem.fluid_filter.tooltip=Filters §fFluid§7 I/O as §fCover§7./n§fRight-Click§7 to configure, §fShift Right-Click§7 to clear configuration/nCan be used as an §fElectric Pump§7 and §fFluid Regulator§7 upgrade. metaitem.smart_item_filter.name=Smart Item Filter -metaitem.smart_item_filter.tooltip=Filters §fItem§7 I/O with §fMachine Recipes§7 as §fCover§7./nCan be used as a §fConveyor Module§7 and §fRobotic Arm§7 upgrade. +metaitem.smart_item_filter.tooltip=Filters §fItem§7 I/O with §fMachine Recipes§7 as §fCover§7./n§fRight-Click§7 to configure, §fShift Right-Click§7 to clear configuration/nCan be used as a §fConveyor Module§7 and §fRobotic Arm§7 upgrade. metaitem.cover.controller.name=Machine Controller metaitem.cover.controller.tooltip=Turns Machines §fON/OFF§7 as §fCover§7. From 3950f65781bf112fc2c149ba223e3e79c25f728c Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jan 2024 19:59:19 -0700 Subject: [PATCH 151/260] flip background for SmartItemFilter --- .../gregtech/common/covers/filter/SmartItemFilter.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 012d127f9f2..0d54a352eac 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -1,5 +1,7 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.utils.Color; + import gregtech.api.cover.CoverWithUI; import gregtech.api.gui.widgets.CycleButtonWidget; import gregtech.api.mui.GTGuiTextures; @@ -116,10 +118,9 @@ private Widget createFilterModeButton(EnumSyncValue> BoolValue.Dynamic boolValueOf(EnumSyncValue syncValue, T value) { From 14e6eb47f136920f8d4a2cfab3a8d4163e2a542c Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jan 2024 20:09:48 -0700 Subject: [PATCH 152/260] fix npe with oredict filter sync handler --- .../gregtech/common/gui/widget/HighlightedTextField.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/common/gui/widget/HighlightedTextField.java b/src/main/java/gregtech/common/gui/widget/HighlightedTextField.java index e5a3d159582..202950584a5 100644 --- a/src/main/java/gregtech/common/gui/widget/HighlightedTextField.java +++ b/src/main/java/gregtech/common/gui/widget/HighlightedTextField.java @@ -1,5 +1,6 @@ package gregtech.common.gui.widget; +import com.cleanroommc.modularui.api.value.IStringValue; import com.cleanroommc.modularui.screen.viewport.GuiContext; import com.cleanroommc.modularui.value.sync.StringSyncValue; import com.cleanroommc.modularui.widgets.textfield.TextFieldHandler; @@ -35,8 +36,9 @@ public HighlightedTextField setHighlightRule(Function hig return getThis(); } - public HighlightedTextField value(StringSyncValue stringValue) { - this.stringSyncValue = stringValue; + @Override + public HighlightedTextField value(IStringValue stringValue) { + this.stringSyncValue = (StringSyncValue) stringValue; super.value(stringValue); return getThis(); } @@ -49,7 +51,8 @@ public HighlightedTextField getThis() { @Override public void onRemoveFocus(GuiContext context) { super.onRemoveFocus(context); - this.stringSyncValue.setStringValue(highlighter.getOriginalText(), true, true); + if (isSynced()) + this.stringSyncValue.setStringValue(highlighter.getOriginalText(), true, true); onUnfocus.run(); } From 036ddd210833cb33a5086fb7a3f8660f72c629ee Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 20 Jan 2024 08:44:25 -0700 Subject: [PATCH 153/260] spopless --- src/main/java/gregtech/api/mui/GTGuiTextures.java | 3 ++- .../java/gregtech/common/covers/CoverConveyor.java | 9 --------- .../gregtech/common/covers/CoverFluidVoiding.java | 5 ----- .../common/covers/CoverFluidVoidingAdvanced.java | 14 -------------- .../gregtech/common/covers/CoverItemVoiding.java | 5 ----- .../common/covers/CoverItemVoidingAdvanced.java | 14 -------------- .../java/gregtech/common/covers/CoverPump.java | 10 ---------- .../common/covers/filter/SmartItemFilter.java | 3 +-- .../behaviors/filter/BaseFilterUIManager.java | 2 -- 9 files changed, 3 insertions(+), 62 deletions(-) diff --git a/src/main/java/gregtech/api/mui/GTGuiTextures.java b/src/main/java/gregtech/api/mui/GTGuiTextures.java index 2b12310b02f..1972b25da71 100644 --- a/src/main/java/gregtech/api/mui/GTGuiTextures.java +++ b/src/main/java/gregtech/api/mui/GTGuiTextures.java @@ -184,7 +184,8 @@ public static class IDs { public static final UITexture[] TRANSFER_MODE_OVERLAY = slice("textures/gui/overlay/transfer_mode_overlay.png", 18, 18 * 3, 18, 18, true); - public static final UITexture[] FLUID_TRANSFER_MODE_OVERLAY = slice("textures/gui/overlay/fluid_transfer_mode_overlay.png", + public static final UITexture[] FLUID_TRANSFER_MODE_OVERLAY = slice( + "textures/gui/overlay/fluid_transfer_mode_overlay.png", 18, 18 * 3, 18, 18, true); // todo bronze/steel/primitive fluid slots? diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 6d6f399bfa9..a16c147e81c 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -1,6 +1,5 @@ package gregtech.common.covers; -import gregtech.api.GTValues; import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IControllable; @@ -9,14 +8,6 @@ import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverWithUI; import gregtech.api.cover.CoverableView; -import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.ModularUI; -import gregtech.api.gui.widgets.ImageCycleButtonWidget; -import gregtech.api.gui.widgets.ImageWidget; -import gregtech.api.gui.widgets.IncrementButtonWidget; -import gregtech.api.gui.widgets.LabelWidget; -import gregtech.api.gui.widgets.TextFieldWidget2; -import gregtech.api.gui.widgets.WidgetGroup; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.api.util.GTTransferUtils; diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoiding.java b/src/main/java/gregtech/common/covers/CoverFluidVoiding.java index f3f2c0b3c8b..64376ba0235 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoiding.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoiding.java @@ -3,11 +3,6 @@ import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; -import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.ModularUI; -import gregtech.api.gui.widgets.CycleButtonWidget; -import gregtech.api.gui.widgets.LabelWidget; -import gregtech.api.gui.widgets.WidgetGroup; import gregtech.api.util.GTTransferUtils; import gregtech.client.renderer.texture.Textures; import gregtech.common.covers.filter.FluidFilterContainer; diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index a773cc7c23b..f47f7dc6185 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -2,22 +2,9 @@ import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; -import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.ModularUI; -import gregtech.api.gui.Widget; -import gregtech.api.gui.widgets.CycleButtonWidget; -import gregtech.api.gui.widgets.ImageWidget; -import gregtech.api.gui.widgets.IncrementButtonWidget; -import gregtech.api.gui.widgets.LabelWidget; -import gregtech.api.gui.widgets.ServerWidgetGroup; -import gregtech.api.gui.widgets.SimpleTextWidget; -import gregtech.api.gui.widgets.SlotWidget; -import gregtech.api.gui.widgets.TextFieldWidget2; -import gregtech.api.gui.widgets.WidgetGroup; import gregtech.api.util.GTTransferUtils; import gregtech.client.renderer.texture.Textures; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; import net.minecraft.util.BlockRenderLayer; @@ -43,7 +30,6 @@ import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; import org.jetbrains.annotations.NotNull; -import java.util.function.Consumer; import java.util.function.Predicate; public class CoverFluidVoidingAdvanced extends CoverFluidVoiding { diff --git a/src/main/java/gregtech/common/covers/CoverItemVoiding.java b/src/main/java/gregtech/common/covers/CoverItemVoiding.java index f077a168330..635f3e34ba1 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoiding.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoiding.java @@ -3,11 +3,6 @@ import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; -import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.ModularUI; -import gregtech.api.gui.widgets.CycleButtonWidget; -import gregtech.api.gui.widgets.LabelWidget; -import gregtech.api.gui.widgets.WidgetGroup; import gregtech.client.renderer.texture.Textures; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java index abd420feebc..8cc8a86ef71 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java @@ -2,26 +2,13 @@ import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; -import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.ModularUI; -import gregtech.api.gui.Widget; -import gregtech.api.gui.widgets.CycleButtonWidget; -import gregtech.api.gui.widgets.ImageWidget; -import gregtech.api.gui.widgets.IncrementButtonWidget; -import gregtech.api.gui.widgets.LabelWidget; -import gregtech.api.gui.widgets.ServerWidgetGroup; -import gregtech.api.gui.widgets.SlotWidget; -import gregtech.api.gui.widgets.TextFieldWidget2; -import gregtech.api.gui.widgets.WidgetGroup; import gregtech.client.renderer.texture.Textures; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.MathHelper; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; @@ -42,7 +29,6 @@ import org.jetbrains.annotations.NotNull; import java.util.Map; -import java.util.function.Consumer; public class CoverItemVoidingAdvanced extends CoverItemVoiding { diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 82843b9fb61..55e7e593cc2 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -1,6 +1,5 @@ package gregtech.common.covers; -import gregtech.api.GTValues; import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IControllable; @@ -9,14 +8,6 @@ import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverWithUI; import gregtech.api.cover.CoverableView; -import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.ModularUI; -import gregtech.api.gui.widgets.CycleButtonWidget; -import gregtech.api.gui.widgets.ImageWidget; -import gregtech.api.gui.widgets.IncrementButtonWidget; -import gregtech.api.gui.widgets.LabelWidget; -import gregtech.api.gui.widgets.TextFieldWidget2; -import gregtech.api.gui.widgets.WidgetGroup; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.api.util.GTTransferUtils; @@ -63,7 +54,6 @@ import com.cleanroommc.modularui.widgets.layout.Column; import com.cleanroommc.modularui.widgets.layout.Row; import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; -import com.google.common.math.IntMath; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 0d54a352eac..180aced0a86 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -1,7 +1,5 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.utils.Color; - import gregtech.api.cover.CoverWithUI; import gregtech.api.gui.widgets.CycleButtonWidget; import gregtech.api.mui.GTGuiTextures; @@ -18,6 +16,7 @@ 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.GuiSyncManager; 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 4fa60df162a..b648e3c28c8 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java @@ -14,11 +14,9 @@ import net.minecraft.util.EnumHand; import net.minecraft.world.World; -import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.api.widget.Interactable; import com.cleanroommc.modularui.factory.HandGuiData; import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.value.sync.GuiSyncManager; public abstract class BaseFilterUIManager implements IItemBehaviour, ItemUIFactory { From 05e272093e516633e7c00cd4679e9e7f04104c60 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 20 Jan 2024 09:00:14 -0700 Subject: [PATCH 154/260] add shapeless recipe to clear filter nbt --- .../gregtech/loaders/recipe/MachineRecipeLoader.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/gregtech/loaders/recipe/MachineRecipeLoader.java b/src/main/java/gregtech/loaders/recipe/MachineRecipeLoader.java index cd7b866c272..67a29315718 100644 --- a/src/main/java/gregtech/loaders/recipe/MachineRecipeLoader.java +++ b/src/main/java/gregtech/loaders/recipe/MachineRecipeLoader.java @@ -1405,6 +1405,16 @@ private static void registerNBTRemoval() { ModHandler.addShapelessNBTClearingRecipe("data_module_nbt", TOOL_DATA_MODULE.getStackForm(), TOOL_DATA_MODULE.getStackForm()); + // Filters + ModHandler.addShapelessNBTClearingRecipe("clear_item_filter", + ITEM_FILTER.getStackForm(), ITEM_FILTER); + ModHandler.addShapelessNBTClearingRecipe("clear_fluid_filter", + FLUID_FILTER.getStackForm(), FLUID_FILTER); + ModHandler.addShapelessNBTClearingRecipe("clear_smart_filter", + SMART_FILTER.getStackForm(), SMART_FILTER); + ModHandler.addShapelessNBTClearingRecipe("clear_oredict_filter", + ORE_DICTIONARY_FILTER.getStackForm(), ORE_DICTIONARY_FILTER); + // Jetpacks ModHandler.addShapelessRecipe("fluid_jetpack_clear", SEMIFLUID_JETPACK.getStackForm(), SEMIFLUID_JETPACK.getStackForm()); From 19fa18259653042e73e7262bd2c13bde377c6f3d Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 21 Jan 2024 21:18:54 -0700 Subject: [PATCH 155/260] add lang for item filter behavior fix text color --- .../gregtech/common/covers/filter/SimpleItemFilter.java | 9 +++++++-- src/main/resources/assets/gregtech/lang/en_us.lang | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index e58ab048277..68002891bde 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -16,6 +16,7 @@ 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.GuiSyncManager; import com.cleanroommc.modularui.widget.Widget; @@ -103,8 +104,12 @@ public void initUI(Consumer widgetGroup) { "XXX", "XXX") .key('X', index -> new ItemSlot() - .tooltip(tooltip -> tooltip.setAutoUpdate(true)) + .tooltip(tooltip -> { + tooltip.setAutoUpdate(true); + tooltip.textColor(Color.GREY.main); + }) .tooltipBuilder(tooltip -> { + tooltip.addLine(IKey.lang("cover.item_filter.config_amount")); int count = this.filterReader.getItemsNbt() .getCompoundTagAt(index) .getInteger(SimpleItemFilterReader.COUNT); @@ -118,7 +123,7 @@ public void initUI(Consumer widgetGroup) { if (onlyAmountChanged && !init) { markDirty(); } - }))) + })).syncHandler("asdf")) .build().marginRight(4)) .child(new Column().width(18).coverChildren() .child(super.createWidgets(syncManager)) diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 6d828255dc5..6e44d144dae 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -1252,6 +1252,7 @@ cover.item_filter.ignore_damage.enabled=Ignore Damage cover.item_filter.ignore_damage.disabled=Respect Damage cover.item_filter.ignore_nbt.enabled=Ignore NBT cover.item_filter.ignore_nbt.disabled=Respect NBT +cover.item_filter.config_amount=Scroll wheel up increases amount, down decreases.\nShift[§6x4§r], Ctrl[§ex16§r], Alt[§ax64§r]\nRight click increases amount, left click decreases.\nShift Left-Click to clear cover.voiding.voiding_mode.void_any=Void Matching cover.voiding.voiding_mode.void_overflow=Void Overflow From 018a9be525fc341f86cd8aa82e722d0859b83173 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 21 Jan 2024 21:31:15 -0700 Subject: [PATCH 156/260] i did not mean to commit that --- .../java/gregtech/common/covers/filter/SimpleItemFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 68002891bde..aa05b3f8b5c 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -123,7 +123,7 @@ public void initUI(Consumer widgetGroup) { if (onlyAmountChanged && !init) { markDirty(); } - })).syncHandler("asdf")) + }))) .build().marginRight(4)) .child(new Column().width(18).coverChildren() .child(super.createWidgets(syncManager)) From 91cb4a9ffa0b0c867d2aea9ae54c3558de2bcca3 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 21 Jan 2024 21:50:37 -0700 Subject: [PATCH 157/260] remove PhantomItemSlot.java, it's not necessary --- .../api/mui/slot/PhantomItemSlot.java | 32 ------------------- .../covers/filter/SimpleItemFilter.java | 6 ++-- 2 files changed, 4 insertions(+), 34 deletions(-) delete mode 100644 src/main/java/gregtech/api/mui/slot/PhantomItemSlot.java diff --git a/src/main/java/gregtech/api/mui/slot/PhantomItemSlot.java b/src/main/java/gregtech/api/mui/slot/PhantomItemSlot.java deleted file mode 100644 index cf5e2d428c9..00000000000 --- a/src/main/java/gregtech/api/mui/slot/PhantomItemSlot.java +++ /dev/null @@ -1,32 +0,0 @@ -package gregtech.api.mui.slot; - -import net.minecraftforge.items.IItemHandler; - -import com.cleanroommc.modularui.widgets.slot.ModularSlot; - -import java.util.function.Supplier; - -public class PhantomItemSlot extends ModularSlot { - - protected Supplier maxStackSizer; - - public PhantomItemSlot(IItemHandler itemHandler, int index, Supplier maxStackSizer) { - super(itemHandler, index); - this.maxStackSizer = maxStackSizer; - } - - @Override - public int getSlotStackLimit() { - return maxStackSizer.get(); - } - - @Override - public boolean isPhantom() { - return true; - } - - @Override - public boolean isIgnoreMaxStackSize() { - return true; - } -} diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index aa05b3f8b5c..84cb8007b8d 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -6,7 +6,6 @@ import gregtech.api.gui.widgets.ToggleButtonWidget; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; -import gregtech.api.mui.slot.PhantomItemSlot; import gregtech.api.util.TextFormattingUtil; import net.minecraft.item.ItemStack; @@ -19,6 +18,7 @@ import com.cleanroommc.modularui.utils.Color; import com.cleanroommc.modularui.value.sync.BooleanSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.value.sync.SyncHandlers; import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.CycleButtonWidget; import com.cleanroommc.modularui.widgets.ItemSlot; @@ -90,6 +90,7 @@ public void initUI(Consumer widgetGroup) { return GTGuis.createPanel("simple_item_filter", 176, 166); } + @SuppressWarnings("UnstableApiUsage") @Override public @NotNull Widget createWidgets(GuiSyncManager syncManager) { SlotGroup filterInventory = new SlotGroup("filter_inv", 3, 1000, true); @@ -117,7 +118,8 @@ public void initUI(Consumer widgetGroup) { tooltip.addLine( IKey.format("Count: %s", TextFormattingUtil.formatNumbers(count))); }) - .slot(new PhantomItemSlot(this.filterReader, index, this::getMaxTransferSize) + .slot(SyncHandlers.phantomItemSlot(this.filterReader, index) + .ignoreMaxStackSize(true) .slotGroup(filterInventory) .changeListener((newItem, onlyAmountChanged, client, init) -> { if (onlyAmountChanged && !init) { From 9a595902e720d15aa3ff3be596e8cd4d0b66fe70 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 22 Jan 2024 10:21:41 -0700 Subject: [PATCH 158/260] add distribution mode for conveyors and robot arms fix `button_distribution_mode.png` to be an overlay --- .../java/gregtech/api/mui/GTGuiTextures.java | 4 ++++ .../gregtech/common/covers/CoverConveyor.java | 17 ++++++++++++++++- .../common/covers/CoverRoboticArm.java | 2 +- .../resources/assets/gregtech/lang/en_us.lang | 7 ++++--- .../gui/widget/button_distribution_mode.png | Bin 765 -> 652 bytes 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/api/mui/GTGuiTextures.java b/src/main/java/gregtech/api/mui/GTGuiTextures.java index 1972b25da71..80feca8e803 100644 --- a/src/main/java/gregtech/api/mui/GTGuiTextures.java +++ b/src/main/java/gregtech/api/mui/GTGuiTextures.java @@ -188,6 +188,10 @@ public static class IDs { "textures/gui/overlay/fluid_transfer_mode_overlay.png", 18, 18 * 3, 18, 18, true); + public static final UITexture[] DISTRIBUTION_MODE_OVERLAY = slice( + "textures/gui/widget/button_distribution_mode.png", + 16, 48, 16, 16, true); + // todo bronze/steel/primitive fluid slots? // SLOT OVERLAYS diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index a16c147e81c..2a8dbf56e0b 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -503,7 +503,7 @@ public boolean usesMui2() { @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { - var panel = GTGuis.createPanel(this, 176, 192); + var panel = GTGuis.createPanel(this, 176, 192 + 18); getItemFilterContainer().setMaxTransferSize(getMaxStackSize()); @@ -528,8 +528,12 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g StringSyncValue formattedThroughput = new StringSyncValue(throughput::getStringValue, throughput::setStringValue); + EnumSyncValue distributionMode = new EnumSyncValue<>(DistributionMode.class, + this::getDistributionMode, this::setDistributionMode); + guiSyncManager.syncValue("manual_io", manualIOmode); guiSyncManager.syncValue("conveyor_mode", conveyorMode); + guiSyncManager.syncValue("distribution_mode", distributionMode); guiSyncManager.syncValue("throughput", throughput); if (createThroughputRow()) @@ -577,6 +581,13 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY) .build()); + if (createDistributionModeRow()) + column.child(new EnumRowBuilder<>(DistributionMode.class) + .value(distributionMode) + .overlay(16, GTGuiTextures.DISTRIBUTION_MODE_OVERLAY) + .lang("cover.conveyor.distribution.name") + .build()); + return column; } @@ -596,6 +607,10 @@ protected boolean createConveyorModeRow() { return true; } + protected boolean createDistributionModeRow() { + return true; + } + protected int getMaxStackSize() { return 1; } diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index 4f13a10c91e..12570cddc5a 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -189,7 +189,7 @@ private boolean shouldDisplayAmountSlider() { @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { - return super.buildUI(guiData, guiSyncManager).height(192 + 36); + return super.buildUI(guiData, guiSyncManager).height(192 + 36 + 18 + 2); } @Override diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 6e44d144dae..77bbf6912e5 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -1285,9 +1285,10 @@ cover.conveyor.title=Conveyor Cover Settings (%s) cover.conveyor.transfer_rate=§7items/sec cover.conveyor.mode.export=Mode: Export cover.conveyor.mode.import=Mode: Import -cover.conveyor.distribution.round_robin_enhanced=Distribution Mode/n§bEnhanced Round Robin§r/n§7Splits items equally to all inventories -cover.conveyor.distribution.round_robin=Distribution Mode/n§bRound Robin§r with Priority/n§7Tries to split items equally to inventories -cover.conveyor.distribution.first_insert=Distribution Mode/n§bFirst Insert§r/n§7Will insert into the first inventory it finds +cover.conveyor.distribution.name=Distribution Mode +cover.conveyor.distribution.round_robin_enhanced=§bEnhanced Round Robin§r\n§7Splits items equally to all inventories +cover.conveyor.distribution.round_robin=§bRound Robin§r with Priority\n§7Tries to split items equally to inventories +cover.conveyor.distribution.first_insert=§bFirst Insert§r\n§7Will insert into the first inventory it finds cover.conveyor.blocks_input.enabled=If enabled, items will not be inserted when cover is set to pull items from the inventory into pipe./n§aEnabled cover.conveyor.blocks_input.disabled=If enabled, items will not be inserted when cover is set to pull items from the inventory into pipe./n§cDisabled cover.universal.manual_import_export.mode.disabled=Manual I/O: Disabled diff --git a/src/main/resources/assets/gregtech/textures/gui/widget/button_distribution_mode.png b/src/main/resources/assets/gregtech/textures/gui/widget/button_distribution_mode.png index 86f6a27bd53c097af0603de0d7e45f4651dc6408..9dbdac4862fbc84eaac41230d29aeb409b504195 100644 GIT binary patch delta 262 zcmV+h0r~#@1&jqDiBL{Q4GJ0x0000DNk~Le0000G0000m2nGNE02p8TSFs_H0e{6w zL_t(YiS3p>62c%5h2N@2$Vt+8lUSzbD51Ac>rH5KlAJ+o3e&E!hm_NvNdPeS9kBtnjyNk$+c?CHBkskS5EpgsJCbUlF)pjm2S_w} zev&~RAgLDCU~mS5Gf90CEm_1ps9Q_WCeT3h1EAJX{u4j&0Ohyqofi8+*oBKT9sq9V zDERLtq(y+(hJy`Arj^YK+o(8^v7Rl-+uens8w6L> zPca2baTa()7BevL9RXp+soH$fKtc8rPhVH|r#u`?+UilyD}{kVe>`0rLn02poo>k2 zWFXR3KjHC?^5TztZ`Qr3;D}2PFTbo^(V*7Hmp9MlbqG_?#wkp_-&9r3&i_>L{%_`f z1|Pvw&H@ve>KlC2pU&ym^5S4*@Te_+ZJYS)*Q3(i)$ec4*|52A9arg^^X?1>-bOp^ z-59ymbF)!u>vH+&U&G}+UYBm3WOsJPhMSY(ZfDJ1?Czq)7n@tM@d7%{(F zHtJ80@D*HTP`GIPrSP_g=H$$%XLGK9zd7F}#Vf_D!{_6(O}h5Jbv>G*f?7)2XOB$j zJ3alZ?7AqBY|5!5AI{~6{Czm@PbpcWxYtM0YWs$no9@(~+NYDa*maqYxPHCE)n#+% SGOPoJ1cRrmpUXO@geCylK9-gM From 3c9cabd0684114b724bfa377765f3f730ad0f293 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 22 Jan 2024 10:43:35 -0700 Subject: [PATCH 159/260] fix distribution appearing on item voiding covers --- src/main/java/gregtech/common/covers/CoverItemVoiding.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/gregtech/common/covers/CoverItemVoiding.java b/src/main/java/gregtech/common/covers/CoverItemVoiding.java index 635f3e34ba1..977968bbab1 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoiding.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoiding.java @@ -104,6 +104,11 @@ protected boolean createConveyorModeRow() { return false; } + @Override + protected boolean createDistributionModeRow() { + return false; + } + @Override public void renderCover(CCRenderState renderState, Matrix4 translation, IVertexOperation[] pipeline, Cuboid6 plateBox, BlockRenderLayer layer) { From ca5b5802da91c82d671c857182d00718e2479ecd Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 22 Jan 2024 10:47:03 -0700 Subject: [PATCH 160/260] actually set the filter correctly for filter covers --- .../java/gregtech/common/covers/CoverFluidFilter.java | 9 +++------ .../java/gregtech/common/covers/CoverItemFilter.java | 8 ++------ 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 9d1275e7ac3..ac2d81589d7 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -77,16 +77,13 @@ public void setFilterMode(FluidFilterMode filterMode) { public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFacing side, @Nullable EntityPlayer player, @NotNull ItemStack itemStack) { super.onAttachment(coverableView, side, player, itemStack); - this.fluidFilterContainer.setFilter(FilterTypeRegistry.getFluidFilterForStack(itemStack)); + this.fluidFilterContainer.setFilter(FilterTypeRegistry.getFluidFilterForStack(GTUtility.copy(1, itemStack))); + this.fluidFilterContainer.setBucketOnly(true); } @Override public @NotNull ItemStack getPickItem() { - if (this.fluidFilterContainer.hasFilter()) { - var stack = getFluidFilter().getContainerStack(); - return GTUtility.copy(1, stack); - } - return super.getPickItem(); + return getFluidFilter().getContainerStack(); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 8e6b35c4d62..fbc36680ffd 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -64,17 +64,13 @@ public CoverItemFilter(@NotNull CoverDefinition definition, @NotNull CoverableVi public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFacing side, @Nullable EntityPlayer player, @NotNull ItemStack itemStack) { super.onAttachment(coverableView, side, player, itemStack); - this.itemFilter.setFilter(FilterTypeRegistry.getItemFilterForStack(itemStack.copy())); + this.itemFilter.setFilter(FilterTypeRegistry.getItemFilterForStack(GTUtility.copy(1, itemStack))); this.itemFilter.setMaxTransferSize(1); } @Override public @NotNull ItemStack getPickItem() { - if (this.itemFilter.hasFilter()) { - var stack = getItemFilter().getContainerStack(); - return GTUtility.copy(1, stack); - } - return super.getPickItem(); + return getItemFilter().getContainerStack(); } @Override From 18250146ac14c3578d37218ffe2785501929c09b Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 22 Jan 2024 10:47:22 -0700 Subject: [PATCH 161/260] sync value --- src/main/java/gregtech/common/covers/CoverFluidFilter.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index ac2d81589d7..92b61889f89 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -155,6 +155,8 @@ public boolean usesMui2() { public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { var filteringMode = new EnumSyncValue<>(FluidFilterMode.class, this::getFilterMode, this::setFilterMode); + guiSyncManager.syncValue("filtering_mode", filteringMode); + return getFluidFilter().createPanel(guiSyncManager) .size(176, 194).padding(7) .child(CoverWithUI.createTitleRow(getPickItem())) From 9581ea5282818dadc54e0f6cec51ea85eb21781c Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 22 Jan 2024 10:50:14 -0700 Subject: [PATCH 162/260] remove deprecated methods --- .../gregtech/common/covers/CoverFluidFilter.java | 14 -------------- .../gregtech/common/covers/CoverItemFilter.java | 15 --------------- 2 files changed, 29 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 92b61889f89..6c39dfd2d4e 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -132,20 +132,6 @@ public boolean canPipePassThrough() { return EnumActionResult.SUCCESS; } - public ModularUI createUI(EntityPlayer player) { - WidgetGroup fluidFilterGroup = new WidgetGroup(); - fluidFilterGroup.addWidget(new LabelWidget(10, 5, "cover.fluid_filter.title")); - fluidFilterGroup.addWidget(new CycleButtonWidget(10, 20, 110, 20, - GTUtility.mapToString(FluidFilterMode.values(), (it) -> it.localeName), () -> this.filterMode.ordinal(), - (newMode) -> this.setFilterMode(FluidFilterMode.values()[newMode]))); - this.fluidFilterContainer.initUI(45, fluidFilterGroup::addWidget); - this.fluidFilterContainer.blacklistUI(45, fluidFilterGroup::addWidget, () -> true); - return ModularUI.builder(GuiTextures.BACKGROUND, 176, 105 + 82) - .widget(fluidFilterGroup) - .bindPlayerInventory(player.inventory, GuiTextures.SLOT, 7, 105) - .build(this, player); - } - @Override public boolean usesMui2() { return true; diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index fbc36680ffd..5cb133ecf53 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -127,21 +127,6 @@ public boolean testItemStack(ItemStack stack) { return itemFilter.test(stack); } - @Override - public ModularUI createUI(EntityPlayer player) { - gregtech.api.gui.widgets.WidgetGroup filterGroup = new gregtech.api.gui.widgets.WidgetGroup(); - filterGroup.addWidget(new gregtech.api.gui.widgets.LabelWidget(10, 5, titleLocale)); - filterGroup.addWidget(new gregtech.api.gui.widgets.CycleButtonWidget(10, 20, 110, 20, - GTUtility.mapToString(ItemFilterMode.values(), it -> it.localeName), - () -> filterMode.ordinal(), (newMode) -> setFilterMode(ItemFilterMode.values()[newMode]))); - this.itemFilter.initFilterUI(45, filterGroup::addWidget); - this.itemFilter.blacklistUI(45, filterGroup::addWidget, () -> true); - return ModularUI.builder(GuiTextures.BACKGROUND, 176, 105 + 82) - .widget(filterGroup) - .bindPlayerInventory(player.inventory, GuiTextures.SLOT, 7, 105) - .build(this, player); - } - @Override public boolean usesMui2() { return true; From f4a9cb5c0b82b25b6ce354e956ac4d5b205cb949 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 22 Jan 2024 11:00:21 -0700 Subject: [PATCH 163/260] add voiding mode overlay --- src/main/java/gregtech/api/mui/GTGuiTextures.java | 4 ++++ .../common/covers/CoverFluidVoidingAdvanced.java | 3 ++- .../common/covers/CoverItemVoidingAdvanced.java | 3 ++- .../textures/gui/overlay/voiding_mode_overlay.png | Bin 0 -> 232 bytes 4 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/assets/gregtech/textures/gui/overlay/voiding_mode_overlay.png diff --git a/src/main/java/gregtech/api/mui/GTGuiTextures.java b/src/main/java/gregtech/api/mui/GTGuiTextures.java index 80feca8e803..ae84af4d4b3 100644 --- a/src/main/java/gregtech/api/mui/GTGuiTextures.java +++ b/src/main/java/gregtech/api/mui/GTGuiTextures.java @@ -192,6 +192,10 @@ public static class IDs { "textures/gui/widget/button_distribution_mode.png", 16, 48, 16, 16, true); + public static final UITexture[] VOIDING_MODE_OVERLAY = slice( + "textures/gui/overlay/voiding_mode_overlay.png", + 16, 32, 16, 16, true); + // todo bronze/steel/primitive fluid slots? // SLOT OVERLAYS diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index f47f7dc6185..d7ee5972359 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -2,6 +2,7 @@ import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; +import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.GTTransferUtils; import gregtech.client.renderer.texture.Textures; @@ -148,7 +149,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa .child(new EnumRowBuilder<>(VoidingMode.class) .value(voidingMode) .lang("cover.voiding.voiding_mode") - // .overlay(GTGuiTextures.TRANSFER_MODE_OVERLAY) todo voiding mode overlay + .overlay(16, GTGuiTextures.VOIDING_MODE_OVERLAY) .build()) .child(new EnumRowBuilder<>(BucketMode.class) .value(bucketMode) diff --git a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java index 8cc8a86ef71..4061e41f175 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java @@ -2,6 +2,7 @@ import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; +import gregtech.api.mui.GTGuiTextures; import gregtech.client.renderer.texture.Textures; import net.minecraft.item.ItemStack; @@ -109,7 +110,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g .child(new EnumRowBuilder<>(VoidingMode.class) .value(voidingMode) .lang("cover.voiding.voiding_mode") - // .overlay(GTGuiTextures.TRANSFER_MODE_OVERLAY) todo voiding mode overlay + .overlay(16, GTGuiTextures.VOIDING_MODE_OVERLAY) .build()) .child(new Row().right(0).coverChildrenHeight() .child(transferTextField diff --git a/src/main/resources/assets/gregtech/textures/gui/overlay/voiding_mode_overlay.png b/src/main/resources/assets/gregtech/textures/gui/overlay/voiding_mode_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..d948e2c551c9a50cc113d941ba48d3b8ce9c60e2 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4au#{IIEHw1 zCMPTq`r*G$PE2C`mMv3MoOkWsEhzy6Gde;$xHlvSi`<`c^24Qat2zJu)^g9jcw}dT zfW$gB1$KooeG@}MJYXGI&rUMXSW7(f@>5vbJ0aMPxt064w8v% dJT;XJ48pbA6{mI6(txgI@O1TaS?83{1OQZeP(T0x literal 0 HcmV?d00001 From 76eae6ea5f2d2004d33c9e7f1a92dfb969aa67e2 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 22 Jan 2024 11:04:38 -0700 Subject: [PATCH 164/260] sboblss --- src/main/java/gregtech/common/covers/CoverFluidFilter.java | 5 ----- src/main/java/gregtech/common/covers/CoverItemFilter.java | 2 -- 2 files changed, 7 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 6c39dfd2d4e..c8be4235ece 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -5,11 +5,6 @@ import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverWithUI; import gregtech.api.cover.CoverableView; -import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.ModularUI; -import gregtech.api.gui.widgets.CycleButtonWidget; -import gregtech.api.gui.widgets.LabelWidget; -import gregtech.api.gui.widgets.WidgetGroup; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; import gregtech.common.covers.filter.FilterTypeRegistry; diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 5cb133ecf53..936e9a73c5d 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -5,8 +5,6 @@ import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverWithUI; import gregtech.api.cover.CoverableView; -import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.ModularUI; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; import gregtech.common.covers.filter.FilterTypeRegistry; From df24355d17b081435030422dd07043ed6d37b5a9 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 27 Jan 2024 10:43:26 -0700 Subject: [PATCH 165/260] remove bucket only move capacity to fluid filter reader override `controlsAmount()` try fix issues with new impl probably breaks item filters --- .../common/covers/CoverEnderFluidLink.java | 3 +- .../common/covers/CoverFluidFilter.java | 2 +- .../common/covers/CoverFluidRegulator.java | 5 +- .../covers/CoverFluidVoidingAdvanced.java | 1 - .../gregtech/common/covers/CoverPump.java | 4 +- .../common/covers/filter/FluidFilter.java | 13 +--- .../covers/filter/FluidFilterContainer.java | 6 -- .../covers/filter/SimpleFluidFilter.java | 77 +++++++++++-------- .../filter/readers/BaseFilterReader.java | 2 +- 9 files changed, 53 insertions(+), 60 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java b/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java index ab155cd0755..9a607ace031 100644 --- a/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java +++ b/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java @@ -206,8 +206,7 @@ public boolean usesMui2() { public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { var panel = GTGuis.createPanel(this, 176, 192); - getFluidFilterContainer().setMaxTransferSize(1000); - getFluidFilterContainer().setBucketOnly(true); + getFluidFilterContainer().setMaxTransferSize(1); return panel.child(CoverWithUI.createTitleRow(getPickItem())) .child(createWidgets(panel, guiSyncManager)) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index c8be4235ece..836a7b7abb3 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -73,7 +73,7 @@ public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFaci @Nullable EntityPlayer player, @NotNull ItemStack itemStack) { super.onAttachment(coverableView, side, player, itemStack); this.fluidFilterContainer.setFilter(FilterTypeRegistry.getFluidFilterForStack(GTUtility.copy(1, itemStack))); - this.fluidFilterContainer.setBucketOnly(true); + this.fluidFilterContainer.setMaxTransferSize(1); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 3fe67a77ded..1024da339c9 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -224,7 +224,6 @@ private static Map collectDistinctFluids(IFluidHandler hand public void setTransferMode(TransferMode transferMode) { if (this.transferMode != transferMode) { this.transferMode = transferMode; - this.fluidFilterContainer.setBucketOnly(transferMode == TransferMode.TRANSFER_ANY); this.fluidFilterContainer.setMaxTransferSize(getMaxTransferRate()); this.markDirty(); } @@ -279,7 +278,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager syncMa @Override public int getMaxTransferRate() { return switch (this.transferMode) { - case TRANSFER_ANY -> 0; + case TRANSFER_ANY -> 1; case TRANSFER_EXACT -> maxFluidTransferRate; case KEEP_EXACT -> Integer.MAX_VALUE; }; @@ -295,7 +294,6 @@ public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.readInitialSyncData(packetBuffer); this.transferMode = packetBuffer.readEnumValue(TransferMode.class); - getFluidFilterContainer().setBucketOnly(this.transferMode == TransferMode.TRANSFER_ANY); } @Override @@ -309,7 +307,6 @@ public void writeToNBT(@NotNull NBTTagCompound tagCompound) { public void readFromNBT(@NotNull NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); this.transferMode = TransferMode.values()[tagCompound.getInteger("TransferMode")]; - this.fluidFilterContainer.setBucketOnly(transferMode == TransferMode.TRANSFER_ANY); // legacy NBT tag if (!tagCompound.hasKey("filterv2") && tagCompound.hasKey("TransferAmount")) { if (this.fluidFilterContainer.hasFilter()) { diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index d7ee5972359..c218a84ed60 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -105,7 +105,6 @@ public int getTransferAmount() { public void setVoidingMode(VoidingMode transferMode) { this.voidingMode = transferMode; - this.fluidFilterContainer.setBucketOnly(transferMode == VoidingMode.VOID_ANY); this.fluidFilterContainer.setMaxTransferSize(getMaxTransferRate()); this.markDirty(); } diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 55e7e593cc2..bf3b2e39e7e 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -287,7 +287,7 @@ protected boolean createPumpModeRow() { } protected int getMaxTransferRate() { - return 1000; + return 1; } @Override @@ -320,7 +320,6 @@ public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.readInitialSyncData(packetBuffer); this.pumpMode = packetBuffer.readEnumValue(PumpMode.class); getFluidFilterContainer().readInitialSyncData(packetBuffer); - getFluidFilterContainer().setBucketOnly(true); } @Override @@ -396,7 +395,6 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { this.isWorkingAllowed = tagCompound.getBoolean("WorkingAllowed"); this.manualImportExportMode = ManualImportExportMode.values()[tagCompound.getInteger("ManualImportExportMode")]; this.fluidFilterContainer.deserializeNBT(tagCompound.getCompoundTag("Filter")); - this.fluidFilterContainer.setBucketOnly(true); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index 8ac98465f6b..4f02c60f559 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -62,10 +62,6 @@ protected static MatchResult createResult(boolean matched, FluidStac .addTooltip(1, IKey.lang("cover.filter.blacklist.enabled"))); } - public final void setBucketOnly(boolean bucketOnly) { - this.filterReader.setBucketOnly(bucketOnly); - } - public abstract ItemStack getContainerStack(); public boolean showGlobalTransferLimitSlider() { @@ -123,8 +119,8 @@ public final void setBucketOnly(boolean bucketOnly) { getStackTag().setBoolean(BUCKET_ONLY, bucketOnly); } - public final boolean isBucketOnly() { - return getStackTag().getBoolean(BUCKET_ONLY) || isBlacklistFilter(); + public final boolean shouldShowAmount() { + return getMaxTransferRate() > 1; } @Override @@ -146,10 +142,5 @@ public FluidStack getFluidStack(int i) { } public abstract IFluidTank getFluidTank(int i); - - @Override - public void setMaxTransferRate(int transferRate) { - super.setMaxTransferRate(isBucketOnly() ? 1000 : transferRate); - } } } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 6ee2001c4d5..35225c84bcd 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -132,12 +132,6 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) .left(36).right(0).height(18)); } - public void setBucketOnly(boolean bucketOnly) { - if (hasFilter()) { - getFilter().setBucketOnly(bucketOnly); - } - } - @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { var stack = ItemStack.EMPTY; diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 0b471bfaee7..9f0e5bacb76 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -142,13 +142,23 @@ public int getTransferLimit(FluidStack fluidStack, int transferSize) { protected static class SimpleFluidFilterReader extends BaseFluidFilterReader { protected WritableFluidTank[] fluidTanks; + protected static final String CAPACITY = "Capacity"; public SimpleFluidFilterReader(ItemStack container, int slots) { super(container, slots); fluidTanks = new WritableFluidTank[slots]; for (int i = 0; i < fluidTanks.length; i++) { - fluidTanks[i] = new WritableFluidTank(this, getItemsNbt().getCompoundTagAt(i), 1000); + fluidTanks[i] = new WritableFluidTank(this, getItemsNbt().getCompoundTagAt(i)); } + setCapacity(getStackTag().hasKey(CAPACITY) ? getCapacity() : 1000); + } + + public void setCapacity(int capacity) { + getStackTag().setInteger(CAPACITY, capacity); + } + + public int getCapacity() { + return getStackTag().getInteger(CAPACITY); } public WritableFluidTank getFluidTank(int i) { @@ -167,8 +177,8 @@ public void onTransferRateChange() { var stack = getFluidStack(i); if (stack == null) continue; getFluidTank(i).setFluidAmount(Math.min(stack.amount, getMaxTransferRate())); - getFluidTank(i).setCapacity(getMaxTransferRate()); } + setCapacity(getMaxTransferRate()); } } @@ -177,24 +187,21 @@ public static class WritableFluidTank extends FluidTank { private final NBTTagCompound fluidTank; private final SimpleFluidFilterReader filterReader; protected static final String FLUID_AMOUNT = "Amount"; - protected static final String CAPACITY = "Capacity"; protected static final String FLUID = "Fluid"; protected static final String EMPTY = "Empty"; - protected WritableFluidTank(SimpleFluidFilterReader filterReader, NBTTagCompound fluidTank, - int initialCapacity) { - super(initialCapacity); + protected WritableFluidTank(SimpleFluidFilterReader filterReader, NBTTagCompound fluidTank) { + super(0); this.filterReader = filterReader; this.fluidTank = fluidTank; - setCapacity(fluidTank.hasKey(CAPACITY) ? fluidTank.getInteger(CAPACITY) : initialCapacity); - } - - public void setCapacity(int capacity) { - this.fluidTank.setInteger(CAPACITY, capacity); } public void setFluidAmount(int amount) { - getFluidTag().setInteger(FLUID_AMOUNT, amount); + if (amount <= 0) { + setFluid(null); + } else { + getFluidTag().setInteger(FLUID_AMOUNT, amount); + } } public boolean isEmpty() { @@ -223,8 +230,8 @@ public void setFluid(@Nullable FluidStack stack) { } } - protected boolean isBucketOnly() { - return filterReader.isBucketOnly(); + protected boolean showAmount() { + return filterReader.shouldShowAmount(); } @Override @@ -234,7 +241,7 @@ public int getFluidAmount() { @Override public int getCapacity() { - return this.fluidTank.getInteger(CAPACITY); + return this.filterReader.getCapacity(); } @SuppressWarnings("DataFlowIssue") @@ -242,9 +249,9 @@ public int getCapacity() { public int fill(FluidStack resource, boolean doFill) { if (isEmpty() || !getFluid().isFluidEqual(resource)) { setFluid(resource); - if (isBucketOnly()) setFluidAmount(1000); + if (!showAmount()) setFluidAmount(1); return resource.amount; - } else if (!isBucketOnly()) { + } else if (showAmount()) { var fluid = getFluid(); int accepted = Math.min(resource.amount, getCapacity() - fluid.amount); fluid.amount += accepted; @@ -258,21 +265,12 @@ public int fill(FluidStack resource, boolean doFill) { @Override public FluidStack drain(int maxDrain, boolean doDrain) { if (isEmpty()) return null; - var fluid = getFluid(); - fluid.amount = Math.min(fluid.amount, maxDrain); + FluidStack fluid = getFluid(); - var copy = getFluid(); - copy.amount -= fluid.amount; + fluid.amount -= Math.min(fluid.amount, maxDrain); - if (isBucketOnly()) { - setFluid(null); - } else { - if (copy.amount == 0) - setFluid(null); - else - setFluid(copy); + setFluidAmount(fluid.amount); - } return fluid; } } @@ -352,7 +350,7 @@ public void tryClickPhantom(MouseData mouseData) { } } else if (this.lastStoredPhantomFluid != null) { FluidStack toFill = this.lastStoredPhantomFluid.copy(); - toFill.amount = this.controlsAmount() ? 1000 : 1; + toFill.amount = this.controlsAmount() ? 1 : toFill.amount; this.getFluidTank().fill(toFill, true); } } @@ -366,6 +364,15 @@ public void tryClickPhantom(MouseData mouseData) { public void tryScrollPhantom(MouseData mouseData) { FluidStack currentFluid = this.getFluidTank().getFluid(); int amount = mouseData.mouseButton; + if (!this.controlsAmount()) { + var fluid = getFluidTank().getFluid(); + int newAmt = amount == 1 ? 1 : 0; + if (fluid != null && fluid.amount != newAmt) { + fluid.amount = newAmt; + setValue(fluid, true, true); + return; + } + } if (mouseData.shift) { amount *= 10; } @@ -384,7 +391,7 @@ public void tryScrollPhantom(MouseData mouseData) { this.setValue(this.getFluidTank().getFluid(), false, true); return; } - if (amount > 0 && this.controlsAmount()) { + if (amount > 0) { FluidStack toFill = currentFluid.copy(); toFill.amount = amount; this.getFluidTank().fill(toFill, true); @@ -393,5 +400,13 @@ public void tryScrollPhantom(MouseData mouseData) { } this.setValue(this.getFluidTank().getFluid(), false, true); } + + @Override + public boolean controlsAmount() { + if (getFluidTank() instanceof WritableFluidTank writableFluidTank) { + return writableFluidTank.showAmount(); + } + return super.controlsAmount(); + } } } 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 3c67f351d75..9bee1a2b9e4 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -50,7 +50,7 @@ public void setMaxTransferRate(int transferRate) { } public int getMaxTransferRate() { - return this.maxTransferRate; + return isBlacklistFilter() ? 1 : this.maxTransferRate; } protected NBTTagCompound getStackTag() { From df7b3928670509bc9be319f44dc5ee77190affb6 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 27 Jan 2024 10:44:30 -0700 Subject: [PATCH 166/260] rename variable to be generic --- .../covers/filter/BaseFilterContainer.java | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index f1e7baf4139..977fa8f9aaa 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -17,7 +17,7 @@ public abstract class BaseFilterContainer> implements INB private final IDirtyNotifiable dirtyNotifiable; private int maxTransferSize = 1; - private T currentItemFilter; + private T currentFilter; private Runnable onFilterInstanceChange; private int transferSize; protected final FilterSlotHandler filterInventory; @@ -32,27 +32,27 @@ public ItemStackHandler getFilterInventory() { } public int getMaxTransferSize() { - return hasFilter() ? currentItemFilter.getMaxTransferSize() : this.maxTransferSize; + return hasFilter() ? currentFilter.getMaxTransferSize() : this.maxTransferSize; } public void setMaxTransferSize(int maxTransferSize) { this.maxTransferSize = MathHelper.clamp(maxTransferSize, 1, Integer.MAX_VALUE); this.transferSize = MathHelper.clamp(this.transferSize, 1, this.maxTransferSize); - if (hasFilter()) currentItemFilter.setMaxTransferSize(this.maxTransferSize); + if (hasFilter()) currentFilter.setMaxTransferSize(this.maxTransferSize); } public boolean hasFilter() { - return currentItemFilter != null; + return currentFilter != null; } public T getFilter() { - return currentItemFilter; + return currentFilter; } public final void setFilter(T newFilter) { - this.currentItemFilter = newFilter; - if (currentItemFilter != null) { - currentItemFilter.setDirtyNotifiable(dirtyNotifiable); + this.currentFilter = newFilter; + if (currentFilter != null) { + currentFilter.setDirtyNotifiable(dirtyNotifiable); } if (onFilterInstanceChange != null) { this.onFilterInstanceChange.run(); @@ -69,14 +69,14 @@ public void setOnFilterInstanceChange(Runnable onFilterInstanceChange) { public boolean showGlobalTransferLimitSlider() { return getMaxTransferSize() > 0 && - (isBlacklistFilter() || !hasFilter() || currentItemFilter.showGlobalTransferLimitSlider()); + (isBlacklistFilter() || !hasFilter() || currentFilter.showGlobalTransferLimitSlider()); } public int getTransferLimit(int slotIndex) { - if (isBlacklistFilter() || currentItemFilter == null) { + if (isBlacklistFilter() || currentFilter == null) { return getTransferSize(); } - return currentItemFilter.getTransferLimit(slotIndex, getTransferSize()); + return currentFilter.getTransferLimit(slotIndex, getTransferSize()); } public boolean test(R toTest) { @@ -91,10 +91,10 @@ public MatchResult match(R toMatch) { } public int getTransferLimit(R stack) { - if (isBlacklistFilter() || currentItemFilter == null) { + if (isBlacklistFilter() || currentFilter == null) { return getTransferSize(); } - return currentItemFilter.getTransferLimit(stack, getTransferSize()); + return currentFilter.getTransferLimit(stack, getTransferSize()); } protected abstract void onFilterSlotChange(boolean notify); From 201ba208d141339292a6c95098a47350a7a2692c Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 27 Jan 2024 10:47:29 -0700 Subject: [PATCH 167/260] move call to the correct place --- src/main/java/gregtech/common/covers/CoverFluidFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 836a7b7abb3..59e18b46172 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -73,7 +73,6 @@ public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFaci @Nullable EntityPlayer player, @NotNull ItemStack itemStack) { super.onAttachment(coverableView, side, player, itemStack); this.fluidFilterContainer.setFilter(FilterTypeRegistry.getFluidFilterForStack(GTUtility.copy(1, itemStack))); - this.fluidFilterContainer.setMaxTransferSize(1); } @Override @@ -137,6 +136,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag var filteringMode = new EnumSyncValue<>(FluidFilterMode.class, this::getFilterMode, this::setFilterMode); guiSyncManager.syncValue("filtering_mode", filteringMode); + this.fluidFilterContainer.setMaxTransferSize(1); return getFluidFilter().createPanel(guiSyncManager) .size(176, 194).padding(7) From 6cc4ae11bf17484b38b4bace08901c504d5f0751 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 08:45:24 -0700 Subject: [PATCH 168/260] use `readByte` for small enums --- src/main/java/gregtech/common/covers/CoverFluidRegulator.java | 2 +- .../java/gregtech/common/covers/CoverFluidVoidingAdvanced.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 1024da339c9..0c9dd5a9fa3 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -287,7 +287,7 @@ public int getMaxTransferRate() { @Override public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.writeInitialSyncData(packetBuffer); - packetBuffer.writeEnumValue(this.transferMode); + packetBuffer.writeByte(this.transferMode.ordinal()); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index c218a84ed60..b9f6e9f6d43 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -182,7 +182,7 @@ public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { @Override public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.writeInitialSyncData(packetBuffer); - packetBuffer.writeEnumValue(voidingMode); + packetBuffer.writeByte(this.voidingMode.ordinal()); } @Override From 21baa0128bb59a82532b28a1046e21ee1278371a Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 08:53:07 -0700 Subject: [PATCH 169/260] log exception instead of throwing --- .../gregtech/common/covers/CoverFluidFilter.java | 14 +++++++------- .../gregtech/common/covers/CoverItemFilter.java | 3 ++- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 59e18b46172..7a97d9d9773 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -5,6 +5,7 @@ import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverWithUI; import gregtech.api.cover.CoverableView; +import gregtech.api.util.GTLog; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; import gregtech.common.covers.filter.FilterTypeRegistry; @@ -90,13 +91,12 @@ public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { - if (packetBuffer.readBoolean()) { - try { - this.fluidFilterContainer - .setFilter(FilterTypeRegistry.getFluidFilterForStack(packetBuffer.readItemStack())); - } catch (IOException e) { - throw new RuntimeException(e); - } + if (!packetBuffer.readBoolean()) return; + try { + this.fluidFilterContainer + .setFilter(FilterTypeRegistry.getFluidFilterForStack(packetBuffer.readItemStack())); + } catch (IOException e) { + GTLog.logger.error("Failed to read filter for CoverFluidFilter! %s", getPos().toString()); } } diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 936e9a73c5d..bb5e6c14a2e 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -5,6 +5,7 @@ import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverWithUI; import gregtech.api.cover.CoverableView; +import gregtech.api.util.GTLog; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; import gregtech.common.covers.filter.FilterTypeRegistry; @@ -85,7 +86,7 @@ public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { try { this.itemFilter.setFilter(FilterTypeRegistry.getItemFilterForStack(packetBuffer.readItemStack())); } catch (IOException e) { - throw new RuntimeException(e); + GTLog.logger.error("Failed to read filter for CoverItemFilter! %s", getPos().toString()); } } From 35accbc58a3485532ce35fe0944341419bcf0c32 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 09:06:51 -0700 Subject: [PATCH 170/260] missed `readByte()` --- .../java/gregtech/common/covers/CoverItemVoidingAdvanced.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java index 4061e41f175..640c6b6079b 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java @@ -151,7 +151,7 @@ public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { @Override public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.writeInitialSyncData(packetBuffer); - packetBuffer.writeEnumValue(voidingMode); + packetBuffer.writeByte(this.voidingMode.ordinal()); } @Override From 2792699a1e4b42a00d735689bfeb09750c107487 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 09:12:20 -0700 Subject: [PATCH 171/260] add nullability annotations --- .../gregtech/common/covers/CoverFluidFilter.java | 4 +++- .../gregtech/common/covers/CoverItemFilter.java | 5 ++++- .../common/covers/filter/BaseFilterContainer.java | 13 +++++++++---- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 7a97d9d9773..88b2e19f1a2 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -104,7 +104,9 @@ public FluidFilterMode getFilterMode() { return filterMode; } - public FluidFilter getFluidFilter() { + @SuppressWarnings("DataFlowIssue") + // this cover always has a filter + public @NotNull FluidFilter getFluidFilter() { return this.fluidFilterContainer.getFilter(); } diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index bb5e6c14a2e..118525e1fa3 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -99,7 +99,10 @@ public ItemFilterMode getFilterMode() { return filterMode; } - public ItemFilter getItemFilter() { + + @SuppressWarnings("DataFlowIssue") + // this cover always has a filter + public @NotNull ItemFilter getItemFilter() { return this.itemFilter.getFilter(); } diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 977fa8f9aaa..6b96c4b66f9 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -12,13 +12,14 @@ import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public abstract class BaseFilterContainer> implements INBTSerializable { private final IDirtyNotifiable dirtyNotifiable; private int maxTransferSize = 1; - private T currentFilter; - private Runnable onFilterInstanceChange; + private @Nullable T currentFilter; + private @Nullable Runnable onFilterInstanceChange; private int transferSize; protected final FilterSlotHandler filterInventory; @@ -27,7 +28,7 @@ public BaseFilterContainer(IDirtyNotifiable dirtyNotifiable) { filterInventory = new FilterSlotHandler(); } - public ItemStackHandler getFilterInventory() { + public @NotNull ItemStackHandler getFilterInventory() { return filterInventory; } @@ -45,7 +46,7 @@ public boolean hasFilter() { return currentFilter != null; } - public T getFilter() { + public @Nullable T getFilter() { return currentFilter; } @@ -97,6 +98,10 @@ public int getTransferLimit(R stack) { return currentFilter.getTransferLimit(stack, getTransferSize()); } + /** + * Called when the filter slot has changed to a different filter or has been removed + * @param notify if true, call {@code onFilterInstanceChange()} + */ protected abstract void onFilterSlotChange(boolean notify); public int getTransferSize() { From 48fa4691bb49a27e3f6ee92a7c2452d30b9f8e08 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 09:21:37 -0700 Subject: [PATCH 172/260] add static final VALUES field --- src/main/java/gregtech/common/covers/DistributionMode.java | 1 + src/main/java/gregtech/common/covers/ManualImportExportMode.java | 1 + src/main/java/gregtech/common/covers/TransferMode.java | 1 + src/main/java/gregtech/common/covers/VoidingMode.java | 1 + 4 files changed, 4 insertions(+) diff --git a/src/main/java/gregtech/common/covers/DistributionMode.java b/src/main/java/gregtech/common/covers/DistributionMode.java index 24268bdc6a0..c704d045b18 100644 --- a/src/main/java/gregtech/common/covers/DistributionMode.java +++ b/src/main/java/gregtech/common/covers/DistributionMode.java @@ -10,6 +10,7 @@ public enum DistributionMode implements IStringSerializable { ROUND_ROBIN_PRIO("cover.conveyor.distribution.round_robin"), INSERT_FIRST("cover.conveyor.distribution.first_insert"); + public static final DistributionMode[] VALUES = values(); public final String localeName; DistributionMode(String localeName) { diff --git a/src/main/java/gregtech/common/covers/ManualImportExportMode.java b/src/main/java/gregtech/common/covers/ManualImportExportMode.java index d044322425c..df3942d7163 100644 --- a/src/main/java/gregtech/common/covers/ManualImportExportMode.java +++ b/src/main/java/gregtech/common/covers/ManualImportExportMode.java @@ -10,6 +10,7 @@ public enum ManualImportExportMode implements IStringSerializable { FILTERED("cover.universal.manual_import_export.mode.filtered"), UNFILTERED("cover.universal.manual_import_export.mode.unfiltered"); + public static final ManualImportExportMode[] VALUES = values(); public final String localeName; ManualImportExportMode(String localeName) { diff --git a/src/main/java/gregtech/common/covers/TransferMode.java b/src/main/java/gregtech/common/covers/TransferMode.java index a3fcc746faf..2f278c88ce4 100644 --- a/src/main/java/gregtech/common/covers/TransferMode.java +++ b/src/main/java/gregtech/common/covers/TransferMode.java @@ -10,6 +10,7 @@ public enum TransferMode implements IStringSerializable { TRANSFER_EXACT("cover.robotic_arm.transfer_mode.transfer_exact", 1024), KEEP_EXACT("cover.robotic_arm.transfer_mode.keep_exact", Integer.MAX_VALUE); + public static final TransferMode[] VALUES = values(); public final String localeName; public final int maxStackSize; diff --git a/src/main/java/gregtech/common/covers/VoidingMode.java b/src/main/java/gregtech/common/covers/VoidingMode.java index 93b1250dd8e..b7e85666f65 100644 --- a/src/main/java/gregtech/common/covers/VoidingMode.java +++ b/src/main/java/gregtech/common/covers/VoidingMode.java @@ -9,6 +9,7 @@ public enum VoidingMode implements IStringSerializable { VOID_ANY("cover.voiding.voiding_mode.void_any", 1), VOID_OVERFLOW("cover.voiding.voiding_mode.void_overflow", Integer.MAX_VALUE); + public static final VoidingMode[] VALUES = values(); public final String localeName; public final int maxStackSize; From e997258601110d3f8a19fdc31d0efff532ed9750 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 09:22:46 -0700 Subject: [PATCH 173/260] more replacements with `writeByte()` use VALUES field --- .../java/gregtech/common/covers/CoverConveyor.java | 13 ++++++++----- .../gregtech/common/covers/CoverFluidRegulator.java | 2 +- .../common/covers/CoverFluidVoidingAdvanced.java | 2 +- .../common/covers/CoverItemVoidingAdvanced.java | 2 +- src/main/java/gregtech/common/covers/CoverPump.java | 2 +- .../gregtech/common/covers/CoverRoboticArm.java | 4 ++-- 6 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 2a8dbf56e0b..72b16d0d59c 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -638,8 +638,9 @@ public void readCustomData(int discriminator, @NotNull PacketBuffer buf) { public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.writeInitialSyncData(packetBuffer); packetBuffer.writeInt(transferRate); - packetBuffer.writeEnumValue(conveyorMode); - packetBuffer.writeEnumValue(distributionMode); + packetBuffer.writeByte(conveyorMode.ordinal()); + packetBuffer.writeByte(distributionMode.ordinal()); + packetBuffer.writeByte(manualImportExportMode.ordinal()); getItemFilterContainer().writeInitialSyncData(packetBuffer); } @@ -649,6 +650,7 @@ public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { this.transferRate = packetBuffer.readInt(); this.conveyorMode = packetBuffer.readEnumValue(ConveyorMode.class); this.distributionMode = packetBuffer.readEnumValue(DistributionMode.class); + this.manualImportExportMode = packetBuffer.readEnumValue(ManualImportExportMode.class); getItemFilterContainer().readInitialSyncData(packetBuffer); } @@ -667,10 +669,10 @@ public void writeToNBT(@NotNull NBTTagCompound tagCompound) { public void readFromNBT(@NotNull NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); this.transferRate = tagCompound.getInteger("TransferRate"); - this.conveyorMode = ConveyorMode.values()[tagCompound.getInteger("ConveyorMode")]; - this.distributionMode = DistributionMode.values()[tagCompound.getInteger("DistributionMode")]; + this.conveyorMode = ConveyorMode.VALUES[tagCompound.getInteger("ConveyorMode")]; + this.distributionMode = DistributionMode.VALUES[tagCompound.getInteger("DistributionMode")]; this.isWorkingAllowed = tagCompound.getBoolean("WorkingAllowed"); - this.manualImportExportMode = ManualImportExportMode.values()[tagCompound.getInteger("ManualImportExportMode")]; + this.manualImportExportMode = ManualImportExportMode.VALUES[tagCompound.getInteger("ManualImportExportMode")]; this.itemFilterContainer.deserializeNBT(tagCompound.getCompoundTag("Filter")); } @@ -685,6 +687,7 @@ public enum ConveyorMode implements IStringSerializable, IIOMode { IMPORT("cover.conveyor.mode.import"), EXPORT("cover.conveyor.mode.export"); + public static final ConveyorMode[] VALUES = values(); public final String localeName; ConveyorMode(String localeName) { diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 0c9dd5a9fa3..72e1b1bde2f 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -306,7 +306,7 @@ public void writeToNBT(@NotNull NBTTagCompound tagCompound) { @Override public void readFromNBT(@NotNull NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); - this.transferMode = TransferMode.values()[tagCompound.getInteger("TransferMode")]; + this.transferMode = TransferMode.VALUES[tagCompound.getInteger("TransferMode")]; // legacy NBT tag if (!tagCompound.hasKey("filterv2") && tagCompound.hasKey("TransferAmount")) { if (this.fluidFilterContainer.hasFilter()) { diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index b9f6e9f6d43..2b1abc0ea03 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -195,7 +195,7 @@ public void writeToNBT(@NotNull NBTTagCompound tagCompound) { @Override public void readFromNBT(@NotNull NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); - this.voidingMode = VoidingMode.values()[tagCompound.getInteger("VoidingMode")]; + this.voidingMode = VoidingMode.VALUES[tagCompound.getInteger("VoidingMode")]; this.transferAmount = tagCompound.getInteger("TransferAmount"); } } diff --git a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java index 640c6b6079b..0c35b4c425a 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java @@ -163,6 +163,6 @@ public void writeToNBT(NBTTagCompound tagCompound) { @Override public void readFromNBT(NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); - this.voidingMode = VoidingMode.values()[tagCompound.getInteger("VoidMode")]; + this.voidingMode = VoidingMode.VALUES[tagCompound.getInteger("VoidMode")]; } } diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index bf3b2e39e7e..f1256801e8d 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -311,7 +311,7 @@ public void readCustomData(int discriminator, @NotNull PacketBuffer buf) { @Override public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.writeInitialSyncData(packetBuffer); - packetBuffer.writeEnumValue(pumpMode); + packetBuffer.writeByte(pumpMode.ordinal()); getFluidFilterContainer().writeInitialSyncData(packetBuffer); } diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index 12570cddc5a..62b287721ed 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -231,7 +231,7 @@ public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.readInitialSyncData(packetBuffer); - this.transferMode = TransferMode.values()[packetBuffer.readInt()]; + this.transferMode = TransferMode.VALUES[packetBuffer.readInt()]; } @Override @@ -243,6 +243,6 @@ public void writeToNBT(NBTTagCompound tagCompound) { @Override public void readFromNBT(NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); - this.transferMode = TransferMode.values()[tagCompound.getInteger("TransferMode")]; + this.transferMode = TransferMode.VALUES[tagCompound.getInteger("TransferMode")]; } } From 708a09679127ee554c08ae0926c8750363fbac3a Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 09:29:43 -0700 Subject: [PATCH 174/260] more annotations --- src/main/java/gregtech/common/covers/filter/Filter.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/filter/Filter.java b/src/main/java/gregtech/common/covers/filter/Filter.java index e2f94391da3..025db47e72e 100644 --- a/src/main/java/gregtech/common/covers/filter/Filter.java +++ b/src/main/java/gregtech/common/covers/filter/Filter.java @@ -6,6 +6,7 @@ import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.widget.Widget; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public interface Filter { @@ -26,7 +27,7 @@ public interface Filter { boolean test(T toTest); - void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable); + void setDirtyNotifiable(@Nullable IDirtyNotifiable dirtyNotifiable); void markDirty(); From 261c82a5c7fcd51ac75ea9ff70e88c1adc33ad12 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 09:36:12 -0700 Subject: [PATCH 175/260] move stack reading to super into own method --- .../common/covers/filter/BaseFilterContainer.java | 12 ++++++++++++ .../common/covers/filter/FluidFilterContainer.java | 6 +----- .../common/covers/filter/ItemFilterContainer.java | 6 +----- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 6b96c4b66f9..e222abf8f6a 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -2,6 +2,7 @@ import gregtech.api.util.IDirtyNotifiable; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; import net.minecraft.util.math.MathHelper; @@ -14,6 +15,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.io.IOException; + public abstract class BaseFilterContainer> implements INBTSerializable { private final IDirtyNotifiable dirtyNotifiable; @@ -137,6 +140,15 @@ public void writeInitialSyncData(PacketBuffer packetBuffer) { packetBuffer.writeItemStack(this.filterInventory.getStackInSlot(0)); } + public ItemStack readFilterStack(PacketBuffer buffer) { + var stack = ItemStack.EMPTY; + try { + stack = buffer.readItemStack(); + } catch (IOException ignore) {} + this.filterInventory.setStackInSlot(0, stack); + return stack; + } + public abstract void readInitialSyncData(@NotNull PacketBuffer packetBuffer); @Override diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 35225c84bcd..88a94b38fba 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -134,11 +134,7 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { - var stack = ItemStack.EMPTY; - try { - stack = packetBuffer.readItemStack(); - } catch (IOException ignore) {} - this.filterInventory.setStackInSlot(0, stack); + var stack = readFilterStack(packetBuffer); if (FilterTypeRegistry.isFluidFilter(stack)) setFilter(FilterTypeRegistry.getFluidFilterForStack(stack)); diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 073327477c5..021d09da91d 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -145,11 +145,7 @@ protected void onFilterSlotChange(boolean notify) { @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { - var stack = ItemStack.EMPTY; - try { - stack = packetBuffer.readItemStack(); - } catch (IOException ignore) {} - this.filterInventory.setStackInSlot(0, stack); + var stack = readFilterStack(packetBuffer); if (FilterTypeRegistry.isItemFilter(stack)) setFilter(FilterTypeRegistry.getItemFilterForStack(stack)); From adc55f49e9f22a9025bfa774365af64f8cbda2d6 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 09:49:59 -0700 Subject: [PATCH 176/260] add deprecation comments for FilterTypeRegistry --- .../covers/filter/FilterTypeRegistry.java | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java index e9b7a7f22e7..e2a9f08e544 100644 --- a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java +++ b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java @@ -8,6 +8,7 @@ import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import java.util.Map; @@ -42,7 +43,7 @@ public static void registerItemFilter(int id, Class itemFi itemFilterById.put(id, itemFilterClass); } - public static int getIdForFilter(Object filter) { + public static int getIdForFilter(Filter filter) { int id = -1; if (filter instanceof ItemFilter) { id = itemFilterById.inverse().get(filter.getClass()); @@ -52,7 +53,11 @@ public static int getIdForFilter(Object filter) { return id; } + /** + * @deprecated use {@link FilterTypeRegistry#getIdForFilter(Filter)} + */ @Deprecated + @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public static int getIdForItemFilter(ItemFilter itemFilter) { Integer filterId = itemFilterById.inverse().get(itemFilter.getClass()); if (filterId == null) { @@ -61,7 +66,11 @@ public static int getIdForItemFilter(ItemFilter itemFilter) { return filterId; } + /** + * @deprecated use {@link FilterTypeRegistry#getIdForFilter(Filter)} + */ @Deprecated + @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public static int getIdForFluidFilter(FluidFilter fluidFilter) { Integer filterId = fluidFilterById.inverse().get(fluidFilter.getClass()); if (filterId == null) { @@ -70,7 +79,11 @@ public static int getIdForFluidFilter(FluidFilter fluidFilter) { return filterId; } + /** + * @deprecated use {@link FilterTypeRegistry#getItemFilterForStack(ItemStack)} + */ @Deprecated + @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public static ItemFilter createItemFilterById(int filterId) { Class filterClass = itemFilterById.get(filterId); if (filterClass == null) { @@ -79,7 +92,11 @@ public static ItemFilter createItemFilterById(int filterId) { return createNewFilterInstance(filterClass); } + /** + * @deprecated use {@link FilterTypeRegistry#getFluidFilterForStack(ItemStack)} + */ @Deprecated + @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public static FluidFilter createFluidFilterById(int filterId) { Class filterClass = fluidFilterById.get(filterId); if (filterClass == null) { @@ -110,8 +127,10 @@ public static FluidFilter createFluidFilterById(int filterId) { public static int getFilterIdForStack(ItemStack stack) { int id = -1; - if (isItemFilter(stack)) id = itemFilterIdByStack.getOrDefault(new ItemAndMetadata(stack), -1); - else if (isFluidFilter(stack)) id = fluidFilterIdByStack.getOrDefault(new ItemAndMetadata(stack), -1); + if (isItemFilter(stack)) + id = itemFilterIdByStack.getOrDefault(new ItemAndMetadata(stack), -1); + else if (isFluidFilter(stack)) + id = fluidFilterIdByStack.getOrDefault(new ItemAndMetadata(stack), -1); return id; } @@ -125,7 +144,11 @@ public static int getFilterIdForStack(ItemStack stack) { } } + /** + * @deprecated use {@link FilterTypeRegistry#createNewFilterInstance(Class, ItemStack)} + */ @Deprecated + @ApiStatus.ScheduledForRemoval(inVersion = "2.10") private static T createNewFilterInstance(Class filterClass) { return createNewFilterInstance(filterClass, ItemStack.EMPTY); } From beb96c82f43c5a04d07dc5aa173fa3d1aeffae14 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 09:51:43 -0700 Subject: [PATCH 177/260] add deprecation comments for filter wrappers --- .../gregtech/common/covers/filter/FluidFilterWrapper.java | 8 ++++++++ .../gregtech/common/covers/filter/ItemFilterWrapper.java | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java b/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java index cd84ef2974c..83fe82c05ef 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java @@ -1,6 +1,14 @@ package gregtech.common.covers.filter; +import net.minecraft.item.ItemStack; + +import org.jetbrains.annotations.ApiStatus; + +/** + * @deprecated use {@link FluidFilterContainer} + */ @Deprecated +@ApiStatus.ScheduledForRemoval(inVersion = "2.10") public class FluidFilterWrapper { FluidFilterContainer container; diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java index 23c689b6b3f..1a4572aeda7 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java @@ -2,10 +2,16 @@ import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.ApiStatus; + import java.util.function.BooleanSupplier; import java.util.function.Consumer; +/** + * @deprecated use {@link ItemFilterContainer} + */ @Deprecated +@ApiStatus.ScheduledForRemoval(inVersion = "2.10") public class ItemFilterWrapper { private final ItemFilterContainer container; From 6f968c5fa89e59c55bb54151c8abc01dad19ea97 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 09:56:36 -0700 Subject: [PATCH 178/260] explain warning suppression add nullabilty annotation --- .../java/gregtech/common/covers/filter/SimpleFluidFilter.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 9f0e5bacb76..9bcf7f0ad6a 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -217,7 +217,7 @@ protected NBTTagCompound getFluidTag() { } @Override - public FluidStack getFluid() { + public @Nullable FluidStack getFluid() { return FluidStack.loadFluidStackFromNBT(getFluidTag()); } @@ -244,6 +244,7 @@ public int getCapacity() { return this.filterReader.getCapacity(); } + // getFluid() is checked for nullability, suppress @SuppressWarnings("DataFlowIssue") @Override public int fill(FluidStack resource, boolean doFill) { @@ -261,6 +262,7 @@ public int fill(FluidStack resource, boolean doFill) { return 0; } + // getFluid() is checked for nullability, suppress @SuppressWarnings("DataFlowIssue") @Override public FluidStack drain(int maxDrain, boolean doDrain) { From 8479de004695511f7082b574e5f0592c41093e60 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 10:01:01 -0700 Subject: [PATCH 179/260] make class final and fields private final add public method for creation make constructor private --- .../common/covers/filter/BaseFilterContainer.java | 2 +- .../gregtech/common/covers/filter/FluidFilter.java | 2 +- .../gregtech/common/covers/filter/ItemFilter.java | 2 +- .../gregtech/common/covers/filter/MatchResult.java | 14 +++++++++----- 4 files changed, 12 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 e222abf8f6a..00394131410 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -89,7 +89,7 @@ public boolean test(R toTest) { public MatchResult match(R toMatch) { if (!hasFilter()) - return new MatchResult<>(true, toMatch, -1); + return MatchResult.create(true, toMatch, -1); return getFilter().match(toMatch); } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index 4f02c60f559..67094c51209 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -48,7 +48,7 @@ public int getTransferLimit(FluidStack stack) { public abstract void initUI(Consumer widgetGroup); protected static MatchResult createResult(boolean matched, FluidStack fluidStack, int index) { - return new MatchResult<>(matched, fluidStack, index); + return MatchResult.create(matched, fluidStack, index); } public @NotNull Widget createWidgets(GuiSyncManager syncManager) { diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index 810adb6aeb0..dba8edc5df0 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -92,7 +92,7 @@ public void readFromNBT(NBTTagCompound tagCompound) { } protected static MatchResult createResult(boolean matched, ItemStack stack, int index) { - return new MatchResult<>(matched, stack, index); + return MatchResult.create(matched, stack, index); } public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { diff --git a/src/main/java/gregtech/common/covers/filter/MatchResult.java b/src/main/java/gregtech/common/covers/filter/MatchResult.java index 3cd49257ab7..de60cfc71ee 100644 --- a/src/main/java/gregtech/common/covers/filter/MatchResult.java +++ b/src/main/java/gregtech/common/covers/filter/MatchResult.java @@ -1,12 +1,12 @@ package gregtech.common.covers.filter; -public class MatchResult { +public final class MatchResult { - boolean matched; - T matchedStack; - int filterIndex; + private final boolean matched; + private final T matchedStack; + private final int filterIndex; - MatchResult(boolean matched, T matchedStack, int filterIndex) { + private MatchResult(boolean matched, T matchedStack, int filterIndex) { this.matched = matched; this.matchedStack = matchedStack; this.filterIndex = filterIndex; @@ -23,4 +23,8 @@ public T getMatchedStack() { public int getFilterIndex() { return filterIndex; } + + public static MatchResult create(boolean matched, T matchedStack, int filterIndex) { + return new MatchResult<>(matched, matchedStack, filterIndex); + } } From 9e53f801d7476fba417473566f804f6d0865fe01 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 10:04:50 -0700 Subject: [PATCH 180/260] make methods static --- .../gregtech/common/covers/filter/SimpleItemFilter.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 84cb8007b8d..6c3dd50dd83 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -159,8 +159,8 @@ public void readFromNBT(NBTTagCompound tagCompound) { this.filterReader.setIgnoreNBT(tagCompound.getBoolean("IgnoreNBT")); } - public int itemFilterMatch(IItemHandler filterSlots, boolean ignoreDamage, boolean ignoreNBTData, - ItemStack itemStack) { + public static int itemFilterMatch(IItemHandler filterSlots, boolean ignoreDamage, + boolean ignoreNBTData, ItemStack itemStack) { for (int i = 0; i < filterSlots.getSlots(); i++) { ItemStack filterStack = filterSlots.getStackInSlot(i); if (!filterStack.isEmpty() && areItemsEqual(ignoreDamage, ignoreNBTData, filterStack, itemStack)) { @@ -170,8 +170,8 @@ public int itemFilterMatch(IItemHandler filterSlots, boolean ignoreDamage, boole return -1; } - private boolean areItemsEqual(boolean ignoreDamage, boolean ignoreNBTData, ItemStack filterStack, - ItemStack itemStack) { + private static boolean areItemsEqual(boolean ignoreDamage, boolean ignoreNBTData, + ItemStack filterStack, ItemStack itemStack) { if (ignoreDamage) { if (!filterStack.isItemEqualIgnoreDurability(itemStack)) { return false; From 09152da98e8c7d9c61ec491122943257508692dc Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 10:08:43 -0700 Subject: [PATCH 181/260] more deprecation comments --- .../common/covers/filter/WidgetGroupFluidFilter.java | 6 ++++++ .../common/covers/filter/WidgetGroupItemFilter.java | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java b/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java index 15a52fbc8db..0881a27a811 100644 --- a/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java @@ -5,9 +5,15 @@ import net.minecraft.network.PacketBuffer; +import org.jetbrains.annotations.ApiStatus; + import java.util.function.Supplier; +/** + * @deprecated in favor of new MUI + */ @Deprecated +@ApiStatus.ScheduledForRemoval(inVersion = "2.10") public class WidgetGroupFluidFilter extends AbstractWidgetGroup { private final Supplier fluidFilterSupplier; diff --git a/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java b/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java index 44f5e59c40d..9ad230ee476 100644 --- a/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java @@ -5,10 +5,16 @@ import net.minecraft.network.PacketBuffer; +import org.jetbrains.annotations.ApiStatus; + import java.io.IOException; import java.util.function.Supplier; +/** + * @deprecated in favor of new MUI + */ @Deprecated +@ApiStatus.ScheduledForRemoval(inVersion = "2.10") public class WidgetGroupItemFilter extends AbstractWidgetGroup { private final Supplier itemFilterSupplier; From 21468c2f7b78b03a129dc5c3e18c79669f3e144e Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 10:09:58 -0700 Subject: [PATCH 182/260] remove commented code --- .../orefilter/ItemOreFilterTestSlot.java | 34 ------------------- 1 file changed, 34 deletions(-) diff --git a/src/main/java/gregtech/common/gui/widget/orefilter/ItemOreFilterTestSlot.java b/src/main/java/gregtech/common/gui/widget/orefilter/ItemOreFilterTestSlot.java index 1ef42340b0e..b2706f21801 100644 --- a/src/main/java/gregtech/common/gui/widget/orefilter/ItemOreFilterTestSlot.java +++ b/src/main/java/gregtech/common/gui/widget/orefilter/ItemOreFilterTestSlot.java @@ -27,17 +27,6 @@ public void setGlob(@Nullable OreGlob glob) { this.glob = glob; } - // @Override - // @SideOnly(Side.CLIENT) - // public boolean mouseClicked(int mouseX, int mouseY, int button) { - // if (isMouseOverElement(mouseX, mouseY)) { - // EntityPlayer player = Minecraft.getMinecraft().player; - // putItem(player.inventory.getItemStack()); - // return true; - // } - // return false; - // } - @Override public void putStack(ItemStack stack) { ItemStack testStack = getStack(); @@ -49,27 +38,4 @@ public void putStack(ItemStack stack) { this.parent.updatePreview(); } } - - // @Override - // public List> getPhantomTargets(Object ingredient) { - // if (!(ingredient instanceof ItemStack)) { - // return Collections.emptyList(); - // } - // Rectangle rectangle = toRectangleBox(); - // return Lists.newArrayList(new IGhostIngredientHandler.Target() { - // - // @NotNull - // @Override - // public Rectangle getArea() { - // return rectangle; - // } - // - // @Override - // public void accept(@NotNull Object ingredient) { - // if (ingredient instanceof ItemStack) { - // putItem((ItemStack) ingredient); - // } - // } - // }); - // } } From 1d14828563822065907dfb985df011f8be6440f3 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 10:12:28 -0700 Subject: [PATCH 183/260] add todos remove commented field --- .../common/gui/widget/orefilter/OreFilterTestSlot.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/gui/widget/orefilter/OreFilterTestSlot.java b/src/main/java/gregtech/common/gui/widget/orefilter/OreFilterTestSlot.java index f5a2981895e..eb732d31e01 100644 --- a/src/main/java/gregtech/common/gui/widget/orefilter/OreFilterTestSlot.java +++ b/src/main/java/gregtech/common/gui/widget/orefilter/OreFilterTestSlot.java @@ -31,8 +31,6 @@ public class OreFilterTestSlot extends ItemSlot { private MatchType matchType = MatchType.INVALID; private boolean matchSuccess; - // private boolean initialized = false; - private boolean matchAll; public OreFilterTestSlot() { @@ -54,6 +52,7 @@ public OreFilterTestSlot() { default -> Collections.singletonList(IKey.lang("cover.ore_dictionary_filter.test_slot.info")); }); }); + // todo add back match and no match overlays // this.match = new ImageWidget(18 - 5, -3, 9, 6, GuiTextures.ORE_FILTER_MATCH); // this.noMatch = new ImageWidget(18 - 5, -3, 7, 7, GuiTextures.ORE_FILTER_NO_MATCH); // child(this.match); @@ -118,6 +117,7 @@ public void updatePreview() { } updateAndNotifyMatchSuccess(this.expectedResult == success); this.tooltip().markDirty(); + // todo add back match and no match overlays // this.match.setVisible(this.expectedResult == success); // this.noMatch.setVisible(this.expectedResult != success); return; @@ -125,6 +125,7 @@ public void updatePreview() { this.testResult = Object2BooleanMaps.emptyMap(); this.matchType = MatchType.INVALID; updateAndNotifyMatchSuccess(false); + // todo add back match and no match overlays // this.match.setVisible(false); // this.noMatch.setVisible(false); } From e9ed14c7b1bac0ee06a32763362c16519677b4ff Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 10:16:00 -0700 Subject: [PATCH 184/260] add nullability annotation to parameters --- .../gregtech/common/covers/filter/BaseFilterContainer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 00394131410..54f3299b7be 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -53,7 +53,7 @@ public boolean hasFilter() { return currentFilter; } - public final void setFilter(T newFilter) { + public final void setFilter(@Nullable T newFilter) { this.currentFilter = newFilter; if (currentFilter != null) { currentFilter.setDirtyNotifiable(dirtyNotifiable); @@ -67,7 +67,7 @@ public void onFilterInstanceChange() { dirtyNotifiable.markAsDirty(); } - public void setOnFilterInstanceChange(Runnable onFilterInstanceChange) { + public void setOnFilterInstanceChange(@Nullable Runnable onFilterInstanceChange) { this.onFilterInstanceChange = onFilterInstanceChange; } From 3f6b23db1ac6ee287e01761d7aa16b5caf5c6f7a Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 10:19:49 -0700 Subject: [PATCH 185/260] sbobless --- src/main/java/gregtech/common/covers/CoverItemFilter.java | 1 - .../java/gregtech/common/covers/filter/BaseFilterContainer.java | 1 + .../gregtech/common/covers/filter/FluidFilterContainer.java | 1 - .../java/gregtech/common/covers/filter/FluidFilterWrapper.java | 2 -- .../java/gregtech/common/covers/filter/ItemFilterContainer.java | 1 - 5 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 118525e1fa3..8040a459212 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -99,7 +99,6 @@ public ItemFilterMode getFilterMode() { return filterMode; } - @SuppressWarnings("DataFlowIssue") // this cover always has a filter public @NotNull ItemFilter getItemFilter() { diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 54f3299b7be..6e6ab87ea40 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -103,6 +103,7 @@ public int getTransferLimit(R stack) { /** * Called when the filter slot has changed to a different filter or has been removed + * * @param notify if true, call {@code onFilterInstanceChange()} */ protected abstract void onFilterSlotChange(boolean notify); diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 88a94b38fba..642d9049f28 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -22,7 +22,6 @@ import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.NotNull; -import java.io.IOException; import java.util.function.BooleanSupplier; import java.util.function.Consumer; diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java b/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java index 83fe82c05ef..785774d237d 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java @@ -1,7 +1,5 @@ package gregtech.common.covers.filter; -import net.minecraft.item.ItemStack; - import org.jetbrains.annotations.ApiStatus; /** diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 021d09da91d..1f6791454c8 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -26,7 +26,6 @@ import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.NotNull; -import java.io.IOException; import java.util.function.BooleanSupplier; import java.util.function.Consumer; From e3e995f678c67fbad0d9675d8b7ee9bf3498c098 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 10:27:56 -0700 Subject: [PATCH 186/260] remove commented out code --- src/main/java/gregtech/common/covers/CoverFluidFilter.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 88b2e19f1a2..44372ad87d9 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -184,9 +184,6 @@ public T getCapability(@NotNull Capability capability, @Nullable T defaul public void writeToNBT(@NotNull NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); tagCompound.setInteger("FilterMode", this.filterMode.ordinal()); - // tagCompound.setBoolean("IsBlacklist", this.fluidFilter.isBlacklistFilter()); - // NBTTagCompound filterComponent = new NBTTagCompound(); - // this.fluidFilter.getFluidFilter().writeToNBT(filterComponent); tagCompound.setTag("Filter", getFluidFilter().getContainerStack().serializeNBT()); } From c969be36b0f80e8ebb5b1dca3288883b881acf95 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 11:53:26 -0700 Subject: [PATCH 187/260] make methods final --- .../gregtech/common/covers/filter/BaseFilterContainer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 6e6ab87ea40..725f0bc7c93 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -45,11 +45,11 @@ public void setMaxTransferSize(int maxTransferSize) { if (hasFilter()) currentFilter.setMaxTransferSize(this.maxTransferSize); } - public boolean hasFilter() { + public final boolean hasFilter() { return currentFilter != null; } - public @Nullable T getFilter() { + public final @Nullable T getFilter() { return currentFilter; } From 1f6828fa59b83dfa3dd5ef22a391f7e89f94017a Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 12:28:35 -0700 Subject: [PATCH 188/260] more deprecation comments --- .../common/covers/filter/BaseFilterContainer.java | 2 +- .../common/covers/filter/FluidFilterContainer.java | 12 ++++++++++++ .../common/covers/filter/ItemFilterContainer.java | 14 +++++++++++--- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 725f0bc7c93..e8f27a850ec 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -55,7 +55,7 @@ public final boolean hasFilter() { public final void setFilter(@Nullable T newFilter) { this.currentFilter = newFilter; - if (currentFilter != null) { + if (hasFilter()) { currentFilter.setDirtyNotifiable(dirtyNotifiable); } if (onFilterInstanceChange != null) { diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 642d9049f28..48abb8c3d7c 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -20,6 +20,7 @@ import com.cleanroommc.modularui.widgets.ButtonWidget; import com.cleanroommc.modularui.widgets.ItemSlot; import com.cleanroommc.modularui.widgets.layout.Row; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import java.util.function.BooleanSupplier; @@ -54,6 +55,9 @@ public boolean testFluidStack(FluidStack fluidStack, boolean whitelist) { return result; } + /** @deprecated uses old builtin MUI */ + @Deprecated + @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public void initUI(int y, Consumer widgetGroup) { widgetGroup.accept(new gregtech.api.gui.widgets.LabelWidget(10, y, "cover.pump.fluid_filter.title")); widgetGroup.accept(new gregtech.api.gui.widgets.SlotWidget(filterInventory, 0, 10, y + 15) @@ -64,10 +68,16 @@ public void initUI(int y, Consumer widgetGroup) { this.blacklistUI(y + 15, widgetGroup, () -> true); } + /** @deprecated uses old builtin MUI */ + @Deprecated + @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public void initFilterUI(int y, Consumer widgetGroup) { widgetGroup.accept(new WidgetGroupFluidFilter(y, this::getFilter, this::showGlobalTransferLimitSlider)); } + /** @deprecated uses old builtin MUI */ + @Deprecated + @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public void blacklistUI(int y, Consumer widgetGroup, BooleanSupplier showBlacklistButton) { gregtech.api.gui.widgets.ServerWidgetGroup blacklistButton = new gregtech.api.gui.widgets.ServerWidgetGroup( this::hasFilter); @@ -82,6 +92,8 @@ public void blacklistUI(int y, Consumer widgetGroup, Bo public IWidget initUI(ModularPanel main, GuiSyncManager manager) { var panel = new PanelSyncHandler(main) { + // the panel can't be opened if there's no filter, so `getFilter()` will never be null + @SuppressWarnings("DataFlowIssue") @Override public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { getFilter().setMaxTransferSize(getMaxTransferSize()); diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 1f6791454c8..5c968734482 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -24,6 +24,7 @@ import com.cleanroommc.modularui.widgets.ButtonWidget; import com.cleanroommc.modularui.widgets.ItemSlot; import com.cleanroommc.modularui.widgets.layout.Row; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import java.util.function.BooleanSupplier; @@ -39,13 +40,16 @@ public ItemFilterContainer(IDirtyNotifiable dirtyNotifiable) { this.filterWrapper = new ItemFilterWrapper(this); // for compat } + /** @deprecated use {@link ItemFilterContainer} */ @Deprecated + @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public ItemFilterWrapper getFilterWrapper() { return filterWrapper; } - /** Deprecated, uses old builtin MUI */ + /** @deprecated uses old builtin MUI */ @Deprecated + @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public void initUI(int y, Consumer widgetGroup) { widgetGroup.accept(new LabelWidget(10, y, "cover.conveyor.item_filter.title")); widgetGroup.accept(new SlotWidget(filterInventory, 0, 10, y + 15) @@ -54,14 +58,16 @@ public void initUI(int y, Consumer widgetGroup) { this.initFilterUI(y + 38, widgetGroup); } - /** Deprecated, uses old builtin MUI */ + /** @deprecated uses old builtin MUI */ @Deprecated + @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public void initFilterUI(int y, Consumer widgetGroup) { widgetGroup.accept(new WidgetGroupItemFilter(y, this::getFilter)); } - /** Deprecated, uses old builtin MUI */ + /** @deprecated uses old builtin MUI */ @Deprecated + @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public void blacklistUI(int y, Consumer widgetGroup, BooleanSupplier showBlacklistButton) { ServerWidgetGroup blacklistButton = new ServerWidgetGroup(this::hasFilter); blacklistButton.addWidget(new ToggleButtonWidget(144, y, 20, 20, GuiTextures.BUTTON_BLACKLIST, @@ -74,6 +80,8 @@ public void blacklistUI(int y, Consumer widgetGroup, Bo public IWidget initUI(ModularPanel main, GuiSyncManager manager) { var panel = new PanelSyncHandler(main) { + // the panel can't be opened if there's no filter, so `getFilter()` will never be null + @SuppressWarnings("DataFlowIssue") @Override public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { getFilter().setMaxTransferSize(getMaxTransferSize()); From 9aab563de1433255a4770ca2068ff5f41b0076ff Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 21:06:31 -0700 Subject: [PATCH 189/260] sorry, permission to yeet filter wrappers granted --- .../covers/CoverFluidVoidingAdvanced.java | 8 +-- .../covers/filter/FluidFilterContainer.java | 7 --- .../covers/filter/FluidFilterWrapper.java | 25 -------- .../covers/filter/ItemFilterContainer.java | 10 ---- .../covers/filter/ItemFilterWrapper.java | 58 ------------------- 5 files changed, 4 insertions(+), 104 deletions(-) delete mode 100644 src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java delete mode 100644 src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index 2b1abc0ea03..a2231bce09b 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -73,13 +73,13 @@ protected void voidOverflow(final IFluidHandler sourceHandler, for (IFluidTankProperties tankProperties : sourceHandler.getTankProperties()) { FluidStack sourceFluid = tankProperties.getContents(); - if (this.fluidFilterContainer.getFilterWrapper().getFluidFilter() != null && + if (this.fluidFilterContainer.hasFilter() && voidingMode == VoidingMode.VOID_OVERFLOW) { - keepAmount = this.fluidFilterContainer.getFilterWrapper().getFluidFilter() - .getTransferLimit(sourceFluid); + keepAmount = this.fluidFilterContainer.getFilter() + .getTransferLimit(sourceFluid, getMaxTransferRate()); } if (sourceFluid == null || sourceFluid.amount == 0 || - !getFluidFilterContainer().testFluidStack(sourceFluid, true)) + !getFluidFilterContainer().test(sourceFluid)) continue; sourceFluid.amount = sourceFluid.amount - keepAmount; sourceHandler.drain(sourceFluid, true); diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 48abb8c3d7c..f8932ddad50 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -29,15 +29,8 @@ public class FluidFilterContainer extends BaseFilterContainer implements INBTSerializable { - private final FluidFilterWrapper filterWrapper; - public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable) { super(dirtyNotifiable); - this.filterWrapper = new FluidFilterWrapper(this); // for compat - } - - public FluidFilterWrapper getFilterWrapper() { - return filterWrapper; } public boolean testFluidStack(FluidStack fluidStack) { diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java b/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java deleted file mode 100644 index 785774d237d..00000000000 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterWrapper.java +++ /dev/null @@ -1,25 +0,0 @@ -package gregtech.common.covers.filter; - -import org.jetbrains.annotations.ApiStatus; - -/** - * @deprecated use {@link FluidFilterContainer} - */ -@Deprecated -@ApiStatus.ScheduledForRemoval(inVersion = "2.10") -public class FluidFilterWrapper { - - FluidFilterContainer container; - - public FluidFilterWrapper(FluidFilterContainer container) { - this.container = container; - } - - public void setFluidFilter(FluidFilter fluidFilter) { - this.container.setFilter(fluidFilter); - } - - public FluidFilter getFluidFilter() { - return container.getFilter(); - } -} diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 5c968734482..135312badea 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -33,18 +33,8 @@ public class ItemFilterContainer extends BaseFilterContainer implements INBTSerializable { - private final ItemFilterWrapper filterWrapper; - public ItemFilterContainer(IDirtyNotifiable dirtyNotifiable) { super(dirtyNotifiable); - this.filterWrapper = new ItemFilterWrapper(this); // for compat - } - - /** @deprecated use {@link ItemFilterContainer} */ - @Deprecated - @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public ItemFilterWrapper getFilterWrapper() { - return filterWrapper; } /** @deprecated uses old builtin MUI */ diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java b/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java deleted file mode 100644 index 1a4572aeda7..00000000000 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterWrapper.java +++ /dev/null @@ -1,58 +0,0 @@ -package gregtech.common.covers.filter; - -import net.minecraft.item.ItemStack; - -import org.jetbrains.annotations.ApiStatus; - -import java.util.function.BooleanSupplier; -import java.util.function.Consumer; - -/** - * @deprecated use {@link ItemFilterContainer} - */ -@Deprecated -@ApiStatus.ScheduledForRemoval(inVersion = "2.10") -public class ItemFilterWrapper { - - private final ItemFilterContainer container; - - public ItemFilterWrapper(ItemFilterContainer container) { - this.container = container; - } - - public void initUI(int y, Consumer widgetGroup) { - container.initUI(y, widgetGroup); - } - - public void blacklistUI(int y, Consumer widgetGroup, BooleanSupplier showBlacklistButton) { - container.blacklistUI(y, widgetGroup, showBlacklistButton); - } - - public void setItemFilter(ItemFilter itemFilter) { - container.setFilter(itemFilter); - } - - public ItemFilter getItemFilter() { - return container.getFilter(); - } - - public void setMaxStackSize(int maxStackSize) { - container.setMaxTransferSize(maxStackSize); - } - - public int getMaxStackSize() { - return container.getMaxTransferSize(); - } - - public boolean showGlobalTransferLimitSlider() { - return container.showGlobalTransferLimitSlider(); - } - - public int getSlotTransferLimit(int matchSlot, int globalTransferLimit) { - return container.getTransferLimit(matchSlot); - } - - public boolean testItemStack(ItemStack itemStack) { - return container.test(itemStack); - } -} From 3fee186eab79bfaccd8d8aa4f054ff9d2bf56ba9 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 21:06:45 -0700 Subject: [PATCH 190/260] remove unused methods --- .../covers/CoverFluidVoidingAdvanced.java | 27 +------------------ 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index a2231bce09b..ab7dba7a799 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -86,21 +86,8 @@ protected void voidOverflow(final IFluidHandler sourceHandler, } } - private void adjustTransferSize(int amount) { - if (bucketMode == BucketMode.BUCKET) - amount *= 1000; - if (this.voidingMode == VoidingMode.VOID_OVERFLOW) { - setTransferAmount(MathHelper.clamp(this.transferAmount + amount, 0, Integer.MAX_VALUE)); - } - } - - private void setTransferAmount(int transferAmount) { - this.transferAmount = transferAmount; - markDirty(); - } - public int getTransferAmount() { - return this.transferAmount; + return this.fluidFilterContainer.getTransferSize(); } public void setVoidingMode(VoidingMode transferMode) { @@ -113,18 +100,6 @@ public VoidingMode getVoidingMode() { return voidingMode; } - private boolean shouldDisplayAmountSlider() { - if (this.fluidFilterContainer.getFilterWrapper().getFluidFilter() != null) { - return false; - } - - return this.voidingMode == VoidingMode.VOID_OVERFLOW; - } - - public String getTransferAmountString() { - return Integer.toString(this.bucketMode == BucketMode.BUCKET ? transferAmount / 1000 : transferAmount); - } - @Override public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) { return super.buildUI(guiData, guiSyncManager).height(192 + 20); From a9801421d742efa284eb3f4c1674b50fd1aeba24 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 28 Jan 2024 21:09:01 -0700 Subject: [PATCH 191/260] sptls pls --- .../java/gregtech/common/covers/CoverFluidVoidingAdvanced.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index ab7dba7a799..8a591500dad 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -10,7 +10,6 @@ import net.minecraft.network.PacketBuffer; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.MathHelper; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; From 12a659bc7753d551a1aaa8ba184f3e24cf149f61 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 29 Jan 2024 12:58:46 -0700 Subject: [PATCH 192/260] make default values net set nbt --- .../filter/OreDictionaryItemFilter.java | 38 ++++++++++--------- .../covers/filter/SimpleItemFilter.java | 30 +++++++++------ .../filter/readers/BaseFilterReader.java | 19 ++++++---- 3 files changed, 49 insertions(+), 38 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 6966742ecab..4b8346d4c31 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -334,37 +334,42 @@ public OreDictionaryItemFilterReader(ItemStack container, int slots) { } public void setExpression(String expression) { - var old = getStackTag().getString(EXPRESSION); - if (expression.equals(old)) return; + if (getStackTag().getString(EXPRESSION).equals(expression)) + return; + getStackTag().setString(EXPRESSION, expression); recompile(); markDirty(); } public String getExpression() { - if (!getStackTag().hasKey(EXPRESSION)) - setExpression(""); - return getStackTag().getString(EXPRESSION); } public void setCaseSensitive(boolean caseSensitive) { - var old = getStackTag().getBoolean(CASE_SENSITIVE); - if (getStackTag().hasKey(CASE_SENSITIVE) && old == caseSensitive) return; - getStackTag().setBoolean(CASE_SENSITIVE, caseSensitive); + if (isCaseSensitive() == caseSensitive) + return; + + if (!caseSensitive) + getStackTag().setBoolean(CASE_SENSITIVE, false); + else + getStackTag().removeTag(CASE_SENSITIVE); markDirty(); } public boolean isCaseSensitive() { - if (!getStackTag().hasKey(CASE_SENSITIVE)) - setCaseSensitive(true); - - return getStackTag().getBoolean(CASE_SENSITIVE); + return !getStackTag().hasKey(CASE_SENSITIVE); } public void setMatchAll(boolean matchAll) { - if (getStackTag().hasKey(MATCH_ALL) && this.shouldMatchAll() == matchAll) return; - getStackTag().setBoolean(MATCH_ALL, matchAll); + if (shouldMatchAll() == matchAll) + return; + + if (!matchAll) + getStackTag().setBoolean(MATCH_ALL, false); + else + getStackTag().removeTag(MATCH_ALL); + markDirty(); } @@ -374,10 +379,7 @@ public void setMatchAll(boolean matchAll) { * all entries to match */ public boolean shouldMatchAll() { - if (!getStackTag().hasKey(MATCH_ALL)) - setMatchAll(true); - - return getStackTag().getBoolean(MATCH_ALL); + return !getStackTag().hasKey(MATCH_ALL); } } } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 6c3dd50dd83..f9a46448e20 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -184,35 +184,41 @@ private static boolean areItemsEqual(boolean ignoreDamage, boolean ignoreNBTData protected class SimpleItemFilterReader extends BaseItemFilterReader { - public static final String IGNORE_NBT = "ignore_nbt"; - public static final String IGNORE_DAMAGE = "ignore_damage"; + public static final String RESPECT_NBT = "ignore_nbt"; + public static final String RESPECT_DAMAGE = "ignore_damage"; public SimpleItemFilterReader(ItemStack container, int slots) { super(container, slots); } protected void setIgnoreDamage(boolean ignoreDamage) { - getStackTag().setBoolean(IGNORE_DAMAGE, ignoreDamage); + if (!getStackTag().getBoolean(RESPECT_DAMAGE) == ignoreDamage) + return; + + if (ignoreDamage) + getStackTag().removeTag(RESPECT_DAMAGE); + else + getStackTag().setBoolean(RESPECT_DAMAGE, true); markDirty(); } protected void setIgnoreNBT(boolean ignoreNBT) { - getStackTag().setBoolean(IGNORE_NBT, ignoreNBT); + if (!getStackTag().getBoolean(RESPECT_NBT) == ignoreNBT) + return; + + if (ignoreNBT) + getStackTag().removeTag(RESPECT_NBT); + else + getStackTag().setBoolean(RESPECT_NBT, true); markDirty(); } public boolean isIgnoreDamage() { - if (!getStackTag().hasKey(IGNORE_DAMAGE)) - setIgnoreDamage(true); - - return getStackTag().getBoolean(IGNORE_DAMAGE); + return !getStackTag().getBoolean(RESPECT_DAMAGE); } public boolean isIgnoreNBT() { - if (!getStackTag().hasKey(IGNORE_NBT)) - setIgnoreNBT(true); - - return getStackTag().getBoolean(IGNORE_NBT); + return !getStackTag().getBoolean(RESPECT_NBT); } @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 9bee1a2b9e4..9afc2a0afbc 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -27,20 +27,23 @@ public ItemStack getContainer() { public abstract void onTransferRateChange(); public final void setBlacklistFilter(boolean blacklistFilter) { - var old = getStackTag().getBoolean(BLACKLIST); - if (old != blacklistFilter) { - getStackTag().setBoolean(BLACKLIST, blacklistFilter); - onTransferRateChange(); - } + setWhitelist(!blacklistFilter); } public final boolean isBlacklistFilter() { - if (!getStackTag().hasKey(BLACKLIST)) - setBlacklistFilter(false); - return getStackTag().getBoolean(BLACKLIST); } + private void setWhitelist(boolean whitelist) { + if (getStackTag().getBoolean(BLACKLIST) == whitelist) { + if (whitelist) + getStackTag().removeTag(BLACKLIST); + else + getStackTag().setBoolean(BLACKLIST, true); + onTransferRateChange(); + } + } + public void setMaxTransferRate(int transferRate) { transferRate = MathHelper.clamp(transferRate, 1, Integer.MAX_VALUE); if (this.maxTransferRate != transferRate) { From 50eba085b06815ba7595454a35c779af9f7eb346 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 3 Feb 2024 21:51:48 -0700 Subject: [PATCH 193/260] properly handle reading legacy nbt rename "itemFilter" make NBT strings match previous strings add "VALUES" to SmartFilteringMode enum --- .../common/covers/CoverFluidFilter.java | 6 +-- .../common/covers/CoverItemFilter.java | 27 +++++++------ .../common/covers/filter/FluidFilter.java | 2 +- .../covers/filter/FluidFilterContainer.java | 2 +- .../common/covers/filter/ItemFilter.java | 3 +- .../filter/OreDictionaryItemFilter.java | 23 ++++++----- .../covers/filter/SimpleFluidFilter.java | 18 +++++---- .../covers/filter/SimpleItemFilter.java | 39 +++++++++---------- .../common/covers/filter/SmartItemFilter.java | 15 +++---- .../filter/readers/BaseFilterReader.java | 8 +++- 10 files changed, 73 insertions(+), 70 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 44372ad87d9..5e4a1aff7b4 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -184,16 +184,14 @@ public T getCapability(@NotNull Capability capability, @Nullable T defaul public void writeToNBT(@NotNull NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); tagCompound.setInteger("FilterMode", this.filterMode.ordinal()); - tagCompound.setTag("Filter", getFluidFilter().getContainerStack().serializeNBT()); + tagCompound.setTag("Filter", this.fluidFilterContainer.serializeNBT()); } @Override public void readFromNBT(@NotNull NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); this.filterMode = FluidFilterMode.values()[tagCompound.getInteger("FilterMode")]; - this.fluidFilterContainer.setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); - var stack = new ItemStack(tagCompound.getCompoundTag("Filter")); - this.fluidFilterContainer.setFilter(FilterTypeRegistry.getFluidFilterForStack(stack)); + this.fluidFilterContainer.deserializeNBT(tagCompound); } private class FluidHandlerFiltered extends FluidHandlerDelegate { diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 8040a459212..3a974c7f78a 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -47,7 +47,7 @@ public class CoverItemFilter extends CoverBase implements CoverWithUI { protected final String titleLocale; protected final SimpleOverlayRenderer texture; - protected final ItemFilterContainer itemFilter; + protected final ItemFilterContainer itemFilterContainer; protected ItemFilterMode filterMode = ItemFilterMode.FILTER_INSERT; protected ItemHandlerFiltered itemHandler; @@ -56,15 +56,15 @@ public CoverItemFilter(@NotNull CoverDefinition definition, @NotNull CoverableVi super(definition, coverableView, attachedSide); this.titleLocale = titleLocale; this.texture = texture; - this.itemFilter = new ItemFilterContainer(this); + this.itemFilterContainer = new ItemFilterContainer(this); } @Override public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFacing side, @Nullable EntityPlayer player, @NotNull ItemStack itemStack) { super.onAttachment(coverableView, side, player, itemStack); - this.itemFilter.setFilter(FilterTypeRegistry.getItemFilterForStack(GTUtility.copy(1, itemStack))); - this.itemFilter.setMaxTransferSize(1); + this.itemFilterContainer.setFilter(FilterTypeRegistry.getItemFilterForStack(GTUtility.copy(1, itemStack))); + this.itemFilterContainer.setMaxTransferSize(1); } @Override @@ -74,8 +74,8 @@ public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFaci @Override public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { - packetBuffer.writeBoolean(itemFilter.hasFilter()); - if (itemFilter.hasFilter()) { + packetBuffer.writeBoolean(itemFilterContainer.hasFilter()); + if (itemFilterContainer.hasFilter()) { packetBuffer.writeItemStack(getItemFilter().getContainerStack()); } } @@ -84,7 +84,7 @@ public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { if (!packetBuffer.readBoolean()) return; try { - this.itemFilter.setFilter(FilterTypeRegistry.getItemFilterForStack(packetBuffer.readItemStack())); + this.itemFilterContainer.setFilter(FilterTypeRegistry.getItemFilterForStack(packetBuffer.readItemStack())); } catch (IOException e) { GTLog.logger.error("Failed to read filter for CoverItemFilter! %s", getPos().toString()); } @@ -102,7 +102,7 @@ public ItemFilterMode getFilterMode() { @SuppressWarnings("DataFlowIssue") // this cover always has a filter public @NotNull ItemFilter getItemFilter() { - return this.itemFilter.getFilter(); + return this.itemFilterContainer.getFilter(); } @Override @@ -125,7 +125,7 @@ public boolean canPipePassThrough() { } public boolean testItemStack(ItemStack stack) { - return itemFilter.test(stack); + return itemFilterContainer.test(stack); } @Override @@ -164,15 +164,14 @@ public void renderCover(CCRenderState renderState, Matrix4 translation, IVertexO public void writeToNBT(@NotNull NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); tagCompound.setInteger("FilterMode", filterMode.ordinal()); - tagCompound.setTag("Filter", getItemFilter().getContainerStack().serializeNBT()); + tagCompound.setTag("Filter", this.itemFilterContainer.serializeNBT()); } @Override public void readFromNBT(@NotNull NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); this.filterMode = ItemFilterMode.values()[tagCompound.getInteger("FilterMode")]; - var stack = new ItemStack(tagCompound.getCompoundTag("Filter")); - this.itemFilter.setFilter(FilterTypeRegistry.getItemFilterForStack(stack)); + this.itemFilterContainer.deserializeNBT(tagCompound); } @Override @@ -199,7 +198,7 @@ public ItemHandlerFiltered(IItemHandler delegate) { @NotNull @Override public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate) { - if (getFilterMode() == ItemFilterMode.FILTER_EXTRACT || !itemFilter.test(stack)) { + if (getFilterMode() == ItemFilterMode.FILTER_EXTRACT || !itemFilterContainer.test(stack)) { return stack; } return super.insertItem(slot, stack, simulate); @@ -210,7 +209,7 @@ public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate public ItemStack extractItem(int slot, int amount, boolean simulate) { if (getFilterMode() != ItemFilterMode.FILTER_INSERT) { ItemStack result = super.extractItem(slot, amount, true); - if (result.isEmpty() || !itemFilter.test(result)) { + if (result.isEmpty() || !itemFilterContainer.test(result)) { return ItemStack.EMPTY; } return simulate ? result : super.extractItem(slot, amount, false); diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index 67094c51209..12fedbaa66e 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -107,7 +107,7 @@ public final void markDirty() { protected abstract static class BaseFluidFilterReader extends BaseFilterReader { - protected static final String KEY_FLUIDS = "FluidTank"; + protected static final String KEY_FLUIDS = "FluidFilter"; protected static final String BUCKET_ONLY = "BucketOnly"; public BaseFluidFilterReader(ItemStack container, int slots) { diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index f8932ddad50..6ffd0cec52e 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -169,7 +169,7 @@ public void deserializeNBT(NBTTagCompound tagCompound) { var stack = getFilterInventory().getStackInSlot(0); if (FilterTypeRegistry.isFluidFilter(stack)) { setFilter(FilterTypeRegistry.getFluidFilterForStack(stack)); - this.getFilter().readFromNBT(tagCompound.getCompoundTag("Filter")); + getFilter().readFromNBT(tagCompound); } } } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index dba8edc5df0..6bc24ba04e4 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -85,9 +85,8 @@ public int getTransferLimit(ItemStack stack, int globalTransferLimit) { .addTooltip(1, IKey.lang("cover.filter.blacklist.enabled"))); } - @Deprecated public void readFromNBT(NBTTagCompound tagCompound) { - setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); + this.filterReader.readFromNBT(tagCompound); markDirty(); } diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 4b8346d4c31..5d9f274d5c8 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -314,20 +314,11 @@ public boolean showGlobalTransferLimitSlider() { return true; } - @Override - public void readFromNBT(NBTTagCompound tag) { - super.readFromNBT(tag); - this.filterReader.setExpression(tag.getString("OreDictionaryFilter")); - this.filterReader.setCaseSensitive(tag.getBoolean("caseSensitive")); - this.filterReader.setMatchAll(tag.getBoolean("matchAll")); - recompile(); - } - protected class OreDictionaryItemFilterReader extends BaseItemFilterReader { - private static final String EXPRESSION = "expression"; - private static final String CASE_SENSITIVE = "case_sensitive"; - private static final String MATCH_ALL = "match_all"; + private static final String EXPRESSION = "OreDictionaryFilter"; + private static final String CASE_SENSITIVE = "caseSensitive"; + private static final String MATCH_ALL = "matchAll"; public OreDictionaryItemFilterReader(ItemStack container, int slots) { super(container, slots); @@ -381,5 +372,13 @@ public void setMatchAll(boolean matchAll) { public boolean shouldMatchAll() { return !getStackTag().hasKey(MATCH_ALL); } + + @Override + public void readFromNBT(NBTTagCompound tagCompound) { + super.readFromNBT(tagCompound); + this.setExpression(tagCompound.getString(EXPRESSION)); + this.setCaseSensitive(tagCompound.getBoolean(CASE_SENSITIVE)); + this.setMatchAll(tagCompound.getBoolean(MATCH_ALL)); + } } } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 9bcf7f0ad6a..c0ab92a18cf 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -117,13 +117,7 @@ public boolean showGlobalTransferLimitSlider() { } public void readFromNBT(NBTTagCompound tagCompound) { - NBTTagList filterSlots = tagCompound.getTagList("FluidFilter", 10); - for (int i = 0; i < this.filterReader.getSlots(); i++) { - NBTTagCompound stackTag = filterSlots.getCompoundTagAt(i); - FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(stackTag); - if (fluidStack == null) continue; - this.filterReader.getFluidTank(i).setFluid(fluidStack); - } + this.filterReader.readFromNBT(tagCompound); } @Override @@ -180,6 +174,16 @@ public void onTransferRateChange() { } setCapacity(getMaxTransferRate()); } + + public void readFromNBT(NBTTagCompound tagCompound) { + NBTTagList filterSlots = tagCompound.getTagList(KEY_FLUIDS, 10); + for (int i = 0; i < filterSlots.tagCount(); i++) { + NBTTagCompound stackTag = filterSlots.getCompoundTagAt(i); + FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(stackTag); + if (fluidStack == null) continue; + getFluidTank(i).setFluid(fluidStack); + } + } } public static class WritableFluidTank extends FluidTank { diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index f9a46448e20..d7f36c3e37a 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -141,24 +141,6 @@ public void initUI(Consumer widgetGroup) { .addTooltip(1, IKey.lang("cover.item_filter.ignore_nbt.enabled")))); } - @Override - public void readFromNBT(NBTTagCompound tagCompound) { - super.readFromNBT(tagCompound); - - if (tagCompound.hasKey("ItemFilter")) { - var temp = new ItemStackHandler(); - temp.deserializeNBT(tagCompound.getCompoundTag("ItemFilter")); - for (int i = 0; i < temp.getSlots(); i++) { - var stack = temp.getStackInSlot(i); - if (stack.isEmpty()) continue; - this.filterReader.setStackInSlot(i, stack); - } - } - - this.filterReader.setIgnoreDamage(tagCompound.getBoolean("IgnoreDamage")); - this.filterReader.setIgnoreNBT(tagCompound.getBoolean("IgnoreNBT")); - } - public static int itemFilterMatch(IItemHandler filterSlots, boolean ignoreDamage, boolean ignoreNBTData, ItemStack itemStack) { for (int i = 0; i < filterSlots.getSlots(); i++) { @@ -184,8 +166,8 @@ private static boolean areItemsEqual(boolean ignoreDamage, boolean ignoreNBTData protected class SimpleItemFilterReader extends BaseItemFilterReader { - public static final String RESPECT_NBT = "ignore_nbt"; - public static final String RESPECT_DAMAGE = "ignore_damage"; + public static final String RESPECT_NBT = "IgnoreNBT"; + public static final String RESPECT_DAMAGE = "IgnoreDamage"; public SimpleItemFilterReader(ItemStack container, int slots) { super(container, slots); @@ -244,5 +226,22 @@ public void onTransferRateChange() { } } } + + @Override + public void readFromNBT(NBTTagCompound tagCompound) { + super.readFromNBT(tagCompound); + this.setIgnoreDamage(tagCompound.getBoolean(RESPECT_DAMAGE)); + this.setIgnoreNBT(tagCompound.getBoolean(RESPECT_NBT)); + + if (tagCompound.hasKey(KEY_ITEMS)) { + var temp = new ItemStackHandler(); + temp.deserializeNBT(tagCompound.getCompoundTag(KEY_ITEMS)); + for (int i = 0; i < temp.getSlots(); i++) { + var stack = temp.getStackInSlot(i); + if (stack.isEmpty()) continue; + this.setStackInSlot(i, stack); + } + } + } } } diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 180aced0a86..8f968d68508 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -131,12 +131,6 @@ public boolean showGlobalTransferLimitSlider() { return true; } - @Override - public void readFromNBT(NBTTagCompound tagCompound) { - super.readFromNBT(tagCompound); - this.filterReader.setFilteringMode(SmartFilteringMode.values()[tagCompound.getInteger("FilterMode")]); - } - private static class ItemAndMetadataAndStackSize { public final ItemAndMetadata itemAndMetadata; @@ -167,6 +161,7 @@ public enum SmartFilteringMode implements IStringSerializable { CENTRIFUGE("cover.smart_item_filter.filtering_mode.centrifuge", RecipeMaps.CENTRIFUGE_RECIPES), SIFTER("cover.smart_item_filter.filtering_mode.sifter", RecipeMaps.SIFTER_RECIPES); + public static final SmartFilteringMode[] VALUES = values(); private final Object2IntOpenHashMap transferStackSizesCache = new Object2IntOpenHashMap<>(); public final String localeName; public final RecipeMap recipeMap; @@ -195,12 +190,18 @@ public SmartFilteringMode getFilteringMode() { if (!getStackTag().hasKey(FILTER_MODE)) setFilteringMode(SmartFilteringMode.ELECTROLYZER); - return SmartFilteringMode.values()[getStackTag().getInteger(FILTER_MODE)]; + return SmartFilteringMode.VALUES[getStackTag().getInteger(FILTER_MODE)]; } public void setFilteringMode(SmartFilteringMode filteringMode) { getStackTag().setInteger(FILTER_MODE, filteringMode.ordinal()); markDirty(); } + + @Override + public void readFromNBT(NBTTagCompound tagCompound) { + super.readFromNBT(tagCompound); + this.setFilteringMode(SmartFilteringMode.VALUES[tagCompound.getInteger(FILTER_MODE)]); + } } } 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 9afc2a0afbc..eaf03d443a1 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -12,8 +12,8 @@ public abstract class BaseFilterReader extends ItemStackItemHandler { protected final ItemStack container; protected int maxTransferRate = 1; - protected static final String KEY_ITEMS = "Items"; - protected static final String BLACKLIST = "is_blacklist"; + protected static final String KEY_ITEMS = "ItemFilter"; + protected static final String BLACKLIST = "IsBlacklist"; public BaseFilterReader(ItemStack container, int slots) { super(container, slots); @@ -82,4 +82,8 @@ protected void validateSlotIndex(int slot) { throw new RuntimeException("Slot " + slot + " not in valid range - [0," + this.getSlots() + ")"); } } + + public void readFromNBT(NBTTagCompound tagCompound) { + setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); + } } From fc333f87cca542558f515e12b0c0d271420d887b Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 3 Feb 2024 22:35:00 -0700 Subject: [PATCH 194/260] fix filter not de/serializing properly as a cover mark dirty on contents changed --- .../java/gregtech/common/covers/CoverFluidFilter.java | 3 ++- .../java/gregtech/common/covers/CoverItemFilter.java | 5 +++-- .../common/covers/filter/BaseFilterContainer.java | 3 ++- src/main/java/gregtech/common/covers/filter/Filter.java | 5 +++++ .../java/gregtech/common/covers/filter/FluidFilter.java | 2 -- .../gregtech/common/covers/filter/SimpleFluidFilter.java | 9 ++++++--- .../gregtech/common/covers/filter/SimpleItemFilter.java | 5 +++++ 7 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 5e4a1aff7b4..4306ae4b67e 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -73,7 +73,8 @@ public void setFilterMode(FluidFilterMode filterMode) { public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFacing side, @Nullable EntityPlayer player, @NotNull ItemStack itemStack) { super.onAttachment(coverableView, side, player, itemStack); - this.fluidFilterContainer.setFilter(FilterTypeRegistry.getFluidFilterForStack(GTUtility.copy(1, itemStack))); + var dropStack = GTUtility.copy(1, itemStack); + this.fluidFilterContainer.setFilter(FilterTypeRegistry.getFluidFilterForStack(dropStack)); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 3a974c7f78a..584b85655d0 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -63,7 +63,8 @@ public CoverItemFilter(@NotNull CoverDefinition definition, @NotNull CoverableVi public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFacing side, @Nullable EntityPlayer player, @NotNull ItemStack itemStack) { super.onAttachment(coverableView, side, player, itemStack); - this.itemFilterContainer.setFilter(FilterTypeRegistry.getItemFilterForStack(GTUtility.copy(1, itemStack))); + var dropStack = GTUtility.copy(1, itemStack); + this.itemFilterContainer.setFilter(FilterTypeRegistry.getItemFilterForStack(dropStack)); this.itemFilterContainer.setMaxTransferSize(1); } @@ -171,7 +172,7 @@ public void writeToNBT(@NotNull NBTTagCompound tagCompound) { public void readFromNBT(@NotNull NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); this.filterMode = ItemFilterMode.values()[tagCompound.getInteger("FilterMode")]; - this.itemFilterContainer.deserializeNBT(tagCompound); + this.itemFilterContainer.deserializeNBT(tagCompound.getCompoundTag("Filter")); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index e8f27a850ec..979a0d729d0 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -56,7 +56,8 @@ public final boolean hasFilter() { public final void setFilter(@Nullable T newFilter) { this.currentFilter = newFilter; if (hasFilter()) { - currentFilter.setDirtyNotifiable(dirtyNotifiable); + this.filterInventory.setStackInSlot(0, this.currentFilter.getContainerStack()); + this.currentFilter.setDirtyNotifiable(dirtyNotifiable); } if (onFilterInstanceChange != null) { this.onFilterInstanceChange.run(); diff --git a/src/main/java/gregtech/common/covers/filter/Filter.java b/src/main/java/gregtech/common/covers/filter/Filter.java index 025db47e72e..2f2619f4772 100644 --- a/src/main/java/gregtech/common/covers/filter/Filter.java +++ b/src/main/java/gregtech/common/covers/filter/Filter.java @@ -5,6 +5,9 @@ import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.widget.Widget; + +import net.minecraft.item.ItemStack; + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -23,6 +26,8 @@ public interface Filter { @NotNull Widget createWidgets(GuiSyncManager syncManager); + ItemStack getContainerStack(); + MatchResult match(T toMatch); boolean test(T toTest); diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index 12fedbaa66e..202fbce7756 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -62,8 +62,6 @@ protected static MatchResult createResult(boolean matched, FluidStac .addTooltip(1, IKey.lang("cover.filter.blacklist.enabled"))); } - public abstract ItemStack getContainerStack(); - public boolean showGlobalTransferLimitSlider() { return false; } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index c0ab92a18cf..8f2880093dc 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -133,7 +133,7 @@ public int getTransferLimit(FluidStack fluidStack, int transferSize) { return isBlacklistFilter() ? transferSize : limit; } - protected static class SimpleFluidFilterReader extends BaseFluidFilterReader { + protected class SimpleFluidFilterReader extends BaseFluidFilterReader { protected WritableFluidTank[] fluidTanks; protected static final String CAPACITY = "Capacity"; @@ -149,6 +149,7 @@ public SimpleFluidFilterReader(ItemStack container, int slots) { public void setCapacity(int capacity) { getStackTag().setInteger(CAPACITY, capacity); + markDirty(); } public int getCapacity() { @@ -186,7 +187,7 @@ public void readFromNBT(NBTTagCompound tagCompound) { } } - public static class WritableFluidTank extends FluidTank { + public class WritableFluidTank extends FluidTank { private final NBTTagCompound fluidTank; private final SimpleFluidFilterReader filterReader; @@ -205,6 +206,7 @@ public void setFluidAmount(int amount) { setFluid(null); } else { getFluidTag().setInteger(FLUID_AMOUNT, amount); + markDirty(); } } @@ -232,6 +234,7 @@ public void setFluid(@Nullable FluidStack stack) { } else { this.fluidTank.setTag(FLUID, stack.writeToNBT(getFluidTag())); } + markDirty(); } protected boolean showAmount() { @@ -276,7 +279,7 @@ public FluidStack drain(int maxDrain, boolean doDrain) { fluid.amount -= Math.min(fluid.amount, maxDrain); setFluidAmount(fluid.amount); - + markDirty(); return fluid; } } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index d7f36c3e37a..5b1749ad8d9 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -216,6 +216,11 @@ public void setStackInSlot(int slot, ItemStack stack) { super.setStackInSlot(slot, stack); } + @Override + protected void onContentsChanged(int slot) { + markDirty(); + } + @Override public void onTransferRateChange() { for (int i = 0; i < getSlots(); i++) { From bf5ecb28a5f18fe11103e5d510aeae5b38d97464 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 3 Feb 2024 22:48:13 -0700 Subject: [PATCH 195/260] mark dirty in more places --- .../java/gregtech/common/covers/filter/ItemFilter.java | 7 ++++++- .../gregtech/common/covers/filter/SimpleItemFilter.java | 5 ----- .../common/covers/filter/readers/BaseFilterReader.java | 7 +++++++ 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index 6bc24ba04e4..c1bf0b0a426 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -104,7 +104,7 @@ public final void markDirty() { } } - protected static class BaseItemFilterReader extends BaseFilterReader { + protected class BaseItemFilterReader extends BaseFilterReader { protected static final String COUNT = "Count"; @@ -113,5 +113,10 @@ public BaseItemFilterReader(ItemStack container, int slots) { } public void onTransferRateChange() {} + + @Override + protected void onContentsChanged(int slot) { + markDirty(); + } } } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 5b1749ad8d9..d7f36c3e37a 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -216,11 +216,6 @@ public void setStackInSlot(int slot, ItemStack stack) { super.setStackInSlot(slot, stack); } - @Override - protected void onContentsChanged(int slot) { - markDirty(); - } - @Override public void onTransferRateChange() { for (int i = 0; i < getSlots(); i++) { 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 eaf03d443a1..a9420c97414 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -7,6 +7,7 @@ import net.minecraftforge.common.util.Constants; import com.cleanroommc.modularui.utils.ItemStackItemHandler; +import org.jetbrains.annotations.NotNull; public abstract class BaseFilterReader extends ItemStackItemHandler { @@ -76,6 +77,12 @@ public NBTTagList getItemsNbt() { return nbt.getTagList(KEY_ITEMS, Constants.NBT.TAG_COMPOUND); } + @Override + public void setStackInSlot(int slot, @NotNull ItemStack stack) { + super.setStackInSlot(slot, stack); + onContentsChanged(slot); + } + @Override protected void validateSlotIndex(int slot) { if (slot < 0 || slot >= this.getSlots()) { From 6f1ddfce2109a4141fc4cc9c1b7e8a5807bd1a11 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 3 Feb 2024 22:48:39 -0700 Subject: [PATCH 196/260] sblss --- src/main/java/gregtech/common/covers/filter/Filter.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/Filter.java b/src/main/java/gregtech/common/covers/filter/Filter.java index 2f2619f4772..901c812def9 100644 --- a/src/main/java/gregtech/common/covers/filter/Filter.java +++ b/src/main/java/gregtech/common/covers/filter/Filter.java @@ -2,12 +2,11 @@ import gregtech.api.util.IDirtyNotifiable; +import net.minecraft.item.ItemStack; + import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.widget.Widget; - -import net.minecraft.item.ItemStack; - import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; From 769170079ebe36af309a97b3320a710c537667d4 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 4 Feb 2024 13:29:24 -0700 Subject: [PATCH 197/260] use `readByte()` in more places add static final "VALUES" to some enums --- .../java/gregtech/common/covers/CoverConveyor.java | 6 +++--- .../gregtech/common/covers/CoverFluidRegulator.java | 2 +- .../common/covers/CoverFluidVoidingAdvanced.java | 2 +- .../common/covers/CoverItemVoidingAdvanced.java | 12 ++++++------ src/main/java/gregtech/common/covers/CoverPump.java | 4 +++- .../java/gregtech/common/covers/CoverRoboticArm.java | 4 ++-- 6 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 72b16d0d59c..717406eb3b3 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -648,9 +648,9 @@ public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.readInitialSyncData(packetBuffer); this.transferRate = packetBuffer.readInt(); - this.conveyorMode = packetBuffer.readEnumValue(ConveyorMode.class); - this.distributionMode = packetBuffer.readEnumValue(DistributionMode.class); - this.manualImportExportMode = packetBuffer.readEnumValue(ManualImportExportMode.class); + this.conveyorMode = ConveyorMode.VALUES[packetBuffer.readByte()]; + this.distributionMode = DistributionMode.VALUES[packetBuffer.readByte()]; + this.manualImportExportMode = ManualImportExportMode.VALUES[packetBuffer.readByte()]; getItemFilterContainer().readInitialSyncData(packetBuffer); } diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 72e1b1bde2f..f04cae8e375 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -293,7 +293,7 @@ public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.readInitialSyncData(packetBuffer); - this.transferMode = packetBuffer.readEnumValue(TransferMode.class); + this.transferMode = TransferMode.VALUES[packetBuffer.readByte()]; } @Override diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index 8a591500dad..92761fb9e5b 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -150,7 +150,7 @@ public void renderCover(@NotNull CCRenderState renderState, @NotNull Matrix4 tra @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.readInitialSyncData(packetBuffer); - this.voidingMode = packetBuffer.readEnumValue(VoidingMode.class); + this.voidingMode = VoidingMode.VALUES[packetBuffer.readByte()]; } @Override diff --git a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java index 0c35b4c425a..d755df3eca4 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java @@ -142,18 +142,18 @@ public VoidingMode getVoidingMode() { return voidingMode; } - @Override - public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { - super.readInitialSyncData(packetBuffer); - this.voidingMode = packetBuffer.readEnumValue(VoidingMode.class); - } - @Override public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.writeInitialSyncData(packetBuffer); packetBuffer.writeByte(this.voidingMode.ordinal()); } + @Override + public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { + super.readInitialSyncData(packetBuffer); + this.voidingMode = VoidingMode.VALUES[packetBuffer.readByte()]; + } + @Override public void writeToNBT(NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index f1256801e8d..95ba359239e 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -318,7 +318,7 @@ public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.readInitialSyncData(packetBuffer); - this.pumpMode = packetBuffer.readEnumValue(PumpMode.class); + this.pumpMode = PumpMode.VALUES[packetBuffer.readByte()]; getFluidFilterContainer().readInitialSyncData(packetBuffer); } @@ -408,6 +408,7 @@ public enum PumpMode implements IStringSerializable, IIOMode { IMPORT("cover.pump.mode.import"), EXPORT("cover.pump.mode.export"); + public static final PumpMode[] VALUES = values(); public final String localeName; PumpMode(String localeName) { @@ -431,6 +432,7 @@ public enum BucketMode implements IStringSerializable { BUCKET("cover.bucket.mode.bucket"), MILLI_BUCKET("cover.bucket.mode.milli_bucket"); + public static final BucketMode[] VALUES = values(); public final String localeName; BucketMode(String localeName) { diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index 62b287721ed..0464e18c6a5 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -225,13 +225,13 @@ protected int getMaxStackSize() { @Override public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.writeInitialSyncData(packetBuffer); - packetBuffer.writeInt(this.transferMode.ordinal()); + packetBuffer.writeByte(this.transferMode.ordinal()); } @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.readInitialSyncData(packetBuffer); - this.transferMode = TransferMode.VALUES[packetBuffer.readInt()]; + this.transferMode = TransferMode.VALUES[packetBuffer.readByte()]; } @Override From 53ecc10828f7a673dc953769c7b0f99de58f0f25 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 5 Feb 2024 12:49:27 -0700 Subject: [PATCH 198/260] move count up to SimpleItemFilter remove unused method --- src/main/java/gregtech/common/covers/filter/ItemFilter.java | 6 ------ .../gregtech/common/covers/filter/SimpleItemFilter.java | 1 + 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index c1bf0b0a426..26c0107a882 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -48,10 +48,6 @@ public final void setMaxTransferSize(int maxStackSize) { this.filterReader.setMaxTransferRate(maxStackSize); } - public final void onMaxStackSizeChange() { - this.filterReader.onTransferRateChange(); - } - public abstract boolean showGlobalTransferLimitSlider(); public int getTransferLimit(int matchSlot, int globalTransferLimit) { @@ -106,8 +102,6 @@ public final void markDirty() { protected class BaseItemFilterReader extends BaseFilterReader { - protected static final String COUNT = "Count"; - public BaseItemFilterReader(ItemStack container, int slots) { super(container, slots); } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index d7f36c3e37a..545a71bbdeb 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -166,6 +166,7 @@ private static boolean areItemsEqual(boolean ignoreDamage, boolean ignoreNBTData protected class SimpleItemFilterReader extends BaseItemFilterReader { + public static final String COUNT = "Count"; public static final String RESPECT_NBT = "IgnoreNBT"; public static final String RESPECT_DAMAGE = "IgnoreDamage"; From 5ba493db30408ad2fb656b954a59eb7a0a6fdf6a Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 5 Feb 2024 12:50:23 -0700 Subject: [PATCH 199/260] add default impl for reading sync data remove unused method --- .../common/covers/filter/BaseFilterContainer.java | 8 +++----- .../common/covers/filter/FluidFilterContainer.java | 3 ++- .../common/covers/filter/ItemFilterContainer.java | 3 ++- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 979a0d729d0..12e2ca9f51e 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -142,17 +142,15 @@ public void writeInitialSyncData(PacketBuffer packetBuffer) { packetBuffer.writeItemStack(this.filterInventory.getStackInSlot(0)); } - public ItemStack readFilterStack(PacketBuffer buffer) { + public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { var stack = ItemStack.EMPTY; try { - stack = buffer.readItemStack(); + stack = packetBuffer.readItemStack(); } catch (IOException ignore) {} + this.filterInventory.setStackInSlot(0, stack); - return stack; } - public abstract void readInitialSyncData(@NotNull PacketBuffer packetBuffer); - @Override public NBTTagCompound serializeNBT() { NBTTagCompound tagCompound = new NBTTagCompound(); diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 6ffd0cec52e..a4338854445 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -138,7 +138,8 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { - var stack = readFilterStack(packetBuffer); + super.readInitialSyncData(packetBuffer); + var stack = getFilterInventory().getStackInSlot(0); if (FilterTypeRegistry.isFluidFilter(stack)) setFilter(FilterTypeRegistry.getFluidFilterForStack(stack)); diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 135312badea..6da3a94344c 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -142,7 +142,8 @@ protected void onFilterSlotChange(boolean notify) { @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { - var stack = readFilterStack(packetBuffer); + super.readInitialSyncData(packetBuffer); + var stack = getFilterInventory().getStackInSlot(0); if (FilterTypeRegistry.isItemFilter(stack)) setFilter(FilterTypeRegistry.getItemFilterForStack(stack)); From 829be794e7ded71daac956657b4bcc177e84239c Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 5 Feb 2024 23:14:23 -0700 Subject: [PATCH 200/260] pulled filter readers into their own classes small rework for filter readers fix more issues with nbt reading and syncing move FixedFluidSlotSH into its own class --- .../api/mui/sync/FixedFluidSlotSH.java | 151 +++++++++ .../common/covers/CoverFluidFilter.java | 16 +- .../common/covers/CoverItemFilter.java | 9 +- .../covers/filter/BaseFilterContainer.java | 15 +- .../covers/filter/FilterTypeRegistry.java | 13 + .../common/covers/filter/FluidFilter.java | 44 +-- .../covers/filter/FluidFilterContainer.java | 1 + .../common/covers/filter/ItemFilter.java | 21 +- .../covers/filter/ItemFilterContainer.java | 1 + .../filter/OreDictionaryItemFilter.java | 114 ++----- .../covers/filter/SimpleFluidFilter.java | 299 +----------------- .../covers/filter/SimpleItemFilter.java | 87 +---- .../common/covers/filter/SmartItemFilter.java | 31 +- .../filter/readers/BaseFilterReader.java | 65 ++-- .../covers/filter/readers/FilterReader.java | 50 +++ .../filter/readers/OreDictFilterReader.java | 106 +++++++ .../readers/SimpleFluidFilterReader.java | 183 +++++++++++ .../readers/SimpleItemFilterReader.java | 180 +++++++++++ .../filter/readers/SmartItemFilterReader.java | 33 ++ 19 files changed, 815 insertions(+), 604 deletions(-) create mode 100644 src/main/java/gregtech/api/mui/sync/FixedFluidSlotSH.java create mode 100644 src/main/java/gregtech/common/covers/filter/readers/FilterReader.java create mode 100644 src/main/java/gregtech/common/covers/filter/readers/OreDictFilterReader.java create mode 100644 src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java create mode 100644 src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java create mode 100644 src/main/java/gregtech/common/covers/filter/readers/SmartItemFilterReader.java diff --git a/src/main/java/gregtech/api/mui/sync/FixedFluidSlotSH.java b/src/main/java/gregtech/api/mui/sync/FixedFluidSlotSH.java new file mode 100644 index 00000000000..d547e04b525 --- /dev/null +++ b/src/main/java/gregtech/api/mui/sync/FixedFluidSlotSH.java @@ -0,0 +1,151 @@ +package gregtech.api.mui.sync; + +import com.cleanroommc.modularui.utils.MouseData; +import com.cleanroommc.modularui.value.sync.FluidSlotSyncHandler; + +import gregtech.common.covers.filter.readers.SimpleFluidFilterReader; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidTank; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; + +import org.jetbrains.annotations.Nullable; + +public class FixedFluidSlotSH extends FluidSlotSyncHandler { + + @Nullable + private FluidStack lastStoredPhantomFluid; + + public FixedFluidSlotSH(IFluidTank fluidTank) { + super(fluidTank); + if (this.updateCacheFromSource(true) && fluidTank.getFluid() != null) { + this.lastStoredPhantomFluid = fluidTank.getFluid().copy(); + } + } + + @Override + public void readOnServer(int id, PacketBuffer buf) { + super.readOnServer(id, buf); + if (id == 0) { + var fluid = getFluidTank().getFluid(); + if (this.lastStoredPhantomFluid == null && fluid != null || + (this.lastStoredPhantomFluid != null && !this.lastStoredPhantomFluid.isFluidEqual(fluid))) { + this.lastStoredPhantomFluid = fluid; + } + } + } + + @Override + public void setValue(@Nullable FluidStack value, boolean setSource, boolean sync) { + super.setValue(value, setSource, sync); + if (setSource) { + this.getFluidTank().drain(Integer.MAX_VALUE, true); + if (!isFluidEmpty(value)) { + this.getFluidTank().fill(value.copy(), true); + } + } + } + + @Override + public void tryClickPhantom(MouseData mouseData) { + EntityPlayer player = getSyncManager().getPlayer(); + ItemStack currentStack = player.inventory.getItemStack(); + FluidStack currentFluid = this.getFluidTank().getFluid(); + IFluidHandlerItem fluidHandlerItem = currentStack + .getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); + + if (mouseData.mouseButton == 0) { + if (currentStack.isEmpty() || fluidHandlerItem == null) { + if (this.canDrainSlot()) { + this.getFluidTank().drain(mouseData.shift ? Integer.MAX_VALUE : 1000, true); + } + } else { + FluidStack cellFluid = fluidHandlerItem.drain(Integer.MAX_VALUE, false); + if ((this.controlsAmount() || currentFluid == null) && cellFluid != null) { + if (this.canFillSlot()) { + if (!this.controlsAmount()) { + cellFluid.amount = 1; + } + if (this.getFluidTank().fill(cellFluid, true) > 0) { + this.lastStoredPhantomFluid = cellFluid.copy(); + } + } + } else { + if (this.canDrainSlot()) { + this.getFluidTank().drain(mouseData.shift ? Integer.MAX_VALUE : 1000, true); + } + } + } + } else if (mouseData.mouseButton == 1) { + if (this.canFillSlot()) { + if (currentFluid != null) { + if (this.controlsAmount()) { + FluidStack toFill = currentFluid.copy(); + toFill.amount = 1000; + this.getFluidTank().fill(toFill, true); + } + } else if (this.lastStoredPhantomFluid != null) { + FluidStack toFill = this.lastStoredPhantomFluid.copy(); + toFill.amount = this.controlsAmount() ? 1 : toFill.amount; + this.getFluidTank().fill(toFill, true); + } + } + } else if (mouseData.mouseButton == 2 && currentFluid != null && this.canDrainSlot()) { + this.getFluidTank().drain(mouseData.shift ? Integer.MAX_VALUE : 1000, true); + } + this.setValue(this.getFluidTank().getFluid(), false, true); + } + + @Override + public void tryScrollPhantom(MouseData mouseData) { + FluidStack currentFluid = this.getFluidTank().getFluid(); + int amount = mouseData.mouseButton; + if (!this.controlsAmount()) { + var fluid = getFluidTank().getFluid(); + int newAmt = amount == 1 ? 1 : 0; + if (fluid != null && fluid.amount != newAmt) { + fluid.amount = newAmt; + setValue(fluid, true, true); + return; + } + } + if (mouseData.shift) { + amount *= 10; + } + if (mouseData.ctrl) { + amount *= 100; + } + if (mouseData.alt) { + amount *= 1000; + } + if (currentFluid == null) { + if (amount > 0 && this.lastStoredPhantomFluid != null) { + FluidStack toFill = this.lastStoredPhantomFluid.copy(); + toFill.amount = this.controlsAmount() ? amount : 1; + this.getFluidTank().fill(toFill, true); + } + this.setValue(this.getFluidTank().getFluid(), false, true); + return; + } + if (amount > 0) { + FluidStack toFill = currentFluid.copy(); + toFill.amount = amount; + this.getFluidTank().fill(toFill, true); + } else if (amount < 0) { + this.getFluidTank().drain(-amount, true); + } + this.setValue(this.getFluidTank().getFluid(), false, true); + } + + @Override + public boolean controlsAmount() { + if (getFluidTank() instanceof SimpleFluidFilterReader.WritableFluidTank writableFluidTank) { + return writableFluidTank.showAmount(); + } + return super.controlsAmount(); + } +} diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 4306ae4b67e..dfcc603c69d 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -74,19 +74,19 @@ public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFaci @Nullable EntityPlayer player, @NotNull ItemStack itemStack) { super.onAttachment(coverableView, side, player, itemStack); var dropStack = GTUtility.copy(1, itemStack); - this.fluidFilterContainer.setFilter(FilterTypeRegistry.getFluidFilterForStack(dropStack)); + this.fluidFilterContainer.setFilterStack(dropStack); } @Override public @NotNull ItemStack getPickItem() { - return getFluidFilter().getContainerStack(); + return this.fluidFilterContainer.getFilterStack(); } @Override public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { packetBuffer.writeBoolean(this.fluidFilterContainer.hasFilter()); if (this.fluidFilterContainer.hasFilter()) { - packetBuffer.writeItemStack(getFluidFilter().getContainerStack()); + packetBuffer.writeItemStack(this.fluidFilterContainer.getFilterStack()); } } @@ -94,8 +94,7 @@ public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { if (!packetBuffer.readBoolean()) return; try { - this.fluidFilterContainer - .setFilter(FilterTypeRegistry.getFluidFilterForStack(packetBuffer.readItemStack())); + this.fluidFilterContainer.setFilterStack(packetBuffer.readItemStack()); } catch (IOException e) { GTLog.logger.error("Failed to read filter for CoverFluidFilter! %s", getPos().toString()); } @@ -156,11 +155,6 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .child(SlotGroupWidget.playerInventory().bottom(7).left(7)); } - @Override - public @NotNull @Unmodifiable List<@NotNull ItemStack> getDrops() { - return Collections.singletonList(this.fluidFilterContainer.getFilter().getContainerStack()); - } - @Override public void renderCover(@NotNull CCRenderState renderState, @NotNull Matrix4 translation, IVertexOperation[] pipeline, @NotNull Cuboid6 plateBox, @NotNull BlockRenderLayer layer) { @@ -192,7 +186,7 @@ public void writeToNBT(@NotNull NBTTagCompound tagCompound) { public void readFromNBT(@NotNull NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); this.filterMode = FluidFilterMode.values()[tagCompound.getInteger("FilterMode")]; - this.fluidFilterContainer.deserializeNBT(tagCompound); + this.fluidFilterContainer.deserializeNBT(tagCompound.getCompoundTag("Filter")); } private class FluidHandlerFiltered extends FluidHandlerDelegate { diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 584b85655d0..078c535434b 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -64,20 +64,19 @@ public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFaci @Nullable EntityPlayer player, @NotNull ItemStack itemStack) { super.onAttachment(coverableView, side, player, itemStack); var dropStack = GTUtility.copy(1, itemStack); - this.itemFilterContainer.setFilter(FilterTypeRegistry.getItemFilterForStack(dropStack)); - this.itemFilterContainer.setMaxTransferSize(1); + this.itemFilterContainer.setFilterStack(dropStack); } @Override public @NotNull ItemStack getPickItem() { - return getItemFilter().getContainerStack(); + return this.itemFilterContainer.getFilterStack(); } @Override public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { packetBuffer.writeBoolean(itemFilterContainer.hasFilter()); if (itemFilterContainer.hasFilter()) { - packetBuffer.writeItemStack(getItemFilter().getContainerStack()); + packetBuffer.writeItemStack(this.itemFilterContainer.getFilterStack()); } } @@ -85,7 +84,7 @@ public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { if (!packetBuffer.readBoolean()) return; try { - this.itemFilterContainer.setFilter(FilterTypeRegistry.getItemFilterForStack(packetBuffer.readItemStack())); + this.itemFilterContainer.setFilterStack(packetBuffer.readItemStack()); } catch (IOException e) { GTLog.logger.error("Failed to read filter for CoverItemFilter! %s", getPos().toString()); } diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 12e2ca9f51e..51f85a3bcf9 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -53,10 +53,23 @@ public final boolean hasFilter() { return currentFilter; } + public final @NotNull ItemStack getFilterStack() { + return this.filterInventory.getStackInSlot(0); + } + + @SuppressWarnings("unchecked") // really need to stop doing this + public final void setFilterStack(ItemStack stack) { + this.filterInventory.setStackInSlot(0, stack); + if (FilterTypeRegistry.isItemFilter(stack)) { + setFilter((T) FilterTypeRegistry.getItemFilterForStack(stack)); + } else { + setFilter((T) FilterTypeRegistry.getFluidFilterForStack(stack)); + } + } + public final void setFilter(@Nullable T newFilter) { this.currentFilter = newFilter; if (hasFilter()) { - this.filterInventory.setStackInSlot(0, this.currentFilter.getContainerStack()); this.currentFilter.setDirtyNotifiable(dirtyNotifiable); } if (onFilterInstanceChange != null) { diff --git a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java index e2a9f08e544..9a75f9ded55 100644 --- a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java +++ b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java @@ -115,6 +115,19 @@ public static FluidFilter createFluidFilterById(int filterId) { return createNewFilterInstance(filterClass, itemStack); } + public static @NotNull Filter getFilterForStack(ItemStack itemStack) { + int id = getFilterIdForStack(itemStack); + if (id == -1) { + throw new IllegalArgumentException( + String.format("Failed to create filter instance for stack %s", itemStack)); + } + + if (fluidFilterById.containsKey(id)) + return createNewFilterInstance(fluidFilterById.get(id), itemStack); + else + return createNewFilterInstance(itemFilterById.get(id), itemStack); + } + public static @NotNull FluidFilter getFluidFilterForStack(ItemStack itemStack) { int filterId = getFilterIdForStack(itemStack); if (filterId == -1) { diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index 202fbce7756..2754768fad6 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -25,9 +25,9 @@ public abstract class FluidFilter implements Filter { private IDirtyNotifiable dirtyNotifiable; - private BaseFluidFilterReader filterReader; + private BaseFilterReader filterReader; - protected void setFilterReader(BaseFluidFilterReader filterReader) { + protected void setFilterReader(BaseFilterReader filterReader) { this.filterReader = filterReader; } @@ -84,6 +84,7 @@ public final void onMaxStackSizeChange() { public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { this.dirtyNotifiable = dirtyNotifiable; + this.filterReader.setDirtyNotifiable(dirtyNotifiable); } public abstract void configureFilterTanks(int amount); @@ -102,43 +103,4 @@ public final void markDirty() { dirtyNotifiable.markAsDirty(); } } - - protected abstract static class BaseFluidFilterReader extends BaseFilterReader { - - protected static final String KEY_FLUIDS = "FluidFilter"; - protected static final String BUCKET_ONLY = "BucketOnly"; - - public BaseFluidFilterReader(ItemStack container, int slots) { - super(container, slots); - this.maxTransferRate = 1000; - } - - public final void setBucketOnly(boolean bucketOnly) { - getStackTag().setBoolean(BUCKET_ONLY, bucketOnly); - } - - public final boolean shouldShowAmount() { - return getMaxTransferRate() > 1; - } - - @Override - public NBTTagList getItemsNbt() { - NBTTagCompound nbt = getStackTag(); - if (!nbt.hasKey(KEY_FLUIDS)) { - NBTTagList list = new NBTTagList(); - for (int i = 0; i < getSlots(); i++) { - list.appendTag(new NBTTagCompound()); - } - nbt.setTag(KEY_FLUIDS, list); - } - return nbt.getTagList(KEY_FLUIDS, Constants.NBT.TAG_COMPOUND); - } - - @Nullable - public FluidStack getFluidStack(int i) { - return getFluidTank(i).getFluid(); - } - - public abstract IFluidTank getFluidTank(int i); - } } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index a4338854445..e8fdca45f00 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -22,6 +22,7 @@ import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.function.BooleanSupplier; import java.util.function.Consumer; diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java index 26c0107a882..2015ec51e78 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilter.java @@ -21,9 +21,9 @@ public abstract class ItemFilter implements Filter { private IDirtyNotifiable dirtyNotifiable; - private BaseItemFilterReader filterReader; + private BaseFilterReader filterReader; - protected void setFilterReader(BaseItemFilterReader reader) { + protected void setFilterReader(BaseFilterReader reader) { this.filterReader = reader; } @@ -82,7 +82,7 @@ public int getTransferLimit(ItemStack stack, int globalTransferLimit) { } public void readFromNBT(NBTTagCompound tagCompound) { - this.filterReader.readFromNBT(tagCompound); + this.filterReader.deserializeNBT(tagCompound); markDirty(); } @@ -92,6 +92,7 @@ protected static MatchResult createResult(boolean matched, ItemStack public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { this.dirtyNotifiable = dirtyNotifiable; + this.filterReader.setDirtyNotifiable(dirtyNotifiable); } public final void markDirty() { @@ -99,18 +100,4 @@ public final void markDirty() { dirtyNotifiable.markAsDirty(); } } - - protected class BaseItemFilterReader extends BaseFilterReader { - - public BaseItemFilterReader(ItemStack container, int slots) { - super(container, slots); - } - - public void onTransferRateChange() {} - - @Override - protected void onContentsChanged(int slot) { - markDirty(); - } - } } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 6da3a94344c..05cc3dfcec9 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -26,6 +26,7 @@ import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.function.BooleanSupplier; import java.util.function.Consumer; diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 5d9f274d5c8..77f81d19e47 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -10,6 +10,7 @@ import gregtech.api.util.oreglob.OreGlob; import gregtech.api.util.oreglob.OreGlobCompileResult; import gregtech.common.covers.filter.oreglob.impl.ImpossibleOreGlob; +import gregtech.common.covers.filter.readers.OreDictFilterReader; import gregtech.common.gui.widget.HighlightedTextField; import gregtech.common.gui.widget.orefilter.OreFilterTestSlot; @@ -45,13 +46,10 @@ public class OreDictionaryItemFilter extends ItemFilter { private final Map> matchCache = new Object2ObjectOpenHashMap<>(); private final SingleItemVariantMap noOreDictMatch = new SingleItemVariantMap<>(); - - private OreGlob glob = ImpossibleOreGlob.getInstance(); - private OreGlobCompileResult result; - private final OreDictionaryItemFilterReader filterReader; + private final OreDictFilterReader filterReader; public OreDictionaryItemFilter(ItemStack stack) { - this.filterReader = new OreDictionaryItemFilterReader(stack, 0); + this.filterReader = new OreDictFilterReader(stack); setFilterReader(this.filterReader); recompile(); } @@ -63,19 +61,12 @@ public String getExpression() { @NotNull public OreGlob getGlob() { - return this.glob; + return this.filterReader.getGlob(); } protected void recompile() { clearCache(); - String expr = this.filterReader.getExpression(); - if (!expr.isEmpty()) { - result = OreGlob.compile(expr, !this.filterReader.isCaseSensitive()); - this.glob = result.getInstance(); - } else { - this.glob = ImpossibleOreGlob.getInstance(); - result = null; - } + this.filterReader.recompile(); } protected void clearCache() { @@ -161,11 +152,13 @@ public void initUI(Consumer widgetGroup) {} protected void getStatusIcon(Widget widget) { UITexture texture; - if (this.result == null) { + var result = this.filterReader.getResult(); + + if (result == null) { texture = GTGuiTextures.OREDICT_WAITING; - } else if (this.result.getReports().length == 0) { + } else if (result.getReports().length == 0) { texture = GTGuiTextures.OREDICT_SUCCESS; - } else if (this.result.hasError()) { + } else if (result.hasError()) { texture = GTGuiTextures.OREDICT_ERROR; } else { texture = GTGuiTextures.OREDICT_WARN; @@ -174,11 +167,12 @@ protected void getStatusIcon(Widget widget) { } protected void createStatusTooltip(Tooltip tooltip) { - List list = new ArrayList<>(); + var result = this.filterReader.getResult(); if (result == null) return; + List list = new ArrayList<>(); int error = 0, warn = 0; - for (OreGlobCompileResult.Report report : this.result.getReports()) { + for (OreGlobCompileResult.Report report : result.getReports()) { if (report.isError()) error++; else warn++; list.add((report.isError() ? TextFormatting.RED : TextFormatting.GOLD) + report.toString()); @@ -198,7 +192,7 @@ protected void createStatusTooltip(Tooltip tooltip) { list.add(""); list.add(I18n.format("cover.ore_dictionary_filter.status.explain")); list.add(""); - list.addAll(this.result.getInstance().toFormattedString()); + list.addAll(result.getInstance().toFormattedString()); } tooltip.addStringLines(list); } @@ -261,7 +255,8 @@ public boolean test(ItemStack toTest) { } public boolean matchesItemStack(@NotNull ItemStack itemStack) { - if (this.result.hasError()) return false; + var result = this.filterReader.getResult(); + if (result == null || result.hasError()) return false; Item item = itemStack.getItem(); ItemVariantMap> oreDictEntry = OreDictUnifier.getOreDictionaryEntry(item); @@ -269,7 +264,7 @@ public boolean matchesItemStack(@NotNull ItemStack itemStack) { // no oredict entries associated Boolean cached = this.noOreDictMatch.getEntry(); if (cached == null) { - cached = this.glob.matches(""); + cached = this.filterReader.getGlob().matches(""); } this.matchCache.put(item, this.noOreDictMatch); return cached; @@ -286,7 +281,7 @@ public boolean matchesItemStack(@NotNull ItemStack itemStack) { // no oredict entries associated Boolean cached = this.noOreDictMatch.getEntry(); if (cached == null) { - cached = this.glob.matches(""); + cached = this.filterReader.getGlob().matches(""); this.noOreDictMatch.put(cached); } this.matchCache.put(item, this.noOreDictMatch); @@ -298,8 +293,9 @@ public boolean matchesItemStack(@NotNull ItemStack itemStack) { } this.matchCache.put(item, cacheEntry); } - boolean matches = this.filterReader.shouldMatchAll() ? this.glob.matchesAll(itemStack) : - this.glob.matchesAny(itemStack); + boolean matches = this.filterReader.shouldMatchAll() ? + this.filterReader.getGlob().matchesAll(itemStack) : + this.filterReader.getGlob().matchesAny(itemStack); cacheEntry.put(itemStack, matches); return matches; } @@ -313,72 +309,4 @@ public int getTransferLimit(int matchSlot, int globalTransferLimit) { public boolean showGlobalTransferLimitSlider() { return true; } - - protected class OreDictionaryItemFilterReader extends BaseItemFilterReader { - - private static final String EXPRESSION = "OreDictionaryFilter"; - private static final String CASE_SENSITIVE = "caseSensitive"; - private static final String MATCH_ALL = "matchAll"; - - public OreDictionaryItemFilterReader(ItemStack container, int slots) { - super(container, slots); - } - - public void setExpression(String expression) { - if (getStackTag().getString(EXPRESSION).equals(expression)) - return; - - getStackTag().setString(EXPRESSION, expression); - recompile(); - markDirty(); - } - - public String getExpression() { - return getStackTag().getString(EXPRESSION); - } - - public void setCaseSensitive(boolean caseSensitive) { - if (isCaseSensitive() == caseSensitive) - return; - - if (!caseSensitive) - getStackTag().setBoolean(CASE_SENSITIVE, false); - else - getStackTag().removeTag(CASE_SENSITIVE); - markDirty(); - } - - public boolean isCaseSensitive() { - return !getStackTag().hasKey(CASE_SENSITIVE); - } - - public void setMatchAll(boolean matchAll) { - if (shouldMatchAll() == matchAll) - return; - - if (!matchAll) - getStackTag().setBoolean(MATCH_ALL, false); - else - getStackTag().removeTag(MATCH_ALL); - - markDirty(); - } - - /** - * {@code false} requires any of the entry to be match in order for the match to be success, {@code true} - * requires - * all entries to match - */ - public boolean shouldMatchAll() { - return !getStackTag().hasKey(MATCH_ALL); - } - - @Override - public void readFromNBT(NBTTagCompound tagCompound) { - super.readFromNBT(tagCompound); - this.setExpression(tagCompound.getString(EXPRESSION)); - this.setCaseSensitive(tagCompound.getBoolean(CASE_SENSITIVE)); - this.setMatchAll(tagCompound.getBoolean(MATCH_ALL)); - } - } } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index 8f2880093dc..f2e7439a808 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -2,14 +2,14 @@ import gregtech.api.cover.CoverWithUI; import gregtech.api.mui.GTGuis; +import gregtech.api.mui.sync.FixedFluidSlotSH; +import gregtech.common.covers.filter.readers.SimpleFluidFilterReader; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; import net.minecraft.network.PacketBuffer; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.IFluidTank; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandlerItem; @@ -80,7 +80,7 @@ public ItemStack getContainerStack() { public MatchResult match(FluidStack toMatch) { int index = -1; FluidStack returnable = null; - for (int i = 0; i < filterReader.getSlots(); i++) { + for (int i = 0; i < filterReader.getSize(); i++) { var fluid = filterReader.getFluidStack(i); if (fluid != null && fluid.isFluidEqual(toMatch)) { index = i; @@ -93,7 +93,7 @@ public MatchResult match(FluidStack toMatch) { @Override public boolean test(FluidStack fluidStack) { - for (int i = 0; i < filterReader.getSlots(); i++) { + for (int i = 0; i < filterReader.getSize(); i++) { var fluid = filterReader.getFluidStack(i); if (fluid != null && fluid.isFluidEqual(fluidStack)) { return true; @@ -117,14 +117,15 @@ public boolean showGlobalTransferLimitSlider() { } public void readFromNBT(NBTTagCompound tagCompound) { - this.filterReader.readFromNBT(tagCompound); + this.filterReader.deserializeNBT(tagCompound); + markDirty(); } @Override public int getTransferLimit(FluidStack fluidStack, int transferSize) { int limit = 0; - for (int i = 0; i < this.filterReader.getSlots(); i++) { + for (int i = 0; i < this.filterReader.getSize(); i++) { var fluid = this.filterReader.getFluidStack(i); if (fluid != null && fluid.isFluidEqual(fluidStack)) { limit = fluid.amount; @@ -132,290 +133,4 @@ public int getTransferLimit(FluidStack fluidStack, int transferSize) { } return isBlacklistFilter() ? transferSize : limit; } - - protected class SimpleFluidFilterReader extends BaseFluidFilterReader { - - protected WritableFluidTank[] fluidTanks; - protected static final String CAPACITY = "Capacity"; - - public SimpleFluidFilterReader(ItemStack container, int slots) { - super(container, slots); - fluidTanks = new WritableFluidTank[slots]; - for (int i = 0; i < fluidTanks.length; i++) { - fluidTanks[i] = new WritableFluidTank(this, getItemsNbt().getCompoundTagAt(i)); - } - setCapacity(getStackTag().hasKey(CAPACITY) ? getCapacity() : 1000); - } - - public void setCapacity(int capacity) { - getStackTag().setInteger(CAPACITY, capacity); - markDirty(); - } - - public int getCapacity() { - return getStackTag().getInteger(CAPACITY); - } - - public WritableFluidTank getFluidTank(int i) { - return fluidTanks[i]; - } - - public void setFluidAmounts(int amount) { - for (int i = 0; i < getSlots(); i++) { - getFluidTank(i).setFluidAmount(amount); - } - } - - @Override - public void onTransferRateChange() { - for (int i = 0; i < getSlots(); i++) { - var stack = getFluidStack(i); - if (stack == null) continue; - getFluidTank(i).setFluidAmount(Math.min(stack.amount, getMaxTransferRate())); - } - setCapacity(getMaxTransferRate()); - } - - public void readFromNBT(NBTTagCompound tagCompound) { - NBTTagList filterSlots = tagCompound.getTagList(KEY_FLUIDS, 10); - for (int i = 0; i < filterSlots.tagCount(); i++) { - NBTTagCompound stackTag = filterSlots.getCompoundTagAt(i); - FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(stackTag); - if (fluidStack == null) continue; - getFluidTank(i).setFluid(fluidStack); - } - } - } - - public class WritableFluidTank extends FluidTank { - - private final NBTTagCompound fluidTank; - private final SimpleFluidFilterReader filterReader; - protected static final String FLUID_AMOUNT = "Amount"; - protected static final String FLUID = "Fluid"; - protected static final String EMPTY = "Empty"; - - protected WritableFluidTank(SimpleFluidFilterReader filterReader, NBTTagCompound fluidTank) { - super(0); - this.filterReader = filterReader; - this.fluidTank = fluidTank; - } - - public void setFluidAmount(int amount) { - if (amount <= 0) { - setFluid(null); - } else { - getFluidTag().setInteger(FLUID_AMOUNT, amount); - markDirty(); - } - } - - public boolean isEmpty() { - return getFluidTag().isEmpty(); - } - - protected NBTTagCompound getFluidTag() { - if (!this.fluidTank.hasKey(FLUID)) { - this.fluidTank.setTag(FLUID, new NBTTagCompound()); - } - - return this.fluidTank.getCompoundTag(FLUID); - } - - @Override - public @Nullable FluidStack getFluid() { - return FluidStack.loadFluidStackFromNBT(getFluidTag()); - } - - @Override - public void setFluid(@Nullable FluidStack stack) { - if (stack == null) { - this.fluidTank.setTag(FLUID, new NBTTagCompound()); - } else { - this.fluidTank.setTag(FLUID, stack.writeToNBT(getFluidTag())); - } - markDirty(); - } - - protected boolean showAmount() { - return filterReader.shouldShowAmount(); - } - - @Override - public int getFluidAmount() { - return getFluidTag().getInteger(FLUID_AMOUNT); - } - - @Override - public int getCapacity() { - return this.filterReader.getCapacity(); - } - - // getFluid() is checked for nullability, suppress - @SuppressWarnings("DataFlowIssue") - @Override - public int fill(FluidStack resource, boolean doFill) { - if (isEmpty() || !getFluid().isFluidEqual(resource)) { - setFluid(resource); - if (!showAmount()) setFluidAmount(1); - return resource.amount; - } else if (showAmount()) { - var fluid = getFluid(); - int accepted = Math.min(resource.amount, getCapacity() - fluid.amount); - fluid.amount += accepted; - setFluid(fluid); - return accepted; - } - return 0; - } - - // getFluid() is checked for nullability, suppress - @SuppressWarnings("DataFlowIssue") - @Override - public FluidStack drain(int maxDrain, boolean doDrain) { - if (isEmpty()) return null; - FluidStack fluid = getFluid(); - - fluid.amount -= Math.min(fluid.amount, maxDrain); - - setFluidAmount(fluid.amount); - markDirty(); - return fluid; - } - } - - public static class FixedFluidSlotSH extends FluidSlotSyncHandler { - - @Nullable - private FluidStack lastStoredPhantomFluid; - - public FixedFluidSlotSH(IFluidTank fluidTank) { - super(fluidTank); - if (this.updateCacheFromSource(true) && fluidTank.getFluid() != null) { - this.lastStoredPhantomFluid = fluidTank.getFluid().copy(); - } - } - - @Override - public void readOnServer(int id, PacketBuffer buf) { - super.readOnServer(id, buf); - if (id == 0) { - var fluid = getFluidTank().getFluid(); - if (this.lastStoredPhantomFluid == null && fluid != null || - (this.lastStoredPhantomFluid != null && !this.lastStoredPhantomFluid.isFluidEqual(fluid))) { - this.lastStoredPhantomFluid = fluid; - } - } - } - - @Override - public void setValue(@Nullable FluidStack value, boolean setSource, boolean sync) { - super.setValue(value, setSource, sync); - if (setSource) { - this.getFluidTank().drain(Integer.MAX_VALUE, true); - if (!isFluidEmpty(value)) { - this.getFluidTank().fill(value.copy(), true); - } - } - } - - @Override - public void tryClickPhantom(MouseData mouseData) { - EntityPlayer player = getSyncManager().getPlayer(); - ItemStack currentStack = player.inventory.getItemStack(); - FluidStack currentFluid = this.getFluidTank().getFluid(); - IFluidHandlerItem fluidHandlerItem = currentStack - .getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); - - if (mouseData.mouseButton == 0) { - if (currentStack.isEmpty() || fluidHandlerItem == null) { - if (this.canDrainSlot()) { - this.getFluidTank().drain(mouseData.shift ? Integer.MAX_VALUE : 1000, true); - } - } else { - FluidStack cellFluid = fluidHandlerItem.drain(Integer.MAX_VALUE, false); - if ((this.controlsAmount() || currentFluid == null) && cellFluid != null) { - if (this.canFillSlot()) { - if (!this.controlsAmount()) { - cellFluid.amount = 1; - } - if (this.getFluidTank().fill(cellFluid, true) > 0) { - this.lastStoredPhantomFluid = cellFluid.copy(); - } - } - } else { - if (this.canDrainSlot()) { - this.getFluidTank().drain(mouseData.shift ? Integer.MAX_VALUE : 1000, true); - } - } - } - } else if (mouseData.mouseButton == 1) { - if (this.canFillSlot()) { - if (currentFluid != null) { - if (this.controlsAmount()) { - FluidStack toFill = currentFluid.copy(); - toFill.amount = 1000; - this.getFluidTank().fill(toFill, true); - } - } else if (this.lastStoredPhantomFluid != null) { - FluidStack toFill = this.lastStoredPhantomFluid.copy(); - toFill.amount = this.controlsAmount() ? 1 : toFill.amount; - this.getFluidTank().fill(toFill, true); - } - } - } else if (mouseData.mouseButton == 2 && currentFluid != null && this.canDrainSlot()) { - this.getFluidTank().drain(mouseData.shift ? Integer.MAX_VALUE : 1000, true); - } - this.setValue(this.getFluidTank().getFluid(), false, true); - } - - @Override - public void tryScrollPhantom(MouseData mouseData) { - FluidStack currentFluid = this.getFluidTank().getFluid(); - int amount = mouseData.mouseButton; - if (!this.controlsAmount()) { - var fluid = getFluidTank().getFluid(); - int newAmt = amount == 1 ? 1 : 0; - if (fluid != null && fluid.amount != newAmt) { - fluid.amount = newAmt; - setValue(fluid, true, true); - return; - } - } - if (mouseData.shift) { - amount *= 10; - } - if (mouseData.ctrl) { - amount *= 100; - } - if (mouseData.alt) { - amount *= 1000; - } - if (currentFluid == null) { - if (amount > 0 && this.lastStoredPhantomFluid != null) { - FluidStack toFill = this.lastStoredPhantomFluid.copy(); - toFill.amount = this.controlsAmount() ? amount : 1; - this.getFluidTank().fill(toFill, true); - } - this.setValue(this.getFluidTank().getFluid(), false, true); - return; - } - if (amount > 0) { - FluidStack toFill = currentFluid.copy(); - toFill.amount = amount; - this.getFluidTank().fill(toFill, true); - } else if (amount < 0) { - this.getFluidTank().drain(-amount, true); - } - this.setValue(this.getFluidTank().getFluid(), false, true); - } - - @Override - public boolean controlsAmount() { - if (getFluidTank() instanceof WritableFluidTank writableFluidTank) { - return writableFluidTank.showAmount(); - } - return super.controlsAmount(); - } - } } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 545a71bbdeb..1356bb08eb5 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -8,6 +8,8 @@ import gregtech.api.mui.GTGuis; import gregtech.api.util.TextFormattingUtil; +import gregtech.common.covers.filter.readers.SimpleItemFilterReader; + import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.items.IItemHandler; @@ -111,8 +113,7 @@ public void initUI(Consumer widgetGroup) { }) .tooltipBuilder(tooltip -> { tooltip.addLine(IKey.lang("cover.item_filter.config_amount")); - int count = this.filterReader.getItemsNbt() - .getCompoundTagAt(index) + int count = this.filterReader.getTagAt(index) .getInteger(SimpleItemFilterReader.COUNT); if (count > 64) tooltip.addLine( @@ -163,86 +164,4 @@ private static boolean areItemsEqual(boolean ignoreDamage, boolean ignoreNBTData } return ignoreNBTData || ItemStack.areItemStackTagsEqual(filterStack, itemStack); } - - protected class SimpleItemFilterReader extends BaseItemFilterReader { - - public static final String COUNT = "Count"; - public static final String RESPECT_NBT = "IgnoreNBT"; - public static final String RESPECT_DAMAGE = "IgnoreDamage"; - - public SimpleItemFilterReader(ItemStack container, int slots) { - super(container, slots); - } - - protected void setIgnoreDamage(boolean ignoreDamage) { - if (!getStackTag().getBoolean(RESPECT_DAMAGE) == ignoreDamage) - return; - - if (ignoreDamage) - getStackTag().removeTag(RESPECT_DAMAGE); - else - getStackTag().setBoolean(RESPECT_DAMAGE, true); - markDirty(); - } - - protected void setIgnoreNBT(boolean ignoreNBT) { - if (!getStackTag().getBoolean(RESPECT_NBT) == ignoreNBT) - return; - - if (ignoreNBT) - getStackTag().removeTag(RESPECT_NBT); - else - getStackTag().setBoolean(RESPECT_NBT, true); - markDirty(); - } - - public boolean isIgnoreDamage() { - return !getStackTag().getBoolean(RESPECT_DAMAGE); - } - - public boolean isIgnoreNBT() { - return !getStackTag().getBoolean(RESPECT_NBT); - } - - @Override - public int getSlotLimit(int slot) { - return getMaxTransferRate(); - } - - @Override - public void setStackInSlot(int slot, ItemStack stack) { - if (!stack.isEmpty()) { - stack.setCount(Math.min(stack.getCount(), isBlacklistFilter() ? 1 : getMaxTransferRate())); - } - super.setStackInSlot(slot, stack); - } - - @Override - public void onTransferRateChange() { - for (int i = 0; i < getSlots(); i++) { - ItemStack itemStack = getStackInSlot(i); - if (!itemStack.isEmpty()) { - itemStack.setCount(Math.min(itemStack.getCount(), isBlacklistFilter() ? 1 : getMaxTransferRate())); - setStackInSlot(i, itemStack); - } - } - } - - @Override - public void readFromNBT(NBTTagCompound tagCompound) { - super.readFromNBT(tagCompound); - this.setIgnoreDamage(tagCompound.getBoolean(RESPECT_DAMAGE)); - this.setIgnoreNBT(tagCompound.getBoolean(RESPECT_NBT)); - - if (tagCompound.hasKey(KEY_ITEMS)) { - var temp = new ItemStackHandler(); - temp.deserializeNBT(tagCompound.getCompoundTag(KEY_ITEMS)); - for (int i = 0; i < temp.getSlots(); i++) { - var stack = temp.getStackInSlot(i); - if (stack.isEmpty()) continue; - this.setStackInSlot(i, stack); - } - } - } - } } diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 8f968d68508..9d7bb742a17 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -10,6 +10,8 @@ import gregtech.api.recipes.ingredients.GTRecipeInput; import gregtech.api.unification.stack.ItemAndMetadata; +import gregtech.common.covers.filter.readers.SmartItemFilterReader; + import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.IStringSerializable; @@ -32,7 +34,7 @@ public class SmartItemFilter extends ItemFilter { - private SmartItemFilterReader filterReader; + private final SmartItemFilterReader filterReader; public SmartItemFilter(ItemStack stack) { this.filterReader = new SmartItemFilterReader(stack); @@ -177,31 +179,4 @@ public String getName() { return localeName; } } - - protected class SmartItemFilterReader extends BaseItemFilterReader { - - private static final String FILTER_MODE = "FilterMode"; - - public SmartItemFilterReader(ItemStack container) { - super(container, 0); - } - - public SmartFilteringMode getFilteringMode() { - if (!getStackTag().hasKey(FILTER_MODE)) - setFilteringMode(SmartFilteringMode.ELECTROLYZER); - - return SmartFilteringMode.VALUES[getStackTag().getInteger(FILTER_MODE)]; - } - - public void setFilteringMode(SmartFilteringMode filteringMode) { - getStackTag().setInteger(FILTER_MODE, filteringMode.ordinal()); - markDirty(); - } - - @Override - public void readFromNBT(NBTTagCompound tagCompound) { - super.readFromNBT(tagCompound); - this.setFilteringMode(SmartFilteringMode.VALUES[tagCompound.getInteger(FILTER_MODE)]); - } - } } 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 a9420c97414..a46152b4b5b 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -1,5 +1,7 @@ package gregtech.common.covers.filter.readers; +import gregtech.api.util.IDirtyNotifiable; + import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -7,25 +9,44 @@ import net.minecraftforge.common.util.Constants; import com.cleanroommc.modularui.utils.ItemStackItemHandler; + +import net.minecraftforge.common.util.INBTSerializable; + import org.jetbrains.annotations.NotNull; -public abstract class BaseFilterReader extends ItemStackItemHandler { +public abstract class BaseFilterReader implements FilterReader, INBTSerializable { protected final ItemStack container; + private IDirtyNotifiable dirtyNotifiable; + private final int size; protected int maxTransferRate = 1; - protected static final String KEY_ITEMS = "ItemFilter"; protected static final String BLACKLIST = "IsBlacklist"; public BaseFilterReader(ItemStack container, int slots) { - super(container, slots); this.container = container; + this.size = slots; } public ItemStack getContainer() { return this.container; } - public abstract void onTransferRateChange(); + @Override + public int getSize() { + return this.size; + } + + public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { + this.dirtyNotifiable = dirtyNotifiable; + } + + public final void markDirty() { + if (dirtyNotifiable != null) { + dirtyNotifiable.markAsDirty(); + } + } + + public void onTransferRateChange() {} public final void setBlacklistFilter(boolean blacklistFilter) { setWhitelist(!blacklistFilter); @@ -42,6 +63,7 @@ private void setWhitelist(boolean whitelist) { else getStackTag().setBoolean(BLACKLIST, true); onTransferRateChange(); + markDirty(); } } @@ -57,40 +79,19 @@ public int getMaxTransferRate() { return isBlacklistFilter() ? 1 : this.maxTransferRate; } - protected NBTTagCompound getStackTag() { - if (!container.hasTagCompound()) { - container.setTagCompound(new NBTTagCompound()); - } - return container.getTagCompound(); - } - @Override - public NBTTagList getItemsNbt() { - NBTTagCompound nbt = getStackTag(); - if (!nbt.hasKey(KEY_ITEMS)) { - NBTTagList list = new NBTTagList(); - for (int i = 0; i < getSlots(); i++) { - list.appendTag(new NBTTagCompound()); - } - nbt.setTag(KEY_ITEMS, list); - } - return nbt.getTagList(KEY_ITEMS, Constants.NBT.TAG_COMPOUND); + public boolean validateSlotIndex(int slot) { + return slot >= 0 && slot < getSize(); } @Override - public void setStackInSlot(int slot, @NotNull ItemStack stack) { - super.setStackInSlot(slot, stack); - onContentsChanged(slot); + public NBTTagCompound serializeNBT() { + return getStackTag(); } @Override - protected void validateSlotIndex(int slot) { - if (slot < 0 || slot >= this.getSlots()) { - throw new RuntimeException("Slot " + slot + " not in valid range - [0," + this.getSlots() + ")"); - } - } - - public void readFromNBT(NBTTagCompound tagCompound) { - setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); + public void deserializeNBT(NBTTagCompound nbt) { + if (nbt.hasKey(BLACKLIST)) + setBlacklistFilter(nbt.getBoolean(BLACKLIST)); } } diff --git a/src/main/java/gregtech/common/covers/filter/readers/FilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/FilterReader.java new file mode 100644 index 00000000000..3c5e301ed21 --- /dev/null +++ b/src/main/java/gregtech/common/covers/filter/readers/FilterReader.java @@ -0,0 +1,50 @@ +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; + +import org.jetbrains.annotations.NotNull; + +public interface FilterReader { + ItemStack getContainer(); + + @NotNull + default NBTTagList getInventoryNbt() { + var nbt = getStackTag(); + String key = getKey(); + if (!nbt.hasKey(key)) { + NBTTagList list = new NBTTagList(); + for (int i = 0; i < getSize(); i++) { + list.appendTag(new NBTTagCompound()); + } + nbt.setTag(key, list); + } + return nbt.getTagList(key, Constants.NBT.TAG_COMPOUND); + } + + @NotNull + default NBTTagCompound getStackTag() { + NBTTagCompound nbt = getContainer().getTagCompound(); + if (nbt == null) { + nbt = new NBTTagCompound(); + getContainer().setTagCompound(nbt); + } + return nbt; + } + + String getKey(); + + int getSize(); + + boolean validateSlotIndex(int slot); + + @NotNull + default 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/OreDictFilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/OreDictFilterReader.java new file mode 100644 index 00000000000..89f3e476ad9 --- /dev/null +++ b/src/main/java/gregtech/common/covers/filter/readers/OreDictFilterReader.java @@ -0,0 +1,106 @@ +package gregtech.common.covers.filter.readers; + +import gregtech.api.util.oreglob.OreGlob; +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; + +public class OreDictFilterReader extends SimpleItemFilterReader { + private static final String EXPRESSION = "OreDictionaryFilter"; + private static final String CASE_SENSITIVE = "caseSensitive"; + private static final String MATCH_ALL = "matchAll"; + + private OreGlob glob = ImpossibleOreGlob.getInstance(); + private OreGlobCompileResult result; + + public OreDictFilterReader(ItemStack container) { + super(container, 0); + } + + public void setExpression(String expression) { + if (getStackTag().getString(EXPRESSION).equals(expression)) + return; + + getStackTag().setString(EXPRESSION, expression); + recompile(); + markDirty(); + } + + public String getExpression() { + return getStackTag().getString(EXPRESSION); + } + + public void setCaseSensitive(boolean caseSensitive) { + if (isCaseSensitive() == caseSensitive) + return; + + if (!caseSensitive) + getStackTag().setBoolean(CASE_SENSITIVE, false); + else + getStackTag().removeTag(CASE_SENSITIVE); + markDirty(); + } + + public boolean isCaseSensitive() { + return !getStackTag().hasKey(CASE_SENSITIVE); + } + + public void setMatchAll(boolean matchAll) { + if (shouldMatchAll() == matchAll) + return; + + if (!matchAll) + getStackTag().setBoolean(MATCH_ALL, false); + else + getStackTag().removeTag(MATCH_ALL); + + markDirty(); + } + + /** + * {@code false} requires any of the entry to be match in order for the match to be success, {@code true} + * requires + * all entries to match + */ + public boolean shouldMatchAll() { + return !getStackTag().hasKey(MATCH_ALL); + } + + @NotNull + public OreGlob getGlob() { + return this.glob; + } + + public OreGlobCompileResult getResult() { + return this.result; + } + + public void recompile() { + String expr = getExpression(); + if (!expr.isEmpty()) { + result = OreGlob.compile(expr, !isCaseSensitive()); + this.glob = result.getInstance(); + } else { + this.glob = ImpossibleOreGlob.getInstance(); + result = null; + } + } + + @Override + public void deserializeNBT(NBTTagCompound nbt) { + super.deserializeNBT(nbt); + if (nbt.hasKey(EXPRESSION)) + this.setExpression(nbt.getString(EXPRESSION)); + + if (nbt.hasKey(CASE_SENSITIVE)) + this.setCaseSensitive(nbt.getBoolean(CASE_SENSITIVE)); + + if (nbt.hasKey(MATCH_ALL)) + this.setMatchAll(nbt.getBoolean(MATCH_ALL)); + } +} diff --git a/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java new file mode 100644 index 00000000000..5689ba37813 --- /dev/null +++ b/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java @@ -0,0 +1,183 @@ +package gregtech.common.covers.filter.readers; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; + +import org.jetbrains.annotations.Nullable; + +public class SimpleFluidFilterReader extends BaseFilterReader { + + protected WritableFluidTank[] fluidTanks; + protected static final String CAPACITY = "Capacity"; + + protected static final String KEY_FLUIDS = "FluidFilter"; + protected static final String BUCKET_ONLY = "BucketOnly"; + + public SimpleFluidFilterReader(ItemStack container, int slots) { + super(container, slots); + fluidTanks = new WritableFluidTank[slots]; + for (int i = 0; i < fluidTanks.length; i++) { + fluidTanks[i] = new WritableFluidTank(this, getInventoryNbt().getCompoundTagAt(i)); + } + setCapacity(getStackTag().hasKey(CAPACITY) ? getCapacity() : 1000); + } + + @Override + public String getKey() { + return KEY_FLUIDS; + } + + public final void setBucketOnly(boolean bucketOnly) { + getStackTag().setBoolean(BUCKET_ONLY, bucketOnly); + } + + public final boolean shouldShowAmount() { + return getMaxTransferRate() > 1; + } + + @Nullable + public FluidStack getFluidStack(int i) { + return getFluidTank(i).getFluid(); + } + + public void setCapacity(int capacity) { + getStackTag().setInteger(CAPACITY, capacity); + markDirty(); + } + + public int getCapacity() { + return getStackTag().getInteger(CAPACITY); + } + + public WritableFluidTank getFluidTank(int i) { + return fluidTanks[i]; + } + + public void setFluidAmounts(int amount) { + for (int i = 0; i < getSize(); i++) { + getFluidTank(i).setFluidAmount(amount); + } + } + + @Override + public void onTransferRateChange() { + for (int i = 0; i < getSize(); i++) { + var stack = getFluidStack(i); + if (stack == null) continue; + getFluidTank(i).setFluidAmount(Math.min(stack.amount, getMaxTransferRate())); + } + setCapacity(getMaxTransferRate()); + } + + @Override + public void deserializeNBT(NBTTagCompound nbt) { + super.deserializeNBT(nbt); + NBTTagList filterSlots = nbt.getTagList(KEY_FLUIDS, 10); + for (int i = 0; i < filterSlots.tagCount(); i++) { + NBTTagCompound stackTag = filterSlots.getCompoundTagAt(i); + FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(stackTag); + if (fluidStack == null) continue; + getFluidTank(i).setFluid(fluidStack); + } + } + + public class WritableFluidTank extends FluidTank { + + private final NBTTagCompound fluidTank; + private final SimpleFluidFilterReader filterReader; + protected static final String FLUID_AMOUNT = "Amount"; + protected static final String FLUID = "Fluid"; + protected static final String EMPTY = "Empty"; + + protected WritableFluidTank(SimpleFluidFilterReader filterReader, NBTTagCompound fluidTank) { + super(0); + this.filterReader = filterReader; + this.fluidTank = fluidTank; + } + + public void setFluidAmount(int amount) { + if (amount <= 0) { + setFluid(null); + } else { + getFluidTag().setInteger(FLUID_AMOUNT, amount); + markDirty(); + } + } + + public boolean isEmpty() { + return getFluidTag().isEmpty(); + } + + protected NBTTagCompound getFluidTag() { + if (!this.fluidTank.hasKey(FLUID)) { + this.fluidTank.setTag(FLUID, new NBTTagCompound()); + } + + return this.fluidTank.getCompoundTag(FLUID); + } + + @Override + public @Nullable FluidStack getFluid() { + return FluidStack.loadFluidStackFromNBT(getFluidTag()); + } + + @Override + public void setFluid(@Nullable FluidStack stack) { + if (stack == null) { + this.fluidTank.setTag(FLUID, new NBTTagCompound()); + } else { + this.fluidTank.setTag(FLUID, stack.writeToNBT(getFluidTag())); + } + markDirty(); + } + + public boolean showAmount() { + return filterReader.shouldShowAmount(); + } + + @Override + public int getFluidAmount() { + return getFluidTag().getInteger(FLUID_AMOUNT); + } + + @Override + public int getCapacity() { + return this.filterReader.getCapacity(); + } + + // getFluid() is checked for nullability, suppress + @SuppressWarnings("DataFlowIssue") + @Override + public int fill(FluidStack resource, boolean doFill) { + if (isEmpty() || !getFluid().isFluidEqual(resource)) { + setFluid(resource); + if (!showAmount()) setFluidAmount(1); + return resource.amount; + } else if (showAmount()) { + var fluid = getFluid(); + int accepted = Math.min(resource.amount, getCapacity() - fluid.amount); + fluid.amount += accepted; + setFluid(fluid); + return accepted; + } + return 0; + } + + // getFluid() is checked for nullability, suppress + @SuppressWarnings("DataFlowIssue") + @Override + public FluidStack drain(int maxDrain, boolean doDrain) { + if (isEmpty()) return null; + FluidStack fluid = getFluid(); + + fluid.amount -= Math.min(fluid.amount, maxDrain); + + setFluidAmount(fluid.amount); + markDirty(); + return fluid; + } + } +} diff --git a/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java new file mode 100644 index 00000000000..8eaf674517c --- /dev/null +++ b/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java @@ -0,0 +1,180 @@ +package gregtech.common.covers.filter.readers; + +import gregtech.api.util.GTUtility; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.ItemHandlerHelper; +import net.minecraftforge.items.ItemStackHandler; + +import org.jetbrains.annotations.NotNull; + +public class SimpleItemFilterReader extends BaseFilterReader implements IItemHandlerModifiable { + + public static final String COUNT = "Count"; + protected static final String KEY_ITEMS = "ItemFilter"; + public static final String RESPECT_NBT = "IgnoreNBT"; + public static final String RESPECT_DAMAGE = "IgnoreDamage"; + + public SimpleItemFilterReader(ItemStack container, int slots) { + super(container, slots); + } + + public void setIgnoreDamage(boolean ignoreDamage) { + if (!getStackTag().getBoolean(RESPECT_DAMAGE) == ignoreDamage) + return; + + if (ignoreDamage) + getStackTag().removeTag(RESPECT_DAMAGE); + else + getStackTag().setBoolean(RESPECT_DAMAGE, true); + markDirty(); + } + + @Override + public int getSlots() { + return getSize(); + } + + @Override + public String getKey() { + return KEY_ITEMS; + } + + public void setIgnoreNBT(boolean ignoreNBT) { + if (!getStackTag().getBoolean(RESPECT_NBT) == ignoreNBT) + return; + + if (ignoreNBT) + getStackTag().removeTag(RESPECT_NBT); + else + getStackTag().setBoolean(RESPECT_NBT, true); + markDirty(); + } + + public boolean isIgnoreDamage() { + return !getStackTag().getBoolean(RESPECT_DAMAGE); + } + + public boolean isIgnoreNBT() { + return !getStackTag().getBoolean(RESPECT_NBT); + } + + @Override + public int getSlotLimit(int slot) { + return getMaxTransferRate(); + } + + @NotNull + @Override + public ItemStack getStackInSlot(int slot) { + if (validateSlotIndex(slot)) { + NBTTagCompound item = getTagAt(slot); + return item.isEmpty() ? ItemStack.EMPTY : new ItemStack(item); + } + return ItemStack.EMPTY; + } + + @Override + public void setStackInSlot(int slot, ItemStack stack) { + if (validateSlotIndex(slot)) { + if (!stack.isEmpty()) { + stack.setCount(Math.min(stack.getCount(), isBlacklistFilter() ? 1 : getMaxTransferRate())); + } + NBTTagList list = getInventoryNbt(); + list.set(slot, stack.isEmpty() ? new NBTTagCompound() : stack.serializeNBT()); + } + } + + @NotNull + @Override + public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate) { + if (stack.isEmpty()) return stack; + ItemStack existing = getStackInSlot(slot); + + int limit = getStackLimit(slot, stack); + + if (!existing.isEmpty()) { + if (!ItemHandlerHelper.canItemStacksStack(stack, existing)) + return stack; + + limit -= existing.getCount(); + } + + if (limit <= 0) return stack; + + boolean reachedLimit = stack.getCount() > limit; + + if (!simulate) { + if (existing.isEmpty()) { + setStackInSlot(slot, reachedLimit ? ItemHandlerHelper.copyStackWithSize(stack, limit) : stack); + } else { + existing.grow(reachedLimit ? limit : stack.getCount()); + setStackInSlot(slot, existing); + } + } + + return reachedLimit ? GTUtility.copy(stack.getCount() - limit, stack) : ItemStack.EMPTY; + } + + @NotNull + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + if (amount == 0) return ItemStack.EMPTY; + + ItemStack existing = getStackInSlot(slot); + if (existing.isEmpty()) return ItemStack.EMPTY; + + int toExtract = Math.min(amount, existing.getMaxStackSize()); + + if (existing.getCount() <= toExtract) { + if (!simulate) { + setStackInSlot(slot, ItemStack.EMPTY); + } + return existing; + } else { + if (!simulate) { + setStackInSlot(slot, ItemHandlerHelper.copyStackWithSize(existing, existing.getCount() - toExtract)); + } + + return GTUtility.copy(toExtract, existing); + } + } + + protected int getStackLimit(int slot, @NotNull ItemStack stack) { + return Math.min(getSlotLimit(slot), stack.getMaxStackSize()); + } + + @Override + public void onTransferRateChange() { + for (int i = 0; i < getSlots(); i++) { + ItemStack itemStack = getStackInSlot(i); + if (!itemStack.isEmpty()) { + itemStack.setCount(Math.min(itemStack.getCount(), isBlacklistFilter() ? 1 : getMaxTransferRate())); + setStackInSlot(i, itemStack); + } + } + } + + @Override + public void deserializeNBT(NBTTagCompound nbt) { + super.deserializeNBT(nbt); + if (nbt.hasKey(RESPECT_DAMAGE)) + this.setIgnoreDamage(nbt.getBoolean(RESPECT_DAMAGE)); + + if (nbt.hasKey(RESPECT_NBT)) + this.setIgnoreNBT(nbt.getBoolean(RESPECT_NBT)); + + if (nbt.hasKey(KEY_ITEMS)) { + var temp = new ItemStackHandler(); + temp.deserializeNBT(nbt.getCompoundTag(KEY_ITEMS)); + for (int i = 0; i < temp.getSlots(); i++) { + var stack = temp.getStackInSlot(i); + if (stack.isEmpty()) continue; + this.setStackInSlot(i, stack); + } + } + } +} diff --git a/src/main/java/gregtech/common/covers/filter/readers/SmartItemFilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/SmartItemFilterReader.java new file mode 100644 index 00000000000..9e662f71e94 --- /dev/null +++ b/src/main/java/gregtech/common/covers/filter/readers/SmartItemFilterReader.java @@ -0,0 +1,33 @@ +package gregtech.common.covers.filter.readers; + +import gregtech.common.covers.filter.SmartItemFilter; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +public class SmartItemFilterReader extends SimpleItemFilterReader { + + private static final String FILTER_MODE = "FilterMode"; + + public SmartItemFilterReader(ItemStack container) { + super(container, 0); + } + + public SmartItemFilter.SmartFilteringMode getFilteringMode() { + if (!getStackTag().hasKey(FILTER_MODE)) + setFilteringMode(SmartItemFilter.SmartFilteringMode.ELECTROLYZER); + + return SmartItemFilter.SmartFilteringMode.VALUES[getStackTag().getInteger(FILTER_MODE)]; + } + + public void setFilteringMode(SmartItemFilter.SmartFilteringMode filteringMode) { + getStackTag().setInteger(FILTER_MODE, filteringMode.ordinal()); + markDirty(); + } + + @Override + public void deserializeNBT(NBTTagCompound nbt) { + super.deserializeNBT(nbt); + this.setFilteringMode(SmartItemFilter.SmartFilteringMode.VALUES[nbt.getInteger(FILTER_MODE)]); + } +} From 9b8db5910b4b9f4c14aa7f6ed36b84212dce8456 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 5 Feb 2024 23:15:04 -0700 Subject: [PATCH 201/260] spotless --- src/main/java/gregtech/api/mui/sync/FixedFluidSlotSH.java | 5 ++--- .../java/gregtech/common/covers/CoverFluidFilter.java | 4 ---- src/main/java/gregtech/common/covers/CoverItemFilter.java | 1 - .../java/gregtech/common/covers/filter/FluidFilter.java | 5 ----- .../common/covers/filter/FluidFilterContainer.java | 1 - .../common/covers/filter/ItemFilterContainer.java | 1 - .../common/covers/filter/OreDictionaryItemFilter.java | 2 -- .../gregtech/common/covers/filter/SimpleFluidFilter.java | 8 -------- .../gregtech/common/covers/filter/SimpleItemFilter.java | 3 --- .../gregtech/common/covers/filter/SmartItemFilter.java | 2 -- .../common/covers/filter/readers/BaseFilterReader.java | 7 ------- .../common/covers/filter/readers/FilterReader.java | 3 ++- .../common/covers/filter/readers/OreDictFilterReader.java | 2 +- 13 files changed, 5 insertions(+), 39 deletions(-) diff --git a/src/main/java/gregtech/api/mui/sync/FixedFluidSlotSH.java b/src/main/java/gregtech/api/mui/sync/FixedFluidSlotSH.java index d547e04b525..bf3c6c581d7 100644 --- a/src/main/java/gregtech/api/mui/sync/FixedFluidSlotSH.java +++ b/src/main/java/gregtech/api/mui/sync/FixedFluidSlotSH.java @@ -1,8 +1,5 @@ package gregtech.api.mui.sync; -import com.cleanroommc.modularui.utils.MouseData; -import com.cleanroommc.modularui.value.sync.FluidSlotSyncHandler; - import gregtech.common.covers.filter.readers.SimpleFluidFilterReader; import net.minecraft.entity.player.EntityPlayer; @@ -13,6 +10,8 @@ import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandlerItem; +import com.cleanroommc.modularui.utils.MouseData; +import com.cleanroommc.modularui.value.sync.FluidSlotSyncHandler; import org.jetbrains.annotations.Nullable; public class FixedFluidSlotSH extends FluidSlotSyncHandler { diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index dfcc603c69d..3aa084d7d79 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -8,7 +8,6 @@ import gregtech.api.util.GTLog; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; -import gregtech.common.covers.filter.FilterTypeRegistry; import gregtech.common.covers.filter.FluidFilter; import gregtech.common.covers.filter.FluidFilterContainer; @@ -41,11 +40,8 @@ import com.cleanroommc.modularui.widgets.layout.Column; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.Unmodifiable; import java.io.IOException; -import java.util.Collections; -import java.util.List; public class CoverFluidFilter extends CoverBase implements CoverWithUI { diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 078c535434b..0dda5b0dcb1 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -8,7 +8,6 @@ import gregtech.api.util.GTLog; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; -import gregtech.common.covers.filter.FilterTypeRegistry; import gregtech.common.covers.filter.ItemFilter; import gregtech.common.covers.filter.ItemFilterContainer; diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java index 2754768fad6..14ebbfdf046 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilter.java @@ -4,12 +4,8 @@ import gregtech.api.util.IDirtyNotifiable; import gregtech.common.covers.filter.readers.BaseFilterReader; -import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraftforge.common.util.Constants; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidTank; import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.value.sync.BooleanSyncValue; @@ -18,7 +14,6 @@ import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.CycleButtonWidget; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.function.Consumer; diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index e8fdca45f00..a4338854445 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -22,7 +22,6 @@ import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.function.BooleanSupplier; import java.util.function.Consumer; diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 05cc3dfcec9..6da3a94344c 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -26,7 +26,6 @@ import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.function.BooleanSupplier; import java.util.function.Consumer; diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 77f81d19e47..48f5f35895a 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -9,7 +9,6 @@ import gregtech.api.unification.stack.SingleItemVariantMap; import gregtech.api.util.oreglob.OreGlob; import gregtech.api.util.oreglob.OreGlobCompileResult; -import gregtech.common.covers.filter.oreglob.impl.ImpossibleOreGlob; import gregtech.common.covers.filter.readers.OreDictFilterReader; import gregtech.common.gui.widget.HighlightedTextField; import gregtech.common.gui.widget.orefilter.OreFilterTestSlot; @@ -17,7 +16,6 @@ import net.minecraft.client.resources.I18n; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.text.TextFormatting; import com.cleanroommc.modularui.api.drawable.IKey; diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index f2e7439a808..a06abdc8212 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -5,25 +5,17 @@ import gregtech.api.mui.sync.FixedFluidSlotSH; import gregtech.common.covers.filter.readers.SimpleFluidFilterReader; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.PacketBuffer; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidTank; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandlerItem; import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.MouseData; -import com.cleanroommc.modularui.value.sync.FluidSlotSyncHandler; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.FluidSlot; import com.cleanroommc.modularui.widgets.SlotGroupWidget; import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.function.Consumer; diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 1356bb08eb5..d7aac589cbe 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -7,13 +7,10 @@ import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.api.util.TextFormattingUtil; - import gregtech.common.covers.filter.readers.SimpleItemFilterReader; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.ItemStackHandler; import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.screen.ModularPanel; diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 9d7bb742a17..0d02061f6c7 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -9,11 +9,9 @@ import gregtech.api.recipes.RecipeMaps; import gregtech.api.recipes.ingredients.GTRecipeInput; import gregtech.api.unification.stack.ItemAndMetadata; - import gregtech.common.covers.filter.readers.SmartItemFilterReader; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.IStringSerializable; import com.cleanroommc.modularui.api.drawable.IKey; 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 a46152b4b5b..c5e23bb6b86 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -4,16 +4,9 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; import net.minecraft.util.math.MathHelper; -import net.minecraftforge.common.util.Constants; - -import com.cleanroommc.modularui.utils.ItemStackItemHandler; - import net.minecraftforge.common.util.INBTSerializable; -import org.jetbrains.annotations.NotNull; - public abstract class BaseFilterReader implements FilterReader, INBTSerializable { protected final ItemStack container; diff --git a/src/main/java/gregtech/common/covers/filter/readers/FilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/FilterReader.java index 3c5e301ed21..bd56233ed00 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/FilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/FilterReader.java @@ -8,6 +8,7 @@ import org.jetbrains.annotations.NotNull; public interface FilterReader { + ItemStack getContainer(); @NotNull @@ -41,7 +42,7 @@ default NBTTagCompound getStackTag() { boolean validateSlotIndex(int slot); @NotNull - default NBTTagCompound getTagAt(int i ) { + default NBTTagCompound getTagAt(int i) { if (validateSlotIndex(i)) { return getInventoryNbt().getCompoundTagAt(i); } 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 89f3e476ad9..4f3e96a766f 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/OreDictFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/OreDictFilterReader.java @@ -2,7 +2,6 @@ import gregtech.api.util.oreglob.OreGlob; import gregtech.api.util.oreglob.OreGlobCompileResult; - import gregtech.common.covers.filter.oreglob.impl.ImpossibleOreGlob; import net.minecraft.item.ItemStack; @@ -11,6 +10,7 @@ import org.jetbrains.annotations.NotNull; public class OreDictFilterReader extends SimpleItemFilterReader { + private static final String EXPRESSION = "OreDictionaryFilter"; private static final String CASE_SENSITIVE = "caseSensitive"; private static final String MATCH_ALL = "matchAll"; From bac82c7721ae45a8e85b4404359220215a8cff9e Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 5 Feb 2024 23:19:50 -0700 Subject: [PATCH 202/260] remove whitelist method --- .../filter/readers/BaseFilterReader.java | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 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 c5e23bb6b86..6c5b9f82baa 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -42,24 +42,20 @@ public final void markDirty() { public void onTransferRateChange() {} public final void setBlacklistFilter(boolean blacklistFilter) { - setWhitelist(!blacklistFilter); - } - - public final boolean isBlacklistFilter() { - return getStackTag().getBoolean(BLACKLIST); - } - - private void setWhitelist(boolean whitelist) { - if (getStackTag().getBoolean(BLACKLIST) == whitelist) { - if (whitelist) - getStackTag().removeTag(BLACKLIST); - else + if (getStackTag().getBoolean(BLACKLIST) != blacklistFilter) { + if (blacklistFilter) getStackTag().setBoolean(BLACKLIST, true); + else + getStackTag().removeTag(BLACKLIST); onTransferRateChange(); markDirty(); } } + public final boolean isBlacklistFilter() { + return getStackTag().getBoolean(BLACKLIST); + } + public void setMaxTransferRate(int transferRate) { transferRate = MathHelper.clamp(transferRate, 1, Integer.MAX_VALUE); if (this.maxTransferRate != transferRate) { From 9316afdfa0b3afed9f5306e9844ffd30a271b052 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 5 Feb 2024 23:23:35 -0700 Subject: [PATCH 203/260] remove unused method --- .../gregtech/common/covers/filter/BaseFilterContainer.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 51f85a3bcf9..87a23a7d4c4 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -134,11 +134,6 @@ public void setTransferSize(int transferSize) { onFilterInstanceChange(); } - @Deprecated - public void adjustTransferStackSize(int amount) { - setTransferSize(transferSize + amount); - } - public void setBlacklistFilter(boolean blacklistFilter) { if (hasFilter()) getFilter().setBlacklistFilter(blacklistFilter); onFilterInstanceChange(); From fda9e70e1eeb1d9bb1a64d7f1b9f343f8bc14759 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 6 Feb 2024 00:13:56 -0700 Subject: [PATCH 204/260] pull filter related methods into FilterSlotHandler update references --- .../common/covers/CoverFluidFilter.java | 3 +- .../common/covers/CoverFluidRegulator.java | 2 +- .../common/covers/CoverItemFilter.java | 2 +- .../covers/filter/BaseFilterContainer.java | 252 ++++++++++++------ .../covers/filter/FluidFilterContainer.java | 10 +- .../covers/filter/ItemFilterContainer.java | 15 +- .../provider/CoverInfoProvider.java | 6 +- 7 files changed, 189 insertions(+), 101 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 3aa084d7d79..37cd5a18861 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -100,10 +100,9 @@ public FluidFilterMode getFilterMode() { return filterMode; } - @SuppressWarnings("DataFlowIssue") // this cover always has a filter public @NotNull FluidFilter getFluidFilter() { - return this.fluidFilterContainer.getFilter(); + return this.fluidFilterContainer.getFluidFilter(); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index f04cae8e375..2905ea36d1d 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -310,7 +310,7 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { // legacy NBT tag if (!tagCompound.hasKey("filterv2") && tagCompound.hasKey("TransferAmount")) { if (this.fluidFilterContainer.hasFilter()) { - this.fluidFilterContainer.getFilter().configureFilterTanks(tagCompound.getInteger("TransferAmount")); + this.fluidFilterContainer.getFluidFilter().configureFilterTanks(tagCompound.getInteger("TransferAmount")); } } // this.transferAmount = tagCompound.getInteger("TransferAmount"); diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 0dda5b0dcb1..730da8fd6cb 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -101,7 +101,7 @@ public ItemFilterMode getFilterMode() { @SuppressWarnings("DataFlowIssue") // this cover always has a filter public @NotNull ItemFilter getItemFilter() { - return this.itemFilterContainer.getFilter(); + return this.itemFilterContainer.getItemFilter(); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 87a23a7d4c4..9c2b15f99b6 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -17,102 +17,62 @@ import java.io.IOException; -public abstract class BaseFilterContainer> implements INBTSerializable { - - private final IDirtyNotifiable dirtyNotifiable; - private int maxTransferSize = 1; - private @Nullable T currentFilter; - private @Nullable Runnable onFilterInstanceChange; - private int transferSize; +public abstract class BaseFilterContainer implements INBTSerializable { protected final FilterSlotHandler filterInventory; public BaseFilterContainer(IDirtyNotifiable dirtyNotifiable) { - this.dirtyNotifiable = dirtyNotifiable; - filterInventory = new FilterSlotHandler(); + this.filterInventory = new FilterSlotHandler(dirtyNotifiable); } - public @NotNull ItemStackHandler getFilterInventory() { + public @NotNull FilterSlotHandler getFilterInventory() { return filterInventory; } - public int getMaxTransferSize() { - return hasFilter() ? currentFilter.getMaxTransferSize() : this.maxTransferSize; - } - - public void setMaxTransferSize(int maxTransferSize) { - this.maxTransferSize = MathHelper.clamp(maxTransferSize, 1, Integer.MAX_VALUE); - this.transferSize = MathHelper.clamp(this.transferSize, 1, this.maxTransferSize); - if (hasFilter()) currentFilter.setMaxTransferSize(this.maxTransferSize); - } - - public final boolean hasFilter() { - return currentFilter != null; - } - - public final @Nullable T getFilter() { - return currentFilter; - } - public final @NotNull ItemStack getFilterStack() { - return this.filterInventory.getStackInSlot(0); + return this.filterInventory.getFilterStack(); } - @SuppressWarnings("unchecked") // really need to stop doing this public final void setFilterStack(ItemStack stack) { - this.filterInventory.setStackInSlot(0, stack); - if (FilterTypeRegistry.isItemFilter(stack)) { - setFilter((T) FilterTypeRegistry.getItemFilterForStack(stack)); - } else { - setFilter((T) FilterTypeRegistry.getFluidFilterForStack(stack)); - } + this.filterInventory.setFilterStack(stack); } - public final void setFilter(@Nullable T newFilter) { - this.currentFilter = newFilter; - if (hasFilter()) { - this.currentFilter.setDirtyNotifiable(dirtyNotifiable); - } - if (onFilterInstanceChange != null) { - this.onFilterInstanceChange.run(); - } + public boolean showGlobalTransferLimitSlider() { + return this.filterInventory.showGlobalTransferLimitSlider(); } - public void onFilterInstanceChange() { - dirtyNotifiable.markAsDirty(); + public int getTransferLimit(int slotIndex) { + return this.filterInventory.getTransferLimit(slotIndex); } - public void setOnFilterInstanceChange(@Nullable Runnable onFilterInstanceChange) { - this.onFilterInstanceChange = onFilterInstanceChange; + public boolean test(R toTest) { + return this.filterInventory.test(toTest); } - public boolean showGlobalTransferLimitSlider() { - return getMaxTransferSize() > 0 && - (isBlacklistFilter() || !hasFilter() || currentFilter.showGlobalTransferLimitSlider()); + public MatchResult match(R toMatch) { + return this.filterInventory.match(toMatch); } - public int getTransferLimit(int slotIndex) { - if (isBlacklistFilter() || currentFilter == null) { - return getTransferSize(); - } - return currentFilter.getTransferLimit(slotIndex, getTransferSize()); + public final boolean hasFilter() { + return this.filterInventory.hasFilter(); } - public boolean test(R toTest) { - return !hasFilter() || getFilter().test(toTest); + public final @Nullable Filter getFilter() { + return this.filterInventory.getFilter(); } - public MatchResult match(R toMatch) { - if (!hasFilter()) - return MatchResult.create(true, toMatch, -1); + public final void setFilter(@Nullable Filter newFilter) { + this.filterInventory.setFilter(newFilter); + } - return getFilter().match(toMatch); + public int getMaxTransferSize() { + return this.filterInventory.getMaxTransferSize(); } + public void setMaxTransferSize(int maxTransferSize) { + this.filterInventory.setMaxTransferSize(maxTransferSize); + } public int getTransferLimit(R stack) { - if (isBlacklistFilter() || currentFilter == null) { - return getTransferSize(); - } - return currentFilter.getTransferLimit(stack, getTransferSize()); + return this.filterInventory.getTransferLimit(stack); } /** @@ -123,24 +83,19 @@ public int getTransferLimit(R stack) { protected abstract void onFilterSlotChange(boolean notify); public int getTransferSize() { - if (!showGlobalTransferLimitSlider()) { - return getMaxTransferSize(); - } - return this.transferSize; + return this.filterInventory.getTransferSize(); } public void setTransferSize(int transferSize) { - this.transferSize = MathHelper.clamp(transferSize, 1, getMaxTransferSize()); - onFilterInstanceChange(); + this.filterInventory.setTransferSize(transferSize); } public void setBlacklistFilter(boolean blacklistFilter) { - if (hasFilter()) getFilter().setBlacklistFilter(blacklistFilter); - onFilterInstanceChange(); + this.filterInventory.setBlacklistFilter(blacklistFilter); } public boolean isBlacklistFilter() { - return hasFilter() && getFilter().isBlacklistFilter(); + return this.filterInventory.isBlacklistFilter(); } /** Uses Cleanroom MUI */ @@ -155,27 +110,35 @@ public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { try { stack = packetBuffer.readItemStack(); } catch (IOException ignore) {} - - this.filterInventory.setStackInSlot(0, stack); + this.filterInventory.setFilterStack(stack); } @Override public NBTTagCompound serializeNBT() { - NBTTagCompound tagCompound = new NBTTagCompound(); - tagCompound.setInteger("MaxStackSize", getMaxTransferSize()); - tagCompound.setInteger("TransferStackSize", getTransferSize()); - tagCompound.setTag("FilterInventory", filterInventory.serializeNBT()); - return tagCompound; + return this.filterInventory.serializeNBT(); } @Override public void deserializeNBT(NBTTagCompound tagCompound) { - this.maxTransferSize = tagCompound.getInteger("MaxStackSize"); - this.transferSize = tagCompound.getInteger("TransferStackSize"); - this.filterInventory.deserializeNBT(tagCompound.getCompoundTag("FilterInventory")); + this.filterInventory.deserializeNBT(tagCompound); + } + + public void onFilterInstanceChange() { + this.filterInventory.onFilterInstanceChange(); } - protected class FilterSlotHandler extends ItemStackHandler { + public class FilterSlotHandler extends ItemStackHandler { + + private int maxTransferSize = 1; + private int transferSize; + private @Nullable Filter currentFilter; + private @Nullable Runnable onFilterInstanceChange; + private final IDirtyNotifiable dirtyNotifiable; + + protected FilterSlotHandler(IDirtyNotifiable dirtyNotifiable) { + super(); + this.dirtyNotifiable = dirtyNotifiable; + } @Override public int getSlotLimit(int slot) { @@ -191,5 +154,122 @@ protected void onLoad() { protected void onContentsChanged(int slot) { onFilterSlotChange(true); } + + public void onFilterInstanceChange() { + dirtyNotifiable.markAsDirty(); + } + + public void setOnFilterInstanceChange(@Nullable Runnable onFilterInstanceChange) { + this.onFilterInstanceChange = onFilterInstanceChange; + } + + public final @NotNull ItemStack getFilterStack() { + return this.getStackInSlot(0); + } + + @SuppressWarnings("unchecked") // really need to stop doing this + public final void setFilterStack(ItemStack stack) { + this.setStackInSlot(0, stack); + if (FilterTypeRegistry.isItemFilter(stack)) { + setFilter((Filter) FilterTypeRegistry.getItemFilterForStack(stack)); + } else { + setFilter((Filter) FilterTypeRegistry.getFluidFilterForStack(stack)); + } + } + + public int getMaxTransferSize() { + return hasFilter() ? currentFilter.getMaxTransferSize() : this.maxTransferSize; + } + + public void setMaxTransferSize(int maxTransferSize) { + this.maxTransferSize = MathHelper.clamp(maxTransferSize, 1, Integer.MAX_VALUE); + this.transferSize = MathHelper.clamp(this.transferSize, 1, this.maxTransferSize); + if (hasFilter()) currentFilter.setMaxTransferSize(this.maxTransferSize); + } + + public final boolean hasFilter() { + return currentFilter != null; + } + + public final @Nullable Filter getFilter() { + return currentFilter; + } + + public final void setFilter(@Nullable Filter newFilter) { + this.currentFilter = newFilter; + if (hasFilter()) { + this.currentFilter.setDirtyNotifiable(dirtyNotifiable); + } + if (onFilterInstanceChange != null) { + this.onFilterInstanceChange.run(); + } + } + + public boolean test(R toTest) { + return !hasFilter() || getFilter().test(toTest); + } + + public MatchResult match(R toMatch) { + if (!hasFilter()) + return MatchResult.create(true, toMatch, -1); + + return getFilter().match(toMatch); + } + + public boolean showGlobalTransferLimitSlider() { + return getMaxTransferSize() > 0 && + (isBlacklistFilter() || !hasFilter() || getFilter().showGlobalTransferLimitSlider()); + } + + public void setBlacklistFilter(boolean blacklistFilter) { + if (hasFilter()) getFilter().setBlacklistFilter(blacklistFilter); + onFilterInstanceChange(); + } + + public final boolean isBlacklistFilter() { + return hasFilter() && getFilter().isBlacklistFilter(); + } + + public int getTransferSize() { + if (!showGlobalTransferLimitSlider()) { + return getMaxTransferSize(); + } + return this.transferSize; + } + + public int getTransferLimit(int slotIndex) { + if (isBlacklistFilter()) { + return getTransferSize(); + } + return this.currentFilter.getTransferLimit(slotIndex, getTransferSize()); + } + + public int getTransferLimit(R stack) { + if (isBlacklistFilter()) { + return getTransferSize(); + } + return this.currentFilter.getTransferLimit(stack, getTransferSize()); + } + + public void setTransferSize(int transferSize) { + this.transferSize = MathHelper.clamp(transferSize, 1, getMaxTransferSize()); + onFilterInstanceChange(); + } + + @Override + public NBTTagCompound serializeNBT() { + NBTTagCompound tagCompound = new NBTTagCompound(); + tagCompound.setTag("FilterInventory", super.serializeNBT()); + tagCompound.setInteger("MaxStackSize", getMaxTransferSize()); + tagCompound.setInteger("TransferStackSize", getTransferSize()); + return tagCompound; + } + + @Override + public void deserializeNBT(NBTTagCompound nbt) { + super.deserializeNBT(nbt.getCompoundTag("FilterInventory")); + this.maxTransferSize = nbt.getInteger("MaxStackSize"); + this.transferSize = nbt.getInteger("TransferStackSize"); + } } } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index a4338854445..0fc073da404 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -26,7 +26,7 @@ import java.util.function.BooleanSupplier; import java.util.function.Consumer; -public class FluidFilterContainer extends BaseFilterContainer +public class FluidFilterContainer extends BaseFilterContainer implements INBTSerializable { public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable) { @@ -65,7 +65,11 @@ public void initUI(int y, Consumer widgetGroup) { @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public void initFilterUI(int y, Consumer widgetGroup) { - widgetGroup.accept(new WidgetGroupFluidFilter(y, this::getFilter, this::showGlobalTransferLimitSlider)); + widgetGroup.accept(new WidgetGroupFluidFilter(y, this::getFluidFilter, this::showGlobalTransferLimitSlider)); + } + + public FluidFilter getFluidFilter() { + return (FluidFilter) getFilter(); } /** @deprecated uses old builtin MUI */ @@ -170,7 +174,7 @@ public void deserializeNBT(NBTTagCompound tagCompound) { var stack = getFilterInventory().getStackInSlot(0); if (FilterTypeRegistry.isFluidFilter(stack)) { setFilter(FilterTypeRegistry.getFluidFilterForStack(stack)); - getFilter().readFromNBT(tagCompound); + getFluidFilter().readFromNBT(tagCompound); } } } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 6da3a94344c..f735c017fca 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -30,7 +30,7 @@ import java.util.function.BooleanSupplier; import java.util.function.Consumer; -public class ItemFilterContainer extends BaseFilterContainer +public class ItemFilterContainer extends BaseFilterContainer implements INBTSerializable { public ItemFilterContainer(IDirtyNotifiable dirtyNotifiable) { @@ -52,7 +52,12 @@ public void initUI(int y, Consumer widgetGroup) { @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public void initFilterUI(int y, Consumer widgetGroup) { - widgetGroup.accept(new WidgetGroupItemFilter(y, this::getFilter)); + widgetGroup.accept(new WidgetGroupItemFilter(y, this::getItemFilter)); + } + + // todo remove when usages of old mui with filters are gone + public ItemFilter getItemFilter() { + return (ItemFilter) getFilter(); } /** @deprecated uses old builtin MUI */ @@ -152,10 +157,10 @@ public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { @Override public void deserializeNBT(NBTTagCompound tagCompound) { super.deserializeNBT(tagCompound); - var stack = getFilterInventory().getStackInSlot(0); + var stack = getFilterInventory().getFilterStack(); if (FilterTypeRegistry.isItemFilter(stack)) { - setFilter(FilterTypeRegistry.getItemFilterForStack(stack)); - getFilter().readFromNBT(tagCompound); // try to read old data + getFilterInventory().setFilter(FilterTypeRegistry.getItemFilterForStack(stack)); + getItemFilter().readFromNBT(tagCompound); // try to read old data } } } diff --git a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java index 29ab14e9a9b..c2430850faa 100644 --- a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java +++ b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java @@ -76,7 +76,7 @@ private static void conveyorInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverCo transferModeText(probeInfo, roboticArm.getTransferMode(), rateUnit, filter.getTransferSize(), filter.getFilter() != null); } - itemFilterText(probeInfo, filter.getFilter()); + itemFilterText(probeInfo, filter.getItemFilter()); } /** @@ -127,7 +127,7 @@ private static void pumpInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverPump p transferModeText(probeInfo, regulator.getTransferMode(), rateUnit, regulator .getFluidFilterContainer().getTransferSize(), filter.hasFilter() && !filter.isBlacklistFilter()); } - fluidFilterText(probeInfo, filter.getFilter()); + fluidFilterText(probeInfo, filter.getFluidFilter()); } /** @@ -183,7 +183,7 @@ private static void fluidFilterInfo(@NotNull IProbeInfo probeInfo, @NotNull Cove private static void enderFluidLinkInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverEnderFluidLink enderFluidLink) { transferRateText(probeInfo, enderFluidLink.getPumpMode(), " " + lang("cover.bucket.mode.milli_bucket_rate"), enderFluidLink.isIOEnabled() ? CoverEnderFluidLink.TRANSFER_RATE : 0); - fluidFilterText(probeInfo, enderFluidLink.getFluidFilterContainer().getFilter()); + fluidFilterText(probeInfo, enderFluidLink.getFluidFilterContainer().getFluidFilter()); if (!enderFluidLink.getColorStr().isEmpty()) { probeInfo.text( From c189152208953d2bef68e328abcb3f38c19010d2 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 6 Feb 2024 00:20:11 -0700 Subject: [PATCH 205/260] remove FilterSlotHandler and make the container a handler --- .../covers/filter/BaseFilterContainer.java | 313 +++++++----------- .../covers/filter/FluidFilterContainer.java | 12 +- .../covers/filter/ItemFilterContainer.java | 14 +- 3 files changed, 125 insertions(+), 214 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 9c2b15f99b6..c6eb73c4a80 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -17,259 +17,170 @@ import java.io.IOException; -public abstract class BaseFilterContainer implements INBTSerializable { - protected final FilterSlotHandler filterInventory; +public abstract class BaseFilterContainer extends ItemStackHandler { - public BaseFilterContainer(IDirtyNotifiable dirtyNotifiable) { - this.filterInventory = new FilterSlotHandler(dirtyNotifiable); - } - - public @NotNull FilterSlotHandler getFilterInventory() { - return filterInventory; - } + private int maxTransferSize = 1; + private int transferSize; + private @Nullable Filter currentFilter; + private @Nullable Runnable onFilterInstanceChange; + private final IDirtyNotifiable dirtyNotifiable; - public final @NotNull ItemStack getFilterStack() { - return this.filterInventory.getFilterStack(); + protected BaseFilterContainer(IDirtyNotifiable dirtyNotifiable) { + super(); + this.dirtyNotifiable = dirtyNotifiable; } - public final void setFilterStack(ItemStack stack) { - this.filterInventory.setFilterStack(stack); + @Override + public int getSlotLimit(int slot) { + return 1; } - public boolean showGlobalTransferLimitSlider() { - return this.filterInventory.showGlobalTransferLimitSlider(); + @Override + protected void onLoad() { + onFilterSlotChange(false); } - public int getTransferLimit(int slotIndex) { - return this.filterInventory.getTransferLimit(slotIndex); + @Override + protected void onContentsChanged(int slot) { + onFilterSlotChange(true); } - public boolean test(R toTest) { - return this.filterInventory.test(toTest); + public void onFilterInstanceChange() { + dirtyNotifiable.markAsDirty(); } - public MatchResult match(R toMatch) { - return this.filterInventory.match(toMatch); + public void setOnFilterInstanceChange(@Nullable Runnable onFilterInstanceChange) { + this.onFilterInstanceChange = onFilterInstanceChange; } - public final boolean hasFilter() { - return this.filterInventory.hasFilter(); - } + /** + * Called when the filter slot has changed to a different filter or has been removed + * + * @param notify if true, call {@code onFilterInstanceChange()} + */ + protected abstract void onFilterSlotChange(boolean notify); - public final @Nullable Filter getFilter() { - return this.filterInventory.getFilter(); + public final @NotNull ItemStack getFilterStack() { + return this.getStackInSlot(0); } - public final void setFilter(@Nullable Filter newFilter) { - this.filterInventory.setFilter(newFilter); + @SuppressWarnings("unchecked") // really need to stop doing this + public final void setFilterStack(ItemStack stack) { + this.setStackInSlot(0, stack); + if (FilterTypeRegistry.isItemFilter(stack)) { + setFilter((Filter) FilterTypeRegistry.getItemFilterForStack(stack)); + } else { + setFilter((Filter) FilterTypeRegistry.getFluidFilterForStack(stack)); + } } public int getMaxTransferSize() { - return this.filterInventory.getMaxTransferSize(); + return hasFilter() ? currentFilter.getMaxTransferSize() : this.maxTransferSize; } public void setMaxTransferSize(int maxTransferSize) { - this.filterInventory.setMaxTransferSize(maxTransferSize); - } - public int getTransferLimit(R stack) { - return this.filterInventory.getTransferLimit(stack); + this.maxTransferSize = MathHelper.clamp(maxTransferSize, 1, Integer.MAX_VALUE); + this.transferSize = MathHelper.clamp(this.transferSize, 1, this.maxTransferSize); + if (hasFilter()) currentFilter.setMaxTransferSize(this.maxTransferSize); } - /** - * Called when the filter slot has changed to a different filter or has been removed - * - * @param notify if true, call {@code onFilterInstanceChange()} - */ - protected abstract void onFilterSlotChange(boolean notify); - - public int getTransferSize() { - return this.filterInventory.getTransferSize(); + public final boolean hasFilter() { + return currentFilter != null; } - public void setTransferSize(int transferSize) { - this.filterInventory.setTransferSize(transferSize); + public final @Nullable Filter getFilter() { + return currentFilter; } - public void setBlacklistFilter(boolean blacklistFilter) { - this.filterInventory.setBlacklistFilter(blacklistFilter); + public final void setFilter(@Nullable Filter newFilter) { + this.currentFilter = newFilter; + if (hasFilter()) { + this.currentFilter.setDirtyNotifiable(dirtyNotifiable); + } + if (onFilterInstanceChange != null) { + this.onFilterInstanceChange.run(); + } } - public boolean isBlacklistFilter() { - return this.filterInventory.isBlacklistFilter(); + public boolean test(R toTest) { + return !hasFilter() || getFilter().test(toTest); } - /** Uses Cleanroom MUI */ - public abstract IWidget initUI(ModularPanel main, GuiSyncManager manager); - - public void writeInitialSyncData(PacketBuffer packetBuffer) { - packetBuffer.writeItemStack(this.filterInventory.getStackInSlot(0)); - } + public MatchResult match(R toMatch) { + if (!hasFilter()) + return MatchResult.create(true, toMatch, -1); - public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { - var stack = ItemStack.EMPTY; - try { - stack = packetBuffer.readItemStack(); - } catch (IOException ignore) {} - this.filterInventory.setFilterStack(stack); + return getFilter().match(toMatch); } - @Override - public NBTTagCompound serializeNBT() { - return this.filterInventory.serializeNBT(); + public boolean showGlobalTransferLimitSlider() { + return getMaxTransferSize() > 0 && + (isBlacklistFilter() || !hasFilter() || getFilter().showGlobalTransferLimitSlider()); } - @Override - public void deserializeNBT(NBTTagCompound tagCompound) { - this.filterInventory.deserializeNBT(tagCompound); + public void setBlacklistFilter(boolean blacklistFilter) { + if (hasFilter()) getFilter().setBlacklistFilter(blacklistFilter); + onFilterInstanceChange(); } - public void onFilterInstanceChange() { - this.filterInventory.onFilterInstanceChange(); + public final boolean isBlacklistFilter() { + return hasFilter() && getFilter().isBlacklistFilter(); } - public class FilterSlotHandler extends ItemStackHandler { - - private int maxTransferSize = 1; - private int transferSize; - private @Nullable Filter currentFilter; - private @Nullable Runnable onFilterInstanceChange; - private final IDirtyNotifiable dirtyNotifiable; - - protected FilterSlotHandler(IDirtyNotifiable dirtyNotifiable) { - super(); - this.dirtyNotifiable = dirtyNotifiable; - } - - @Override - public int getSlotLimit(int slot) { - return 1; - } - - @Override - protected void onLoad() { - onFilterSlotChange(false); - } - - @Override - protected void onContentsChanged(int slot) { - onFilterSlotChange(true); - } - - public void onFilterInstanceChange() { - dirtyNotifiable.markAsDirty(); - } - - public void setOnFilterInstanceChange(@Nullable Runnable onFilterInstanceChange) { - this.onFilterInstanceChange = onFilterInstanceChange; - } - - public final @NotNull ItemStack getFilterStack() { - return this.getStackInSlot(0); - } - - @SuppressWarnings("unchecked") // really need to stop doing this - public final void setFilterStack(ItemStack stack) { - this.setStackInSlot(0, stack); - if (FilterTypeRegistry.isItemFilter(stack)) { - setFilter((Filter) FilterTypeRegistry.getItemFilterForStack(stack)); - } else { - setFilter((Filter) FilterTypeRegistry.getFluidFilterForStack(stack)); - } - } - - public int getMaxTransferSize() { - return hasFilter() ? currentFilter.getMaxTransferSize() : this.maxTransferSize; - } - - public void setMaxTransferSize(int maxTransferSize) { - this.maxTransferSize = MathHelper.clamp(maxTransferSize, 1, Integer.MAX_VALUE); - this.transferSize = MathHelper.clamp(this.transferSize, 1, this.maxTransferSize); - if (hasFilter()) currentFilter.setMaxTransferSize(this.maxTransferSize); - } - - public final boolean hasFilter() { - return currentFilter != null; - } - - public final @Nullable Filter getFilter() { - return currentFilter; - } - - public final void setFilter(@Nullable Filter newFilter) { - this.currentFilter = newFilter; - if (hasFilter()) { - this.currentFilter.setDirtyNotifiable(dirtyNotifiable); - } - if (onFilterInstanceChange != null) { - this.onFilterInstanceChange.run(); - } - } - - public boolean test(R toTest) { - return !hasFilter() || getFilter().test(toTest); - } - - public MatchResult match(R toMatch) { - if (!hasFilter()) - return MatchResult.create(true, toMatch, -1); - - return getFilter().match(toMatch); - } - - public boolean showGlobalTransferLimitSlider() { - return getMaxTransferSize() > 0 && - (isBlacklistFilter() || !hasFilter() || getFilter().showGlobalTransferLimitSlider()); + public int getTransferSize() { + if (!showGlobalTransferLimitSlider()) { + return getMaxTransferSize(); } + return this.transferSize; + } - public void setBlacklistFilter(boolean blacklistFilter) { - if (hasFilter()) getFilter().setBlacklistFilter(blacklistFilter); - onFilterInstanceChange(); + public int getTransferLimit(int slotIndex) { + if (isBlacklistFilter()) { + return getTransferSize(); } + return this.currentFilter.getTransferLimit(slotIndex, getTransferSize()); + } - public final boolean isBlacklistFilter() { - return hasFilter() && getFilter().isBlacklistFilter(); + public int getTransferLimit(R stack) { + if (isBlacklistFilter()) { + return getTransferSize(); } + return this.currentFilter.getTransferLimit(stack, getTransferSize()); + } - public int getTransferSize() { - if (!showGlobalTransferLimitSlider()) { - return getMaxTransferSize(); - } - return this.transferSize; - } + public void setTransferSize(int transferSize) { + this.transferSize = MathHelper.clamp(transferSize, 1, getMaxTransferSize()); + onFilterInstanceChange(); + } - public int getTransferLimit(int slotIndex) { - if (isBlacklistFilter()) { - return getTransferSize(); - } - return this.currentFilter.getTransferLimit(slotIndex, getTransferSize()); - } + @Override + public NBTTagCompound serializeNBT() { + NBTTagCompound tagCompound = new NBTTagCompound(); + tagCompound.setTag("FilterInventory", super.serializeNBT()); + tagCompound.setInteger("MaxStackSize", getMaxTransferSize()); + tagCompound.setInteger("TransferStackSize", getTransferSize()); + return tagCompound; + } - public int getTransferLimit(R stack) { - if (isBlacklistFilter()) { - return getTransferSize(); - } - return this.currentFilter.getTransferLimit(stack, getTransferSize()); - } + @Override + public void deserializeNBT(NBTTagCompound nbt) { + super.deserializeNBT(nbt.getCompoundTag("FilterInventory")); + this.maxTransferSize = nbt.getInteger("MaxStackSize"); + this.transferSize = nbt.getInteger("TransferStackSize"); + } - public void setTransferSize(int transferSize) { - this.transferSize = MathHelper.clamp(transferSize, 1, getMaxTransferSize()); - onFilterInstanceChange(); - } + /** Uses Cleanroom MUI */ + public abstract IWidget initUI(ModularPanel main, GuiSyncManager manager); - @Override - public NBTTagCompound serializeNBT() { - NBTTagCompound tagCompound = new NBTTagCompound(); - tagCompound.setTag("FilterInventory", super.serializeNBT()); - tagCompound.setInteger("MaxStackSize", getMaxTransferSize()); - tagCompound.setInteger("TransferStackSize", getTransferSize()); - return tagCompound; - } + public void writeInitialSyncData(PacketBuffer packetBuffer) { + packetBuffer.writeItemStack(this.getFilterStack()); + } - @Override - public void deserializeNBT(NBTTagCompound nbt) { - super.deserializeNBT(nbt.getCompoundTag("FilterInventory")); - this.maxTransferSize = nbt.getInteger("MaxStackSize"); - this.transferSize = nbt.getInteger("TransferStackSize"); - } + public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { + var stack = ItemStack.EMPTY; + try { + stack = packetBuffer.readItemStack(); + } catch (IOException ignore) {} + this.setFilterStack(stack); } } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 0fc073da404..e60f6068828 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -53,7 +53,7 @@ public boolean testFluidStack(FluidStack fluidStack, boolean whitelist) { @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public void initUI(int y, Consumer widgetGroup) { widgetGroup.accept(new gregtech.api.gui.widgets.LabelWidget(10, y, "cover.pump.fluid_filter.title")); - widgetGroup.accept(new gregtech.api.gui.widgets.SlotWidget(filterInventory, 0, 10, y + 15) + widgetGroup.accept(new gregtech.api.gui.widgets.SlotWidget(this, 0, 10, y + 15) .setBackgroundTexture(gregtech.api.gui.GuiTextures.SLOT, gregtech.api.gui.GuiTextures.FILTER_SLOT_OVERLAY)); @@ -104,7 +104,7 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) return new Row().coverChildrenHeight() .marginBottom(2).widthRel(1f) .child(new ItemSlot() - .slot(SyncHandlers.itemSlot(filterInventory, 0) + .slot(SyncHandlers.itemSlot(this, 0) .filter(FilterTypeRegistry::isFluidFilter) .changeListener((newItem, onlyAmountChanged, client, init) -> { if (newItem.isEmpty() || FilterTypeRegistry.isFluidFilter(newItem)) { @@ -134,7 +134,7 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) return success; })) .child(IKey.dynamic(() -> hasFilter() ? - getFilterInventory().getStackInSlot(0).getDisplayName() : + getFilterStack().getDisplayName() : IKey.lang("metaitem.fluid_filter.name").get()) .alignment(Alignment.CenterRight).asWidget() .left(36).right(0).height(18)); @@ -143,14 +143,14 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.readInitialSyncData(packetBuffer); - var stack = getFilterInventory().getStackInSlot(0); + var stack = getFilterStack(); if (FilterTypeRegistry.isFluidFilter(stack)) setFilter(FilterTypeRegistry.getFluidFilterForStack(stack)); } protected void onFilterSlotChange(boolean notify) { - ItemStack filterStack = filterInventory.getStackInSlot(0); + ItemStack filterStack = getFilterStack(); int newId = FilterTypeRegistry.getFilterIdForStack(filterStack); int currentId = FilterTypeRegistry.getIdForFilter(getFilter()); @@ -171,7 +171,7 @@ protected void onFilterSlotChange(boolean notify) { @Override public void deserializeNBT(NBTTagCompound tagCompound) { super.deserializeNBT(tagCompound); - var stack = getFilterInventory().getStackInSlot(0); + var stack = getFilterStack(); if (FilterTypeRegistry.isFluidFilter(stack)) { setFilter(FilterTypeRegistry.getFluidFilterForStack(stack)); getFluidFilter().readFromNBT(tagCompound); diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index f735c017fca..2272c10dbb8 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -42,7 +42,7 @@ public ItemFilterContainer(IDirtyNotifiable dirtyNotifiable) { @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public void initUI(int y, Consumer widgetGroup) { widgetGroup.accept(new LabelWidget(10, y, "cover.conveyor.item_filter.title")); - widgetGroup.accept(new SlotWidget(filterInventory, 0, 10, y + 15) + widgetGroup.accept(new SlotWidget(this, 0, 10, y + 15) .setBackgroundTexture(GuiTextures.SLOT, GuiTextures.FILTER_SLOT_OVERLAY)); this.initFilterUI(y + 38, widgetGroup); @@ -90,7 +90,7 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) return new Row().coverChildrenHeight() .marginBottom(2).widthRel(1f) .child(new ItemSlot() - .slot(SyncHandlers.itemSlot(filterInventory, 0) + .slot(SyncHandlers.itemSlot(this, 0) .filter(FilterTypeRegistry::isItemFilter) .changeListener((newItem, onlyAmountChanged, client, init) -> { if (newItem.isEmpty() || FilterTypeRegistry.isItemFilter(newItem)) { @@ -120,14 +120,14 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) return success; })) .child(IKey.dynamic(() -> hasFilter() ? - getFilterInventory().getStackInSlot(0).getDisplayName() : + getFilterStack().getDisplayName() : IKey.lang("metaitem.item_filter.name").get()) .alignment(Alignment.CenterRight).asWidget() .left(36).right(0).height(18)); } protected void onFilterSlotChange(boolean notify) { - ItemStack filterStack = filterInventory.getStackInSlot(0); + ItemStack filterStack = getFilterStack(); int newId = FilterTypeRegistry.getFilterIdForStack(filterStack); int currentId = FilterTypeRegistry.getIdForFilter(getFilter()); @@ -148,7 +148,7 @@ protected void onFilterSlotChange(boolean notify) { @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.readInitialSyncData(packetBuffer); - var stack = getFilterInventory().getStackInSlot(0); + var stack = getFilterStack(); if (FilterTypeRegistry.isItemFilter(stack)) setFilter(FilterTypeRegistry.getItemFilterForStack(stack)); @@ -157,9 +157,9 @@ public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { @Override public void deserializeNBT(NBTTagCompound tagCompound) { super.deserializeNBT(tagCompound); - var stack = getFilterInventory().getFilterStack(); + var stack = getFilterStack(); if (FilterTypeRegistry.isItemFilter(stack)) { - getFilterInventory().setFilter(FilterTypeRegistry.getItemFilterForStack(stack)); + setFilter(FilterTypeRegistry.getItemFilterForStack(stack)); getItemFilter().readFromNBT(tagCompound); // try to read old data } } From 573c2c6ed574af63db649ff6941946d577eba40f Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 6 Feb 2024 00:21:03 -0700 Subject: [PATCH 206/260] update usages to reflect changes --- src/main/java/gregtech/common/covers/CoverConveyor.java | 2 +- src/main/java/gregtech/common/covers/CoverEnderFluidLink.java | 2 +- src/main/java/gregtech/common/covers/CoverPump.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 717406eb3b3..2a821bd11ff 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -455,7 +455,7 @@ public boolean canInteractWithOutputSide() { @Override public void onRemoval() { - dropInventoryContents(itemFilterContainer.getFilterInventory()); + dropInventoryContents(itemFilterContainer); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java b/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java index 9a607ace031..0dcb3633da2 100644 --- a/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java +++ b/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java @@ -127,7 +127,7 @@ public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFaci @Override public void onRemoval() { - dropInventoryContents(fluidFilter.getFilterInventory()); + dropInventoryContents(fluidFilter); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 95ba359239e..c95099787e8 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -334,7 +334,7 @@ public boolean canInteractWithOutputSide() { @Override public void onRemoval() { - dropInventoryContents(fluidFilterContainer.getFilterInventory()); + dropInventoryContents(fluidFilterContainer); } @Override From 7ad80d7e89f00f1f7b394c4b02f27126de60412d Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 6 Feb 2024 00:28:51 -0700 Subject: [PATCH 207/260] sync filter mode --- src/main/java/gregtech/common/covers/CoverFluidFilter.java | 2 ++ src/main/java/gregtech/common/covers/CoverItemFilter.java | 2 ++ src/main/java/gregtech/common/covers/FluidFilterMode.java | 1 + src/main/java/gregtech/common/covers/ItemFilterMode.java | 1 + 4 files changed, 6 insertions(+) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 37cd5a18861..0da116940e0 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -80,6 +80,7 @@ public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFaci @Override public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { + packetBuffer.writeByte(this.filterMode.ordinal()); packetBuffer.writeBoolean(this.fluidFilterContainer.hasFilter()); if (this.fluidFilterContainer.hasFilter()) { packetBuffer.writeItemStack(this.fluidFilterContainer.getFilterStack()); @@ -88,6 +89,7 @@ public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { + this.filterMode = FluidFilterMode.VALUES[packetBuffer.readByte()]; if (!packetBuffer.readBoolean()) return; try { this.fluidFilterContainer.setFilterStack(packetBuffer.readItemStack()); diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 730da8fd6cb..7222f2f7245 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -73,6 +73,7 @@ public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFaci @Override public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { + packetBuffer.writeByte(this.filterMode.ordinal()); packetBuffer.writeBoolean(itemFilterContainer.hasFilter()); if (itemFilterContainer.hasFilter()) { packetBuffer.writeItemStack(this.itemFilterContainer.getFilterStack()); @@ -81,6 +82,7 @@ public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { + this.filterMode = ItemFilterMode.VALUES[packetBuffer.readByte()]; if (!packetBuffer.readBoolean()) return; try { this.itemFilterContainer.setFilterStack(packetBuffer.readItemStack()); diff --git a/src/main/java/gregtech/common/covers/FluidFilterMode.java b/src/main/java/gregtech/common/covers/FluidFilterMode.java index c2f3cb21c0a..e26c6192e8b 100644 --- a/src/main/java/gregtech/common/covers/FluidFilterMode.java +++ b/src/main/java/gregtech/common/covers/FluidFilterMode.java @@ -8,6 +8,7 @@ public enum FluidFilterMode implements IStringSerializable { FILTER_DRAIN("cover.fluid_filter.mode.filter_drain"), FILTER_BOTH("cover.fluid_filter.mode.filter_both"); + public static final FluidFilterMode[] VALUES = values(); public final String localeName; FluidFilterMode(String localeName) { diff --git a/src/main/java/gregtech/common/covers/ItemFilterMode.java b/src/main/java/gregtech/common/covers/ItemFilterMode.java index 02fef3d1570..6d612915161 100644 --- a/src/main/java/gregtech/common/covers/ItemFilterMode.java +++ b/src/main/java/gregtech/common/covers/ItemFilterMode.java @@ -8,6 +8,7 @@ public enum ItemFilterMode implements IStringSerializable { FILTER_EXTRACT("cover.filter.mode.filter_extract"), FILTER_BOTH("cover.filter.mode.filter_both"); + public static final ItemFilterMode[] VALUES = values(); public final String localeName; ItemFilterMode(String localeName) { From 14792e51b7f9334ff5e00b7766b4363ae28705f0 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 6 Feb 2024 00:32:01 -0700 Subject: [PATCH 208/260] sbobles pls --- src/main/java/gregtech/common/covers/CoverFluidRegulator.java | 3 ++- .../gregtech/common/covers/filter/BaseFilterContainer.java | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 2905ea36d1d..0e5e2df3037 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -310,7 +310,8 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { // legacy NBT tag if (!tagCompound.hasKey("filterv2") && tagCompound.hasKey("TransferAmount")) { if (this.fluidFilterContainer.hasFilter()) { - this.fluidFilterContainer.getFluidFilter().configureFilterTanks(tagCompound.getInteger("TransferAmount")); + this.fluidFilterContainer.getFluidFilter() + .configureFilterTanks(tagCompound.getInteger("TransferAmount")); } } // this.transferAmount = tagCompound.getInteger("TransferAmount"); diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index c6eb73c4a80..5c214eb165b 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -6,7 +6,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; import net.minecraft.util.math.MathHelper; -import net.minecraftforge.common.util.INBTSerializable; import net.minecraftforge.items.ItemStackHandler; import com.cleanroommc.modularui.api.widget.IWidget; From 8bc348a4991ecd6c302bf5f09ec6ba535a573b1e Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 6 Feb 2024 01:40:41 -0700 Subject: [PATCH 209/260] rework FilterTypeRegistry to not use reflection --- .../covers/filter/FilterTypeRegistry.java | 136 ++++++++---------- 1 file changed, 59 insertions(+), 77 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java index 9a75f9ded55..d505fb455c2 100644 --- a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java +++ b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java @@ -1,13 +1,13 @@ package gregtech.common.covers.filter; -import gregtech.api.unification.stack.ItemAndMetadata; +import gregtech.api.util.ItemStackHashStrategy; import gregtech.common.items.MetaItems; import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; -import com.google.common.collect.BiMap; -import com.google.common.collect.HashBiMap; -import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2IntOpenCustomHashMap; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; @@ -15,42 +15,36 @@ public class FilterTypeRegistry { - private static final Map itemFilterIdByStack = new Object2IntOpenHashMap<>(); - private static final Map fluidFilterIdByStack = new Object2IntOpenHashMap<>(); - private static final BiMap> itemFilterById = HashBiMap.create(); - private static final BiMap> fluidFilterById = HashBiMap.create(); + private static final Map filterIdByStack = new Object2IntOpenCustomHashMap<>( + ItemStackHashStrategy.builder() + .compareItem(true) + .compareDamage(true) + .build()); + + private static final Map> itemFilterById = new Int2ObjectOpenHashMap<>(); + private static final Map> fluidFilterById = new Int2ObjectOpenHashMap<>(); public static void init() { - registerFluidFilter(1, SimpleFluidFilter.class, MetaItems.FLUID_FILTER.getStackForm()); - registerItemFilter(2, SimpleItemFilter.class, MetaItems.ITEM_FILTER.getStackForm()); - registerItemFilter(3, OreDictionaryItemFilter.class, MetaItems.ORE_DICTIONARY_FILTER.getStackForm()); - registerItemFilter(4, SmartItemFilter.class, MetaItems.SMART_FILTER.getStackForm()); + registerFluidFilter(1, SimpleFluidFilter::new, MetaItems.FLUID_FILTER.getStackForm()); + registerItemFilter(2, SimpleItemFilter::new, MetaItems.ITEM_FILTER.getStackForm()); + registerItemFilter(3, OreDictionaryItemFilter::new, MetaItems.ORE_DICTIONARY_FILTER.getStackForm()); + registerItemFilter(4, SmartItemFilter::new, MetaItems.SMART_FILTER.getStackForm()); } - public static void registerFluidFilter(int id, Class fluidFilterClass, ItemStack itemStack) { + public static void registerFluidFilter(int id, FilterFactory filterFactory, ItemStack itemStack) { if (fluidFilterById.containsKey(id)) { throw new IllegalArgumentException("Id is already occupied: " + id); } - fluidFilterIdByStack.put(new ItemAndMetadata(itemStack), id); - fluidFilterById.put(id, fluidFilterClass); + filterIdByStack.put(itemStack, id); + fluidFilterById.put(id, filterFactory); } - public static void registerItemFilter(int id, Class itemFilterClass, ItemStack itemStack) { + public static void registerItemFilter(int id, FilterFactory filterFactory, ItemStack itemStack) { if (itemFilterById.containsKey(id)) { throw new IllegalArgumentException("Id is already occupied: " + id); } - itemFilterIdByStack.put(new ItemAndMetadata(itemStack), id); - itemFilterById.put(id, itemFilterClass); - } - - public static int getIdForFilter(Filter filter) { - int id = -1; - if (filter instanceof ItemFilter) { - id = itemFilterById.inverse().get(filter.getClass()); - } else if (filter instanceof FluidFilter) { - id = fluidFilterById.inverse().get(filter.getClass()); - } - return id; + filterIdByStack.put(itemStack, id); + itemFilterById.put(id, filterFactory); } /** @@ -59,8 +53,8 @@ public static int getIdForFilter(Filter filter) { @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public static int getIdForItemFilter(ItemFilter itemFilter) { - Integer filterId = itemFilterById.inverse().get(itemFilter.getClass()); - if (filterId == null) { + int filterId = getIdForFilter(itemFilter); + if (filterId == -1) { throw new IllegalArgumentException("Unknown filter type " + itemFilter.getClass()); } return filterId; @@ -72,8 +66,8 @@ public static int getIdForItemFilter(ItemFilter itemFilter) { @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public static int getIdForFluidFilter(FluidFilter fluidFilter) { - Integer filterId = fluidFilterById.inverse().get(fluidFilter.getClass()); - if (filterId == null) { + int filterId = getIdForFilter(fluidFilter); + if (filterId == -1) { throw new IllegalArgumentException("Unknown filter type " + fluidFilter.getClass()); } return filterId; @@ -85,11 +79,8 @@ public static int getIdForFluidFilter(FluidFilter fluidFilter) { @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public static ItemFilter createItemFilterById(int filterId) { - Class filterClass = itemFilterById.get(filterId); - if (filterClass == null) { - throw new IllegalArgumentException("Unknown filter id: " + filterId); - } - return createNewFilterInstance(filterClass); + var factory = itemFilterById.get(filterId); + return (ItemFilter) createNewFilterInstance(factory); } /** @@ -98,11 +89,8 @@ public static ItemFilter createItemFilterById(int filterId) { @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public static FluidFilter createFluidFilterById(int filterId) { - Class filterClass = fluidFilterById.get(filterId); - if (filterClass == null) { - throw new IllegalArgumentException("Unknown filter id: " + filterId); - } - return createNewFilterInstance(filterClass); + var factory = fluidFilterById.get(filterId); + return (FluidFilter) createNewFilterInstance(factory); } public static @NotNull ItemFilter getItemFilterForStack(ItemStack itemStack) { @@ -111,21 +99,7 @@ public static FluidFilter createFluidFilterById(int filterId) { throw new IllegalArgumentException( String.format("Failed to create filter instance for stack %s", itemStack)); } - Class filterClass = itemFilterById.get(filterId); - return createNewFilterInstance(filterClass, itemStack); - } - - public static @NotNull Filter getFilterForStack(ItemStack itemStack) { - int id = getFilterIdForStack(itemStack); - if (id == -1) { - throw new IllegalArgumentException( - String.format("Failed to create filter instance for stack %s", itemStack)); - } - - if (fluidFilterById.containsKey(id)) - return createNewFilterInstance(fluidFilterById.get(id), itemStack); - else - return createNewFilterInstance(itemFilterById.get(id), itemStack); + return (ItemFilter) createNewFilterInstance(itemFilterById.get(filterId), itemStack); } public static @NotNull FluidFilter getFluidFilterForStack(ItemStack itemStack) { @@ -134,43 +108,51 @@ public static FluidFilter createFluidFilterById(int filterId) { throw new IllegalArgumentException( String.format("Failed to create filter instance for stack %s", itemStack)); } - Class filterClass = fluidFilterById.get(filterId); - return createNewFilterInstance(filterClass, itemStack); + return (FluidFilter) createNewFilterInstance(fluidFilterById.get(filterId), itemStack); + } + + public static int getIdForFilter(Filter filter) { + return getFilterIdForStack(filter.getContainerStack()); } public static int getFilterIdForStack(ItemStack stack) { - int id = -1; - if (isItemFilter(stack)) - id = itemFilterIdByStack.getOrDefault(new ItemAndMetadata(stack), -1); - else if (isFluidFilter(stack)) - id = fluidFilterIdByStack.getOrDefault(new ItemAndMetadata(stack), -1); - return id; + return filterIdByStack.getOrDefault(stack, -1); } - private static @NotNull T createNewFilterInstance(Class filterClass, ItemStack stack) { - try { - return filterClass.getDeclaredConstructor(stack.getClass()).newInstance(stack); - } catch (ReflectiveOperationException exception) { - // GTLog.logger.error("Failed to create filter instance for class {}", filterClass, exception); - throw new IllegalArgumentException( - String.format("Failed to create filter instance for class %s", filterClass), exception); - } + private static @NotNull Filter createNewFilterInstance(FilterFactory filterFactory, ItemStack stack) { + return filterFactory.create(stack); + } + + private static @NotNull Filter createNewFilterInstance(FilterFactory filterFactory) { + return createNewFilterInstance(filterFactory, ItemStack.EMPTY); } /** - * @deprecated use {@link FilterTypeRegistry#createNewFilterInstance(Class, ItemStack)} + * @deprecated use {@link FilterTypeRegistry#createNewFilterInstance(FilterFactory, ItemStack)} */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") private static T createNewFilterInstance(Class filterClass) { - return createNewFilterInstance(filterClass, ItemStack.EMPTY); + try { + return filterClass.getDeclaredConstructor(ItemStack.class).newInstance(ItemStack.EMPTY); + } catch (ReflectiveOperationException exception) { + // GTLog.logger.error("Failed to create filter instance for class {}", filterClass, exception); + throw new IllegalArgumentException( + String.format("Failed to create filter instance for class %s", filterClass), exception); + } } public static boolean isItemFilter(ItemStack stack) { - return itemFilterIdByStack.containsKey(new ItemAndMetadata(stack)); + return filterIdByStack.containsKey(stack); } public static boolean isFluidFilter(ItemStack stack) { - return fluidFilterIdByStack.containsKey(new ItemAndMetadata(stack)); + return filterIdByStack.containsKey(stack); + } + + @FunctionalInterface + public interface FilterFactory { + + Filter create(ItemStack stack); } } From 92a0408b4f77c533f18ac1135b57b33b73203611 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 6 Feb 2024 01:49:20 -0700 Subject: [PATCH 210/260] fix some issues with the registry --- .../covers/filter/FilterTypeRegistry.java | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java index d505fb455c2..693f04a6428 100644 --- a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java +++ b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java @@ -10,17 +10,22 @@ import it.unimi.dsi.fastutil.objects.Object2IntOpenCustomHashMap; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Map; public class FilterTypeRegistry { - private static final Map filterIdByStack = new Object2IntOpenCustomHashMap<>( + private static final Map itemFilterIdByStack = new Object2IntOpenCustomHashMap<>( + ItemStackHashStrategy.builder() + .compareItem(true) + .compareDamage(true) + .build()); + private static final Map fluidFilterIdByStack = new Object2IntOpenCustomHashMap<>( ItemStackHashStrategy.builder() .compareItem(true) .compareDamage(true) .build()); - private static final Map> itemFilterById = new Int2ObjectOpenHashMap<>(); private static final Map> fluidFilterById = new Int2ObjectOpenHashMap<>(); @@ -35,7 +40,7 @@ public static void registerFluidFilter(int id, FilterFactory filterF if (fluidFilterById.containsKey(id)) { throw new IllegalArgumentException("Id is already occupied: " + id); } - filterIdByStack.put(itemStack, id); + fluidFilterIdByStack.put(itemStack, id); fluidFilterById.put(id, filterFactory); } @@ -43,7 +48,7 @@ public static void registerItemFilter(int id, FilterFactory filterFac if (itemFilterById.containsKey(id)) { throw new IllegalArgumentException("Id is already occupied: " + id); } - filterIdByStack.put(itemStack, id); + itemFilterIdByStack.put(itemStack, id); itemFilterById.put(id, filterFactory); } @@ -111,12 +116,18 @@ public static FluidFilter createFluidFilterById(int filterId) { return (FluidFilter) createNewFilterInstance(fluidFilterById.get(filterId), itemStack); } - public static int getIdForFilter(Filter filter) { - return getFilterIdForStack(filter.getContainerStack()); + public static int getIdForFilter(@Nullable Filter filter) { + return getFilterIdForStack(filter == null ? ItemStack.EMPTY : filter.getContainerStack()); } public static int getFilterIdForStack(ItemStack stack) { - return filterIdByStack.getOrDefault(stack, -1); + if (stack.isEmpty()) return -1; + + int filterId = fluidFilterIdByStack.getOrDefault(stack, -1); + if (filterId == -1) + filterId = itemFilterIdByStack.getOrDefault(stack, -1); + + return filterId; } private static @NotNull Filter createNewFilterInstance(FilterFactory filterFactory, ItemStack stack) { @@ -143,11 +154,11 @@ private static T createNewFilterInstance(Class filterClass) { } public static boolean isItemFilter(ItemStack stack) { - return filterIdByStack.containsKey(stack); + return itemFilterIdByStack.containsKey(stack); } public static boolean isFluidFilter(ItemStack stack) { - return filterIdByStack.containsKey(stack); + return fluidFilterIdByStack.containsKey(stack); } @FunctionalInterface From d9a5ab83005f627bc897c197f8a5343a08a04158 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 7 Feb 2024 15:55:09 -0700 Subject: [PATCH 211/260] oh boy another filter refactor rename `Filter` to `IFilter` make `IFilter` not generic add `IFluidFilter` and `IItemFilter` for specific filter methods combine FluidFilter and ItemFilter into abstract BaseFilter update usages due to changes --- .../common/covers/CoverFluidFilter.java | 8 +- .../common/covers/CoverFluidRegulator.java | 2 +- .../common/covers/CoverItemFilter.java | 9 +- .../common/covers/filter/BaseFilter.java | 54 +++++++++ .../covers/filter/BaseFilterContainer.java | 31 +----- .../gregtech/common/covers/filter/Filter.java | 51 --------- .../covers/filter/FilterTypeRegistry.java | 35 +++--- .../common/covers/filter/FluidFilter.java | 101 ----------------- .../covers/filter/FluidFilterContainer.java | 37 +++++-- .../common/covers/filter/IFilter.java | 77 +++++++++++++ .../common/covers/filter/IFluidFilter.java | 20 ++++ .../common/covers/filter/IItemFilter.java | 18 +++ .../common/covers/filter/ItemFilter.java | 103 ------------------ .../covers/filter/ItemFilterContainer.java | 38 +++++-- .../filter/OreDictionaryItemFilter.java | 4 +- .../covers/filter/SimpleFluidFilter.java | 17 +-- .../covers/filter/SimpleItemFilter.java | 9 +- .../common/covers/filter/SmartItemFilter.java | 4 +- .../covers/filter/WidgetGroupFluidFilter.java | 8 +- .../covers/filter/WidgetGroupItemFilter.java | 8 +- .../readers/SimpleFluidFilterReader.java | 7 +- .../provider/CoverInfoProvider.java | 14 +-- 22 files changed, 283 insertions(+), 372 deletions(-) create mode 100644 src/main/java/gregtech/common/covers/filter/BaseFilter.java delete mode 100644 src/main/java/gregtech/common/covers/filter/Filter.java delete mode 100644 src/main/java/gregtech/common/covers/filter/FluidFilter.java create mode 100644 src/main/java/gregtech/common/covers/filter/IFilter.java create mode 100644 src/main/java/gregtech/common/covers/filter/IFluidFilter.java create mode 100644 src/main/java/gregtech/common/covers/filter/IItemFilter.java delete mode 100644 src/main/java/gregtech/common/covers/filter/ItemFilter.java diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 0da116940e0..61a630296b4 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -8,7 +8,7 @@ import gregtech.api.util.GTLog; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; -import gregtech.common.covers.filter.FluidFilter; +import gregtech.common.covers.filter.IFluidFilter; import gregtech.common.covers.filter.FluidFilterContainer; import net.minecraft.entity.player.EntityPlayer; @@ -102,9 +102,9 @@ public FluidFilterMode getFilterMode() { return filterMode; } - // this cover always has a filter - public @NotNull FluidFilter getFluidFilter() { - return this.fluidFilterContainer.getFluidFilter(); + @SuppressWarnings("DataFlowIssue") // this cover always has a filter + public @NotNull IFluidFilter getFluidFilter() { + return this.fluidFilterContainer.getFilter(); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 0e5e2df3037..8ed7f0800e4 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -310,7 +310,7 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { // legacy NBT tag if (!tagCompound.hasKey("filterv2") && tagCompound.hasKey("TransferAmount")) { if (this.fluidFilterContainer.hasFilter()) { - this.fluidFilterContainer.getFluidFilter() + this.fluidFilterContainer.getFilter() .configureFilterTanks(tagCompound.getInteger("TransferAmount")); } } diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 7222f2f7245..e6ffea8752d 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -8,7 +8,7 @@ import gregtech.api.util.GTLog; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; -import gregtech.common.covers.filter.ItemFilter; +import gregtech.common.covers.filter.IItemFilter; import gregtech.common.covers.filter.ItemFilterContainer; import net.minecraft.entity.player.EntityPlayer; @@ -100,10 +100,9 @@ public ItemFilterMode getFilterMode() { return filterMode; } - @SuppressWarnings("DataFlowIssue") - // this cover always has a filter - public @NotNull ItemFilter getItemFilter() { - return this.itemFilterContainer.getItemFilter(); + @SuppressWarnings("DataFlowIssue") // this cover always has a filter + public @NotNull IItemFilter getItemFilter() { + return this.itemFilterContainer.getFilter(); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilter.java b/src/main/java/gregtech/common/covers/filter/BaseFilter.java new file mode 100644 index 00000000000..25820cb8a1f --- /dev/null +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -0,0 +1,54 @@ +package gregtech.common.covers.filter; + +import gregtech.api.util.IDirtyNotifiable; +import gregtech.common.covers.filter.readers.BaseFilterReader; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +public abstract class BaseFilter implements IFilter { + + private IDirtyNotifiable dirtyNotifiable; + private BaseFilterReader filterReader; + + protected final void setFilterReader(BaseFilterReader filterReader) { + this.filterReader = filterReader; + } + + public final ItemStack getContainerStack() { + return this.filterReader.getContainer(); + } + + public final void setBlacklistFilter(boolean blacklistFilter) { + this.filterReader.setBlacklistFilter(blacklistFilter); + markDirty(); + } + + public final boolean isBlacklistFilter() { + return filterReader.isBlacklistFilter(); + } + + public final int getMaxTransferSize() { + return this.filterReader.getMaxTransferRate(); + } + + public final void setMaxTransferSize(int maxStackSize) { + this.filterReader.setMaxTransferRate(maxStackSize); + } + + public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { + this.dirtyNotifiable = dirtyNotifiable; + this.filterReader.setDirtyNotifiable(dirtyNotifiable); + } + + public final void markDirty() { + if (dirtyNotifiable != null) { + dirtyNotifiable.markAsDirty(); + } + } + + public void readFromNBT(NBTTagCompound tagCompound) { + this.filterReader.deserializeNBT(tagCompound); + markDirty(); + } +} diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 5c214eb165b..a74a6d59edb 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -16,11 +16,11 @@ import java.io.IOException; -public abstract class BaseFilterContainer extends ItemStackHandler { +public abstract class BaseFilterContainer extends ItemStackHandler { private int maxTransferSize = 1; private int transferSize; - private @Nullable Filter currentFilter; + private @Nullable IFilter currentFilter; private @Nullable Runnable onFilterInstanceChange; private final IDirtyNotifiable dirtyNotifiable; @@ -63,13 +63,12 @@ public void setOnFilterInstanceChange(@Nullable Runnable onFilterInstanceChange) return this.getStackInSlot(0); } - @SuppressWarnings("unchecked") // really need to stop doing this public final void setFilterStack(ItemStack stack) { this.setStackInSlot(0, stack); if (FilterTypeRegistry.isItemFilter(stack)) { - setFilter((Filter) FilterTypeRegistry.getItemFilterForStack(stack)); + setFilter(FilterTypeRegistry.getItemFilterForStack(stack)); } else { - setFilter((Filter) FilterTypeRegistry.getFluidFilterForStack(stack)); + setFilter(FilterTypeRegistry.getFluidFilterForStack(stack)); } } @@ -87,11 +86,11 @@ public final boolean hasFilter() { return currentFilter != null; } - public final @Nullable Filter getFilter() { + public @Nullable IFilter getFilter() { return currentFilter; } - public final void setFilter(@Nullable Filter newFilter) { + public final void setFilter(@Nullable IFilter newFilter) { this.currentFilter = newFilter; if (hasFilter()) { this.currentFilter.setDirtyNotifiable(dirtyNotifiable); @@ -101,17 +100,6 @@ public final void setFilter(@Nullable Filter newFilter) { } } - public boolean test(R toTest) { - return !hasFilter() || getFilter().test(toTest); - } - - public MatchResult match(R toMatch) { - if (!hasFilter()) - return MatchResult.create(true, toMatch, -1); - - return getFilter().match(toMatch); - } - public boolean showGlobalTransferLimitSlider() { return getMaxTransferSize() > 0 && (isBlacklistFilter() || !hasFilter() || getFilter().showGlobalTransferLimitSlider()); @@ -140,13 +128,6 @@ public int getTransferLimit(int slotIndex) { return this.currentFilter.getTransferLimit(slotIndex, getTransferSize()); } - public int getTransferLimit(R stack) { - if (isBlacklistFilter()) { - return getTransferSize(); - } - return this.currentFilter.getTransferLimit(stack, getTransferSize()); - } - public void setTransferSize(int transferSize) { this.transferSize = MathHelper.clamp(transferSize, 1, getMaxTransferSize()); onFilterInstanceChange(); diff --git a/src/main/java/gregtech/common/covers/filter/Filter.java b/src/main/java/gregtech/common/covers/filter/Filter.java deleted file mode 100644 index 901c812def9..00000000000 --- a/src/main/java/gregtech/common/covers/filter/Filter.java +++ /dev/null @@ -1,51 +0,0 @@ -package gregtech.common.covers.filter; - -import gregtech.api.util.IDirtyNotifiable; - -import net.minecraft.item.ItemStack; - -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; -import com.cleanroommc.modularui.widget.Widget; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public interface Filter { - - /** Uses Cleanroom MUI */ - @NotNull - ModularPanel createPopupPanel(GuiSyncManager syncManager); - - /** Uses Cleanroom MUI */ - @NotNull - ModularPanel createPanel(GuiSyncManager syncManager); - - /** Uses Cleanroom MUI - Creates the widgets standalone so that they can be put into their own panel */ - - @NotNull - Widget createWidgets(GuiSyncManager syncManager); - - ItemStack getContainerStack(); - - MatchResult match(T toMatch); - - boolean test(T toTest); - - void setDirtyNotifiable(@Nullable IDirtyNotifiable dirtyNotifiable); - - void markDirty(); - - int getMaxTransferSize(); - - void setMaxTransferSize(int maxTransferSize); - - boolean showGlobalTransferLimitSlider(); - - int getTransferLimit(int slot, int transferSize); - - int getTransferLimit(T stack, int transferSize); - - boolean isBlacklistFilter(); - - void setBlacklistFilter(boolean blacklistFilter); -} diff --git a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java index 693f04a6428..8370a6b429a 100644 --- a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java +++ b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java @@ -53,11 +53,11 @@ public static void registerItemFilter(int id, FilterFactory filterFac } /** - * @deprecated use {@link FilterTypeRegistry#getIdForFilter(Filter)} + * @deprecated use {@link FilterTypeRegistry#getIdForFilter(IFilter)} */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public static int getIdForItemFilter(ItemFilter itemFilter) { + public static int getIdForItemFilter(IItemFilter itemFilter) { int filterId = getIdForFilter(itemFilter); if (filterId == -1) { throw new IllegalArgumentException("Unknown filter type " + itemFilter.getClass()); @@ -66,11 +66,11 @@ public static int getIdForItemFilter(ItemFilter itemFilter) { } /** - * @deprecated use {@link FilterTypeRegistry#getIdForFilter(Filter)} + * @deprecated use {@link FilterTypeRegistry#getIdForFilter(IFilter)} */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public static int getIdForFluidFilter(FluidFilter fluidFilter) { + public static int getIdForFluidFilter(IFluidFilter fluidFilter) { int filterId = getIdForFilter(fluidFilter); if (filterId == -1) { throw new IllegalArgumentException("Unknown filter type " + fluidFilter.getClass()); @@ -83,9 +83,9 @@ public static int getIdForFluidFilter(FluidFilter fluidFilter) { */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public static ItemFilter createItemFilterById(int filterId) { + public static IItemFilter createItemFilterById(int filterId) { var factory = itemFilterById.get(filterId); - return (ItemFilter) createNewFilterInstance(factory); + return (IItemFilter) createNewFilterInstance(factory); } /** @@ -93,31 +93,32 @@ public static ItemFilter createItemFilterById(int filterId) { */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public static FluidFilter createFluidFilterById(int filterId) { + public static IFluidFilter createFluidFilterById(int filterId) { var factory = fluidFilterById.get(filterId); - return (FluidFilter) createNewFilterInstance(factory); + return (IFluidFilter) createNewFilterInstance(factory); } - public static @NotNull ItemFilter getItemFilterForStack(ItemStack itemStack) { + public static @NotNull IItemFilter getItemFilterForStack(ItemStack itemStack) { int filterId = getFilterIdForStack(itemStack); if (filterId == -1) { throw new IllegalArgumentException( String.format("Failed to create filter instance for stack %s", itemStack)); } - return (ItemFilter) createNewFilterInstance(itemFilterById.get(filterId), itemStack); + return (IItemFilter) createNewFilterInstance(itemFilterById.get(filterId), itemStack); } - public static @NotNull FluidFilter getFluidFilterForStack(ItemStack itemStack) { + public static @NotNull IFluidFilter getFluidFilterForStack(ItemStack itemStack) { int filterId = getFilterIdForStack(itemStack); if (filterId == -1) { throw new IllegalArgumentException( String.format("Failed to create filter instance for stack %s", itemStack)); } - return (FluidFilter) createNewFilterInstance(fluidFilterById.get(filterId), itemStack); + return (IFluidFilter) createNewFilterInstance(fluidFilterById.get(filterId), itemStack); } - public static int getIdForFilter(@Nullable Filter filter) { - return getFilterIdForStack(filter == null ? ItemStack.EMPTY : filter.getContainerStack()); + public static int getIdForFilter(@Nullable IFilter filter) { + if (filter == null) return -1; + return getFilterIdForStack(filter.getContainerStack()); } public static int getFilterIdForStack(ItemStack stack) { @@ -130,11 +131,11 @@ public static int getFilterIdForStack(ItemStack stack) { return filterId; } - private static @NotNull Filter createNewFilterInstance(FilterFactory filterFactory, ItemStack stack) { + private static @NotNull IFilter createNewFilterInstance(FilterFactory filterFactory, ItemStack stack) { return filterFactory.create(stack); } - private static @NotNull Filter createNewFilterInstance(FilterFactory filterFactory) { + private static @NotNull IFilter createNewFilterInstance(FilterFactory filterFactory) { return createNewFilterInstance(filterFactory, ItemStack.EMPTY); } @@ -164,6 +165,6 @@ public static boolean isFluidFilter(ItemStack stack) { @FunctionalInterface public interface FilterFactory { - Filter create(ItemStack stack); + IFilter create(ItemStack stack); } } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilter.java b/src/main/java/gregtech/common/covers/filter/FluidFilter.java deleted file mode 100644 index 14ebbfdf046..00000000000 --- a/src/main/java/gregtech/common/covers/filter/FluidFilter.java +++ /dev/null @@ -1,101 +0,0 @@ -package gregtech.common.covers.filter; - -import gregtech.api.mui.GTGuiTextures; -import gregtech.api.util.IDirtyNotifiable; -import gregtech.common.covers.filter.readers.BaseFilterReader; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fluids.FluidStack; - -import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.value.sync.BooleanSyncValue; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; -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.function.Consumer; - -public abstract class FluidFilter implements Filter { - - private IDirtyNotifiable dirtyNotifiable; - private BaseFilterReader filterReader; - - protected void setFilterReader(BaseFilterReader filterReader) { - this.filterReader = filterReader; - } - - public int getTransferLimit(FluidStack fluidStack, int transferSize) { - return 0; - } - - @Override - public int getTransferLimit(int slot, int transferSize) { - return 0; - } - - public int getTransferLimit(FluidStack stack) { - return getTransferLimit(stack, getMaxTransferSize()); - } - - @Deprecated - public abstract void initUI(Consumer widgetGroup); - - protected static MatchResult createResult(boolean matched, FluidStack fluidStack, int index) { - return MatchResult.create(matched, fluidStack, index); - } - - public @NotNull Widget createWidgets(GuiSyncManager syncManager) { - var blacklist = new BooleanSyncValue(this.filterReader::isBlacklistFilter, - this.filterReader::setBlacklistFilter); - return new ParentWidget<>().coverChildren() - .child(new CycleButtonWidget() - .value(blacklist) - .textureGetter(state -> GTGuiTextures.BUTTON_BLACKLIST[state]) - .addTooltip(0, IKey.lang("cover.filter.blacklist.disabled")) - .addTooltip(1, IKey.lang("cover.filter.blacklist.enabled"))); - } - - public boolean showGlobalTransferLimitSlider() { - return false; - } - - @Override - public final int getMaxTransferSize() { - return this.filterReader.getMaxTransferRate(); - } - - @Override - public final void setMaxTransferSize(int maxTransferSize) { - this.filterReader.setMaxTransferRate(maxTransferSize); - } - - public final void onMaxStackSizeChange() { - this.filterReader.onTransferRateChange(); - } - - public abstract void readFromNBT(NBTTagCompound tagCompound); - - public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { - this.dirtyNotifiable = dirtyNotifiable; - this.filterReader.setDirtyNotifiable(dirtyNotifiable); - } - - public abstract void configureFilterTanks(int amount); - - @Override - public boolean isBlacklistFilter() { - return this.filterReader.isBlacklistFilter(); - } - - public void setBlacklistFilter(boolean blacklist) { - this.filterReader.setBlacklistFilter(blacklist); - } - - public final void markDirty() { - if (dirtyNotifiable != null) { - dirtyNotifiable.markAsDirty(); - } - } -} diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index e60f6068828..99855160e46 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -22,12 +22,13 @@ import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.function.BooleanSupplier; import java.util.function.Consumer; -public class FluidFilterContainer extends BaseFilterContainer - implements INBTSerializable { +public class FluidFilterContainer extends BaseFilterContainer + implements INBTSerializable { public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable) { super(dirtyNotifiable); @@ -41,11 +42,26 @@ public boolean testFluidStack(FluidStack fluidStack, boolean whitelist) { boolean result = true; if (hasFilter()) { result = getFilter().test(fluidStack); - if (!whitelist) { - result = !result; - } } - return result; + return whitelist != result; + } + + public boolean test(FluidStack toTest) { + return !hasFilter() || getFilter().test(toTest); + } + + public MatchResult match(FluidStack toMatch) { + if (!hasFilter()) + return MatchResult.create(true, toMatch, -1); + + return getFilter().match(toMatch); + } + + public int getTransferLimit(FluidStack stack) { + if (isBlacklistFilter()) { + return getTransferSize(); + } + return getFilter().getTransferLimit(stack, getTransferSize()); } /** @deprecated uses old builtin MUI */ @@ -65,11 +81,12 @@ public void initUI(int y, Consumer widgetGroup) { @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public void initFilterUI(int y, Consumer widgetGroup) { - widgetGroup.accept(new WidgetGroupFluidFilter(y, this::getFluidFilter, this::showGlobalTransferLimitSlider)); + widgetGroup.accept(new WidgetGroupFluidFilter(y, this::getFilter, this::showGlobalTransferLimitSlider)); } - public FluidFilter getFluidFilter() { - return (FluidFilter) getFilter(); + @Override + public @Nullable IFluidFilter getFilter() { + return (IFluidFilter) super.getFilter(); } /** @deprecated uses old builtin MUI */ @@ -174,7 +191,7 @@ public void deserializeNBT(NBTTagCompound tagCompound) { var stack = getFilterStack(); if (FilterTypeRegistry.isFluidFilter(stack)) { setFilter(FilterTypeRegistry.getFluidFilterForStack(stack)); - getFluidFilter().readFromNBT(tagCompound); + getFilter().readFromNBT(tagCompound); } } } diff --git a/src/main/java/gregtech/common/covers/filter/IFilter.java b/src/main/java/gregtech/common/covers/filter/IFilter.java new file mode 100644 index 00000000000..b91295fde4f --- /dev/null +++ b/src/main/java/gregtech/common/covers/filter/IFilter.java @@ -0,0 +1,77 @@ +package gregtech.common.covers.filter; + +import gregtech.api.mui.GTGuiTextures; +import gregtech.api.util.IDirtyNotifiable; + +import net.minecraft.item.ItemStack; + +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.api.widget.IWidget; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.BooleanSyncValue; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widget.Widget; +import com.cleanroommc.modularui.widgets.CycleButtonWidget; + +import net.minecraft.nbt.NBTTagCompound; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.function.Consumer; + +public interface IFilter { + + @Deprecated + void initUI(Consumer widgetGroup); + + /** Uses Cleanroom MUI */ + @NotNull + ModularPanel createPopupPanel(GuiSyncManager syncManager); + + /** Uses Cleanroom MUI */ + @NotNull + ModularPanel createPanel(GuiSyncManager syncManager); + + /** Uses Cleanroom MUI - Creates the widgets standalone so that they can be put into their own panel */ + + @NotNull + Widget createWidgets(GuiSyncManager syncManager); + + ItemStack getContainerStack(); + + void setDirtyNotifiable(@Nullable IDirtyNotifiable dirtyNotifiable); + + void markDirty(); + + int getMaxTransferSize(); + + void setMaxTransferSize(int maxTransferSize); + + default boolean showGlobalTransferLimitSlider() { + return false; + } + + default int getTransferLimit(int slot, int transferSize) { + return 0; + } + + boolean isBlacklistFilter(); + + void setBlacklistFilter(boolean blacklistFilter); + + default IWidget createBlacklistUI() { + return new ParentWidget<>().coverChildren() + .child(new CycleButtonWidget() + .value(new BooleanSyncValue( + this::isBlacklistFilter, + this::setBlacklistFilter)) + .textureGetter(state -> GTGuiTextures.BUTTON_BLACKLIST[state]) + .addTooltip(0, IKey.lang("cover.filter.blacklist.disabled")) + .addTooltip(1, IKey.lang("cover.filter.blacklist.enabled"))); + } + + /** Read legacy NBT here */ + void readFromNBT(NBTTagCompound tagCompound); +} diff --git a/src/main/java/gregtech/common/covers/filter/IFluidFilter.java b/src/main/java/gregtech/common/covers/filter/IFluidFilter.java new file mode 100644 index 00000000000..0bda8858284 --- /dev/null +++ b/src/main/java/gregtech/common/covers/filter/IFluidFilter.java @@ -0,0 +1,20 @@ +package gregtech.common.covers.filter; + +import net.minecraftforge.fluids.FluidStack; + +public interface IFluidFilter extends IFilter { + + MatchResult match(FluidStack toMatch); + + boolean test(FluidStack toTest); + + default int getTransferLimit(FluidStack stack, int transferSize) { + return 0; + } + + void configureFilterTanks(int amount); + + default MatchResult createResult(boolean matched, FluidStack fluidStack, int index) { + return MatchResult.create(matched, fluidStack, index); + } +} diff --git a/src/main/java/gregtech/common/covers/filter/IItemFilter.java b/src/main/java/gregtech/common/covers/filter/IItemFilter.java new file mode 100644 index 00000000000..9e0bc79b356 --- /dev/null +++ b/src/main/java/gregtech/common/covers/filter/IItemFilter.java @@ -0,0 +1,18 @@ +package gregtech.common.covers.filter; + +import net.minecraft.item.ItemStack; + +public interface IItemFilter extends IFilter { + + MatchResult match(ItemStack toMatch); + + boolean test(ItemStack toTest); + + default int getTransferLimit(ItemStack stack, int transferSize) { + return 0; + } + + default MatchResult createResult(boolean matched, ItemStack fluidStack, int index) { + return MatchResult.create(matched, fluidStack, index); + } +} diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilter.java b/src/main/java/gregtech/common/covers/filter/ItemFilter.java deleted file mode 100644 index 2015ec51e78..00000000000 --- a/src/main/java/gregtech/common/covers/filter/ItemFilter.java +++ /dev/null @@ -1,103 +0,0 @@ -package gregtech.common.covers.filter; - -import gregtech.api.mui.GTGuiTextures; -import gregtech.api.util.IDirtyNotifiable; -import gregtech.common.covers.filter.readers.BaseFilterReader; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.value.sync.BooleanSyncValue; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; -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.function.Consumer; - -public abstract class ItemFilter implements Filter { - - private IDirtyNotifiable dirtyNotifiable; - private BaseFilterReader filterReader; - - protected void setFilterReader(BaseFilterReader reader) { - this.filterReader = reader; - } - - public ItemStack getContainerStack() { - return this.filterReader.getContainer(); - } - - public final void setBlacklistFilter(boolean blacklistFilter) { - this.filterReader.setBlacklistFilter(blacklistFilter); - markDirty(); - } - - public final boolean isBlacklistFilter() { - return filterReader.isBlacklistFilter(); - } - - public final int getMaxTransferSize() { - return this.filterReader.getMaxTransferRate(); - } - - public final void setMaxTransferSize(int maxStackSize) { - this.filterReader.setMaxTransferRate(maxStackSize); - } - - public abstract boolean showGlobalTransferLimitSlider(); - - public int getTransferLimit(int matchSlot, int globalTransferLimit) { - return 0; - } - - public int getTransferLimit(ItemStack stack, int globalTransferLimit) { - return 0; - } - - /** Deprecated, uses old builtin MUI */ - @Deprecated - public abstract void initUI(Consumer widgetGroup); - - /** Uses Cleanroom MUI */ - public abstract @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager); - - /** Uses Cleanroom MUI */ - public abstract @NotNull ModularPanel createPanel(GuiSyncManager syncManager); - - /** Uses Cleanroom MUI - Creates the widgets standalone so that they can be put into their own panel */ - - public @NotNull Widget createWidgets(GuiSyncManager syncManager) { - var blacklist = new BooleanSyncValue(this.filterReader::isBlacklistFilter, - this.filterReader::setBlacklistFilter); - return new ParentWidget<>().coverChildren() - .child(new CycleButtonWidget() - .value(blacklist) - .textureGetter(state -> GTGuiTextures.BUTTON_BLACKLIST[state]) - .addTooltip(0, IKey.lang("cover.filter.blacklist.disabled")) - .addTooltip(1, IKey.lang("cover.filter.blacklist.enabled"))); - } - - public void readFromNBT(NBTTagCompound tagCompound) { - this.filterReader.deserializeNBT(tagCompound); - markDirty(); - } - - protected static MatchResult createResult(boolean matched, ItemStack stack, int index) { - return MatchResult.create(matched, stack, index); - } - - public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { - this.dirtyNotifiable = dirtyNotifiable; - this.filterReader.setDirtyNotifiable(dirtyNotifiable); - } - - public final void markDirty() { - if (dirtyNotifiable != null) { - dirtyNotifiable.markAsDirty(); - } - } -} diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 2272c10dbb8..4ac7892b242 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -24,19 +24,44 @@ import com.cleanroommc.modularui.widgets.ButtonWidget; import com.cleanroommc.modularui.widgets.ItemSlot; import com.cleanroommc.modularui.widgets.layout.Row; + import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.function.BooleanSupplier; import java.util.function.Consumer; -public class ItemFilterContainer extends BaseFilterContainer - implements INBTSerializable { +public class ItemFilterContainer extends BaseFilterContainer + implements INBTSerializable { public ItemFilterContainer(IDirtyNotifiable dirtyNotifiable) { super(dirtyNotifiable); } + public boolean test(ItemStack toTest) { + return !hasFilter() || getFilter().test(toTest); + } + + public MatchResult match(ItemStack toMatch) { + if (!hasFilter()) + return MatchResult.create(true, toMatch, -1); + + return getFilter().match(toMatch); + } + + public int getTransferLimit(ItemStack stack) { + if (isBlacklistFilter()) { + return getTransferSize(); + } + return getFilter().getTransferLimit(stack, getTransferSize()); + } + + @Override + public @Nullable IItemFilter getFilter() { + return (IItemFilter) super.getFilter(); + } + /** @deprecated uses old builtin MUI */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") @@ -52,12 +77,7 @@ public void initUI(int y, Consumer widgetGroup) { @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public void initFilterUI(int y, Consumer widgetGroup) { - widgetGroup.accept(new WidgetGroupItemFilter(y, this::getItemFilter)); - } - - // todo remove when usages of old mui with filters are gone - public ItemFilter getItemFilter() { - return (ItemFilter) getFilter(); + widgetGroup.accept(new WidgetGroupItemFilter(y, this::getFilter)); } /** @deprecated uses old builtin MUI */ @@ -160,7 +180,7 @@ public void deserializeNBT(NBTTagCompound tagCompound) { var stack = getFilterStack(); if (FilterTypeRegistry.isItemFilter(stack)) { setFilter(FilterTypeRegistry.getItemFilterForStack(stack)); - getItemFilter().readFromNBT(tagCompound); // try to read old data + getFilter().readFromNBT(tagCompound); // try to read old data } } } diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 48f5f35895a..b0d649de8ea 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -40,7 +40,7 @@ import java.util.Set; import java.util.function.Consumer; -public class OreDictionaryItemFilter extends ItemFilter { +public class OreDictionaryItemFilter extends BaseFilter implements IItemFilter { private final Map> matchCache = new Object2ObjectOpenHashMap<>(); private final SingleItemVariantMap noOreDictMatch = new SingleItemVariantMap<>(); @@ -145,7 +145,7 @@ public void initUI(Consumer widgetGroup) {} .selectedBackground(GTGuiTextures.BUTTON_MATCH_ALL[0]) .tooltip(tooltip -> tooltip.setAutoUpdate(true)) .marginRight(2)) - .child(super.createWidgets(syncManager))); + .child(createBlacklistUI())); } protected void getStatusIcon(Widget widget) { diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index a06abdc8212..ee834ecf08e 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -3,10 +3,10 @@ import gregtech.api.cover.CoverWithUI; import gregtech.api.mui.GTGuis; import gregtech.api.mui.sync.FixedFluidSlotSH; +import gregtech.api.util.IDirtyNotifiable; import gregtech.common.covers.filter.readers.SimpleFluidFilterReader; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fluids.FluidStack; import com.cleanroommc.modularui.screen.ModularPanel; @@ -19,7 +19,7 @@ import java.util.function.Consumer; -public class SimpleFluidFilter extends FluidFilter { +public class SimpleFluidFilter extends BaseFilter implements IFluidFilter { private static final int MAX_FLUID_SLOTS = 9; @@ -31,17 +31,11 @@ public SimpleFluidFilter(ItemStack stack) { } @Override - @Deprecated public void configureFilterTanks(int amount) { this.filterReader.setFluidAmounts(amount); this.markDirty(); } - @Override - public ItemStack getContainerStack() { - return this.filterReader.getContainer(); - } - @Override public @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager) { return GTGuis.createPopupPanel("simple_fluid_filter", 98, 81) @@ -65,7 +59,7 @@ public ItemStack getContainerStack() { .key('F', i -> new FluidSlot() .syncHandler(new FixedFluidSlotSH(filterReader.getFluidTank(i)).phantom(true))) .build().marginRight(4)) - .child(super.createWidgets(syncManager)); + .child(createBlacklistUI()); } @Override @@ -108,11 +102,6 @@ public boolean showGlobalTransferLimitSlider() { return isBlacklistFilter() && getMaxTransferSize() > 0; } - public void readFromNBT(NBTTagCompound tagCompound) { - this.filterReader.deserializeNBT(tagCompound); - markDirty(); - } - @Override public int getTransferLimit(FluidStack fluidStack, int transferSize) { int limit = 0; diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index d7aac589cbe..d00275d76d8 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -29,7 +29,7 @@ import java.util.function.Consumer; -public class SimpleItemFilter extends ItemFilter { +public class SimpleItemFilter extends BaseFilter implements IItemFilter { private static final int MAX_MATCH_SLOTS = 9; private final SimpleItemFilterReader filterReader; @@ -59,11 +59,6 @@ public int getTransferLimit(int matchSlot, int globalTransferLimit) { return Math.min(stackInFilterSlot.getCount(), globalTransferLimit); } - @Override - public boolean showGlobalTransferLimitSlider() { - return false; - } - @Override public void initUI(Consumer widgetGroup) { for (int i = 0; i < 9; i++) { @@ -126,7 +121,7 @@ public void initUI(Consumer widgetGroup) { }))) .build().marginRight(4)) .child(new Column().width(18).coverChildren() - .child(super.createWidgets(syncManager)) + .child(createBlacklistUI()) .child(new CycleButtonWidget() .value(ignoreDamage) .textureGetter(state -> GTGuiTextures.BUTTON_IGNORE_DAMAGE[state]) diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 0d02061f6c7..4d6ea3ea312 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -30,7 +30,7 @@ import java.util.Collections; import java.util.function.Consumer; -public class SmartItemFilter extends ItemFilter { +public class SmartItemFilter extends BaseFilter implements IItemFilter { private final SmartItemFilterReader filterReader; @@ -110,7 +110,7 @@ public void initUI(Consumer widgetGroup) { .child(createFilterModeButton(filterMode, SmartFilteringMode.ELECTROLYZER)) .child(createFilterModeButton(filterMode, SmartFilteringMode.CENTRIFUGE)) .child(createFilterModeButton(filterMode, SmartFilteringMode.SIFTER))) - .child(super.createWidgets(syncManager)); + .child(createBlacklistUI()); } private Widget createFilterModeButton(EnumSyncValue value, diff --git a/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java b/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java index 0881a27a811..4e9e24cd119 100644 --- a/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java @@ -16,11 +16,11 @@ @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public class WidgetGroupFluidFilter extends AbstractWidgetGroup { - private final Supplier fluidFilterSupplier; + private final Supplier fluidFilterSupplier; private final Supplier showTipSupplier; - private FluidFilter fluidFilter; + private IFluidFilter fluidFilter; - public WidgetGroupFluidFilter(int yPosition, Supplier fluidFilterSupplier, + public WidgetGroupFluidFilter(int yPosition, Supplier fluidFilterSupplier, Supplier showTipSupplier) { super(new Position(18 + 5, yPosition)); this.fluidFilterSupplier = fluidFilterSupplier; @@ -30,7 +30,7 @@ public WidgetGroupFluidFilter(int yPosition, Supplier fluidFilterSu @Override public void detectAndSendChanges() { super.detectAndSendChanges(); - FluidFilter newFluidFilter = fluidFilterSupplier.get(); + IFluidFilter newFluidFilter = fluidFilterSupplier.get(); if (fluidFilter != newFluidFilter) { clearAllWidgets(); this.fluidFilter = newFluidFilter; diff --git a/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java b/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java index 9ad230ee476..58e05e07144 100644 --- a/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java @@ -17,11 +17,11 @@ @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public class WidgetGroupItemFilter extends AbstractWidgetGroup { - private final Supplier itemFilterSupplier; - private ItemFilter itemFilter; + private final Supplier itemFilterSupplier; + private IItemFilter itemFilter; private int maxStackSize = 1; - public WidgetGroupItemFilter(int yPosition, Supplier itemFilterSupplier) { + public WidgetGroupItemFilter(int yPosition, Supplier itemFilterSupplier) { super(new Position(0, yPosition)); this.itemFilterSupplier = itemFilterSupplier; } @@ -29,7 +29,7 @@ public WidgetGroupItemFilter(int yPosition, Supplier itemFilterSuppl @Override public void detectAndSendChanges() { super.detectAndSendChanges(); - ItemFilter newItemFilter = itemFilterSupplier.get(); + IItemFilter newItemFilter = itemFilterSupplier.get(); if (itemFilter != newItemFilter) { clearAllWidgets(); this.itemFilter = newItemFilter; 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 5689ba37813..52f058200fb 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java @@ -14,7 +14,6 @@ public class SimpleFluidFilterReader extends BaseFilterReader { protected static final String CAPACITY = "Capacity"; protected static final String KEY_FLUIDS = "FluidFilter"; - protected static final String BUCKET_ONLY = "BucketOnly"; public SimpleFluidFilterReader(ItemStack container, int slots) { super(container, slots); @@ -30,10 +29,6 @@ public String getKey() { return KEY_FLUIDS; } - public final void setBucketOnly(boolean bucketOnly) { - getStackTag().setBoolean(BUCKET_ONLY, bucketOnly); - } - public final boolean shouldShowAmount() { return getMaxTransferRate() > 1; } @@ -135,7 +130,7 @@ public void setFluid(@Nullable FluidStack stack) { } public boolean showAmount() { - return filterReader.shouldShowAmount(); + return this.filterReader.shouldShowAmount(); } @Override diff --git a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java index c2430850faa..c2de8498e5e 100644 --- a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java +++ b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java @@ -76,7 +76,7 @@ private static void conveyorInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverCo transferModeText(probeInfo, roboticArm.getTransferMode(), rateUnit, filter.getTransferSize(), filter.getFilter() != null); } - itemFilterText(probeInfo, filter.getItemFilter()); + itemFilterText(probeInfo, filter.getFilter()); } /** @@ -127,7 +127,7 @@ private static void pumpInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverPump p transferModeText(probeInfo, regulator.getTransferMode(), rateUnit, regulator .getFluidFilterContainer().getTransferSize(), filter.hasFilter() && !filter.isBlacklistFilter()); } - fluidFilterText(probeInfo, filter.getFluidFilter()); + fluidFilterText(probeInfo, filter.getFilter()); } /** @@ -183,7 +183,7 @@ private static void fluidFilterInfo(@NotNull IProbeInfo probeInfo, @NotNull Cove private static void enderFluidLinkInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverEnderFluidLink enderFluidLink) { transferRateText(probeInfo, enderFluidLink.getPumpMode(), " " + lang("cover.bucket.mode.milli_bucket_rate"), enderFluidLink.isIOEnabled() ? CoverEnderFluidLink.TRANSFER_RATE : 0); - fluidFilterText(probeInfo, enderFluidLink.getFluidFilterContainer().getFluidFilter()); + fluidFilterText(probeInfo, enderFluidLink.getFluidFilterContainer().getFilter()); if (!enderFluidLink.getColorStr().isEmpty()) { probeInfo.text( @@ -252,12 +252,12 @@ private static void filterModeText(@NotNull IProbeInfo probeInfo, @NotNull IStri } /** - * Displays text for {@link ItemFilter} covers + * Displays text for {@link IItemFilter} covers * * @param probeInfo the info to add the text to * @param filter the filter to display info from */ - private static void itemFilterText(@NotNull IProbeInfo probeInfo, @Nullable ItemFilter filter) { + private static void itemFilterText(@NotNull IProbeInfo probeInfo, @Nullable IItemFilter filter) { String label = TextStyleClass.INFO + lang("gregtech.top.filter.label"); if (filter instanceof OreDictionaryItemFilter) { String expression = ((OreDictionaryItemFilter) filter).getExpression(); @@ -268,12 +268,12 @@ private static void itemFilterText(@NotNull IProbeInfo probeInfo, @Nullable Item } /** - * Displays text for {@link FluidFilter} covers + * Displays text for {@link BaseFilter} covers * * @param probeInfo the info to add the text to * @param filter the filter to display info from */ - private static void fluidFilterText(@NotNull IProbeInfo probeInfo, @Nullable FluidFilter filter) { + private static void fluidFilterText(@NotNull IProbeInfo probeInfo, @Nullable IFluidFilter filter) { // TODO If more unique fluid filtration is added, providers for it go here } From e860675661df6f24040233fe2e5453391ac4d0df Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 7 Feb 2024 16:45:48 -0700 Subject: [PATCH 212/260] fix trying to read an empty stack --- .../java/gregtech/common/covers/filter/BaseFilterContainer.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index a74a6d59edb..b2ebad0a71d 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -65,6 +65,8 @@ public void setOnFilterInstanceChange(@Nullable Runnable onFilterInstanceChange) public final void setFilterStack(ItemStack stack) { this.setStackInSlot(0, stack); + if (stack.isEmpty()) return; + if (FilterTypeRegistry.isItemFilter(stack)) { setFilter(FilterTypeRegistry.getItemFilterForStack(stack)); } else { From 6a31ea9ccf493ea5b929350f1d0a6c562c79b0fb Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 7 Feb 2024 17:41:08 -0700 Subject: [PATCH 213/260] rework FilterTypeRegistry to map to stacks instead if int ids add filter type enum --- .../covers/filter/BaseFilterContainer.java | 53 ++++++------ .../covers/filter/FilterTypeRegistry.java | 81 +++++++++++++------ .../covers/filter/FluidFilterContainer.java | 43 ---------- .../common/covers/filter/IFilter.java | 6 ++ .../common/covers/filter/IFluidFilter.java | 5 ++ .../common/covers/filter/IItemFilter.java | 5 ++ .../covers/filter/ItemFilterContainer.java | 43 ---------- 7 files changed, 100 insertions(+), 136 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index b2ebad0a71d..6be67b1c986 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -34,16 +34,6 @@ public int getSlotLimit(int slot) { return 1; } - @Override - protected void onLoad() { - onFilterSlotChange(false); - } - - @Override - protected void onContentsChanged(int slot) { - onFilterSlotChange(true); - } - public void onFilterInstanceChange() { dirtyNotifiable.markAsDirty(); } @@ -52,26 +42,37 @@ public void setOnFilterInstanceChange(@Nullable Runnable onFilterInstanceChange) this.onFilterInstanceChange = onFilterInstanceChange; } - /** - * Called when the filter slot has changed to a different filter or has been removed - * - * @param notify if true, call {@code onFilterInstanceChange()} - */ - protected abstract void onFilterSlotChange(boolean notify); - public final @NotNull ItemStack getFilterStack() { return this.getStackInSlot(0); } - public final void setFilterStack(ItemStack stack) { - this.setStackInSlot(0, stack); - if (stack.isEmpty()) return; - - if (FilterTypeRegistry.isItemFilter(stack)) { - setFilter(FilterTypeRegistry.getItemFilterForStack(stack)); - } else { - setFilter(FilterTypeRegistry.getFluidFilterForStack(stack)); + @Override + public void setStackInSlot(int slot, ItemStack stack) { + if (ItemStack.areItemStacksEqual(stack, getFilterStack())) + return; + + if (stack.isEmpty()) { + setFilter(null); + } else if (FilterTypeRegistry.isFilter(stack)) { + setFilter(FilterTypeRegistry.getFilterForStack(stack)); } + + super.setStackInSlot(slot, stack); + } + + // todo update stack for insert and extract, though that shouldn't be called normally + @Override + public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { + return stack; + } + + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + return ItemStack.EMPTY; + } + + public final void setFilterStack(ItemStack stack) { + setStackInSlot(0, stack); } public int getMaxTransferSize() { @@ -147,6 +148,8 @@ public NBTTagCompound serializeNBT() { @Override public void deserializeNBT(NBTTagCompound nbt) { super.deserializeNBT(nbt.getCompoundTag("FilterInventory")); + setFilter(getFilterStack().isEmpty() ? null : FilterTypeRegistry.getFilterForStack(getFilterStack())); + if (hasFilter()) getFilter().readFromNBT(nbt); this.maxTransferSize = nbt.getInteger("MaxStackSize"); this.transferSize = nbt.getInteger("TransferStackSize"); } diff --git a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java index 8370a6b429a..63e1196bc79 100644 --- a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java +++ b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java @@ -3,8 +3,9 @@ import gregtech.api.util.ItemStackHashStrategy; import gregtech.common.items.MetaItems; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap; + import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenCustomHashMap; @@ -26,17 +27,39 @@ public class FilterTypeRegistry { .compareItem(true) .compareDamage(true) .build()); - private static final Map> itemFilterById = new Int2ObjectOpenHashMap<>(); - private static final Map> fluidFilterById = new Int2ObjectOpenHashMap<>(); + + private static final Map filterByStack = new Object2ObjectOpenCustomHashMap<>( + ItemStackHashStrategy.builder() + .compareItem(true) + .compareDamage(true) + .build()); + + private static final Map filterTypeByStack = new Object2ObjectOpenCustomHashMap<>( + ItemStackHashStrategy.builder() + .compareItem(true) + .compareDamage(true) + .build()); + private static final Map itemFilterById = new Int2ObjectOpenHashMap<>(); + private static final Map fluidFilterById = new Int2ObjectOpenHashMap<>(); public static void init() { + //todo call this in MetaItems as a component or something + registerFilter(SimpleFluidFilter::new, MetaItems.FLUID_FILTER.getStackForm()); + registerFilter(SimpleItemFilter::new, MetaItems.ITEM_FILTER.getStackForm()); + registerFilter(OreDictionaryItemFilter::new, MetaItems.ORE_DICTIONARY_FILTER.getStackForm()); + registerFilter(SmartItemFilter::new, MetaItems.SMART_FILTER.getStackForm()); registerFluidFilter(1, SimpleFluidFilter::new, MetaItems.FLUID_FILTER.getStackForm()); registerItemFilter(2, SimpleItemFilter::new, MetaItems.ITEM_FILTER.getStackForm()); registerItemFilter(3, OreDictionaryItemFilter::new, MetaItems.ORE_DICTIONARY_FILTER.getStackForm()); registerItemFilter(4, SmartItemFilter::new, MetaItems.SMART_FILTER.getStackForm()); } - public static void registerFluidFilter(int id, FilterFactory filterFactory, ItemStack itemStack) { + /** + * @deprecated use {@link FilterTypeRegistry#registerFilter(FilterFactory, ItemStack)} + */ + @Deprecated + @ApiStatus.ScheduledForRemoval(inVersion = "2.10") + public static void registerFluidFilter(int id, FilterFactory filterFactory, ItemStack itemStack) { if (fluidFilterById.containsKey(id)) { throw new IllegalArgumentException("Id is already occupied: " + id); } @@ -44,12 +67,23 @@ public static void registerFluidFilter(int id, FilterFactory filterF fluidFilterById.put(id, filterFactory); } - public static void registerItemFilter(int id, FilterFactory filterFactory, ItemStack itemStack) { + /** + * @deprecated use {@link FilterTypeRegistry#registerFilter(FilterFactory, ItemStack)} + */ + @Deprecated + @ApiStatus.ScheduledForRemoval(inVersion = "2.10") + public static void registerItemFilter(int id, FilterFactory filterFactory, ItemStack itemStack) { if (itemFilterById.containsKey(id)) { throw new IllegalArgumentException("Id is already occupied: " + id); } itemFilterIdByStack.put(itemStack, id); itemFilterById.put(id, filterFactory); + + } + + public static void registerFilter(FilterFactory factory, ItemStack stack) { + filterByStack.put(stack, factory); + filterTypeByStack.put(stack, factory.create(stack).getType()); } /** @@ -116,6 +150,14 @@ public static IFluidFilter createFluidFilterById(int filterId) { return (IFluidFilter) createNewFilterInstance(fluidFilterById.get(filterId), itemStack); } + public static @NotNull IFilter getFilterForStack(ItemStack stack) { + if (!filterByStack.containsKey(stack)) { + throw new IllegalArgumentException( + String.format("Failed to create filter instance for stack %s", stack)); + } + return filterByStack.get(stack).create(stack); + } + public static int getIdForFilter(@Nullable IFilter filter) { if (filter == null) return -1; return getFilterIdForStack(filter.getContainerStack()); @@ -131,39 +173,28 @@ public static int getFilterIdForStack(ItemStack stack) { return filterId; } - private static @NotNull IFilter createNewFilterInstance(FilterFactory filterFactory, ItemStack stack) { + private static @NotNull IFilter createNewFilterInstance(FilterFactory filterFactory, ItemStack stack) { return filterFactory.create(stack); } - private static @NotNull IFilter createNewFilterInstance(FilterFactory filterFactory) { + private static @NotNull IFilter createNewFilterInstance(FilterFactory filterFactory) { return createNewFilterInstance(filterFactory, ItemStack.EMPTY); } - /** - * @deprecated use {@link FilterTypeRegistry#createNewFilterInstance(FilterFactory, ItemStack)} - */ - @Deprecated - @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - private static T createNewFilterInstance(Class filterClass) { - try { - return filterClass.getDeclaredConstructor(ItemStack.class).newInstance(ItemStack.EMPTY); - } catch (ReflectiveOperationException exception) { - // GTLog.logger.error("Failed to create filter instance for class {}", filterClass, exception); - throw new IllegalArgumentException( - String.format("Failed to create filter instance for class %s", filterClass), exception); - } - } - public static boolean isItemFilter(ItemStack stack) { - return itemFilterIdByStack.containsKey(stack); + return filterTypeByStack.get(stack) == IFilter.FilterType.ITEM; } public static boolean isFluidFilter(ItemStack stack) { - return fluidFilterIdByStack.containsKey(stack); + return filterTypeByStack.get(stack) == IFilter.FilterType.FLUID; + } + + public static boolean isFilter(ItemStack stack) { + return filterByStack.containsKey(stack); } @FunctionalInterface - public interface FilterFactory { + public interface FilterFactory { IFilter create(ItemStack stack); } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 99855160e46..06d8c956e16 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -123,11 +123,6 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) .child(new ItemSlot() .slot(SyncHandlers.itemSlot(this, 0) .filter(FilterTypeRegistry::isFluidFilter) - .changeListener((newItem, onlyAmountChanged, client, init) -> { - if (newItem.isEmpty() || FilterTypeRegistry.isFluidFilter(newItem)) { - onFilterSlotChange(true); - } - }) .singletonSlotGroup(101)) .onUpdateListener(w -> { if (!hasFilter() && panel.isPanelOpen()) { @@ -156,42 +151,4 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) .alignment(Alignment.CenterRight).asWidget() .left(36).right(0).height(18)); } - - @Override - public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { - super.readInitialSyncData(packetBuffer); - var stack = getFilterStack(); - - if (FilterTypeRegistry.isFluidFilter(stack)) - setFilter(FilterTypeRegistry.getFluidFilterForStack(stack)); - } - - protected void onFilterSlotChange(boolean notify) { - ItemStack filterStack = getFilterStack(); - int newId = FilterTypeRegistry.getFilterIdForStack(filterStack); - int currentId = FilterTypeRegistry.getIdForFilter(getFilter()); - - if (!FilterTypeRegistry.isFluidFilter(filterStack)) { - if (hasFilter()) { - setFilter(null); - setBlacklistFilter(false); - if (notify) - onFilterInstanceChange(); - } - } else if (currentId == -1 || newId != currentId) { - setFilter(FilterTypeRegistry.getFluidFilterForStack(filterStack)); - if (notify) - onFilterInstanceChange(); - } - } - - @Override - public void deserializeNBT(NBTTagCompound tagCompound) { - super.deserializeNBT(tagCompound); - var stack = getFilterStack(); - if (FilterTypeRegistry.isFluidFilter(stack)) { - setFilter(FilterTypeRegistry.getFluidFilterForStack(stack)); - getFilter().readFromNBT(tagCompound); - } - } } diff --git a/src/main/java/gregtech/common/covers/filter/IFilter.java b/src/main/java/gregtech/common/covers/filter/IFilter.java index b91295fde4f..c8093c5c58a 100644 --- a/src/main/java/gregtech/common/covers/filter/IFilter.java +++ b/src/main/java/gregtech/common/covers/filter/IFilter.java @@ -74,4 +74,10 @@ default IWidget createBlacklistUI() { /** Read legacy NBT here */ void readFromNBT(NBTTagCompound tagCompound); + + FilterType getType(); + + enum FilterType { + ITEM, FLUID + } } diff --git a/src/main/java/gregtech/common/covers/filter/IFluidFilter.java b/src/main/java/gregtech/common/covers/filter/IFluidFilter.java index 0bda8858284..704bf0803a5 100644 --- a/src/main/java/gregtech/common/covers/filter/IFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/IFluidFilter.java @@ -17,4 +17,9 @@ default int getTransferLimit(FluidStack stack, int transferSize) { default MatchResult createResult(boolean matched, FluidStack fluidStack, int index) { return MatchResult.create(matched, fluidStack, index); } + + @Override + default FilterType getType() { + return FilterType.FLUID; + } } diff --git a/src/main/java/gregtech/common/covers/filter/IItemFilter.java b/src/main/java/gregtech/common/covers/filter/IItemFilter.java index 9e0bc79b356..7e0b640dec5 100644 --- a/src/main/java/gregtech/common/covers/filter/IItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/IItemFilter.java @@ -15,4 +15,9 @@ default int getTransferLimit(ItemStack stack, int transferSize) { default MatchResult createResult(boolean matched, ItemStack fluidStack, int index) { return MatchResult.create(matched, fluidStack, index); } + + @Override + default FilterType getType() { + return FilterType.ITEM; + } } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 4ac7892b242..6b0f304c62f 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -112,11 +112,6 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) .child(new ItemSlot() .slot(SyncHandlers.itemSlot(this, 0) .filter(FilterTypeRegistry::isItemFilter) - .changeListener((newItem, onlyAmountChanged, client, init) -> { - if (newItem.isEmpty() || FilterTypeRegistry.isItemFilter(newItem)) { - onFilterSlotChange(true); - } - }) .singletonSlotGroup(101)) .onUpdateListener(w -> { if (!hasFilter() && panel.isPanelOpen()) { @@ -145,42 +140,4 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) .alignment(Alignment.CenterRight).asWidget() .left(36).right(0).height(18)); } - - protected void onFilterSlotChange(boolean notify) { - ItemStack filterStack = getFilterStack(); - int newId = FilterTypeRegistry.getFilterIdForStack(filterStack); - int currentId = FilterTypeRegistry.getIdForFilter(getFilter()); - - if (!FilterTypeRegistry.isItemFilter(filterStack)) { - if (hasFilter()) { - setFilter(null); - setBlacklistFilter(false); - if (notify) - onFilterInstanceChange(); - } - } else if (currentId == -1 || newId != currentId) { - setFilter(FilterTypeRegistry.getItemFilterForStack(filterStack)); - if (notify) - onFilterInstanceChange(); - } - } - - @Override - public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { - super.readInitialSyncData(packetBuffer); - var stack = getFilterStack(); - - if (FilterTypeRegistry.isItemFilter(stack)) - setFilter(FilterTypeRegistry.getItemFilterForStack(stack)); - } - - @Override - public void deserializeNBT(NBTTagCompound tagCompound) { - super.deserializeNBT(tagCompound); - var stack = getFilterStack(); - if (FilterTypeRegistry.isItemFilter(stack)) { - setFilter(FilterTypeRegistry.getItemFilterForStack(stack)); - getFilter().readFromNBT(tagCompound); // try to read old data - } - } } From 69bb4dae9c27cfc196cd77657f2003c206e84211 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 7 Feb 2024 17:42:50 -0700 Subject: [PATCH 214/260] sptoless --- src/main/java/gregtech/common/covers/CoverFluidFilter.java | 2 +- .../gregtech/common/covers/filter/FilterTypeRegistry.java | 6 ++---- .../common/covers/filter/FluidFilterContainer.java | 5 +---- src/main/java/gregtech/common/covers/filter/IFilter.java | 7 +++---- .../gregtech/common/covers/filter/ItemFilterContainer.java | 5 +---- .../gregtech/common/covers/filter/SimpleFluidFilter.java | 1 - 6 files changed, 8 insertions(+), 18 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 61a630296b4..b5d9cef6236 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -8,8 +8,8 @@ import gregtech.api.util.GTLog; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; -import gregtech.common.covers.filter.IFluidFilter; import gregtech.common.covers.filter.FluidFilterContainer; +import gregtech.common.covers.filter.IFluidFilter; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; diff --git a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java index 63e1196bc79..20ac3d7e386 100644 --- a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java +++ b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java @@ -3,12 +3,11 @@ import gregtech.api.util.ItemStackHashStrategy; import gregtech.common.items.MetaItems; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap; - import net.minecraft.item.ItemStack; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenCustomHashMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -43,7 +42,7 @@ public class FilterTypeRegistry { private static final Map fluidFilterById = new Int2ObjectOpenHashMap<>(); public static void init() { - //todo call this in MetaItems as a component or something + // todo call this in MetaItems as a component or something registerFilter(SimpleFluidFilter::new, MetaItems.FLUID_FILTER.getStackForm()); registerFilter(SimpleItemFilter::new, MetaItems.ITEM_FILTER.getStackForm()); registerFilter(OreDictionaryItemFilter::new, MetaItems.ORE_DICTIONARY_FILTER.getStackForm()); @@ -78,7 +77,6 @@ public static void registerItemFilter(int id, FilterFactory filterFactory, ItemS } itemFilterIdByStack.put(itemStack, id); itemFilterById.put(id, filterFactory); - } public static void registerFilter(FilterFactory factory, ItemStack stack) { diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 06d8c956e16..32e393e75d4 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -3,9 +3,7 @@ import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.IDirtyNotifiable; -import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.PacketBuffer; import net.minecraftforge.common.util.INBTSerializable; import net.minecraftforge.fluids.FluidStack; @@ -21,14 +19,13 @@ import com.cleanroommc.modularui.widgets.ItemSlot; import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.function.BooleanSupplier; import java.util.function.Consumer; public class FluidFilterContainer extends BaseFilterContainer - implements INBTSerializable { + implements INBTSerializable { public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable) { super(dirtyNotifiable); diff --git a/src/main/java/gregtech/common/covers/filter/IFilter.java b/src/main/java/gregtech/common/covers/filter/IFilter.java index c8093c5c58a..6acde756be6 100644 --- a/src/main/java/gregtech/common/covers/filter/IFilter.java +++ b/src/main/java/gregtech/common/covers/filter/IFilter.java @@ -4,6 +4,7 @@ import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.api.widget.IWidget; @@ -13,9 +14,6 @@ import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.CycleButtonWidget; - -import net.minecraft.nbt.NBTTagCompound; - import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -78,6 +76,7 @@ default IWidget createBlacklistUI() { FilterType getType(); enum FilterType { - ITEM, FLUID + ITEM, + FLUID } } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 6b0f304c62f..3617d5b4910 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -10,7 +10,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.PacketBuffer; import net.minecraftforge.common.util.INBTSerializable; import com.cleanroommc.modularui.api.drawable.IKey; @@ -24,16 +23,14 @@ import com.cleanroommc.modularui.widgets.ButtonWidget; import com.cleanroommc.modularui.widgets.ItemSlot; import com.cleanroommc.modularui.widgets.layout.Row; - import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.function.BooleanSupplier; import java.util.function.Consumer; public class ItemFilterContainer extends BaseFilterContainer - implements INBTSerializable { + implements INBTSerializable { public ItemFilterContainer(IDirtyNotifiable dirtyNotifiable) { super(dirtyNotifiable); diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index ee834ecf08e..c2fa20adadc 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -3,7 +3,6 @@ import gregtech.api.cover.CoverWithUI; import gregtech.api.mui.GTGuis; import gregtech.api.mui.sync.FixedFluidSlotSH; -import gregtech.api.util.IDirtyNotifiable; import gregtech.common.covers.filter.readers.SimpleFluidFilterReader; import net.minecraft.item.ItemStack; From 64ed64cd04a2f400e56c237320c2e79aca30343b Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 7 Feb 2024 17:46:53 -0700 Subject: [PATCH 215/260] use new methods --- .../common/items/behaviors/filter/OreDictFilterUIManager.java | 2 +- .../common/items/behaviors/filter/SimpleFilterUIManager.java | 2 +- .../items/behaviors/filter/SimpleFluidFilterUIManager.java | 2 +- .../common/items/behaviors/filter/SmartFilterUIManager.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) 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 1eebc5780f3..448e2d71088 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java @@ -11,7 +11,7 @@ public class OreDictFilterUIManager extends BaseFilterUIManager { @Override public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { - var filter = FilterTypeRegistry.getItemFilterForStack(guiData.getUsedItemStack()); + var filter = FilterTypeRegistry.getFilterForStack(guiData.getUsedItemStack()); return createBasePanel(filter.getContainerStack()).height(160) .child(filter.createWidgets(guiSyncManager).top(22).margin(7, 0)) .child(SlotGroupWidget.playerInventory().bottom(7).left(7)); 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 6599832f9cf..5a28bf98f7a 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java @@ -11,7 +11,7 @@ public class SimpleFilterUIManager extends BaseFilterUIManager { @Override public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { - var filter = FilterTypeRegistry.getItemFilterForStack(guiData.getUsedItemStack()); + var filter = FilterTypeRegistry.getFilterForStack(guiData.getUsedItemStack()); return createBasePanel(filter.getContainerStack()).padding(4).height(166) .child(filter.createWidgets(guiSyncManager).top(22).left(7)) .child(SlotGroupWidget.playerInventory().left(7)); 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 9420d80dea4..7d95397282c 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java @@ -11,7 +11,7 @@ public class SimpleFluidFilterUIManager extends BaseFilterUIManager { @Override public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { - var filter = FilterTypeRegistry.getFluidFilterForStack(guiData.getUsedItemStack()); + var filter = FilterTypeRegistry.getFilterForStack(guiData.getUsedItemStack()); return createBasePanel(filter.getContainerStack()).padding(4).height(166) .child(filter.createWidgets(guiSyncManager).top(22).left(7)) .child(SlotGroupWidget.playerInventory().left(7)); 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 27d18e3c984..5522925f549 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java @@ -11,7 +11,7 @@ public class SmartFilterUIManager extends BaseFilterUIManager { @Override public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { - var filter = FilterTypeRegistry.getItemFilterForStack(guiData.getUsedItemStack()); + var filter = FilterTypeRegistry.getFilterForStack(guiData.getUsedItemStack()); return createBasePanel(filter.getContainerStack()).height(166) .child(filter.createWidgets(guiSyncManager).left(7).top(22)) .child(SlotGroupWidget.playerInventory().bottom(7).left(7)); From 6ea9da54cc61e703c2f99e6020badf666c5f7d3a Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 7 Feb 2024 17:59:48 -0700 Subject: [PATCH 216/260] remove unneeded methods add method for getting filter type --- .../covers/filter/FilterTypeRegistry.java | 59 ++++--------------- .../covers/filter/WidgetGroupItemFilter.java | 2 +- 2 files changed, 13 insertions(+), 48 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java index 20ac3d7e386..8e34572106f 100644 --- a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java +++ b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java @@ -47,6 +47,8 @@ public static void init() { registerFilter(SimpleItemFilter::new, MetaItems.ITEM_FILTER.getStackForm()); registerFilter(OreDictionaryItemFilter::new, MetaItems.ORE_DICTIONARY_FILTER.getStackForm()); registerFilter(SmartItemFilter::new, MetaItems.SMART_FILTER.getStackForm()); + + //todo remove registerFluidFilter(1, SimpleFluidFilter::new, MetaItems.FLUID_FILTER.getStackForm()); registerItemFilter(2, SimpleItemFilter::new, MetaItems.ITEM_FILTER.getStackForm()); registerItemFilter(3, OreDictionaryItemFilter::new, MetaItems.ORE_DICTIONARY_FILTER.getStackForm()); @@ -85,33 +87,25 @@ public static void registerFilter(FilterFactory factory, ItemStack stack) { } /** - * @deprecated use {@link FilterTypeRegistry#getIdForFilter(IFilter)} + * @deprecated use {@link FilterTypeRegistry#getFilterTypeForStack(ItemStack)} */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public static int getIdForItemFilter(IItemFilter itemFilter) { - int filterId = getIdForFilter(itemFilter); - if (filterId == -1) { - throw new IllegalArgumentException("Unknown filter type " + itemFilter.getClass()); - } - return filterId; + return 0; } /** - * @deprecated use {@link FilterTypeRegistry#getIdForFilter(IFilter)} + * @deprecated use {@link FilterTypeRegistry#getFilterTypeForStack(ItemStack)} */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public static int getIdForFluidFilter(IFluidFilter fluidFilter) { - int filterId = getIdForFilter(fluidFilter); - if (filterId == -1) { - throw new IllegalArgumentException("Unknown filter type " + fluidFilter.getClass()); - } - return filterId; + return 0; } /** - * @deprecated use {@link FilterTypeRegistry#getItemFilterForStack(ItemStack)} + * @deprecated use {@link FilterTypeRegistry#getFilterForStack(ItemStack)} */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") @@ -121,7 +115,7 @@ public static IItemFilter createItemFilterById(int filterId) { } /** - * @deprecated use {@link FilterTypeRegistry#getFluidFilterForStack(ItemStack)} + * @deprecated use {@link FilterTypeRegistry#getFilterForStack(ItemStack)} */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") @@ -130,24 +124,6 @@ public static IFluidFilter createFluidFilterById(int filterId) { return (IFluidFilter) createNewFilterInstance(factory); } - public static @NotNull IItemFilter getItemFilterForStack(ItemStack itemStack) { - int filterId = getFilterIdForStack(itemStack); - if (filterId == -1) { - throw new IllegalArgumentException( - String.format("Failed to create filter instance for stack %s", itemStack)); - } - return (IItemFilter) createNewFilterInstance(itemFilterById.get(filterId), itemStack); - } - - public static @NotNull IFluidFilter getFluidFilterForStack(ItemStack itemStack) { - int filterId = getFilterIdForStack(itemStack); - if (filterId == -1) { - throw new IllegalArgumentException( - String.format("Failed to create filter instance for stack %s", itemStack)); - } - return (IFluidFilter) createNewFilterInstance(fluidFilterById.get(filterId), itemStack); - } - public static @NotNull IFilter getFilterForStack(ItemStack stack) { if (!filterByStack.containsKey(stack)) { throw new IllegalArgumentException( @@ -156,19 +132,8 @@ public static IFluidFilter createFluidFilterById(int filterId) { return filterByStack.get(stack).create(stack); } - public static int getIdForFilter(@Nullable IFilter filter) { - if (filter == null) return -1; - return getFilterIdForStack(filter.getContainerStack()); - } - - public static int getFilterIdForStack(ItemStack stack) { - if (stack.isEmpty()) return -1; - - int filterId = fluidFilterIdByStack.getOrDefault(stack, -1); - if (filterId == -1) - filterId = itemFilterIdByStack.getOrDefault(stack, -1); - - return filterId; + public static IFilter.FilterType getFilterTypeForStack(ItemStack stack) { + return filterTypeByStack.get(stack); } private static @NotNull IFilter createNewFilterInstance(FilterFactory filterFactory, ItemStack stack) { @@ -180,11 +145,11 @@ public static int getFilterIdForStack(ItemStack stack) { } public static boolean isItemFilter(ItemStack stack) { - return filterTypeByStack.get(stack) == IFilter.FilterType.ITEM; + return getFilterTypeForStack(stack) == IFilter.FilterType.ITEM; } public static boolean isFluidFilter(ItemStack stack) { - return filterTypeByStack.get(stack) == IFilter.FilterType.FLUID; + return getFilterTypeForStack(stack) == IFilter.FilterType.FLUID; } public static boolean isFilter(ItemStack stack) { diff --git a/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java b/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java index 58e05e07144..6e1758fdbc1 100644 --- a/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java @@ -60,7 +60,7 @@ public void readUpdateInfo(int id, PacketBuffer buffer) { if (buffer.readBoolean()) { // int filterId = buffer.readVarInt(); try { - this.itemFilter = FilterTypeRegistry.getItemFilterForStack(buffer.readItemStack()); + this.itemFilter = (IItemFilter) FilterTypeRegistry.getFilterForStack(buffer.readItemStack()); this.itemFilter.initUI(this::addWidget); this.itemFilter.setMaxTransferSize(maxStackSize); } catch (IOException e) { From 28e1caecc0a82ea2b6a4468970bf20d7849dcac5 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 7 Feb 2024 19:23:48 -0700 Subject: [PATCH 217/260] move default interface methods into base filter reader remove get key method use common key for filter slots rename legacy keys --- .../covers/filter/FilterTypeRegistry.java | 3 +-- .../filter/readers/BaseFilterReader.java | 26 +++++++++++++++++++ .../covers/filter/readers/FilterReader.java | 25 ++---------------- .../readers/SimpleFluidFilterReader.java | 9 ++----- .../readers/SimpleItemFilterReader.java | 11 +++----- 5 files changed, 34 insertions(+), 40 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java index 8e34572106f..552330fffbd 100644 --- a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java +++ b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java @@ -10,7 +10,6 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.Map; @@ -48,7 +47,7 @@ public static void init() { registerFilter(OreDictionaryItemFilter::new, MetaItems.ORE_DICTIONARY_FILTER.getStackForm()); registerFilter(SmartItemFilter::new, MetaItems.SMART_FILTER.getStackForm()); - //todo remove + // todo remove registerFluidFilter(1, SimpleFluidFilter::new, MetaItems.FLUID_FILTER.getStackForm()); registerItemFilter(2, SimpleItemFilter::new, MetaItems.ITEM_FILTER.getStackForm()); registerItemFilter(3, OreDictionaryItemFilter::new, MetaItems.ORE_DICTIONARY_FILTER.getStackForm()); 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 6c5b9f82baa..e5e3723d89f 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -4,9 +4,13 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.util.math.MathHelper; +import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.INBTSerializable; +import org.jetbrains.annotations.NotNull; + public abstract class BaseFilterReader implements FilterReader, INBTSerializable { protected final ItemStack container; @@ -14,6 +18,7 @@ public abstract class BaseFilterReader implements FilterReader, INBTSerializable private final int size; protected int maxTransferRate = 1; protected static final String BLACKLIST = "IsBlacklist"; + protected static final String FILTER_CONTENTS = "FilterSlots"; public BaseFilterReader(ItemStack container, int slots) { this.container = container; @@ -24,6 +29,27 @@ public ItemStack getContainer() { return this.container; } + public @NotNull NBTTagList getInventoryNbt() { + var nbt = getStackTag(); + if (!nbt.hasKey(FILTER_CONTENTS)) { + NBTTagList list = new NBTTagList(); + for (int i = 0; i < getSize(); i++) { + list.appendTag(new NBTTagCompound()); + } + nbt.setTag(FILTER_CONTENTS, list); + } + return nbt.getTagList(FILTER_CONTENTS, Constants.NBT.TAG_COMPOUND); + } + + public @NotNull NBTTagCompound getStackTag() { + NBTTagCompound nbt = this.container.getTagCompound(); + if (nbt == null) { + nbt = new NBTTagCompound(); + this.container.setTagCompound(nbt); + } + return nbt; + } + @Override public int getSize() { return this.size; diff --git a/src/main/java/gregtech/common/covers/filter/readers/FilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/FilterReader.java index bd56233ed00..8f5c9b0b4a6 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/FilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/FilterReader.java @@ -3,7 +3,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraftforge.common.util.Constants; import org.jetbrains.annotations.NotNull; @@ -12,30 +11,10 @@ public interface FilterReader { ItemStack getContainer(); @NotNull - default NBTTagList getInventoryNbt() { - var nbt = getStackTag(); - String key = getKey(); - if (!nbt.hasKey(key)) { - NBTTagList list = new NBTTagList(); - for (int i = 0; i < getSize(); i++) { - list.appendTag(new NBTTagCompound()); - } - nbt.setTag(key, list); - } - return nbt.getTagList(key, Constants.NBT.TAG_COMPOUND); - } + NBTTagList getInventoryNbt(); @NotNull - default NBTTagCompound getStackTag() { - NBTTagCompound nbt = getContainer().getTagCompound(); - if (nbt == null) { - nbt = new NBTTagCompound(); - getContainer().setTagCompound(nbt); - } - return nbt; - } - - String getKey(); + NBTTagCompound getStackTag(); int getSize(); 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 52f058200fb..5d71f54b1e0 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java @@ -13,7 +13,7 @@ public class SimpleFluidFilterReader extends BaseFilterReader { protected WritableFluidTank[] fluidTanks; protected static final String CAPACITY = "Capacity"; - protected static final String KEY_FLUIDS = "FluidFilter"; + protected static final String LEGACY_FILTER_KEY = "FluidFilter"; public SimpleFluidFilterReader(ItemStack container, int slots) { super(container, slots); @@ -24,11 +24,6 @@ public SimpleFluidFilterReader(ItemStack container, int slots) { setCapacity(getStackTag().hasKey(CAPACITY) ? getCapacity() : 1000); } - @Override - public String getKey() { - return KEY_FLUIDS; - } - public final boolean shouldShowAmount() { return getMaxTransferRate() > 1; } @@ -70,7 +65,7 @@ public void onTransferRateChange() { @Override public void deserializeNBT(NBTTagCompound nbt) { super.deserializeNBT(nbt); - NBTTagList filterSlots = nbt.getTagList(KEY_FLUIDS, 10); + NBTTagList filterSlots = nbt.getTagList(LEGACY_FILTER_KEY, 10); for (int i = 0; i < filterSlots.tagCount(); i++) { NBTTagCompound stackTag = filterSlots.getCompoundTagAt(i); FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(stackTag); 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 8eaf674517c..dccd7d24ca6 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java @@ -14,7 +14,7 @@ public class SimpleItemFilterReader extends BaseFilterReader implements IItemHandlerModifiable { public static final String COUNT = "Count"; - protected static final String KEY_ITEMS = "ItemFilter"; + protected static final String LEGACY_ITEM_KEY = "ItemFilter"; public static final String RESPECT_NBT = "IgnoreNBT"; public static final String RESPECT_DAMAGE = "IgnoreDamage"; @@ -38,11 +38,6 @@ public int getSlots() { return getSize(); } - @Override - public String getKey() { - return KEY_ITEMS; - } - public void setIgnoreNBT(boolean ignoreNBT) { if (!getStackTag().getBoolean(RESPECT_NBT) == ignoreNBT) return; @@ -167,9 +162,9 @@ public void deserializeNBT(NBTTagCompound nbt) { if (nbt.hasKey(RESPECT_NBT)) this.setIgnoreNBT(nbt.getBoolean(RESPECT_NBT)); - if (nbt.hasKey(KEY_ITEMS)) { + if (nbt.hasKey(LEGACY_ITEM_KEY)) { var temp = new ItemStackHandler(); - temp.deserializeNBT(nbt.getCompoundTag(KEY_ITEMS)); + temp.deserializeNBT(nbt.getCompoundTag(LEGACY_ITEM_KEY)); for (int i = 0; i < temp.getSlots(); i++) { var stack = temp.getStackInSlot(i); if (stack.isEmpty()) continue; From 35e37d9a0bbfa718036d3389a97f5ccfa81ce34c Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 7 Feb 2024 19:24:32 -0700 Subject: [PATCH 218/260] return stack form of coverable view instead of filter stack prevents stack overflow --- src/main/java/gregtech/common/covers/CoverFluidFilter.java | 4 ++++ src/main/java/gregtech/common/covers/CoverItemFilter.java | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index b5d9cef6236..1578d261b91 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -11,6 +11,7 @@ import gregtech.common.covers.filter.FluidFilterContainer; import gregtech.common.covers.filter.IFluidFilter; +import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; @@ -75,6 +76,9 @@ public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFaci @Override public @NotNull ItemStack getPickItem() { + if (GuiScreen.isCtrlKeyDown()) + return getCoverableView().getStackForm(); + return this.fluidFilterContainer.getFilterStack(); } diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index e6ffea8752d..33422f73310 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -11,6 +11,7 @@ import gregtech.common.covers.filter.IItemFilter; import gregtech.common.covers.filter.ItemFilterContainer; +import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; @@ -68,6 +69,9 @@ public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFaci @Override public @NotNull ItemStack getPickItem() { + if (GuiScreen.isCtrlKeyDown()) + return getCoverableView().getStackForm(); + return this.itemFilterContainer.getFilterStack(); } From ae62f3b445bf1708e4159f7b4a79d522b1ceb789 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 7 Feb 2024 19:29:40 -0700 Subject: [PATCH 219/260] no need to recompile on construction --- .../gregtech/common/covers/filter/OreDictionaryItemFilter.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index b0d649de8ea..0e917657a0a 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -49,7 +49,6 @@ public class OreDictionaryItemFilter extends BaseFilter implements IItemFilter { public OreDictionaryItemFilter(ItemStack stack) { this.filterReader = new OreDictFilterReader(stack); setFilterReader(this.filterReader); - recompile(); } @NotNull From b5e4d93bbd10b7f2157c58910c0fdf5627c55111 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 7 Feb 2024 20:38:33 -0700 Subject: [PATCH 220/260] properly handle insert and extract add methods for casting Filter fix issues with robot arm --- .../gregtech/common/covers/CoverConveyor.java | 2 +- .../common/covers/CoverFluidFilter.java | 2 +- .../common/covers/CoverFluidRegulator.java | 6 ++--- .../covers/CoverFluidVoidingAdvanced.java | 2 +- .../common/covers/CoverItemFilter.java | 2 +- .../common/covers/CoverRoboticArm.java | 6 ++--- .../covers/filter/BaseFilterContainer.java | 24 +++++++++++++++---- .../covers/filter/FluidFilterContainer.java | 19 +++++++-------- .../covers/filter/ItemFilterContainer.java | 17 +++++++------ .../covers/filter/WidgetGroupFluidFilter.java | 24 ++++++++++++------- .../provider/CoverInfoProvider.java | 8 +++---- 11 files changed, 67 insertions(+), 45 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 2a821bd11ff..dce18f22528 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -314,7 +314,7 @@ protected int moveInventoryItems(IItemHandler sourceInventory, IItemHandler targ itemInfo.totalCount -= extractedStack.getCount(); if (itemInfo.totalCount == 0) { - itemInfos.remove(matchResult); + itemInfos.remove(matchSlotIndex); if (itemInfos.isEmpty()) { break; } diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 1578d261b91..3e2d1f8b0f8 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -108,7 +108,7 @@ public FluidFilterMode getFilterMode() { @SuppressWarnings("DataFlowIssue") // this cover always has a filter public @NotNull IFluidFilter getFluidFilter() { - return this.fluidFilterContainer.getFilter(); + return this.fluidFilterContainer.getFluidFilter(); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 8ed7f0800e4..586dd29a6cd 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -78,7 +78,7 @@ protected int doTransferExact(int transferLimit, IFluidHandler sourceHandler, IF for (IFluidTankProperties tankProperties : sourceHandler.getTankProperties()) { FluidStack sourceFluid = tankProperties.getContents(); if (this.fluidFilterContainer.hasFilter()) { - supplyAmount = this.fluidFilterContainer.getFilter().getTransferLimit(sourceFluid, supplyAmount); + supplyAmount = this.fluidFilterContainer.getFluidFilter().getTransferLimit(sourceFluid, supplyAmount); } if (fluidLeftToTransfer < supplyAmount) break; @@ -121,7 +121,7 @@ protected int doKeepExact(final int transferLimit, break; if (this.fluidFilterContainer.hasFilter()) { - keepAmount = this.fluidFilterContainer.getFilter().getTransferLimit(fluidStack, keepAmount); + keepAmount = this.fluidFilterContainer.getFluidFilter().getTransferLimit(fluidStack, keepAmount); } // if fluid needs to be moved to meet the Keep Exact value @@ -310,7 +310,7 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { // legacy NBT tag if (!tagCompound.hasKey("filterv2") && tagCompound.hasKey("TransferAmount")) { if (this.fluidFilterContainer.hasFilter()) { - this.fluidFilterContainer.getFilter() + this.fluidFilterContainer.getFluidFilter() .configureFilterTanks(tagCompound.getInteger("TransferAmount")); } } diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index 92761fb9e5b..0a484462006 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -74,7 +74,7 @@ protected void voidOverflow(final IFluidHandler sourceHandler, FluidStack sourceFluid = tankProperties.getContents(); if (this.fluidFilterContainer.hasFilter() && voidingMode == VoidingMode.VOID_OVERFLOW) { - keepAmount = this.fluidFilterContainer.getFilter() + keepAmount = this.fluidFilterContainer.getFluidFilter() .getTransferLimit(sourceFluid, getMaxTransferRate()); } if (sourceFluid == null || sourceFluid.amount == 0 || diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 33422f73310..5a70f058344 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -106,7 +106,7 @@ public ItemFilterMode getFilterMode() { @SuppressWarnings("DataFlowIssue") // this cover always has a filter public @NotNull IItemFilter getItemFilter() { - return this.itemFilterContainer.getFilter(); + return this.itemFilterContainer.getItemFilter(); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index 0464e18c6a5..a5d457dd664 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -78,10 +78,10 @@ protected int doTransferExact(IItemHandler itemHandler, IItemHandler myItemHandl while (iterator.hasNext()) { TypeItemInfo sourceInfo = sourceItemAmount.get(iterator.next()); int itemAmount = sourceInfo.totalCount; - int itemToMoveAmount = itemFilterContainer.getTransferLimit(sourceInfo.itemStack); + int itemToMoveAmount = itemFilterContainer.getTransferLimit(sourceInfo.filterSlot); // if smart item filter - if (itemFilterContainer.getFilter() instanceof SmartItemFilter) { + if (itemFilterContainer.getItemFilter() instanceof SmartItemFilter) { if (itemFilterContainer.getTransferSize() > 1 && itemToMoveAmount * 2 <= itemAmount) { // get the max we can extract from the item filter variable int maxMultiplier = Math.floorDiv(maxTransferAmount, itemToMoveAmount); @@ -132,7 +132,7 @@ protected int doKeepExact(IItemHandler itemHandler, IItemHandler myItemHandler, int itemToKeepAmount = itemFilterContainer.getTransferLimit(sourceInfo.filterSlot); // only run multiplier for smart item - if (itemFilterContainer.getFilter() instanceof SmartItemFilter) { + if (itemFilterContainer.getItemFilter() instanceof SmartItemFilter) { if (itemFilterContainer.getTransferSize() > 1 && itemToKeepAmount * 2 <= sourceInfo.totalCount) { // get the max we can keep from the item filter variable int maxMultiplier = Math.floorDiv(sourceInfo.totalCount, itemToKeepAmount); diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 6be67b1c986..c0c7b01cca6 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -53,22 +53,38 @@ public void setStackInSlot(int slot, ItemStack stack) { if (stack.isEmpty()) { setFilter(null); - } else if (FilterTypeRegistry.isFilter(stack)) { + } else if (isItemValid(stack)) { setFilter(FilterTypeRegistry.getFilterForStack(stack)); } super.setStackInSlot(slot, stack); } + @Override + public boolean isItemValid(int slot, ItemStack stack) { + return FilterTypeRegistry.isFilter(stack); + } + + public boolean isItemValid(ItemStack stack) { + return isItemValid(0, stack); + } + // todo update stack for insert and extract, though that shouldn't be called normally @Override public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { - return stack; + if (!isItemValid(stack)) return stack; + var remainder = super.insertItem(slot, stack, simulate); + setFilter(FilterTypeRegistry.getFilterForStack(stack)); + return remainder; } @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { - return ItemStack.EMPTY; + var extracted = super.extractItem(slot, amount, simulate); + if (!extracted.isEmpty()) { + setFilter(null); + } + return extracted; } public final void setFilterStack(ItemStack stack) { @@ -89,7 +105,7 @@ public final boolean hasFilter() { return currentFilter != null; } - public @Nullable IFilter getFilter() { + public final @Nullable IFilter getFilter() { return currentFilter; } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 32e393e75d4..83ecea04175 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -38,27 +38,31 @@ public boolean testFluidStack(FluidStack fluidStack) { public boolean testFluidStack(FluidStack fluidStack, boolean whitelist) { boolean result = true; if (hasFilter()) { - result = getFilter().test(fluidStack); + result = getFluidFilter().test(fluidStack); } return whitelist != result; } public boolean test(FluidStack toTest) { - return !hasFilter() || getFilter().test(toTest); + return !hasFilter() || getFluidFilter().test(toTest); } public MatchResult match(FluidStack toMatch) { if (!hasFilter()) return MatchResult.create(true, toMatch, -1); - return getFilter().match(toMatch); + return getFluidFilter().match(toMatch); } public int getTransferLimit(FluidStack stack) { - if (isBlacklistFilter()) { + if (!hasFilter() || isBlacklistFilter()) { return getTransferSize(); } - return getFilter().getTransferLimit(stack, getTransferSize()); + return getFluidFilter().getTransferLimit(stack, getTransferSize()); + } + + public final @Nullable IFluidFilter getFluidFilter() { + return (IFluidFilter) getFilter(); } /** @deprecated uses old builtin MUI */ @@ -81,11 +85,6 @@ public void initFilterUI(int y, Consumer widgetGroup) { widgetGroup.accept(new WidgetGroupFluidFilter(y, this::getFilter, this::showGlobalTransferLimitSlider)); } - @Override - public @Nullable IFluidFilter getFilter() { - return (IFluidFilter) super.getFilter(); - } - /** @deprecated uses old builtin MUI */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 3617d5b4910..2669f0c113d 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -37,25 +37,24 @@ public ItemFilterContainer(IDirtyNotifiable dirtyNotifiable) { } public boolean test(ItemStack toTest) { - return !hasFilter() || getFilter().test(toTest); + return !hasFilter() || getItemFilter().test(toTest); } public MatchResult match(ItemStack toMatch) { if (!hasFilter()) return MatchResult.create(true, toMatch, -1); - return getFilter().match(toMatch); + return getItemFilter().match(toMatch); } public int getTransferLimit(ItemStack stack) { - if (isBlacklistFilter()) { + if (!hasFilter() || isBlacklistFilter()) { return getTransferSize(); } - return getFilter().getTransferLimit(stack, getTransferSize()); + return getItemFilter().getTransferLimit(stack, getTransferSize()); } - @Override - public @Nullable IItemFilter getFilter() { + public @Nullable IItemFilter getItemFilter() { return (IItemFilter) super.getFilter(); } @@ -74,7 +73,7 @@ public void initUI(int y, Consumer widgetGroup) { @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public void initFilterUI(int y, Consumer widgetGroup) { - widgetGroup.accept(new WidgetGroupItemFilter(y, this::getFilter)); + widgetGroup.accept(new WidgetGroupItemFilter(y, this::getItemFilter)); } /** @deprecated uses old builtin MUI */ @@ -96,8 +95,8 @@ public IWidget initUI(ModularPanel main, GuiSyncManager manager) { @SuppressWarnings("DataFlowIssue") @Override public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { - getFilter().setMaxTransferSize(getMaxTransferSize()); - return getFilter().createPopupPanel(syncManager); + getItemFilter().setMaxTransferSize(getMaxTransferSize()); + return getItemFilter().createPopupPanel(syncManager); } }; manager.syncValue("filter_panel", panel); diff --git a/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java b/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java index 4e9e24cd119..7d708181760 100644 --- a/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java @@ -1,12 +1,15 @@ package gregtech.common.covers.filter; import gregtech.api.gui.widgets.AbstractWidgetGroup; +import gregtech.api.util.GTLog; import gregtech.api.util.Position; +import net.minecraft.item.ItemStack; import net.minecraft.network.PacketBuffer; import org.jetbrains.annotations.ApiStatus; +import java.io.IOException; import java.util.function.Supplier; /** @@ -16,11 +19,11 @@ @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public class WidgetGroupFluidFilter extends AbstractWidgetGroup { - private final Supplier fluidFilterSupplier; + private final Supplier fluidFilterSupplier; private final Supplier showTipSupplier; - private IFluidFilter fluidFilter; + private IFilter fluidFilter; - public WidgetGroupFluidFilter(int yPosition, Supplier fluidFilterSupplier, + public WidgetGroupFluidFilter(int yPosition, Supplier fluidFilterSupplier, Supplier showTipSupplier) { super(new Position(18 + 5, yPosition)); this.fluidFilterSupplier = fluidFilterSupplier; @@ -30,7 +33,7 @@ public WidgetGroupFluidFilter(int yPosition, Supplier fluidFilterS @Override public void detectAndSendChanges() { super.detectAndSendChanges(); - IFluidFilter newFluidFilter = fluidFilterSupplier.get(); + IFilter newFluidFilter = fluidFilterSupplier.get(); if (fluidFilter != newFluidFilter) { clearAllWidgets(); this.fluidFilter = newFluidFilter; @@ -40,8 +43,7 @@ public void detectAndSendChanges() { writeUpdateInfo(2, buffer -> { if (fluidFilter != null) { buffer.writeBoolean(true); - int filterId = FilterTypeRegistry.getIdForFluidFilter(fluidFilter); - buffer.writeVarInt(filterId); + buffer.writeItemStack(fluidFilter.getContainerStack()); } else { buffer.writeBoolean(false); } @@ -59,8 +61,14 @@ public void readUpdateInfo(int id, PacketBuffer buffer) { if (id == 2) { clearAllWidgets(); if (buffer.readBoolean()) { - int filterId = buffer.readVarInt(); - this.fluidFilter = FilterTypeRegistry.createFluidFilterById(filterId); + ItemStack stack; + try { + stack = buffer.readItemStack(); + } catch (IOException e) { + GTLog.logger.warn(e); + return; + } + this.fluidFilter = FilterTypeRegistry.getFilterForStack(stack); this.fluidFilter.initUI(this::addWidget); } } else if (id == 3) { diff --git a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java index c2de8498e5e..937d25faaee 100644 --- a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java +++ b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java @@ -74,9 +74,9 @@ private static void conveyorInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverCo rateUnit = lang("cover.robotic_arm.exact"); transferModeText(probeInfo, roboticArm.getTransferMode(), rateUnit, - filter.getTransferSize(), filter.getFilter() != null); + filter.getTransferSize(), filter.getItemFilter() != null); } - itemFilterText(probeInfo, filter.getFilter()); + itemFilterText(probeInfo, filter.getItemFilter()); } /** @@ -127,7 +127,7 @@ private static void pumpInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverPump p transferModeText(probeInfo, regulator.getTransferMode(), rateUnit, regulator .getFluidFilterContainer().getTransferSize(), filter.hasFilter() && !filter.isBlacklistFilter()); } - fluidFilterText(probeInfo, filter.getFilter()); + fluidFilterText(probeInfo, filter.getFluidFilter()); } /** @@ -183,7 +183,7 @@ private static void fluidFilterInfo(@NotNull IProbeInfo probeInfo, @NotNull Cove private static void enderFluidLinkInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverEnderFluidLink enderFluidLink) { transferRateText(probeInfo, enderFluidLink.getPumpMode(), " " + lang("cover.bucket.mode.milli_bucket_rate"), enderFluidLink.isIOEnabled() ? CoverEnderFluidLink.TRANSFER_RATE : 0); - fluidFilterText(probeInfo, enderFluidLink.getFluidFilterContainer().getFilter()); + fluidFilterText(probeInfo, enderFluidLink.getFluidFilterContainer().getFluidFilter()); if (!enderFluidLink.getColorStr().isEmpty()) { probeInfo.text( From ac0511763a66fce8ad1ec7697030c40e6af19d81 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 7 Feb 2024 22:09:38 -0700 Subject: [PATCH 221/260] fix issues with global limit slider set filter max size on setting filter fix issues with robot arm and smart filters make match result check if blacklist --- .../gregtech/common/covers/CoverRoboticArm.java | 8 +++++--- .../gregtech/common/covers/filter/BaseFilter.java | 4 ++++ .../common/covers/filter/BaseFilterContainer.java | 7 ++++--- .../java/gregtech/common/covers/filter/IFilter.java | 6 ++---- .../gregtech/common/covers/filter/IItemFilter.java | 2 +- .../covers/filter/OreDictionaryItemFilter.java | 7 +------ .../common/covers/filter/SimpleFluidFilter.java | 5 ----- .../common/covers/filter/SimpleItemFilter.java | 13 ++++++++++--- .../common/covers/filter/SmartItemFilter.java | 2 +- 9 files changed, 28 insertions(+), 26 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index a5d457dd664..8db8bffd515 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -78,10 +78,10 @@ protected int doTransferExact(IItemHandler itemHandler, IItemHandler myItemHandl while (iterator.hasNext()) { TypeItemInfo sourceInfo = sourceItemAmount.get(iterator.next()); int itemAmount = sourceInfo.totalCount; - int itemToMoveAmount = itemFilterContainer.getTransferLimit(sourceInfo.filterSlot); + int itemToMoveAmount = itemFilterContainer.getTransferLimit(sourceInfo.itemStack); - // if smart item filter - if (itemFilterContainer.getItemFilter() instanceof SmartItemFilter) { + // if smart item filter and whitelist + if (itemFilterContainer.getFilter() instanceof SmartItemFilter && !itemFilterContainer.isBlacklistFilter()) { if (itemFilterContainer.getTransferSize() > 1 && itemToMoveAmount * 2 <= itemAmount) { // get the max we can extract from the item filter variable int maxMultiplier = Math.floorDiv(maxTransferAmount, itemToMoveAmount); @@ -232,6 +232,7 @@ public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { super.readInitialSyncData(packetBuffer); this.transferMode = TransferMode.VALUES[packetBuffer.readByte()]; + this.itemFilterContainer.setMaxTransferSize(this.transferMode.maxStackSize); } @Override @@ -244,5 +245,6 @@ public void writeToNBT(NBTTagCompound tagCompound) { public void readFromNBT(NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); this.transferMode = TransferMode.VALUES[tagCompound.getInteger("TransferMode")]; + this.itemFilterContainer.setMaxTransferSize(this.transferMode.maxStackSize); } } diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilter.java b/src/main/java/gregtech/common/covers/filter/BaseFilter.java index 25820cb8a1f..0bfb9922918 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilter.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -36,6 +36,10 @@ public final void setMaxTransferSize(int maxStackSize) { this.filterReader.setMaxTransferRate(maxStackSize); } + public boolean showGlobalTransferLimitSlider() { + return isBlacklistFilter(); + } + public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { this.dirtyNotifiable = dirtyNotifiable; this.filterReader.setDirtyNotifiable(dirtyNotifiable); diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index c0c7b01cca6..4376b1cb8d7 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -92,7 +92,7 @@ public final void setFilterStack(ItemStack stack) { } public int getMaxTransferSize() { - return hasFilter() ? currentFilter.getMaxTransferSize() : this.maxTransferSize; + return !showGlobalTransferLimitSlider() ? currentFilter.getMaxTransferSize() : this.maxTransferSize; } public void setMaxTransferSize(int maxTransferSize) { @@ -112,7 +112,8 @@ public final boolean hasFilter() { public final void setFilter(@Nullable IFilter newFilter) { this.currentFilter = newFilter; if (hasFilter()) { - this.currentFilter.setDirtyNotifiable(dirtyNotifiable); + this.currentFilter.setDirtyNotifiable(this.dirtyNotifiable); + this.currentFilter.setMaxTransferSize(this.maxTransferSize); } if (onFilterInstanceChange != null) { this.onFilterInstanceChange.run(); @@ -120,7 +121,7 @@ public final void setFilter(@Nullable IFilter newFilter) { } public boolean showGlobalTransferLimitSlider() { - return getMaxTransferSize() > 0 && + return this.maxTransferSize > 0 && (isBlacklistFilter() || !hasFilter() || getFilter().showGlobalTransferLimitSlider()); } diff --git a/src/main/java/gregtech/common/covers/filter/IFilter.java b/src/main/java/gregtech/common/covers/filter/IFilter.java index 6acde756be6..9c6d40d1c0c 100644 --- a/src/main/java/gregtech/common/covers/filter/IFilter.java +++ b/src/main/java/gregtech/common/covers/filter/IFilter.java @@ -47,12 +47,10 @@ public interface IFilter { void setMaxTransferSize(int maxTransferSize); - default boolean showGlobalTransferLimitSlider() { - return false; - } + boolean showGlobalTransferLimitSlider(); default int getTransferLimit(int slot, int transferSize) { - return 0; + return transferSize; } boolean isBlacklistFilter(); diff --git a/src/main/java/gregtech/common/covers/filter/IItemFilter.java b/src/main/java/gregtech/common/covers/filter/IItemFilter.java index 7e0b640dec5..560a36da26c 100644 --- a/src/main/java/gregtech/common/covers/filter/IItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/IItemFilter.java @@ -9,7 +9,7 @@ public interface IItemFilter extends IFilter { boolean test(ItemStack toTest); default int getTransferLimit(ItemStack stack, int transferSize) { - return 0; + return transferSize; } default MatchResult createResult(boolean matched, ItemStack fluidStack, int index) { diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 0e917657a0a..1fa125b5565 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -243,7 +243,7 @@ public MatchResult match(ItemStack itemStack) { // "wtf is this system?? i can put any non null object here and it i will work??? $arch" // not anymore :thanosdaddy: -ghzdude var match = matchesItemStack(itemStack); - return createResult(match, match ? itemStack.copy() : ItemStack.EMPTY, -1); + return createResult(match != isBlacklistFilter(), match ? itemStack.copy() : ItemStack.EMPTY, -1); } @Override @@ -297,11 +297,6 @@ public boolean matchesItemStack(@NotNull ItemStack itemStack) { return matches; } - @Override - public int getTransferLimit(int matchSlot, int globalTransferLimit) { - return globalTransferLimit; - } - @Override public boolean showGlobalTransferLimitSlider() { return true; diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index c2fa20adadc..f3c266a0aa7 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -96,11 +96,6 @@ public void initUI(Consumer widgetGroup) { } } - @Override - public boolean showGlobalTransferLimitSlider() { - return isBlacklistFilter() && getMaxTransferSize() > 0; - } - @Override public int getTransferLimit(FluidStack fluidStack, int transferSize) { int limit = 0; diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index d00275d76d8..ff3e1349041 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -43,7 +43,7 @@ public SimpleItemFilter(ItemStack stack) { public MatchResult match(ItemStack itemStack) { int matchedSlot = itemFilterMatch(filterReader, filterReader.isIgnoreDamage(), filterReader.isIgnoreNBT(), itemStack); - return createResult(matchedSlot != -1, filterReader.getStackInSlot(matchedSlot), matchedSlot); + return createResult(matchedSlot != -1 && !isBlacklistFilter(), filterReader.getStackInSlot(matchedSlot), matchedSlot); } @Override @@ -54,9 +54,16 @@ public boolean test(ItemStack toTest) { } @Override - public int getTransferLimit(int matchSlot, int globalTransferLimit) { + public int getTransferLimit(int matchSlot, int transferSize) { ItemStack stackInFilterSlot = filterReader.getStackInSlot(matchSlot); - return Math.min(stackInFilterSlot.getCount(), globalTransferLimit); + return Math.min(stackInFilterSlot.getCount(), transferSize); + } + + @Override + public int getTransferLimit(ItemStack stack, int transferSize) { + int matchedSlot = itemFilterMatch(filterReader, filterReader.isIgnoreDamage(), filterReader.isIgnoreNBT(), + stack); + return getTransferLimit(matchedSlot, transferSize); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 4d6ea3ea312..da2afbe0fb4 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -72,7 +72,7 @@ public int getTransferLimit(ItemStack stack, int globalTransferLimit) { public MatchResult match(ItemStack itemStack) { var stack = itemStack.copy(); stack.setCount(getTransferLimit(itemStack, Integer.MAX_VALUE)); - return createResult(stack.getCount() > 0, stack, this.getFilteringMode().ordinal()); + return createResult(stack.getCount() > 0 != isBlacklistFilter(), stack, this.getFilteringMode().ordinal()); } @Override From f4ab6ea8139372d1395799dd0f84b766a6966954 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 7 Feb 2024 22:10:10 -0700 Subject: [PATCH 222/260] spotless --- src/main/java/gregtech/common/covers/CoverRoboticArm.java | 3 ++- .../java/gregtech/common/covers/filter/SimpleItemFilter.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index 8db8bffd515..f7d3c198eb6 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -81,7 +81,8 @@ protected int doTransferExact(IItemHandler itemHandler, IItemHandler myItemHandl int itemToMoveAmount = itemFilterContainer.getTransferLimit(sourceInfo.itemStack); // if smart item filter and whitelist - if (itemFilterContainer.getFilter() instanceof SmartItemFilter && !itemFilterContainer.isBlacklistFilter()) { + if (itemFilterContainer.getFilter() instanceof SmartItemFilter && + !itemFilterContainer.isBlacklistFilter()) { if (itemFilterContainer.getTransferSize() > 1 && itemToMoveAmount * 2 <= itemAmount) { // get the max we can extract from the item filter variable int maxMultiplier = Math.floorDiv(maxTransferAmount, itemToMoveAmount); diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index ff3e1349041..912628bb4ec 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -43,7 +43,8 @@ public SimpleItemFilter(ItemStack stack) { public MatchResult match(ItemStack itemStack) { int matchedSlot = itemFilterMatch(filterReader, filterReader.isIgnoreDamage(), filterReader.isIgnoreNBT(), itemStack); - return createResult(matchedSlot != -1 && !isBlacklistFilter(), filterReader.getStackInSlot(matchedSlot), matchedSlot); + return createResult(matchedSlot != -1 && !isBlacklistFilter(), filterReader.getStackInSlot(matchedSlot), + matchedSlot); } @Override From 099e5054e44ecf68e14633beda04a8d8f3823468 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 9 Feb 2024 20:45:38 -0700 Subject: [PATCH 223/260] recompile oredict filter on instantiation show count for values 1-64 --- .../gregtech/common/covers/filter/OreDictionaryItemFilter.java | 1 + .../java/gregtech/common/covers/filter/SimpleItemFilter.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 1fa125b5565..a6c00caec73 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -49,6 +49,7 @@ public class OreDictionaryItemFilter extends BaseFilter implements IItemFilter { public OreDictionaryItemFilter(ItemStack stack) { this.filterReader = new OreDictFilterReader(stack); setFilterReader(this.filterReader); + recompile(); } @NotNull diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 912628bb4ec..d2add5c02c2 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -115,7 +115,7 @@ public void initUI(Consumer widgetGroup) { tooltip.addLine(IKey.lang("cover.item_filter.config_amount")); int count = this.filterReader.getTagAt(index) .getInteger(SimpleItemFilterReader.COUNT); - if (count > 64) + if (count > 0) tooltip.addLine( IKey.format("Count: %s", TextFormattingUtil.formatNumbers(count))); }) From 8649dc1f3bf7b87e18a5ed9787b72b99a3e41ae0 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 10 Feb 2024 11:46:52 -0700 Subject: [PATCH 224/260] move method from iface into BaseFilter --- .../common/covers/filter/BaseFilter.java | 18 ++++++++++++++++++ .../gregtech/common/covers/filter/IFilter.java | 11 +---------- 2 files changed, 19 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 0bfb9922918..c761d20b071 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilter.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -1,5 +1,12 @@ package gregtech.common.covers.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.widgets.CycleButtonWidget; + +import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.IDirtyNotifiable; import gregtech.common.covers.filter.readers.BaseFilterReader; @@ -28,6 +35,17 @@ public final boolean isBlacklistFilter() { return filterReader.isBlacklistFilter(); } + public IWidget createBlacklistUI() { + return new ParentWidget<>().coverChildren() + .child(new CycleButtonWidget() + .value(new BooleanSyncValue( + this::isBlacklistFilter, + this::setBlacklistFilter)) + .textureGetter(state -> GTGuiTextures.BUTTON_BLACKLIST[state]) + .addTooltip(0, IKey.lang("cover.filter.blacklist.disabled")) + .addTooltip(1, IKey.lang("cover.filter.blacklist.enabled"))); + } + public final int getMaxTransferSize() { return this.filterReader.getMaxTransferRate(); } diff --git a/src/main/java/gregtech/common/covers/filter/IFilter.java b/src/main/java/gregtech/common/covers/filter/IFilter.java index 9c6d40d1c0c..c08103f2802 100644 --- a/src/main/java/gregtech/common/covers/filter/IFilter.java +++ b/src/main/java/gregtech/common/covers/filter/IFilter.java @@ -57,16 +57,7 @@ default int getTransferLimit(int slot, int transferSize) { void setBlacklistFilter(boolean blacklistFilter); - default IWidget createBlacklistUI() { - return new ParentWidget<>().coverChildren() - .child(new CycleButtonWidget() - .value(new BooleanSyncValue( - this::isBlacklistFilter, - this::setBlacklistFilter)) - .textureGetter(state -> GTGuiTextures.BUTTON_BLACKLIST[state]) - .addTooltip(0, IKey.lang("cover.filter.blacklist.disabled")) - .addTooltip(1, IKey.lang("cover.filter.blacklist.enabled"))); - } + IWidget createBlacklistUI(); /** Read legacy NBT here */ void readFromNBT(NBTTagCompound tagCompound); From d6f18a84e09d66267dd0e0c7e36e2aa254889536 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 10 Feb 2024 22:28:02 -0700 Subject: [PATCH 225/260] :waaaaah: --- .../gregtech/common/covers/filter/BaseFilter.java | 12 ++++++------ .../java/gregtech/common/covers/filter/IFilter.java | 5 ----- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilter.java b/src/main/java/gregtech/common/covers/filter/BaseFilter.java index c761d20b071..be066bb286c 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilter.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -1,11 +1,5 @@ package gregtech.common.covers.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.widgets.CycleButtonWidget; - import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.IDirtyNotifiable; import gregtech.common.covers.filter.readers.BaseFilterReader; @@ -13,6 +7,12 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +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.widgets.CycleButtonWidget; + public abstract class BaseFilter implements IFilter { private IDirtyNotifiable dirtyNotifiable; diff --git a/src/main/java/gregtech/common/covers/filter/IFilter.java b/src/main/java/gregtech/common/covers/filter/IFilter.java index c08103f2802..f947baea7ed 100644 --- a/src/main/java/gregtech/common/covers/filter/IFilter.java +++ b/src/main/java/gregtech/common/covers/filter/IFilter.java @@ -1,19 +1,14 @@ package gregtech.common.covers.filter; -import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.api.widget.IWidget; import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.value.sync.BooleanSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; -import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widget.Widget; -import com.cleanroommc.modularui.widgets.CycleButtonWidget; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; From 7563d6d3997dda026ae70a9cb88d4c360ce8a2d0 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 10 Feb 2024 22:50:36 -0700 Subject: [PATCH 226/260] add filter mode overlays --- src/main/java/gregtech/api/mui/GTGuiTextures.java | 4 ++++ .../gregtech/common/covers/CoverFluidFilter.java | 3 ++- .../gregtech/common/covers/CoverItemFilter.java | 3 ++- .../textures/gui/overlay/filter_mode_overlay.png | Bin 0 -> 230 bytes 4 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/assets/gregtech/textures/gui/overlay/filter_mode_overlay.png diff --git a/src/main/java/gregtech/api/mui/GTGuiTextures.java b/src/main/java/gregtech/api/mui/GTGuiTextures.java index ae84af4d4b3..4e5ad8a979a 100644 --- a/src/main/java/gregtech/api/mui/GTGuiTextures.java +++ b/src/main/java/gregtech/api/mui/GTGuiTextures.java @@ -196,6 +196,10 @@ public static class IDs { "textures/gui/overlay/voiding_mode_overlay.png", 16, 32, 16, 16, true); + public static final UITexture[] FILTER_MODE_OVERLAY = slice( + "textures/gui/overlay/filter_mode_overlay.png", + 16, 48, 16, 16, true); + // todo bronze/steel/primitive fluid slots? // SLOT OVERLAYS diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 3e2d1f8b0f8..ad13e80b14a 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -5,6 +5,7 @@ import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverWithUI; import gregtech.api.cover.CoverableView; +import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.GTLog; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; @@ -148,7 +149,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .child(new EnumRowBuilder<>(FluidFilterMode.class) .value(filteringMode) .lang("Filter Mode") - // .overlay() todo fluid filter overlays + .overlay(16, GTGuiTextures.FILTER_MODE_OVERLAY) .build()) .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() .height(1).widthRel(0.95f).margin(0, 4)) diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 5a70f058344..91cf8a03fdb 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -5,6 +5,7 @@ import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverWithUI; import gregtech.api.cover.CoverableView; +import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.GTLog; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; @@ -150,7 +151,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .child(new EnumRowBuilder<>(ItemFilterMode.class) .value(filteringMode) .lang("Filter Mode") - // .overlay() todo item filter overlays + .overlay(16, GTGuiTextures.FILTER_MODE_OVERLAY) .build()) .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() .height(1).widthRel(0.95f).margin(0, 4)) diff --git a/src/main/resources/assets/gregtech/textures/gui/overlay/filter_mode_overlay.png b/src/main/resources/assets/gregtech/textures/gui/overlay/filter_mode_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..0f9c95e8b68cf28a146da948f4ce681b99a1b120 GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^0zhoQ!3HEH;(vt$DaPU;cPEB*=VV?2ISV{p978-h z--bH!9Z=vnytnfFgY$0|aW2R^uxMttuZ`p?2Tg|ktWQ68EbelNPMCZ^T8G1{z)G=_ zW75~Ba)qJI1{{qy{LjP++)paaxVK#)=!4h?zCy*^8jj>!H>9k#^O Date: Sat, 10 Feb 2024 22:52:48 -0700 Subject: [PATCH 227/260] add lang to item/fluid filters as covers --- src/main/java/gregtech/common/covers/CoverFluidFilter.java | 2 +- src/main/java/gregtech/common/covers/CoverItemFilter.java | 2 +- src/main/resources/assets/gregtech/lang/en_us.lang | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index ad13e80b14a..d7a9c419ca8 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -148,7 +148,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .child(new Column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight() .child(new EnumRowBuilder<>(FluidFilterMode.class) .value(filteringMode) - .lang("Filter Mode") + .lang("cover.filter.mode.title") .overlay(16, GTGuiTextures.FILTER_MODE_OVERLAY) .build()) .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 91cf8a03fdb..2620b7f2a72 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -150,7 +150,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .child(new Column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight() .child(new EnumRowBuilder<>(ItemFilterMode.class) .value(filteringMode) - .lang("Filter Mode") + .lang("cover.filter.mode.title") .overlay(16, GTGuiTextures.FILTER_MODE_OVERLAY) .build()) .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 77bbf6912e5..ccff57db923 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -1245,6 +1245,7 @@ cover.fluid_filter.mode.filter_drain=Filter Drain cover.fluid_filter.mode.filter_both=Filter Fill & Drain cover.item_filter.title=Item Filter +cover.filter.mode.title=Filter Mode cover.filter.mode.filter_insert=Filter Insert cover.filter.mode.filter_extract=Filter Extract cover.filter.mode.filter_both=Filter Insert/Extract From 11e8fb191405014295f3e38d9902cb30abe9da1d Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 11 Feb 2024 13:58:17 -0700 Subject: [PATCH 228/260] address reviews --- .../common/covers/CoverFluidFilter.java | 3 ++- .../common/covers/CoverItemFilter.java | 3 ++- .../covers/filter/BaseFilterContainer.java | 19 +++++++++++-------- .../filter/OreDictionaryItemFilter.java | 4 +++- .../behaviors/filter/BaseFilterUIManager.java | 10 +++++++++- .../orefilter/ItemOreFilterTestSlot.java | 7 ++++++- .../widget/orefilter/OreFilterTestSlot.java | 2 +- .../resources/assets/gregtech/lang/en_us.lang | 9 +++++---- 8 files changed, 39 insertions(+), 18 deletions(-) rename src/main/java/gregtech/common/{gui => mui}/widget/orefilter/ItemOreFilterTestSlot.java (89%) rename src/main/java/gregtech/common/{gui => mui}/widget/orefilter/OreFilterTestSlot.java (99%) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index d7a9c419ca8..f54ac588d31 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -9,6 +9,7 @@ import gregtech.api.util.GTLog; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; +import gregtech.client.utils.TooltipHelper; import gregtech.common.covers.filter.FluidFilterContainer; import gregtech.common.covers.filter.IFluidFilter; @@ -77,7 +78,7 @@ public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFaci @Override public @NotNull ItemStack getPickItem() { - if (GuiScreen.isCtrlKeyDown()) + if (TooltipHelper.isCtrlDown()) return getCoverableView().getStackForm(); return this.fluidFilterContainer.getFilterStack(); diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 2620b7f2a72..e749f6a6c6f 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -9,6 +9,7 @@ import gregtech.api.util.GTLog; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; +import gregtech.client.utils.TooltipHelper; import gregtech.common.covers.filter.IItemFilter; import gregtech.common.covers.filter.ItemFilterContainer; @@ -70,7 +71,7 @@ public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFaci @Override public @NotNull ItemStack getPickItem() { - if (GuiScreen.isCtrlKeyDown()) + if (TooltipHelper.isCtrlDown()) return getCoverableView().getStackForm(); return this.itemFilterContainer.getFilterStack(); diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 4376b1cb8d7..35a598e828f 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -36,6 +36,9 @@ public int getSlotLimit(int slot) { public void onFilterInstanceChange() { dirtyNotifiable.markAsDirty(); + if (onFilterInstanceChange != null) { + onFilterInstanceChange.run(); + } } public void setOnFilterInstanceChange(@Nullable Runnable onFilterInstanceChange) { @@ -47,7 +50,7 @@ public void setOnFilterInstanceChange(@Nullable Runnable onFilterInstanceChange) } @Override - public void setStackInSlot(int slot, ItemStack stack) { + public void setStackInSlot(int slot, @NotNull ItemStack stack) { if (ItemStack.areItemStacksEqual(stack, getFilterStack())) return; @@ -61,7 +64,7 @@ public void setStackInSlot(int slot, ItemStack stack) { } @Override - public boolean isItemValid(int slot, ItemStack stack) { + public boolean isItemValid(int slot, @NotNull ItemStack stack) { return FilterTypeRegistry.isFilter(stack); } @@ -71,15 +74,15 @@ public boolean isItemValid(ItemStack stack) { // todo update stack for insert and extract, though that shouldn't be called normally @Override - public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { + public @NotNull ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate) { if (!isItemValid(stack)) return stack; var remainder = super.insertItem(slot, stack, simulate); - setFilter(FilterTypeRegistry.getFilterForStack(stack)); + if (!simulate) setFilter(FilterTypeRegistry.getFilterForStack(stack)); return remainder; } @Override - public ItemStack extractItem(int slot, int amount, boolean simulate) { + public @NotNull ItemStack extractItem(int slot, int amount, boolean simulate) { var extracted = super.extractItem(slot, amount, simulate); if (!extracted.isEmpty()) { setFilter(null); @@ -92,7 +95,7 @@ public final void setFilterStack(ItemStack stack) { } public int getMaxTransferSize() { - return !showGlobalTransferLimitSlider() ? currentFilter.getMaxTransferSize() : this.maxTransferSize; + return !showGlobalTransferLimitSlider() && hasFilter() ? currentFilter.getMaxTransferSize() : this.maxTransferSize; } public void setMaxTransferSize(int maxTransferSize) { @@ -122,7 +125,7 @@ public final void setFilter(@Nullable IFilter newFilter) { public boolean showGlobalTransferLimitSlider() { return this.maxTransferSize > 0 && - (isBlacklistFilter() || !hasFilter() || getFilter().showGlobalTransferLimitSlider()); + (isBlacklistFilter() || (hasFilter() && getFilter().showGlobalTransferLimitSlider())); } public void setBlacklistFilter(boolean blacklistFilter) { @@ -142,7 +145,7 @@ public int getTransferSize() { } public int getTransferLimit(int slotIndex) { - if (isBlacklistFilter()) { + if (isBlacklistFilter() || !hasFilter()) { return getTransferSize(); } return this.currentFilter.getTransferLimit(slotIndex, getTransferSize()); diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index a6c00caec73..130a51b5147 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -11,7 +11,7 @@ import gregtech.api.util.oreglob.OreGlobCompileResult; import gregtech.common.covers.filter.readers.OreDictFilterReader; import gregtech.common.gui.widget.HighlightedTextField; -import gregtech.common.gui.widget.orefilter.OreFilterTestSlot; +import gregtech.common.mui.widget.orefilter.OreFilterTestSlot; import net.minecraft.client.resources.I18n; import net.minecraft.item.Item; @@ -136,6 +136,7 @@ public void initUI(Consumer widgetGroup) {} .selectedBackground(GTGuiTextures.BUTTON_CASE_SENSITIVE[0]) .selectedHoverBackground(GTGuiTextures.BUTTON_CASE_SENSITIVE[0]) .marginRight(2) + .addTooltipLine(IKey.lang("cover.ore_dictionary_filter.case_sensitive", caseSensitive.getStringValue())) .tooltip(tooltip -> tooltip.setAutoUpdate(true))) .child(new ToggleButton() .size(18).value(matchAll) @@ -143,6 +144,7 @@ public void initUI(Consumer widgetGroup) {} .hoverBackground(GTGuiTextures.BUTTON_MATCH_ALL[1]) .selectedHoverBackground(GTGuiTextures.BUTTON_MATCH_ALL[0]) .selectedBackground(GTGuiTextures.BUTTON_MATCH_ALL[0]) + .addTooltipLine(IKey.lang("cover.ore_dictionary_filter.match_all", matchAll.getStringValue())) .tooltip(tooltip -> tooltip.setAutoUpdate(true)) .marginRight(2)) .child(createBlacklistUI())); 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 b648e3c28c8..2d681da2fa6 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java @@ -7,6 +7,7 @@ import gregtech.api.mui.GTGuis; import gregtech.api.mui.factory.MetaItemGuiFactory; +import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; @@ -19,12 +20,14 @@ import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import java.util.List; + public abstract class BaseFilterUIManager implements IItemBehaviour, ItemUIFactory { @Override public final ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { ItemStack heldItem = player.getHeldItem(hand); - if (!world.isRemote && !Interactable.hasShiftDown()) { + if (!world.isRemote && !player.isSneaking()) { MetaItemGuiFactory.open(player, hand); } if (player.isSneaking() && heldItem.hasTagCompound()) { @@ -45,4 +48,9 @@ protected final ModularPanel createBasePanel(ItemStack stack) { public GTGuiTheme getUITheme() { return GTGuiTheme.COVER; } + + @Override + public void addInformation(ItemStack itemStack, List lines) { + lines.add(I18n.format("behaviour.filter_ui_manager")); + } } diff --git a/src/main/java/gregtech/common/gui/widget/orefilter/ItemOreFilterTestSlot.java b/src/main/java/gregtech/common/mui/widget/orefilter/ItemOreFilterTestSlot.java similarity index 89% rename from src/main/java/gregtech/common/gui/widget/orefilter/ItemOreFilterTestSlot.java rename to src/main/java/gregtech/common/mui/widget/orefilter/ItemOreFilterTestSlot.java index b2706f21801..5576b7de0ec 100644 --- a/src/main/java/gregtech/common/gui/widget/orefilter/ItemOreFilterTestSlot.java +++ b/src/main/java/gregtech/common/mui/widget/orefilter/ItemOreFilterTestSlot.java @@ -1,4 +1,4 @@ -package gregtech.common.gui.widget.orefilter; +package gregtech.common.mui.widget.orefilter; import gregtech.api.util.oreglob.OreGlob; @@ -38,4 +38,9 @@ public void putStack(ItemStack stack) { this.parent.updatePreview(); } } + + @Override + public int getSlotStackLimit() { + return 1; + } } diff --git a/src/main/java/gregtech/common/gui/widget/orefilter/OreFilterTestSlot.java b/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java similarity index 99% rename from src/main/java/gregtech/common/gui/widget/orefilter/OreFilterTestSlot.java rename to src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java index eb732d31e01..92888e74ec5 100644 --- a/src/main/java/gregtech/common/gui/widget/orefilter/OreFilterTestSlot.java +++ b/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java @@ -1,4 +1,4 @@ -package gregtech.common.gui.widget.orefilter; +package gregtech.common.mui.widget.orefilter; import gregtech.api.unification.OreDictUnifier; import gregtech.api.util.function.BooleanConsumer; diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index ccff57db923..d1fa4504037 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -815,13 +815,14 @@ metaitem.gravistar.name=Gravi Star metaitem.gravistar.tooltip=Ultimate Nether Star metaitem.item_filter.name=Item Filter -metaitem.item_filter.tooltip=Filters §fItem§7 I/O as §fCover§7./n§fRight-Click§7 to configure, §fShift Right-Click§7 to clear configuration/nCan be used as a §fConveyor Module§7 and §fRobotic Arm§7 upgrade. +metaitem.item_filter.tooltip=Filters §fItem§7 I/O as §fCover§7./nCan be used as a §fConveyor Module§7 and §fRobotic Arm§7 upgrade. metaitem.ore_dictionary_filter.name=Ore Dictionary Filter -metaitem.ore_dictionary_filter.tooltip=Filters §fItem§7 I/O with §fOre Dictionary§7 as §fCover§7./n§fRight-Click§7 to configure, §fShift Right-Click§7 to clear configuration/nCan be used as a §fConveyor Module§7 and §fRobotic Arm§7 upgrade. +metaitem.ore_dictionary_filter.tooltip=Filters §fItem§7 I/O with §fOre Dictionary§7 as §fCover§7./nCan be used as a §fConveyor Module§7 and §fRobotic Arm§7 upgrade. metaitem.fluid_filter.name=Fluid Filter -metaitem.fluid_filter.tooltip=Filters §fFluid§7 I/O as §fCover§7./n§fRight-Click§7 to configure, §fShift Right-Click§7 to clear configuration/nCan be used as an §fElectric Pump§7 and §fFluid Regulator§7 upgrade. +metaitem.fluid_filter.tooltip=Filters §fFluid§7 I/O as §fCover§7./nCan be used as an §fElectric Pump§7 and §fFluid Regulator§7 upgrade. metaitem.smart_item_filter.name=Smart Item Filter -metaitem.smart_item_filter.tooltip=Filters §fItem§7 I/O with §fMachine Recipes§7 as §fCover§7./n§fRight-Click§7 to configure, §fShift Right-Click§7 to clear configuration/nCan be used as a §fConveyor Module§7 and §fRobotic Arm§7 upgrade. +metaitem.smart_item_filter.tooltip=Filters §fItem§7 I/O with §fMachine Recipes§7 as §fCover§7./nCan be used as a §fConveyor Module§7 and §fRobotic Arm§7 upgrade. +behaviour.filter_ui_manager=§fRight-Click§7 to configure, §fShift Right-Click§7 to clear configuration metaitem.cover.controller.name=Machine Controller metaitem.cover.controller.tooltip=Turns Machines §fON/OFF§7 as §fCover§7. From d3100d7f9eeaaa163ed947f1de1e7cb139bc5574 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 11 Feb 2024 13:58:52 -0700 Subject: [PATCH 229/260] sbobless --- src/main/java/gregtech/common/covers/CoverFluidFilter.java | 1 - src/main/java/gregtech/common/covers/CoverItemFilter.java | 1 - .../gregtech/common/covers/filter/BaseFilterContainer.java | 3 ++- .../common/covers/filter/OreDictionaryItemFilter.java | 6 ++++-- .../common/items/behaviors/filter/BaseFilterUIManager.java | 1 - 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index f54ac588d31..c5743bf2994 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -13,7 +13,6 @@ import gregtech.common.covers.filter.FluidFilterContainer; import gregtech.common.covers.filter.IFluidFilter; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index e749f6a6c6f..e5af142842c 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -13,7 +13,6 @@ import gregtech.common.covers.filter.IItemFilter; import gregtech.common.covers.filter.ItemFilterContainer; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; 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 35a598e828f..722e9ad99ea 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -95,7 +95,8 @@ public final void setFilterStack(ItemStack stack) { } public int getMaxTransferSize() { - return !showGlobalTransferLimitSlider() && hasFilter() ? currentFilter.getMaxTransferSize() : this.maxTransferSize; + return !showGlobalTransferLimitSlider() && hasFilter() ? currentFilter.getMaxTransferSize() : + this.maxTransferSize; } public void setMaxTransferSize(int maxTransferSize) { diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 130a51b5147..aa865ce0eab 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -136,7 +136,8 @@ public void initUI(Consumer widgetGroup) {} .selectedBackground(GTGuiTextures.BUTTON_CASE_SENSITIVE[0]) .selectedHoverBackground(GTGuiTextures.BUTTON_CASE_SENSITIVE[0]) .marginRight(2) - .addTooltipLine(IKey.lang("cover.ore_dictionary_filter.case_sensitive", caseSensitive.getStringValue())) + .addTooltipLine(IKey.lang("cover.ore_dictionary_filter.case_sensitive", + caseSensitive.getStringValue())) .tooltip(tooltip -> tooltip.setAutoUpdate(true))) .child(new ToggleButton() .size(18).value(matchAll) @@ -144,7 +145,8 @@ public void initUI(Consumer widgetGroup) {} .hoverBackground(GTGuiTextures.BUTTON_MATCH_ALL[1]) .selectedHoverBackground(GTGuiTextures.BUTTON_MATCH_ALL[0]) .selectedBackground(GTGuiTextures.BUTTON_MATCH_ALL[0]) - .addTooltipLine(IKey.lang("cover.ore_dictionary_filter.match_all", matchAll.getStringValue())) + .addTooltipLine( + IKey.lang("cover.ore_dictionary_filter.match_all", matchAll.getStringValue())) .tooltip(tooltip -> tooltip.setAutoUpdate(true)) .marginRight(2)) .child(createBlacklistUI())); 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 2d681da2fa6..64fa36e7118 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/BaseFilterUIManager.java @@ -15,7 +15,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.world.World; -import com.cleanroommc.modularui.api.widget.Interactable; import com.cleanroommc.modularui.factory.HandGuiData; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; From 85e7dfc4cc26830f7e9efe0ccf9896b019848cb5 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 11 Feb 2024 14:37:05 -0700 Subject: [PATCH 230/260] use cycle button widget instead of toggle fixes issue with tooltip not updating --- .../filter/OreDictionaryItemFilter.java | 32 ++++++++----------- 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index aa865ce0eab..3ea7ae3bcf2 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -27,8 +27,8 @@ import com.cleanroommc.modularui.value.sync.GuiSyncManager; 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.ToggleButton; import com.cleanroommc.modularui.widgets.layout.Column; import com.cleanroommc.modularui.widgets.layout.Row; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; @@ -129,26 +129,22 @@ public void initUI(Consumer widgetGroup) {} return slot; }) .build().marginRight(2)) - .child(new ToggleButton() + .child(new CycleButtonWidget() .size(18).value(caseSensitive) - .background(GTGuiTextures.BUTTON_CASE_SENSITIVE[1]) - .hoverBackground(GTGuiTextures.BUTTON_CASE_SENSITIVE[1]) - .selectedBackground(GTGuiTextures.BUTTON_CASE_SENSITIVE[0]) - .selectedHoverBackground(GTGuiTextures.BUTTON_CASE_SENSITIVE[0]) .marginRight(2) - .addTooltipLine(IKey.lang("cover.ore_dictionary_filter.case_sensitive", - caseSensitive.getStringValue())) - .tooltip(tooltip -> tooltip.setAutoUpdate(true))) - .child(new ToggleButton() + .textureGetter(state -> GTGuiTextures.BUTTON_CASE_SENSITIVE[state]) + .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) - .background(GTGuiTextures.BUTTON_MATCH_ALL[1]) - .hoverBackground(GTGuiTextures.BUTTON_MATCH_ALL[1]) - .selectedHoverBackground(GTGuiTextures.BUTTON_MATCH_ALL[0]) - .selectedBackground(GTGuiTextures.BUTTON_MATCH_ALL[0]) - .addTooltipLine( - IKey.lang("cover.ore_dictionary_filter.match_all", matchAll.getStringValue())) - .tooltip(tooltip -> tooltip.setAutoUpdate(true)) - .marginRight(2)) + .marginRight(2) + .textureGetter(state -> GTGuiTextures.BUTTON_MATCH_ALL[state]) + .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())); } From 924ae73615707776e20646163de445d8fcf67ea1 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 11 Feb 2024 15:36:12 -0700 Subject: [PATCH 231/260] also do item stack limit as 1 --- .../common/mui/widget/orefilter/ItemOreFilterTestSlot.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/gregtech/common/mui/widget/orefilter/ItemOreFilterTestSlot.java b/src/main/java/gregtech/common/mui/widget/orefilter/ItemOreFilterTestSlot.java index 5576b7de0ec..52b9a55c408 100644 --- a/src/main/java/gregtech/common/mui/widget/orefilter/ItemOreFilterTestSlot.java +++ b/src/main/java/gregtech/common/mui/widget/orefilter/ItemOreFilterTestSlot.java @@ -6,6 +6,7 @@ import net.minecraftforge.items.ItemStackHandler; import com.cleanroommc.modularui.widgets.slot.ModularSlot; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class ItemOreFilterTestSlot extends ModularSlot { @@ -43,4 +44,9 @@ public void putStack(ItemStack stack) { public int getSlotStackLimit() { return 1; } + + @Override + public int getItemStackLimit(@NotNull ItemStack stack) { + return 1; + } } From da3835c7ab76420d3358da23592bf05fe09fcd0b Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 11 Feb 2024 15:54:40 -0700 Subject: [PATCH 232/260] internal slot does not need glob --- .../mui/widget/orefilter/ItemOreFilterTestSlot.java | 10 ---------- .../common/mui/widget/orefilter/OreFilterTestSlot.java | 2 -- 2 files changed, 12 deletions(-) diff --git a/src/main/java/gregtech/common/mui/widget/orefilter/ItemOreFilterTestSlot.java b/src/main/java/gregtech/common/mui/widget/orefilter/ItemOreFilterTestSlot.java index 52b9a55c408..cfb3d897d1f 100644 --- a/src/main/java/gregtech/common/mui/widget/orefilter/ItemOreFilterTestSlot.java +++ b/src/main/java/gregtech/common/mui/widget/orefilter/ItemOreFilterTestSlot.java @@ -1,20 +1,15 @@ package gregtech.common.mui.widget.orefilter; -import gregtech.api.util.oreglob.OreGlob; - import net.minecraft.item.ItemStack; import net.minecraftforge.items.ItemStackHandler; import com.cleanroommc.modularui.widgets.slot.ModularSlot; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public class ItemOreFilterTestSlot extends ModularSlot { OreFilterTestSlot parent; - OreGlob glob; - public ItemOreFilterTestSlot() { super(new ItemStackHandler(1), 0, true); } @@ -23,11 +18,6 @@ void setParent(OreFilterTestSlot parent) { this.parent = parent; } - public void setGlob(@Nullable OreGlob glob) { - if (this.glob == glob) return; - this.glob = glob; - } - @Override public void putStack(ItemStack stack) { ItemStack testStack = getStack(); diff --git a/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java b/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java index 92888e74ec5..86055111977 100644 --- a/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java +++ b/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java @@ -36,7 +36,6 @@ public class OreFilterTestSlot extends ItemSlot { public OreFilterTestSlot() { this.slot = new ItemOreFilterTestSlot(); this.slot.setParent(this); - this.slot.setGlob(globSupplier.get()); slot(this.slot); tooltipBuilder(tooltip -> { if (!isEnabled()) return; @@ -94,7 +93,6 @@ public void updatePreview() { Set oreDicts = getTestCandidates(); if (oreDicts != null) { OreGlob glob = this.globSupplier.get(); - this.slot.setGlob(glob); if (oreDicts.isEmpty()) { // no oredict entries this.testResult = Object2BooleanMaps.singleton("", glob != null && glob.matches("")); From 700a7dec8fe3011e47f2e6f617637630ab23ce73 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 11 Feb 2024 16:18:22 -0700 Subject: [PATCH 233/260] set match all for slots --- .../common/covers/filter/OreDictionaryItemFilter.java | 7 +++++++ .../common/mui/widget/orefilter/OreFilterTestSlot.java | 1 - 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 3ea7ae3bcf2..68a9eacfb15 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -19,6 +19,7 @@ import net.minecraft.util.text.TextFormatting; import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.api.widget.IGuiAction; import com.cleanroommc.modularui.drawable.UITexture; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.screen.Tooltip; @@ -140,6 +141,12 @@ public void initUI(Consumer widgetGroup) {} .child(new CycleButtonWidget() .size(18).value(matchAll) .marginRight(2) + .listenGuiAction((IGuiAction.MousePressed) i -> { + for (var slot : oreSlots) { + slot.setMatchAll(matchAll.getBoolValue()); + } + return true; + }) .textureGetter(state -> GTGuiTextures.BUTTON_MATCH_ALL[state]) .addTooltip(0, IKey.lang("cover.ore_dictionary_filter.button.match_all.disabled")) diff --git a/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java b/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java index 86055111977..fe750d7a442 100644 --- a/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java +++ b/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java @@ -30,7 +30,6 @@ public class OreFilterTestSlot extends ItemSlot { private Object2BooleanMap testResult; private MatchType matchType = MatchType.INVALID; private boolean matchSuccess; - private boolean matchAll; public OreFilterTestSlot() { From 9cab06fd75fab1ce0db205623880a2e38060c920 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 11 Feb 2024 18:49:40 -0700 Subject: [PATCH 234/260] make "Conveyor Mode" into "IO Mode" --- src/main/java/gregtech/common/covers/CoverConveyor.java | 2 +- src/main/resources/assets/gregtech/lang/en_us.lang | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index dce18f22528..5ea6423abcd 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -577,7 +577,7 @@ protected ParentWidget createUI(ModularPanel mainPanel, GuiSyncManager g if (createConveyorModeRow()) column.child(new EnumRowBuilder<>(ConveyorMode.class) .value(conveyorMode) - .lang("cover.conveyor.mode") + .lang("cover.generic.io") .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY) .build()); diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index d1fa4504037..d54a69b3e44 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -1281,7 +1281,7 @@ cover.smart_item_filter.filtering_mode.description=Select Machine this Smart Fil cover.generic.transfer_mode=Transfer Mode cover.generic.manual_io=Manual IO Mode -cover.conveyor.mode=Conveyor Mode +cover.generic.io=IO Mode cover.pump.mode=Pump Mode cover.conveyor.title=Conveyor Cover Settings (%s) cover.conveyor.transfer_rate=§7items/sec From 59361bed0f7d59fd239c2468e065770c0a22545e Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 11 Feb 2024 18:50:07 -0700 Subject: [PATCH 235/260] sync transfer mode on set --- .../gregtech/api/capability/GregtechDataCodes.java | 3 +++ .../java/gregtech/common/covers/CoverRoboticArm.java | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/main/java/gregtech/api/capability/GregtechDataCodes.java b/src/main/java/gregtech/api/capability/GregtechDataCodes.java index 4fcead477d4..225e12e4f74 100644 --- a/src/main/java/gregtech/api/capability/GregtechDataCodes.java +++ b/src/main/java/gregtech/api/capability/GregtechDataCodes.java @@ -23,6 +23,9 @@ public static int assignId() { public static final int UPDATE_AUTO_OUTPUT_FLUIDS = assignId(); public static final int UPDATE_IS_VOIDING = assignId(); + // Robotic Arm + public static final int UPDATE_TRANSFER_MODE = assignId(); + // Drum public static final int UPDATE_AUTO_OUTPUT = assignId(); diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index f7d3c198eb6..0fd7c3ff550 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -1,5 +1,6 @@ package gregtech.common.covers; +import gregtech.api.capability.GregtechDataCodes; import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; import gregtech.api.mui.GTGuiTextures; @@ -174,6 +175,8 @@ public void setTransferMode(TransferMode transferMode) { this.transferMode = transferMode; this.getCoverableView().markDirty(); this.itemFilterContainer.setMaxTransferSize(transferMode.maxStackSize); + writeCustomData(GregtechDataCodes.UPDATE_TRANSFER_MODE, + buffer -> buffer.writeByte(this.transferMode.ordinal())); } } @@ -236,6 +239,15 @@ public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { this.itemFilterContainer.setMaxTransferSize(this.transferMode.maxStackSize); } + @Override + public void readCustomData(int discriminator, @NotNull PacketBuffer buf) { + super.readCustomData(discriminator, buf); + if (discriminator == GregtechDataCodes.UPDATE_TRANSFER_MODE) { + this.transferMode = TransferMode.VALUES[buf.readByte()]; + this.itemFilterContainer.setMaxTransferSize(this.transferMode.maxStackSize); + } + } + @Override public void writeToNBT(NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); From 7d039268563f6f57181059292bfc48a9c92e08e9 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 17 Feb 2024 22:24:59 -0700 Subject: [PATCH 236/260] use change listener instead of update simplify on pressed logic --- .../covers/filter/FluidFilterContainer.java | 19 ++++++++----------- .../covers/filter/ItemFilterContainer.java | 19 ++++++++----------- 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 83ecea04175..99574409be9 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -119,27 +119,24 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) .child(new ItemSlot() .slot(SyncHandlers.itemSlot(this, 0) .filter(FilterTypeRegistry::isFluidFilter) - .singletonSlotGroup(101)) - .onUpdateListener(w -> { - if (!hasFilter() && panel.isPanelOpen()) { - panel.closePanel(); - } - }, true) + .singletonSlotGroup(101) + .changeListener((newItem, onlyAmountChanged, client, init) -> { + if (!FilterTypeRegistry.isFilter(newItem) && panel.isPanelOpen()) { + panel.closePanel(); + } + })) .size(18).marginRight(2) .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY)) .child(filterButton .setEnabledIf(w -> hasFilter()) .onMousePressed(i -> { - boolean success = false; if (!panel.isPanelOpen()) { panel.openPanel(); - success = true; - } else if (panel.isValid()) { + } else { panel.closePanel(); - success = true; } Interactable.playButtonClickSound(); - return success; + return true; })) .child(IKey.dynamic(() -> hasFilter() ? getFilterStack().getDisplayName() : diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 2669f0c113d..1bba73e005e 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -108,27 +108,24 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) .child(new ItemSlot() .slot(SyncHandlers.itemSlot(this, 0) .filter(FilterTypeRegistry::isItemFilter) - .singletonSlotGroup(101)) - .onUpdateListener(w -> { - if (!hasFilter() && panel.isPanelOpen()) { - panel.closePanel(); - } - }, true) + .singletonSlotGroup(101) + .changeListener((newItem, onlyAmountChanged, client, init) -> { + if (!FilterTypeRegistry.isFilter(newItem) && panel.isPanelOpen()) { + panel.closePanel(); + } + })) .size(18).marginRight(2) .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY)) .child(filterButton .setEnabledIf(w -> hasFilter()) .onMousePressed(i -> { - boolean success = false; if (!panel.isPanelOpen()) { panel.openPanel(); - success = true; - } else if (panel.isValid()) { + } else { panel.closePanel(); - success = true; } Interactable.playButtonClickSound(); - return success; + return true; })) .child(IKey.dynamic(() -> hasFilter() ? getFilterStack().getDisplayName() : From 2cfce25004638e0fc2a99d972f16deaff098d76a Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 3 Mar 2024 00:59:48 -0700 Subject: [PATCH 237/260] mui 2.4.3 :lets: --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index ccfcf8a750c..49d93cc7bd5 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -40,7 +40,7 @@ dependencies { // Published dependencies api("codechicken:codechickenlib:3.2.3.358") - api("com.cleanroommc:modularui:2.4.2") { transitive = false } + api("com.cleanroommc:modularui:2.4.3") { transitive = false } api("com.cleanroommc:groovyscript:0.8.0") { transitive = false } api("CraftTweaker2:CraftTweaker2-MC1120-Main:1.12-4.1.20.684") api rfg.deobf("curse.maven:ae2-extended-life-570458:4402048") // AE2UEL 0.55.6 From 757acbb2c1693ef3ab1a4ae4956531886c2c0e31 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 3 Mar 2024 14:19:25 -0700 Subject: [PATCH 238/260] address reviews --- src/main/java/gregtech/common/covers/CoverItemFilter.java | 4 ++-- .../common/covers/filter/OreDictionaryItemFilter.java | 2 +- .../common/{gui => mui}/widget/HighlightedTextField.java | 2 +- .../common/mui/widget/orefilter/ItemOreFilterTestSlot.java | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) rename src/main/java/gregtech/common/{gui => mui}/widget/HighlightedTextField.java (98%) diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index e5af142842c..d8b9e54392e 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -78,17 +78,17 @@ public void onAttachment(@NotNull CoverableView coverableView, @NotNull EnumFaci @Override public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) { - packetBuffer.writeByte(this.filterMode.ordinal()); packetBuffer.writeBoolean(itemFilterContainer.hasFilter()); if (itemFilterContainer.hasFilter()) { + packetBuffer.writeByte(this.filterMode.ordinal()); packetBuffer.writeItemStack(this.itemFilterContainer.getFilterStack()); } } @Override public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { - this.filterMode = ItemFilterMode.VALUES[packetBuffer.readByte()]; if (!packetBuffer.readBoolean()) return; + this.filterMode = ItemFilterMode.VALUES[packetBuffer.readByte()]; try { this.itemFilterContainer.setFilterStack(packetBuffer.readItemStack()); } catch (IOException e) { diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 68a9eacfb15..4bf075595ed 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -10,7 +10,7 @@ import gregtech.api.util.oreglob.OreGlob; import gregtech.api.util.oreglob.OreGlobCompileResult; import gregtech.common.covers.filter.readers.OreDictFilterReader; -import gregtech.common.gui.widget.HighlightedTextField; +import gregtech.common.mui.widget.HighlightedTextField; import gregtech.common.mui.widget.orefilter.OreFilterTestSlot; import net.minecraft.client.resources.I18n; diff --git a/src/main/java/gregtech/common/gui/widget/HighlightedTextField.java b/src/main/java/gregtech/common/mui/widget/HighlightedTextField.java similarity index 98% rename from src/main/java/gregtech/common/gui/widget/HighlightedTextField.java rename to src/main/java/gregtech/common/mui/widget/HighlightedTextField.java index 202950584a5..48d0ba8cbba 100644 --- a/src/main/java/gregtech/common/gui/widget/HighlightedTextField.java +++ b/src/main/java/gregtech/common/mui/widget/HighlightedTextField.java @@ -1,4 +1,4 @@ -package gregtech.common.gui.widget; +package gregtech.common.mui.widget; import com.cleanroommc.modularui.api.value.IStringValue; import com.cleanroommc.modularui.screen.viewport.GuiContext; diff --git a/src/main/java/gregtech/common/mui/widget/orefilter/ItemOreFilterTestSlot.java b/src/main/java/gregtech/common/mui/widget/orefilter/ItemOreFilterTestSlot.java index cfb3d897d1f..9e16df34dfb 100644 --- a/src/main/java/gregtech/common/mui/widget/orefilter/ItemOreFilterTestSlot.java +++ b/src/main/java/gregtech/common/mui/widget/orefilter/ItemOreFilterTestSlot.java @@ -25,7 +25,7 @@ public void putStack(ItemStack stack) { !ItemStack.areItemStackTagsEqual(testStack, stack)) { ItemStack copy = stack.copy(); copy.setCount(1); - super.putStack(stack); + super.putStack(copy); this.parent.updatePreview(); } } From 63472eb6e07501c56f49c108e5e5f4fa83d0c632 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 3 Mar 2024 16:25:46 -0700 Subject: [PATCH 239/260] address reviews part 2 --- .../filter/OreDictionaryItemFilter.java | 40 ++++++---- .../filter/readers/OreDictFilterReader.java | 1 + .../widget/orefilter/OreFilterTestSlot.java | 80 ++++++++----------- 3 files changed, 59 insertions(+), 62 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 4bf075595ed..cd95aaa3126 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -1,5 +1,7 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.utils.BooleanConsumer; + import gregtech.api.cover.CoverWithUI; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; @@ -58,11 +60,6 @@ public String getExpression() { return this.filterReader.getExpression(); } - @NotNull - public OreGlob getGlob() { - return this.filterReader.getGlob(); - } - protected void recompile() { clearCache(); this.filterReader.recompile(); @@ -91,12 +88,28 @@ public void initUI(Consumer widgetGroup) {} @Override public @NotNull Widget createWidgets(GuiSyncManager syncManager) { + List oreSlots = new ArrayList<>(); var expression = new StringSyncValue(this.filterReader::getExpression, this.filterReader::setExpression); - var caseSensitive = new BooleanSyncValue(this.filterReader::isCaseSensitive, - this.filterReader::setCaseSensitive); - var matchAll = new BooleanSyncValue(this.filterReader::shouldMatchAll, this.filterReader::setMatchAll); - List oreSlots = new ArrayList<>(); + 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 new Column().widthRel(1f).coverChildrenHeight() .child(new HighlightedTextField() @@ -125,7 +138,8 @@ public void initUI(Consumer widgetGroup) {} .row("XXXXX") .key('X', i -> { var slot = new OreFilterTestSlot() - .setGlobSupplier(this::getGlob); + .setGlobSupplier(this.filterReader::getGlob); + slot.setMatchAll(this.filterReader.shouldMatchAll()); oreSlots.add(slot); return slot; }) @@ -141,12 +155,6 @@ public void initUI(Consumer widgetGroup) {} .child(new CycleButtonWidget() .size(18).value(matchAll) .marginRight(2) - .listenGuiAction((IGuiAction.MousePressed) i -> { - for (var slot : oreSlots) { - slot.setMatchAll(matchAll.getBoolValue()); - } - return true; - }) .textureGetter(state -> GTGuiTextures.BUTTON_MATCH_ALL[state]) .addTooltip(0, IKey.lang("cover.ore_dictionary_filter.button.match_all.disabled")) 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 4f3e96a766f..29c0c1a6c3a 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/OreDictFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/OreDictFilterReader.java @@ -43,6 +43,7 @@ public void setCaseSensitive(boolean caseSensitive) { getStackTag().setBoolean(CASE_SENSITIVE, false); else getStackTag().removeTag(CASE_SENSITIVE); + recompile(); markDirty(); } diff --git a/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java b/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java index fe750d7a442..fcb7cd5318f 100644 --- a/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java +++ b/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java @@ -1,15 +1,17 @@ package gregtech.common.mui.widget.orefilter; +import gregtech.api.mui.GTGuiTextures; import gregtech.api.unification.OreDictUnifier; import gregtech.api.util.function.BooleanConsumer; import gregtech.api.util.oreglob.OreGlob; import gregtech.common.covers.filter.oreglob.impl.ImpossibleOreGlob; import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.screen.viewport.GuiContext; +import com.cleanroommc.modularui.widget.sizer.Area; import com.cleanroommc.modularui.widgets.ItemSlot; import it.unimi.dsi.fastutil.objects.Object2BooleanAVLTreeMap; import it.unimi.dsi.fastutil.objects.Object2BooleanMap; -import it.unimi.dsi.fastutil.objects.Object2BooleanMaps; import org.jetbrains.annotations.Nullable; import java.util.Collections; @@ -24,10 +26,9 @@ public class OreFilterTestSlot extends ItemSlot { private final ItemOreFilterTestSlot slot; private Supplier globSupplier = ImpossibleOreGlob::getInstance; - private boolean expectedResult = true; @Nullable private BooleanConsumer onMatchChange; - private Object2BooleanMap testResult; + private final Object2BooleanMap testResult = new Object2BooleanAVLTreeMap<>(); private MatchType matchType = MatchType.INVALID; private boolean matchSuccess; private boolean matchAll; @@ -50,11 +51,6 @@ public OreFilterTestSlot() { default -> Collections.singletonList(IKey.lang("cover.ore_dictionary_filter.test_slot.info")); }); }); - // todo add back match and no match overlays - // this.match = new ImageWidget(18 - 5, -3, 9, 6, GuiTextures.ORE_FILTER_MATCH); - // this.noMatch = new ImageWidget(18 - 5, -3, 7, 7, GuiTextures.ORE_FILTER_NO_MATCH); - // child(this.match); - // child(this.noMatch); } public OreFilterTestSlot setGlobSupplier(Supplier supplier) { @@ -72,11 +68,6 @@ public boolean isMatchSuccess() { return matchSuccess; } - public OreFilterTestSlot setExpectedResult(boolean expectedResult) { - this.expectedResult = expectedResult; - return getThis(); - } - public OreFilterTestSlot onMatchChange(@Nullable BooleanConsumer onMatchChange) { this.onMatchChange = onMatchChange; return getThis(); @@ -90,41 +81,38 @@ public void setMatchAll(boolean matchAll) { public void updatePreview() { Set oreDicts = getTestCandidates(); - if (oreDicts != null) { - OreGlob glob = this.globSupplier.get(); - if (oreDicts.isEmpty()) { - // no oredict entries - this.testResult = Object2BooleanMaps.singleton("", glob != null && glob.matches("")); - this.matchType = MatchType.NO_ORE_DICT_MATCH; - } else { - this.testResult = new Object2BooleanAVLTreeMap<>(); - for (String oreDict : oreDicts) { - boolean matches = glob != null && glob.matches(oreDict); - this.testResult.put(oreDict, matches); - } - this.matchType = MatchType.ORE_DICT_MATCH; - } - boolean success = this.matchAll; - for (var e : testResult.object2BooleanEntrySet()) { - boolean result = e.getBooleanValue(); - if (result == !this.matchAll) { - success = !this.matchAll; - break; - } - } - updateAndNotifyMatchSuccess(this.expectedResult == success); - this.tooltip().markDirty(); - // todo add back match and no match overlays - // this.match.setVisible(this.expectedResult == success); - // this.noMatch.setVisible(this.expectedResult != success); + this.testResult.clear(); + if (oreDicts == null) { + this.matchType = MatchType.INVALID; + updateAndNotifyMatchSuccess(false); return; } - this.testResult = Object2BooleanMaps.emptyMap(); - this.matchType = MatchType.INVALID; - updateAndNotifyMatchSuccess(false); - // todo add back match and no match overlays - // this.match.setVisible(false); - // this.noMatch.setVisible(false); + OreGlob glob = this.globSupplier.get(); + int success = 0; + if (oreDicts.isEmpty()) { + // no oredict entries + this.testResult.put("", glob != null && glob.matches("")); + this.matchType = MatchType.NO_ORE_DICT_MATCH; + } else { + for (String oreDict : oreDicts) { + boolean matches = glob != null && glob.matches(oreDict); + if (matches) success++; + this.testResult.put(oreDict, matches); + } + this.matchType = MatchType.ORE_DICT_MATCH; + } + updateAndNotifyMatchSuccess(this.matchAll ? success == testResult.size() : success > 0); + this.tooltip().markDirty(); + } + + @Override + public void drawForeground(GuiContext context) { + super.drawForeground(context); + if (this.matchSuccess) { + GTGuiTextures.OREDICT_MATCH.draw(context, this.getArea().x + 12, this.getArea().y - 2, 9, 6, getWidgetTheme(context.getTheme())); + } else if (testResult.size() > 0) { + GTGuiTextures.OREDICT_NO_MATCH.draw(context, this.getArea().x + 12, this.getArea().y - 3, 7, 7, getWidgetTheme(context.getTheme())); + } } private void updateAndNotifyMatchSuccess(boolean newValue) { From 62031efb7b02c634017e82840b97f01c7a6b07c4 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 3 Mar 2024 17:45:07 -0700 Subject: [PATCH 240/260] add icon for filter settings spotless --- src/main/java/gregtech/api/mui/GTGuiTextures.java | 2 ++ .../common/covers/filter/ItemFilterContainer.java | 12 ++++++++---- .../covers/filter/OreDictionaryItemFilter.java | 5 +---- .../mui/widget/orefilter/OreFilterTestSlot.java | 7 ++++--- .../gui/overlay/filter_settings_overlay.png | Bin 0 -> 333 bytes 5 files changed, 15 insertions(+), 11 deletions(-) create mode 100644 src/main/resources/assets/gregtech/textures/gui/overlay/filter_settings_overlay.png diff --git a/src/main/java/gregtech/api/mui/GTGuiTextures.java b/src/main/java/gregtech/api/mui/GTGuiTextures.java index 4e5ad8a979a..93d4890d857 100644 --- a/src/main/java/gregtech/api/mui/GTGuiTextures.java +++ b/src/main/java/gregtech/api/mui/GTGuiTextures.java @@ -252,6 +252,8 @@ public static class IDs { public static final UITexture EXTRACTOR_OVERLAY_STEEL = fullImage( "textures/gui/overlay/extractor_overlay_steel.png"); public static final UITexture FILTER_SLOT_OVERLAY = fullImage("textures/gui/overlay/filter_slot_overlay.png", true); + public static final UITexture FILTER_DARK_OVERLAY = fullImage("textures/gui/overlay/filter_settings_overlay.png", + true); public static final UITexture FURNACE_OVERLAY_1 = fullImage("textures/gui/overlay/furnace_overlay_1.png", true); public static final UITexture FURNACE_OVERLAY_2 = fullImage("textures/gui/overlay/furnace_overlay_2.png", true); public static final UITexture FURNACE_OVERLAY_BRONZE = fullImage("textures/gui/overlay/furnace_overlay_bronze.png"); diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 1bba73e005e..09042d89c68 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -1,6 +1,5 @@ package gregtech.common.covers.filter; -import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.LabelWidget; import gregtech.api.gui.widgets.ServerWidgetGroup; import gregtech.api.gui.widgets.SlotWidget; @@ -15,6 +14,7 @@ import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.api.widget.IWidget; import com.cleanroommc.modularui.api.widget.Interactable; +import com.cleanroommc.modularui.drawable.GuiTextures; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.value.sync.GuiSyncManager; @@ -64,7 +64,8 @@ public int getTransferLimit(ItemStack stack) { public void initUI(int y, Consumer widgetGroup) { widgetGroup.accept(new LabelWidget(10, y, "cover.conveyor.item_filter.title")); widgetGroup.accept(new SlotWidget(this, 0, 10, y + 15) - .setBackgroundTexture(GuiTextures.SLOT, GuiTextures.FILTER_SLOT_OVERLAY)); + .setBackgroundTexture(gregtech.api.gui.GuiTextures.SLOT, + gregtech.api.gui.GuiTextures.FILTER_SLOT_OVERLAY)); this.initFilterUI(y + 38, widgetGroup); } @@ -81,7 +82,7 @@ public void initFilterUI(int y, Consumer widgetGroup) { @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public void blacklistUI(int y, Consumer widgetGroup, BooleanSupplier showBlacklistButton) { ServerWidgetGroup blacklistButton = new ServerWidgetGroup(this::hasFilter); - blacklistButton.addWidget(new ToggleButtonWidget(144, y, 20, 20, GuiTextures.BUTTON_BLACKLIST, + blacklistButton.addWidget(new ToggleButtonWidget(144, y, 20, 20, gregtech.api.gui.GuiTextures.BUTTON_BLACKLIST, this::isBlacklistFilter, this::setBlacklistFilter).setPredicate(showBlacklistButton) .setTooltipText("cover.filter.blacklist")); widgetGroup.accept(blacklistButton); @@ -115,8 +116,11 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) } })) .size(18).marginRight(2) - .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY)) + .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY.asIcon().size(16))) .child(filterButton + .background(GTGuiTextures.MC_BUTTON, GTGuiTextures.FILTER_DARK_OVERLAY.asIcon().size(16)) + .hoverBackground(GuiTextures.MC_BUTTON_HOVERED, + GTGuiTextures.FILTER_DARK_OVERLAY.asIcon().size(16)) .setEnabledIf(w -> hasFilter()) .onMousePressed(i -> { if (!panel.isPanelOpen()) { diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index cd95aaa3126..7af08b2d025 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -1,7 +1,5 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.utils.BooleanConsumer; - import gregtech.api.cover.CoverWithUI; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; @@ -9,7 +7,6 @@ import gregtech.api.unification.stack.ItemVariantMap; import gregtech.api.unification.stack.MultiItemVariantMap; import gregtech.api.unification.stack.SingleItemVariantMap; -import gregtech.api.util.oreglob.OreGlob; import gregtech.api.util.oreglob.OreGlobCompileResult; import gregtech.common.covers.filter.readers.OreDictFilterReader; import gregtech.common.mui.widget.HighlightedTextField; @@ -21,10 +18,10 @@ import net.minecraft.util.text.TextFormatting; import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.api.widget.IGuiAction; import com.cleanroommc.modularui.drawable.UITexture; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.screen.Tooltip; +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.GuiSyncManager; diff --git a/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java b/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java index fcb7cd5318f..f6b5f9f8c31 100644 --- a/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java +++ b/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java @@ -8,7 +8,6 @@ import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.screen.viewport.GuiContext; -import com.cleanroommc.modularui.widget.sizer.Area; import com.cleanroommc.modularui.widgets.ItemSlot; import it.unimi.dsi.fastutil.objects.Object2BooleanAVLTreeMap; import it.unimi.dsi.fastutil.objects.Object2BooleanMap; @@ -109,9 +108,11 @@ public void updatePreview() { public void drawForeground(GuiContext context) { super.drawForeground(context); if (this.matchSuccess) { - GTGuiTextures.OREDICT_MATCH.draw(context, this.getArea().x + 12, this.getArea().y - 2, 9, 6, getWidgetTheme(context.getTheme())); + GTGuiTextures.OREDICT_MATCH.draw(context, this.getArea().x + 12, this.getArea().y - 2, 9, 6, + getWidgetTheme(context.getTheme())); } else if (testResult.size() > 0) { - GTGuiTextures.OREDICT_NO_MATCH.draw(context, this.getArea().x + 12, this.getArea().y - 3, 7, 7, getWidgetTheme(context.getTheme())); + GTGuiTextures.OREDICT_NO_MATCH.draw(context, this.getArea().x + 12, this.getArea().y - 3, 7, 7, + getWidgetTheme(context.getTheme())); } } diff --git a/src/main/resources/assets/gregtech/textures/gui/overlay/filter_settings_overlay.png b/src/main/resources/assets/gregtech/textures/gui/overlay/filter_settings_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..31b8cdb6ce84e4eeb964aef86192ec577b9edb54 GIT binary patch literal 333 zcmV-T0kZyyP)Px$2T4RhR5*>bQ!$RjAPk(KE7GB$R0zorh?F{y;3s)N-jFg~#0%*2B2eBDt~i;6 ztg=_FD}z1ucnrWdjffHvrB69OcK`r{5E>#%(=>4?@g2wC3J_5m$1wxg>H9v%t+g=5 zVBhz|MJfht+?m1FT4=2ygn*Q?%5BO+Nt?j{pta7vbFLae+~+UBF-F7~A;e!=*L82X z%~R(XBaY)}0AQZyGz>##p_Ib1EC?YqnZcd*lPRUDbDo81m4cn;2>{^k+!=VSGH-$R z%z|Clg*)vsm;FjaYweq0CAe){Y};0eSZQF4fs_)?Ijrki(Pru&t$h1Ll)U%JdtcrC f_ctC3e$9RXLC Date: Sun, 3 Mar 2024 17:47:18 -0700 Subject: [PATCH 241/260] forgor fluid container --- .../common/covers/filter/FluidFilterContainer.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 99574409be9..f51cba10c02 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -1,5 +1,7 @@ package gregtech.common.covers.filter; +import com.cleanroommc.modularui.drawable.GuiTextures; + import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.IDirtyNotifiable; @@ -126,8 +128,11 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) } })) .size(18).marginRight(2) - .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY)) + .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY.asIcon().size(16))) .child(filterButton + .background(GTGuiTextures.MC_BUTTON, GTGuiTextures.FILTER_DARK_OVERLAY.asIcon().size(16)) + .hoverBackground(GuiTextures.MC_BUTTON_HOVERED, + GTGuiTextures.FILTER_DARK_OVERLAY.asIcon().size(16)) .setEnabledIf(w -> hasFilter()) .onMousePressed(i -> { if (!panel.isPanelOpen()) { From 60899a1dea95f340a6dea26247ab8847bf23d2e8 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 3 Mar 2024 17:57:41 -0700 Subject: [PATCH 242/260] rename filter settings --- src/main/java/gregtech/api/mui/GTGuiTextures.java | 2 +- .../gregtech/common/covers/filter/FluidFilterContainer.java | 4 ++-- .../gregtech/common/covers/filter/ItemFilterContainer.java | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/api/mui/GTGuiTextures.java b/src/main/java/gregtech/api/mui/GTGuiTextures.java index 93d4890d857..20206ccce04 100644 --- a/src/main/java/gregtech/api/mui/GTGuiTextures.java +++ b/src/main/java/gregtech/api/mui/GTGuiTextures.java @@ -252,7 +252,7 @@ public static class IDs { public static final UITexture EXTRACTOR_OVERLAY_STEEL = fullImage( "textures/gui/overlay/extractor_overlay_steel.png"); public static final UITexture FILTER_SLOT_OVERLAY = fullImage("textures/gui/overlay/filter_slot_overlay.png", true); - public static final UITexture FILTER_DARK_OVERLAY = fullImage("textures/gui/overlay/filter_settings_overlay.png", + public static final UITexture FILTER_SETTINGS_OVERLAY = fullImage("textures/gui/overlay/filter_settings_overlay.png", true); public static final UITexture FURNACE_OVERLAY_1 = fullImage("textures/gui/overlay/furnace_overlay_1.png", true); public static final UITexture FURNACE_OVERLAY_2 = fullImage("textures/gui/overlay/furnace_overlay_2.png", true); diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index f51cba10c02..901615ff739 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -130,9 +130,9 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) .size(18).marginRight(2) .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY.asIcon().size(16))) .child(filterButton - .background(GTGuiTextures.MC_BUTTON, GTGuiTextures.FILTER_DARK_OVERLAY.asIcon().size(16)) + .background(GTGuiTextures.MC_BUTTON, GTGuiTextures.FILTER_SETTINGS_OVERLAY.asIcon().size(16)) .hoverBackground(GuiTextures.MC_BUTTON_HOVERED, - GTGuiTextures.FILTER_DARK_OVERLAY.asIcon().size(16)) + GTGuiTextures.FILTER_SETTINGS_OVERLAY.asIcon().size(16)) .setEnabledIf(w -> hasFilter()) .onMousePressed(i -> { if (!panel.isPanelOpen()) { diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 09042d89c68..92cad9205ad 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -118,9 +118,9 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) .size(18).marginRight(2) .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY.asIcon().size(16))) .child(filterButton - .background(GTGuiTextures.MC_BUTTON, GTGuiTextures.FILTER_DARK_OVERLAY.asIcon().size(16)) + .background(GTGuiTextures.MC_BUTTON, GTGuiTextures.FILTER_SETTINGS_OVERLAY.asIcon().size(16)) .hoverBackground(GuiTextures.MC_BUTTON_HOVERED, - GTGuiTextures.FILTER_DARK_OVERLAY.asIcon().size(16)) + GTGuiTextures.FILTER_SETTINGS_OVERLAY.asIcon().size(16)) .setEnabledIf(w -> hasFilter()) .onMousePressed(i -> { if (!panel.isPanelOpen()) { From c51a6b2c86a93638cb9a49392abddf03c2739f5c Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 6 Mar 2024 21:16:44 -0700 Subject: [PATCH 243/260] only show controls tooltip for robot arm or adv item voiding cover --- .../java/gregtech/api/mui/GTGuiTextures.java | 3 ++- .../common/covers/filter/BaseFilter.java | 2 +- .../covers/filter/FluidFilterContainer.java | 3 +-- .../covers/filter/SimpleItemFilter.java | 21 +++++++++++++------ 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/main/java/gregtech/api/mui/GTGuiTextures.java b/src/main/java/gregtech/api/mui/GTGuiTextures.java index 20206ccce04..eec251ff7e4 100644 --- a/src/main/java/gregtech/api/mui/GTGuiTextures.java +++ b/src/main/java/gregtech/api/mui/GTGuiTextures.java @@ -252,7 +252,8 @@ public static class IDs { public static final UITexture EXTRACTOR_OVERLAY_STEEL = fullImage( "textures/gui/overlay/extractor_overlay_steel.png"); public static final UITexture FILTER_SLOT_OVERLAY = fullImage("textures/gui/overlay/filter_slot_overlay.png", true); - public static final UITexture FILTER_SETTINGS_OVERLAY = fullImage("textures/gui/overlay/filter_settings_overlay.png", + public static final UITexture FILTER_SETTINGS_OVERLAY = fullImage( + "textures/gui/overlay/filter_settings_overlay.png", true); public static final UITexture FURNACE_OVERLAY_1 = fullImage("textures/gui/overlay/furnace_overlay_1.png", true); public static final UITexture FURNACE_OVERLAY_2 = fullImage("textures/gui/overlay/furnace_overlay_2.png", true); diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilter.java b/src/main/java/gregtech/common/covers/filter/BaseFilter.java index be066bb286c..b25f1893409 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilter.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -15,7 +15,7 @@ public abstract class BaseFilter implements IFilter { - private IDirtyNotifiable dirtyNotifiable; + protected IDirtyNotifiable dirtyNotifiable; private BaseFilterReader filterReader; protected final void setFilterReader(BaseFilterReader filterReader) { diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 901615ff739..9e4ff667e32 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -1,7 +1,5 @@ package gregtech.common.covers.filter; -import com.cleanroommc.modularui.drawable.GuiTextures; - import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.IDirtyNotifiable; @@ -12,6 +10,7 @@ import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.api.widget.IWidget; import com.cleanroommc.modularui.api.widget.Interactable; +import com.cleanroommc.modularui.drawable.GuiTextures; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.value.sync.GuiSyncManager; diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index d2add5c02c2..80d5e1d12cb 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -7,6 +7,10 @@ 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; @@ -112,12 +116,17 @@ public void initUI(Consumer widgetGroup) { tooltip.textColor(Color.GREY.main); }) .tooltipBuilder(tooltip -> { - tooltip.addLine(IKey.lang("cover.item_filter.config_amount")); - int count = this.filterReader.getTagAt(index) - .getInteger(SimpleItemFilterReader.COUNT); - if (count > 0) - tooltip.addLine( - IKey.format("Count: %s", TextFormattingUtil.formatNumbers(count))); + if (dirtyNotifiable instanceof CoverRoboticArm coverArm && + coverArm.getTransferMode() != TransferMode.TRANSFER_ANY || + dirtyNotifiable instanceof CoverItemVoidingAdvanced coverItem && + coverItem.getVoidingMode() != VoidingMode.VOID_ANY) { + tooltip.addLine(IKey.lang("cover.item_filter.config_amount")); + int count = this.filterReader.getTagAt(index) + .getInteger(SimpleItemFilterReader.COUNT); + if (count > 0) + tooltip.addLine( + IKey.format("Count: %s", TextFormattingUtil.formatNumbers(count))); + } }) .slot(SyncHandlers.phantomItemSlot(this.filterReader, index) .ignoreMaxStackSize(true) From 86076c89792d0281d68eb6bcf2d88b6f528fe1c3 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 6 Mar 2024 22:00:58 -0700 Subject: [PATCH 244/260] fix an issue with global transfer limit slider --- .../gregtech/common/covers/filter/BaseFilterContainer.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 722e9ad99ea..792b01008fb 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -125,8 +125,7 @@ public final void setFilter(@Nullable IFilter newFilter) { } public boolean showGlobalTransferLimitSlider() { - return this.maxTransferSize > 0 && - (isBlacklistFilter() || (hasFilter() && getFilter().showGlobalTransferLimitSlider())); + return this.maxTransferSize > 0 && (!hasFilter() || getFilter().showGlobalTransferLimitSlider()); } public void setBlacklistFilter(boolean blacklistFilter) { From 1dcd18ed7ac02fef41e0bd5d4fa1899a823fccbc Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 6 Mar 2024 22:20:56 -0700 Subject: [PATCH 245/260] :servernotforrendering: move draw calls to a more appropriate method --- .../mui/widget/orefilter/OreFilterTestSlot.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java b/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java index f6b5f9f8c31..1948364bbec 100644 --- a/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java +++ b/src/main/java/gregtech/common/mui/widget/orefilter/OreFilterTestSlot.java @@ -8,6 +8,7 @@ import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.screen.viewport.GuiContext; +import com.cleanroommc.modularui.theme.WidgetTheme; import com.cleanroommc.modularui.widgets.ItemSlot; import it.unimi.dsi.fastutil.objects.Object2BooleanAVLTreeMap; import it.unimi.dsi.fastutil.objects.Object2BooleanMap; @@ -105,14 +106,14 @@ public void updatePreview() { } @Override - public void drawForeground(GuiContext context) { - super.drawForeground(context); + public void draw(GuiContext context, WidgetTheme widgetTheme) { + super.draw(context, widgetTheme); if (this.matchSuccess) { - GTGuiTextures.OREDICT_MATCH.draw(context, this.getArea().x + 12, this.getArea().y - 2, 9, 6, - getWidgetTheme(context.getTheme())); + GTGuiTextures.OREDICT_MATCH + .draw(context, 12, -2, 9, 6, widgetTheme); } else if (testResult.size() > 0) { - GTGuiTextures.OREDICT_NO_MATCH.draw(context, this.getArea().x + 12, this.getArea().y - 3, 7, 7, - getWidgetTheme(context.getTheme())); + GTGuiTextures.OREDICT_NO_MATCH + .draw(context, 12, -3, 7, 7, widgetTheme); } } From e4976f3acb3b902a2632d77483a50c36ed9399d9 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 6 Mar 2024 22:42:29 -0700 Subject: [PATCH 246/260] try and cache the highlighted string do `string, string` function instead --- .../filter/OreDictionaryItemFilter.java | 25 +++++++------- .../mui/widget/HighlightedTextField.java | 34 ++++++++++--------- 2 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 7af08b2d025..3b3ff7cddb2 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -207,29 +207,30 @@ protected void createStatusTooltip(Tooltip tooltip) { tooltip.addStringLines(list); } - protected String highlightRule(StringBuilder h) { - for (int i = 0; i < h.length(); i++) { - switch (h.charAt(i)) { + protected String highlightRule(String text) { + StringBuilder builder = new StringBuilder(text); + for (int i = 0; i < builder.length(); i++) { + switch (builder.charAt(i)) { case '|', '&', '^', '(', ')' -> { - h.insert(i, TextFormatting.GOLD); + builder.insert(i, TextFormatting.GOLD); i += 2; } case '*', '?' -> { - h.insert(i, TextFormatting.GREEN); + builder.insert(i, TextFormatting.GREEN); i += 2; } case '!' -> { - h.insert(i, TextFormatting.RED); + builder.insert(i, TextFormatting.RED); i += 2; } case '\\' -> { - h.insert(i++, TextFormatting.YELLOW); + builder.insert(i++, TextFormatting.YELLOW); i += 2; } case '$' -> { // TODO: remove this switch case in 2.9 - h.insert(i, TextFormatting.DARK_GREEN); - for (; i < h.length(); i++) { - switch (h.charAt(i)) { + builder.insert(i, TextFormatting.DARK_GREEN); + for (; i < builder.length(); i++) { + switch (builder.charAt(i)) { case ' ', '\t', '\n', '\r' -> {} case '\\' -> { i++; @@ -246,9 +247,9 @@ protected String highlightRule(StringBuilder h) { continue; } } - h.insert(i + 1, TextFormatting.RESET); + builder.insert(i + 1, TextFormatting.RESET); } - return h.toString(); + return builder.toString(); } @Override diff --git a/src/main/java/gregtech/common/mui/widget/HighlightedTextField.java b/src/main/java/gregtech/common/mui/widget/HighlightedTextField.java index 48d0ba8cbba..3bb6a3e652b 100644 --- a/src/main/java/gregtech/common/mui/widget/HighlightedTextField.java +++ b/src/main/java/gregtech/common/mui/widget/HighlightedTextField.java @@ -6,10 +6,9 @@ import com.cleanroommc.modularui.widgets.textfield.TextFieldHandler; import com.cleanroommc.modularui.widgets.textfield.TextFieldRenderer; import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; -import org.jetbrains.annotations.NotNull; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import java.util.ArrayList; -import java.util.List; +import java.util.Map; import java.util.function.Function; public class HighlightedTextField extends TextFieldWidget { @@ -25,13 +24,18 @@ public HighlightedTextField() { this.handler.setRenderer(this.renderer); } + @Override + public void afterInit() { + this.highlighter.runHighlighter(getText()); + } + /** * Text highlighter applied only in rendering text. Only formatting characters can be inserted. * * @param highlightRule Consumer for text highlighter * @return This */ - public HighlightedTextField setHighlightRule(Function highlightRule) { + public HighlightedTextField setHighlightRule(Function highlightRule) { this.highlighter.setHighlightRule(highlightRule); return getThis(); } @@ -51,8 +55,9 @@ public HighlightedTextField getThis() { @Override public void onRemoveFocus(GuiContext context) { super.onRemoveFocus(context); + highlighter.runHighlighter(getText()); if (isSynced()) - this.stringSyncValue.setStringValue(highlighter.getOriginalText(), true, true); + this.stringSyncValue.setStringValue(getText(), true, true); onUnfocus.run(); } @@ -63,31 +68,28 @@ public HighlightedTextField onUnfocus(Runnable onUnfocus) { public static final class TextHighlighter extends TextFieldRenderer { - private Function highlightRule = StringBuilder::toString; - List formattedLines = new ArrayList<>(); + private Function highlightRule = string -> string; + + private Map cacheMap = new Object2ObjectOpenHashMap<>(); public TextHighlighter(TextFieldHandler handler) { super(handler); } - public void setHighlightRule(Function highlightRule) { + public void setHighlightRule(Function highlightRule) { this.highlightRule = highlightRule; } - public String getOriginalText() { - return this.handler.getText().get(0); - } - @Override protected float draw(String text, float x, float y) { - return super.draw(runHighlighter(text), x, y); + return super.draw(this.cacheMap.getOrDefault(text, text), x, y); } - public @NotNull String runHighlighter(String text) { + public void runHighlighter(String text) { if (this.highlightRule == null) { - return text; + return; } - return this.highlightRule.apply(new StringBuilder(text)); + this.cacheMap.computeIfAbsent(text, string -> this.highlightRule.apply(string)); } } } From f6f58fc7f5727c0abfbfecb0f8ca773101c20cc0 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 7 Mar 2024 13:36:44 -0700 Subject: [PATCH 247/260] don't set fluid tag with an empty tag remove legacy tag when loaded remove some methods from IFilter --- .../covers/filter/BaseFilterContainer.java | 6 ++--- .../covers/filter/FilterTypeRegistry.java | 6 ++--- .../common/covers/filter/IFilter.java | 6 ----- .../readers/SimpleFluidFilterReader.java | 22 +++++++++++-------- .../readers/SimpleItemFilterReader.java | 1 + 5 files changed, 20 insertions(+), 21 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 792b01008fb..b24be110289 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -20,7 +20,7 @@ public abstract class BaseFilterContainer extends ItemStackHandler { private int maxTransferSize = 1; private int transferSize; - private @Nullable IFilter currentFilter; + private @Nullable BaseFilter currentFilter; private @Nullable Runnable onFilterInstanceChange; private final IDirtyNotifiable dirtyNotifiable; @@ -109,11 +109,11 @@ public final boolean hasFilter() { return currentFilter != null; } - public final @Nullable IFilter getFilter() { + public final @Nullable BaseFilter getFilter() { return currentFilter; } - public final void setFilter(@Nullable IFilter newFilter) { + public final void setFilter(@Nullable BaseFilter newFilter) { this.currentFilter = newFilter; if (hasFilter()) { this.currentFilter.setDirtyNotifiable(this.dirtyNotifiable); diff --git a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java index 552330fffbd..15c215d35a4 100644 --- a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java +++ b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java @@ -123,7 +123,7 @@ public static IFluidFilter createFluidFilterById(int filterId) { return (IFluidFilter) createNewFilterInstance(factory); } - public static @NotNull IFilter getFilterForStack(ItemStack stack) { + public static @NotNull BaseFilter getFilterForStack(ItemStack stack) { if (!filterByStack.containsKey(stack)) { throw new IllegalArgumentException( String.format("Failed to create filter instance for stack %s", stack)); @@ -135,7 +135,7 @@ public static IFilter.FilterType getFilterTypeForStack(ItemStack stack) { return filterTypeByStack.get(stack); } - private static @NotNull IFilter createNewFilterInstance(FilterFactory filterFactory, ItemStack stack) { + private static @NotNull BaseFilter createNewFilterInstance(FilterFactory filterFactory, ItemStack stack) { return filterFactory.create(stack); } @@ -158,6 +158,6 @@ public static boolean isFilter(ItemStack stack) { @FunctionalInterface public interface FilterFactory { - IFilter create(ItemStack stack); + BaseFilter create(ItemStack stack); } } diff --git a/src/main/java/gregtech/common/covers/filter/IFilter.java b/src/main/java/gregtech/common/covers/filter/IFilter.java index f947baea7ed..2ca37fa041c 100644 --- a/src/main/java/gregtech/common/covers/filter/IFilter.java +++ b/src/main/java/gregtech/common/covers/filter/IFilter.java @@ -48,12 +48,6 @@ default int getTransferLimit(int slot, int transferSize) { return transferSize; } - boolean isBlacklistFilter(); - - void setBlacklistFilter(boolean blacklistFilter); - - IWidget createBlacklistUI(); - /** Read legacy NBT here */ void readFromNBT(NBTTagCompound tagCompound); 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 5d71f54b1e0..605bf31e8d8 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/SimpleFluidFilterReader.java @@ -91,19 +91,21 @@ protected WritableFluidTank(SimpleFluidFilterReader filterReader, NBTTagCompound public void setFluidAmount(int amount) { if (amount <= 0) { setFluid(null); - } else { - getFluidTag().setInteger(FLUID_AMOUNT, amount); + } else if (this.fluidTank.hasKey(FLUID)) { + this.fluidTank + .getCompoundTag(FLUID) + .setInteger(FLUID_AMOUNT, amount); markDirty(); } } public boolean isEmpty() { - return getFluidTag().isEmpty(); + return !this.fluidTank.hasKey(FLUID); } - protected NBTTagCompound getFluidTag() { - if (!this.fluidTank.hasKey(FLUID)) { - this.fluidTank.setTag(FLUID, new NBTTagCompound()); + protected @Nullable NBTTagCompound getFluidTag() { + if (isEmpty()) { + return null; } return this.fluidTank.getCompoundTag(FLUID); @@ -117,9 +119,9 @@ protected NBTTagCompound getFluidTag() { @Override public void setFluid(@Nullable FluidStack stack) { if (stack == null) { - this.fluidTank.setTag(FLUID, new NBTTagCompound()); + this.fluidTank.removeTag(FLUID); } else { - this.fluidTank.setTag(FLUID, stack.writeToNBT(getFluidTag())); + this.fluidTank.setTag(FLUID, stack.writeToNBT(new NBTTagCompound())); } markDirty(); } @@ -130,7 +132,9 @@ public boolean showAmount() { @Override public int getFluidAmount() { - return getFluidTag().getInteger(FLUID_AMOUNT); + return this.fluidTank + .getCompoundTag(FLUID) + .getInteger(FLUID_AMOUNT); } @Override 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 dccd7d24ca6..a10b9e2f065 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java @@ -170,6 +170,7 @@ public void deserializeNBT(NBTTagCompound nbt) { if (stack.isEmpty()) continue; this.setStackInSlot(i, stack); } + nbt.removeTag(LEGACY_ITEM_KEY); } } } From 9a50a6fe75bf5d7aae0f3cf2da449d97afc26f6b Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 7 Mar 2024 15:18:09 -0700 Subject: [PATCH 248/260] ah shit, here we go again yeet IItemFilter.java and IFluidFilter.java test/match against Object and cast appropriately remove MatchResult's generics move similar methods into BaseFilterContainer --- .../common/covers/CoverEnderFluidLink.java | 4 +- .../common/covers/CoverFluidFilter.java | 16 +-- .../common/covers/CoverFluidRegulator.java | 15 +-- .../common/covers/CoverFluidVoiding.java | 4 +- .../covers/CoverFluidVoidingAdvanced.java | 6 +- .../common/covers/CoverItemFilter.java | 10 +- .../covers/CoverItemVoidingAdvanced.java | 2 +- .../gregtech/common/covers/CoverPump.java | 6 +- .../common/covers/CoverRoboticArm.java | 2 +- .../detector/CoverDetectorFluidAdvanced.java | 2 +- .../common/covers/filter/BaseFilter.java | 56 +++++++++ .../covers/filter/BaseFilterContainer.java | 83 ++++++++++++- .../covers/filter/FilterTypeRegistry.java | 14 +-- .../covers/filter/FluidFilterContainer.java | 110 ++---------------- .../common/covers/filter/IFilter.java | 7 +- .../common/covers/filter/IFluidFilter.java | 25 ---- .../common/covers/filter/IItemFilter.java | 23 ---- .../covers/filter/ItemFilterContainer.java | 98 ++-------------- .../common/covers/filter/MatchResult.java | 32 +++-- .../filter/OreDictionaryItemFilter.java | 13 ++- .../covers/filter/SimpleFluidFilter.java | 18 +-- .../covers/filter/SimpleItemFilter.java | 15 ++- .../common/covers/filter/SmartItemFilter.java | 14 ++- .../covers/filter/WidgetGroupFluidFilter.java | 8 +- .../covers/filter/WidgetGroupItemFilter.java | 10 +- .../provider/CoverInfoProvider.java | 20 ++-- 26 files changed, 286 insertions(+), 327 deletions(-) delete mode 100644 src/main/java/gregtech/common/covers/filter/IFluidFilter.java delete mode 100644 src/main/java/gregtech/common/covers/filter/IItemFilter.java diff --git a/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java b/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java index 0dcb3633da2..006d9f3676f 100644 --- a/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java +++ b/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java @@ -142,9 +142,9 @@ protected void transferFluids() { getAttachedSide()); if (fluidHandler == null) return; if (pumpMode == CoverPump.PumpMode.IMPORT) { - GTTransferUtils.transferFluids(fluidHandler, linkedTank, TRANSFER_RATE, fluidFilter::testFluidStack); + GTTransferUtils.transferFluids(fluidHandler, linkedTank, TRANSFER_RATE, fluidFilter::test); } else if (pumpMode == CoverPump.PumpMode.EXPORT) { - GTTransferUtils.transferFluids(linkedTank, fluidHandler, TRANSFER_RATE, fluidFilter::testFluidStack); + GTTransferUtils.transferFluids(linkedTank, fluidHandler, TRANSFER_RATE, fluidFilter::test); } } diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index c5743bf2994..0a7c1b2b58a 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -10,8 +10,8 @@ import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; import gregtech.client.utils.TooltipHelper; +import gregtech.common.covers.filter.BaseFilter; import gregtech.common.covers.filter.FluidFilterContainer; -import gregtech.common.covers.filter.IFluidFilter; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -108,8 +108,8 @@ public FluidFilterMode getFilterMode() { } @SuppressWarnings("DataFlowIssue") // this cover always has a filter - public @NotNull IFluidFilter getFluidFilter() { - return this.fluidFilterContainer.getFluidFilter(); + public @NotNull BaseFilter getFilter() { + return this.fluidFilterContainer.getFilter(); } @Override @@ -142,7 +142,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag guiSyncManager.syncValue("filtering_mode", filteringMode); this.fluidFilterContainer.setMaxTransferSize(1); - return getFluidFilter().createPanel(guiSyncManager) + return getFilter().createPanel(guiSyncManager) .size(176, 194).padding(7) .child(CoverWithUI.createTitleRow(getPickItem())) .child(new Column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight() @@ -153,7 +153,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .build()) .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() .height(1).widthRel(0.95f).margin(0, 4)) - .child(getFluidFilter().createWidgets(guiSyncManager))) + .child(getFilter().createWidgets(guiSyncManager))) .child(SlotGroupWidget.playerInventory().bottom(7).left(7)); } @@ -198,7 +198,7 @@ public FluidHandlerFiltered(@NotNull IFluidHandler delegate) { } public int fill(FluidStack resource, boolean doFill) { - if (getFilterMode() == FluidFilterMode.FILTER_DRAIN || !fluidFilterContainer.testFluidStack(resource)) { + if (getFilterMode() == FluidFilterMode.FILTER_DRAIN || !fluidFilterContainer.test(resource)) { return 0; } return super.fill(resource, doFill); @@ -206,7 +206,7 @@ public int fill(FluidStack resource, boolean doFill) { @Nullable public FluidStack drain(FluidStack resource, boolean doDrain) { - if (getFilterMode() == FluidFilterMode.FILTER_FILL || !fluidFilterContainer.testFluidStack(resource)) { + if (getFilterMode() == FluidFilterMode.FILTER_FILL || !fluidFilterContainer.test(resource)) { return null; } return super.drain(resource, doDrain); @@ -216,7 +216,7 @@ public FluidStack drain(FluidStack resource, boolean doDrain) { public FluidStack drain(int maxDrain, boolean doDrain) { if (getFilterMode() != FluidFilterMode.FILTER_FILL) { FluidStack result = super.drain(maxDrain, false); - if (result == null || result.amount <= 0 || !fluidFilterContainer.testFluidStack(result)) { + if (result == null || result.amount <= 0 || !fluidFilterContainer.test(result)) { return null; } return doDrain ? super.drain(maxDrain, true) : result; diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 586dd29a6cd..d41152f4721 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -7,6 +7,7 @@ import gregtech.client.renderer.texture.Textures; import gregtech.client.renderer.texture.cube.SimpleSidedCubeRenderer; import gregtech.common.covers.filter.FluidFilterContainer; +import gregtech.common.covers.filter.SimpleFluidFilter; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.nbt.NBTTagCompound; @@ -63,12 +64,12 @@ protected int doTransferFluidsInternal(IFluidHandler myFluidHandler, IFluidHandl } return switch (transferMode) { case TRANSFER_ANY -> GTTransferUtils.transferFluids(sourceHandler, destHandler, transferLimit, - fluidFilterContainer::testFluidStack); + fluidFilterContainer::test); case KEEP_EXACT -> doKeepExact(transferLimit, sourceHandler, destHandler, - fluidFilterContainer::testFluidStack, + fluidFilterContainer::test, this.fluidFilterContainer.getTransferSize()); case TRANSFER_EXACT -> doTransferExact(transferLimit, sourceHandler, destHandler, - fluidFilterContainer::testFluidStack, this.fluidFilterContainer.getTransferSize()); + fluidFilterContainer::test, this.fluidFilterContainer.getTransferSize()); }; } @@ -78,7 +79,7 @@ protected int doTransferExact(int transferLimit, IFluidHandler sourceHandler, IF for (IFluidTankProperties tankProperties : sourceHandler.getTankProperties()) { FluidStack sourceFluid = tankProperties.getContents(); if (this.fluidFilterContainer.hasFilter()) { - supplyAmount = this.fluidFilterContainer.getFluidFilter().getTransferLimit(sourceFluid, supplyAmount); + supplyAmount = this.fluidFilterContainer.getFilter().getTransferLimit(sourceFluid, supplyAmount); } if (fluidLeftToTransfer < supplyAmount) break; @@ -121,7 +122,7 @@ protected int doKeepExact(final int transferLimit, break; if (this.fluidFilterContainer.hasFilter()) { - keepAmount = this.fluidFilterContainer.getFluidFilter().getTransferLimit(fluidStack, keepAmount); + keepAmount = this.fluidFilterContainer.getFilter().getTransferLimit(fluidStack, keepAmount); } // if fluid needs to be moved to meet the Keep Exact value @@ -309,8 +310,8 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { this.transferMode = TransferMode.VALUES[tagCompound.getInteger("TransferMode")]; // legacy NBT tag if (!tagCompound.hasKey("filterv2") && tagCompound.hasKey("TransferAmount")) { - if (this.fluidFilterContainer.hasFilter()) { - this.fluidFilterContainer.getFluidFilter() + if (this.fluidFilterContainer.getFilter() instanceof SimpleFluidFilter simpleFluidFilter) { + simpleFluidFilter .configureFilterTanks(tagCompound.getInteger("TransferAmount")); } } diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoiding.java b/src/main/java/gregtech/common/covers/CoverFluidVoiding.java index 64376ba0235..c781f816bef 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoiding.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoiding.java @@ -61,7 +61,7 @@ protected void doTransferFluids() { return; } GTTransferUtils.transferFluids(myFluidHandler, nullFluidTank, Integer.MAX_VALUE, - fluidFilterContainer::testFluidStack); + fluidFilterContainer::test); } @Override @@ -132,7 +132,7 @@ public NullFluidTank() { @Override public int fill(FluidStack resource, boolean doFill) { - if (fluidFilterContainer.testFluidStack(resource)) { + if (fluidFilterContainer.test(resource)) { return resource.amount; } return 0; diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index 0a484462006..35832c85656 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -51,8 +51,8 @@ protected void doTransferFluids() { } switch (voidingMode) { case VOID_ANY -> GTTransferUtils.transferFluids(myFluidHandler, nullFluidTank, Integer.MAX_VALUE, - fluidFilterContainer::testFluidStack); - case VOID_OVERFLOW -> voidOverflow(myFluidHandler, fluidFilterContainer::testFluidStack, + fluidFilterContainer::test); + case VOID_OVERFLOW -> voidOverflow(myFluidHandler, fluidFilterContainer::test, this.transferAmount); } } @@ -74,7 +74,7 @@ protected void voidOverflow(final IFluidHandler sourceHandler, FluidStack sourceFluid = tankProperties.getContents(); if (this.fluidFilterContainer.hasFilter() && voidingMode == VoidingMode.VOID_OVERFLOW) { - keepAmount = this.fluidFilterContainer.getFluidFilter() + keepAmount = this.fluidFilterContainer.getFilter() .getTransferLimit(sourceFluid, getMaxTransferRate()); } if (sourceFluid == null || sourceFluid.amount == 0 || diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index d8b9e54392e..2567ee6872e 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -10,7 +10,7 @@ import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; import gregtech.client.utils.TooltipHelper; -import gregtech.common.covers.filter.IItemFilter; +import gregtech.common.covers.filter.BaseFilter; import gregtech.common.covers.filter.ItemFilterContainer; import net.minecraft.entity.player.EntityPlayer; @@ -106,8 +106,8 @@ public ItemFilterMode getFilterMode() { } @SuppressWarnings("DataFlowIssue") // this cover always has a filter - public @NotNull IItemFilter getItemFilter() { - return this.itemFilterContainer.getItemFilter(); + public @NotNull BaseFilter getFilter() { + return this.itemFilterContainer.getFilter(); } @Override @@ -144,7 +144,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag guiSyncManager.syncValue("filtering_mode", filteringMode); - return getItemFilter().createPanel(guiSyncManager) + return getFilter().createPanel(guiSyncManager) .size(176, 194).padding(7) .child(CoverWithUI.createTitleRow(getPickItem()).left(4)) .child(new Column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight() @@ -155,7 +155,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag .build()) .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() .height(1).widthRel(0.95f).margin(0, 4)) - .child(getItemFilter().createWidgets(guiSyncManager).left(0))) + .child(getFilter().createWidgets(guiSyncManager).left(0))) .child(SlotGroupWidget.playerInventory().bottom(7).left(7)); } diff --git a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java index d755df3eca4..eaebd680eb5 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java @@ -65,7 +65,7 @@ protected void voidOverflow(IItemHandler myItemHandler) { itemToVoidAmount = typeItemInfo.totalCount - itemFilterContainer.getTransferSize(); } else { var result = itemFilterContainer.match(typeItemInfo.itemStack); - itemToVoidAmount = result.getMatchedStack().getCount(); + itemToVoidAmount = result.getItemStack().getCount(); } if (itemToVoidAmount <= 0) { diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index c95099787e8..1b2f9be4f95 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -170,16 +170,16 @@ protected int doTransferFluidsInternal(IFluidHandler myFluidHandler, IFluidHandl int transferLimit) { if (pumpMode == PumpMode.IMPORT) { return GTTransferUtils.transferFluids(fluidHandler, myFluidHandler, transferLimit, - fluidFilterContainer::testFluidStack); + fluidFilterContainer::test); } else if (pumpMode == PumpMode.EXPORT) { return GTTransferUtils.transferFluids(myFluidHandler, fluidHandler, transferLimit, - fluidFilterContainer::testFluidStack); + fluidFilterContainer::test); } return 0; } protected boolean checkInputFluid(FluidStack fluidStack) { - return fluidFilterContainer.testFluidStack(fluidStack); + return fluidFilterContainer.test(fluidStack); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index 0fd7c3ff550..de62fb23252 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -134,7 +134,7 @@ protected int doKeepExact(IItemHandler itemHandler, IItemHandler myItemHandler, int itemToKeepAmount = itemFilterContainer.getTransferLimit(sourceInfo.filterSlot); // only run multiplier for smart item - if (itemFilterContainer.getItemFilter() instanceof SmartItemFilter) { + if (itemFilterContainer.getFilter() instanceof SmartItemFilter) { if (itemFilterContainer.getTransferSize() > 1 && itemToKeepAmount * 2 <= sourceInfo.totalCount) { // get the max we can keep from the item filter variable int maxMultiplier = Math.floorDiv(sourceInfo.totalCount, itemToKeepAmount); diff --git a/src/main/java/gregtech/common/covers/detector/CoverDetectorFluidAdvanced.java b/src/main/java/gregtech/common/covers/detector/CoverDetectorFluidAdvanced.java index ed6eb97ff37..ec3c316c883 100644 --- a/src/main/java/gregtech/common/covers/detector/CoverDetectorFluidAdvanced.java +++ b/src/main/java/gregtech/common/covers/detector/CoverDetectorFluidAdvanced.java @@ -145,7 +145,7 @@ public void update() { for (IFluidTankProperties properties : tankProperties) { FluidStack contents = properties.getContents(); - if (contents != null && fluidFilter.testFluidStack(contents)) + if (contents != null && fluidFilter.test(contents)) storedFluid += contents.amount; } diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilter.java b/src/main/java/gregtech/common/covers/filter/BaseFilter.java index b25f1893409..ca9f1bcff88 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilter.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -6,6 +6,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fluids.FluidStack; import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.api.widget.IWidget; @@ -31,6 +32,61 @@ public final void setBlacklistFilter(boolean blacklistFilter) { markDirty(); } + @Override + public final MatchResult match(Object toMatch) { + if (toMatch instanceof ItemStack stack) { + return matchItem(stack); + } else if (toMatch instanceof FluidStack stack) { + return matchFluid(stack); + } + return MatchResult.NONE; + } + + public MatchResult matchFluid(FluidStack fluidStack) { + return MatchResult.NONE; + } + + public MatchResult matchItem(ItemStack itemStack) { + return MatchResult.NONE; + } + + @Override + public final boolean test(Object toTest) { + boolean b = false; + if (toTest instanceof ItemStack stack) { + b = testItem(stack); + } else if (toTest instanceof FluidStack stack) { + b = testFluid(stack); + } + return b != isBlacklistFilter(); + } + + public boolean testFluid(FluidStack toTest) { + return false; + } + + public boolean testItem(ItemStack toTest) { + return false; + } + + @Override + public final int getTransferLimit(Object o, int transferSize) { + if (o instanceof ItemStack stack) { + return getTransferLimit(stack, transferSize); + } else if (o instanceof FluidStack stack) { + return getTransferLimit(stack, transferSize); + } + return 0; + } + + public int getTransferLimit(FluidStack stack, int transferSize) { + return 0; + } + + public int getTransferLimit(ItemStack stack, int transferSize) { + return 0; + } + public final boolean isBlacklistFilter() { return filterReader.isBlacklistFilter(); } diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index b24be110289..f90db645a8f 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -1,5 +1,6 @@ package gregtech.common.covers.filter; +import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; @@ -8,9 +9,18 @@ import net.minecraft.util.math.MathHelper; import net.minecraftforge.items.ItemStackHandler; +import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.api.widget.IWidget; +import com.cleanroommc.modularui.api.widget.Interactable; +import com.cleanroommc.modularui.drawable.GuiTextures; import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.value.sync.PanelSyncHandler; +import com.cleanroommc.modularui.value.sync.SyncHandlers; +import com.cleanroommc.modularui.widgets.ButtonWidget; +import com.cleanroommc.modularui.widgets.ItemSlot; +import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -29,6 +39,24 @@ protected BaseFilterContainer(IDirtyNotifiable dirtyNotifiable) { this.dirtyNotifiable = dirtyNotifiable; } + public boolean test(Object toTest) { + return !hasFilter() || getFilter().test(toTest); + } + + public MatchResult match(Object toMatch) { + if (!hasFilter()) + return MatchResult.create(true, toMatch, -1); + + return getFilter().match(toMatch); + } + + public int getTransferLimit(Object stack) { + if (!hasFilter() || isBlacklistFilter()) { + return getTransferSize(); + } + return getFilter().getTransferLimit(stack, getTransferSize()); + } + @Override public int getSlotLimit(int slot) { return 1; @@ -65,12 +93,12 @@ public void setStackInSlot(int slot, @NotNull ItemStack stack) { @Override public boolean isItemValid(int slot, @NotNull ItemStack stack) { - return FilterTypeRegistry.isFilter(stack); + return isItemValid(stack); } - public boolean isItemValid(ItemStack stack) { - return isItemValid(0, stack); - } + protected abstract boolean isItemValid(ItemStack stack); + + protected abstract String getFilterName(); // todo update stack for insert and extract, though that shouldn't be called normally @Override @@ -175,7 +203,52 @@ public void deserializeNBT(NBTTagCompound nbt) { } /** Uses Cleanroom MUI */ - public abstract IWidget initUI(ModularPanel main, GuiSyncManager manager); + public IWidget initUI(ModularPanel main, GuiSyncManager manager) { + var panel = new PanelSyncHandler(main) { + + // the panel can't be opened if there's no filter, so `getFilter()` will never be null + @SuppressWarnings("DataFlowIssue") + @Override + public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { + getFilter().setMaxTransferSize(getMaxTransferSize()); + return getFilter().createPopupPanel(syncManager); + } + }; + manager.syncValue("filter_panel", panel); + var filterButton = new ButtonWidget<>(); + filterButton.setEnabled(hasFilter()); + + return new Row().coverChildrenHeight() + .marginBottom(2).widthRel(1f) + .child(new ItemSlot() + .slot(SyncHandlers.itemSlot(this, 0) + .filter(this::isItemValid) + .singletonSlotGroup(101) + .changeListener((newItem, onlyAmountChanged, client, init) -> { + if (!isItemValid(newItem) && panel.isPanelOpen()) { + panel.closePanel(); + } + })) + .size(18).marginRight(2) + .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY.asIcon().size(16))) + .child(filterButton + .background(GTGuiTextures.MC_BUTTON, GTGuiTextures.FILTER_SETTINGS_OVERLAY.asIcon().size(16)) + .hoverBackground(GuiTextures.MC_BUTTON_HOVERED, + GTGuiTextures.FILTER_SETTINGS_OVERLAY.asIcon().size(16)) + .setEnabledIf(w -> hasFilter()) + .onMousePressed(i -> { + if (!panel.isPanelOpen()) { + panel.openPanel(); + } else { + panel.closePanel(); + } + Interactable.playButtonClickSound(); + return true; + })) + .child(IKey.dynamic(this::getFilterName) + .alignment(Alignment.CenterRight).asWidget() + .left(36).right(0).height(18)); + } public void writeInitialSyncData(PacketBuffer packetBuffer) { packetBuffer.writeItemStack(this.getFilterStack()); diff --git a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java index 15c215d35a4..aefc50f0912 100644 --- a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java +++ b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java @@ -90,7 +90,7 @@ public static void registerFilter(FilterFactory factory, ItemStack stack) { */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public static int getIdForItemFilter(IItemFilter itemFilter) { + public static int getIdForItemFilter(BaseFilter itemFilter) { return 0; } @@ -99,7 +99,7 @@ public static int getIdForItemFilter(IItemFilter itemFilter) { */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public static int getIdForFluidFilter(IFluidFilter fluidFilter) { + public static int getIdForFluidFilter(BaseFilter fluidFilter) { return 0; } @@ -108,9 +108,9 @@ public static int getIdForFluidFilter(IFluidFilter fluidFilter) { */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public static IItemFilter createItemFilterById(int filterId) { + public static BaseFilter createItemFilterById(int filterId) { var factory = itemFilterById.get(filterId); - return (IItemFilter) createNewFilterInstance(factory); + return createNewFilterInstance(factory); } /** @@ -118,9 +118,9 @@ public static IItemFilter createItemFilterById(int filterId) { */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public static IFluidFilter createFluidFilterById(int filterId) { + public static BaseFilter createFluidFilterById(int filterId) { var factory = fluidFilterById.get(filterId); - return (IFluidFilter) createNewFilterInstance(factory); + return createNewFilterInstance(factory); } public static @NotNull BaseFilter getFilterForStack(ItemStack stack) { @@ -139,7 +139,7 @@ public static IFilter.FilterType getFilterTypeForStack(ItemStack stack) { return filterFactory.create(stack); } - private static @NotNull IFilter createNewFilterInstance(FilterFactory filterFactory) { + private static @NotNull BaseFilter createNewFilterInstance(FilterFactory filterFactory) { return createNewFilterInstance(filterFactory, ItemStack.EMPTY); } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index 9e4ff667e32..dfef2155f4d 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -1,71 +1,21 @@ package gregtech.common.covers.filter; -import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.IDirtyNotifiable; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.INBTSerializable; -import net.minecraftforge.fluids.FluidStack; +import net.minecraft.item.ItemStack; import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.api.widget.IWidget; -import com.cleanroommc.modularui.api.widget.Interactable; -import com.cleanroommc.modularui.drawable.GuiTextures; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Alignment; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; -import com.cleanroommc.modularui.value.sync.PanelSyncHandler; -import com.cleanroommc.modularui.value.sync.SyncHandlers; -import com.cleanroommc.modularui.widgets.ButtonWidget; -import com.cleanroommc.modularui.widgets.ItemSlot; -import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.Nullable; import java.util.function.BooleanSupplier; import java.util.function.Consumer; -public class FluidFilterContainer extends BaseFilterContainer - implements INBTSerializable { +public class FluidFilterContainer extends BaseFilterContainer { public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable) { super(dirtyNotifiable); } - public boolean testFluidStack(FluidStack fluidStack) { - return testFluidStack(fluidStack, !isBlacklistFilter()); - } - - public boolean testFluidStack(FluidStack fluidStack, boolean whitelist) { - boolean result = true; - if (hasFilter()) { - result = getFluidFilter().test(fluidStack); - } - return whitelist != result; - } - - public boolean test(FluidStack toTest) { - return !hasFilter() || getFluidFilter().test(toTest); - } - - public MatchResult match(FluidStack toMatch) { - if (!hasFilter()) - return MatchResult.create(true, toMatch, -1); - - return getFluidFilter().match(toMatch); - } - - public int getTransferLimit(FluidStack stack) { - if (!hasFilter() || isBlacklistFilter()) { - return getTransferSize(); - } - return getFluidFilter().getTransferLimit(stack, getTransferSize()); - } - - public final @Nullable IFluidFilter getFluidFilter() { - return (IFluidFilter) getFilter(); - } - /** @deprecated uses old builtin MUI */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") @@ -99,53 +49,15 @@ public void blacklistUI(int y, Consumer widgetGroup, Bo widgetGroup.accept(blacklistButton); } - /** Uses Cleanroom MUI */ - public IWidget initUI(ModularPanel main, GuiSyncManager manager) { - var panel = new PanelSyncHandler(main) { - - // the panel can't be opened if there's no filter, so `getFilter()` will never be null - @SuppressWarnings("DataFlowIssue") - @Override - public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { - getFilter().setMaxTransferSize(getMaxTransferSize()); - return getFilter().createPopupPanel(syncManager); - } - }; - manager.syncValue("filter_panel", panel); - var filterButton = new ButtonWidget<>(); - filterButton.setEnabled(hasFilter()); + @Override + protected boolean isItemValid(ItemStack stack) { + return FilterTypeRegistry.isFluidFilter(stack); + } - return new Row().coverChildrenHeight() - .marginBottom(2).widthRel(1f) - .child(new ItemSlot() - .slot(SyncHandlers.itemSlot(this, 0) - .filter(FilterTypeRegistry::isFluidFilter) - .singletonSlotGroup(101) - .changeListener((newItem, onlyAmountChanged, client, init) -> { - if (!FilterTypeRegistry.isFilter(newItem) && panel.isPanelOpen()) { - panel.closePanel(); - } - })) - .size(18).marginRight(2) - .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY.asIcon().size(16))) - .child(filterButton - .background(GTGuiTextures.MC_BUTTON, GTGuiTextures.FILTER_SETTINGS_OVERLAY.asIcon().size(16)) - .hoverBackground(GuiTextures.MC_BUTTON_HOVERED, - GTGuiTextures.FILTER_SETTINGS_OVERLAY.asIcon().size(16)) - .setEnabledIf(w -> hasFilter()) - .onMousePressed(i -> { - if (!panel.isPanelOpen()) { - panel.openPanel(); - } else { - panel.closePanel(); - } - Interactable.playButtonClickSound(); - return true; - })) - .child(IKey.dynamic(() -> hasFilter() ? - getFilterStack().getDisplayName() : - IKey.lang("metaitem.fluid_filter.name").get()) - .alignment(Alignment.CenterRight).asWidget() - .left(36).right(0).height(18)); + @Override + protected String getFilterName() { + return hasFilter() ? + getFilterStack().getDisplayName() : + IKey.lang("metaitem.fluid_filter.name").get(); } } diff --git a/src/main/java/gregtech/common/covers/filter/IFilter.java b/src/main/java/gregtech/common/covers/filter/IFilter.java index 2ca37fa041c..ab9f7998312 100644 --- a/src/main/java/gregtech/common/covers/filter/IFilter.java +++ b/src/main/java/gregtech/common/covers/filter/IFilter.java @@ -5,7 +5,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import com.cleanroommc.modularui.api.widget.IWidget; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.GuiSyncManager; import com.cleanroommc.modularui.widget.Widget; @@ -44,6 +43,12 @@ public interface IFilter { boolean showGlobalTransferLimitSlider(); + MatchResult match(Object toMatch); + + boolean test(Object toTest); + + int getTransferLimit(Object stack, int transferSize); + default int getTransferLimit(int slot, int transferSize) { return transferSize; } diff --git a/src/main/java/gregtech/common/covers/filter/IFluidFilter.java b/src/main/java/gregtech/common/covers/filter/IFluidFilter.java deleted file mode 100644 index 704bf0803a5..00000000000 --- a/src/main/java/gregtech/common/covers/filter/IFluidFilter.java +++ /dev/null @@ -1,25 +0,0 @@ -package gregtech.common.covers.filter; - -import net.minecraftforge.fluids.FluidStack; - -public interface IFluidFilter extends IFilter { - - MatchResult match(FluidStack toMatch); - - boolean test(FluidStack toTest); - - default int getTransferLimit(FluidStack stack, int transferSize) { - return 0; - } - - void configureFilterTanks(int amount); - - default MatchResult createResult(boolean matched, FluidStack fluidStack, int index) { - return MatchResult.create(matched, fluidStack, index); - } - - @Override - default FilterType getType() { - return FilterType.FLUID; - } -} diff --git a/src/main/java/gregtech/common/covers/filter/IItemFilter.java b/src/main/java/gregtech/common/covers/filter/IItemFilter.java deleted file mode 100644 index 560a36da26c..00000000000 --- a/src/main/java/gregtech/common/covers/filter/IItemFilter.java +++ /dev/null @@ -1,23 +0,0 @@ -package gregtech.common.covers.filter; - -import net.minecraft.item.ItemStack; - -public interface IItemFilter extends IFilter { - - MatchResult match(ItemStack toMatch); - - boolean test(ItemStack toTest); - - default int getTransferLimit(ItemStack stack, int transferSize) { - return transferSize; - } - - default MatchResult createResult(boolean matched, ItemStack fluidStack, int index) { - return MatchResult.create(matched, fluidStack, index); - } - - @Override - default FilterType getType() { - return FilterType.ITEM; - } -} diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index 92cad9205ad..b99cd51963c 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -4,60 +4,22 @@ import gregtech.api.gui.widgets.ServerWidgetGroup; import gregtech.api.gui.widgets.SlotWidget; import gregtech.api.gui.widgets.ToggleButtonWidget; -import gregtech.api.mui.GTGuiTextures; import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.INBTSerializable; import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.api.widget.IWidget; -import com.cleanroommc.modularui.api.widget.Interactable; -import com.cleanroommc.modularui.drawable.GuiTextures; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Alignment; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; -import com.cleanroommc.modularui.value.sync.PanelSyncHandler; -import com.cleanroommc.modularui.value.sync.SyncHandlers; -import com.cleanroommc.modularui.widgets.ButtonWidget; -import com.cleanroommc.modularui.widgets.ItemSlot; -import com.cleanroommc.modularui.widgets.layout.Row; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.Nullable; import java.util.function.BooleanSupplier; import java.util.function.Consumer; -public class ItemFilterContainer extends BaseFilterContainer - implements INBTSerializable { +public class ItemFilterContainer extends BaseFilterContainer { public ItemFilterContainer(IDirtyNotifiable dirtyNotifiable) { super(dirtyNotifiable); } - public boolean test(ItemStack toTest) { - return !hasFilter() || getItemFilter().test(toTest); - } - - public MatchResult match(ItemStack toMatch) { - if (!hasFilter()) - return MatchResult.create(true, toMatch, -1); - - return getItemFilter().match(toMatch); - } - - public int getTransferLimit(ItemStack stack) { - if (!hasFilter() || isBlacklistFilter()) { - return getTransferSize(); - } - return getItemFilter().getTransferLimit(stack, getTransferSize()); - } - - public @Nullable IItemFilter getItemFilter() { - return (IItemFilter) super.getFilter(); - } - /** @deprecated uses old builtin MUI */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") @@ -74,7 +36,7 @@ public void initUI(int y, Consumer widgetGroup) { @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public void initFilterUI(int y, Consumer widgetGroup) { - widgetGroup.accept(new WidgetGroupItemFilter(y, this::getItemFilter)); + widgetGroup.accept(new WidgetGroupItemFilter(y, this::getFilter)); } /** @deprecated uses old builtin MUI */ @@ -88,53 +50,15 @@ public void blacklistUI(int y, Consumer widgetGroup, Bo widgetGroup.accept(blacklistButton); } - /** Uses Cleanroom MUI */ - public IWidget initUI(ModularPanel main, GuiSyncManager manager) { - var panel = new PanelSyncHandler(main) { - - // the panel can't be opened if there's no filter, so `getFilter()` will never be null - @SuppressWarnings("DataFlowIssue") - @Override - public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { - getItemFilter().setMaxTransferSize(getMaxTransferSize()); - return getItemFilter().createPopupPanel(syncManager); - } - }; - manager.syncValue("filter_panel", panel); - var filterButton = new ButtonWidget<>(); - filterButton.setEnabled(hasFilter()); + @Override + protected boolean isItemValid(ItemStack stack) { + return FilterTypeRegistry.isItemFilter(stack); + } - return new Row().coverChildrenHeight() - .marginBottom(2).widthRel(1f) - .child(new ItemSlot() - .slot(SyncHandlers.itemSlot(this, 0) - .filter(FilterTypeRegistry::isItemFilter) - .singletonSlotGroup(101) - .changeListener((newItem, onlyAmountChanged, client, init) -> { - if (!FilterTypeRegistry.isFilter(newItem) && panel.isPanelOpen()) { - panel.closePanel(); - } - })) - .size(18).marginRight(2) - .background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY.asIcon().size(16))) - .child(filterButton - .background(GTGuiTextures.MC_BUTTON, GTGuiTextures.FILTER_SETTINGS_OVERLAY.asIcon().size(16)) - .hoverBackground(GuiTextures.MC_BUTTON_HOVERED, - GTGuiTextures.FILTER_SETTINGS_OVERLAY.asIcon().size(16)) - .setEnabledIf(w -> hasFilter()) - .onMousePressed(i -> { - if (!panel.isPanelOpen()) { - panel.openPanel(); - } else { - panel.closePanel(); - } - Interactable.playButtonClickSound(); - return true; - })) - .child(IKey.dynamic(() -> hasFilter() ? - getFilterStack().getDisplayName() : - IKey.lang("metaitem.item_filter.name").get()) - .alignment(Alignment.CenterRight).asWidget() - .left(36).right(0).height(18)); + @Override + protected String getFilterName() { + return hasFilter() ? + getFilterStack().getDisplayName() : + IKey.lang("metaitem.item_filter.name").get(); } } diff --git a/src/main/java/gregtech/common/covers/filter/MatchResult.java b/src/main/java/gregtech/common/covers/filter/MatchResult.java index de60cfc71ee..028da359cb3 100644 --- a/src/main/java/gregtech/common/covers/filter/MatchResult.java +++ b/src/main/java/gregtech/common/covers/filter/MatchResult.java @@ -1,14 +1,22 @@ package gregtech.common.covers.filter; -public final class MatchResult { +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public final class MatchResult { + + public static final MatchResult NONE = new MatchResult(false, null, -1); + public static final MatchResult ANY = new MatchResult(true, null, -1); private final boolean matched; - private final T matchedStack; + private final Object matchedObject; private final int filterIndex; - private MatchResult(boolean matched, T matchedStack, int filterIndex) { + private MatchResult(boolean matched, Object matchedObject, int filterIndex) { this.matched = matched; - this.matchedStack = matchedStack; + this.matchedObject = matchedObject; this.filterIndex = filterIndex; } @@ -16,15 +24,23 @@ public boolean isMatched() { return matched; } - public T getMatchedStack() { - return matchedStack; + public Object getMatchedObject() { + return matchedObject; + } + + public @NotNull ItemStack getItemStack() { + return matchedObject instanceof ItemStack stack ? stack : ItemStack.EMPTY; + } + + public @Nullable FluidStack getFluidStack() { + return matchedObject instanceof FluidStack stack ? stack : null; } public int getFilterIndex() { return filterIndex; } - public static MatchResult create(boolean matched, T matchedStack, int filterIndex) { - return new MatchResult<>(matched, matchedStack, filterIndex); + public static MatchResult create(boolean matched, Object matchedStack, int filterIndex) { + return new MatchResult(matched, matchedStack, filterIndex); } } diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index 3b3ff7cddb2..f758a90c151 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -40,7 +40,7 @@ import java.util.Set; import java.util.function.Consumer; -public class OreDictionaryItemFilter extends BaseFilter implements IItemFilter { +public class OreDictionaryItemFilter extends BaseFilter { private final Map> matchCache = new Object2ObjectOpenHashMap<>(); private final SingleItemVariantMap noOreDictMatch = new SingleItemVariantMap<>(); @@ -253,18 +253,23 @@ protected String highlightRule(String text) { } @Override - public MatchResult match(ItemStack itemStack) { + public MatchResult matchItem(ItemStack itemStack) { // "wtf is this system?? i can put any non null object here and it i will work??? $arch" // not anymore :thanosdaddy: -ghzdude var match = matchesItemStack(itemStack); - return createResult(match != isBlacklistFilter(), match ? itemStack.copy() : ItemStack.EMPTY, -1); + return MatchResult.create(match != isBlacklistFilter(), match ? itemStack.copy() : ItemStack.EMPTY, -1); } @Override - public boolean test(ItemStack toTest) { + public boolean testItem(ItemStack toTest) { return matchesItemStack(toTest); } + @Override + public FilterType getType() { + return FilterType.ITEM; + } + public boolean matchesItemStack(@NotNull ItemStack itemStack) { var result = this.filterReader.getResult(); if (result == null || result.hasError()) return false; diff --git a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java index f3c266a0aa7..aa36f12dd4b 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -18,7 +18,7 @@ import java.util.function.Consumer; -public class SimpleFluidFilter extends BaseFilter implements IFluidFilter { +public class SimpleFluidFilter extends BaseFilter { private static final int MAX_FLUID_SLOTS = 9; @@ -29,7 +29,6 @@ public SimpleFluidFilter(ItemStack stack) { setFilterReader(this.filterReader); } - @Override public void configureFilterTanks(int amount) { this.filterReader.setFluidAmounts(amount); this.markDirty(); @@ -62,25 +61,25 @@ public void configureFilterTanks(int amount) { } @Override - public MatchResult match(FluidStack toMatch) { + public MatchResult matchFluid(FluidStack fluidStack) { int index = -1; FluidStack returnable = null; for (int i = 0; i < filterReader.getSize(); i++) { var fluid = filterReader.getFluidStack(i); - if (fluid != null && fluid.isFluidEqual(toMatch)) { + if (fluid != null && fluid.isFluidEqual(fluidStack)) { index = i; returnable = fluid.copy(); break; } } - return createResult(index != -1, returnable, index); + return MatchResult.create(index != -1, returnable, index); } @Override - public boolean test(FluidStack fluidStack) { + public boolean testFluid(FluidStack toTest) { for (int i = 0; i < filterReader.getSize(); i++) { var fluid = filterReader.getFluidStack(i); - if (fluid != null && fluid.isFluidEqual(fluidStack)) { + if (fluid != null && fluid.isFluidEqual(toTest)) { return true; } } @@ -108,4 +107,9 @@ public int getTransferLimit(FluidStack fluidStack, int transferSize) { } return isBlacklistFilter() ? transferSize : limit; } + + @Override + public FilterType getType() { + return FilterType.FLUID; + } } diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 80d5e1d12cb..39eb30a95fd 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -33,7 +33,7 @@ import java.util.function.Consumer; -public class SimpleItemFilter extends BaseFilter implements IItemFilter { +public class SimpleItemFilter extends BaseFilter { private static final int MAX_MATCH_SLOTS = 9; private final SimpleItemFilterReader filterReader; @@ -44,15 +44,15 @@ public SimpleItemFilter(ItemStack stack) { } @Override - public MatchResult match(ItemStack itemStack) { + public MatchResult matchItem(ItemStack itemStack) { int matchedSlot = itemFilterMatch(filterReader, filterReader.isIgnoreDamage(), filterReader.isIgnoreNBT(), itemStack); - return createResult(matchedSlot != -1 && !isBlacklistFilter(), filterReader.getStackInSlot(matchedSlot), - matchedSlot); + return MatchResult.create(matchedSlot != -1 == !isBlacklistFilter(), + filterReader.getStackInSlot(matchedSlot), matchedSlot); } @Override - public boolean test(ItemStack toTest) { + public boolean testItem(ItemStack toTest) { int matchedSlot = itemFilterMatch(filterReader, filterReader.isIgnoreDamage(), filterReader.isIgnoreNBT(), toTest); return matchedSlot != -1; @@ -64,6 +64,11 @@ public int getTransferLimit(int matchSlot, int transferSize) { return Math.min(stackInFilterSlot.getCount(), transferSize); } + @Override + public FilterType getType() { + return FilterType.ITEM; + } + @Override public int getTransferLimit(ItemStack stack, int transferSize) { int matchedSlot = itemFilterMatch(filterReader, filterReader.isIgnoreDamage(), filterReader.isIgnoreNBT(), diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index da2afbe0fb4..489733ad668 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -30,7 +30,7 @@ import java.util.Collections; import java.util.function.Consumer; -public class SmartItemFilter extends BaseFilter implements IItemFilter { +public class SmartItemFilter extends BaseFilter { private final SmartItemFilterReader filterReader; @@ -69,17 +69,23 @@ public int getTransferLimit(ItemStack stack, int globalTransferLimit) { } @Override - public MatchResult match(ItemStack itemStack) { + public MatchResult matchItem(ItemStack itemStack) { var stack = itemStack.copy(); stack.setCount(getTransferLimit(itemStack, Integer.MAX_VALUE)); - return createResult(stack.getCount() > 0 != isBlacklistFilter(), stack, this.getFilteringMode().ordinal()); + return MatchResult.create(stack.getCount() > 0 != isBlacklistFilter(), stack, + this.getFilteringMode().ordinal()); } @Override - public boolean test(ItemStack toTest) { + public boolean testItem(ItemStack toTest) { return getTransferLimit(toTest, Integer.MAX_VALUE) > 0; } + @Override + public FilterType getType() { + return FilterType.ITEM; + } + @Override public void initUI(Consumer widgetGroup) { widgetGroup.accept(new CycleButtonWidget(10, 0, 75, 20, diff --git a/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java b/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java index 7d708181760..ee389cb4e1c 100644 --- a/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java @@ -19,11 +19,11 @@ @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public class WidgetGroupFluidFilter extends AbstractWidgetGroup { - private final Supplier fluidFilterSupplier; + private final Supplier fluidFilterSupplier; private final Supplier showTipSupplier; - private IFilter fluidFilter; + private BaseFilter fluidFilter; - public WidgetGroupFluidFilter(int yPosition, Supplier fluidFilterSupplier, + public WidgetGroupFluidFilter(int yPosition, Supplier fluidFilterSupplier, Supplier showTipSupplier) { super(new Position(18 + 5, yPosition)); this.fluidFilterSupplier = fluidFilterSupplier; @@ -33,7 +33,7 @@ public WidgetGroupFluidFilter(int yPosition, Supplier fluidFilterSuppli @Override public void detectAndSendChanges() { super.detectAndSendChanges(); - IFilter newFluidFilter = fluidFilterSupplier.get(); + BaseFilter newFluidFilter = fluidFilterSupplier.get(); if (fluidFilter != newFluidFilter) { clearAllWidgets(); this.fluidFilter = newFluidFilter; diff --git a/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java b/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java index 6e1758fdbc1..8493b8423eb 100644 --- a/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java @@ -17,11 +17,11 @@ @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public class WidgetGroupItemFilter extends AbstractWidgetGroup { - private final Supplier itemFilterSupplier; - private IItemFilter itemFilter; + private final Supplier itemFilterSupplier; + private BaseFilter itemFilter; private int maxStackSize = 1; - public WidgetGroupItemFilter(int yPosition, Supplier itemFilterSupplier) { + public WidgetGroupItemFilter(int yPosition, Supplier itemFilterSupplier) { super(new Position(0, yPosition)); this.itemFilterSupplier = itemFilterSupplier; } @@ -29,7 +29,7 @@ public WidgetGroupItemFilter(int yPosition, Supplier itemFilterSupp @Override public void detectAndSendChanges() { super.detectAndSendChanges(); - IItemFilter newItemFilter = itemFilterSupplier.get(); + BaseFilter newItemFilter = itemFilterSupplier.get(); if (itemFilter != newItemFilter) { clearAllWidgets(); this.itemFilter = newItemFilter; @@ -60,7 +60,7 @@ public void readUpdateInfo(int id, PacketBuffer buffer) { if (buffer.readBoolean()) { // int filterId = buffer.readVarInt(); try { - this.itemFilter = (IItemFilter) FilterTypeRegistry.getFilterForStack(buffer.readItemStack()); + this.itemFilter = FilterTypeRegistry.getFilterForStack(buffer.readItemStack()); this.itemFilter.initUI(this::addWidget); this.itemFilter.setMaxTransferSize(maxStackSize); } catch (IOException e) { diff --git a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java index 937d25faaee..0aebf88036a 100644 --- a/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java +++ b/src/main/java/gregtech/integration/theoneprobe/provider/CoverInfoProvider.java @@ -74,9 +74,9 @@ private static void conveyorInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverCo rateUnit = lang("cover.robotic_arm.exact"); transferModeText(probeInfo, roboticArm.getTransferMode(), rateUnit, - filter.getTransferSize(), filter.getItemFilter() != null); + filter.getTransferSize(), filter.hasFilter()); } - itemFilterText(probeInfo, filter.getItemFilter()); + itemFilterText(probeInfo, filter.getFilter()); } /** @@ -127,7 +127,7 @@ private static void pumpInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverPump p transferModeText(probeInfo, regulator.getTransferMode(), rateUnit, regulator .getFluidFilterContainer().getTransferSize(), filter.hasFilter() && !filter.isBlacklistFilter()); } - fluidFilterText(probeInfo, filter.getFluidFilter()); + fluidFilterText(probeInfo, filter.getFilter()); } /** @@ -160,7 +160,7 @@ private static void fluidVoidingInfo(@NotNull IProbeInfo probeInfo, @NotNull Cov */ private static void itemFilterInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverItemFilter itemFilter) { filterModeText(probeInfo, itemFilter.getFilterMode()); - itemFilterText(probeInfo, itemFilter.getItemFilter()); + itemFilterText(probeInfo, itemFilter.getFilter()); } /** @@ -171,7 +171,7 @@ private static void itemFilterInfo(@NotNull IProbeInfo probeInfo, @NotNull Cover */ private static void fluidFilterInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverFluidFilter fluidFilter) { filterModeText(probeInfo, fluidFilter.getFilterMode()); - fluidFilterText(probeInfo, fluidFilter.getFluidFilter()); + fluidFilterText(probeInfo, fluidFilter.getFilter()); } /** @@ -183,7 +183,7 @@ private static void fluidFilterInfo(@NotNull IProbeInfo probeInfo, @NotNull Cove private static void enderFluidLinkInfo(@NotNull IProbeInfo probeInfo, @NotNull CoverEnderFluidLink enderFluidLink) { transferRateText(probeInfo, enderFluidLink.getPumpMode(), " " + lang("cover.bucket.mode.milli_bucket_rate"), enderFluidLink.isIOEnabled() ? CoverEnderFluidLink.TRANSFER_RATE : 0); - fluidFilterText(probeInfo, enderFluidLink.getFluidFilterContainer().getFluidFilter()); + fluidFilterText(probeInfo, enderFluidLink.getFluidFilterContainer().getFilter()); if (!enderFluidLink.getColorStr().isEmpty()) { probeInfo.text( @@ -252,12 +252,12 @@ private static void filterModeText(@NotNull IProbeInfo probeInfo, @NotNull IStri } /** - * Displays text for {@link IItemFilter} covers + * Displays text for {@link BaseFilter} item covers * * @param probeInfo the info to add the text to * @param filter the filter to display info from */ - private static void itemFilterText(@NotNull IProbeInfo probeInfo, @Nullable IItemFilter filter) { + private static void itemFilterText(@NotNull IProbeInfo probeInfo, @Nullable BaseFilter filter) { String label = TextStyleClass.INFO + lang("gregtech.top.filter.label"); if (filter instanceof OreDictionaryItemFilter) { String expression = ((OreDictionaryItemFilter) filter).getExpression(); @@ -268,12 +268,12 @@ private static void itemFilterText(@NotNull IProbeInfo probeInfo, @Nullable IIte } /** - * Displays text for {@link BaseFilter} covers + * Displays text for {@link BaseFilter} fluid covers * * @param probeInfo the info to add the text to * @param filter the filter to display info from */ - private static void fluidFilterText(@NotNull IProbeInfo probeInfo, @Nullable IFluidFilter filter) { + private static void fluidFilterText(@NotNull IProbeInfo probeInfo, @Nullable BaseFilter filter) { // TODO If more unique fluid filtration is added, providers for it go here } From c4d0d4de9a604fe89b5d3fb73bf13e67dd2df7e4 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 7 Mar 2024 15:23:46 -0700 Subject: [PATCH 249/260] remove todo --- .../java/gregtech/common/covers/filter/BaseFilterContainer.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index f90db645a8f..f88805621cb 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -100,7 +100,6 @@ public boolean isItemValid(int slot, @NotNull ItemStack stack) { protected abstract String getFilterName(); - // todo update stack for insert and extract, though that shouldn't be called normally @Override public @NotNull ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate) { if (!isItemValid(stack)) return stack; From a0534e7095cb38bad5311bfffb1838002bb212d5 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 20 Mar 2024 12:30:11 -0700 Subject: [PATCH 250/260] try to make failing to get a filter less aggressive --- .../common/covers/CoverFluidFilter.java | 5 +- .../common/covers/CoverItemFilter.java | 7 ++- .../covers/filter/BaseFilterContainer.java | 6 +-- .../covers/filter/FilterTypeRegistry.java | 47 ++++++++++++++++++- .../common/covers/filter/IFilter.java | 2 +- 5 files changed, 58 insertions(+), 9 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 0a7c1b2b58a..42929a14eaa 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -11,6 +11,7 @@ import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; import gregtech.client.utils.TooltipHelper; import gregtech.common.covers.filter.BaseFilter; +import gregtech.common.covers.filter.FilterTypeRegistry; import gregtech.common.covers.filter.FluidFilterContainer; import net.minecraft.entity.player.EntityPlayer; @@ -109,7 +110,9 @@ public FluidFilterMode getFilterMode() { @SuppressWarnings("DataFlowIssue") // this cover always has a filter public @NotNull BaseFilter getFilter() { - return this.fluidFilterContainer.getFilter(); + return this.fluidFilterContainer.hasFilter() ? + this.fluidFilterContainer.getFilter() : + FilterTypeRegistry.ERROR_FILTER; } @Override diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 2567ee6872e..636888903c6 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -11,6 +11,7 @@ import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; import gregtech.client.utils.TooltipHelper; import gregtech.common.covers.filter.BaseFilter; +import gregtech.common.covers.filter.FilterTypeRegistry; import gregtech.common.covers.filter.ItemFilterContainer; import net.minecraft.entity.player.EntityPlayer; @@ -105,9 +106,11 @@ public ItemFilterMode getFilterMode() { return filterMode; } - @SuppressWarnings("DataFlowIssue") // this cover always has a filter + @SuppressWarnings("DataFlowIssue") // this cover should always have a filter public @NotNull BaseFilter getFilter() { - return this.itemFilterContainer.getFilter(); + return this.itemFilterContainer.hasFilter() ? + this.itemFilterContainer.getFilter() : + FilterTypeRegistry.ERROR_FILTER; } @Override diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index f88805621cb..6477f2d0052 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -206,11 +206,11 @@ public IWidget initUI(ModularPanel main, GuiSyncManager manager) { var panel = new PanelSyncHandler(main) { // the panel can't be opened if there's no filter, so `getFilter()` will never be null - @SuppressWarnings("DataFlowIssue") @Override public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { - getFilter().setMaxTransferSize(getMaxTransferSize()); - return getFilter().createPopupPanel(syncManager); + var filter = hasFilter() ? getFilter() : FilterTypeRegistry.ERROR_FILTER; + filter.setMaxTransferSize(getMaxTransferSize()); + return filter.createPopupPanel(syncManager); } }; manager.syncValue("filter_panel", panel); diff --git a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java index aefc50f0912..795d70db8fc 100644 --- a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java +++ b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java @@ -1,10 +1,18 @@ package gregtech.common.covers.filter; +import gregtech.api.mui.GTGuis; +import gregtech.api.util.GTLog; import gregtech.api.util.ItemStackHashStrategy; +import gregtech.common.covers.filter.readers.BaseFilterReader; import gregtech.common.items.MetaItems; import net.minecraft.item.ItemStack; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Alignment; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.widget.Widget; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenCustomHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap; @@ -40,6 +48,36 @@ public class FilterTypeRegistry { private static final Map itemFilterById = new Int2ObjectOpenHashMap<>(); private static final Map fluidFilterById = new Int2ObjectOpenHashMap<>(); + public static final BaseFilter ERROR_FILTER; + + static { + ERROR_FILTER = new BaseFilter() { + + @Override + public @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager) { + return GTGuis.createPopupPanel("error", 100, 100) + .child(createWidgets(syncManager)); + } + + @Override + public @NotNull ModularPanel createPanel(GuiSyncManager syncManager) { + return GTGuis.createPanel("error", 100, 100) + .child(createWidgets(syncManager)); + } + + @Override + public @NotNull Widget createWidgets(GuiSyncManager syncManager) { + return IKey.lang("INVALID FILTER").alignment(Alignment.Center).asWidget(); + } + + @Override + public FilterType getType() { + return FilterType.ITEM; + } + }; + ERROR_FILTER.setFilterReader(new BaseFilterReader(ItemStack.EMPTY, 0) {}); + } + public static void init() { // todo call this in MetaItems as a component or something registerFilter(SimpleFluidFilter::new, MetaItems.FLUID_FILTER.getStackForm()); @@ -109,6 +147,8 @@ public static int getIdForFluidFilter(BaseFilter fluidFilter) { @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public static BaseFilter createItemFilterById(int filterId) { + if (!itemFilterById.containsKey(filterId)) + return ERROR_FILTER; var factory = itemFilterById.get(filterId); return createNewFilterInstance(factory); } @@ -119,14 +159,17 @@ public static BaseFilter createItemFilterById(int filterId) { @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public static BaseFilter createFluidFilterById(int filterId) { + if (!fluidFilterById.containsKey(filterId)) + return ERROR_FILTER; var factory = fluidFilterById.get(filterId); return createNewFilterInstance(factory); } public static @NotNull BaseFilter getFilterForStack(ItemStack stack) { if (!filterByStack.containsKey(stack)) { - throw new IllegalArgumentException( - String.format("Failed to create filter instance for stack %s", stack)); + GTLog.logger.warn(new IllegalArgumentException( + String.format("Failed to create filter instance for stack %s", stack))); + return ERROR_FILTER; } return filterByStack.get(stack).create(stack); } diff --git a/src/main/java/gregtech/common/covers/filter/IFilter.java b/src/main/java/gregtech/common/covers/filter/IFilter.java index ab9f7998312..3e6c44f713b 100644 --- a/src/main/java/gregtech/common/covers/filter/IFilter.java +++ b/src/main/java/gregtech/common/covers/filter/IFilter.java @@ -16,7 +16,7 @@ public interface IFilter { @Deprecated - void initUI(Consumer widgetGroup); + default void initUI(Consumer widgetGroup) {} /** Uses Cleanroom MUI */ @NotNull From 9c54559aebcaefa8c291b42675667d0394608476 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 23 Mar 2024 15:23:43 -0700 Subject: [PATCH 251/260] deprecate FilterTypeRegistry completey and add filters as a metaitem component --- .../gregtech/api/items/metaitem/MetaItem.java | 14 +- .../common/covers/CoverFluidFilter.java | 4 +- .../common/covers/CoverItemFilter.java | 4 +- .../common/covers/filter/BaseFilter.java | 68 +++++-- .../covers/filter/BaseFilterContainer.java | 11 +- .../covers/filter/FilterTypeRegistry.java | 170 ++---------------- .../covers/filter/FluidFilterContainer.java | 3 +- .../common/covers/filter/IFilter.java | 12 ++ .../covers/filter/ItemFilterContainer.java | 3 +- .../filter/OreDictionaryItemFilter.java | 6 +- .../covers/filter/SimpleFluidFilter.java | 8 +- .../covers/filter/SimpleItemFilter.java | 8 +- .../common/covers/filter/SmartItemFilter.java | 8 +- .../covers/filter/WidgetGroupFluidFilter.java | 2 +- .../covers/filter/WidgetGroupItemFilter.java | 2 +- .../filter/readers/BaseFilterReader.java | 12 +- .../covers/filter/readers/FilterReader.java | 2 + .../java/gregtech/common/items/MetaItem1.java | 13 +- .../filter/OreDictFilterUIManager.java | 4 +- .../filter/SimpleFilterUIManager.java | 4 +- .../filter/SimpleFluidFilterUIManager.java | 4 +- .../filter/SmartFilterUIManager.java | 4 +- src/main/java/gregtech/core/CoreModule.java | 2 - 23 files changed, 162 insertions(+), 206 deletions(-) diff --git a/src/main/java/gregtech/api/items/metaitem/MetaItem.java b/src/main/java/gregtech/api/items/metaitem/MetaItem.java index f2674add426..a17559b05b2 100644 --- a/src/main/java/gregtech/api/items/metaitem/MetaItem.java +++ b/src/main/java/gregtech/api/items/metaitem/MetaItem.java @@ -33,6 +33,7 @@ import gregtech.api.util.Mods; import gregtech.client.utils.ToolChargeBarRenderer; import gregtech.common.ConfigHolder; +import gregtech.common.covers.filter.IFilter; import gregtech.common.creativetab.GTCreativeTabs; import net.minecraft.client.Minecraft; @@ -781,6 +782,7 @@ public MetaItem getMetaItem() { private final List behaviours = new ArrayList<>(); private IItemUseManager useManager; private ItemUIFactory uiManager; + private IFilter.Factory filterBehavior; private IItemColorProvider colorProvider; private IItemDurabilityManager durabilityManager; private IEnchantabilityHelper enchantabilityHelper; @@ -908,9 +910,12 @@ protected void addItemComponentsInternal(IItemComponent... stats) { if (itemComponent instanceof IFoodBehavior) { this.useManager = new FoodUseManager((IFoodBehavior) itemComponent); } - if (itemComponent instanceof ItemUIFactory) + if (itemComponent instanceof ItemUIFactory) { this.uiManager = (ItemUIFactory) itemComponent; - + } + if (itemComponent instanceof IFilter.Factory) { + this.filterBehavior = (IFilter.Factory) itemComponent; + } if (itemComponent instanceof IItemColorProvider) { this.colorProvider = (IItemColorProvider) itemComponent; } @@ -956,6 +961,11 @@ public ItemUIFactory getUIManager() { return uiManager; } + @Nullable + public IFilter.Factory getFilterFactory() { + return filterBehavior; + } + @Nullable public IItemColorProvider getColorProvider() { return colorProvider; diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 42929a14eaa..db5a6081e2e 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -11,7 +11,6 @@ import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; import gregtech.client.utils.TooltipHelper; import gregtech.common.covers.filter.BaseFilter; -import gregtech.common.covers.filter.FilterTypeRegistry; import gregtech.common.covers.filter.FluidFilterContainer; import net.minecraft.entity.player.EntityPlayer; @@ -112,7 +111,7 @@ public FluidFilterMode getFilterMode() { public @NotNull BaseFilter getFilter() { return this.fluidFilterContainer.hasFilter() ? this.fluidFilterContainer.getFilter() : - FilterTypeRegistry.ERROR_FILTER; + BaseFilter.ERROR_FILTER; } @Override @@ -144,6 +143,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag guiSyncManager.syncValue("filtering_mode", filteringMode); this.fluidFilterContainer.setMaxTransferSize(1); + getFilter().getFilterReader().readStack(this.fluidFilterContainer.getFilterStack()); return getFilter().createPanel(guiSyncManager) .size(176, 194).padding(7) diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 636888903c6..150c98465e3 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -11,7 +11,6 @@ import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; import gregtech.client.utils.TooltipHelper; import gregtech.common.covers.filter.BaseFilter; -import gregtech.common.covers.filter.FilterTypeRegistry; import gregtech.common.covers.filter.ItemFilterContainer; import net.minecraft.entity.player.EntityPlayer; @@ -110,7 +109,7 @@ public ItemFilterMode getFilterMode() { public @NotNull BaseFilter getFilter() { return this.itemFilterContainer.hasFilter() ? this.itemFilterContainer.getFilter() : - FilterTypeRegistry.ERROR_FILTER; + BaseFilter.ERROR_FILTER; } @Override @@ -146,6 +145,7 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag var filteringMode = new EnumSyncValue<>(ItemFilterMode.class, this::getFilterMode, this::setFilterMode); guiSyncManager.syncValue("filtering_mode", filteringMode); + getFilter().getFilterReader().readStack(this.itemFilterContainer.getFilterStack()); return getFilter().createPanel(guiSyncManager) .size(176, 194).padding(7) diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilter.java b/src/main/java/gregtech/common/covers/filter/BaseFilter.java index ca9f1bcff88..0ac806d197b 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilter.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -1,6 +1,8 @@ package gregtech.common.covers.filter; +import gregtech.api.items.metaitem.MetaItem; import gregtech.api.mui.GTGuiTextures; +import gregtech.api.mui.GTGuis; import gregtech.api.util.IDirtyNotifiable; import gregtech.common.covers.filter.readers.BaseFilterReader; @@ -10,25 +12,69 @@ 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.GuiSyncManager; import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widget.Widget; import com.cleanroommc.modularui.widgets.CycleButtonWidget; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public abstract class BaseFilter implements IFilter { + public static final BaseFilter ERROR_FILTER = new BaseFilter() { + + private final BaseFilterReader filterReader = new BaseFilterReader(ItemStack.EMPTY, 0); + + @Override + public BaseFilterReader getFilterReader() { + return this.filterReader; + } + + @Override + public @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager) { + return GTGuis.createPopupPanel("error", 100, 100) + .child(createWidgets(syncManager)); + } + + @Override + public @NotNull ModularPanel createPanel(GuiSyncManager syncManager) { + return GTGuis.createPanel("error", 100, 100) + .child(createWidgets(syncManager)); + } + + @Override + public @NotNull Widget createWidgets(GuiSyncManager syncManager) { + return IKey.lang("INVALID FILTER").alignment(Alignment.Center).asWidget(); + } + + @Override + public FilterType getType() { + return FilterType.ITEM; + } + }; protected IDirtyNotifiable dirtyNotifiable; - private BaseFilterReader filterReader; - protected final void setFilterReader(BaseFilterReader filterReader) { - this.filterReader = filterReader; - } + public abstract BaseFilterReader getFilterReader(); public final ItemStack getContainerStack() { - return this.filterReader.getContainer(); + return this.getFilterReader().getContainer(); + } + + public static @Nullable BaseFilter getFilterFromStack(ItemStack stack) { + if (stack.getItem() instanceof MetaItemmetaItem) { + var metaValueItem = metaItem.getItem(stack); + var factory = metaValueItem == null ? null : metaValueItem.getFilterFactory(); + if (factory != null) + return factory.create(stack); + } + return null; } public final void setBlacklistFilter(boolean blacklistFilter) { - this.filterReader.setBlacklistFilter(blacklistFilter); + this.getFilterReader().setBlacklistFilter(blacklistFilter); markDirty(); } @@ -88,7 +134,7 @@ public int getTransferLimit(ItemStack stack, int transferSize) { } public final boolean isBlacklistFilter() { - return filterReader.isBlacklistFilter(); + return getFilterReader().isBlacklistFilter(); } public IWidget createBlacklistUI() { @@ -103,11 +149,11 @@ public IWidget createBlacklistUI() { } public final int getMaxTransferSize() { - return this.filterReader.getMaxTransferRate(); + return this.getFilterReader().getMaxTransferRate(); } public final void setMaxTransferSize(int maxStackSize) { - this.filterReader.setMaxTransferRate(maxStackSize); + this.getFilterReader().setMaxTransferRate(maxStackSize); } public boolean showGlobalTransferLimitSlider() { @@ -116,7 +162,7 @@ public boolean showGlobalTransferLimitSlider() { public final void setDirtyNotifiable(IDirtyNotifiable dirtyNotifiable) { this.dirtyNotifiable = dirtyNotifiable; - this.filterReader.setDirtyNotifiable(dirtyNotifiable); + this.getFilterReader().setDirtyNotifiable(dirtyNotifiable); } public final void markDirty() { @@ -126,7 +172,7 @@ public final void markDirty() { } public void readFromNBT(NBTTagCompound tagCompound) { - this.filterReader.deserializeNBT(tagCompound); + this.getFilterReader().deserializeNBT(tagCompound); markDirty(); } } diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 6477f2d0052..e3ed666aaa1 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -85,7 +85,7 @@ public void setStackInSlot(int slot, @NotNull ItemStack stack) { if (stack.isEmpty()) { setFilter(null); } else if (isItemValid(stack)) { - setFilter(FilterTypeRegistry.getFilterForStack(stack)); + setFilter(BaseFilter.getFilterFromStack(stack)); } super.setStackInSlot(slot, stack); @@ -104,7 +104,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(FilterTypeRegistry.getFilterForStack(stack)); + if (!simulate) setFilter(BaseFilter.getFilterFromStack(stack)); return remainder; } @@ -195,7 +195,7 @@ public NBTTagCompound serializeNBT() { @Override public void deserializeNBT(NBTTagCompound nbt) { super.deserializeNBT(nbt.getCompoundTag("FilterInventory")); - setFilter(getFilterStack().isEmpty() ? null : FilterTypeRegistry.getFilterForStack(getFilterStack())); + setFilter(getFilterStack().isEmpty() ? null : BaseFilter.getFilterFromStack(getFilterStack())); if (hasFilter()) getFilter().readFromNBT(nbt); this.maxTransferSize = nbt.getInteger("MaxStackSize"); this.transferSize = nbt.getInteger("TransferStackSize"); @@ -205,14 +205,15 @@ public void deserializeNBT(NBTTagCompound nbt) { public IWidget initUI(ModularPanel main, GuiSyncManager manager) { var panel = new PanelSyncHandler(main) { - // the panel can't be opened if there's no filter, so `getFilter()` will never be null + // the panel can't be opened if there's no filter, so `getFilter()` should not be null @Override public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) { - var filter = hasFilter() ? getFilter() : FilterTypeRegistry.ERROR_FILTER; + var filter = hasFilter() ? getFilter() : BaseFilter.ERROR_FILTER; filter.setMaxTransferSize(getMaxTransferSize()); return filter.createPopupPanel(syncManager); } }; + manager.syncValue("filter_panel", panel); var filterButton = new ButtonWidget<>(); filterButton.setEnabled(hasFilter()); diff --git a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java index 795d70db8fc..fa95ba013f1 100644 --- a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java +++ b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java @@ -1,130 +1,33 @@ package gregtech.common.covers.filter; -import gregtech.api.mui.GTGuis; -import gregtech.api.util.GTLog; -import gregtech.api.util.ItemStackHashStrategy; -import gregtech.common.covers.filter.readers.BaseFilterReader; -import gregtech.common.items.MetaItems; +import gregtech.api.items.metaitem.MetaItem; import net.minecraft.item.ItemStack; -import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Alignment; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; -import com.cleanroommc.modularui.widget.Widget; -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; -import it.unimi.dsi.fastutil.objects.Object2IntOpenCustomHashMap; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.NotNull; - -import java.util.Map; +@Deprecated +@ApiStatus.ScheduledForRemoval(inVersion = "2.10") public class FilterTypeRegistry { - private static final Map itemFilterIdByStack = new Object2IntOpenCustomHashMap<>( - ItemStackHashStrategy.builder() - .compareItem(true) - .compareDamage(true) - .build()); - private static final Map fluidFilterIdByStack = new Object2IntOpenCustomHashMap<>( - ItemStackHashStrategy.builder() - .compareItem(true) - .compareDamage(true) - .build()); - - private static final Map filterByStack = new Object2ObjectOpenCustomHashMap<>( - ItemStackHashStrategy.builder() - .compareItem(true) - .compareDamage(true) - .build()); - - private static final Map filterTypeByStack = new Object2ObjectOpenCustomHashMap<>( - ItemStackHashStrategy.builder() - .compareItem(true) - .compareDamage(true) - .build()); - private static final Map itemFilterById = new Int2ObjectOpenHashMap<>(); - private static final Map fluidFilterById = new Int2ObjectOpenHashMap<>(); - - public static final BaseFilter ERROR_FILTER; - - static { - ERROR_FILTER = new BaseFilter() { - - @Override - public @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager) { - return GTGuis.createPopupPanel("error", 100, 100) - .child(createWidgets(syncManager)); - } - - @Override - public @NotNull ModularPanel createPanel(GuiSyncManager syncManager) { - return GTGuis.createPanel("error", 100, 100) - .child(createWidgets(syncManager)); - } - - @Override - public @NotNull Widget createWidgets(GuiSyncManager syncManager) { - return IKey.lang("INVALID FILTER").alignment(Alignment.Center).asWidget(); - } - - @Override - public FilterType getType() { - return FilterType.ITEM; - } - }; - ERROR_FILTER.setFilterReader(new BaseFilterReader(ItemStack.EMPTY, 0) {}); - } - - public static void init() { - // todo call this in MetaItems as a component or something - registerFilter(SimpleFluidFilter::new, MetaItems.FLUID_FILTER.getStackForm()); - registerFilter(SimpleItemFilter::new, MetaItems.ITEM_FILTER.getStackForm()); - registerFilter(OreDictionaryItemFilter::new, MetaItems.ORE_DICTIONARY_FILTER.getStackForm()); - registerFilter(SmartItemFilter::new, MetaItems.SMART_FILTER.getStackForm()); - - // todo remove - registerFluidFilter(1, SimpleFluidFilter::new, MetaItems.FLUID_FILTER.getStackForm()); - registerItemFilter(2, SimpleItemFilter::new, MetaItems.ITEM_FILTER.getStackForm()); - registerItemFilter(3, OreDictionaryItemFilter::new, MetaItems.ORE_DICTIONARY_FILTER.getStackForm()); - registerItemFilter(4, SmartItemFilter::new, MetaItems.SMART_FILTER.getStackForm()); - } + public static void init() {} /** - * @deprecated use {@link FilterTypeRegistry#registerFilter(FilterFactory, ItemStack)} + * @deprecated add filter behavior as a meta item component */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public static void registerFluidFilter(int id, FilterFactory filterFactory, ItemStack itemStack) { - if (fluidFilterById.containsKey(id)) { - throw new IllegalArgumentException("Id is already occupied: " + id); - } - fluidFilterIdByStack.put(itemStack, id); - fluidFilterById.put(id, filterFactory); - } + public static void registerFluidFilter(int id, IFilter.Factory filterFactory, ItemStack itemStack) {} /** - * @deprecated use {@link FilterTypeRegistry#registerFilter(FilterFactory, ItemStack)} + * @deprecated add filter behavior as a meta item component */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public static void registerItemFilter(int id, FilterFactory filterFactory, ItemStack itemStack) { - if (itemFilterById.containsKey(id)) { - throw new IllegalArgumentException("Id is already occupied: " + id); - } - itemFilterIdByStack.put(itemStack, id); - itemFilterById.put(id, filterFactory); - } - - public static void registerFilter(FilterFactory factory, ItemStack stack) { - filterByStack.put(stack, factory); - filterTypeByStack.put(stack, factory.create(stack).getType()); - } + public static void registerItemFilter(int id, IFilter.Factory filterFactory, ItemStack itemStack) {} /** - * @deprecated use {@link FilterTypeRegistry#getFilterTypeForStack(ItemStack)} + * @deprecated use {@link MetaItem.MetaValueItem#getFilterFactory()} */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") @@ -133,7 +36,7 @@ public static int getIdForItemFilter(BaseFilter itemFilter) { } /** - * @deprecated use {@link FilterTypeRegistry#getFilterTypeForStack(ItemStack)} + * @deprecated use {@link MetaItem.MetaValueItem#getFilterFactory()} */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") @@ -142,65 +45,20 @@ public static int getIdForFluidFilter(BaseFilter fluidFilter) { } /** - * @deprecated use {@link FilterTypeRegistry#getFilterForStack(ItemStack)} + * @deprecated use {@link MetaItem.MetaValueItem#getFilterFactory()} */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public static BaseFilter createItemFilterById(int filterId) { - if (!itemFilterById.containsKey(filterId)) - return ERROR_FILTER; - var factory = itemFilterById.get(filterId); - return createNewFilterInstance(factory); + return BaseFilter.ERROR_FILTER; } /** - * @deprecated use {@link FilterTypeRegistry#getFilterForStack(ItemStack)} + * @deprecated use {@link MetaItem.MetaValueItem#getFilterFactory()} */ @Deprecated @ApiStatus.ScheduledForRemoval(inVersion = "2.10") public static BaseFilter createFluidFilterById(int filterId) { - if (!fluidFilterById.containsKey(filterId)) - return ERROR_FILTER; - var factory = fluidFilterById.get(filterId); - return createNewFilterInstance(factory); - } - - public static @NotNull BaseFilter getFilterForStack(ItemStack stack) { - if (!filterByStack.containsKey(stack)) { - GTLog.logger.warn(new IllegalArgumentException( - String.format("Failed to create filter instance for stack %s", stack))); - return ERROR_FILTER; - } - return filterByStack.get(stack).create(stack); - } - - public static IFilter.FilterType getFilterTypeForStack(ItemStack stack) { - return filterTypeByStack.get(stack); - } - - private static @NotNull BaseFilter createNewFilterInstance(FilterFactory filterFactory, ItemStack stack) { - return filterFactory.create(stack); - } - - private static @NotNull BaseFilter createNewFilterInstance(FilterFactory filterFactory) { - return createNewFilterInstance(filterFactory, ItemStack.EMPTY); - } - - public static boolean isItemFilter(ItemStack stack) { - return getFilterTypeForStack(stack) == IFilter.FilterType.ITEM; - } - - public static boolean isFluidFilter(ItemStack stack) { - return getFilterTypeForStack(stack) == IFilter.FilterType.FLUID; - } - - public static boolean isFilter(ItemStack stack) { - return filterByStack.containsKey(stack); - } - - @FunctionalInterface - public interface FilterFactory { - - BaseFilter create(ItemStack stack); + return BaseFilter.ERROR_FILTER; } } diff --git a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java index dfef2155f4d..a3793c0ffed 100644 --- a/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/FluidFilterContainer.java @@ -51,7 +51,8 @@ public void blacklistUI(int y, Consumer widgetGroup, Bo @Override protected boolean isItemValid(ItemStack stack) { - return FilterTypeRegistry.isFluidFilter(stack); + var filter = BaseFilter.getFilterFromStack(stack); + return filter != null && filter.getType() == IFilter.FilterType.FLUID; } @Override diff --git a/src/main/java/gregtech/common/covers/filter/IFilter.java b/src/main/java/gregtech/common/covers/filter/IFilter.java index 3e6c44f713b..3af1108eb48 100644 --- a/src/main/java/gregtech/common/covers/filter/IFilter.java +++ b/src/main/java/gregtech/common/covers/filter/IFilter.java @@ -1,5 +1,6 @@ package gregtech.common.covers.filter; +import gregtech.api.items.metaitem.stats.IItemComponent; import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; @@ -62,4 +63,15 @@ enum FilterType { ITEM, FLUID } + + @FunctionalInterface() + interface Factory extends IItemComponent { + + @NotNull + BaseFilter create(@NotNull ItemStack stack); + + static Factory of(Factory factory) { + return factory; + } + } } diff --git a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java index b99cd51963c..d282595253d 100644 --- a/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/ItemFilterContainer.java @@ -52,7 +52,8 @@ public void blacklistUI(int y, Consumer widgetGroup, Bo @Override protected boolean isItemValid(ItemStack stack) { - return FilterTypeRegistry.isItemFilter(stack); + var filter = BaseFilter.getFilterFromStack(stack); + return filter != null && filter.getType() == IFilter.FilterType.ITEM; } @Override diff --git a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java index f758a90c151..2a9fcaf402d 100644 --- a/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java @@ -48,10 +48,14 @@ public class OreDictionaryItemFilter extends BaseFilter { public OreDictionaryItemFilter(ItemStack stack) { this.filterReader = new OreDictFilterReader(stack); - setFilterReader(this.filterReader); recompile(); } + @Override + public OreDictFilterReader getFilterReader() { + return filterReader; + } + @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 aa36f12dd4b..c19a5600d2e 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java @@ -25,8 +25,12 @@ public class SimpleFluidFilter extends BaseFilter { private final SimpleFluidFilterReader filterReader; public SimpleFluidFilter(ItemStack stack) { - this.filterReader = new SimpleFluidFilterReader(stack, MAX_FLUID_SLOTS); - setFilterReader(this.filterReader); + filterReader = new SimpleFluidFilterReader(stack, MAX_FLUID_SLOTS); + } + + @Override + public SimpleFluidFilterReader getFilterReader() { + return filterReader; } public void configureFilterTanks(int amount) { diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 39eb30a95fd..8bb4c556753 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -39,8 +39,12 @@ public class SimpleItemFilter extends BaseFilter { private final SimpleItemFilterReader filterReader; public SimpleItemFilter(ItemStack stack) { - this.filterReader = new SimpleItemFilterReader(stack, MAX_MATCH_SLOTS); - setFilterReader(this.filterReader); + filterReader = new SimpleItemFilterReader(stack, MAX_MATCH_SLOTS); + } + + @Override + public SimpleItemFilterReader getFilterReader() { + return filterReader; } @Override diff --git a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java index 489733ad668..651c768e4dd 100644 --- a/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SmartItemFilter.java @@ -35,8 +35,12 @@ public class SmartItemFilter extends BaseFilter { private final SmartItemFilterReader filterReader; public SmartItemFilter(ItemStack stack) { - this.filterReader = new SmartItemFilterReader(stack); - setFilterReader(this.filterReader); + filterReader = new SmartItemFilterReader(stack); + } + + @Override + public SmartItemFilterReader getFilterReader() { + return filterReader; } public SmartFilteringMode getFilteringMode() { diff --git a/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java b/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java index ee389cb4e1c..c43d7487467 100644 --- a/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java +++ b/src/main/java/gregtech/common/covers/filter/WidgetGroupFluidFilter.java @@ -68,7 +68,7 @@ public void readUpdateInfo(int id, PacketBuffer buffer) { GTLog.logger.warn(e); return; } - this.fluidFilter = FilterTypeRegistry.getFilterForStack(stack); + this.fluidFilter = BaseFilter.getFilterFromStack(stack); this.fluidFilter.initUI(this::addWidget); } } else if (id == 3) { diff --git a/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java b/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java index 8493b8423eb..9f26302fb2f 100644 --- a/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/WidgetGroupItemFilter.java @@ -60,7 +60,7 @@ public void readUpdateInfo(int id, PacketBuffer buffer) { if (buffer.readBoolean()) { // int filterId = buffer.readVarInt(); try { - this.itemFilter = FilterTypeRegistry.getFilterForStack(buffer.readItemStack()); + this.itemFilter = BaseFilter.getFilterFromStack(buffer.readItemStack()); this.itemFilter.initUI(this::addWidget); this.itemFilter.setMaxTransferSize(maxStackSize); } catch (IOException e) { 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 e5e3723d89f..8e894949511 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -11,12 +11,12 @@ import org.jetbrains.annotations.NotNull; -public abstract class BaseFilterReader implements FilterReader, INBTSerializable { +public class BaseFilterReader implements FilterReader, INBTSerializable { - protected final ItemStack container; + protected ItemStack container; private IDirtyNotifiable dirtyNotifiable; private final int size; - protected int maxTransferRate = 1; + private int maxTransferRate = 1; protected static final String BLACKLIST = "IsBlacklist"; protected static final String FILTER_CONTENTS = "FilterSlots"; @@ -25,10 +25,16 @@ 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; + } + public @NotNull NBTTagList getInventoryNbt() { var nbt = getStackTag(); if (!nbt.hasKey(FILTER_CONTENTS)) { diff --git a/src/main/java/gregtech/common/covers/filter/readers/FilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/FilterReader.java index 8f5c9b0b4a6..34efe945268 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/FilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/FilterReader.java @@ -10,6 +10,8 @@ public interface FilterReader { ItemStack getContainer(); + void readStack(ItemStack stack); + @NotNull NBTTagList getInventoryNbt(); diff --git a/src/main/java/gregtech/common/items/MetaItem1.java b/src/main/java/gregtech/common/items/MetaItem1.java index 3fe8e1ecf4c..e673e2e014a 100644 --- a/src/main/java/gregtech/common/items/MetaItem1.java +++ b/src/main/java/gregtech/common/items/MetaItem1.java @@ -26,6 +26,11 @@ 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.OreDictionaryItemFilter; +import gregtech.common.covers.filter.SimpleFluidFilter; +import gregtech.common.covers.filter.SimpleItemFilter; +import gregtech.common.covers.filter.SmartItemFilter; import gregtech.common.creativetab.GTCreativeTabs; import gregtech.common.entities.GTBoatEntity.GTBoatType; import gregtech.common.items.behaviors.ClipboardBehavior; @@ -584,17 +589,17 @@ public void registerSubItems() { // Filters: ID 290-300 FLUID_FILTER = addItem(290, "fluid_filter") .setMaterialInfo(new ItemMaterialInfo(new MaterialStack(Materials.Zinc, M * 2))) - .addComponents(new SimpleFluidFilterUIManager()); + .addComponents(new SimpleFluidFilterUIManager(), IFilter.Factory.of(SimpleFluidFilter::new)); ITEM_FILTER = addItem(291, "item_filter") .setMaterialInfo(new ItemMaterialInfo(new MaterialStack(Materials.Zinc, M * 2), new MaterialStack(Materials.Steel, M))) - .addComponents(new SimpleFilterUIManager()); + .addComponents(new SimpleFilterUIManager(), IFilter.Factory.of(SimpleItemFilter::new)); ORE_DICTIONARY_FILTER = addItem(292, "ore_dictionary_filter") .setMaterialInfo(new ItemMaterialInfo(new MaterialStack(Materials.Zinc, M * 2))) - .addComponents(new OreDictFilterUIManager()); + .addComponents(new OreDictFilterUIManager(), IFilter.Factory.of(OreDictionaryItemFilter::new)); SMART_FILTER = addItem(293, "smart_item_filter") .setMaterialInfo(new ItemMaterialInfo(new MaterialStack(Materials.Zinc, M * 3 / 2))) - .addComponents(new SmartFilterUIManager()); + .addComponents(new SmartFilterUIManager(), IFilter.Factory.of(SmartItemFilter::new)); // Functional Covers: ID 301-330 COVER_MACHINE_CONTROLLER = addItem(301, "cover.controller"); 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 448e2d71088..2656db4758a 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/OreDictFilterUIManager.java @@ -1,6 +1,6 @@ package gregtech.common.items.behaviors.filter; -import gregtech.common.covers.filter.FilterTypeRegistry; +import gregtech.common.covers.filter.BaseFilter; import com.cleanroommc.modularui.factory.HandGuiData; import com.cleanroommc.modularui.screen.ModularPanel; @@ -11,7 +11,7 @@ public class OreDictFilterUIManager extends BaseFilterUIManager { @Override public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { - var filter = FilterTypeRegistry.getFilterForStack(guiData.getUsedItemStack()); + var filter = BaseFilter.getFilterFromStack(guiData.getUsedItemStack()); return createBasePanel(filter.getContainerStack()).height(160) .child(filter.createWidgets(guiSyncManager).top(22).margin(7, 0)) .child(SlotGroupWidget.playerInventory().bottom(7).left(7)); 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 5a28bf98f7a..2c3b5da39cd 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFilterUIManager.java @@ -1,6 +1,6 @@ package gregtech.common.items.behaviors.filter; -import gregtech.common.covers.filter.FilterTypeRegistry; +import gregtech.common.covers.filter.BaseFilter; import com.cleanroommc.modularui.factory.HandGuiData; import com.cleanroommc.modularui.screen.ModularPanel; @@ -11,7 +11,7 @@ public class SimpleFilterUIManager extends BaseFilterUIManager { @Override public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { - var filter = FilterTypeRegistry.getFilterForStack(guiData.getUsedItemStack()); + var filter = BaseFilter.getFilterFromStack(guiData.getUsedItemStack()); return createBasePanel(filter.getContainerStack()).padding(4).height(166) .child(filter.createWidgets(guiSyncManager).top(22).left(7)) .child(SlotGroupWidget.playerInventory().left(7)); 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 7d95397282c..df66b9c5bca 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SimpleFluidFilterUIManager.java @@ -1,6 +1,6 @@ package gregtech.common.items.behaviors.filter; -import gregtech.common.covers.filter.FilterTypeRegistry; +import gregtech.common.covers.filter.BaseFilter; import com.cleanroommc.modularui.factory.HandGuiData; import com.cleanroommc.modularui.screen.ModularPanel; @@ -11,7 +11,7 @@ public class SimpleFluidFilterUIManager extends BaseFilterUIManager { @Override public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { - var filter = FilterTypeRegistry.getFilterForStack(guiData.getUsedItemStack()); + var filter = BaseFilter.getFilterFromStack(guiData.getUsedItemStack()); return createBasePanel(filter.getContainerStack()).padding(4).height(166) .child(filter.createWidgets(guiSyncManager).top(22).left(7)) .child(SlotGroupWidget.playerInventory().left(7)); 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 5522925f549..033fbb2e109 100644 --- a/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java +++ b/src/main/java/gregtech/common/items/behaviors/filter/SmartFilterUIManager.java @@ -1,6 +1,6 @@ package gregtech.common.items.behaviors.filter; -import gregtech.common.covers.filter.FilterTypeRegistry; +import gregtech.common.covers.filter.BaseFilter; import com.cleanroommc.modularui.factory.HandGuiData; import com.cleanroommc.modularui.screen.ModularPanel; @@ -11,7 +11,7 @@ public class SmartFilterUIManager extends BaseFilterUIManager { @Override public ModularPanel buildUI(HandGuiData guiData, GuiSyncManager guiSyncManager) { - var filter = FilterTypeRegistry.getFilterForStack(guiData.getUsedItemStack()); + var filter = BaseFilter.getFilterFromStack(guiData.getUsedItemStack()); return createBasePanel(filter.getContainerStack()).height(166) .child(filter.createWidgets(guiSyncManager).left(7).top(22)) .child(SlotGroupWidget.playerInventory().bottom(7).left(7)); diff --git a/src/main/java/gregtech/core/CoreModule.java b/src/main/java/gregtech/core/CoreModule.java index 46eeb3e8335..c05116355f7 100644 --- a/src/main/java/gregtech/core/CoreModule.java +++ b/src/main/java/gregtech/core/CoreModule.java @@ -43,7 +43,6 @@ import gregtech.common.command.CommandShaders; import gregtech.common.command.worldgen.CommandWorldgen; import gregtech.common.covers.CoverBehaviors; -import gregtech.common.covers.filter.FilterTypeRegistry; import gregtech.common.covers.filter.oreglob.impl.OreGlobParser; import gregtech.common.items.MetaItems; import gregtech.common.items.ToolItems; @@ -255,7 +254,6 @@ public void init(FMLInitializationEvent event) { WorldGenRegistry.INSTANCE.initializeRegistry(); LootTableHelper.initialize(); - FilterTypeRegistry.init(); /* Start Cover Definition Registration */ COVER_REGISTRY.unfreeze(); From 91b9209397211cc77927593b80b2045210743a26 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 23 Mar 2024 16:29:06 -0700 Subject: [PATCH 252/260] yeet FilterTypeRegistry.java --- .../covers/filter/FilterTypeRegistry.java | 64 ------------------- 1 file changed, 64 deletions(-) delete mode 100644 src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java diff --git a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java b/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java deleted file mode 100644 index fa95ba013f1..00000000000 --- a/src/main/java/gregtech/common/covers/filter/FilterTypeRegistry.java +++ /dev/null @@ -1,64 +0,0 @@ -package gregtech.common.covers.filter; - -import gregtech.api.items.metaitem.MetaItem; - -import net.minecraft.item.ItemStack; - -import org.jetbrains.annotations.ApiStatus; - -@Deprecated -@ApiStatus.ScheduledForRemoval(inVersion = "2.10") -public class FilterTypeRegistry { - - public static void init() {} - - /** - * @deprecated add filter behavior as a meta item component - */ - @Deprecated - @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public static void registerFluidFilter(int id, IFilter.Factory filterFactory, ItemStack itemStack) {} - - /** - * @deprecated add filter behavior as a meta item component - */ - @Deprecated - @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public static void registerItemFilter(int id, IFilter.Factory filterFactory, ItemStack itemStack) {} - - /** - * @deprecated use {@link MetaItem.MetaValueItem#getFilterFactory()} - */ - @Deprecated - @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public static int getIdForItemFilter(BaseFilter itemFilter) { - return 0; - } - - /** - * @deprecated use {@link MetaItem.MetaValueItem#getFilterFactory()} - */ - @Deprecated - @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public static int getIdForFluidFilter(BaseFilter fluidFilter) { - return 0; - } - - /** - * @deprecated use {@link MetaItem.MetaValueItem#getFilterFactory()} - */ - @Deprecated - @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public static BaseFilter createItemFilterById(int filterId) { - return BaseFilter.ERROR_FILTER; - } - - /** - * @deprecated use {@link MetaItem.MetaValueItem#getFilterFactory()} - */ - @Deprecated - @ApiStatus.ScheduledForRemoval(inVersion = "2.10") - public static BaseFilter createFluidFilterById(int filterId) { - return BaseFilter.ERROR_FILTER; - } -} From bdfa1da5193f8a2a479d24c995f3edfe5084dd47 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 24 Mar 2024 00:22:56 -0700 Subject: [PATCH 253/260] small change --- .../java/gregtech/common/covers/filter/IFilter.java | 11 ++++++----- src/main/java/gregtech/common/items/MetaItem1.java | 8 ++++---- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/main/java/gregtech/common/covers/filter/IFilter.java b/src/main/java/gregtech/common/covers/filter/IFilter.java index 3af1108eb48..b707db08a75 100644 --- a/src/main/java/gregtech/common/covers/filter/IFilter.java +++ b/src/main/java/gregtech/common/covers/filter/IFilter.java @@ -64,14 +64,15 @@ enum FilterType { FLUID } - @FunctionalInterface() + // 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); - - static Factory of(Factory factory) { - return factory; - } } } diff --git a/src/main/java/gregtech/common/items/MetaItem1.java b/src/main/java/gregtech/common/items/MetaItem1.java index e673e2e014a..23c6f54c761 100644 --- a/src/main/java/gregtech/common/items/MetaItem1.java +++ b/src/main/java/gregtech/common/items/MetaItem1.java @@ -589,17 +589,17 @@ public void registerSubItems() { // Filters: ID 290-300 FLUID_FILTER = addItem(290, "fluid_filter") .setMaterialInfo(new ItemMaterialInfo(new MaterialStack(Materials.Zinc, M * 2))) - .addComponents(new SimpleFluidFilterUIManager(), IFilter.Factory.of(SimpleFluidFilter::new)); + .addComponents(new SimpleFluidFilterUIManager(), IFilter.factory(SimpleFluidFilter::new)); ITEM_FILTER = addItem(291, "item_filter") .setMaterialInfo(new ItemMaterialInfo(new MaterialStack(Materials.Zinc, M * 2), new MaterialStack(Materials.Steel, M))) - .addComponents(new SimpleFilterUIManager(), IFilter.Factory.of(SimpleItemFilter::new)); + .addComponents(new SimpleFilterUIManager(), IFilter.factory(SimpleItemFilter::new)); ORE_DICTIONARY_FILTER = addItem(292, "ore_dictionary_filter") .setMaterialInfo(new ItemMaterialInfo(new MaterialStack(Materials.Zinc, M * 2))) - .addComponents(new OreDictFilterUIManager(), IFilter.Factory.of(OreDictionaryItemFilter::new)); + .addComponents(new OreDictFilterUIManager(), IFilter.factory(OreDictionaryItemFilter::new)); SMART_FILTER = addItem(293, "smart_item_filter") .setMaterialInfo(new ItemMaterialInfo(new MaterialStack(Materials.Zinc, M * 3 / 2))) - .addComponents(new SmartFilterUIManager(), IFilter.Factory.of(SmartItemFilter::new)); + .addComponents(new SmartFilterUIManager(), IFilter.factory(SmartItemFilter::new)); // Functional Covers: ID 301-330 COVER_MACHINE_CONTROLLER = addItem(301, "cover.controller"); From 6335a05b4ae92253b3d9c850a69dffe63b4e4fd2 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 24 Mar 2024 18:47:58 -0700 Subject: [PATCH 254/260] fix legacy nbt reading for filter as cover --- .../java/gregtech/common/covers/CoverFluidFilter.java | 8 +++++++- src/main/java/gregtech/common/covers/CoverItemFilter.java | 8 +++++++- .../covers/filter/readers/SimpleItemFilterReader.java | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index db5a6081e2e..a58cd563003 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -191,7 +191,13 @@ public void writeToNBT(@NotNull NBTTagCompound tagCompound) { public void readFromNBT(@NotNull NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); this.filterMode = FluidFilterMode.values()[tagCompound.getInteger("FilterMode")]; - this.fluidFilterContainer.deserializeNBT(tagCompound.getCompoundTag("Filter")); + var filterTag = tagCompound.getCompoundTag("Filter"); + if (!filterTag.hasKey("FilterInventory")) { + this.fluidFilterContainer.setFilterStack(getDefinition().getDropItemStack()); + this.fluidFilterContainer.getFilter().readFromNBT(filterTag); + } else { + this.fluidFilterContainer.deserializeNBT(filterTag); + } } private class FluidHandlerFiltered extends FluidHandlerDelegate { diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 150c98465e3..4eda608cb27 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -179,7 +179,13 @@ public void writeToNBT(@NotNull NBTTagCompound tagCompound) { public void readFromNBT(@NotNull NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); this.filterMode = ItemFilterMode.values()[tagCompound.getInteger("FilterMode")]; - this.itemFilterContainer.deserializeNBT(tagCompound.getCompoundTag("Filter")); + var filterTag = tagCompound.getCompoundTag("Filter"); + if (!filterTag.hasKey("FilterInventory")) { + this.itemFilterContainer.setFilterStack(getDefinition().getDropItemStack()); + this.itemFilterContainer.getFilter().readFromNBT(filterTag); + } else { + this.itemFilterContainer.deserializeNBT(filterTag); + } } @Override 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 a10b9e2f065..dccd7d24ca6 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java @@ -170,7 +170,6 @@ public void deserializeNBT(NBTTagCompound nbt) { if (stack.isEmpty()) continue; this.setStackInSlot(i, stack); } - nbt.removeTag(LEGACY_ITEM_KEY); } } } From 0654d1b62c4eba6939172f8ddbd166e79784ddc4 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 27 Mar 2024 13:32:42 -0700 Subject: [PATCH 255/260] read blacklist correctly --- src/main/java/gregtech/common/covers/CoverFluidFilter.java | 1 + src/main/java/gregtech/common/covers/CoverItemFilter.java | 1 + 2 files changed, 2 insertions(+) diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index a58cd563003..44f0a42d7ef 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -194,6 +194,7 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { var filterTag = tagCompound.getCompoundTag("Filter"); if (!filterTag.hasKey("FilterInventory")) { this.fluidFilterContainer.setFilterStack(getDefinition().getDropItemStack()); + this.fluidFilterContainer.setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); this.fluidFilterContainer.getFilter().readFromNBT(filterTag); } else { this.fluidFilterContainer.deserializeNBT(filterTag); diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 4eda608cb27..b08985b42a9 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -182,6 +182,7 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { var filterTag = tagCompound.getCompoundTag("Filter"); if (!filterTag.hasKey("FilterInventory")) { this.itemFilterContainer.setFilterStack(getDefinition().getDropItemStack()); + this.itemFilterContainer.setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); this.itemFilterContainer.getFilter().readFromNBT(filterTag); } else { this.itemFilterContainer.deserializeNBT(filterTag); From bed55db4c65f69d5b9bed55198ee2a2759c08717 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 28 Mar 2024 11:49:57 -0700 Subject: [PATCH 256/260] The Great NBT re-reading of 2024 --- .../gregtech/common/covers/CoverConveyor.java | 1 + .../common/covers/CoverFluidFilter.java | 4 +-- .../common/covers/CoverFluidRegulator.java | 5 ++-- .../covers/CoverFluidVoidingAdvanced.java | 3 ++- .../common/covers/CoverItemFilter.java | 5 ++-- .../covers/CoverItemVoidingAdvanced.java | 3 ++- .../gregtech/common/covers/CoverPump.java | 7 ++--- .../common/covers/CoverRoboticArm.java | 4 ++- .../common/covers/filter/BaseFilter.java | 11 ++++++-- .../covers/filter/BaseFilterContainer.java | 20 ++++++++++---- .../common/covers/filter/IFilter.java | 1 - .../covers/filter/SimpleItemFilter.java | 3 +++ .../filter/readers/BaseFilterReader.java | 6 +++++ .../filter/readers/OreDictFilterReader.java | 16 ++++++++++++ .../readers/SimpleFluidFilterReader.java | 14 ++++++---- .../readers/SimpleItemFilterReader.java | 26 ++++++++++++++++--- .../filter/readers/SmartItemFilterReader.java | 7 +++++ 17 files changed, 105 insertions(+), 31 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 5ea6423abcd..127c852fb83 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -674,6 +674,7 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { this.isWorkingAllowed = tagCompound.getBoolean("WorkingAllowed"); this.manualImportExportMode = ManualImportExportMode.VALUES[tagCompound.getInteger("ManualImportExportMode")]; this.itemFilterContainer.deserializeNBT(tagCompound.getCompoundTag("Filter")); + this.itemFilterContainer.handleLegacyNBT(tagCompound.getCompoundTag("Filter")); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index 44f0a42d7ef..648968c90dc 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -194,11 +194,11 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { var filterTag = tagCompound.getCompoundTag("Filter"); if (!filterTag.hasKey("FilterInventory")) { this.fluidFilterContainer.setFilterStack(getDefinition().getDropItemStack()); - this.fluidFilterContainer.setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); - this.fluidFilterContainer.getFilter().readFromNBT(filterTag); } else { this.fluidFilterContainer.deserializeNBT(filterTag); } + + this.fluidFilterContainer.handleLegacyNBT(tagCompound); } private class FluidHandlerFiltered extends FluidHandlerDelegate { diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index d41152f4721..dc55702148d 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -306,8 +306,9 @@ public void writeToNBT(@NotNull NBTTagCompound tagCompound) { @Override public void readFromNBT(@NotNull NBTTagCompound tagCompound) { - super.readFromNBT(tagCompound); this.transferMode = TransferMode.VALUES[tagCompound.getInteger("TransferMode")]; + this.fluidFilterContainer.setMaxTransferSize(this.transferMode.maxStackSize); + super.readFromNBT(tagCompound); // legacy NBT tag if (!tagCompound.hasKey("filterv2") && tagCompound.hasKey("TransferAmount")) { if (this.fluidFilterContainer.getFilter() instanceof SimpleFluidFilter simpleFluidFilter) { @@ -315,8 +316,6 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { .configureFilterTanks(tagCompound.getInteger("TransferAmount")); } } - // this.transferAmount = tagCompound.getInteger("TransferAmount"); - this.fluidFilterContainer.setTransferSize(tagCompound.getInteger("TransferAmount")); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index 35832c85656..3af29c03b3b 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -168,8 +168,9 @@ public void writeToNBT(@NotNull NBTTagCompound tagCompound) { @Override public void readFromNBT(@NotNull NBTTagCompound tagCompound) { - super.readFromNBT(tagCompound); this.voidingMode = VoidingMode.VALUES[tagCompound.getInteger("VoidingMode")]; + this.fluidFilterContainer.setMaxTransferSize(this.voidingMode.maxStackSize); this.transferAmount = tagCompound.getInteger("TransferAmount"); + super.readFromNBT(tagCompound); } } diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index b08985b42a9..909fb09e481 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -178,15 +178,14 @@ public void writeToNBT(@NotNull NBTTagCompound tagCompound) { @Override public void readFromNBT(@NotNull NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); - this.filterMode = ItemFilterMode.values()[tagCompound.getInteger("FilterMode")]; + this.filterMode = ItemFilterMode.VALUES[tagCompound.getInteger("FilterMode")]; var filterTag = tagCompound.getCompoundTag("Filter"); if (!filterTag.hasKey("FilterInventory")) { this.itemFilterContainer.setFilterStack(getDefinition().getDropItemStack()); - this.itemFilterContainer.setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); - this.itemFilterContainer.getFilter().readFromNBT(filterTag); } else { this.itemFilterContainer.deserializeNBT(filterTag); } + this.itemFilterContainer.handleLegacyNBT(tagCompound); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java index eaebd680eb5..fe7a52f64e5 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java @@ -162,7 +162,8 @@ public void writeToNBT(NBTTagCompound tagCompound) { @Override public void readFromNBT(NBTTagCompound tagCompound) { - super.readFromNBT(tagCompound); this.voidingMode = VoidingMode.VALUES[tagCompound.getInteger("VoidMode")]; + this.itemFilterContainer.setMaxTransferSize(this.voidingMode.maxStackSize); + super.readFromNBT(tagCompound); } } diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 1b2f9be4f95..0726f01bc7d 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -390,11 +390,12 @@ public void writeToNBT(@NotNull NBTTagCompound tagCompound) { public void readFromNBT(@NotNull NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); this.transferRate = tagCompound.getInteger("TransferRate"); - this.pumpMode = PumpMode.values()[tagCompound.getInteger("PumpMode")]; - this.distributionMode = DistributionMode.values()[tagCompound.getInteger("DistributionMode")]; + this.pumpMode = PumpMode.VALUES[tagCompound.getInteger("PumpMode")]; + this.distributionMode = DistributionMode.VALUES[tagCompound.getInteger("DistributionMode")]; this.isWorkingAllowed = tagCompound.getBoolean("WorkingAllowed"); - this.manualImportExportMode = ManualImportExportMode.values()[tagCompound.getInteger("ManualImportExportMode")]; + this.manualImportExportMode = ManualImportExportMode.VALUES[tagCompound.getInteger("ManualImportExportMode")]; this.fluidFilterContainer.deserializeNBT(tagCompound.getCompoundTag("Filter")); + this.fluidFilterContainer.handleLegacyNBT(tagCompound); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index de62fb23252..cadbe6c3a4b 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -1,5 +1,7 @@ package gregtech.common.covers; +import com.cleanroommc.modularui.screen.PanelManager; + import gregtech.api.capability.GregtechDataCodes; import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; @@ -256,8 +258,8 @@ public void writeToNBT(NBTTagCompound tagCompound) { @Override public void readFromNBT(NBTTagCompound tagCompound) { - super.readFromNBT(tagCompound); this.transferMode = TransferMode.VALUES[tagCompound.getInteger("TransferMode")]; this.itemFilterContainer.setMaxTransferSize(this.transferMode.maxStackSize); + super.readFromNBT(tagCompound); } } diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilter.java b/src/main/java/gregtech/common/covers/filter/BaseFilter.java index 0ac806d197b..fc8d68129c7 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilter.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -8,6 +8,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; import net.minecraftforge.fluids.FluidStack; import com.cleanroommc.modularui.api.drawable.IKey; @@ -22,6 +23,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.io.IOException; + public abstract class BaseFilter implements IFilter { public static final BaseFilter ERROR_FILTER = new BaseFilter() { @@ -171,8 +174,12 @@ public final void markDirty() { } } - public void readFromNBT(NBTTagCompound tagCompound) { - this.getFilterReader().deserializeNBT(tagCompound); + public void readFromNBT(NBTTagCompound tag) { + this.getFilterReader().deserializeNBT(tag); markDirty(); } + + public void writeInitialSyncData(PacketBuffer packetBuffer) {} + + public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) {} } diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index e3ed666aaa1..1b6853dbcfb 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -187,7 +187,7 @@ public void setTransferSize(int transferSize) { public NBTTagCompound serializeNBT() { NBTTagCompound tagCompound = new NBTTagCompound(); tagCompound.setTag("FilterInventory", super.serializeNBT()); - tagCompound.setInteger("MaxStackSize", getMaxTransferSize()); +// tagCompound.setInteger("MaxStackSize", getMaxTransferSize()); tagCompound.setInteger("TransferStackSize", getTransferSize()); return tagCompound; } @@ -195,10 +195,16 @@ public NBTTagCompound serializeNBT() { @Override public void deserializeNBT(NBTTagCompound nbt) { super.deserializeNBT(nbt.getCompoundTag("FilterInventory")); - setFilter(getFilterStack().isEmpty() ? null : BaseFilter.getFilterFromStack(getFilterStack())); - if (hasFilter()) getFilter().readFromNBT(nbt); - this.maxTransferSize = nbt.getInteger("MaxStackSize"); - this.transferSize = nbt.getInteger("TransferStackSize"); + setFilter(BaseFilter.getFilterFromStack(getFilterStack())); + if (nbt.hasKey("TransferStackSize")) + this.transferSize = nbt.getInteger("TransferStackSize"); + + } + + public void handleLegacyNBT(NBTTagCompound nbt) { + if (hasFilter()) { + getFilter().getFilterReader().handleLegacyNBT(nbt); + } } /** Uses Cleanroom MUI */ @@ -252,6 +258,8 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) public void writeInitialSyncData(PacketBuffer packetBuffer) { packetBuffer.writeItemStack(this.getFilterStack()); + packetBuffer.writeInt(this.maxTransferSize); + packetBuffer.writeInt(this.transferSize); } public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { @@ -260,5 +268,7 @@ public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) { stack = packetBuffer.readItemStack(); } catch (IOException ignore) {} this.setFilterStack(stack); + this.setMaxTransferSize(packetBuffer.readInt()); + this.setTransferSize(packetBuffer.readInt()); } } diff --git a/src/main/java/gregtech/common/covers/filter/IFilter.java b/src/main/java/gregtech/common/covers/filter/IFilter.java index b707db08a75..06345143982 100644 --- a/src/main/java/gregtech/common/covers/filter/IFilter.java +++ b/src/main/java/gregtech/common/covers/filter/IFilter.java @@ -54,7 +54,6 @@ default int getTransferLimit(int slot, int transferSize) { return transferSize; } - /** Read legacy NBT here */ void readFromNBT(NBTTagCompound tagCompound); FilterType getType(); diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 8bb4c556753..44369bf3f6f 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -11,9 +11,11 @@ import gregtech.common.covers.CoverRoboticArm; import gregtech.common.covers.TransferMode; import gregtech.common.covers.VoidingMode; +import gregtech.common.covers.filter.readers.BaseFilterReader; import gregtech.common.covers.filter.readers.SimpleItemFilterReader; import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; import net.minecraftforge.items.IItemHandler; import com.cleanroommc.modularui.api.drawable.IKey; @@ -31,6 +33,7 @@ import com.cleanroommc.modularui.widgets.slot.SlotGroup; import org.jetbrains.annotations.NotNull; +import java.util.Arrays; import java.util.function.Consumer; public class SimpleItemFilter extends BaseFilter { 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 8e894949511..eee6a16a52a 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/BaseFilterReader.java @@ -19,6 +19,7 @@ public class BaseFilterReader implements FilterReader, INBTSerializable Date: Sat, 30 Mar 2024 13:47:08 -0700 Subject: [PATCH 257/260] remove deprecated method fix missing overlays/buttons --- .../java/gregtech/api/mui/GTGuiTextures.java | 4 ++ .../common/covers/CoverEnderFluidLink.java | 41 +++---------------- 2 files changed, 10 insertions(+), 35 deletions(-) diff --git a/src/main/java/gregtech/api/mui/GTGuiTextures.java b/src/main/java/gregtech/api/mui/GTGuiTextures.java index eec251ff7e4..d585285efc2 100644 --- a/src/main/java/gregtech/api/mui/GTGuiTextures.java +++ b/src/main/java/gregtech/api/mui/GTGuiTextures.java @@ -200,6 +200,10 @@ public static class IDs { "textures/gui/overlay/filter_mode_overlay.png", 16, 48, 16, 16, true); + public static final UITexture[] PRIVATE_MODE_BUTTON = slice( + "textures/gui/widget/button_public_private.png", + 18, 36, 18, 18, true); + // todo bronze/steel/primitive fluid slots? // SLOT OVERLAYS diff --git a/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java b/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java index 006d9f3676f..934076c110e 100644 --- a/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java +++ b/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java @@ -163,40 +163,6 @@ public void openUI(EntityPlayerMP player) { isColorTemp = false; } - @Override - public ModularUI createUI(EntityPlayer player) { - gregtech.api.gui.widgets.WidgetGroup widgetGroup = new gregtech.api.gui.widgets.WidgetGroup(); - widgetGroup.addWidget(new gregtech.api.gui.widgets.LabelWidget(10, 5, "cover.ender_fluid_link.title")); - widgetGroup.addWidget( - new gregtech.api.gui.widgets.ToggleButtonWidget(12, 18, 18, 18, GuiTextures.BUTTON_PUBLIC_PRIVATE, - this::isPrivate, this::setPrivate) - .setTooltipText("cover.ender_fluid_link.private.tooltip")); - widgetGroup.addWidget(new gregtech.api.gui.widgets.SyncableColorRectWidget(35, 18, 18, 18, () -> color) - .setBorderWidth(1) - .drawCheckerboard(4, 4)); - widgetGroup.addWidget(new gregtech.api.gui.widgets.TextFieldWidget(58, 13, 58, 18, true, - this::getColorStr, this::updateColor, 8) - .setValidator(str -> COLOR_INPUT_PATTERN.matcher(str).matches())); - widgetGroup.addWidget(new gregtech.api.gui.widgets.TankWidget(this.linkedTank, 123, 18, 18, 18) - .setContainerClicking(true, true) - .setBackgroundTexture(GuiTextures.FLUID_SLOT).setAlwaysShowFull(true)); - widgetGroup.addWidget(new gregtech.api.gui.widgets.ImageWidget(147, 19, 16, 16) - .setImage(GuiTextures.INFO_ICON) - .setPredicate(() -> isColorTemp) - .setTooltip("cover.ender_fluid_link.incomplete_hex") - .setIgnoreColor(true)); - widgetGroup.addWidget(new gregtech.api.gui.widgets.CycleButtonWidget(10, 42, 75, 18, - CoverPump.PumpMode.class, this::getPumpMode, this::setPumpMode)); - widgetGroup.addWidget(new gregtech.api.gui.widgets.CycleButtonWidget(92, 42, 75, 18, - this::isIoEnabled, this::setIoEnabled, "cover.ender_fluid_link.iomode.disabled", - "cover.ender_fluid_link.iomode.enabled")); - this.fluidFilter.initUI(65, widgetGroup::addWidget); - return ModularUI.builder(GuiTextures.BACKGROUND, 176, 221) - .widget(widgetGroup) - .bindPlayerInventory(player.inventory, 139) - .build(this, player); - } - @Override public boolean usesMui2() { return true; @@ -235,6 +201,10 @@ protected Column createWidgets(ModularPanel panel, GuiSyncManager syncManager) { .coverChildrenHeight() .child(new ToggleButton() .tooltip(tooltip -> tooltip.setAutoUpdate(true)) + .background(GTGuiTextures.PRIVATE_MODE_BUTTON[0]) + .hoverBackground(GTGuiTextures.PRIVATE_MODE_BUTTON[0]) + .selectedBackground(GTGuiTextures.PRIVATE_MODE_BUTTON[1]) + .selectedHoverBackground(GTGuiTextures.PRIVATE_MODE_BUTTON[1]) .tooltipBuilder(tooltip -> tooltip.addLine(IKey.lang(this.isPrivate ? "cover.ender_fluid_link.private.tooltip.enabled" : "cover.ender_fluid_link.private.tooltip.disabled"))) @@ -271,7 +241,8 @@ protected Column createWidgets(ModularPanel panel, GuiSyncManager syncManager) { .child(getFluidFilterContainer().initUI(panel, syncManager)) .child(new EnumRowBuilder<>(CoverPump.PumpMode.class) .value(pumpMode) - .lang("Pump Mode") + .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY) + .lang("cover.pump.mode") .build()); } From ec86c143b9031cc3082a52ab013ec5dc37aea33d Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 30 Mar 2024 13:48:18 -0700 Subject: [PATCH 258/260] sbobls --- src/main/java/gregtech/common/covers/CoverEnderFluidLink.java | 2 -- src/main/java/gregtech/common/covers/CoverRoboticArm.java | 2 -- src/main/java/gregtech/common/covers/filter/BaseFilter.java | 2 -- .../gregtech/common/covers/filter/BaseFilterContainer.java | 3 +-- .../java/gregtech/common/covers/filter/SimpleItemFilter.java | 3 --- 5 files changed, 1 insertion(+), 11 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java b/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java index 934076c110e..ffe2f9ed8a0 100644 --- a/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java +++ b/src/main/java/gregtech/common/covers/CoverEnderFluidLink.java @@ -6,8 +6,6 @@ import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverWithUI; import gregtech.api.cover.CoverableView; -import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.ModularUI; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.api.util.FluidTankSwitchShim; diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index cadbe6c3a4b..883fe18f9ec 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -1,7 +1,5 @@ package gregtech.common.covers; -import com.cleanroommc.modularui.screen.PanelManager; - import gregtech.api.capability.GregtechDataCodes; import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverableView; diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilter.java b/src/main/java/gregtech/common/covers/filter/BaseFilter.java index fc8d68129c7..ae72a78626d 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilter.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilter.java @@ -23,8 +23,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.io.IOException; - public abstract class BaseFilter implements IFilter { public static final BaseFilter ERROR_FILTER = new BaseFilter() { diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 1b6853dbcfb..489fd70659d 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -187,7 +187,7 @@ public void setTransferSize(int transferSize) { public NBTTagCompound serializeNBT() { NBTTagCompound tagCompound = new NBTTagCompound(); tagCompound.setTag("FilterInventory", super.serializeNBT()); -// tagCompound.setInteger("MaxStackSize", getMaxTransferSize()); + // tagCompound.setInteger("MaxStackSize", getMaxTransferSize()); tagCompound.setInteger("TransferStackSize", getTransferSize()); return tagCompound; } @@ -198,7 +198,6 @@ public void deserializeNBT(NBTTagCompound nbt) { setFilter(BaseFilter.getFilterFromStack(getFilterStack())); if (nbt.hasKey("TransferStackSize")) this.transferSize = nbt.getInteger("TransferStackSize"); - } public void handleLegacyNBT(NBTTagCompound nbt) { diff --git a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java index 44369bf3f6f..8bb4c556753 100644 --- a/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java +++ b/src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java @@ -11,11 +11,9 @@ import gregtech.common.covers.CoverRoboticArm; import gregtech.common.covers.TransferMode; import gregtech.common.covers.VoidingMode; -import gregtech.common.covers.filter.readers.BaseFilterReader; import gregtech.common.covers.filter.readers.SimpleItemFilterReader; import net.minecraft.item.ItemStack; -import net.minecraft.network.PacketBuffer; import net.minecraftforge.items.IItemHandler; import com.cleanroommc.modularui.api.drawable.IKey; @@ -33,7 +31,6 @@ import com.cleanroommc.modularui.widgets.slot.SlotGroup; import org.jetbrains.annotations.NotNull; -import java.util.Arrays; import java.util.function.Consumer; public class SimpleItemFilter extends BaseFilter { From 411729872216f72b142eb7d6472a33a1293c2302 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 30 Mar 2024 14:01:35 -0700 Subject: [PATCH 259/260] change lang keys --- .../common/covers/detector/CoverDetectorFluidAdvanced.java | 2 +- .../common/covers/detector/CoverDetectorItemAdvanced.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/covers/detector/CoverDetectorFluidAdvanced.java b/src/main/java/gregtech/common/covers/detector/CoverDetectorFluidAdvanced.java index ec3c316c883..56d7eb246c9 100644 --- a/src/main/java/gregtech/common/covers/detector/CoverDetectorFluidAdvanced.java +++ b/src/main/java/gregtech/common/covers/detector/CoverDetectorFluidAdvanced.java @@ -92,7 +92,7 @@ public ModularUI createUI(EntityPlayer player) { // "cover.generic.advanced_detector.invert_label")); group.addWidget( new CycleButtonWidget(10, 3 * (SIZE + PADDING), 4 * SIZE, SIZE, this::isInverted, this::setInverted, - "behaviour.soft_hammer.enabled", "behaviour.soft_hammer.disabled") + "cover.advanced_energy_detector.normal", "cover.advanced_energy_detector.inverted") .setTooltipHoverString("cover.generic.advanced_detector.invert_tooltip")); group.addWidget( new CycleButtonWidget(94, 3 * (SIZE + PADDING), 4 * SIZE, SIZE, this::isLatched, this::setLatched, diff --git a/src/main/java/gregtech/common/covers/detector/CoverDetectorItemAdvanced.java b/src/main/java/gregtech/common/covers/detector/CoverDetectorItemAdvanced.java index c3c59a6a8de..e2475756fd5 100644 --- a/src/main/java/gregtech/common/covers/detector/CoverDetectorItemAdvanced.java +++ b/src/main/java/gregtech/common/covers/detector/CoverDetectorItemAdvanced.java @@ -78,7 +78,7 @@ public ModularUI createUI(EntityPlayer player) { // "cover.generic.advanced_detector.invert_label")); group.addWidget( new CycleButtonWidget(10, 3 * (SIZE + PADDING), 4 * SIZE, SIZE, this::isInverted, this::setInverted, - "behaviour.soft_hammer.enabled", "behaviour.soft_hammer.disabled") + "cover.advanced_energy_detector.normal", "cover.advanced_energy_detector.inverted") .setTooltipHoverString("cover.generic.advanced_detector.invert_tooltip")); // group.addWidget(new LabelWidget(10, 5 + 4 * (SIZE + PADDING), // "cover.generic.advanced_detector.latch_label")); From 77c795a906942ee25f86e0fa9ddf7cf931826796 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 30 Mar 2024 14:11:35 -0700 Subject: [PATCH 260/260] save bucket mode --- src/main/java/gregtech/common/covers/CoverPump.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 0726f01bc7d..e91a59118a6 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -383,6 +383,7 @@ public void writeToNBT(@NotNull NBTTagCompound tagCompound) { tagCompound.setInteger("DistributionMode", distributionMode.ordinal()); tagCompound.setBoolean("WorkingAllowed", isWorkingAllowed); tagCompound.setInteger("ManualImportExportMode", manualImportExportMode.ordinal()); + tagCompound.setInteger("BucketMode", bucketMode.ordinal()); tagCompound.setTag("Filter", fluidFilterContainer.serializeNBT()); } @@ -394,6 +395,7 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { this.distributionMode = DistributionMode.VALUES[tagCompound.getInteger("DistributionMode")]; this.isWorkingAllowed = tagCompound.getBoolean("WorkingAllowed"); this.manualImportExportMode = ManualImportExportMode.VALUES[tagCompound.getInteger("ManualImportExportMode")]; + this.bucketMode = BucketMode.VALUES[tagCompound.getInteger("BucketMode")]; this.fluidFilterContainer.deserializeNBT(tagCompound.getCompoundTag("Filter")); this.fluidFilterContainer.handleLegacyNBT(tagCompound); }