diff --git a/src/main/java/codechicken/nei/KeyManager.java b/src/main/java/codechicken/nei/KeyManager.java index 104b5ca9..725481b3 100644 --- a/src/main/java/codechicken/nei/KeyManager.java +++ b/src/main/java/codechicken/nei/KeyManager.java @@ -4,6 +4,8 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.Map.Entry; +import org.lwjgl.input.Keyboard; + /** * Good old down/held/up keystate tracker */ @@ -26,7 +28,7 @@ public class KeyManager { public static void tickKeyStates() { for (Entry entry : keyStates.entrySet()) { - final boolean down = NEIClientConfig.isKeyHashDown(entry.getKey()); + final boolean down = Keyboard.isKeyDown(NEIClientConfig.getKeyBinding(entry.getKey())); final KeyState state = entry.getValue(); if (down) { diff --git a/src/main/java/codechicken/nei/NEIClientConfig.java b/src/main/java/codechicken/nei/NEIClientConfig.java index 08b18ab3..d4b32c6c 100644 --- a/src/main/java/codechicken/nei/NEIClientConfig.java +++ b/src/main/java/codechicken/nei/NEIClientConfig.java @@ -750,6 +750,7 @@ public class NEIClientConfig { API.addHashBind("gui.hide", Keyboard.KEY_O); API.addHashBind("gui.search", Keyboard.KEY_F); API.addKeyBind("gui.bookmark", Keyboard.KEY_A); + API.addHashBind("gui.favorite", Keyboard.KEY_F + NEIClientUtils.SHIFT_HASH); API.addHashBind("gui.remove_recipe", Keyboard.KEY_A + NEIClientUtils.SHIFT_HASH); API.addKeyBind("gui.bookmark_pull_items", Keyboard.KEY_V); API.addKeyBind("gui.overlay", Keyboard.KEY_S); @@ -864,7 +865,7 @@ public class NEIClientConfig { final int hash = getKeyBinding(string); if (hash != Keyboard.CHAR_NONE && Keyboard.getEventKeyState()) { - return KeyManager.keyStates.containsKey(string) ? hash == Keyboard.getEventKey() + return KeyManager.keyStates.containsKey(string) ? Keyboard.isKeyDown(hash) : hash == NEIClientUtils.getKeyHash(); } diff --git a/src/main/java/codechicken/nei/api/ShortcutInputHandler.java b/src/main/java/codechicken/nei/api/ShortcutInputHandler.java index daab54d6..adb44ce5 100644 --- a/src/main/java/codechicken/nei/api/ShortcutInputHandler.java +++ b/src/main/java/codechicken/nei/api/ShortcutInputHandler.java @@ -29,6 +29,7 @@ import codechicken.nei.bookmark.BookmarkItem; import codechicken.nei.bookmark.BookmarksGridSlot; import codechicken.nei.recipe.AutoCraftingManager; import codechicken.nei.recipe.GuiCraftingRecipe; +import codechicken.nei.recipe.GuiFavoriteButton; import codechicken.nei.recipe.GuiRecipe; import codechicken.nei.recipe.GuiUsageRecipe; import codechicken.nei.recipe.Recipe; @@ -113,6 +114,10 @@ public abstract class ShortcutInputHandler { return GuiUsageRecipe.openRecipeGui("item", stackover); } + if (NEIClientConfig.isKeyHashDown("gui.favorite")) { + return saveFavoriteTree(stackover); + } + if (NEIClientConfig.isKeyHashDown("gui.bookmark")) { return saveRecipeInBookmark(stackover, NEIClientUtils.shiftKey(), NEIClientUtils.controlKey()); } @@ -248,6 +253,25 @@ public abstract class ShortcutInputHandler { return false; } + private static boolean saveFavoriteTree(ItemStack stackover) { + final Point mouse = GuiDraw.getMousePosition(); + + if (ItemPanels.itemPanel.contains(mouse.x, mouse.y) + || ItemPanels.itemPanel.historyPanel.contains(mouse.x, mouse.y)) { + final RecipeHandlerRef handlerRef = RecipeHandlerRef.of(FavoriteRecipes.getFavorite(stackover)); + + if (handlerRef != null) { + final GuiFavoriteButton button = new GuiFavoriteButton(handlerRef, 0, 0); + button.saveRecipeInBookmark(); + return true; + } + + return true; + } + + return false; + } + private static boolean saveRecipeInBookmark(ItemStack stackover, boolean saveIngredients, boolean saveStackSize) { final Point mousePos = GuiDraw.getMousePosition(); @@ -431,6 +455,13 @@ public abstract class ShortcutInputHandler { NEIClientUtils.translate("bookmark.add_item_with_recipe")); } + if ((ItemPanels.itemPanel.contains(mousex, mousey) + || ItemPanels.itemPanel.historyPanel.contains(mousex, mousey)) && FavoriteRecipes.contains(stack)) { + hotkeys.put( + NEIClientConfig.getKeyName("gui.favorite"), + NEIClientUtils.translate("recipe.favorite.bookmark_recipe")); + } + } hotkeys.put(NEIClientConfig.getKeyName("gui.recipe"), NEIClientUtils.translate("itempanel.open_crafting")); diff --git a/src/main/java/codechicken/nei/recipe/GuiFavoriteButton.java b/src/main/java/codechicken/nei/recipe/GuiFavoriteButton.java index 868be0d9..3c8ac936 100644 --- a/src/main/java/codechicken/nei/recipe/GuiFavoriteButton.java +++ b/src/main/java/codechicken/nei/recipe/GuiFavoriteButton.java @@ -119,7 +119,7 @@ public class GuiFavoriteButton extends GuiRecipeButton { public void lastKeyTyped(GuiRecipe gui, char keyChar, int keyID) { if (NEIClientConfig.isKeyHashDown("gui.bookmark") && NEIClientUtils.shiftKey()) { - ItemPanels.bookmarkPanel.addGroup(getRecipesTree(getRecipe()), BookmarkViewMode.TODO_LIST, true); + saveRecipeInBookmark(); } } @@ -180,6 +180,10 @@ public class GuiFavoriteButton extends GuiRecipeButton { return true; } + public void saveRecipeInBookmark() { + ItemPanels.bookmarkPanel.addGroup(getRecipesTree(getRecipe()), BookmarkViewMode.TODO_LIST, true); + } + private List getRecipesTree(Recipe mainRecipe) { int depth = NEIClientConfig.getIntSetting("inventory.favorites.depth"); final ItemStackSet items = new ItemStackSet(); diff --git a/src/main/java/codechicken/nei/recipe/RecipeHandlerRef.java b/src/main/java/codechicken/nei/recipe/RecipeHandlerRef.java index 5d967afd..901412e9 100644 --- a/src/main/java/codechicken/nei/recipe/RecipeHandlerRef.java +++ b/src/main/java/codechicken/nei/recipe/RecipeHandlerRef.java @@ -30,7 +30,7 @@ public class RecipeHandlerRef { public static RecipeHandlerRef of(RecipeId recipeId) { - if (recipeId.getResult() != null && !recipeId.getIngredients().isEmpty()) { + if (recipeId != null && recipeId.getResult() != null && !recipeId.getIngredients().isEmpty()) { return recipeRefCache.computeIfAbsent(recipeId, ri -> { final List handlers = GuiCraftingRecipe .getCraftingHandlers("recipeId", recipeId.getResult(), recipeId);