From 65652e5896e4dc4aa462da7b7dcc2ad7dcaf0447 Mon Sep 17 00:00:00 2001 From: slprime <31038811+slprime@users.noreply.github.com> Date: Sun, 1 Sep 2024 23:19:12 +0300 Subject: [PATCH] Small fixes & changes (#523) * fix hotkeys * code cleanup * fix recipe tooltip overlay * search item by original name * overlay button refactoring * fix subset filter * change keyname; issue 524 * cleanup code * move overlayformat logic --------- Co-authored-by: slprime --- .../java/codechicken/nei/BookmarkPanel.java | 14 ++-- .../java/codechicken/nei/ClientHandler.java | 1 - src/main/java/codechicken/nei/ItemList.java | 14 +++- src/main/java/codechicken/nei/ItemZoom.java | 7 +- .../java/codechicken/nei/NEIClientConfig.java | 34 ++------ .../java/codechicken/nei/NEIClientUtils.java | 39 +++++++++ .../java/codechicken/nei/NEIModContainer.java | 1 + .../java/codechicken/nei/SearchField.java | 12 ++- .../java/codechicken/nei/SubsetWidget.java | 10 +-- .../codechicken/nei/api/IOverlayHandler.java | 12 +-- .../codechicken/nei/config/OptionKeyBind.java | 9 +- .../nei/guihook/GuiContainerManager.java | 22 ++--- .../nei/recipe/GuiOverlayButton.java | 82 +++++++++++++------ .../codechicken/nei/recipe/GuiRecipe.java | 5 +- src/main/resources/assets/nei/lang/en_US.lang | 2 + 15 files changed, 166 insertions(+), 98 deletions(-) diff --git a/src/main/java/codechicken/nei/BookmarkPanel.java b/src/main/java/codechicken/nei/BookmarkPanel.java index e47ed9d9f..0eb1a0062 100644 --- a/src/main/java/codechicken/nei/BookmarkPanel.java +++ b/src/main/java/codechicken/nei/BookmarkPanel.java @@ -2500,20 +2500,19 @@ public Map handleHotkeys(GuiContainer gui, int mousex, int mouse translate("bookmark.group.toggle_crafting_chain.key"), translate("bookmark.group.toggle_crafting_chain")); - String keyName = NEIClientConfig.getKeyName(NEIClientConfig.getKeyBinding("gui.remove_recipe"), true); + String keyName = NEIClientConfig.getKeyName("gui.remove_recipe"); if (keyName != null) { hotkeys.put(keyName, translate("bookmark.group.remove_recipe")); } if (BookmarkContainerInfo.getBookmarkContainerHandler(gui) != null) { - keyName = NEIClientConfig.getKeyName(NEIClientConfig.getKeyBinding("gui.bookmark_pull_items"), true); + keyName = NEIClientConfig.getKeyName("gui.bookmark_pull_items"); if (keyName != null) { hotkeys.put(keyName, translate("bookmark.group.pull_items")); } - keyName = NEIClientConfig - .getKeyName(NEIClientConfig.getKeyBinding("gui.bookmark_pull_items_ingredients"), true); + keyName = NEIClientConfig.getKeyName("gui.bookmark_pull_items_ingredients"); if (keyName != null) { hotkeys.put(keyName, translate("bookmark.group.pull_items_ingredients")); } @@ -2536,20 +2535,19 @@ public Map handleHotkeys(GuiContainer gui, int mousex, int mouse hotkeys.put(translate("bookmark.group.sorting.key"), translate("bookmark.group.sorting")); } - String keyName = NEIClientConfig.getKeyName(NEIClientConfig.getKeyBinding("gui.remove_recipe"), true); + String keyName = NEIClientConfig.getKeyName("gui.remove_recipe"); if (keyName != null) { hotkeys.put(keyName, translate("bookmark.group.remove_recipe")); } if (BookmarkContainerInfo.getBookmarkContainerHandler(gui) != null) { - keyName = NEIClientConfig.getKeyName(NEIClientConfig.getKeyBinding("gui.bookmark_pull_items"), true); + keyName = NEIClientConfig.getKeyName("gui.bookmark_pull_items"); if (keyName != null) { hotkeys.put(keyName, translate("bookmark.group.pull_items")); } - keyName = NEIClientConfig - .getKeyName(NEIClientConfig.getKeyBinding("gui.bookmark_pull_items_ingredients"), true); + keyName = NEIClientConfig.getKeyName("gui.bookmark_pull_items_ingredients"); if (keyName != null) { hotkeys.put(keyName, translate("bookmark.group.pull_items_ingredients")); } diff --git a/src/main/java/codechicken/nei/ClientHandler.java b/src/main/java/codechicken/nei/ClientHandler.java index 586f65624..b859823d4 100644 --- a/src/main/java/codechicken/nei/ClientHandler.java +++ b/src/main/java/codechicken/nei/ClientHandler.java @@ -235,7 +235,6 @@ public static void load() { public static void postInit() { loadHandlerOrdering(); - loadPluginsList(); GuiContainerManager.registerReloadResourceListener(); } diff --git a/src/main/java/codechicken/nei/ItemList.java b/src/main/java/codechicken/nei/ItemList.java index aec1ef956..ab9f63ed2 100644 --- a/src/main/java/codechicken/nei/ItemList.java +++ b/src/main/java/codechicken/nei/ItemList.java @@ -91,7 +91,19 @@ public PatternItemFilter(Pattern pattern) { @Override public boolean matches(ItemStack item) { String displayName = EnumChatFormatting.getTextWithoutFormattingCodes(item.getDisplayName()); - return !displayName.isEmpty() && pattern.matcher(displayName).find(); + + if (!displayName.isEmpty() && pattern.matcher(displayName).find()) { + return true; + } + + if (item.hasDisplayName()) { + displayName = EnumChatFormatting + .getTextWithoutFormattingCodes(item.getItem().getItemStackDisplayName(item)); + + return !displayName.isEmpty() && pattern.matcher(displayName).find(); + } + + return false; } } diff --git a/src/main/java/codechicken/nei/ItemZoom.java b/src/main/java/codechicken/nei/ItemZoom.java index 161826839..4cbb86b5e 100644 --- a/src/main/java/codechicken/nei/ItemZoom.java +++ b/src/main/java/codechicken/nei/ItemZoom.java @@ -73,11 +73,10 @@ public void draw(int mx, int my) { if (NEIClientConfig.getBooleanSetting("inventory.itemzoom.enabled") && NEIClientConfig.getBooleanSetting("inventory.itemzoom.helpText")) { - int key = NEIClientConfig.getKeyBinding("gui.itemzoom_toggle"); + String keyName = NEIClientConfig.getKeyName("gui.itemzoom_toggle"); - if (key > 0) { - String helpText = NEIClientUtils - .translate("itemzoom.toggle", NEIClientConfig.getKeyName(key, true)); + if (keyName != null) { + String helpText = NEIClientUtils.translate("itemzoom.toggle", keyName); List lines = fontRenderer.listFormattedStringToWidth(helpText, this.availableAreaWidth); for (String line : lines) { diff --git a/src/main/java/codechicken/nei/NEIClientConfig.java b/src/main/java/codechicken/nei/NEIClientConfig.java index 80b37dbb4..afcc93bb6 100644 --- a/src/main/java/codechicken/nei/NEIClientConfig.java +++ b/src/main/java/codechicken/nei/NEIClientConfig.java @@ -227,7 +227,7 @@ public String getButtonText() { }); tag.getTag("inventory.search.subsetsSearchMode").setComment("Search mode for Item Subsets (prefix: %)") - .getIntValue(2); + .getIntValue(1); API.addOption(new OptionCycled("inventory.search.subsetsSearchMode", 3, true) { @Override @@ -631,34 +631,14 @@ public static boolean isKeyHashDown(String string) { return hash != Keyboard.CHAR_NONE && hash == NEIClientUtils.getKeyHash(); } - public static String getKeyName(int keyBind, boolean useHash) { - return getKeyName(keyBind, useHash, false); - } - - public static String getKeyName(int keyBind, boolean useHash, boolean showOnlyHash) { - String keyText = ""; + public static String getKeyName(String keyBind) { + final int hash = getKeyBinding(keyBind); - if (useHash) { - final String DELIMITER = " + "; - if ((keyBind & NEIClientUtils.CTRL_HASH) != 0) { - keyText += NEIClientUtils.translate(Minecraft.isRunningOnMac ? "key.ctrl.mac" : "key.ctrl") + DELIMITER; - } - if ((keyBind & NEIClientUtils.SHIFT_HASH) != 0) { - keyText += "SHIFT" + DELIMITER; - } - if ((keyBind & NEIClientUtils.ALT_HASH) != 0) { - keyText += "ALT" + DELIMITER; - } - } - - if (!showOnlyHash) { - keyText += Keyboard.getKeyName(unHashKey(keyBind)); + if (hash == Keyboard.CHAR_NONE) { + return null; } - return keyText; - } - public static int unHashKey(int keyBind) { - return keyBind & ~(NEIClientUtils.CTRL_HASH | NEIClientUtils.SHIFT_HASH | NEIClientUtils.ALT_HASH); + return NEIClientUtils.getKeyName(hash); } public static void bootNEI(World world) { @@ -685,7 +665,7 @@ public void run() { config.loadConfig(); NEIModContainer.plugins.add(config); logger.debug("Loaded {}", clazz.getName()); - } catch (Exception e) { + } catch (Throwable e) { logger.error("Failed to Load {}", clazz.getName(), e); } }); diff --git a/src/main/java/codechicken/nei/NEIClientUtils.java b/src/main/java/codechicken/nei/NEIClientUtils.java index 709af4638..79dce3bd9 100644 --- a/src/main/java/codechicken/nei/NEIClientUtils.java +++ b/src/main/java/codechicken/nei/NEIClientUtils.java @@ -25,6 +25,7 @@ import java.util.Locale; import java.util.Map; import java.util.Set; +import java.util.StringJoiner; import java.util.stream.Collectors; import net.minecraft.client.Minecraft; @@ -450,6 +451,44 @@ public static int getKeyHash() { return Keyboard.CHAR_NONE; } + public static String getKeyHashName(int keyBind) { + StringJoiner keyText = new StringJoiner(" + "); + + if ((keyBind & CTRL_HASH) != 0) { + keyText.add(translate(Minecraft.isRunningOnMac ? "key.ctrl.mac" : "key.ctrl")); + } + + if ((keyBind & SHIFT_HASH) != 0) { + keyText.add(translate("key.shift")); + } + + if ((keyBind & ALT_HASH) != 0) { + keyText.add(translate("key.alt")); + } + + return keyText.toString(); + } + + public static String getKeyName(int keyBind) { + StringJoiner keyText = new StringJoiner(" + "); + String hashText = getKeyHashName(keyBind); + int keyID = unHashKey(keyBind); + + if (!hashText.isEmpty()) { + keyText.add(hashText); + } + + if (keyID != Keyboard.CHAR_NONE || hashText.isEmpty()) { + keyText.add(Keyboard.getKeyName(keyID)); + } + + return keyText.toString(); + } + + public static int unHashKey(int keyBind) { + return keyBind & ~(CTRL_HASH | SHIFT_HASH | ALT_HASH); + } + public static void playClickSound() { mc().getSoundHandler() .playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); diff --git a/src/main/java/codechicken/nei/NEIModContainer.java b/src/main/java/codechicken/nei/NEIModContainer.java index 650ed75fc..fae676706 100644 --- a/src/main/java/codechicken/nei/NEIModContainer.java +++ b/src/main/java/codechicken/nei/NEIModContainer.java @@ -127,6 +127,7 @@ public void postInit(FMLPostInitializationEvent event) { public void loadComplete(FMLLoadCompleteEvent event) { if (CommonUtils.isClient()) { GuiRecipeTab.loadHandlerInfo(); + ClientHandler.loadPluginsList(); } } diff --git a/src/main/java/codechicken/nei/SearchField.java b/src/main/java/codechicken/nei/SearchField.java index 0ebf81a47..556a80622 100644 --- a/src/main/java/codechicken/nei/SearchField.java +++ b/src/main/java/codechicken/nei/SearchField.java @@ -243,18 +243,18 @@ public static Pattern getPattern(String search, int patternMode) { search = search.substring(2, search.length() - 1); } else { final Matcher matcher = Pattern.compile("(\\?|\\*)").matcher(search); - String cleanedString = ""; + StringBuilder cleanedString = new StringBuilder(); int lastEndIndex = 0; while (matcher.find()) { - cleanedString += Pattern.quote(search.substring(lastEndIndex, matcher.start())); + cleanedString.append(Pattern.quote(search.substring(lastEndIndex, matcher.start()))); switch (matcher.group(0).charAt(0)) { case '?': - cleanedString += "."; + cleanedString.append("."); break; case '*': - cleanedString += ".+?"; + cleanedString.append(".+?"); break; default: break; @@ -266,6 +266,8 @@ public static Pattern getPattern(String search, int patternMode) { search = cleanedString + Pattern.quote(search.substring(lastEndIndex, search.length())); } break; + default: + break; } if (!search.isEmpty()) { @@ -300,6 +302,8 @@ public static String getEscapedSearchText(String text) { case 2: text = text.replaceAll("[{}()\\[\\].+*?^$\\\\|]", "\\\\$0"); break; + default: + break; } if (text.contains(" ") && NEIClientConfig.getBooleanSetting("inventory.search.quoteDropItemName")) { diff --git a/src/main/java/codechicken/nei/SubsetWidget.java b/src/main/java/codechicken/nei/SubsetWidget.java index d9cad8c2c..5021f9b7b 100644 --- a/src/main/java/codechicken/nei/SubsetWidget.java +++ b/src/main/java/codechicken/nei/SubsetWidget.java @@ -71,7 +71,7 @@ protected void slotClicked(int slot, int button, int mx, int my, int count) { if (slot < sorted.size()) { SubsetTag tag = sorted.get(slot); if (NEIClientUtils.shiftKey()) { - LayoutManager.searchField.setText("%" + tag.fullname); + LayoutManager.searchField.setText("%" + tag.fullname.replaceAll("\\s+", "")); } else if (button == 0 && count >= 2) { SubsetWidget.showOnly(tag); } else { @@ -175,7 +175,7 @@ public String parent() { private SubsetTag getTag(String name) { int idx = name.indexOf('.'); String childname = idx > 0 ? name.substring(0, idx) : name; - SubsetTag child = children.get(childname.replaceAll(" ", "").toLowerCase()); + SubsetTag child = children.get(childname.replaceAll("\\s+", "").toLowerCase()); if (child == null) return null; return idx > 0 ? child.getTag(name.substring(idx + 1)) : child; @@ -192,7 +192,7 @@ private void addTag(SubsetTag tag) { int idx = name.indexOf('.'); if (idx < 0) { // add or replace tag - SubsetTag prev = children.put(name.replaceAll(" ", "").toLowerCase(), tag); + SubsetTag prev = children.put(name.replaceAll("\\s+", "").toLowerCase(), tag); if (prev != null) { // replaced, load children tag.children = prev.children; tag.sorted = prev.sorted; @@ -200,10 +200,10 @@ private void addTag(SubsetTag tag) { recacheChildren(); } else { String childname = name.substring(0, idx); - SubsetTag child = children.get(childname.replaceAll(" ", "").toLowerCase()); + SubsetTag child = children.get(childname.replaceAll("\\s+", "").toLowerCase()); if (child == null) { children.put( - childname.replaceAll(" ", "").toLowerCase(), + childname.replaceAll("\\s+", "").toLowerCase(), child = new SubsetTag(fullname == null ? childname : fullname + '.' + childname)); } recacheChildren(); diff --git a/src/main/java/codechicken/nei/api/IOverlayHandler.java b/src/main/java/codechicken/nei/api/IOverlayHandler.java index 3cb692d18..187e42b77 100644 --- a/src/main/java/codechicken/nei/api/IOverlayHandler.java +++ b/src/main/java/codechicken/nei/api/IOverlayHandler.java @@ -6,20 +6,20 @@ import java.util.stream.Collectors; import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import codechicken.nei.PositionedStack; +import codechicken.nei.recipe.GuiOverlayButton.ItemOverlayState; import codechicken.nei.recipe.IRecipeHandler; public interface IOverlayHandler { void overlayRecipe(GuiContainer firstGui, IRecipeHandler recipe, int recipeIndex, boolean shift); - default List presenceOverlay(GuiContainer firstGui, IRecipeHandler recipe, int recipeIndex) { - final List itemPresenceSlots = new ArrayList<>(); + default List presenceOverlay(GuiContainer firstGui, IRecipeHandler recipe, int recipeIndex) { + final List itemPresenceSlots = new ArrayList<>(); final List ingredients = recipe.getIngredientStacks(recipeIndex); - final List invStacks = ((List) firstGui.inventorySlots.inventorySlots).stream() + final List invStacks = firstGui.inventorySlots.inventorySlots.stream() .filter( s -> s != null && s.getStack() != null && s.getStack().stackSize > 0 @@ -29,9 +29,9 @@ default List presenceOverlay(GuiContainer firstGui, IRecipeHandler reci for (PositionedStack stack : ingredients) { Optional used = invStacks.stream().filter(is -> is.stackSize > 0 && stack.contains(is)) - .findFirst(); + .findAny(); - itemPresenceSlots.add(used.isPresent()); + itemPresenceSlots.add(new ItemOverlayState(stack, used.isPresent())); if (used.isPresent()) { ItemStack is = used.get(); diff --git a/src/main/java/codechicken/nei/config/OptionKeyBind.java b/src/main/java/codechicken/nei/config/OptionKeyBind.java index 043876262..c9f00f239 100644 --- a/src/main/java/codechicken/nei/config/OptionKeyBind.java +++ b/src/main/java/codechicken/nei/config/OptionKeyBind.java @@ -7,7 +7,6 @@ import org.lwjgl.input.Keyboard; -import codechicken.nei.NEIClientConfig; import codechicken.nei.NEIClientUtils; public class OptionKeyBind extends OptionButton { @@ -122,8 +121,12 @@ public void drawButton(int mx, int my) { @Override public String getButtonText() { - final int metahash = Math.max(editing ? NEIClientUtils.getMetaHash() : getValue(), 0); - return NEIClientConfig.getKeyName(metahash, useHash, editing); + + if (editing) { + return NEIClientUtils.getKeyHashName(NEIClientUtils.getMetaHash()); + } + + return NEIClientUtils.getKeyName(Math.max(getValue(), 0)); } @Override diff --git a/src/main/java/codechicken/nei/guihook/GuiContainerManager.java b/src/main/java/codechicken/nei/guihook/GuiContainerManager.java index 97226e2d3..6fef1f206 100644 --- a/src/main/java/codechicken/nei/guihook/GuiContainerManager.java +++ b/src/main/java/codechicken/nei/guihook/GuiContainerManager.java @@ -568,7 +568,7 @@ public void renderToolTips(int mousex, int mousey) { } } - if (tooltip.size() > 0) tooltip.set(0, tooltip.get(0) + GuiDraw.TOOLTIP_LINESPACE); // add space after 'title' + if (!tooltip.isEmpty()) tooltip.set(0, tooltip.get(0) + GuiDraw.TOOLTIP_LINESPACE); // add space after 'title' synchronized (instanceTooltipHandlers) { for (IContainerTooltipHandler handler : instanceTooltipHandlers) { @@ -577,25 +577,27 @@ public void renderToolTips(int mousex, int mousey) { } if (!hotkeys.isEmpty()) { + List hotkeystips = new ArrayList<>(); if (!NEIClientUtils.altKey()) { - tooltip.add( - 1, - EnumChatFormatting.GRAY + translate( - "showHotkeys", - "" + EnumChatFormatting.GOLD + "ALT" + EnumChatFormatting.GRAY)); + hotkeystips.add( + EnumChatFormatting.GRAY + + translate("showHotkeys", EnumChatFormatting.GOLD + "ALT" + EnumChatFormatting.GRAY)); } else { - List hotkeystips = new LinkedList<>(); - for (String key : hotkeys.keySet()) { - hotkeystips.add(getHotkeyTip(key, hotkeys.get(key))); + for (Map.Entry entry : hotkeys.entrySet()) { + hotkeystips.add(getHotkeyTip(entry.getKey(), entry.getValue())); } hotkeystips.sort((a, b) -> Integer.compare(a.indexOf(" - "), b.indexOf(" - "))); hotkeystips.set( hotkeystips.size() - 1, hotkeystips.get(hotkeystips.size() - 1) + GuiDraw.TOOLTIP_LINESPACE); + } + if (tooltip.isEmpty()) { + tooltip.addAll(hotkeystips); + } else { tooltip.addAll(1, hotkeystips); } } @@ -623,7 +625,7 @@ public static void drawPagedTooltip(FontRenderer font, int x, int y, List gui, List buttonList) { } } - private final static int OVERLAY_BUTTON_ID_START = 4; + public enum ItemOverlayFormat { + + BACKGROUND, + ICON; + + public static ItemOverlayFormat from(int overlay) { + return overlay == 2 ? ItemOverlayFormat.BACKGROUND : ItemOverlayFormat.ICON; + } + } + + public static class ItemOverlayState { + + protected PositionedStack slot; + protected boolean isPresent; + + public ItemOverlayState(PositionedStack slot, boolean isPresent) { + this.slot = slot; + this.isPresent = isPresent; + } + + public boolean isPresent() { + return this.isPresent; + } + + public PositionedStack getSlot() { + return this.slot; + } + + public void draw(ItemOverlayFormat format) { + LayoutManager.drawItemPresenceOverlay( + this.slot.relx, + this.slot.rely, + this.isPresent, + format == ItemOverlayFormat.BACKGROUND); + } + } + + private static final int OVERLAY_BUTTON_ID_START = 4; public final GuiContainer firstGui; public final IRecipeHandler handler; @@ -71,7 +108,7 @@ public Post(GuiRecipe gui, List buttonList) { protected ItemsTooltipLineHandler missedMaterialsTooltipLineHandler; protected final IOverlayHandler overlayHandler; - protected final List itemPresenceCache = new ArrayList<>(); + protected final List itemPresenceCache = new ArrayList<>(); protected boolean requireShiftForOverlayRecipe = true; protected boolean useOverlayRenderer = false; protected boolean hasOverlay = false; @@ -113,26 +150,26 @@ public List handleTooltip(GuiRecipe gui, List currenttip) { public Map handleHotkeys(GuiContainer gui, int mousex, int mousey, Map hotkeys) { - if (this.requireShiftForOverlayRecipe) { + if (this.requireShiftForOverlayRecipe && this.useOverlayRenderer) { hotkeys.put(translate("recipe.overlay.fillCraftingGrid.key"), translate("recipe.overlay.fillCraftingGrid")); } - String keyName = NEIClientConfig.getKeyName(NEIClientConfig.getKeyBinding("gui.bookmark"), true); + String keyName = NEIClientConfig.getKeyName("gui.bookmark"); if (keyName != null) { hotkeys.put(keyName, translate("recipe.overlay.bookmark")); } - keyName = NEIClientConfig.getKeyName(NEIClientConfig.getKeyBinding("gui.bookmark_recipe"), true); + keyName = NEIClientConfig.getKeyName("gui.bookmark_recipe"); if (keyName != null) { hotkeys.put(keyName, translate("recipe.overlay.bookmarkRecipe")); } - keyName = NEIClientConfig.getKeyName(NEIClientConfig.getKeyBinding("gui.bookmark_count"), true); + keyName = NEIClientConfig.getKeyName("gui.bookmark_count"); if (keyName != null) { hotkeys.put(keyName, translate("recipe.overlay.bookmarkAmount")); } - keyName = NEIClientConfig.getKeyName(NEIClientConfig.getKeyBinding("gui.bookmark_recipe_count"), true); + keyName = NEIClientConfig.getKeyName("gui.bookmark_recipe_count"); if (keyName != null) { hotkeys.put(keyName, translate("recipe.overlay.bookmarkRecipeAndAmount")); } @@ -151,20 +188,16 @@ public void mouseReleased(int mouseX, int mouseY) { public void drawItemPresenceOverlay() { final int presenceOverlay = NEIClientConfig.itemPresenceOverlay(); final boolean highlightPresentItem = NEIClientConfig.isSlotHighlightPresent(); - final List ingredients = this.handler.getIngredientStacks(recipeIndex); - final List itemPresenceCache = ingredientsOverlay(); - - for (int j = 0; j < ingredients.size(); j++) { - PositionedStack stack = ingredients.get(j); - Boolean isPresent = j < itemPresenceCache.size() ? itemPresenceCache.get(j) : null; + final ItemOverlayFormat format = ItemOverlayFormat.from(presenceOverlay); - if (isPresent != null && (highlightPresentItem || !isPresent)) { - LayoutManager.drawItemPresenceOverlay(stack.relx, stack.rely, isPresent, presenceOverlay == 2); + for (ItemOverlayState overlay : ingredientsOverlay()) { + if (highlightPresentItem || !overlay.isPresent()) { + overlay.draw(format); } } } - protected List ingredientsOverlay() { + protected List ingredientsOverlay() { List ingredients = this.handler.getIngredientStacks(recipeIndex); if (this.itemPresenceCache.size() != ingredients.size()) { @@ -177,13 +210,8 @@ protected List ingredientsOverlay() { this.itemPresenceCache.addAll(presenceOverlay(ingredients)); } - List items = new ArrayList<>(); - - for (int j = 0; j < ingredients.size(); j++) { - if (j >= this.itemPresenceCache.size() || !this.itemPresenceCache.get(j)) { - items.add(ingredients.get(j).item); - } - } + List items = this.itemPresenceCache.stream().filter(state -> !state.isPresent()) + .map(state -> state.getSlot().item).collect(Collectors.toCollection(ArrayList::new)); if (!items.isEmpty()) { this.missedMaterialsTooltipLineHandler = new ItemsTooltipLineHandler( @@ -220,8 +248,8 @@ public boolean hasOverlay() { return this.hasOverlay; } - private List presenceOverlay(List ingredients) { - final List itemPresenceSlots = new ArrayList<>(); + private List presenceOverlay(List ingredients) { + final List itemPresenceSlots = new ArrayList<>(); final List invStacks = this.firstGui.inventorySlots.inventorySlots.stream() .filter( s -> s != null && s.getStack() != null @@ -232,9 +260,9 @@ private List presenceOverlay(List ingredients) { for (PositionedStack stack : ingredients) { Optional used = invStacks.stream().filter(is -> is.stackSize > 0 && stack.contains(is)) - .findFirst(); + .findAny(); - itemPresenceSlots.add(used.isPresent()); + itemPresenceSlots.add(new ItemOverlayState(stack, used.isPresent())); if (used.isPresent()) { ItemStack is = used.get(); diff --git a/src/main/java/codechicken/nei/recipe/GuiRecipe.java b/src/main/java/codechicken/nei/recipe/GuiRecipe.java index 021c2b69f..ef7ac9899 100644 --- a/src/main/java/codechicken/nei/recipe/GuiRecipe.java +++ b/src/main/java/codechicken/nei/recipe/GuiRecipe.java @@ -1098,8 +1098,7 @@ public void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { .filter(b -> b.recipeIndex == recipeIndex).findAny().orElse(null); if (overlayButton != null && overlayButton.enabled) { - final String overlayKeyName = NEIClientConfig - .getKeyName(NEIClientConfig.getKeyBinding("gui.overlay_use"), true); + final String overlayKeyName = NEIClientConfig.getKeyName("gui.overlay_use"); if (overlayKeyName != null) { fontRendererObj.drawStringWithShadow( @@ -1108,6 +1107,8 @@ public void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { handlerInfo.getHeight() - fontRendererObj.FONT_HEIGHT, 0xffffff); } + + overlayButton.drawItemPresenceOverlay(); } } diff --git a/src/main/resources/assets/nei/lang/en_US.lang b/src/main/resources/assets/nei/lang/en_US.lang index 20a3b04cc..a9ec52d04 100644 --- a/src/main/resources/assets/nei/lang/en_US.lang +++ b/src/main/resources/assets/nei/lang/en_US.lang @@ -3,6 +3,8 @@ nei.save=Save # PC/Linux Control Key nei.key.ctrl=CTRL +nei.key.shift=SHIFT +nei.key.alt=ALT # Mac Command Key nei.key.ctrl.mac=CMD nei.showHotkeys=Hold %s for hotkeys