aboutsummaryrefslogtreecommitdiff
path: root/default-plugin/src/main/java/me/shedaniel
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2022-01-27 10:28:06 +0800
committershedaniel <daniel@shedaniel.me>2022-01-27 10:39:59 +0800
commit904586629d3b9483df7b4ee5b35943db562462bf (patch)
tree3954fb5eac825c97207bcd87dc3ba156bf98da9e /default-plugin/src/main/java/me/shedaniel
parent4a026abcf9aa390a5473cda87c83ae17d1456820 (diff)
downloadRoughlyEnoughItems-904586629d3b9483df7b4ee5b35943db562462bf.tar.gz
RoughlyEnoughItems-904586629d3b9483df7b4ee5b35943db562462bf.tar.bz2
RoughlyEnoughItems-904586629d3b9483df7b4ee5b35943db562462bf.zip
Rework crafting getInputEntries
Diffstat (limited to 'default-plugin/src/main/java/me/shedaniel')
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCraftingDisplay.java30
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomDisplay.java37
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;
+ }
}