aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/me/shedaniel')
-rw-r--r--src/main/java/me/shedaniel/rei/api/IRecipeCategoryCraftable.java19
-rw-r--r--src/main/java/me/shedaniel/rei/api/IRecipePlugin.java2
-rw-r--r--src/main/java/me/shedaniel/rei/client/RecipeHelper.java31
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java9
-rw-r--r--src/main/java/me/shedaniel/rei/listeners/IMixinRecipeBookGui.java9
-rw-r--r--src/main/java/me/shedaniel/rei/mixin/MixinRecipeBookGui.java20
-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
11 files changed, 329 insertions, 17 deletions
diff --git a/src/main/java/me/shedaniel/rei/api/IRecipeCategoryCraftable.java b/src/main/java/me/shedaniel/rei/api/IRecipeCategoryCraftable.java
new file mode 100644
index 000000000..49156a943
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/api/IRecipeCategoryCraftable.java
@@ -0,0 +1,19 @@
+package me.shedaniel.rei.api;
+
+import me.shedaniel.rei.gui.widget.IWidget;
+import me.shedaniel.rei.gui.widget.RecipeViewingWidget;
+import me.shedaniel.rei.listeners.IMixinContainerGui;
+import net.minecraft.client.gui.Gui;
+
+import java.awt.*;
+import java.util.List;
+
+public interface IRecipeCategoryCraftable<T extends IRecipeDisplay> {
+
+ public boolean canAutoCraftHere(Class<? extends Gui> guiClass, T recipe);
+
+ public boolean performAutoCraft(Gui gui, T recipe);
+
+ public void registerAutoCraftButton(List<IWidget> widgets, Rectangle rectangle, IMixinContainerGui parentGui, T recipe);
+
+}
diff --git a/src/main/java/me/shedaniel/rei/api/IRecipePlugin.java b/src/main/java/me/shedaniel/rei/api/IRecipePlugin.java
index 870691e6d..5fa4f8d99 100644
--- a/src/main/java/me/shedaniel/rei/api/IRecipePlugin.java
+++ b/src/main/java/me/shedaniel/rei/api/IRecipePlugin.java
@@ -8,4 +8,6 @@ public interface IRecipePlugin extends IListener {
public void registerRecipes();
+ public void registerAutoCraftingGui();
+
}
diff --git a/src/main/java/me/shedaniel/rei/client/RecipeHelper.java b/src/main/java/me/shedaniel/rei/client/RecipeHelper.java
index 70dad4c7c..d23d3d69d 100644
--- a/src/main/java/me/shedaniel/rei/client/RecipeHelper.java
+++ b/src/main/java/me/shedaniel/rei/client/RecipeHelper.java
@@ -4,9 +4,11 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import me.shedaniel.rei.RoughlyEnoughItemsCore;
import me.shedaniel.rei.api.IRecipeCategory;
+import me.shedaniel.rei.api.IRecipeCategoryCraftable;
import me.shedaniel.rei.api.IRecipeDisplay;
import me.shedaniel.rei.api.IRecipePlugin;
import me.shedaniel.rei.listeners.RecipeSync;
+import net.minecraft.client.gui.Gui;
import net.minecraft.item.ItemStack;
import net.minecraft.recipe.RecipeManager;
import net.minecraft.util.Identifier;
@@ -19,10 +21,12 @@ public class RecipeHelper implements RecipeSync {
private static Map<Identifier, List<IRecipeDisplay>> recipeCategoryListMap;
private static List<IRecipeCategory> categories;
private static RecipeManager recipeManager;
+ private static Map<Class, IRecipeCategoryCraftable> craftables;
public RecipeHelper() {
this.recipeCategoryListMap = Maps.newHashMap();
this.categories = Lists.newArrayList();
+ this.craftables = Maps.newHashMap();
}
public static List<ItemStack> findCraftableByItems(List<ItemStack> inventoryItems) {
@@ -113,20 +117,39 @@ public class RecipeHelper implements RecipeSync {
return recipeCategoryListMap;
}
+ public static List<IRecipeCategory> getCategories() {
+ return categories;
+ }
+
+ public static void registerCategoryCraftable(Class<? extends IRecipeDisplay> guiClass, IRecipeCategoryCraftable categoryCraftable) {
+ craftables.put(guiClass, categoryCraftable);
+ }
+
+ public static void registerCategoryCraftable(Class<? extends IRecipeDisplay>[] guiClasses, IRecipeCategoryCraftable categoryCraftable) {
+ for(Class<? extends IRecipeDisplay> guiClass : guiClasses) craftables.put(guiClass, categoryCraftable);
+ }
+
+ public static IRecipeCategoryCraftable getCategoryCraftable(IRecipeDisplay gui) {
+ if (!craftables.containsKey(gui.getClass()))
+ return null;
+ return craftables.get(gui.getClass());
+ }
+
@Override
public void recipesLoaded(RecipeManager recipeManager) {
this.recipeManager = recipeManager;
this.recipeCategoryListMap.clear();
this.categories.clear();
+ this.craftables.clear();
RoughlyEnoughItemsCore.getListeners(IRecipePlugin.class).forEach(plugin -> {
plugin.registerPluginCategories();
plugin.registerRecipes();
+ plugin.registerAutoCraftingGui();
});
Collections.reverse(categories);
- RoughlyEnoughItemsCore.LOGGER.info("Registered REI Categories: " + String.join(", ", categories.stream().map(category -> {return category.getCategoryName();}).collect(Collectors.toList())));
+ RoughlyEnoughItemsCore.LOGGER.info("Registered REI Categories: " + String.join(", ", categories.stream().map(category -> {
+ return category.getCategoryName();
+ }).collect(Collectors.toList())));
}
- public static List<IRecipeCategory> getCategories() {
- return categories;
- }
}
diff --git a/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java
index 777106f93..955c4e5d9 100644
--- a/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java
+++ b/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java
@@ -3,6 +3,7 @@ package me.shedaniel.rei.gui.widget;
import com.google.common.collect.Lists;
import com.mojang.blaze3d.platform.GlStateManager;
import me.shedaniel.rei.api.IRecipeCategory;
+import me.shedaniel.rei.api.IRecipeCategoryCraftable;
import me.shedaniel.rei.api.IRecipeDisplay;
import me.shedaniel.rei.client.ClientHelper;
import me.shedaniel.rei.client.GuiHelper;
@@ -177,9 +178,17 @@ public class RecipeViewingWidget extends Gui {
if (page * getRecipesPerPage() < categoriesMap.get(selectedCategory).size()) {
IRecipeDisplay topDisplay = categoriesMap.get(selectedCategory).get(page * getRecipesPerPage());
widgets.addAll(selectedCategory.setupDisplay(getParent(), topDisplay, new Rectangle((int) getBounds().getCenterX() - 75, getBounds().y + 40, 150, selectedCategory.usesFullPage() ? 118 : 66)));
+ IRecipeCategoryCraftable craftable = RecipeHelper.getCategoryCraftable(topDisplay);
+ if (craftable != null)
+ craftable.registerAutoCraftButton(widgets, new Rectangle((int) getBounds().getCenterX() - 75, getBounds().y + 40, 150, selectedCategory.usesFullPage() ? 118 : 66),
+ getParent(), topDisplay);
if (!selectedCategory.usesFullPage() && page * getRecipesPerPage() + 1 < categoriesMap.get(selectedCategory).size()) {
IRecipeDisplay middleDisplay = categoriesMap.get(selectedCategory).get(page * getRecipesPerPage() + 1);
widgets.addAll(selectedCategory.setupDisplay(getParent(), middleDisplay, new Rectangle((int) getBounds().getCenterX() - 75, getBounds().y + 108, 150, 66)));
+ craftable = RecipeHelper.getCategoryCraftable(middleDisplay);
+ if (craftable != null)
+ craftable.registerAutoCraftButton(widgets, new Rectangle((int) getBounds().getCenterX() - 75, getBounds().y + 108, 150, 66),
+ getParent(), middleDisplay);
}
}
diff --git a/src/main/java/me/shedaniel/rei/listeners/IMixinRecipeBookGui.java b/src/main/java/me/shedaniel/rei/listeners/IMixinRecipeBookGui.java
new file mode 100644
index 000000000..599467173
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/listeners/IMixinRecipeBookGui.java
@@ -0,0 +1,9 @@
+package me.shedaniel.rei.listeners;
+
+import net.minecraft.client.gui.widget.RecipeBookGhostSlots;
+
+public interface IMixinRecipeBookGui {
+
+ public RecipeBookGhostSlots getGhostSlots();
+
+}
diff --git a/src/main/java/me/shedaniel/rei/mixin/MixinRecipeBookGui.java b/src/main/java/me/shedaniel/rei/mixin/MixinRecipeBookGui.java
new file mode 100644
index 000000000..8dbe39700
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/mixin/MixinRecipeBookGui.java
@@ -0,0 +1,20 @@
+package me.shedaniel.rei.mixin;
+
+import me.shedaniel.rei.listeners.IMixinRecipeBookGui;
+import net.minecraft.client.gui.recipebook.RecipeBookGui;
+import net.minecraft.client.gui.widget.RecipeBookGhostSlots;
+import org.spongepowered.asm.mixin.Final;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+
+@Mixin(RecipeBookGui.class)
+public class MixinRecipeBookGui implements IMixinRecipeBookGui {
+
+ @Shadow @Final protected RecipeBookGhostSlots ghostSlots;
+
+ @Override
+ public RecipeBookGhostSlots getGhostSlots() {
+ return ghostSlots;
+ }
+
+}
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;