diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-05-22 02:49:01 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-05-22 02:49:01 +0800 |
| commit | 784f6680c19a708485f49a82b7dffdbdda2607fa (patch) | |
| tree | 76f9753d6e0e613068e8959c9b9aa2974cba2f20 /default-plugin/src | |
| parent | 745f78a4aa7d23fe03e7420eb3fe06b8c418db35 (diff) | |
| download | RoughlyEnoughItems-784f6680c19a708485f49a82b7dffdbdda2607fa.tar.gz RoughlyEnoughItems-784f6680c19a708485f49a82b7dffdbdda2607fa.tar.bz2 RoughlyEnoughItems-784f6680c19a708485f49a82b7dffdbdda2607fa.zip | |
Simplify code in DefaultCraftingDisplay and NbtHasherProviderImpl
Diffstat (limited to 'default-plugin/src')
7 files changed, 65 insertions, 143 deletions
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultRecipeBookHandler.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultRecipeBookHandler.java index e59c35ce9..78cef89a0 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultRecipeBookHandler.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultRecipeBookHandler.java @@ -52,7 +52,7 @@ public class DefaultRecipeBookHandler implements TransferHandler { if (container == null) return Result.createNotApplicable(); if (display instanceof DefaultCraftingDisplay) { - DefaultCraftingDisplay craftingDisplay = (DefaultCraftingDisplay) display; + DefaultCraftingDisplay<?> craftingDisplay = (DefaultCraftingDisplay<?>) display; if (craftingDisplay.getOptionalRecipe().isPresent()) { int h = -1, w = -1; if (container instanceof CraftingMenu) { @@ -64,7 +64,7 @@ public class DefaultRecipeBookHandler implements TransferHandler { } if (h == -1 || w == -1) return Result.createNotApplicable(); - Recipe<?> recipe = (craftingDisplay).getOptionalRecipe().get(); + Recipe<?> recipe = craftingDisplay.getOptionalRecipe().get(); if (craftingDisplay.getHeight() > h || craftingDisplay.getWidth() > w) return Result.createFailed(new TranslatableComponent("error.rei.transfer.too_small", h, w)); if (!context.getMinecraft().player.getRecipeBook().contains(recipe)) diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/BuiltinPlugin.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/BuiltinPlugin.java index 4f2b467e0..94617a5a9 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/BuiltinPlugin.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/BuiltinPlugin.java @@ -34,7 +34,7 @@ import me.shedaniel.rei.plugin.common.displays.cooking.DefaultSmokingDisplay; import me.shedaniel.rei.plugin.common.displays.crafting.DefaultCraftingDisplay; public interface BuiltinPlugin { - CategoryIdentifier<DefaultCraftingDisplay> CRAFTING = CategoryIdentifier.of("minecraft", "plugins/crafting"); + CategoryIdentifier<DefaultCraftingDisplay<?>> CRAFTING = CategoryIdentifier.of("minecraft", "plugins/crafting"); CategoryIdentifier<DefaultSmeltingDisplay> SMELTING = CategoryIdentifier.of("minecraft", "plugins/smelting"); CategoryIdentifier<DefaultSmokingDisplay> SMOKING = CategoryIdentifier.of("minecraft", "plugins/smoking"); CategoryIdentifier<DefaultBlastingDisplay> BLASTING = CategoryIdentifier.of("minecraft", "plugins/blasting"); 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 a4cf1fd7c..fe7aa4ca8 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 @@ -59,20 +59,19 @@ import net.minecraft.world.level.material.Fluid; import java.util.List; import java.util.function.Function; -import java.util.function.ToLongFunction; import java.util.stream.Stream; public class DefaultPlugin implements BuiltinPlugin, REIServerPlugin { @Override public void registerItemComparators(ItemComparatorRegistry registry) { - ToLongFunction<Tag> nbtHasher = EntryComparator.nbtHasher(); + EntryComparator<Tag> nbtHasher = EntryComparator.nbt(); Function<ItemStack, ListTag> enchantmentTag = stack -> { CompoundTag tag = stack.getTag(); if (tag == null) return null; if (!tag.contains("Enchantments", NbtType.LIST)) return null; return tag.getList("Enchantments", NbtType.COMPOUND); }; - registry.register((context, stack) -> nbtHasher.applyAsLong(enchantmentTag.apply(stack)), Items.ENCHANTED_BOOK); + registry.register((context, stack) -> nbtHasher.hash(context, enchantmentTag.apply(stack)), Items.ENCHANTED_BOOK); registry.registerNbt(Items.POTION); registry.registerNbt(Items.SPLASH_POTION); registry.registerNbt(Items.LINGERING_POTION); @@ -104,7 +103,7 @@ public class DefaultPlugin implements BuiltinPlugin, REIServerPlugin { @Override public void registerDisplaySerializer(DisplaySerializerRegistry registry) { - registry.register(CRAFTING, DefaultCraftingDisplay.Serializer.INSTANCE); + registry.register(CRAFTING, DefaultCraftingDisplay.serializer()); registry.register(SMELTING, DefaultCookingDisplay.serializer(DefaultSmeltingDisplay::new)); registry.register(SMOKING, DefaultCookingDisplay.serializer(DefaultSmokingDisplay::new)); registry.register(BLASTING, DefaultCookingDisplay.serializer(DefaultBlastingDisplay::new)); @@ -124,15 +123,15 @@ public class DefaultPlugin implements BuiltinPlugin, REIServerPlugin { @Override public void registerMenuInfo(MenuInfoRegistry registry) { - registry.register(BuiltinPlugin.CRAFTING, CraftingMenu.class, new RecipeBookGridMenuInfo<CraftingMenu, DefaultCraftingDisplay>() { + registry.register(BuiltinPlugin.CRAFTING, CraftingMenu.class, new RecipeBookGridMenuInfo<CraftingMenu, DefaultCraftingDisplay<?>>() { @Override - public List<List<ItemStack>> getInputs(MenuInfoContext<CraftingMenu, ?, DefaultCraftingDisplay> context) { + public List<List<ItemStack>> getInputs(MenuInfoContext<CraftingMenu, ?, DefaultCraftingDisplay<?>> context) { return context.getDisplay().getOrganisedInputEntries(this, context.getMenu()); } }); - registry.register(BuiltinPlugin.CRAFTING, InventoryMenu.class, new RecipeBookGridMenuInfo<InventoryMenu, DefaultCraftingDisplay>() { + registry.register(BuiltinPlugin.CRAFTING, InventoryMenu.class, new RecipeBookGridMenuInfo<InventoryMenu, DefaultCraftingDisplay<?>>() { @Override - public List<List<ItemStack>> getInputs(MenuInfoContext<InventoryMenu, ?, DefaultCraftingDisplay> context) { + public List<List<ItemStack>> getInputs(MenuInfoContext<InventoryMenu, ?, DefaultCraftingDisplay<?>> context) { return context.getDisplay().getOrganisedInputEntries(this, context.getMenu()); } }); 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 97dc31e2d..979bf82ea 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 @@ -23,18 +23,14 @@ package me.shedaniel.rei.plugin.common.displays.crafting; -import me.shedaniel.architectury.utils.NbtType; import me.shedaniel.rei.api.common.category.CategoryIdentifier; -import me.shedaniel.rei.api.common.display.SimpleDisplaySerializer; import me.shedaniel.rei.api.common.display.SimpleMenuDisplay; +import me.shedaniel.rei.api.common.display.basic.BasicDisplay; import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes; -import me.shedaniel.rei.api.common.registry.RecipeManagerContext; import me.shedaniel.rei.api.common.transfer.info.simple.SimpleGridMenuInfo; import me.shedaniel.rei.api.common.util.CollectionUtils; -import me.shedaniel.rei.api.common.util.EntryIngredients; import me.shedaniel.rei.plugin.common.BuiltinPlugin; -import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.ItemStack; @@ -45,15 +41,29 @@ import java.util.Collections; import java.util.List; import java.util.Optional; -public abstract class DefaultCraftingDisplay implements SimpleMenuDisplay { +public abstract class DefaultCraftingDisplay<C extends Recipe<?>> extends BasicDisplay implements SimpleMenuDisplay { + protected Optional<C> recipe; + + public DefaultCraftingDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, Optional<C> recipe) { + super(inputs, outputs, Optional.empty()); + this.recipe = recipe; + } + @Override public CategoryIdentifier<?> getCategoryIdentifier() { return BuiltinPlugin.CRAFTING; } - public abstract Optional<Recipe<?>> getOptionalRecipe(); + public Optional<C> getOptionalRecipe() { + return recipe; + } - public <T extends AbstractContainerMenu> List<List<ItemStack>> getOrganisedInputEntries(SimpleGridMenuInfo<T, DefaultCraftingDisplay> menuInfo, T container) { + @Override + public Optional<ResourceLocation> getDisplayLocation() { + return getOptionalRecipe().map(Recipe::getId); + } + + public <T extends AbstractContainerMenu> List<List<ItemStack>> getOrganisedInputEntries(SimpleGridMenuInfo<T, DefaultCraftingDisplay<?>> menuInfo, T container) { List<List<ItemStack>> 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()); @@ -66,7 +76,7 @@ public abstract class DefaultCraftingDisplay implements SimpleMenuDisplay { return list; } - public static int getSlotWithSize(DefaultCraftingDisplay recipeDisplay, int index, int craftingGridWidth) { + public static int getSlotWithSize(DefaultCraftingDisplay<?> recipeDisplay, int index, int craftingGridWidth) { return getSlotWithSize(recipeDisplay.getWidth(), index, craftingGridWidth); } @@ -76,26 +86,7 @@ public abstract class DefaultCraftingDisplay implements SimpleMenuDisplay { return craftingGridWidth * y + x; } - public enum Serializer implements SimpleDisplaySerializer<DefaultCraftingDisplay> { - INSTANCE; - - @Override - public DefaultCraftingDisplay read(CompoundTag tag) { - List<EntryIngredient> input = EntryIngredients.read(tag.getList("input", NbtType.LIST)); - List<EntryIngredient> output = EntryIngredients.read(tag.getList("output", NbtType.LIST)); - Recipe<?> optionalRecipe; - if (tag.contains("recipe", NbtType.STRING)) { - optionalRecipe = RecipeManagerContext.getInstance().getRecipeManager().byKey(new ResourceLocation(tag.getString("recipe"))).orElse(null); - } else { - optionalRecipe = null; - } - return new DefaultCustomDisplay(optionalRecipe, input, output); - } - - @Override - public CompoundTag saveExtra(CompoundTag tag, DefaultCraftingDisplay display) { - display.getOptionalRecipe().ifPresent(recipe -> tag.putString("recipe", recipe.getId().toString())); - return tag; - } + public static BasicDisplay.Serializer<DefaultCraftingDisplay<?>> serializer() { + return BasicDisplay.Serializer.ofSimple(DefaultCustomDisplay::simple); } } 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 9557805fa..243b0e575 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 @@ -23,31 +23,29 @@ package me.shedaniel.rei.plugin.common.displays.crafting; -import com.google.common.collect.ImmutableList; +import me.shedaniel.architectury.utils.NbtType; import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.entry.EntryStack; +import me.shedaniel.rei.api.common.registry.RecipeManagerContext; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.Recipe; +import org.jetbrains.annotations.Nullable; import java.util.BitSet; import java.util.List; import java.util.Optional; -public class DefaultCustomDisplay extends DefaultCraftingDisplay { - private List<EntryIngredient> input; - private List<EntryIngredient> output; - private Recipe<?> possibleRecipe; - private int width, height; +public class DefaultCustomDisplay extends DefaultCraftingDisplay<Recipe<?>> { + private int width; + private int height; - public DefaultCustomDisplay(Recipe<?> possibleRecipe, List<EntryIngredient> input, List<EntryIngredient> output) { - this.input = ImmutableList.copyOf(input); - this.output = output; - this.possibleRecipe = possibleRecipe; + public DefaultCustomDisplay(@Nullable Recipe<?> possibleRecipe, List<EntryIngredient> input, List<EntryIngredient> output) { + super(input, output, Optional.ofNullable(possibleRecipe)); BitSet row = new BitSet(3); BitSet column = new BitSet(3); for (int i = 0; i < 9; i++) - if (i < this.input.size()) { - List<? extends EntryStack<?>> stacks = this.input.get(i); + if (i < input.size()) { + List<? extends EntryStack<?>> stacks = input.get(i); if (stacks.stream().anyMatch(stack -> !stack.isEmpty())) { row.set((i - (i % 3)) / 3); column.set(i % 3); @@ -57,28 +55,10 @@ public class DefaultCustomDisplay extends DefaultCraftingDisplay { this.height = column.cardinality(); } - protected Optional<Recipe<?>> getRecipe() { - return Optional.ofNullable(possibleRecipe); - } - - @Override - public Optional<ResourceLocation> getDisplayLocation() { - return getRecipe().map(Recipe::getId); - } - - @Override - public List<EntryIngredient> getInputEntries() { - return input; - } - - @Override - public List<EntryIngredient> getOutputEntries() { - return output; - } - - @Override - public Optional<Recipe<?>> getOptionalRecipe() { - return Optional.ofNullable(possibleRecipe); + public static DefaultCustomDisplay simple(List<EntryIngredient> input, List<EntryIngredient> output, Optional<ResourceLocation> location) { + Recipe<?> optionalRecipe = location.flatMap(resourceLocation -> RecipeManagerContext.getInstance().getRecipeManager().byKey(resourceLocation)) + .orElse(null); + return new DefaultCustomDisplay(optionalRecipe, input, output); } @Override diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultShapedDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultShapedDisplay.java index 68a089f69..34c745918 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultShapedDisplay.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultShapedDisplay.java @@ -23,54 +23,30 @@ package me.shedaniel.rei.plugin.common.displays.crafting; -import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.util.EntryIngredients; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.item.crafting.ShapedRecipe; import java.util.Collections; -import java.util.List; import java.util.Optional; -public class DefaultShapedDisplay extends DefaultCraftingDisplay { - private ShapedRecipe display; - private List<EntryIngredient> input; - private EntryIngredient output; - +public class DefaultShapedDisplay extends DefaultCraftingDisplay<ShapedRecipe> { public DefaultShapedDisplay(ShapedRecipe recipe) { - this.display = recipe; - this.input = EntryIngredients.ofIngredients(recipe.getIngredients()); - this.output = EntryIngredients.of(recipe.getResultItem()); - } - - @Override - public Optional<ResourceLocation> getDisplayLocation() { - return Optional.ofNullable(display).map(ShapedRecipe::getId); - } - - @Override - public List<EntryIngredient> getInputEntries() { - return input; - } - - @Override - public List<EntryIngredient> getOutputEntries() { - return Collections.singletonList(output); - } - - @Override - public Optional<Recipe<?>> getOptionalRecipe() { - return Optional.ofNullable(display); + super( + EntryIngredients.ofIngredients(recipe.getIngredients()), + Collections.singletonList(EntryIngredients.of(recipe.getResultItem())), + Optional.of(recipe) + ); } + @SuppressWarnings("OptionalGetWithoutIsPresent") @Override public int getWidth() { - return display.getWidth(); + return recipe.get().getWidth(); } + @SuppressWarnings("OptionalGetWithoutIsPresent") @Override public int getHeight() { - return display.getHeight(); + return recipe.get().getHeight(); } } diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultShapelessDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultShapelessDisplay.java index 99961d9d1..cb17a2696 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultShapelessDisplay.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultShapelessDisplay.java @@ -23,54 +23,30 @@ package me.shedaniel.rei.plugin.common.displays.crafting; -import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.util.EntryIngredients; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.item.crafting.ShapelessRecipe; import java.util.Collections; -import java.util.List; import java.util.Optional; -public class DefaultShapelessDisplay extends DefaultCraftingDisplay { - private ShapelessRecipe display; - private List<EntryIngredient> input; - private EntryIngredient output; - +public class DefaultShapelessDisplay extends DefaultCraftingDisplay<ShapelessRecipe> { public DefaultShapelessDisplay(ShapelessRecipe recipe) { - this.display = recipe; - this.input = EntryIngredients.ofIngredients(recipe.getIngredients()); - this.output = EntryIngredients.of(recipe.getResultItem()); - } - - @Override - public Optional<Recipe<?>> getOptionalRecipe() { - return Optional.ofNullable(display); - } - - @Override - public Optional<ResourceLocation> getDisplayLocation() { - return Optional.ofNullable(display).map(ShapelessRecipe::getId); - } - - @Override - public List<EntryIngredient> getInputEntries() { - return input; - } - - @Override - public List<EntryIngredient> getOutputEntries() { - return Collections.singletonList(output); + super( + EntryIngredients.ofIngredients(recipe.getIngredients()), + Collections.singletonList(EntryIngredients.of(recipe.getResultItem())), + Optional.of(recipe) + ); } + @SuppressWarnings("OptionalGetWithoutIsPresent") @Override public int getWidth() { - return display.getIngredients().size() > 4 ? 3 : 2; + return recipe.get().getIngredients().size() > 4 ? 3 : 2; } + @SuppressWarnings("OptionalGetWithoutIsPresent") @Override public int getHeight() { - return display.getIngredients().size() > 4 ? 3 : 2; + return recipe.get().getIngredients().size() > 4 ? 3 : 2; } } |
