aboutsummaryrefslogtreecommitdiff
path: root/default-plugin/src
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-05-22 02:49:01 +0800
committershedaniel <daniel@shedaniel.me>2021-05-22 02:49:01 +0800
commit784f6680c19a708485f49a82b7dffdbdda2607fa (patch)
tree76f9753d6e0e613068e8959c9b9aa2974cba2f20 /default-plugin/src
parent745f78a4aa7d23fe03e7420eb3fe06b8c418db35 (diff)
downloadRoughlyEnoughItems-784f6680c19a708485f49a82b7dffdbdda2607fa.tar.gz
RoughlyEnoughItems-784f6680c19a708485f49a82b7dffdbdda2607fa.tar.bz2
RoughlyEnoughItems-784f6680c19a708485f49a82b7dffdbdda2607fa.zip
Simplify code in DefaultCraftingDisplay and NbtHasherProviderImpl
Diffstat (limited to 'default-plugin/src')
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultRecipeBookHandler.java4
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/BuiltinPlugin.java2
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java15
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCraftingDisplay.java51
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomDisplay.java48
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultShapedDisplay.java44
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultShapelessDisplay.java44
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;
}
}