diff options
| author | Unknown <shekwancheung0528@gmail.com> | 2019-01-11 17:16:53 +0800 |
|---|---|---|
| committer | Unknown <shekwancheung0528@gmail.com> | 2019-01-11 17:16:53 +0800 |
| commit | 77ff77003ff31dabda47388ca2d9727a185b90f8 (patch) | |
| tree | 73f735d0bfd3a386f0f6551cbc02675ea43206d4 /src/main/java/me/shedaniel/rei/plugin | |
| parent | def24dd1d0ebd6e12a3a459ece05c0fc94aae4de (diff) | |
| download | RoughlyEnoughItems-77ff77003ff31dabda47388ca2d9727a185b90f8.tar.gz RoughlyEnoughItems-77ff77003ff31dabda47388ca2d9727a185b90f8.tar.bz2 RoughlyEnoughItems-77ff77003ff31dabda47388ca2d9727a185b90f8.zip | |
Crafting Display
Diffstat (limited to 'src/main/java/me/shedaniel/rei/plugin')
7 files changed, 202 insertions, 1 deletions
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; + } + +} |
