diff options
21 files changed, 325 insertions, 34 deletions
diff --git a/build.gradle b/build.gradle index 8904e2624..f32bca33c 100755 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ sourceCompatibility = 1.8 targetCompatibility = 1.8 archivesBaseName = "RoughlyEnoughItems" -version = "2.0.0.26" +version = "2.0.0.27" minecraft { } diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java index 765ef4e64..a3618898d 100644 --- a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java +++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java @@ -4,12 +4,10 @@ import me.shedaniel.rei.api.IRecipePlugin; import me.shedaniel.rei.client.ClientHelper; import me.shedaniel.rei.client.ConfigManager; import me.shedaniel.rei.client.RecipeHelper; -import me.shedaniel.rei.listeners.ClientTick; import me.shedaniel.rei.listeners.IListener; import me.shedaniel.rei.plugin.DefaultPlugin; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ModInitializer; -import net.fabricmc.fabric.events.client.ClientTickEvent; import net.fabricmc.fabric.networking.CustomPayloadPacketRegistry; import net.minecraft.item.ItemStack; import net.minecraft.server.network.ServerPlayerEntity; @@ -46,7 +44,6 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitiali @Override public void onInitializeClient() { registerREIListeners(); - registerFabricEvents(); registerDefaultPlugin(); configManager = new ConfigManager(); } @@ -77,12 +74,6 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitiali return true; } - private void registerFabricEvents() { - ClientTickEvent.CLIENT.register(minecraftClient -> { - getListeners(ClientTick.class).forEach(clientTick -> clientTick.onTick(minecraftClient)); - }); - } - @Override public void onInitialize() { registerFabricPackets(); diff --git a/src/main/java/me/shedaniel/rei/api/IRecipeCategory.java b/src/main/java/me/shedaniel/rei/api/IRecipeCategory.java index e4d357dee..4640b6d24 100644 --- a/src/main/java/me/shedaniel/rei/api/IRecipeCategory.java +++ b/src/main/java/me/shedaniel/rei/api/IRecipeCategory.java @@ -1,8 +1,23 @@ package me.shedaniel.rei.api; +import com.mojang.blaze3d.platform.GlStateManager; +import me.shedaniel.rei.gui.widget.IWidget; +import me.shedaniel.rei.gui.widget.RecipeBaseWidget; +import me.shedaniel.rei.listeners.IMixinContainerGui; +import net.minecraft.client.gui.Drawable; +import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.GuiLighting; +import net.minecraft.client.render.Tessellator; +import net.minecraft.client.render.VertexFormats; import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; +import java.awt.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + + public interface IRecipeCategory<T extends IRecipeDisplay> { public Identifier getIdentifier(); @@ -15,4 +30,8 @@ public interface IRecipeCategory<T extends IRecipeDisplay> { return false; } + default public List<IWidget> setupDisplay(IMixinContainerGui containerGui, T recipeDisplay, Rectangle bounds) { + return Arrays.asList(new RecipeBaseWidget(bounds)); + } + } diff --git a/src/main/java/me/shedaniel/rei/client/RecipeHelper.java b/src/main/java/me/shedaniel/rei/client/RecipeHelper.java index ead30fdfa..9860ea8ed 100644 --- a/src/main/java/me/shedaniel/rei/client/RecipeHelper.java +++ b/src/main/java/me/shedaniel/rei/client/RecipeHelper.java @@ -55,7 +55,7 @@ public class RecipeHelper implements RecipeSync { } public static void registerCategory(IRecipeCategory category) { - categories.add(category); + categories.add(0, category); recipeCategoryListMap.put(category.getIdentifier(), Lists.newArrayList()); } @@ -96,8 +96,8 @@ public class RecipeHelper implements RecipeSync { for(ItemStack itemStack : input) { if (ItemStack.areEqualIgnoreTags(itemStack, stack)) { categoriesMap.get(recipeDisplay.getRecipeCategory()).add(recipeDisplay); - if (found) - break; + found = true; + break; } } if (found) diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java index 3ffd95238..643ab5849 100644 --- a/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java +++ b/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java @@ -81,6 +81,7 @@ public class ContainerGuiOverlay extends Gui { this.widgets.add(new LabelWidget(rectangle.x + (rectangle.width / 2), rectangle.y + 10, "") { @Override public void draw(int mouseX, int mouseY, float partialTicks) { + page = MathHelper.clamp(page, 0, getTotalPage()); this.text = String.format("%s/%s", page + 1, getTotalPage() + 1); super.draw(mouseX, mouseY, partialTicks); } @@ -148,7 +149,8 @@ public class ContainerGuiOverlay extends Gui { int width = window.getScaledWidth() - startX; if (MinecraftClient.getInstance().currentGui instanceof RecipeViewingWidget) { RecipeViewingWidget widget = (RecipeViewingWidget) MinecraftClient.getInstance().currentGui; - width = window.getScaledWidth() - (widget.getBounds().x + widget.getBounds().width + 10); + startX = widget.getBounds().x + widget.getBounds().width + 10; + width = window.getScaledWidth() - startX; } return new Rectangle(startX, 0, width, window.getScaledHeight()); } diff --git a/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java b/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java index 84fe47749..4398f611b 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java @@ -101,7 +101,7 @@ public class ItemListOverlay extends Drawable implements IWidget { if (button == 0) return ClientHelper.executeRecipeKeyBind(containerGuiOverlay, getCurrentStack().copy(), containerGui); else if (button == 1) - return ClientHelper.executeUsageKeyBind(); + return ClientHelper.executeUsageKeyBind(containerGuiOverlay, getCurrentStack().copy(), containerGui); } } return false; diff --git a/src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java index 292f5e5f5..01eee72b2 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java @@ -9,6 +9,7 @@ import net.minecraft.client.gui.Drawable; import net.minecraft.client.render.GuiLighting; import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.util.Identifier; import net.minecraft.util.math.MathHelper; @@ -90,9 +91,15 @@ public class ItemSlotWidget extends Drawable implements HighlightableWidget { } protected ItemStack getCurrentStack() { + if (itemList.size() == 0) + return new ItemStack(Items.AIR); return itemList.get(MathHelper.clamp((int) (System.currentTimeMillis() / 500) % itemList.size(), 0, itemList.size() - 1)); } + public void setItemList(List<ItemStack> itemList) { + this.itemList = itemList; + } + @Override public Rectangle getBounds() { return new Rectangle(this.x, this.y, 18, 18); diff --git a/src/main/java/me/shedaniel/rei/gui/widget/RecipeBaseWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/RecipeBaseWidget.java new file mode 100644 index 000000000..4134ad510 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/gui/widget/RecipeBaseWidget.java @@ -0,0 +1,36 @@ +package me.shedaniel.rei.gui.widget; + +import com.mojang.blaze3d.platform.GlStateManager; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.Drawable; +import net.minecraft.client.render.GuiLighting; +import net.minecraft.util.Identifier; + +import java.awt.*; +import java.util.ArrayList; +import java.util.List; + +public class RecipeBaseWidget extends Drawable implements IWidget { + + private static final Identifier CHEST_GUI_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png"); + + private Rectangle bounds; + + public RecipeBaseWidget(Rectangle bounds) { + this.bounds = bounds; + } + + @Override + public List<IWidget> getListeners() { + return new ArrayList<>(); + } + + @Override + public void draw(int mouseX, int mouseY, float partialTicks) { + GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); + GuiLighting.disable(); + MinecraftClient.getInstance().getTextureManager().bindTexture(CHEST_GUI_TEXTURE); + drawTexturedRect(bounds.x, bounds.y, 106, 190, bounds.width, bounds.height); + } + +} 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 9be303102..8b6dca71e 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java @@ -27,7 +27,7 @@ public class RecipeViewingWidget extends Gui { private static final Identifier CREATIVE_INVENTORY_TABS = new Identifier("textures/gui/container/creative_inventory/tabs.png"); private static final Identifier CHEST_GUI_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png"); public final int guiWidth = 176; - public final int guiHeight = 158; + public final int guiHeight = 186; private List<IWidget> widgets; private List<TabWidget> tabs; @@ -84,11 +84,25 @@ public class RecipeViewingWidget extends Gui { widgets.add(categoryBack = new ButtonWidget((int) bounds.getX() + 5, (int) bounds.getY() + 5, 12, 12, "<") { @Override public void onPressed(int button, double mouseX, double mouseY) { + int currentCategoryIndex = categories.indexOf(selectedCategory); + currentCategoryIndex--; + if (currentCategoryIndex < 0) + currentCategoryIndex = categories.size() - 1; + selectedCategory = categories.get(currentCategoryIndex); + categoryPages = MathHelper.floor(currentCategoryIndex / 6d); + RecipeViewingWidget.this.onInitialized(); } }); widgets.add(categoryNext = new ButtonWidget((int) bounds.getX() + 159, (int) bounds.getY() + 5, 12, 12, ">") { @Override public void onPressed(int button, double mouseX, double mouseY) { + int currentCategoryIndex = categories.indexOf(selectedCategory); + currentCategoryIndex++; + if (currentCategoryIndex >= categories.size()) + currentCategoryIndex = 0; + selectedCategory = categories.get(currentCategoryIndex); + categoryPages = MathHelper.floor(currentCategoryIndex / 6d); + RecipeViewingWidget.this.onInitialized(); } }); categoryBack.enabled = categories.size() > 1; @@ -97,11 +111,19 @@ public class RecipeViewingWidget extends Gui { widgets.add(recipeBack = new ButtonWidget((int) bounds.getX() + 5, (int) bounds.getY() + 21, 12, 12, "<") { @Override public void onPressed(int button, double mouseX, double mouseY) { + page--; + if (page < 0) + page = getTotalPages(selectedCategory) - 1; + RecipeViewingWidget.this.onInitialized(); } }); widgets.add(recipeNext = new ButtonWidget((int) bounds.getX() + 159, (int) bounds.getY() + 21, 12, 12, ">") { @Override public void onPressed(int button, double mouseX, double mouseY) { + page++; + if (page >= getTotalPages(selectedCategory)) + page = 0; + RecipeViewingWidget.this.onInitialized(); } }); recipeBack.enabled = categoriesMap.get(selectedCategory).size() > getRecipesPerPage(); @@ -140,7 +162,15 @@ public class RecipeViewingWidget extends Gui { return false; } }); - tab.setItem(selectedCategory.getCategoryIcon(), selectedCategory.getCategoryName(), tab.getId() + categoryPages * 6 == categories.indexOf(selectedCategory)); + tab.setItem(categories.get(j).getCategoryIcon(), categories.get(j).getCategoryName(), tab.getId() + categoryPages * 6 == categories.indexOf(selectedCategory)); + } + } + 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))); + 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))); } } @@ -159,7 +189,9 @@ public class RecipeViewingWidget extends Gui { @Override public void draw(int mouseX, int mouseY, float partialTicks) { drawBackground(); - tabs.stream().filter(TabWidget::isSelected).forEach(tabWidget -> tabWidget.draw(mouseX, mouseY, partialTicks)); + tabs.stream().filter(tabWidget -> { + return !tabWidget.isSelected(); + }).forEach(tabWidget -> tabWidget.draw(mouseX, mouseY, partialTicks)); GuiLighting.disable(); super.draw(mouseX, mouseY, partialTicks); widgets.forEach(widget -> { @@ -168,10 +200,8 @@ public class RecipeViewingWidget extends Gui { }); GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); GuiLighting.disable(); + tabs.stream().filter(TabWidget::isSelected).forEach(tabWidget -> tabWidget.draw(mouseX, mouseY, partialTicks)); overlay.render(mouseX, mouseY, partialTicks); - tabs.stream().filter(tabWidget -> { - return !tabWidget.isSelected(); - }).forEach(tabWidget -> tabWidget.draw(mouseX, mouseY, partialTicks)); } @Override @@ -200,6 +230,14 @@ public class RecipeViewingWidget extends Gui { } @Override + public boolean mouseScrolled(double amount) { + for(GuiEventListener listener : listeners) + if (listener.mouseScrolled(amount)) + return true; + return super.mouseScrolled(amount); + } + + @Override public boolean mouseClicked(double double_1, double double_2, int int_1) { for(GuiEventListener entry : getEntries()) if (entry.mouseClicked(double_1, double_2, int_1)) { @@ -210,4 +248,5 @@ public class RecipeViewingWidget extends Gui { } return false; } + } diff --git a/src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java index d9a35c934..d8c0f44e2 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java @@ -8,6 +8,7 @@ import net.minecraft.client.gui.Drawable; import net.minecraft.client.render.GuiLighting; import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.item.ItemStack; +import net.minecraft.util.Identifier; import java.awt.*; import java.util.Arrays; @@ -15,6 +16,8 @@ import java.util.List; public class TabWidget extends Drawable implements HighlightableWidget { + private static final Identifier CHEST_GUI_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png"); + private boolean shown = false, selected = false; private ItemStack item; private int id; @@ -67,9 +70,11 @@ public class TabWidget extends Drawable implements HighlightableWidget { public void draw(int mouseX, int mouseY, float partialTicks) { if (shown) { int l = (int) this.bounds.getCenterX() - 8, i1 = (int) this.bounds.getCenterY() - 6; - + + GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); GuiLighting.disable(); - this.drawTexturedRect(bounds.x, bounds.y, selected ? 28 : 0, 158, 28, (selected ? 31 : 28)); + MinecraftClient.getInstance().getTextureManager().bindTexture(CHEST_GUI_TEXTURE); + this.drawTexturedRect(bounds.x, bounds.y + 2, selected ? 28 : 0, 192, 28, (selected ? 30 : 27)); this.zOffset = 100.0F; this.itemRenderer.zOffset = 100.0F; GuiLighting.enableForItems(); diff --git a/src/main/java/me/shedaniel/rei/listeners/ClientTick.java b/src/main/java/me/shedaniel/rei/listeners/ClientTick.java deleted file mode 100644 index ff1a4dbb0..000000000 --- a/src/main/java/me/shedaniel/rei/listeners/ClientTick.java +++ /dev/null @@ -1,9 +0,0 @@ -package me.shedaniel.rei.listeners; - -import net.minecraft.client.MinecraftClient; - -public interface ClientTick extends IListener { - - public void onTick(MinecraftClient minecraftClient); - -} diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultCraftingCategory.java b/src/main/java/me/shedaniel/rei/plugin/DefaultCraftingCategory.java index ca12a2856..32299c466 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultCraftingCategory.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultCraftingCategory.java @@ -1,13 +1,28 @@ 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.listeners.IMixinContainerGui; import net.minecraft.block.Blocks; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.render.GuiLighting; import net.minecraft.client.resource.language.I18n; import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; +import java.awt.*; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; + public class DefaultCraftingCategory implements IRecipeCategory<DefaultCraftingDisplay> { + private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png"); + @Override public Identifier getIdentifier() { return DefaultPlugin.CRAFTING; @@ -23,4 +38,64 @@ public class DefaultCraftingCategory implements IRecipeCategory<DefaultCraftingD return I18n.translate("category.rei.crafting"); } + @Override + public List<IWidget> setupDisplay(IMixinContainerGui containerGui, DefaultCraftingDisplay recipeDisplay, Rectangle bounds) { + Point startPoint = new Point((int) bounds.getCenterX() - 58, (int) bounds.getCenterY() - 27); + List<IWidget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) { + @Override + public void draw(int mouseX, int mouseY, float partialTicks) { + super.draw(mouseX, mouseY, partialTicks); + GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); + GuiLighting.disable(); + MinecraftClient.getInstance().getTextureManager().bindTexture(DISPLAY_TEXTURE); + drawTexturedRect(startPoint.x, startPoint.y, 0, 0, 116, 54); + } + })); + List<List<ItemStack>> input = recipeDisplay.getInput(); + List<ItemSlotWidget> slots = Lists.newArrayList(); + for(int y = 0; y < 3; y++) + for(int x = 0; x < 3; x++) + slots.add(new ItemSlotWidget(startPoint.x + 1 + x * 18, startPoint.y + 1 + y * 18, Lists.newArrayList(), true, true, containerGui)); + for(int i = 0; i < input.size(); i++) { + if (recipeDisplay instanceof DefaultShapedDisplay) { + if (!input.get(i).isEmpty()) + slots.get(getSlotWithSize(recipeDisplay, i)).setItemList(input.get(i)); + } else if (!input.get(i).isEmpty()) + slots.get(i).setItemList(input.get(i)); + } + widgets.addAll(slots); + widgets.add(new ItemSlotWidget(startPoint.x + 95, startPoint.y + 19, recipeDisplay.getOutput(), false, true, containerGui) { + @Override + protected String getItemCountOverlay(ItemStack currentStack) { + if (currentStack.getAmount() == 1) + return ""; + if (currentStack.getAmount() < 1) + return "§c" + currentStack.getAmount(); + return currentStack.getAmount() + ""; + } + }); + return widgets; + } + + private int getSlotWithSize(DefaultCraftingDisplay recipeDisplay, int num) { + if (recipeDisplay.getWidth() == 1) { + if (num == 1) + return 3; + if (num == 2) + return 6; + } + + if (recipeDisplay.getWidth() == 2) { + if (num == 2) + return 3; + if (num == 3) + return 4; + if (num == 4) + return 6; + if (num == 5) + return 7; + } + return num; + } + } diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultCraftingDisplay.java b/src/main/java/me/shedaniel/rei/plugin/DefaultCraftingDisplay.java index 4c92bc9c7..8be0c9aee 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultCraftingDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultCraftingDisplay.java @@ -12,4 +12,12 @@ public interface DefaultCraftingDisplay<T> extends IRecipeDisplay<Recipe> { return DefaultPlugin.CRAFTING; } + default public int getWidth() { + return 2; + } + + default public int getHeight() { + return 2; + } + } diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java b/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java index 03ed527de..62eaf185c 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java @@ -5,15 +5,18 @@ import me.shedaniel.rei.client.RecipeHelper; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.crafting.ShapedRecipe; import net.minecraft.recipe.crafting.ShapelessRecipe; +import net.minecraft.recipe.smelting.SmeltingRecipe; import net.minecraft.util.Identifier; public class DefaultPlugin implements IRecipePlugin { - static final Identifier CRAFTING = new Identifier("roughlyenoughitems", "plugin/crafting"); + static final Identifier CRAFTING = new Identifier("roughlyenoughitems", "plugins/crafting"); + static final Identifier SMELTING = new Identifier("roughlyenoughitems", "plugins/smelting"); @Override public void registerPluginCategories() { RecipeHelper.registerCategory(new DefaultCraftingCategory()); + RecipeHelper.registerCategory(new DefaultSmeltingCategory()); } @Override @@ -23,6 +26,8 @@ public class DefaultPlugin implements IRecipePlugin { RecipeHelper.registerRecipe(CRAFTING, new DefaultShapelessDisplay((ShapelessRecipe) value)); else if (value instanceof ShapedRecipe) RecipeHelper.registerRecipe(CRAFTING, new DefaultShapedDisplay((ShapedRecipe) value)); + else if (value instanceof SmeltingRecipe) + RecipeHelper.registerRecipe(SMELTING, new DefaultSmeltingDisplay((SmeltingRecipe) value)); } } diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultShapedDisplay.java b/src/main/java/me/shedaniel/rei/plugin/DefaultShapedDisplay.java index 5bf5586c5..f8d183747 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultShapedDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultShapedDisplay.java @@ -42,4 +42,14 @@ public class DefaultShapedDisplay implements DefaultCraftingDisplay<ShapedRecipe return input; } + @Override + public int getHeight() { + return display.getHeight(); + } + + @Override + public int getWidth() { + return display.getWidth(); + } + } diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultShapelessDisplay.java b/src/main/java/me/shedaniel/rei/plugin/DefaultShapelessDisplay.java index 55cf6315f..70ad33147 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultShapelessDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultShapelessDisplay.java @@ -42,4 +42,18 @@ public class DefaultShapelessDisplay implements DefaultCraftingDisplay { return input; } + @Override + public int getWidth() { + if (display.getPreviewInputs().size() > 4) + return 3; + return 2; + } + + @Override + public int getHeight() { + if (display.getPreviewInputs().size() > 4) + return 3; + return 2; + } + } diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java b/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java new file mode 100644 index 000000000..8388b9e00 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java @@ -0,0 +1,26 @@ +package me.shedaniel.rei.plugin; + +import me.shedaniel.rei.api.IRecipeCategory; +import net.minecraft.block.Blocks; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Identifier; + +public class DefaultSmeltingCategory implements IRecipeCategory<DefaultSmeltingDisplay> { + + @Override + public Identifier getIdentifier() { + return DefaultPlugin.SMELTING; + } + + @Override + public ItemStack getCategoryIcon() { + return new ItemStack(Blocks.FURNACE.getItem()); + } + + @Override + public String getCategoryName() { + return I18n.translate("category.rei.smelting"); + } + +} diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingDisplay.java b/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingDisplay.java new file mode 100644 index 000000000..417bed72f --- /dev/null +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingDisplay.java @@ -0,0 +1,63 @@ +package me.shedaniel.rei.plugin; + +import com.google.common.collect.Lists; +import me.shedaniel.rei.api.IRecipeDisplay; +import net.minecraft.block.entity.FurnaceBlockEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.recipe.Recipe; +import net.minecraft.recipe.crafting.ShapelessRecipe; +import net.minecraft.recipe.smelting.SmeltingRecipe; +import net.minecraft.util.Identifier; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class DefaultSmeltingDisplay implements IRecipeDisplay<SmeltingRecipe> { + + private SmeltingRecipe display; + private List<List<ItemStack>> input; + private List<ItemStack> fuel, output; + + public DefaultSmeltingDisplay(SmeltingRecipe recipe) { + this.display = recipe; + this.fuel = Lists.newArrayList(); + this.input = Lists.newArrayList(); + fuel.addAll(FurnaceBlockEntity.createBurnableMap().keySet().stream().map(Item::getDefaultStack).collect(Collectors.toList())); + recipe.getPreviewInputs().forEach(ingredient -> { + input.add(Arrays.asList(ingredient.getStackArray())); + }); + this.output = Arrays.asList(recipe.getOutput()); + } + + @Override + public SmeltingRecipe getRecipe() { + return display; + } + + @Override + public List<List<ItemStack>> getInput() { + return input; + } + + public List<ItemStack> getFuel() { + return fuel; + } + + @Override + public List<ItemStack> getOutput() { + return output; + } + + @Override + public Identifier getRecipeCategory() { + return DefaultPlugin.SMELTING; + } + + @Override + public List<List<ItemStack>> getRequiredItems() { + return input; + } + +} diff --git a/src/main/resources/assets/roughlyenoughitems/textures/gui/display.png b/src/main/resources/assets/roughlyenoughitems/textures/gui/display.png Binary files differnew file mode 100644 index 000000000..24d2ce231 --- /dev/null +++ b/src/main/resources/assets/roughlyenoughitems/textures/gui/display.png |
