aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorUnknown <shekwancheung0528@gmail.com>2019-01-11 17:16:53 +0800
committerUnknown <shekwancheung0528@gmail.com>2019-01-11 17:16:53 +0800
commit77ff77003ff31dabda47388ca2d9727a185b90f8 (patch)
tree73f735d0bfd3a386f0f6551cbc02675ea43206d4 /src/main/java
parentdef24dd1d0ebd6e12a3a459ece05c0fc94aae4de (diff)
downloadRoughlyEnoughItems-77ff77003ff31dabda47388ca2d9727a185b90f8.tar.gz
RoughlyEnoughItems-77ff77003ff31dabda47388ca2d9727a185b90f8.tar.bz2
RoughlyEnoughItems-77ff77003ff31dabda47388ca2d9727a185b90f8.zip
Crafting Display
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java9
-rw-r--r--src/main/java/me/shedaniel/rei/api/IRecipeCategory.java19
-rw-r--r--src/main/java/me/shedaniel/rei/client/RecipeHelper.java6
-rw-r--r--src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java4
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java2
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java7
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/RecipeBaseWidget.java36
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java51
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java9
-rw-r--r--src/main/java/me/shedaniel/rei/listeners/ClientTick.java9
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultCraftingCategory.java75
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultCraftingDisplay.java8
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java7
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultShapedDisplay.java10
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultShapelessDisplay.java14
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java26
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingDisplay.java63
17 files changed, 323 insertions, 32 deletions
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;
+ }
+ <