From 904586629d3b9483df7b4ee5b35943db562462bf Mon Sep 17 00:00:00 2001 From: shedaniel Date: Thu, 27 Jan 2022 10:28:06 +0800 Subject: Rework crafting getInputEntries --- .../displays/crafting/DefaultCraftingDisplay.java | 30 +++++++++++++++--- .../displays/crafting/DefaultCustomDisplay.java | 37 ++++++---------------- 2 files changed, 35 insertions(+), 32 deletions(-) (limited to 'default-plugin/src') diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCraftingDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCraftingDisplay.java index c4ae13dcf..938f68a97 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCraftingDisplay.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCraftingDisplay.java @@ -125,7 +125,7 @@ public abstract class DefaultCraftingDisplay> extends BasicD } public static int getSlotWithSize(DefaultCraftingDisplay display, int index, int craftingGridWidth) { - return getSlotWithSize(display.getWidth(), index, craftingGridWidth); + return getSlotWithSize(display.getInputWidth(), index, craftingGridWidth); } public static int getSlotWithSize(int recipeWidth, int index, int craftingGridWidth) { @@ -141,14 +141,34 @@ public abstract class DefaultCraftingDisplay> extends BasicD @Override public List getInputEntries(MenuSerializationContext context, MenuInfo info, boolean fill) { - List list = new ArrayList<>(3 * 3); - for (int i = 0; i < 3 * 3; i++) { - list.add(EntryIngredient.empty()); + int craftingWidth = Math.max(3, getInputWidth()); + int craftingHeight = Math.max(3, getInputHeight()); + + if (info instanceof SimpleGridMenuInfo) { + craftingWidth = ((SimpleGridMenuInfo) info).getCraftingWidth(context.getMenu()); + craftingHeight = ((SimpleGridMenuInfo) info).getCraftingHeight(context.getMenu()); } + + EntryIngredient[][] grid = new EntryIngredient[craftingWidth][craftingHeight]; + List inputEntries = getInputEntries(); for (int i = 0; i < inputEntries.size(); i++) { - list.set(getSlotWithSize(this, i, 3), inputEntries.get(i)); + grid[i % getInputWidth()][i / getInputWidth()] = inputEntries.get(i); + } + + List list = new ArrayList<>(craftingWidth * craftingHeight); + for (int i = 0, n = craftingWidth * craftingHeight; i < n; i++) { + list.add(EntryIngredient.empty()); + } + + for (int x = 0; x < craftingWidth; x++) { + for (int y = 0; y < craftingHeight; y++) { + if (grid[x][y] != null) { + list.set(craftingWidth * y + x, grid[x][y]); + } + } } + return list; } } diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomDisplay.java index 944313fa8..6d0676fdb 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomDisplay.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomDisplay.java @@ -25,15 +25,10 @@ package me.shedaniel.rei.plugin.common.displays.crafting; import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.registry.RecipeManagerContext; -import me.shedaniel.rei.api.common.transfer.info.MenuInfo; -import me.shedaniel.rei.api.common.transfer.info.MenuSerializationContext; -import me.shedaniel.rei.api.common.transfer.info.simple.SimpleGridMenuInfo; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.crafting.Recipe; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; import java.util.BitSet; import java.util.List; import java.util.Optional; @@ -64,28 +59,6 @@ public class DefaultCustomDisplay extends DefaultCraftingDisplay> { return new DefaultCustomDisplay(optionalRecipe, input, output); } - @Override - public List getInputEntries(MenuSerializationContext context, MenuInfo info, boolean fill) { - if (fill && info instanceof SimpleGridMenuInfo) { - List out = new ArrayList<>(); - int craftingWidth = ((SimpleGridMenuInfo) info).getCraftingWidth(context.getMenu()); - int craftingHeight = ((SimpleGridMenuInfo) info).getCraftingHeight(context.getMenu()); - for (int i = 0; i < 9; i++) { - if (i < inputs.size()) { - int x = i % 3; - if (x < craftingWidth) { - out.add(inputs.get(i)); - if (out.size() > craftingWidth * craftingHeight) break; - } - } - } - while (out.size() < craftingWidth * craftingHeight) out.add(EntryIngredient.empty()); - return out; - } - - return super.getInputEntries(context, info, fill); - } - @Override public int getWidth() { return width; @@ -95,4 +68,14 @@ public class DefaultCustomDisplay extends DefaultCraftingDisplay> { public int getHeight() { return height; } + + @Override + public int getInputWidth() { + return 3; + } + + @Override + public int getInputHeight() { + return 3; + } } -- cgit