From e6174c446a8da7dfa406d453b0edd79be34ad3eb Mon Sep 17 00:00:00 2001 From: slprime <31038811+slprime@users.noreply.github.com> Date: Fri, 9 Oct 2026 21:14:11 +0300 Subject: [PATCH] Add options for vertical line count in chain tooltips (#1068) --- .../nei/ItemsTooltipLineHandler.java | 22 ++++++++----------- .../java/codechicken/nei/NEIClientConfig.java | 9 ++++++++ .../nei/recipe/GuiOverlayButton.java | 2 +- .../recipe/RecipeItemsTooltipLineHandler.java | 16 +++++++++----- .../chain/RecipeChainTooltipLineHandler.java | 5 +++-- src/main/resources/assets/nei/lang/en_US.lang | 1 + 6 files changed, 33 insertions(+), 22 deletions(-) diff --git a/src/main/java/codechicken/nei/ItemsTooltipLineHandler.java b/src/main/java/codechicken/nei/ItemsTooltipLineHandler.java index 9b6575ab..c326b207 100644 --- a/src/main/java/codechicken/nei/ItemsTooltipLineHandler.java +++ b/src/main/java/codechicken/nei/ItemsTooltipLineHandler.java @@ -167,7 +167,7 @@ public class ItemsTooltipLineHandler implements ITooltipLineHandler { protected int activeStackIndex = -1; protected Dimension size = new Dimension(); - protected final boolean showNames; + protected int maxNamedRows = Integer.MAX_VALUE; protected int length = 0; protected int rows = 0; @@ -175,29 +175,25 @@ public class ItemsTooltipLineHandler implements ITooltipLineHandler { protected int gridColumns = 0; protected int gridCount = 0; - public static ItemsTooltipLineHandler grid(String label, List items, int maxRows) { - return new ItemsTooltipLineHandler(label, items, true, maxRows, false); - } - - public static ItemsTooltipLineHandler list(String label, List items, int maxRows) { - return new ItemsTooltipLineHandler(label, items, true, maxRows, true); + public static ItemsTooltipLineHandler of(String label, List items, int maxRows, int maxNamedRows) { + return new ItemsTooltipLineHandler(label, items, true, maxRows, maxNamedRows); } public ItemsTooltipLineHandler(String label, List items) { - this(label, items, true, DEFAULT_MAX_ROWS, false); + this(label, items, true, DEFAULT_MAX_ROWS, 0); } public ItemsTooltipLineHandler(String label, List items, boolean saveStackSize, int maxRows) { - this(label, items, saveStackSize, maxRows, false); + this(label, items, saveStackSize, maxRows, 0); } protected ItemsTooltipLineHandler(String label, List items, boolean saveStackSize, int maxRows, - boolean showNames) { + int maxNamedRows) { this.label = label; this.items = groupingItemStacks(items); this.amountRenderer = saveStackSize ? new TotalAmountRenderer() : new NoAmountRenderer(); this.length = this.items.size(); - this.showNames = showNames; + this.maxNamedRows = maxNamedRows; setMaxRows(maxRows); } @@ -214,7 +210,7 @@ public class ItemsTooltipLineHandler implements ITooltipLineHandler { this.names.clear(); this.nameRows = 0; - if (!this.showNames || !layoutWithNames(maxRows)) { + if (!layoutWithNames(maxRows)) { layoutAsGrid(maxRows); } @@ -228,7 +224,7 @@ public class ItemsTooltipLineHandler implements ITooltipLineHandler { } protected boolean layoutWithNames(int maxRows) { - final int maxNames = this.length <= maxRows ? this.length : maxRows - 1; + final int maxNames = Math.min(this.maxNamedRows, this.length <= maxRows ? this.length : maxRows - 1); final int[] lineWidth = new int[maxNames + 1]; lineWidth[0] = labelWidth(); diff --git a/src/main/java/codechicken/nei/NEIClientConfig.java b/src/main/java/codechicken/nei/NEIClientConfig.java index 1d48960c..732e5bac 100644 --- a/src/main/java/codechicken/nei/NEIClientConfig.java +++ b/src/main/java/codechicken/nei/NEIClientConfig.java @@ -200,6 +200,11 @@ public class NEIClientConfig { tag.getTag("inventory.bookmarks.showRecipeMarkerMode").setComment("Show Recipe Marker").getIntValue(0); API.addOption(new OptionCycled("inventory.bookmarks.showRecipeMarkerMode", 3, true)); + tag.getTag("inventory.bookmarks.maxVerticalTooltipRows") + .setComment("Max rows in vertical crafting chain tooltip lists (0 - disable, always use grid)") + .getIntValue(12); + API.addOption(new OptionIntegerField("inventory.bookmarks.maxVerticalTooltipRows", 0, 50)); + tag.getTag("inventory.bookmarks.recipeMarkerColor").setComment("Color of the icon marker") .getHexValue(0xADADAD); API.addOption( @@ -1111,6 +1116,10 @@ public class NEIClientConfig { return getIntSetting("inventory.bookmarks.showRecipeMarkerMode"); } + public static int getMaxVerticalTooltipRows() { + return getIntSetting("inventory.bookmarks.maxVerticalTooltipRows"); + } + public static boolean showItemQuantityWidget() { return getBooleanSetting("inventory.showItemQuantityWidget"); } diff --git a/src/main/java/codechicken/nei/recipe/GuiOverlayButton.java b/src/main/java/codechicken/nei/recipe/GuiOverlayButton.java index 922960df..a1ecb3af 100644 --- a/src/main/java/codechicken/nei/recipe/GuiOverlayButton.java +++ b/src/main/java/codechicken/nei/recipe/GuiOverlayButton.java @@ -263,7 +263,7 @@ public class GuiOverlayButton extends GuiRecipeButton { if (!items.isEmpty()) { this.missedMaterialsTooltipLineHandler = ItemsTooltipLineHandler - .grid(NEIClientUtils.translate("recipe.overlay.missing"), items, Integer.MAX_VALUE); + .of(NEIClientUtils.translate("recipe.overlay.missing"), items, Integer.MAX_VALUE, 0); } else { this.missedMaterialsTooltipLineHandler = null; } diff --git a/src/main/java/codechicken/nei/recipe/RecipeItemsTooltipLineHandler.java b/src/main/java/codechicken/nei/recipe/RecipeItemsTooltipLineHandler.java index 4fc1478c..00685f51 100644 --- a/src/main/java/codechicken/nei/recipe/RecipeItemsTooltipLineHandler.java +++ b/src/main/java/codechicken/nei/recipe/RecipeItemsTooltipLineHandler.java @@ -21,6 +21,7 @@ import codechicken.nei.ItemStackAmount; import codechicken.nei.ItemsTooltipLineHandler; import codechicken.nei.ItemsTooltipLineHandler.StacksAmountRenderer; import codechicken.nei.ItemsTooltipLineHandler.TotalAmountRenderer; +import codechicken.nei.NEIClientConfig; import codechicken.nei.NEIClientUtils; import codechicken.nei.PositionedStack; import codechicken.nei.api.IGuiContainerOverlay; @@ -163,9 +164,9 @@ public class RecipeItemsTooltipLineHandler extends CompositeTooltipLineHandler { protected void addResultLine(List items, Set approximate) { final String label = NEIClientUtils.translate("recipe.items.results"); - final ItemsTooltipLineHandler line = items.size() == 1 - ? ItemsTooltipLineHandler.list(label, items, maxLineRows()) - : ItemsTooltipLineHandler.grid(label, items, maxLineRows()); + final int maxRows = maxLineRows(); + final int maxNamedRows = items.size() == 1 ? NEIClientConfig.getMaxVerticalTooltipRows() : 0; + final ItemsTooltipLineHandler line = ItemsTooltipLineHandler.of(label, items, maxRows, maxNamedRows); if (line.isEmpty()) { return; @@ -188,7 +189,9 @@ public class RecipeItemsTooltipLineHandler extends CompositeTooltipLineHandler { protected void addRequiredLine(List items, Set approximate) { final String label = NEIClientUtils.translate("recipe.items.ingredients"); - final ItemsTooltipLineHandler line = ItemsTooltipLineHandler.list(label, items, maxLineRows()); + final int maxRows = maxLineRows(); + final int maxNamedRows = NEIClientConfig.getMaxVerticalTooltipRows(); + final ItemsTooltipLineHandler line = ItemsTooltipLineHandler.of(label, items, maxRows, maxNamedRows); if (line.isEmpty()) { return; @@ -211,8 +214,9 @@ public class RecipeItemsTooltipLineHandler extends CompositeTooltipLineHandler { protected void addNeededLine(List items, Set approximate, boolean vertical) { final String label = NEIClientUtils.translate("recipe.items.ingredients_needed"); - final ItemsTooltipLineHandler line = vertical ? ItemsTooltipLineHandler.list(label, items, maxLineRows()) - : ItemsTooltipLineHandler.grid(label, items, maxLineRows()); + final int maxRows = maxLineRows(); + final int maxNamedRows = vertical ? NEIClientConfig.getMaxVerticalTooltipRows() : 0; + final ItemsTooltipLineHandler line = ItemsTooltipLineHandler.of(label, items, maxRows, maxNamedRows); if (line.isEmpty()) { return; diff --git a/src/main/java/codechicken/nei/recipe/chain/RecipeChainTooltipLineHandler.java b/src/main/java/codechicken/nei/recipe/chain/RecipeChainTooltipLineHandler.java index 80d1dfd1..c09ea761 100644 --- a/src/main/java/codechicken/nei/recipe/chain/RecipeChainTooltipLineHandler.java +++ b/src/main/java/codechicken/nei/recipe/chain/RecipeChainTooltipLineHandler.java @@ -25,6 +25,7 @@ import codechicken.nei.ItemsTooltipLineHandler; import codechicken.nei.ItemsTooltipLineHandler.AmountRenderer; import codechicken.nei.ItemsTooltipLineHandler.StacksAmountRenderer; import codechicken.nei.ItemsTooltipLineHandler.TotalAmountRenderer; +import codechicken.nei.NEIClientConfig; import codechicken.nei.NEIClientUtils; import codechicken.nei.bookmark.BookmarkItem; import codechicken.nei.drawable.DrawableResource; @@ -354,8 +355,8 @@ public class RecipeChainTooltipLineHandler extends CompositeTooltipLineHandler { protected void addLine(String label, List items, boolean vertical, EnumChatFormatting labelColor, AmountRenderer amountRenderer) { - final ItemsTooltipLineHandler line = vertical ? ItemsTooltipLineHandler.list(label, items, maxLineRows()) - : ItemsTooltipLineHandler.grid(label, items, maxLineRows()); + final int maxNamedRows = vertical ? NEIClientConfig.getMaxVerticalTooltipRows() : 0; + final ItemsTooltipLineHandler line = ItemsTooltipLineHandler.of(label, items, maxLineRows(), maxNamedRows); if (line.isEmpty()) { return; diff --git a/src/main/resources/assets/nei/lang/en_US.lang b/src/main/resources/assets/nei/lang/en_US.lang index 6c402737..12ce30e9 100644 --- a/src/main/resources/assets/nei/lang/en_US.lang +++ b/src/main/resources/assets/nei/lang/en_US.lang @@ -289,6 +289,7 @@ nei.options.inventory.bookmarks.showRecipeMarkerMode=Show Recipe Marker nei.options.inventory.bookmarks.showRecipeMarkerMode.0=None nei.options.inventory.bookmarks.showRecipeMarkerMode.1=Text nei.options.inventory.bookmarks.showRecipeMarkerMode.2=Background +nei.options.inventory.bookmarks.maxVerticalTooltipRows=Max Vertical Tooltip Rows (0 - disable) nei.options.inventory.bookmarks.showRecipeHandlerIcon=Show Handler Icon nei.options.inventory.bookmarks.showRecipeHandlerIcon.true=Yes nei.options.inventory.bookmarks.showRecipeHandlerIcon.false=No