aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel/rei/plugin
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/me/shedaniel/rei/plugin')
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultBlastingCategory.java65
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultBlastingDisplay.java63
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java10
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingDisplay.java2
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultSmokingCategory.java65
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultSmokingDisplay.java63
6 files changed, 266 insertions, 2 deletions
diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultBlastingCategory.java b/src/main/java/me/shedaniel/rei/plugin/DefaultBlastingCategory.java
new file mode 100644
index 000000000..9e4855267
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/plugin/DefaultBlastingCategory.java
@@ -0,0 +1,65 @@
+package me.shedaniel.rei.plugin;
+
+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 net.minecraft.util.math.MathHelper;
+
+import java.awt.*;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+
+public class DefaultBlastingCategory implements IRecipeCategory<DefaultBlastingDisplay> {
+
+ private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png");
+
+ @Override
+ public Identifier getIdentifier() {
+ return DefaultPlugin.BLASTING;
+ }
+
+ @Override
+ public ItemStack getCategoryIcon() {
+ return new ItemStack(Blocks.BLAST_FURNACE.getItem());
+ }
+
+ @Override
+ public String getCategoryName() {
+ return I18n.translate("category.rei.blasting");
+ }
+
+ @Override
+ public List<IWidget> setupDisplay(IMixinContainerGui containerGui, DefaultBlastingDisplay recipeDisplay, Rectangle bounds) {
+ Point startPoint = new Point((int) bounds.getCenterX() - 41, (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, 54, 82, 54);
+ int height = MathHelper.ceil((System.currentTimeMillis() / 250 % 14d) / 1f);
+ drawTexturedRect(startPoint.x + 2, startPoint.y + 21 + (14 - height), 82, 77 + (14 - height), 14, height);
+ int width = MathHelper.ceil((System.currentTimeMillis() / 250 % 24d) / 1f);
+ drawTexturedRect(startPoint.x + 24, startPoint.y + 19, 82, 92, width, 17);
+ }
+ }));
+ List<List<ItemStack>> input = recipeDisplay.getInput();
+ widgets.add(new ItemSlotWidget(startPoint.x + 1, startPoint.y + 1, input.get(0), true, true, containerGui, true));
+ widgets.add(new ItemSlotWidget(startPoint.x + 1, startPoint.y + 37, recipeDisplay.getFuel(), true, true, containerGui, true));
+ 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/DefaultBlastingDisplay.java b/src/main/java/me/shedaniel/rei/plugin/DefaultBlastingDisplay.java
new file mode 100644
index 000000000..c5f5262aa
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/plugin/DefaultBlastingDisplay.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.smelting.BlastingRecipe;
+import net.minecraft.recipe.smelting.SmokingRecipe;
+import net.minecraft.util.Identifier;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class DefaultBlastingDisplay implements IRecipeDisplay<BlastingRecipe> {
+
+ private BlastingRecipe display;
+ private List<List<ItemStack>> input;
+ private List<ItemStack> output;
+
+ public DefaultBlastingDisplay(BlastingRecipe recipe) {
+ this.display = recipe;
+ List<ItemStack> 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()));
+ });
+ input.add(fuel);
+ this.output = Arrays.asList(recipe.getOutput());
+ }
+
+ @Override
+ public BlastingRecipe getRecipe() {
+ return display;
+ }
+
+ @Override
+ public List<List<ItemStack>> getInput() {
+ return input;
+ }
+
+ public List<ItemStack> getFuel() {
+ return input.get(1);
+ }
+
+ @Override
+ public List<ItemStack> getOutput() {
+ return output;
+ }
+
+ @Override
+ public Identifier getRecipeCategory() {
+ return DefaultPlugin.BLASTING;
+ }
+
+ @Override
+ public List<List<ItemStack>> getRequiredItems() {
+ return input;
+ }
+
+}
diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java b/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
index 62eaf185c..c2359e09b 100644
--- a/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
+++ b/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
@@ -5,18 +5,24 @@ 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.BlastingRecipe;
import net.minecraft.recipe.smelting.SmeltingRecipe;
+import net.minecraft.recipe.smelting.SmokingRecipe;
import net.minecraft.util.Identifier;
public class DefaultPlugin implements IRecipePlugin {
static final Identifier CRAFTING = new Identifier("roughlyenoughitems", "plugins/crafting");
static final Identifier SMELTING = new Identifier("roughlyenoughitems", "plugins/smelting");
+ static final Identifier SMOKING = new Identifier("roughlyenoughitems", "plugins/smoking");
+ static final Identifier BLASTING = new Identifier("roughlyenoughitems", "plugins/blasting");
@Override
public void registerPluginCategories() {
RecipeHelper.registerCategory(new DefaultCraftingCategory());
RecipeHelper.registerCategory(new DefaultSmeltingCategory());
+ RecipeHelper.registerCategory(new DefaultSmokingCategory());
+ RecipeHelper.registerCategory(new DefaultBlastingCategory());
}
@Override
@@ -28,6 +34,10 @@ public class DefaultPlugin implements IRecipePlugin {
RecipeHelper.registerRecipe(CRAFTING, new DefaultShapedDisplay((ShapedRecipe) value));
else if (value instanceof SmeltingRecipe)
RecipeHelper.registerRecipe(SMELTING, new DefaultSmeltingDisplay((SmeltingRecipe) value));
+ else if (value instanceof SmokingRecipe)
+ RecipeHelper.registerRecipe(SMOKING, new DefaultSmokingDisplay((SmokingRecipe) value));
+ else if (value instanceof BlastingRecipe)
+ RecipeHelper.registerRecipe(BLASTING, new DefaultBlastingDisplay((BlastingRecipe) value));
}
}
diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingDisplay.java b/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingDisplay.java
index 2b12b7603..5561daed3 100644
--- a/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingDisplay.java
+++ b/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingDisplay.java
@@ -5,8 +5,6 @@ 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;
diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultSmokingCategory.java b/src/main/java/me/shedaniel/rei/plugin/DefaultSmokingCategory.java
new file mode 100644
index 000000000..dda60ba4b
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/plugin/DefaultSmokingCategory.java
@@ -0,0 +1,65 @@
+package me.shedaniel.rei.plugin;
+
+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 net.minecraft.util.math.MathHelper;
+
+import java.awt.*;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+
+public class DefaultSmokingCategory implements IRecipeCategory<DefaultSmokingDisplay> {
+
+ private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png");
+
+ @Override
+ public Identifier getIdentifier() {
+ return DefaultPlugin.SMOKING;
+ }
+
+ @Override
+ public ItemStack getCategoryIcon() {
+ return new ItemStack(Blocks.SMOKER.getItem());
+ }
+
+ @Override
+ public String getCategoryName() {
+ return I18n.translate("category.rei.smoking");
+ }
+
+ @Override
+ public List<IWidget> setupDisplay(IMixinContainerGui containerGui, DefaultSmokingDisplay recipeDisplay, Rectangle bounds) {
+ Point startPoint = new Point((int) bounds.getCenterX() - 41, (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, 54, 82, 54);
+ int height = MathHelper.ceil((System.currentTimeMillis() / 250 % 14d) / 1f);
+ drawTexturedRect(startPoint.x + 2, startPoint.y + 21 + (14 - height), 82, 77 + (14 - height), 14, height);
+ int width = MathHelper.ceil((System.currentTimeMillis() / 250 % 24d) / 1f);
+ drawTexturedRect(startPoint.x + 24, startPoint.y + 19, 82, 92, width, 17);
+ }
+ }));
+ List<List<ItemStack>> input = recipeDisplay.getInput();
+ widgets.add(new ItemSlotWidget(startPoint.x + 1, startPoint.y + 1, input.get(0), true, true, containerGui, true));
+ widgets.add(new ItemSlotWidget(startPoint.x + 1, startPoint.y + 37, recipeDisplay.getFuel(), true, true, containerGui, true));
+ 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/DefaultSmokingDisplay.java b/src/main/java/me/shedaniel/rei/plugin/DefaultSmokingDisplay.java
new file mode 100644
index 000000000..0961cb0ad
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/plugin/DefaultSmokingDisplay.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.smelting.SmeltingRecipe;
+import net.minecraft.recipe.smelting.SmokingRecipe;
+import net.minecraft.util.Identifier;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class DefaultSmokingDisplay implements IRecipeDisplay<SmokingRecipe> {
+
+ private SmokingRecipe display;
+ private List<List<ItemStack>> input;
+ private List<ItemStack> output;
+
+ public DefaultSmokingDisplay(SmokingRecipe recipe) {
+ this.display = recipe;
+ List<ItemStack> 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()));
+ });
+ input.add(fuel);
+ this.output = Arrays.asList(recipe.getOutput());
+ }
+
+ @Override
+ public SmokingRecipe getRecipe() {
+ return display;
+ }
+
+ @Override
+ public List<List<ItemStack>> getInput() {
+ return input;
+ }
+
+ public List<ItemStack> getFuel() {
+ return input.get(1);
+ }
+
+ @Override
+ public List<ItemStack> getOutput() {
+ return output;
+ }
+
+ @Override
+ public Identifier getRecipeCategory() {
+ return DefaultPlugin.SMOKING;
+ }
+
+ @Override
+ public List<List<ItemStack>> getRequiredItems() {
+ return input;
+ }
+
+}