diff options
| author | Unknown <shekwancheung0528@gmail.com> | 2019-01-13 22:32:06 +0800 |
|---|---|---|
| committer | Unknown <shekwancheung0528@gmail.com> | 2019-01-13 22:32:06 +0800 |
| commit | 55fb26865a7c77a098b2be067afcf29c335df48c (patch) | |
| tree | e801d272eeea5b5a6eeda1162dbd9b43a67a228b | |
| parent | f4473fd6c4142e071e498094490f44692dfbbdf3 (diff) | |
| download | RoughlyEnoughItems-2.0.0.37.tar.gz RoughlyEnoughItems-2.0.0.37.tar.bz2 RoughlyEnoughItems-2.0.0.37.zip | |
Guess this worksv2.0.0.37
15 files changed, 336 insertions, 24 deletions
diff --git a/build.gradle b/build.gradle index 35f0607a9..02f531cb3 100755 --- a/build.gradle +++ b/build.gradle @@ -6,15 +6,15 @@ sourceCompatibility = 1.8 targetCompatibility = 1.8 archivesBaseName = "RoughlyEnoughItems" -version = "2.0.0.36" +version = "2.0.0.37" minecraft { } dependencies { minecraft "com.mojang:minecraft:19w02a" - mappings "net.fabricmc:yarn:19w02a.12" - modCompile "net.fabricmc:fabric-loader:0.3.2.92" + mappings "net.fabricmc:yarn:19w02a.20" + modCompile "net.fabricmc:fabric-loader:0.3.2.95" // Fabric API. This is technically optional, but you probably want it anyway. modCompile "net.fabricmc:fabric:0.1.4.71" 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; diff --git a/src/main/resources/assets/roughlyenoughitems/lang/en_us.json b/src/main/resources/assets/roughlyenoughitems/lang/en_us.json index 743dde664..49a52a05e 100755 --- a/src/main/resources/assets/roughlyenoughitems/lang/en_us.json +++ b/src/main/resources/assets/roughlyenoughitems/lang/en_us.json @@ -16,7 +16,6 @@ "category.rei.brewing.reactant": "§eIngredient", "category.rei.brewing.result": "§eResulted Potion", "text.rei.config": "Config", - "text.rei.listeningkey": "Listening Key", "text.rei.centre_searchbox": "Right Search Box: ", "text.rei.cheat_items": "Given [%s] x%d to %s.", "text.rei.failed_cheat_items": "§cFailed to give items.", diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index ecbd48274..54a2f37e0 100755 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -2,7 +2,7 @@ "id": "roughlyenoughitems", "name": "RoughlyEnoughItems", "description": "To allow players to view items and recipes.", - "version": "2.0.0.36", + "version": "2.0.0.37", "side": "client", "authors": [ "Danielshe" @@ -12,7 +12,7 @@ "me.shedaniel.rei.client.ClientHelper" ], "requires": { - "fabric": "*" + "fabric": "0.1.4.71" }, "mixins": { "client": "roughlyenoughitems.client.json" diff --git a/src/main/resources/roughlyenoughitems.client.json b/src/main/resources/roughlyenoughitems.client.json index 2a88637e0..a8248d368 100755 --- a/src/main/resources/roughlyenoughitems.client.json +++ b/src/main/resources/roughlyenoughitems.client.json @@ -8,7 +8,8 @@ "MixinPlayerInventoryGui", "MixinCraftingTableGui", "MixinCreativePlayerInventoryGui", - "MixinBrewingRecipeRegistry" + "MixinBrewingRecipeRegistry", + "MixinRecipeBookGui" ], "injectors": { "defaultRequire": 1 |
