diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-01-27 10:28:06 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2022-01-27 10:39:59 +0800 |
| commit | 904586629d3b9483df7b4ee5b35943db562462bf (patch) | |
| tree | 3954fb5eac825c97207bcd87dc3ba156bf98da9e /default-plugin/src/main/java/me/shedaniel | |
| parent | 4a026abcf9aa390a5473cda87c83ae17d1456820 (diff) | |
| download | RoughlyEnoughItems-904586629d3b9483df7b4ee5b35943db562462bf.tar.gz RoughlyEnoughItems-904586629d3b9483df7b4ee5b35943db562462bf.tar.bz2 RoughlyEnoughItems-904586629d3b9483df7b4ee5b35943db562462bf.zip | |
Rework crafting getInputEntries
Diffstat (limited to 'default-plugin/src/main/java/me/shedaniel')
2 files changed, 35 insertions, 32 deletions
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<C extends Recipe<?>> 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<C extends Recipe<?>> extends BasicD @Override public List<EntryIngredient> getInputEntries(MenuSerializationContext<?, ?, ?> context, MenuInfo<?, ?> info, boolean fill) { - List<EntryIngredient> 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<AbstractContainerMenu, ?>) info).getCraftingWidth(context.getMenu()); + craftingHeight = ((SimpleGridMenuInfo<AbstractContainerMenu, ?>) info).getCraftingHeight(context.getMenu()); } + + EntryIngredient[][] grid = new EntryIngredient[craftingWidth][craftingHeight]; + List<EntryIngredient> 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<EntryIngredient> 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; @@ -65,28 +60,6 @@ public class DefaultCustomDisplay extends DefaultCraftingDisplay<Recipe<?>> { } @Override - public List<EntryIngredient> getInputEntries(MenuSerializationContext<?, ?, ?> context, MenuInfo<?, ?> info, boolean fill) { - if (fill && info instanceof SimpleGridMenuInfo) { - List<EntryIngredient> out = new ArrayList<>(); - int craftingWidth = ((SimpleGridMenuInfo<AbstractContainerMenu, ?>) info).getCraftingWidth(context.getMenu()); - int craftingHeight = ((SimpleGridMenuInfo<AbstractContainerMenu, ?>) 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<Recipe<?>> { public int getHeight() { return height; } + + @Override + public int getInputWidth() { + return 3; + } + + @Override + public int getInputHeight() { + return 3; + } } |
