diff options
Diffstat (limited to 'src/main/java/me/shedaniel/rei/plugin')
5 files changed, 243 insertions, 13 deletions
diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultBlastingCategory.java b/src/main/java/me/shedaniel/rei/plugin/DefaultBlastingCategory.java index 75c35407c..69cafd573 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultBlastingCategory.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultBlastingCategory.java @@ -1,13 +1,20 @@ package me.shedaniel.rei.plugin; +import com.google.common.collect.Lists; import com.mojang.blaze3d.platform.GlStateManager; import me.shedaniel.rei.api.IRecipeCategory; -import me.shedaniel.rei.gui.widget.IWidget; -import me.shedaniel.rei.gui.widget.ItemSlotWidget; -import me.shedaniel.rei.gui.widget.RecipeBaseWidget; +import me.shedaniel.rei.api.IRecipeCategoryCraftable; +import me.shedaniel.rei.client.ClientHelper; +import me.shedaniel.rei.client.GuiHelper; +import me.shedaniel.rei.gui.widget.*; import me.shedaniel.rei.listeners.IMixinContainerGui; +import me.shedaniel.rei.listeners.IMixinRecipeBookGui; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.ContainerGui; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.container.BlastFurnaceGui; +import net.minecraft.client.gui.container.FurnaceGui; import net.minecraft.client.render.GuiLighting; import net.minecraft.client.resource.language.I18n; import net.minecraft.item.ItemStack; diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultCraftingCategory.java b/src/main/java/me/shedaniel/rei/plugin/DefaultCraftingCategory.java index ded3e3087..b7bd87d06 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultCraftingCategory.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultCraftingCategory.java @@ -2,13 +2,20 @@ package me.shedaniel.rei.plugin; import com.google.common.collect.Lists; import com.mojang.blaze3d.platform.GlStateManager; +import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.api.IRecipeCategory; -import me.shedaniel.rei.gui.widget.IWidget; -import me.shedaniel.rei.gui.widget.ItemSlotWidget; -import me.shedaniel.rei.gui.widget.RecipeBaseWidget; +import me.shedaniel.rei.api.IRecipeCategoryCraftable; +import me.shedaniel.rei.client.ClientHelper; +import me.shedaniel.rei.client.GuiHelper; +import me.shedaniel.rei.gui.widget.*; import me.shedaniel.rei.listeners.IMixinContainerGui; +import me.shedaniel.rei.listeners.IMixinRecipeBookGui; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.ContainerGui; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.container.CraftingTableGui; +import net.minecraft.client.gui.ingame.PlayerInventoryGui; import net.minecraft.client.render.GuiLighting; import net.minecraft.client.resource.language.I18n; import net.minecraft.item.ItemStack; diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java b/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java index 5d55de0e6..937a275c8 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java @@ -1,9 +1,25 @@ package me.shedaniel.rei.plugin; import com.google.common.collect.Lists; -import me.shedaniel.rei.RoughlyEnoughItemsCore; +import me.shedaniel.rei.api.IRecipeCategoryCraftable; import me.shedaniel.rei.api.IRecipePlugin; +import me.shedaniel.rei.client.ClientHelper; +import me.shedaniel.rei.client.GuiHelper; import me.shedaniel.rei.client.RecipeHelper; +import me.shedaniel.rei.gui.widget.ButtonWidget; +import me.shedaniel.rei.gui.widget.IWidget; +import me.shedaniel.rei.gui.widget.QueuedTooltip; +import me.shedaniel.rei.listeners.IMixinContainerGui; +import me.shedaniel.rei.listeners.IMixinRecipeBookGui; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.ContainerGui; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.container.BlastFurnaceGui; +import net.minecraft.client.gui.container.CraftingTableGui; +import net.minecraft.client.gui.container.FurnaceGui; +import net.minecraft.client.gui.container.SmokerGui; +import net.minecraft.client.gui.ingame.PlayerInventoryGui; +import net.minecraft.client.resource.language.I18n; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.crafting.ShapedRecipe; import net.minecraft.recipe.crafting.ShapelessRecipe; @@ -12,6 +28,8 @@ import net.minecraft.recipe.smelting.SmeltingRecipe; import net.minecraft.recipe.smelting.SmokingRecipe; import net.minecraft.util.Identifier; +import java.awt.*; +import java.util.Arrays; import java.util.List; public class DefaultPlugin implements IRecipePlugin { @@ -53,4 +71,188 @@ public class DefaultPlugin implements IRecipePlugin { BREWING_DISPLAYS.forEach(display -> RecipeHelper.registerRecipe(BREWING, display)); } + @Override + public void registerAutoCraftingGui() { + RecipeHelper.registerCategoryCraftable(new Class[]{DefaultShapelessDisplay.class, DefaultShapedDisplay.class}, new IRecipeCategoryCraftable<DefaultCraftingDisplay>() { + @Override + public boolean canAutoCraftHere(Class<? extends Gui> guiClass, DefaultCraftingDisplay recipe) { + return guiClass.isAssignableFrom(CraftingTableGui.class) || (guiClass.isAssignableFrom(PlayerInventoryGui.class) && recipe.getHeight() < 3 && recipe.getWidth() < 3); + } + + @Override + public boolean performAutoCraft(Gui gui, DefaultCraftingDisplay recipe) { + if (gui.getClass().isAssignableFrom(CraftingTableGui.class)) + ((IMixinRecipeBookGui) (((CraftingTableGui) gui).getRecipeBookGui())).getGhostSlots().reset(); + else if (gui.getClass().isAssignableFrom(PlayerInventoryGui.class)) + ((IMixinRecipeBookGui) (((PlayerInventoryGui) gui).getRecipeBookGui())).getGhostSlots().reset(); + else return false; + MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, recipe.getRecipe(), Gui.isShiftPressed()); + return true; + } + + @Override + public void registerAutoCraftButton(List<IWidget> widgets, Rectangle rectangle, IMixinContainerGui parentGui, DefaultCraftingDisplay recipe) { + Point startPoint = new Point((int) rectangle.getCenterX() - 58, (int) rectangle.getCenterY() - 27); + ButtonWidget widget; + widgets.add(widget = new ButtonWidget(rectangle.x + 134, startPoint.y + 45, 10, 10, "+") { + @Override + public void onPressed(int button, double mouseX, double mouseY) { + MinecraftClient.getInstance().openGui(parentGui.getContainerGui()); + if (canAutoCraftHere(parentGui.getContainerGui().getClass(), recipe)) + performAutoCraft(parentGui.getContainerGui(), recipe); + } + + @Override + public void draw(int mouseX, int mouseY, float partialTicks) { + super.draw(mouseX, mouseY, partialTicks); + List<String> tooltips = getToolTip(parentGui.getContainerGui(), recipe); + if (tooltips.size() > 0 && getBounds().contains(mouseX, mouseY)) + GuiHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), tooltips)); + } + }); + widget.enabled = canAutoCraftHere(parentGui.getContainerGui().getClass(), recipe); + } + + private List<String> getToolTip(ContainerGui parentGui, DefaultCraftingDisplay recipe) { + if (!(parentGui instanceof CraftingTableGui || parentGui instanceof PlayerInventoryGui)) + return Arrays.asList(I18n.translate("text.auto_craft.wrong_gui")); + if (parentGui instanceof PlayerInventoryGui && !(recipe.getHeight() < 3 && recipe.getWidth() < 3)) + return Arrays.asList(I18n.translate("text.auto_craft.crafting.too_small")); + return Lists.newArrayList(); + } + }); + RecipeHelper.registerCategoryCraftable(DefaultSmeltingDisplay.class, new IRecipeCategoryCraftable<DefaultSmeltingDisplay>() { + @Override + public boolean canAutoCraftHere(Class<? extends Gui> guiClass, DefaultSmeltingDisplay recipe) { + return guiClass.isAssignableFrom(FurnaceGui.class); + } + + @Override + public boolean performAutoCraft(Gui gui, DefaultSmeltingDisplay recipe) { + if (gui.getClass().isAssignableFrom(FurnaceGui.class)) + ((IMixinRecipeBookGui) (((FurnaceGui) gui).getRecipeBookGui())).getGhostSlots().reset(); + else return false; + MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, recipe.getRecipe(), Gui.isShiftPressed()); + return true; + } + + @Override + public void registerAutoCraftButton(List<IWidget> widgets, Rectangle rectangle, IMixinContainerGui parentGui, DefaultSmeltingDisplay recipe) { + Point startPoint = new Point((int) rectangle.getCenterX() - 58, (int) rectangle.getCenterY() - 27); + ButtonWidget widget; + widgets.add(widget = new ButtonWidget(rectangle.x + 134, startPoint.y + 45, 10, 10, "+") { + @Override + public void onPressed(int button, double mouseX, double mouseY) { + MinecraftClient.getInstance().openGui(parentGui.getContainerGui()); + if (canAutoCraftHere(parentGui.getContainerGui().getClass(), recipe)) + performAutoCraft(parentGui.getContainerGui(), recipe); + } + + @Override + public void draw(int mouseX, int mouseY, float partialTicks) { + super.draw(mouseX, mouseY, partialTicks); + List<String> tooltips = getToolTip(parentGui.getContainerGui(), recipe); + if (tooltips.size() > 0 && getBounds().contains(mouseX, mouseY)) + GuiHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), tooltips)); + } + }); + widget.enabled = canAutoCraftHere(parentGui.getContainerGui().getClass(), recipe); + } + + private List<String> getToolTip(ContainerGui parentGui, DefaultSmeltingDisplay recipe) { + if (!(parentGui instanceof FurnaceGui)) + return Arrays.asList(I18n.translate("text.auto_craft.wrong_gui")); + return Lists.newArrayList(); + } + }); + RecipeHelper.registerCategoryCraftable(DefaultSmokingDisplay.class, new IRecipeCategoryCraftable<DefaultSmokingDisplay>() { + @Override + public boolean canAutoCraftHere(Class<? extends Gui> guiClass, DefaultSmokingDisplay recipe) { + return guiClass.isAssignableFrom(SmokerGui.class); + } + + @Override + public boolean performAutoCraft(Gui gui, DefaultSmokingDisplay recipe) { + if (gui.getClass().isAssignableFrom(SmokerGui.class)) + ((IMixinRecipeBookGui) (((SmokerGui) gui).getRecipeBookGui())).getGhostSlots().reset(); + else return false; + MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, recipe.getRecipe(), Gui.isShiftPressed()); + return true; + } + + @Override + public void registerAutoCraftButton(List<IWidget> widgets, Rectangle rectangle, IMixinContainerGui parentGui, DefaultSmokingDisplay recipe) { + Point startPoint = new Point((int) rectangle.getCenterX() - 58, (int) rectangle.getCenterY() - 27); + ButtonWidget widget; + widgets.add(widget = new ButtonWidget(rectangle.x + 134, startPoint.y + 45, 10, 10, "+") { + @Override + public void onPressed(int button, double mouseX, double mouseY) { + MinecraftClient.getInstance().openGui(parentGui.getContainerGui()); + if (canAutoCraftHere(parentGui.getContainerGui().getClass(), recipe)) + performAutoCraft(parentGui.getContainerGui(), recipe); + } + + @Override + public void draw(int mouseX, int mouseY, float partialTicks) { + super.draw(mouseX, mouseY, partialTicks); + List<String> tooltips = getToolTip(parentGui.getContainerGui(), recipe); + if (tooltips.size() > 0 && getBounds().contains(mouseX, mouseY)) + GuiHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), tooltips)); + } + }); + widget.enabled = canAutoCraftHere(parentGui.getContainerGui().getClass(), recipe); + } + + private List<String> getToolTip(ContainerGui parentGui, DefaultSmokingDisplay recipe) { + if (!(parentGui instanceof SmokerGui)) + return Arrays.asList(I18n.translate("text.auto_craft.wrong_gui")); + return Lists.newArrayList(); + } + }); + RecipeHelper.registerCategoryCraftable(DefaultBlastingDisplay.class, new IRecipeCategoryCraftable<DefaultBlastingDisplay>() { + @Override + public boolean canAutoCraftHere(Class<? extends Gui> guiClass, DefaultBlastingDisplay recipe) { + return guiClass.isAssignableFrom(BlastFurnaceGui.class); + } + + @Override + public boolean performAutoCraft(Gui gui, DefaultBlastingDisplay recipe) { + if (gui.getClass().isAssignableFrom(BlastFurnaceGui.class)) + ((IMixinRecipeBookGui) (((BlastFurnaceGui) gui).getRecipeBookGui())).getGhostSlots().reset(); + else return false; + MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, recipe.getRecipe(), Gui.isShiftPressed()); + return true; + } + + @Override + public void registerAutoCraftButton(List<IWidget> widgets, Rectangle rectangle, IMixinContainerGui parentGui, DefaultBlastingDisplay recipe) { + Point startPoint = new Point((int) rectangle.getCenterX() - 58, (int) rectangle.getCenterY() - 27); + ButtonWidget widget; + widgets.add(widget = new ButtonWidget(rectangle.x + 134, startPoint.y + 45, 10, 10, "+") { + @Override + public void onPressed(int button, double mouseX, double mouseY) { + MinecraftClient.getInstance().openGui(parentGui.getContainerGui()); + if (canAutoCraftHere(parentGui.getContainerGui().getClass(), recipe)) + performAutoCraft(parentGui.getContainerGui(), recipe); + } + + @Override + public void draw(int mouseX, int mouseY, float partialTicks) { + super.draw(mouseX, mouseY, partialTicks); + List<String> tooltips = getToolTip(parentGui.getContainerGui(), recipe); + if (tooltips.size() > 0 && getBounds().contains(mouseX, mouseY)) + GuiHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), tooltips)); + } + }); + widget.enabled = canAutoCraftHere(parentGui.getContainerGui().getClass(), recipe); + } + + private List<String> getToolTip(ContainerGui parentGui, DefaultBlastingDisplay recipe) { + if (!(parentGui instanceof BlastFurnaceGui)) + return Arrays.asList(I18n.translate("text.auto_craft.wrong_gui")); + return Lists.newArrayList(); + } + }); + } + } diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java b/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java index 63fbbd164..97481b953 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java @@ -1,13 +1,19 @@ package me.shedaniel.rei.plugin; +import com.google.common.collect.Lists; import com.mojang.blaze3d.platform.GlStateManager; import me.shedaniel.rei.api.IRecipeCategory; -import me.shedaniel.rei.gui.widget.IWidget; -import me.shedaniel.rei.gui.widget.ItemSlotWidget; -import me.shedaniel.rei.gui.widget.RecipeBaseWidget; +import me.shedaniel.rei.api.IRecipeCategoryCraftable; +import me.shedaniel.rei.client.ClientHelper; +import me.shedaniel.rei.client.GuiHelper; +import me.shedaniel.rei.gui.widget.*; import me.shedaniel.rei.listeners.IMixinContainerGui; +import me.shedaniel.rei.listeners.IMixinRecipeBookGui; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.ContainerGui; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.container.FurnaceGui; import net.minecraft.client.render.GuiLighting; import net.minecraft.client.resource.language.I18n; import net.minecraft.item.ItemStack; @@ -66,4 +72,5 @@ public class DefaultSmeltingCategory implements IRecipeCategory<DefaultSmeltingD widgets.add(new ItemSlotWidget(startPoint.x + 61, startPoint.y + 19, recipeDisplay.getOutput(), false, true, containerGui, true)); return widgets; } + } diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultSmokingCategory.java b/src/main/java/me/shedaniel/rei/plugin/DefaultSmokingCategory.java index eedce2977..71d3d3b49 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultSmokingCategory.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultSmokingCategory.java @@ -1,13 +1,20 @@ package me.shedaniel.rei.plugin; +import com.google.common.collect.Lists; import com.mojang.blaze3d.platform.GlStateManager; import me.shedaniel.rei.api.IRecipeCategory; -import me.shedaniel.rei.gui.widget.IWidget; -import me.shedaniel.rei.gui.widget.ItemSlotWidget; -import me.shedaniel.rei.gui.widget.RecipeBaseWidget; +import me.shedaniel.rei.api.IRecipeCategoryCraftable; +import me.shedaniel.rei.client.ClientHelper; +import me.shedaniel.rei.client.GuiHelper; +import me.shedaniel.rei.gui.widget.*; import me.shedaniel.rei.listeners.IMixinContainerGui; +import me.shedaniel.rei.listeners.IMixinRecipeBookGui; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.ContainerGui; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.container.FurnaceGui; +import net.minecraft.client.gui.container.SmokerGui; import net.minecraft.client.render.GuiLighting; import net.minecraft.client.resource.language.I18n; import net.minecraft.item.ItemStack; |
