aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel/rei/plugin
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/me/shedaniel/rei/plugin')
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultBlastingCategory.java13
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultCraftingCategory.java13
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java204
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java13
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultSmokingCategory.java13
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;