From 72e1653cbb38282f8dce59a00fb381e18bfc795d Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 8 Jan 2019 18:23:00 +0800 Subject: Craftable Only WIP --- src/main/java/me/shedaniel/Core.java | 7 +- .../me/shedaniel/api/DisplayCategoryCraftable.java | 19 ------ .../java/me/shedaniel/api/IDisplayCategory.java | 1 + .../shedaniel/api/IDisplayCategoryCraftable.java | 19 ++++++ src/main/java/me/shedaniel/api/IDisplayHelper.java | 7 -- src/main/java/me/shedaniel/api/IDrawable.java | 4 +- src/main/java/me/shedaniel/api/IRecipe.java | 4 ++ src/main/java/me/shedaniel/api/IRecipeManager.java | 1 + .../java/me/shedaniel/api/TriBooleanProducer.java | 8 --- .../java/me/shedaniel/api/TriBooleanSupplier.java | 8 +++ src/main/java/me/shedaniel/config/REIConfig.java | 3 +- .../me/shedaniel/config/REIItemListOrdering.java | 1 + .../java/me/shedaniel/config/REIRuntimeConfig.java | 8 +++ src/main/java/me/shedaniel/gui/ConfigGui.java | 29 ++++++++- src/main/java/me/shedaniel/gui/Drawable.java | 2 + src/main/java/me/shedaniel/gui/GuiItemList.java | 74 ++++++++++++++++++++-- .../java/me/shedaniel/gui/REIRenderHelper.java | 6 ++ src/main/java/me/shedaniel/gui/RecipeGui.java | 11 ++-- src/main/java/me/shedaniel/gui/SearchArgument.java | 1 + src/main/java/me/shedaniel/gui/widget/Button.java | 2 - src/main/java/me/shedaniel/gui/widget/Control.java | 6 +- .../java/me/shedaniel/gui/widget/IFocusable.java | 2 + src/main/java/me/shedaniel/gui/widget/REISlot.java | 1 + src/main/java/me/shedaniel/gui/widget/TextBox.java | 1 + .../java/me/shedaniel/gui/widget/WidgetArrow.java | 2 + .../java/me/shedaniel/impl/REIRecipeManager.java | 56 ++++++++-------- .../java/me/shedaniel/library/KeyBindFunction.java | 1 + src/main/java/me/shedaniel/library/Sink.java | 2 + .../shedaniel/listenerdefinitions/CharInput.java | 1 + .../listenerdefinitions/ClientTickable.java | 2 + .../shedaniel/listenerdefinitions/DoneLoading.java | 2 + .../listenerdefinitions/DrawContainer.java | 2 + .../listenerdefinitions/GuiCickListener.java | 8 --- .../me/shedaniel/listenerdefinitions/GuiClick.java | 10 +++ .../shedaniel/listenerdefinitions/GuiKeyDown.java | 1 + .../listenerdefinitions/GuiMouseScroll.java | 7 ++ .../listenerdefinitions/IMixinContainerGui.java | 2 + .../listenerdefinitions/KeybindHandler.java | 7 -- .../listenerdefinitions/MinecraftResize.java | 2 + .../listenerdefinitions/MouseScrollListener.java | 5 -- .../listenerdefinitions/PotionCraftingAdder.java | 2 + .../listenerdefinitions/RecipeLoadListener.java | 2 + .../shedaniel/listeners/DrawContainerListener.java | 3 +- .../me/shedaniel/mixins/MixinContainerGui.java | 26 +++----- .../mixins/MixinCreativePlayerInventoryGui.java | 18 ++++-- .../java/me/shedaniel/mixins/MixinDoneLoading.java | 2 + .../me/shedaniel/mixins/MixinKeyboardListener.java | 2 + .../me/shedaniel/mixins/MixinRecipeManager.java | 1 + .../java/me/shedaniel/plugin/RandomRecipe.java | 7 ++ .../me/shedaniel/plugin/TestRandomCategory.java | 1 + .../blastfurnace/VanillaBlastFurnaceCategory.java | 4 +- .../blastfurnace/VanillaBlastFurnaceRecipe.java | 12 +++- .../plugin/crafting/VanillaCraftingCategory.java | 5 +- .../plugin/crafting/VanillaCraftingRecipe.java | 9 +++ .../plugin/furnace/VanillaFurnaceCategory.java | 5 +- .../plugin/furnace/VanillaFurnaceRecipe.java | 9 +++ .../plugin/potion/VanillaPotionRecipe.java | 8 +++ .../plugin/smoker/VanillaSmokerCategory.java | 4 +- .../plugin/smoker/VanillaSmokerRecipe.java | 12 +++- 59 files changed, 325 insertions(+), 142 deletions(-) delete mode 100644 src/main/java/me/shedaniel/api/DisplayCategoryCraftable.java create mode 100644 src/main/java/me/shedaniel/api/IDisplayCategoryCraftable.java delete mode 100755 src/main/java/me/shedaniel/api/IDisplayHelper.java delete mode 100755 src/main/java/me/shedaniel/api/TriBooleanProducer.java create mode 100755 src/main/java/me/shedaniel/api/TriBooleanSupplier.java create mode 100644 src/main/java/me/shedaniel/config/REIRuntimeConfig.java delete mode 100755 src/main/java/me/shedaniel/listenerdefinitions/GuiCickListener.java create mode 100755 src/main/java/me/shedaniel/listenerdefinitions/GuiClick.java create mode 100755 src/main/java/me/shedaniel/listenerdefinitions/GuiMouseScroll.java delete mode 100644 src/main/java/me/shedaniel/listenerdefinitions/KeybindHandler.java delete mode 100755 src/main/java/me/shedaniel/listenerdefinitions/MouseScrollListener.java (limited to 'src/main/java/me/shedaniel') diff --git a/src/main/java/me/shedaniel/Core.java b/src/main/java/me/shedaniel/Core.java index 498b0a43b..2cc74161b 100755 --- a/src/main/java/me/shedaniel/Core.java +++ b/src/main/java/me/shedaniel/Core.java @@ -1,6 +1,7 @@ package me.shedaniel; import me.shedaniel.config.REIConfig; +import me.shedaniel.config.REIRuntimeConfig; import me.shedaniel.listenerdefinitions.ClientTickable; import me.shedaniel.listenerdefinitions.IEvent; import me.shedaniel.listeners.DrawContainerListener; @@ -31,8 +32,8 @@ public class Core implements ClientModInitializer { private static List events = new LinkedList<>(); public static final File configFile = new File(FabricLoader.INSTANCE.getConfigDirectory(), "rei.json"); public static REIConfig config; + public static REIRuntimeConfig runtimeConfig; public static ClientListener clientListener; - public static boolean centreSearchBox; public static Logger LOGGER = LogManager.getFormatterLogger("REI"); @Override @@ -42,7 +43,7 @@ public class Core implements ClientModInitializer { registerFabricEvents(); try { loadConfig(); - centreSearchBox = config.centreSearchBox; + runtimeConfig = new REIRuntimeConfig(); } catch (IOException e) { e.printStackTrace(); } @@ -52,6 +53,8 @@ public class Core implements ClientModInitializer { private void registerFabricEvents() { ClientTickEvent.CLIENT.register(minecraftClient -> { getListeners(ClientTickable.class).forEach(ClientTickable::clientTick); + if (!Core.config.enableCraftableOnlyButton) + Core.runtimeConfig.craftableOnly = false; }); } diff --git a/src/main/java/me/shedaniel/api/DisplayCategoryCraftable.java b/src/main/java/me/shedaniel/api/DisplayCategoryCraftable.java deleted file mode 100644 index c0be7bd11..000000000 --- a/src/main/java/me/shedaniel/api/DisplayCategoryCraftable.java +++ /dev/null @@ -1,19 +0,0 @@ -package me.shedaniel.api; - -import me.shedaniel.api.IDisplayCategory; -import me.shedaniel.api.IRecipe; -import me.shedaniel.gui.RecipeGui; -import me.shedaniel.gui.widget.Control; -import net.minecraft.client.gui.Gui; - -import java.util.List; - -public interface DisplayCategoryCraftable extends IDisplayCategory { - - public boolean canAutoCraftHere(Class guiClass, T recipe); - - public boolean performAutoCraft(Gui gui, T recipe); - - public void registerAutoCraftButton(List control, RecipeGui recipeGui, Gui parentGui, T recipe, int number); - -} diff --git a/src/main/java/me/shedaniel/api/IDisplayCategory.java b/src/main/java/me/shedaniel/api/IDisplayCategory.java index 3e4c938cb..309a836ac 100755 --- a/src/main/java/me/shedaniel/api/IDisplayCategory.java +++ b/src/main/java/me/shedaniel/api/IDisplayCategory.java @@ -10,6 +10,7 @@ import java.util.List; * Created by James on 8/7/2018. */ public interface IDisplayCategory { + public String getId(); public String getDisplayName(); diff --git a/src/main/java/me/shedaniel/api/IDisplayCategoryCraftable.java b/src/main/java/me/shedaniel/api/IDisplayCategoryCraftable.java new file mode 100644 index 000000000..c34c1e37b --- /dev/null +++ b/src/main/java/me/shedaniel/api/IDisplayCategoryCraftable.java @@ -0,0 +1,19 @@ +package me.shedaniel.api; + +import me.shedaniel.api.IDisplayCategory; +import me.shedaniel.api.IRecipe; +import me.shedaniel.gui.RecipeGui; +import me.shedaniel.gui.widget.Control; +import net.minecraft.client.gui.Gui; + +import java.util.List; + +public interface IDisplayCategoryCraftable extends IDisplayCategory { + + public boolean canAutoCraftHere(Class guiClass, T recipe); + + public boolean performAutoCraft(Gui gui, T recipe); + + public void registerAutoCraftButton(List control, RecipeGui recipeGui, Gui parentGui, T recipe, int number); + +} diff --git a/src/main/java/me/shedaniel/api/IDisplayHelper.java b/src/main/java/me/shedaniel/api/IDisplayHelper.java deleted file mode 100755 index 6f230d3b5..000000000 --- a/src/main/java/me/shedaniel/api/IDisplayHelper.java +++ /dev/null @@ -1,7 +0,0 @@ -package me.shedaniel.api; - -/** - * Created by James on 8/7/2018. - */ -public interface IDisplayHelper { -} diff --git a/src/main/java/me/shedaniel/api/IDrawable.java b/src/main/java/me/shedaniel/api/IDrawable.java index 102b7e1c5..48294bea7 100755 --- a/src/main/java/me/shedaniel/api/IDrawable.java +++ b/src/main/java/me/shedaniel/api/IDrawable.java @@ -4,7 +4,9 @@ package me.shedaniel.api; * Created by James on 8/7/2018. */ public interface IDrawable { + public void draw(); - + public boolean isHighlighted(); + } diff --git a/src/main/java/me/shedaniel/api/IRecipe.java b/src/main/java/me/shedaniel/api/IRecipe.java index 84cce4c79..a79123ddd 100755 --- a/src/main/java/me/shedaniel/api/IRecipe.java +++ b/src/main/java/me/shedaniel/api/IRecipe.java @@ -1,5 +1,7 @@ package me.shedaniel.api; +import net.minecraft.item.ItemStack; + import java.util.List; /** @@ -13,4 +15,6 @@ public interface IRecipe { public List> getInput(); + public List> getRecipeRequiredInput(); + } diff --git a/src/main/java/me/shedaniel/api/IRecipeManager.java b/src/main/java/me/shedaniel/api/IRecipeManager.java index 355a1cd4d..82135bf3f 100755 --- a/src/main/java/me/shedaniel/api/IRecipeManager.java +++ b/src/main/java/me/shedaniel/api/IRecipeManager.java @@ -17,4 +17,5 @@ public interface IRecipeManager { public void addDisplayAdapter(IDisplayCategory adapter); public Map> getRecipesFor(ItemStack stack); + } diff --git a/src/main/java/me/shedaniel/api/TriBooleanProducer.java b/src/main/java/me/shedaniel/api/TriBooleanProducer.java deleted file mode 100755 index 0925fee75..000000000 --- a/src/main/java/me/shedaniel/api/TriBooleanProducer.java +++ /dev/null @@ -1,8 +0,0 @@ -package me.shedaniel.api; - -/** - * Created by James on 8/4/2018. - */ -public interface TriBooleanProducer { - public boolean accept(int first, int second, int third); -} diff --git a/src/main/java/me/shedaniel/api/TriBooleanSupplier.java b/src/main/java/me/shedaniel/api/TriBooleanSupplier.java new file mode 100755 index 000000000..241307740 --- /dev/null +++ b/src/main/java/me/shedaniel/api/TriBooleanSupplier.java @@ -0,0 +1,8 @@ +package me.shedaniel.api; + +/** + * Created by James on 8/4/2018. + */ +public interface TriBooleanSupplier { + public boolean accept(int first, int second, int third); +} diff --git a/src/main/java/me/shedaniel/config/REIConfig.java b/src/main/java/me/shedaniel/config/REIConfig.java index c3dad7b6f..c9e2efe47 100644 --- a/src/main/java/me/shedaniel/config/REIConfig.java +++ b/src/main/java/me/shedaniel/config/REIConfig.java @@ -9,8 +9,6 @@ public class REIConfig { public static Gson GSON = new GsonBuilder() .setPrettyPrinting() - .serializeNulls() - .disableHtmlEscaping() .create(); public int recipeKeyBind = KeyEvent.VK_R; @@ -19,5 +17,6 @@ public class REIConfig { public boolean centreSearchBox = false; public REIItemListOrdering itemListOrdering = REIItemListOrdering.REGISTRY; public boolean isAscending = true; + public boolean enableCraftableOnlyButton = false; } diff --git a/src/main/java/me/shedaniel/config/REIItemListOrdering.java b/src/main/java/me/shedaniel/config/REIItemListOrdering.java index 20bbaddab..f0a6b5356 100644 --- a/src/main/java/me/shedaniel/config/REIItemListOrdering.java +++ b/src/main/java/me/shedaniel/config/REIItemListOrdering.java @@ -17,4 +17,5 @@ public enum REIItemListOrdering { public String getNameTranslationKey() { return nameTranslationKey; } + } diff --git a/src/main/java/me/shedaniel/config/REIRuntimeConfig.java b/src/main/java/me/shedaniel/config/REIRuntimeConfig.java new file mode 100644 index 000000000..b13a72bfb --- /dev/null +++ b/src/main/java/me/shedaniel/config/REIRuntimeConfig.java @@ -0,0 +1,8 @@ +package me.shedaniel.config; + +public class REIRuntimeConfig { + + public boolean craftableOnly = false; + public boolean centreSearchBox = false; + +} diff --git a/src/main/java/me/shedaniel/gui/ConfigGui.java b/src/main/java/me/shedaniel/gui/ConfigGui.java index 266347adf..6deeb24ea 100644 --- a/src/main/java/me/shedaniel/gui/ConfigGui.java +++ b/src/main/java/me/shedaniel/gui/ConfigGui.java @@ -74,6 +74,30 @@ public class ConfigGui extends Gui { } }); addButton(new ButtonWidget(1001, parent.width / 2 - 90, 150, 150, 20, "") { + @Override + public void onPressed(double double_1, double double_2) { + Core.config.enableCraftableOnlyButton = !Core.config.enableCraftableOnlyButton; + try { + Core.saveConfig(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void draw(int int_1, int int_2, float float_1) { + GuiLighting.disable(); + this.text = I18n.translate("text.rei.enable_craftable_only.button", Core.config.enableCraftableOnlyButton ? "§a" : "§c", Core.config.enableCraftableOnlyButton); + super.draw(int_1, int_2, float_1); + if (this.hovered) + drawSuggestion(int_1, int_2); + } + + protected void drawSuggestion(int x, int y) { + drawTooltip(Arrays.asList(I18n.translate("text.rei.enable_craftable_only.tooltip").split("\n")), x, y); + } + }); + addButton(new ButtonWidget(1002, parent.width / 2 - 90, 180, 150, 20, "") { @Override public void onPressed(double double_1, double double_2) { int index = Arrays.asList(REIItemListOrdering.values()).indexOf(Core.config.itemListOrdering) + 1; @@ -89,7 +113,7 @@ public class ConfigGui extends Gui { e.printStackTrace(); } } - + @Override public void draw(int int_1, int int_2, float float_1) { GuiLighting.disable(); @@ -112,7 +136,7 @@ public class ConfigGui extends Gui { text = I18n.translate("key.rei.hide") + ": "; drawString(MinecraftClient.getInstance().fontRenderer, text, parent.width / 2 - 25 - MinecraftClient.getInstance().fontRenderer.getStringWidth(text), 90 + 6, -1); text = I18n.translate("text.rei.list_ordering") + ": "; - drawString(MinecraftClient.getInstance().fontRenderer, text, parent.width / 2 - 95 - MinecraftClient.getInstance().fontRenderer.getStringWidth(text), 150 + 6, -1); + drawString(MinecraftClient.getInstance().fontRenderer, text, parent.width / 2 - 95 - MinecraftClient.getInstance().fontRenderer.getStringWidth(text), 180 + 6, -1); } @Override @@ -126,4 +150,5 @@ public class ConfigGui extends Gui { return super.keyPressed(p_keyPressed_1_, p_keyPressed_2_, p_keyPressed_3_); } } + } diff --git a/src/main/java/me/shedaniel/gui/Drawable.java b/src/main/java/me/shedaniel/gui/Drawable.java index 76d49e049..a2e5740a4 100755 --- a/src/main/java/me/shedaniel/gui/Drawable.java +++ b/src/main/java/me/shedaniel/gui/Drawable.java @@ -9,6 +9,7 @@ import java.awt.*; * Created by James on 7/28/2018. */ public abstract class Drawable implements IDrawable { + protected Rectangle rect; public Drawable(int x, int y, int width, int height) { @@ -30,4 +31,5 @@ public abstract class Drawable implements IDrawable { } return false; } + } diff --git a/src/main/java/me/shedaniel/gui/GuiItemList.java b/src/main/java/me/shedaniel/gui/GuiItemList.java index 18ea59d9b..18f8c3db8 100755 --- a/src/main/java/me/shedaniel/gui/GuiItemList.java +++ b/src/main/java/me/shedaniel/gui/GuiItemList.java @@ -1,8 +1,10 @@ package me.shedaniel.gui; +import com.google.common.collect.ImmutableList; import com.mojang.blaze3d.platform.GlStateManager; import me.shedaniel.ClientListener; import me.shedaniel.Core; +import me.shedaniel.api.IRecipe; import me.shedaniel.config.REIItemListOrdering; import me.shedaniel.gui.widget.Button; import me.shedaniel.gui.widget.Control; @@ -14,12 +16,15 @@ import net.fabricmc.fabric.client.itemgroup.FabricCreativeGuiComponents; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.ContainerGui; import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.client.render.GuiLighting; import net.minecraft.client.resource.language.I18n; import net.minecraft.client.util.Window; +import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.text.TextComponent; import net.minecraft.text.TranslatableTextComponent; +import net.minecraft.util.DefaultedList; import net.minecraft.util.Identifier; import net.minecraft.util.math.MathHelper; import net.minecraft.util.registry.Registry; @@ -45,10 +50,11 @@ public class GuiItemList extends Drawable { protected boolean visible = true; private int oldGuiLeft = 0; private boolean cheatMode = false; + private List lastPlayerItems = new ArrayList<>(); public GuiItemList(ContainerGui overlayedGui) { super(calculateRect(overlayedGui)); - FOOTERSIZE = Core.centreSearchBox ? 18 : 44; + FOOTERSIZE = Core.runtimeConfig.centreSearchBox ? 18 : 44; displaySlots = new ArrayList<>(); controls = new ArrayList<>(); this.overlayedGui = overlayedGui; @@ -102,11 +108,21 @@ public class GuiItemList extends Drawable { } searchBox = new TextBox(getSearchBoxArea()); searchBox.setText(savedText); + if (Core.config.enableCraftableOnlyButton) { + Button buttonCraftableOnly = new Button(getCraftableToggleArea(), ""); + buttonCraftableOnly.setOnClick(i -> { + Core.runtimeConfig.craftableOnly = !Core.runtimeConfig.craftableOnly; + REIRenderHelper.updateSearch(); + return true; + }); + controls.add(buttonCraftableOnly); + } controls.add(searchBox); buttonCheating = new Button(5, 5, 45, 20, getCheatModeText()); buttonCheating.onClick = this::cheatClicked; buttonConfig = new Button(5, 28, 45, 20, I18n.translate("text.rei.config")); buttonConfig.onClick = i -> { + MinecraftClient.getInstance().openGui(null); MinecraftClient.getInstance().openGui(new ConfigGui(overlayedGui)); return true; }; @@ -119,13 +135,21 @@ public class GuiItemList extends Drawable { } private Rectangle getSearchBoxArea() { + int widthOffset = Core.config.enableCraftableOnlyButton ? -24 : 0; int ch = ((IMixinContainerGui) overlayedGui).getContainerHeight(), cw = ((IMixinContainerGui) overlayedGui).getContainerWidth(); - if (Core.centreSearchBox) { + if (Core.runtimeConfig.centreSearchBox) { if (ch + 4 + 18 > MinecraftClient.getInstance().window.getScaledHeight()) //Will be out of bounds - return new Rectangle(overlayedGui.width / 2 - cw / 2, rect.height + 100, cw, 18); - return new Rectangle(overlayedGui.width / 2 - cw / 2, rect.height - 31, cw, 18); + return new Rectangle(overlayedGui.width / 2 - cw / 2, rect.height + 100, cw + widthOffset, 18); + return new Rectangle(overlayedGui.width / 2 - cw / 2, rect.height - 31, cw + widthOffset, 18); } - return new Rectangle(rect.x, rect.height - 31, rect.width - 4, 18); + return new Rectangle(rect.x, rect.height - 31, rect.width - 4 + widthOffset, 18); + } + + private Rectangle getCraftableToggleArea() { + Rectangle searchBoxArea = getSearchBoxArea(); + searchBoxArea.setLocation(searchBoxArea.x + searchBoxArea.width + 4, searchBoxArea.y - 2); + searchBoxArea.setSize(20, 20); + return searchBoxArea; } private void fillSlots() { @@ -184,11 +208,22 @@ public class GuiItemList extends Drawable { public void draw() { if (!visible) return; + if (MinecraftClient.getInstance().currentGui instanceof ContainerGui) + overlayedGui = (ContainerGui) MinecraftClient.getInstance().currentGui; + if (Core.runtimeConfig.craftableOnly) { + List currentPlayerItems = getInventoryItemsTypes(); + for(ItemStack item : lastPlayerItems) + if (!currentPlayerItems.contains(item) || currentPlayerItems.size() != lastPlayerItems.size()) { + lastPlayerItems = new ArrayList<>(currentPlayerItems); + updateView(); + } + } if (needsResize == true || oldGuiLeft != ((IMixinContainerGui) overlayedGui).getGuiLeft()) resize(); GlStateManager.pushMatrix(); updateButtons(); controls.forEach(Control::draw); + GuiLighting.disable(); String header = String.format("%s/%s", page + 1, MathHelper.ceil(view.size() / displaySlots.size()) + 1); MinecraftClient.getInstance().fontRenderer.drawWithShadow(header, rect.x + (rect.width / 2) - (MinecraftClient.getInstance().fontRenderer.getStringWidth(header) / 2), rect.y + 10, -1); GlStateManager.popMatrix(); @@ -283,11 +318,38 @@ public class GuiItemList extends Drawable { stackList.stream().filter(itemStack -> filterItem(itemStack, arguments)).forEachOrdered(stacks::add); }); } - view.addAll(stacks.stream().distinct().collect(Collectors.toList())); + List workingItems = ClientListener.stackList == null ? new ArrayList<>() : ClientListener.stackList; + if (Core.runtimeConfig.craftableOnly) { + List workingRecipes = new ArrayList<>(); + REIRecipeManager.instance().findUsageForItems(getInventoryItemsTypes()).forEach(workingRecipes::add); + workingItems = new ArrayList<>(); + for(IRecipe workingRecipe : workingRecipes) { + List list = workingRecipe.getOutput(); + try { + workingItems.addAll((List) list); + } catch (Exception e) { + } + } + } + final List finalWorkingItems = workingItems; + view.addAll(stacks.stream().filter(itemStack -> { + for(ItemStack workingItem : finalWorkingItems) + if (itemStack.isEqualIgnoreTags(workingItem)) + return true; + return false; + }).distinct().collect(Collectors.toList())); page = 0; fillSlots(); } + private List getInventoryItemsTypes() { + List> field_7543 = ImmutableList.of(MinecraftClient.getInstance().player.inventory.main, MinecraftClient.getInstance().player.inventory.armor + , MinecraftClient.getInstance().player.inventory.offHand); + List inventoryStacks = new ArrayList<>(); + field_7543.forEach(inventoryStacks::addAll); + return inventoryStacks.stream().distinct().collect(Collectors.toList()); + } + private boolean filterItem(ItemStack itemStack, List arguments) { String mod = getMod(itemStack); List toolTipsList = REIRenderHelper.getOverlayedGui().getStackTooltip(itemStack); diff --git a/src/main/java/me/shedaniel/gui/REIRenderHelper.java b/src/main/java/me/shedaniel/gui/REIRenderHelper.java index 99f22c120..81d5be801 100755 --- a/src/main/java/me/shedaniel/gui/REIRenderHelper.java +++ b/src/main/java/me/shedaniel/gui/REIRenderHelper.java @@ -26,6 +26,7 @@ import java.util.stream.Collectors; * Created by James on 7/28/2018. */ public class REIRenderHelper { + static Point mouseLoc; static public GuiItemList reiGui; static ContainerGui overlayedGui; @@ -230,6 +231,10 @@ public class REIRenderHelper { reiGui.tick(); } + public static boolean isGuiVisible() { + return reiGui != null && reiGui.visible; + } + public static boolean recipeKeyBind() { if (!(MinecraftClient.getInstance().currentGui instanceof ContainerGui)) return false; @@ -271,4 +276,5 @@ public class REIRenderHelper { } return false; } + } diff --git a/src/main/java/me/shedaniel/gui/RecipeGui.java b/src/main/java/me/shedaniel/gui/RecipeGui.java index 11731b120..7e6acdef9 100755 --- a/src/main/java/me/shedaniel/gui/RecipeGui.java +++ b/src/main/java/me/shedaniel/gui/RecipeGui.java @@ -1,7 +1,7 @@ package me.shedaniel.gui; import com.mojang.blaze3d.platform.GlStateManager; -import me.shedaniel.api.DisplayCategoryCraftable; +import me.shedaniel.api.IDisplayCategoryCraftable; import me.shedaniel.api.IDisplayCategory; import me.shedaniel.api.IRecipe; import me.shedaniel.gui.widget.Button; @@ -166,12 +166,12 @@ public class RecipeGui extends ContainerGui { List newControls = new LinkedList<>(); selectedCategory.addWidget(newControls, 0); - if (selectedCategory instanceof DisplayCategoryCraftable) - ((DisplayCategoryCraftable) selectedCategory).registerAutoCraftButton(newControls, this, getPrevScreen(), recipe, 0); + if (selectedCategory instanceof IDisplayCategoryCraftable) + ((IDisplayCategoryCraftable) selectedCategory).registerAutoCraftButton(newControls, this, getPrevScreen(), recipe, 0); if (recipes.get(selectedCategory).size() >= recipePointer + 2) { selectedCategory.addWidget(newControls, 1); - if (selectedCategory instanceof DisplayCategoryCraftable) - ((DisplayCategoryCraftable) selectedCategory).registerAutoCraftButton(newControls, this, getPrevScreen(), recipes.get(selectedCategory).get(recipePointer + 1), 1); + if (selectedCategory instanceof IDisplayCategoryCraftable) + ((IDisplayCategoryCraftable) selectedCategory).registerAutoCraftButton(newControls, this, getPrevScreen(), recipes.get(selectedCategory).get(recipePointer + 1), 1); } newControls.forEach(f -> f.move(left, top)); controls.addAll(newControls); @@ -283,4 +283,5 @@ public class RecipeGui extends ContainerGui { private int getTotalPages() { return MathHelper.clamp(riseDoublesToInt(recipes.get(selectedCategory).size() / 2d), 1, Integer.MAX_VALUE); } + } diff --git a/src/main/java/me/shedaniel/gui/SearchArgument.java b/src/main/java/me/shedaniel/gui/SearchArgument.java index 253f87814..5eeddf01c 100644 --- a/src/main/java/me/shedaniel/gui/SearchArgument.java +++ b/src/main/java/me/shedaniel/gui/SearchArgument.java @@ -32,4 +32,5 @@ public class SearchArgument { public String toString() { return String.format("Argument[%s]: name = %s, include = %b", argumentType.name(), text, include); } + } diff --git a/src/main/java/me/shedaniel/gui/widget/Button.java b/src/main/java/me/shedaniel/gui/widget/Button.java index e4339fd64..f87b72f73 100755 --- a/src/main/java/me/shedaniel/gui/widget/Button.java +++ b/src/main/java/me/shedaniel/gui/widget/Button.java @@ -17,7 +17,6 @@ public class Button extends Control { private String buttonText; protected static final Identifier BUTTON_TEXTURES = new Identifier("textures/gui/widgets.png"); - public Button(int x, int y, int width, int height, String buttonText) { super(x, y, width, height); this.buttonText = buttonText; @@ -32,7 +31,6 @@ public class Button extends Control { buttonText = text; } - @Override public void draw() { GlStateManager.pushMatrix(); diff --git a/src/main/java/me/shedaniel/gui/widget/Control.java b/src/main/java/me/shedaniel/gui/widget/Control.java index 9be17a0c2..18e89113f 100755 --- a/src/main/java/me/shedaniel/gui/widget/Control.java +++ b/src/main/java/me/shedaniel/gui/widget/Control.java @@ -1,7 +1,7 @@ package me.shedaniel.gui.widget; import com.mojang.blaze3d.platform.GlStateManager; -import me.shedaniel.api.TriBooleanProducer; +import me.shedaniel.api.TriBooleanSupplier; import me.shedaniel.gui.Drawable; import net.minecraft.client.render.BufferBuilder; import net.minecraft.client.render.Tessellator; @@ -15,9 +15,10 @@ import java.util.function.IntFunction; * Created by James on 7/29/2018. */ public abstract class Control extends Drawable { + private boolean enabled = true; public IntFunction onClick; - public TriBooleanProducer onKeyDown; + public TriBooleanSupplier onKeyDown; public BiConsumer charPressed; public Control(int x, int y, int width, int height) { @@ -55,7 +56,6 @@ public abstract class Control extends Drawable { p_drawRect_1_ = p_drawRect_3_; p_drawRect_3_ = lvt_5_3_; } - float lvt_5_3_1 = (float) (p_drawRect_4_ >> 24 & 255) / 255.0F; float lvt_6_1_ = (float) (p_drawRect_4_ >> 16 & 255) / 255.0F; float lvt_7_1_ = (float) (p_drawRect_4_ >> 8 & 255) / 255.0F; diff --git a/src/main/java/me/shedaniel/gui/widget/IFocusable.java b/src/main/java/me/shedaniel/gui/widget/IFocusable.java index 54a0b9426..5735ab3f1 100755 --- a/src/main/java/me/shedaniel/gui/widget/IFocusable.java +++ b/src/main/java/me/shedaniel/gui/widget/IFocusable.java @@ -4,7 +4,9 @@ package me.shedaniel.gui.widget; * Created by James on 8/3/2018. */ public interface IFocusable { + public boolean hasFocus(); public void setFocused(boolean val); + } diff --git a/src/main/java/me/shedaniel/gui/widget/REISlot.java b/src/main/java/me/shedaniel/gui/widget/REISlot.java index d1a41ac59..6896163cf 100755 --- a/src/main/java/me/shedaniel/gui/widget/REISlot.java +++ b/src/main/java/me/shedaniel/gui/widget/REISlot.java @@ -22,6 +22,7 @@ import java.util.stream.Collectors; * Created by James on 7/28/2018. */ public class REISlot extends Control { + private static final Identifier RECIPE_GUI = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png"); private boolean cheatable = false; private List itemList = new LinkedList<>(); diff --git a/src/main/java/me/shedaniel/gui/widget/TextBox.java b/src/main/java/me/shedaniel/gui/widget/TextBox.java index 6329c5c23..566839eb2 100755 --- a/src/main/java/me/shedaniel/gui/widget/TextBox.java +++ b/src/main/java/me/shedaniel/gui/widget/TextBox.java @@ -81,4 +81,5 @@ public class TextBox extends Control implements IFocusable { public void tick() { textField.tick(); } + } diff --git a/src/main/java/me/shedaniel/gui/widget/WidgetArrow.java b/src/main/java/me/shedaniel/gui/widget/WidgetArrow.java index 524f1ce39..8c0229f36 100755 --- a/src/main/java/me/shedaniel/gui/widget/WidgetArrow.java +++ b/src/main/java/me/shedaniel/gui/widget/WidgetArrow.java @@ -6,6 +6,7 @@ import net.minecraft.client.render.GuiLighting; import net.minecraft.util.Identifier; public class WidgetArrow extends Control { + private static final Identifier RECIPE_GUI = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png"); private int progress = 0; private int updateTick = 0; @@ -45,4 +46,5 @@ public class WidgetArrow extends Control { progress = 0; } } + } diff --git a/src/main/java/me/shedaniel/impl/REIRecipeManager.java b/src/main/java/me/shedaniel/impl/REIRecipeManager.java index 657187da8..fbecbd6ac 100755 --- a/src/main/java/me/shedaniel/impl/REIRecipeManager.java +++ b/src/main/java/me/shedaniel/impl/REIRecipeManager.java @@ -21,6 +21,7 @@ import java.util.function.Function; * Created by James on 8/7/2018. */ public class REIRecipeManager implements IRecipeManager { + private Map> recipeList; private List displayAdapters; public static RecipeManager recipeManager; @@ -34,6 +35,10 @@ public class REIRecipeManager implements IRecipeManager { guiExcludeMap = new HashMap<>(); } + public Map> getRecipeList() { + return recipeList; + } + public List getDisplayAdapters() { return displayAdapters; } @@ -55,18 +60,17 @@ public class REIRecipeManager implements IRecipeManager { public boolean canAddSlot(Class guiClass, Rectangle slotRect) { if (!guiExcludeMap.containsKey(guiClass)) return true; - for(Function rectangleBooleanFunction : guiExcludeMap.get(guiClass)) { + for(Function rectangleBooleanFunction : guiExcludeMap.get(guiClass)) if (!rectangleBooleanFunction.apply(slotRect)) return false; - } return true; } @Override public void addRecipe(String id, IRecipe recipe) { - if (recipeList.containsKey(id)) { + if (recipeList.containsKey(id)) recipeList.get(id).add(recipe); - } else { + else { List recipes = new LinkedList<>(); recipeList.put(id, recipes); recipes.add(recipe); @@ -75,9 +79,9 @@ public class REIRecipeManager implements IRecipeManager { @Override public void addRecipe(String id, List recipes) { - if (recipeList.containsKey(id)) { + if (recipeList.containsKey(id)) recipeList.get(id).addAll(recipes); - } else { + else { List newRecipeList = new LinkedList<>(); recipeList.put(id, newRecipeList); newRecipeList.addAll(recipes); @@ -93,21 +97,15 @@ public class REIRecipeManager implements IRecipeManager { public Map> getRecipesFor(ItemStack stack) { Map> categories = new HashMap<>(); displayAdapters.forEach(f -> categories.put(f, new LinkedList<>())); - for(List value : recipeList.values()) { - for(IRecipe iRecipe : value) { - for(Object o : iRecipe.getOutput()) { - if (o instanceof ItemStack) { - if (ItemStack.areEqualIgnoreTags(stack, (ItemStack) o)) { - for(IDisplayCategory iDisplayCategory : categories.keySet()) { + for(List value : recipeList.values()) + for(IRecipe iRecipe : value) + for(Object o : iRecipe.getOutput()) + if (o instanceof ItemStack) + if (ItemStack.areEqualIgnoreTags(stack, (ItemStack) o)) + for(IDisplayCategory iDisplayCategory : categories.keySet()) if (iDisplayCategory.getId() == iRecipe.getId()) { categories.get(iDisplayCategory).add(iRecipe); } - } - } - } - } - } - } categories.keySet().removeIf(f -> categories.get(f).isEmpty()); return categories; } @@ -115,20 +113,18 @@ public class REIRecipeManager implements IRecipeManager { public Map> getUsesFor(ItemStack stack) { Map> categories = new HashMap<>(); displayAdapters.forEach(f -> categories.put(f, new LinkedList<>())); - for(List value : recipeList.values()) { + for(List value : recipeList.values()) for(IRecipe iRecipe : value) { boolean found = false; for(Object o : iRecipe.getInput()) { List input = (List) o; - for(ItemStack itemStack : input) { if (ItemStack.areEqualIgnoreTags(itemStack, stack)) { - for(IDisplayCategory iDisplayCategory : categories.keySet()) { + for(IDisplayCategory iDisplayCategory : categories.keySet()) if (iDisplayCategory.getId() == iRecipe.getId()) { categories.get(iDisplayCategory).add(iRecipe); found = true; } - } if (found) break; } @@ -137,11 +133,18 @@ public class REIRecipeManager implements IRecipeManager { break; } } - } categories.keySet().removeIf(f -> categories.get(f).isEmpty()); return categories; } + public List findUsageForItems(List types) { + List recipes = new ArrayList<>(); + types.forEach(item -> { + Map> itemUsages = getUsesFor(item); + itemUsages.values().forEach(iRecipes -> recipes.addAll(iRecipes)); + }); + return recipes; + } public List getAdatapersForOutput(ItemStack stack) { return null; @@ -166,8 +169,7 @@ public class REIRecipeManager implements IRecipeManager { RecipeGui gui; if (MinecraftClient.getInstance().currentGui instanceof RecipeGui) gui = new RecipeGui(null, ((RecipeGui) MinecraftClient.getInstance().currentGui).getPrevScreen(), recipes); - else - gui = new RecipeGui(null, MinecraftClient.getInstance().currentGui, recipes); + else gui = new RecipeGui(null, MinecraftClient.getInstance().currentGui, recipes); MinecraftClient.getInstance().openGui(gui); } @@ -178,8 +180,8 @@ public class REIRecipeManager implements IRecipeManager { RecipeGui gui; if (MinecraftClient.getInstance().currentGui instanceof RecipeGui) gui = new RecipeGui(null, ((RecipeGui) MinecraftClient.getInstance().currentGui).getPrevScreen(), recipes); - else - gui = new RecipeGui(null, MinecraftClient.getInstance().currentGui, recipes); + else gui = new RecipeGui(null, MinecraftClient.getInstance().currentGui, recipes); MinecraftClient.getInstance().openGui(gui); } + } diff --git a/src/main/java/me/shedaniel/library/KeyBindFunction.java b/src/main/java/me/shedaniel/library/KeyBindFunction.java index 4243d7433..e15caa70a 100644 --- a/src/main/java/me/shedaniel/library/KeyBindFunction.java +++ b/src/main/java/me/shedaniel/library/KeyBindFunction.java @@ -19,4 +19,5 @@ public abstract class KeyBindFunction { } public abstract boolean apply(int key); + } diff --git a/src/main/java/me/shedaniel/library/Sink.java b/src/main/java/me/shedaniel/library/Sink.java index 90de84b4f..e2a6fca5b 100755 --- a/src/main/java/me/shedaniel/library/Sink.java +++ b/src/main/java/me/shedaniel/library/Sink.java @@ -2,5 +2,7 @@ package me.shedaniel.library; @FunctionalInterface public interface Sink { + public void Sink(); + } diff --git a/src/main/java/me/shedaniel/listenerdefinitions/CharInput.java b/src/main/java/me/shedaniel/listenerdefinitions/CharInput.java index 319705ce2..d2764e2df 100755 --- a/src/main/java/me/shedaniel/listenerdefinitions/CharInput.java +++ b/src/main/java/me/shedaniel/listenerdefinitions/CharInput.java @@ -6,4 +6,5 @@ package me.shedaniel.listenerdefinitions; public interface CharInput extends IEvent { public boolean charInput(long p_onCharEvent_1_, int p_onCharEvent_3_, int p_onCharEvent_4_); + } diff --git a/src/main/java/me/shedaniel/listenerdefinitions/ClientTickable.java b/src/main/java/me/shedaniel/listenerdefinitions/ClientTickable.java index 2dc4405ae..9ea04e69a 100644 --- a/src/main/java/me/shedaniel/listenerdefinitions/ClientTickable.java +++ b/src/main/java/me/shedaniel/listenerdefinitions/ClientTickable.java @@ -1,5 +1,7 @@ package me.shedaniel.listenerdefinitions; public interface ClientTickable extends IEvent { + public void clientTick(); + } diff --git a/src/main/java/me/shedaniel/listenerdefinitions/DoneLoading.java b/src/main/java/me/shedaniel/listenerdefinitions/DoneLoading.java index 9b8ef1d33..141585e3e 100755 --- a/src/main/java/me/shedaniel/listenerdefinitions/DoneLoading.java +++ b/src/main/java/me/shedaniel/listenerdefinitions/DoneLoading.java @@ -4,5 +4,7 @@ package me.shedaniel.listenerdefinitions; * Created by James on 7/27/2018. */ public interface DoneLoading extends IEvent { + void onDoneLoading(); + } diff --git a/src/main/java/me/shedaniel/listenerdefinitions/DrawContainer.java b/src/main/java/me/shedaniel/listenerdefinitions/DrawContainer.java index 038b64b4d..6c1722425 100755 --- a/src/main/java/me/shedaniel/listenerdefinitions/DrawContainer.java +++ b/src/main/java/me/shedaniel/listenerdefinitions/DrawContainer.java @@ -6,5 +6,7 @@ import net.minecraft.client.gui.ContainerGui; * Created by James on 7/27/2018. */ public interface DrawContainer extends IEvent { + public void draw(int mouseX, int mouseY, float dunno, ContainerGui gui); + } diff --git a/src/main/java/me/shedaniel/listenerdefinitions/GuiCickListener.java b/src/main/java/me/shedaniel/listenerdefinitions/GuiCickListener.java deleted file mode 100755 index ff8153d30..000000000 --- a/src/main/java/me/shedaniel/listenerdefinitions/GuiCickListener.java +++ /dev/null @@ -1,8 +0,0 @@ -package me.shedaniel.listenerdefinitions; - -/** - * Created by James on 7/29/2018. - */ -public interface GuiCickListener extends IEvent { - public boolean onClick(int x, int y, int button); -} diff --git a/src/main/java/me/shedaniel/listenerdefinitions/GuiClick.java b/src/main/java/me/shedaniel/listenerdefinitions/GuiClick.java new file mode 100755 index 000000000..98ea5901b --- /dev/null +++ b/src/main/java/me/shedaniel/listenerdefinitions/GuiClick.java @@ -0,0 +1,10 @@ +package me.shedaniel.listenerdefinitions; + +/** + * Created by James on 7/29/2018. + */ +public interface GuiClick extends IEvent { + + public boolean onClick(int x, int y, int button); + +} diff --git a/src/main/java/me/shedaniel/listenerdefinitions/GuiKeyDown.java b/src/main/java/me/shedaniel/listenerdefinitions/GuiKeyDown.java index 8a3a3b667..3070b83e1 100755 --- a/src/main/java/me/shedaniel/listenerdefinitions/GuiKeyDown.java +++ b/src/main/java/me/shedaniel/listenerdefinitions/GuiKeyDown.java @@ -6,4 +6,5 @@ package me.shedaniel.listenerdefinitions; public interface GuiKeyDown extends IEvent { public boolean keyDown(int p_keyPressed_1_, int p_keyPressed_2_, int p_keyPressed_3_); + } diff --git a/src/main/java/me/shedaniel/listenerdefinitions/GuiMouseScroll.java b/src/main/java/me/shedaniel/listenerdefinitions/GuiMouseScroll.java new file mode 100755 index 000000000..a95794198 --- /dev/null +++ b/src/main/java/me/shedaniel/listenerdefinitions/GuiMouseScroll.java @@ -0,0 +1,7 @@ +package me.shedaniel.listenerdefinitions; + +public interface GuiMouseScroll extends IEvent { + + public boolean mouseScrolled(double direction); + +} diff --git a/src/main/java/me/shedaniel/listenerdefinitions/IMixinContainerGui.java b/src/main/java/me/shedaniel/listenerdefinitions/IMixinContainerGui.java index a4b2f2004..e4b500ec2 100755 --- a/src/main/java/me/shedaniel/listenerdefinitions/IMixinContainerGui.java +++ b/src/main/java/me/shedaniel/listenerdefinitions/IMixinContainerGui.java @@ -4,6 +4,7 @@ import net.minecraft.container.Slot; import net.minecraft.item.ItemStack; public interface IMixinContainerGui { + public ItemStack getDraggedStack(); public int getGuiLeft(); @@ -15,4 +16,5 @@ public interface IMixinContainerGui { public int getXSize(); public Slot getHoveredSlot(); + } diff --git a/src/main/java/me/shedaniel/listenerdefinitions/KeybindHandler.java b/src/main/java/me/shedaniel/listenerdefinitions/KeybindHandler.java deleted file mode 100644 index 0e892c9b6..000000000 --- a/src/main/java/me/shedaniel/listenerdefinitions/KeybindHandler.java +++ /dev/null @@ -1,7 +0,0 @@ -package me.shedaniel.listenerdefinitions; - -public interface KeybindHandler extends IEvent { - - public void processKeybinds(); - -} diff --git a/src/main/java/me/shedaniel/listenerdefinitions/MinecraftResize.java b/src/main/java/me/shedaniel/listenerdefinitions/MinecraftResize.java index d3086c6a2..6a39826a0 100755 --- a/src/main/java/me/shedaniel/listenerdefinitions/MinecraftResize.java +++ b/src/main/java/me/shedaniel/listenerdefinitions/MinecraftResize.java @@ -4,5 +4,7 @@ package me.shedaniel.listenerdefinitions; * Created by James on 7/28/2018. */ public interface MinecraftResize extends IEvent { + public void resize(int scaledWidth, int scaledHeight); + } diff --git a/src/main/java/me/shedaniel/listenerdefinitions/MouseScrollListener.java b/src/main/java/me/shedaniel/listenerdefinitions/MouseScrollListener.java deleted file mode 100755 index 9d0be2fb2..000000000 --- a/src/main/java/me/shedaniel/listenerdefinitions/MouseScrollListener.java +++ /dev/null @@ -1,5 +0,0 @@ -package me.shedaniel.listenerdefinitions; - -public interface MouseScrollListener extends IEvent { - public boolean mouseScrolled(double direction); -} diff --git a/src/main/java/me/shedaniel/listenerdefinitions/PotionCraftingAdder.java b/src/main/java/me/shedaniel/listenerdefinitions/PotionCraftingAdder.java index f8636435a..02bd9e42c 100644 --- a/src/main/java/me/shedaniel/listenerdefinitions/PotionCraftingAdder.java +++ b/src/main/java/me/shedaniel/listenerdefinitions/PotionCraftingAdder.java @@ -4,5 +4,7 @@ import net.minecraft.item.Item; import net.minecraft.potion.Potion; public interface PotionCraftingAdder extends IEvent { + public void addPotionRecipe(Potion inputType, Item reagent, Potion outputType); + } diff --git a/src/main/java/me/shedaniel/listenerdefinitions/RecipeLoadListener.java b/src/main/java/me/shedaniel/listenerdefinitions/RecipeLoadListener.java index 9cd559f24..cb7fa577d 100755 --- a/src/main/java/me/shedaniel/listenerdefinitions/RecipeLoadListener.java +++ b/src/main/java/me/shedaniel/listenerdefinitions/RecipeLoadListener.java @@ -3,5 +3,7 @@ package me.shedaniel.listenerdefinitions; import net.minecraft.recipe.RecipeManager; public interface RecipeLoadListener extends IEvent { + public void recipesLoaded(RecipeManager recipeManager); + } diff --git a/src/main/java/me/shedaniel/listeners/DrawContainerListener.java b/src/main/java/me/shedaniel/listeners/DrawContainerListener.java index 0f501a3f7..565d8b7ab 100755 --- a/src/main/java/me/shedaniel/listeners/DrawContainerListener.java +++ b/src/main/java/me/shedaniel/listeners/DrawContainerListener.java @@ -2,7 +2,6 @@ package me.shedaniel.listeners; import me.shedaniel.gui.REIRenderHelper; import me.shedaniel.listenerdefinitions.*; -import net.fabricmc.fabric.networking.CustomPayloadPacketRegistry; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.ContainerGui; import net.minecraft.client.gui.Gui; @@ -12,7 +11,7 @@ import net.minecraft.item.ItemGroup; /** * Created by James on 7/27/2018. */ -public class DrawContainerListener implements DrawContainer, GuiCickListener, GuiKeyDown, CharInput, ClientTickable, MouseScrollListener, MinecraftResize { +public class DrawContainerListener implements DrawContainer, GuiClick, GuiKeyDown, CharInput, ClientTickable, GuiMouseScroll, MinecraftResize { @Override public void draw(int x, int y, float dunno, ContainerGui gui) { diff --git a/src/main/java/me/shedaniel/mixins/MixinContainerGui.java b/src/main/java/me/shedaniel/mixins/MixinContainerGui.java index b9bf0545b..50053998f 100755 --- a/src/main/java/me/shedaniel/mixins/MixinContainerGui.java +++ b/src/main/java/me/shedaniel/mixins/MixinContainerGui.java @@ -19,6 +19,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; */ @Mixin(ContainerGui.class) public abstract class MixinContainerGui extends Gui implements IMixinContainerGui { + @Shadow protected Slot focusedSlot; @Shadow @@ -40,32 +41,24 @@ public abstract class MixinContainerGui extends Gui implements IMixinContainerGu @Inject(method = "mouseClicked(DDI)Z", at = @At("HEAD"), cancellable = true) private void mouseClick(double p_mouseClicked_1_, double p_mouseClicked_3_, int p_mouseClicked_5_, CallbackInfoReturnable ci) { - boolean handled = false; - for(GuiCickListener listener : Core.getListeners(GuiCickListener.class)) { + for(GuiClick listener : Core.getListeners(GuiClick.class)) if (listener.onClick((int) p_mouseClicked_1_, (int) p_mouseClicked_3_, p_mouseClicked_5_)) { ci.setReturnValue(true); - handled = true; + ci.cancel(); } - } - if (handled) - ci.cancel(); } @Inject(method = "keyPressed(III)Z", at = @At("HEAD"), cancellable = true) private void onKeyPressed(int p_keyPressed_1_, int p_keyPressed_2_, int p_keyPressed_3_, CallbackInfoReturnable ci) { - boolean handled = false; - for(GuiKeyDown listener : Core.getListeners(GuiKeyDown.class)) { - if (listener.keyDown(p_keyPressed_1_, p_keyPressed_2_, p_keyPressed_3_)) - handled = true; - } - if (handled) { - ci.setReturnValue(handled); - ci.cancel(); - } + for(GuiKeyDown listener : Core.getListeners(GuiKeyDown.class)) + if (listener.keyDown(p_keyPressed_1_, p_keyPressed_2_, p_keyPressed_3_)) { + ci.setReturnValue(true); + ci.cancel(); + } } public boolean mouseScrolled(double p_mouseScrolled_1_) { - for(MouseScrollListener listener : Core.getListeners(MouseScrollListener.class)) + for(GuiMouseScroll listener : Core.getListeners(GuiMouseScroll.class)) if (listener.mouseScrolled(p_mouseScrolled_1_)) return true; return super.mouseScrolled(p_mouseScrolled_1_); @@ -100,4 +93,5 @@ public abstract class MixinContainerGui extends Gui implements IMixinContainerGu public int getContainerWidth() { return containerWidth; } + } diff --git a/src/main/java/me/shedaniel/mixins/MixinCreativePlayerInventoryGui.java b/src/main/java/me/shedaniel/mixins/MixinCreativePlayerInventoryGui.java index 1385e374f..737f3c280 100644 --- a/src/main/java/me/shedaniel/mixins/MixinCreativePlayerInventoryGui.java +++ b/src/main/java/me/shedaniel/mixins/MixinCreativePlayerInventoryGui.java @@ -1,6 +1,8 @@ package me.shedaniel.mixins; import me.shedaniel.Core; +import me.shedaniel.gui.REIRenderHelper; +import me.shedaniel.listenerdefinitions.GuiClick; import me.shedaniel.listenerdefinitions.GuiKeyDown; import net.minecraft.client.gui.ingame.AbstractPlayerInventoryGui; import net.minecraft.client.gui.ingame.CreativePlayerInventoryGui; @@ -27,15 +29,13 @@ public abstract class MixinCreativePlayerInventoryGui extends AbstractPlayerInve @Inject(method = "keyPressed(III)Z", at = @At("HEAD"), cancellable = true) public void keyPressed(int p_keyPressed_1_, int p_keyPressed_2_, int p_keyPressed_3_, CallbackInfoReturnable ci) { - boolean handled = false; if (method_2469() == ItemGroup.INVENTORY.getId()) for(GuiKeyDown listener : Core.getListeners(GuiKeyDown.class)) if (listener.keyDown(p_keyPressed_1_, p_keyPressed_2_, p_keyPressed_3_)) { ci.setReturnValue(true); - handled = true; + ci.cancel(); + return; } - if (handled) - ci.cancel(); } @Inject(method = "mouseScrolled(D)Z", at = @At("HEAD"), cancellable = true) @@ -46,4 +46,14 @@ public abstract class MixinCreativePlayerInventoryGui extends AbstractPlayerInve } } + @Inject(method = "mouseClicked(DDI)Z", at = @At("HEAD"), cancellable = true) + public void mouseClicked(double double_1, double double_2, int int_1, CallbackInfoReturnable ci) { + if (method_2469() == ItemGroup.INVENTORY.getId() && REIRenderHelper.isGuiVisible()) + for(GuiClick guiClick : Core.getListeners(GuiClick.class)) + if (guiClick.onClick((int) double_1, (int) double_2, int_1)) { + ci.setReturnValue(true); + ci.cancel(); + } + } + } diff --git a/src/main/java/me/shedaniel/mixins/MixinDoneLoading.java b/src/main/java/me/shedaniel/mixins/MixinDoneLoading.java index 18d67479d..add3e214d 100755 --- a/src/main/java/me/shedaniel/mixins/MixinDoneLoading.java +++ b/src/main/java/me/shedaniel/mixins/MixinDoneLoading.java @@ -13,9 +13,11 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; */ @Mixin(Bootstrap.class) public class MixinDoneLoading { + @Inject(method = "initialize", at = @At("RETURN")) private static void onBootstrapRegister(CallbackInfo ci) { Core.LOGGER.info("REI: Done Loading"); Core.getListeners(DoneLoading.class).forEach(DoneLoading::onDoneLoading); } + } diff --git a/src/main/java/me/shedaniel/mixins/MixinKeyboardListener.java b/src/main/java/me/shedaniel/mixins/MixinKeyboardListener.java index f7c69373e..2732db4dc 100755 --- a/src/main/java/me/shedaniel/mixins/MixinKeyboardListener.java +++ b/src/main/java/me/shedaniel/mixins/MixinKeyboardListener.java @@ -13,6 +13,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; */ @Mixin(Keyboard.class) public class MixinKeyboardListener { + @Inject(method = "onChar", at = @At("RETURN"), cancellable = true) private void onCharEvent(long p_onCharEvent_1_, int p_onCharEvent_3_, int p_onCharEvent_4_, CallbackInfo ci) { boolean handled = false; @@ -24,4 +25,5 @@ public class MixinKeyboardListener { if (handled) ci.cancel(); } + } diff --git a/src/main/java/me/shedaniel/mixins/MixinRecipeManager.java b/src/main/java/me/shedaniel/mixins/MixinRecipeManager.java index 8fffc11dd..cef555f8d 100755 --- a/src/main/java/me/shedaniel/mixins/MixinRecipeManager.java +++ b/src/main/java/me/shedaniel/mixins/MixinRecipeManager.java @@ -23,4 +23,5 @@ public class MixinRecipeManager { listener.recipesLoaded(recipeManager); } } + } diff --git a/src/main/java/me/shedaniel/plugin/RandomRecipe.java b/src/main/java/me/shedaniel/plugin/RandomRecipe.java index bb1a1a7f0..382f3a726 100644 --- a/src/main/java/me/shedaniel/plugin/RandomRecipe.java +++ b/src/main/java/me/shedaniel/plugin/RandomRecipe.java @@ -4,6 +4,7 @@ import me.shedaniel.api.IRecipe; import net.minecraft.block.Blocks; import net.minecraft.item.ItemStack; +import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List; @@ -30,4 +31,10 @@ public class RandomRecipe implements IRecipe { public List> getInput() { return new LinkedList<>(Arrays.asList(new LinkedList<>(Arrays.asList(new ItemStack[]{new ItemStack(Blocks.OAK_LOG.getItem())})))); } + + @Override + public List> getRecipeRequiredInput() { + return new ArrayList<>(); + } + } \ No newline at end of file diff --git a/src/main/java/me/shedaniel/plugin/TestRandomCategory.java b/src/main/java/me/shedaniel/plugin/TestRandomCategory.java index 2076fca19..0824e7acc 100644 --- a/src/main/java/me/shedaniel/plugin/TestRandomCategory.java +++ b/src/main/java/me/shedaniel/plugin/TestRandomCategory.java @@ -66,4 +66,5 @@ public class TestRandomCategory implements IDisplayCategory { public ItemStack getCategoryIcon() { return item; } + } \ No newline at end of file diff --git a/src/main/java/me/shedaniel/plugin/blastfurnace/VanillaBlastFurnaceCategory.java b/src/main/java/me/shedaniel/plugin/blastfurnace/VanillaBlastFurnaceCategory.java index 1721fac05..7b6ad557e 100755 --- a/src/main/java/me/shedaniel/plugin/blastfurnace/VanillaBlastFurnaceCategory.java +++ b/src/main/java/me/shedaniel/plugin/blastfurnace/VanillaBlastFurnaceCategory.java @@ -1,6 +1,6 @@ package me.shedaniel.plugin.blastfurnace; -import me.shedaniel.api.DisplayCategoryCraftable; +import me.shedaniel.api.IDisplayCategoryCraftable; import me.shedaniel.gui.RecipeGui; import me.shedaniel.gui.widget.Control; import me.shedaniel.gui.widget.REISlot; @@ -21,7 +21,7 @@ import java.util.LinkedList; import java.util.List; import java.util.stream.Collectors; -public class VanillaBlastFurnaceCategory implements DisplayCategoryCraftable { +public class VanillaBlastFurnaceCategory implements IDisplayCategoryCraftable { private List recipes; @Override diff --git a/src/main/java/me/shedaniel/plugin/blastfurnace/VanillaBlastFurnaceRecipe.java b/src/main/java/me/shedaniel/plugin/blastfurnace/VanillaBlastFurnaceRecipe.java index dad285c71..3ef8fbeff 100755 --- a/src/main/java/me/shedaniel/plugin/blastfurnace/VanillaBlastFurnaceRecipe.java +++ b/src/main/java/me/shedaniel/plugin/blastfurnace/VanillaBlastFurnaceRecipe.java @@ -10,9 +10,7 @@ import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.smelting.BlastingRecipe; import net.minecraft.recipe.smelting.SmokingRecipe; -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; public class VanillaBlastFurnaceRecipe implements IRecipe { @@ -45,6 +43,14 @@ public class VanillaBlastFurnaceRecipe implements IRecipe { return input; } + @Override + public List> getRecipeRequiredInput() { + List> input = new LinkedList<>(); + for(Ingredient ingredient : recipe.getPreviewInputs()) + Collections.addAll(input, new LinkedList<>(Arrays.asList(ingredient.getStackArray()))); + return input; + } + public BlastingRecipe getRecipe() { return recipe; } diff --git a/src/main/java/me/shedaniel/plugin/crafting/VanillaCraftingCategory.java b/src/main/java/me/shedaniel/plugin/crafting/VanillaCraftingCategory.java index 6b858f456..66b78ed98 100755 --- a/src/main/java/me/shedaniel/plugin/crafting/VanillaCraftingCategory.java +++ b/src/main/java/me/shedaniel/plugin/crafting/VanillaCraftingCategory.java @@ -1,10 +1,9 @@ package me.shedaniel.plugin.crafting; -import me.shedaniel.api.DisplayCategoryCraftable; +import me.shedaniel.api.IDisplayCategoryCraftable; import me.shedaniel.gui.RecipeGui; import me.shedaniel.gui.widget.*; import me.shedaniel.listenerdefinitions.IMixinRecipeBookGui; -import me.shedaniel.mixins.MixinRecipeBookGui; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.Gui; @@ -18,7 +17,7 @@ import java.util.ArrayList; import java.util.LinkedList; import java.util.List; -public class VanillaCraftingCategory implements DisplayCategoryCraftable { +public class VanillaCraftingCategory implements IDisplayCategoryCraftable { Window mainWindow = MinecraftClient.getInstance().window; private List recipes; diff --git a/src/main/java/me/shedaniel/plugin/crafting/VanillaCraftingRecipe.java b/src/main/java/me/shedaniel/plugin/crafting/VanillaCraftingRecipe.java index c7d7bfeb2..1f05c80c0 100755 --- a/src/main/java/me/shedaniel/plugin/crafting/VanillaCraftingRecipe.java +++ b/src/main/java/me/shedaniel/plugin/crafting/VanillaCraftingRecipe.java @@ -4,6 +4,10 @@ import me.shedaniel.api.IRecipe; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Recipe; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + public abstract class VanillaCraftingRecipe implements IRecipe { public int getWidth() { @@ -16,4 +20,9 @@ public abstract class VanillaCraftingRecipe implements IRecipe { public abstract Recipe getRecipe(); + @Override + public List> getRecipeRequiredInput() { + return getInput(); + } + } diff --git a/src/main/java/me/shedaniel/plugin/furnace/VanillaFurnaceCategory.java b/src/main/java/me/shedaniel/plugin/furnace/VanillaFurnaceCategory.java index 67b73076c..e1c513bbf 100755 --- a/src/main/java/me/shedaniel/plugin/furnace/VanillaFurnaceCategory.java +++ b/src/main/java/me/shedaniel/plugin/furnace/VanillaFurnaceCategory.java @@ -1,6 +1,6 @@ package me.shedaniel.plugin.furnace; -import me.shedaniel.api.DisplayCategoryCraftable; +import me.shedaniel.api.IDisplayCategoryCraftable; import me.shedaniel.gui.RecipeGui; import me.shedaniel.gui.widget.Control; import me.shedaniel.gui.widget.REISlot; @@ -11,7 +11,6 @@ import net.minecraft.block.Blocks; import net.minecraft.block.entity.FurnaceBlockEntity; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.Gui; -import net.minecraft.client.gui.container.BlastFurnaceGui; import net.minecraft.client.gui.container.FurnaceGui; import net.minecraft.client.resource.language.I18n; import net.minecraft.item.Item; @@ -22,7 +21,7 @@ import java.util.LinkedList; import java.util.List; import java.util.stream.Collectors; -public class VanillaFurnaceCategory implements DisplayCategoryCraftable { +public class VanillaFurnaceCategory implements IDisplayCategoryCraftable { private List recipes; @Override diff --git a/src/main/java/me/shedaniel/plugin/furnace/VanillaFurnaceRecipe.java b/src/main/java/me/shedaniel/plugin/furnace/VanillaFurnaceRecipe.java index c207c386a..77e8d20b5 100755 --- a/src/main/java/me/shedaniel/plugin/furnace/VanillaFurnaceRecipe.java +++ b/src/main/java/me/shedaniel/plugin/furnace/VanillaFurnaceRecipe.java @@ -9,6 +9,7 @@ import net.minecraft.recipe.Recipe; import net.minecraft.recipe.smelting.SmeltingRecipe; import java.util.Arrays; +import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.stream.Collectors; @@ -44,6 +45,14 @@ public class VanillaFurnaceRecipe implements IRecipe { return input; } + @Override + public List> getRecipeRequiredInput() { + List> input = new LinkedList<>(); + for(Ingredient ingredient : recipe.getPreviewInputs()) + Collections.addAll(input, new LinkedList<>(Arrays.asList(ingredient.getStackArray()))); + return input; + } + public Recipe getRecipe() { return recipe; } diff --git a/src/main/java/me/shedaniel/plugin/potion/VanillaPotionRecipe.java b/src/main/java/me/shedaniel/plugin/potion/VanillaPotionRecipe.java index e7343d449..eb482d8d3 100755 --- a/src/main/java/me/shedaniel/plugin/potion/VanillaPotionRecipe.java +++ b/src/main/java/me/shedaniel/plugin/potion/VanillaPotionRecipe.java @@ -37,6 +37,14 @@ public class VanillaPotionRecipe implements IRecipe { return input; } + @Override + public List> getRecipeRequiredInput() { + List> input = new LinkedLi