From f6ad59b093a3bed5bc9b68d4789389bf286e639e Mon Sep 17 00:00:00 2001 From: slprime <31038811+slprime@users.noreply.github.com> Date: Thu, 9 Jan 2025 09:53:27 +0200 Subject: [PATCH 1/4] Add 'Hide Item List Until Searching' option (#572) Co-authored-by: slprime Co-authored-by: Martin Robertz Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> (cherry picked from commit 0c0cf37eb0332aad6577c36ac2d8c76ed90ee40a) --- src/main/java/codechicken/nei/BookmarkPanel.java | 2 +- .../java/codechicken/nei/ItemHistoryPanel.java | 13 ++++++++----- src/main/java/codechicken/nei/ItemPanel.java | 4 ++-- src/main/java/codechicken/nei/ItemsGrid.java | 4 ++++ .../java/codechicken/nei/NEIClientConfig.java | 16 ++++++++++++++++ src/main/java/codechicken/nei/PanelWidget.java | 2 +- src/main/java/codechicken/nei/SearchField.java | 8 +++++++- src/main/resources/assets/nei/lang/en_US.lang | 3 +++ 8 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/main/java/codechicken/nei/BookmarkPanel.java b/src/main/java/codechicken/nei/BookmarkPanel.java index a951b2e8f..dc2118315 100644 --- a/src/main/java/codechicken/nei/BookmarkPanel.java +++ b/src/main/java/codechicken/nei/BookmarkPanel.java @@ -2059,7 +2059,7 @@ protected int resizeFooter(GuiContainer gui) { public void setVisible() { super.setVisible(); - if (grid.getPerPage() > 0) { + if (grid.getPerPage() > 0 && getNamespaceSize() > 1) { LayoutManager.addWidget(namespacePrev); LayoutManager.addWidget(namespaceNext); LayoutManager.addWidget(namespaceLabel); diff --git a/src/main/java/codechicken/nei/ItemHistoryPanel.java b/src/main/java/codechicken/nei/ItemHistoryPanel.java index 4c46cf5de..81f2ce96a 100644 --- a/src/main/java/codechicken/nei/ItemHistoryPanel.java +++ b/src/main/java/codechicken/nei/ItemHistoryPanel.java @@ -1,12 +1,11 @@ package codechicken.nei; -import static codechicken.lib.gui.GuiDraw.drawRect; - import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.item.ItemStack; import org.lwjgl.opengl.GL11; +import codechicken.lib.gui.GuiDraw; import codechicken.nei.ItemPanel.ItemPanelSlot; import codechicken.nei.recipe.GuiCraftingRecipe; import codechicken.nei.recipe.GuiRecipe; @@ -22,10 +21,14 @@ public ItemHistoryPanel() { grid = new ItemsGrid(); } + public boolean isEmpty() { + return grid.isEmpty(); + } + public void draw(int mousex, int mousey) { if (NEIClientConfig.getIntSetting("inventory.history.splittingMode") == 0) { - drawRect(x, y, w, h, NEIClientConfig.getSetting("inventory.history.historyColor").getHexValue()); + GuiDraw.drawRect(x, y, w, h, NEIClientConfig.getSetting("inventory.history.historyColor").getHexValue()); } else { drawSplittingArea(x, y, w, h, NEIClientConfig.getSetting("inventory.history.historyColor").getHexValue()); } @@ -44,8 +47,8 @@ public void addItem(ItemStack stack) { grid.realItems.removeIf(historyStack -> StackInfo.equalItemAndNBT(historyStack, stack, true)); grid.realItems.add(0, is); - if (grid.realItems.size() > (grid.rows * grid.columns)) { - grid.realItems.remove(grid.rows * grid.columns); + if (grid.realItems.size() > Math.max(50, grid.rows * grid.columns)) { + grid.realItems.remove(grid.realItems.size() - 1); } grid.onItemsChanged(); diff --git a/src/main/java/codechicken/nei/ItemPanel.java b/src/main/java/codechicken/nei/ItemPanel.java index aa0a065ac..4aea6c22e 100644 --- a/src/main/java/codechicken/nei/ItemPanel.java +++ b/src/main/java/codechicken/nei/ItemPanel.java @@ -482,11 +482,11 @@ public void setVisible() { LayoutManager.addWidget(quantity); } - if (!CollapsibleItems.isEmpty()) { + if (!CollapsibleItems.isEmpty() && !grid.isEmpty()) { LayoutManager.addWidget(toggleGroups); } - if (NEIClientConfig.showHistoryPanelWidget()) { + if (NEIClientConfig.showHistoryPanelWidget() && (!grid.isEmpty() || !historyPanel.isEmpty())) { LayoutManager.addWidget(historyPanel); } } diff --git a/src/main/java/codechicken/nei/ItemsGrid.java b/src/main/java/codechicken/nei/ItemsGrid.java index e518ef39d..138818bf6 100644 --- a/src/main/java/codechicken/nei/ItemsGrid.java +++ b/src/main/java/codechicken/nei/ItemsGrid.java @@ -66,6 +66,10 @@ public int size() { return realItems.size(); } + public boolean isEmpty() { + return realItems.isEmpty(); + } + public int indexOf(ItemStack stackA, boolean useNBT) { for (int idx = 0; idx < realItems.size(); idx++) { diff --git a/src/main/java/codechicken/nei/NEIClientConfig.java b/src/main/java/codechicken/nei/NEIClientConfig.java index 6b9dd5c25..51d1c38d4 100644 --- a/src/main/java/codechicken/nei/NEIClientConfig.java +++ b/src/main/java/codechicken/nei/NEIClientConfig.java @@ -433,6 +433,18 @@ private static void setInventorySearchDefaults(ConfigTagParent tag) { tag.getTag("inventory.search.widgetPosition").setComment("Widget Position").getBooleanValue(true); API.addOption(new OptionToggleButton("inventory.search.widgetPosition", true)); + tag.getTag("inventory.search.hideUntilSearching").setComment("Hide Items Until Searching") + .getBooleanValue(false); + API.addOption(new OptionToggleButton("inventory.search.hideUntilSearching", true) { + + @Override + public boolean onClick(int button) { + super.onClick(button); + ItemList.updateFilter.restart(); + return true; + } + }); + tag.getTag("inventory.search.widgetAutofocus") .setComment( "Focus Search Widget on Open, blurs/unfocuses on mouse move unless typing has started first") @@ -875,6 +887,10 @@ public static boolean showItemQuantityWidget() { return getBooleanSetting("inventory.showItemQuantityWidget"); } + public static boolean hideItemsUntilSearching() { + return getBooleanSetting("inventory.search.hideUntilSearching"); + } + public static boolean isSearchWidgetCentered() { return getBooleanSetting("inventory.search.widgetPosition"); } diff --git a/src/main/java/codechicken/nei/PanelWidget.java b/src/main/java/codechicken/nei/PanelWidget.java index 9c5774688..0674ae879 100644 --- a/src/main/java/codechicken/nei/PanelWidget.java +++ b/src/main/java/codechicken/nei/PanelWidget.java @@ -171,7 +171,7 @@ protected int resizeHeader(GuiContainer gui) { protected abstract int resizeFooter(GuiContainer gui); public void setVisible() { - if (grid.getPerPage() > 0) { + if (grid.getPerPage() > 0 && !grid.isEmpty()) { LayoutManager.addWidget(pagePrev); LayoutManager.addWidget(pageNext); LayoutManager.addWidget(pageLabel); diff --git a/src/main/java/codechicken/nei/SearchField.java b/src/main/java/codechicken/nei/SearchField.java index 71733cdf6..d5a4cf904 100644 --- a/src/main/java/codechicken/nei/SearchField.java +++ b/src/main/java/codechicken/nei/SearchField.java @@ -144,7 +144,8 @@ public void setVisible(boolean visible) { @Override public int getTextColour() { - if (ItemPanels.itemPanel.getItems().isEmpty()) { + if (ItemPanels.itemPanel.getItems().isEmpty() + && (!this.field.getText().isEmpty() || !NEIClientConfig.hideItemsUntilSearching())) { return focused() ? 0xFFcc3300 : 0xFF993300; } else { return focused() ? 0xFFE0E0E0 : 0xFF909090; @@ -315,6 +316,11 @@ public static String getEscapedSearchText(String text) { @Override public ItemFilter getFilter() { + + if (field.getText().isEmpty() && NEIClientConfig.hideItemsUntilSearching()) { + return new NothingItemFilter(); + } + return ((GuiSearchField) field).getFilter(); } diff --git a/src/main/resources/assets/nei/lang/en_US.lang b/src/main/resources/assets/nei/lang/en_US.lang index d2b9c2977..ecf1f4a7c 100644 --- a/src/main/resources/assets/nei/lang/en_US.lang +++ b/src/main/resources/assets/nei/lang/en_US.lang @@ -216,6 +216,9 @@ nei.options.inventory.search=Search Widget nei.options.inventory.search.widgetPosition=Widget Position nei.options.inventory.search.widgetPosition.true=Center nei.options.inventory.search.widgetPosition.false=Right +nei.options.inventory.search.hideUntilSearching=Hide Until Searching +nei.options.inventory.search.hideUntilSearching.true=Yes +nei.options.inventory.search.hideUntilSearching.false=No nei.options.inventory.search.widgetAutofocus=Autofocus nei.options.inventory.search.widgetAutofocus.0=No nei.options.inventory.search.widgetAutofocus.1=Yes From 4ca147948f1898b7a14e028ed6d7884ea760ab67 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Thu, 9 Jan 2025 21:05:10 +0100 Subject: [PATCH 2/4] update (cherry picked from commit 4dace1f6e545eb0577b0486e390176bd90fe31a8) --- dependencies.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 47d19c113..bcf064173 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,8 +1,8 @@ // Add your dependencies here dependencies { - api('com.github.GTNewHorizons:CodeChickenCore:1.4.0:dev') - implementation('com.github.GTNewHorizons:GTNHLib:0.6.0:dev') + api('com.github.GTNewHorizons:CodeChickenCore:1.4.1:dev') + implementation('com.github.GTNewHorizons:GTNHLib:0.6.1:dev') shadowImplementation('org.apache.commons:commons-csv:1.10.0') } From e19a4e88b6d86e932cf5ceaccc5198c19765314c Mon Sep 17 00:00:00 2001 From: Caedis Date: Fri, 10 Jan 2025 08:42:23 +0000 Subject: [PATCH 3/4] Fix NPE in ItemsTooltipLineHandler (#589) (cherry picked from commit fd08a93554789f81abeda56e3a317e5c3f09524b) --- src/main/java/codechicken/nei/ItemsTooltipLineHandler.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/codechicken/nei/ItemsTooltipLineHandler.java b/src/main/java/codechicken/nei/ItemsTooltipLineHandler.java index 110090029..24ddc58cf 100644 --- a/src/main/java/codechicken/nei/ItemsTooltipLineHandler.java +++ b/src/main/java/codechicken/nei/ItemsTooltipLineHandler.java @@ -123,6 +123,8 @@ private List groupingItemStacks(List items) { for (ItemStack stack : items) { final NBTTagCompound nbTag = StackInfo.itemStackToNBT(stack, true); + if (nbTag == null) continue; + final String GUID = StackInfo.getItemStackGUID(stack); if (!unique.containsKey(GUID)) { From 6e7a3bb16af6c035532d7b25f3bac2746fa9f8ac Mon Sep 17 00:00:00 2001 From: Glease <4586901+Glease@users.noreply.github.com> Date: Fri, 10 Jan 2025 17:11:52 +0800 Subject: [PATCH 4/4] fix memory leak fixes not working for MP (#590) #258 addresses the memory leak in ItemMobSpawner. Unfortunately the clean up handler is not consistently called on every world unloaded. This PR fixes this issue by moving the call out of that if block (cherry picked from commit 31173a1fbd249ce4adaad75feb52b64b33c0daea) --- src/main/java/codechicken/nei/ClientHandler.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/codechicken/nei/ClientHandler.java b/src/main/java/codechicken/nei/ClientHandler.java index 50078c81f..6e51761e4 100644 --- a/src/main/java/codechicken/nei/ClientHandler.java +++ b/src/main/java/codechicken/nei/ClientHandler.java @@ -325,9 +325,8 @@ public void loadWorld(World world, boolean fromServer) { if (!Minecraft.getMinecraft().isSingleplayer()) // wait for server to initiate in singleplayer NEIClientConfig.loadWorld("remote/" + ClientUtils.getServerIP().replace(':', '~')); - - ItemMobSpawner.clearEntityReferences(world); } + ItemMobSpawner.clearEntityReferences(world); lastworld = world; }