From 3d90cdd1204b6b6a2c57b121cdf82de2448bb951 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Mon, 14 Jun 2021 20:45:12 +0800 Subject: Fix auto crafting patterns & refactor internals providers --- .../shedaniel/rei/plugin/common/DefaultPlugin.java | 16 ++------------ .../displays/crafting/DefaultCraftingDisplay.java | 25 ++++++++++++---------- .../displays/crafting/DefaultCustomDisplay.java | 6 +++--- 3 files changed, 19 insertions(+), 28 deletions(-) (limited to 'default-plugin/src/main/java/me/shedaniel') diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java index 6eadc9d81..902e51f76 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java @@ -34,7 +34,6 @@ import me.shedaniel.rei.api.common.entry.comparison.EntryComparator; import me.shedaniel.rei.api.common.entry.comparison.ItemComparatorRegistry; import me.shedaniel.rei.api.common.fluid.FluidSupportProvider; import me.shedaniel.rei.api.common.plugins.REIServerPlugin; -import me.shedaniel.rei.api.common.transfer.info.MenuInfoContext; import me.shedaniel.rei.api.common.transfer.info.MenuInfoRegistry; import me.shedaniel.rei.api.common.transfer.info.simple.RecipeBookGridMenuInfo; import me.shedaniel.rei.api.common.util.EntryStacks; @@ -59,7 +58,6 @@ import net.minecraft.world.item.Items; import net.minecraft.world.level.material.Fluid; import org.jetbrains.annotations.ApiStatus; -import java.util.List; import java.util.function.Function; import java.util.stream.Stream; @@ -127,18 +125,8 @@ public class DefaultPlugin implements BuiltinPlugin, REIServerPlugin { @Override public void registerMenuInfo(MenuInfoRegistry registry) { - registry.register(BuiltinPlugin.CRAFTING, CraftingMenu.class, new RecipeBookGridMenuInfo<>() { - @Override - public List> getInputs(MenuInfoContext> context) { - return context.getDisplay().getOrganisedInputEntries(this, context.getMenu()); - } - }); - registry.register(BuiltinPlugin.CRAFTING, InventoryMenu.class, new RecipeBookGridMenuInfo<>() { - @Override - public List> getInputs(MenuInfoContext> context) { - return context.getDisplay().getOrganisedInputEntries(this, context.getMenu()); - } - }); + registry.register(BuiltinPlugin.CRAFTING, CraftingMenu.class, new RecipeBookGridMenuInfo<>()); + registry.register(BuiltinPlugin.CRAFTING, InventoryMenu.class, new RecipeBookGridMenuInfo<>()); registry.register(BuiltinPlugin.SMELTING, FurnaceMenu.class, new RecipeBookGridMenuInfo<>()); registry.register(BuiltinPlugin.SMOKING, SmokerMenu.class, new RecipeBookGridMenuInfo<>()); registry.register(BuiltinPlugin.BLASTING, BlastFurnaceMenu.class, new RecipeBookGridMenuInfo<>()); 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 18baa55ab..2fc43dbaf 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 @@ -38,7 +38,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Recipe; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Optional; @@ -65,21 +64,24 @@ public abstract class DefaultCraftingDisplay> extends BasicD } public List> getOrganisedInputEntries(SimpleGridMenuInfo> menuInfo, T container) { - List> list = new ArrayList<>(menuInfo.getCraftingWidth(container) * menuInfo.getCraftingHeight(container)); - for (int i = 0; i < menuInfo.getCraftingWidth(container) * menuInfo.getCraftingHeight(container); i++) { - list.add(Collections.emptyList()); + return CollectionUtils.map(getOrganisedInputEntries(menuInfo.getCraftingWidth(container), menuInfo.getCraftingHeight(container)), ingredient -> + CollectionUtils., ItemStack>filterAndMap(ingredient, stack -> stack.getType() == VanillaEntryTypes.ITEM, + EntryStack::castValue)); + } + + public List getOrganisedInputEntries(int menuWidth, int menuHeight) { + List list = new ArrayList<>(menuWidth * menuHeight); + for (int i = 0; i < menuWidth * menuHeight; i++) { + list.add(EntryIngredient.empty()); } for (int i = 0; i < getInputEntries().size(); i++) { - @SuppressWarnings("RedundantTypeArguments") - List stacks = CollectionUtils., ItemStack>filterAndMap(getInputEntries().get(i), stack -> stack.getType() == VanillaEntryTypes.ITEM, - EntryStack::castValue); - list.set(getSlotWithSize(this, i, menuInfo.getCraftingWidth(container)), stacks); + list.set(getSlotWithSize(this, i, menuWidth), getInputEntries().get(i)); } return list; } - public static int getSlotWithSize(DefaultCraftingDisplay recipeDisplay, int index, int craftingGridWidth) { - return getSlotWithSize(recipeDisplay.getWidth(), index, craftingGridWidth); + public static int getSlotWithSize(DefaultCraftingDisplay display, int index, int craftingGridWidth) { + return getSlotWithSize(display.getWidth(), index, craftingGridWidth); } public static int getSlotWithSize(int recipeWidth, int index, int craftingGridWidth) { @@ -89,6 +91,7 @@ public abstract class DefaultCraftingDisplay> extends BasicD } public static BasicDisplay.Serializer> serializer() { - return BasicDisplay.Serializer.ofSimple(DefaultCustomDisplay::simple); + return BasicDisplay.Serializer.>ofSimple(DefaultCustomDisplay::simple) + .inputProvider(display -> display.getOrganisedInputEntries(3, 3)); } } 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 5b1a28d53..45cd6eed4 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 @@ -44,14 +44,14 @@ public class DefaultCustomDisplay extends DefaultCraftingDisplay> { BitSet column = new BitSet(3); for (int i = 0; i < 9; i++) if (i < input.size()) { - List> stacks = input.get(i); + EntryIngredient stacks = input.get(i); if (stacks.stream().anyMatch(stack -> !stack.isEmpty())) { row.set((i - (i % 3)) / 3); column.set(i % 3); } } - this.width = row.cardinality(); - this.height = column.cardinality(); + this.width = column.cardinality(); + this.height = row.cardinality(); } public static DefaultCustomDisplay simple(List input, List output, Optional location) { -- cgit