diff options
| author | shedaniel <daniel@shedaniel.me> | 2023-09-01 17:37:03 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2023-09-01 17:37:03 +0800 |
| commit | 5296049d81a7d201eeb1f535b4223bd0ba21febb (patch) | |
| tree | db95b66817c05136ec27f9112103555822740318 | |
| parent | 8a68acf83e7c45b381893d1abeb35040c245ace4 (diff) | |
| download | RoughlyEnoughItems-5296049d81a7d201eeb1f535b4223bd0ba21febb.tar.gz RoughlyEnoughItems-5296049d81a7d201eeb1f535b4223bd0ba21febb.tar.bz2 RoughlyEnoughItems-5296049d81a7d201eeb1f535b4223bd0ba21febb.zip | |
Update to 23w35a
22 files changed, 119 insertions, 94 deletions
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/registry/display/DisplayRegistry.java b/api/src/main/java/me/shedaniel/rei/api/client/registry/display/DisplayRegistry.java index fd34e4e84..5a3fb9d30 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/registry/display/DisplayRegistry.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/registry/display/DisplayRegistry.java @@ -35,6 +35,7 @@ import me.shedaniel.rei.api.common.registry.RecipeManagerContext; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.RecipeType; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; @@ -219,7 +220,7 @@ public interface DisplayRegistry extends RecipeManagerContext<REIClientPlugin> { * @param <T> the type of object * @param <D> the type of display */ - default <T extends Recipe<?>, D extends Display> void registerRecipeFiller(Class<T> typeClass, RecipeType<? super T> recipeType, Function<? extends T, @Nullable D> filler) { + default <T extends Recipe<?>, D extends Display> void registerRecipeFiller(Class<T> typeClass, RecipeType<? super T> recipeType, Function<? extends RecipeHolder<T>, @Nullable D> filler) { registerRecipeFiller(typeClass, type -> Objects.equals(recipeType, type), filler); } @@ -234,7 +235,7 @@ public interface DisplayRegistry extends RecipeManagerContext<REIClientPlugin> { * @param <T> the type of object * @param <D> the type of display */ - default <T extends Recipe<?>, D extends Display> void registerRecipeFiller(Class<T> typeClass, Predicate<RecipeType<? super T>> recipeType, Function<? extends T, @Nullable D> filler) { + default <T extends Recipe<?>, D extends Display> void registerRecipeFiller(Class<T> typeClass, Predicate<RecipeType<? super T>> recipeType, Function<? extends RecipeHolder<T>, @Nullable D> filler) { registerRecipeFiller(typeClass, recipeType, Predicates.alwaysTrue(), filler); } @@ -249,8 +250,12 @@ public interface DisplayRegistry extends RecipeManagerContext<REIClientPlugin> { * @param <T> the type of object * @param <D> the type of display */ - default <T extends Recipe<?>, D extends Display> void registerRecipeFiller(Class<T> typeClass, Predicate<RecipeType<? super T>> recipeType, Predicate<? extends T> predicate, Function<? extends T, @Nullable D> filler) { - registerFiller(typeClass, recipe -> recipeType.test((RecipeType<? super T>) recipe.getType()) && ((Predicate<T>) predicate).test(recipe), filler); + default <T extends Recipe<?>, D extends Display> void registerRecipeFiller(Class<T> typeClass, Predicate<RecipeType<? super T>> recipeType, Predicate<? extends RecipeHolder<T>> predicate, Function<? extends RecipeHolder<T>, @Nullable D> filler) { + registerFiller(RecipeHolder.class, recipe -> { + return typeClass.isInstance(recipe.value()) + && recipeType.test((RecipeType<? super T>) recipe.value().getType()) + && ((Predicate<RecipeHolder<T>>) predicate).test(recipe); + }, filler); } /** diff --git a/api/src/main/java/me/shedaniel/rei/api/common/registry/RecipeManagerContext.java b/api/src/main/java/me/shedaniel/rei/api/common/registry/RecipeManagerContext.java index f37e69473..878db7b98 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/registry/RecipeManagerContext.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/registry/RecipeManagerContext.java @@ -28,8 +28,9 @@ import me.shedaniel.rei.api.common.plugins.REIPlugin; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.RecipeManager; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -44,7 +45,7 @@ public interface RecipeManagerContext<P extends REIPlugin<?>> extends Reloadable /** * @return a list of sorted recipes */ - List<Recipe<?>> getAllSortedRecipes(); + List<RecipeHolder<?>> getAllSortedRecipes(); /** * Returns the vanilla recipe manager @@ -53,14 +54,16 @@ public interface RecipeManagerContext<P extends REIPlugin<?>> extends Reloadable */ RecipeManager getRecipeManager(); - default Recipe<?> byId(CompoundTag tag, String key) { + @Nullable + default RecipeHolder<?> byId(CompoundTag tag, String key) { if (tag.contains(key, Tag.TAG_STRING)) { return getRecipeManager().byKey(new ResourceLocation(tag.getString(key))).orElse(null); } return null; } - default Recipe<?> byId(ResourceLocation location) { + @Nullable + default RecipeHolder<?> byId(ResourceLocation location) { return getRecipeManager().byKey(location).orElse(null); } } diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/recipebook/DefaultRecipeBookHandler.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/recipebook/DefaultRecipeBookHandler.java index d475a4b28..05a877f75 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/recipebook/DefaultRecipeBookHandler.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/recipebook/DefaultRecipeBookHandler.java @@ -37,6 +37,7 @@ import net.minecraft.world.inventory.CraftingMenu; import net.minecraft.world.inventory.InventoryMenu; import net.minecraft.world.inventory.RecipeBookMenu; import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeHolder; @Environment(EnvType.CLIENT) public class DefaultRecipeBookHandler implements TransferHandler { @@ -61,7 +62,7 @@ public class DefaultRecipeBookHandler implements TransferHandler { } if (h == -1 || w == -1) return Result.createNotApplicable(); - Recipe<?> recipe = craftingDisplay.getOptionalRecipe().get(); + RecipeHolder<?> recipe = craftingDisplay.getOptionalRecipe().get(); if (craftingDisplay.getHeight() > h || craftingDisplay.getWidth() > w) return Result.createFailed(Component.translatable("error.rei.transfer.too_small", h, w)); if (!context.getMinecraft().player.getRecipeBook().contains(recipe)) @@ -76,7 +77,7 @@ public class DefaultRecipeBookHandler implements TransferHandler { } } else if (display instanceof DefaultCookingDisplay defaultDisplay) { if (defaultDisplay.getOptionalRecipe().isPresent()) { - Recipe<?> recipe = (defaultDisplay).getOptionalRecipe().get(); + RecipeHolder<?> recipe = (defaultDisplay).getOptionalRecipe().get(); if (!context.getMinecraft().player.getRecipeBook().contains(recipe)) return Result.createNotApplicable(); if (!context.isActuallyCrafting()) diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java index 38c9b1696..f96bf9011 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java @@ -265,8 +265,8 @@ public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin registry.registerRecipeFiller(BlastingRecipe.class, RecipeType.BLASTING, DefaultBlastingDisplay::new); registry.registerRecipeFiller(CampfireCookingRecipe.class, RecipeType.CAMPFIRE_COOKING, DefaultCampfireDisplay::new); registry.registerRecipeFiller(StonecutterRecipe.class, RecipeType.STONECUTTING, DefaultStoneCuttingDisplay::new); - registry.registerRecipeFiller(SmithingTransformRecipe.class, RecipeType.SMITHING, DefaultSmithingDisplay::new); - registry.registerRecipeFiller(SmithingTrimRecipe.class, RecipeType.SMITHING, DefaultSmithingDisplay::new); + registry.registerRecipeFiller(SmithingTransformRecipe.class, RecipeType.SMITHING, DefaultSmithingDisplay::ofTransforming); + registry.registerRecipeFiller(SmithingTrimRecipe.class, RecipeType.SMITHING, DefaultSmithingDisplay::ofTrimming); registry.registerFiller(AnvilRecipe.class, DefaultAnvilDisplay::new); registry.registerFiller(BrewingRecipe.class, DefaultBrewingDisplay::new); registry.registerFiller(TagKey.class, tagKey -> { @@ -369,7 +369,7 @@ public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin } protected void registerForgePotions(DisplayRegistry registry, BuiltinClientPlugin clientPlugin) { - + } @Override diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCampfireDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCampfireDisplay.java index 3119c8f85..c5352b3d2 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCampfireDisplay.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCampfireDisplay.java @@ -31,6 +31,7 @@ import me.shedaniel.rei.plugin.common.BuiltinPlugin; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.CampfireCookingRecipe; +import net.minecraft.world.item.crafting.RecipeHolder; import java.util.Collections; import java.util.List; @@ -39,9 +40,9 @@ import java.util.Optional; public class DefaultCampfireDisplay extends BasicDisplay { private double cookTime; - public DefaultCampfireDisplay(CampfireCookingRecipe recipe) { - this(EntryIngredients.ofIngredients(recipe.getIngredients()), Collections.singletonList(EntryIngredients.of(recipe.getResultItem(BasicDisplay.registryAccess()))), - Optional.ofNullable(recipe).map(CampfireCookingRecipe::getId), recipe.getCookingTime()); + public DefaultCampfireDisplay(RecipeHolder<CampfireCookingRecipe> recipe) { + this(EntryIngredients.ofIngredients(recipe.value().getIngredients()), Collections.singletonList(EntryIngredients.of(recipe.value().getResultItem(BasicDisplay.registryAccess()))), + Optional.ofNullable(recipe.id()), recipe.value().getCookingTime()); } public DefaultCampfireDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, Optional<ResourceLocation> location, CompoundTag tag) { diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultSmithingDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultSmithingDisplay.java index 7a4b445f8..961946780 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultSmithingDisplay.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultSmithingDisplay.java @@ -29,35 +29,39 @@ import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.util.EntryIngredients; import me.shedaniel.rei.plugin.common.BuiltinPlugin; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.SmithingRecipe; import net.minecraft.world.item.crafting.SmithingTransformRecipe; import net.minecraft.world.item.crafting.SmithingTrimRecipe; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Optional; public class DefaultSmithingDisplay extends BasicDisplay { @ApiStatus.Experimental - public DefaultSmithingDisplay(SmithingTransformRecipe recipe) { - this( - recipe, + public static DefaultSmithingDisplay ofTransforming(RecipeHolder<SmithingTransformRecipe> recipe) { + return new DefaultSmithingDisplay( + recipe.value(), + recipe.id(), List.of( - EntryIngredients.ofIngredient(recipe.template), - EntryIngredients.ofIngredient(recipe.base), - EntryIngredients.ofIngredient(recipe.addition) + EntryIngredients.ofIngredient(recipe.value().template), + EntryIngredients.ofIngredient(recipe.value().base), + EntryIngredients.ofIngredient(recipe.value().addition) ) ); } @ApiStatus.Experimental - public DefaultSmithingDisplay(SmithingTrimRecipe recipe) { - this( - recipe, + public static DefaultSmithingDisplay ofTrimming(RecipeHolder<SmithingTrimRecipe> recipe) { + return new DefaultSmithingDisplay( + recipe.value(), + recipe.id(), List.of( - EntryIngredients.ofIngredient(recipe.template), - EntryIngredients.ofIngredient(recipe.base), - EntryIngredients.ofIngredient(recipe.addition) + EntryIngredients.ofIngredient(recipe.value().template), + EntryIngredients.ofIngredient(recipe.value().base), + EntryIngredients.ofIngredient(recipe.value().addition) ) ); } @@ -101,11 +105,11 @@ public class DefaultSmithingDisplay extends BasicDisplay { // ); // } - public DefaultSmithingDisplay(SmithingRecipe recipe, List<EntryIngredient> inputs) { + public DefaultSmithingDisplay(SmithingRecipe recipe, @Nullable ResourceLocation id, List<EntryIngredient> inputs) { this( inputs, List.of(EntryIngredients.of(recipe.getResultItem(BasicDisplay.registryAccess()))), - Optional.ofNullable(recipe.getId()) + Optional.ofNullable(id) ); } diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultStoneCuttingDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultStoneCuttingDisplay.java index 9359d6d0e..dd5ed55d2 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultStoneCuttingDisplay.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultStoneCuttingDisplay.java @@ -29,6 +29,7 @@ import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.util.EntryIngredients; import me.shedaniel.rei.plugin.common.BuiltinPlugin; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.StonecutterRecipe; import java.util.Collections; @@ -36,9 +37,9 @@ import java.util.List; import java.util.Optional; public class DefaultStoneCuttingDisplay extends BasicDisplay { - public DefaultStoneCuttingDisplay(StonecutterRecipe recipe) { - this(EntryIngredients.ofIngredients(recipe.getIngredients()), Collections.singletonList(EntryIngredients.of(recipe.getResultItem(BasicDisplay.registryAccess()))), - Optional.ofNullable(recipe.getId())); + public DefaultStoneCuttingDisplay(RecipeHolder<StonecutterRecipe> recipe) { + this(EntryIngredients.ofIngredients(recipe.value().getIngredients()), Collections.singletonList(EntryIngredients.of(recipe.value().getResultItem(BasicDisplay.registryAccess()))), + Optional.ofNullable(recipe.id())); } public DefaultStoneCuttingDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, Optional<ResourceLocation> location) { diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultBlastingDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultBlastingDisplay.java index 059511111..5022bbb35 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultBlastingDisplay.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultBlastingDisplay.java @@ -28,11 +28,12 @@ import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.plugin.common.BuiltinPlugin; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.item.crafting.BlastingRecipe; +import net.minecraft.world.item.crafting.RecipeHolder; import java.util.List; public class DefaultBlastingDisplay extends DefaultCookingDisplay { - public DefaultBlastingDisplay(BlastingRecipe recipe) { + public DefaultBlastingDisplay(RecipeHolder<BlastingRecipe> recipe) { super(recipe); } diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultCookingDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultCookingDisplay.java index a69f49a61..7366a91f0 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultCookingDisplay.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultCookingDisplay.java @@ -30,21 +30,22 @@ import me.shedaniel.rei.api.common.registry.RecipeManagerContext; import me.shedaniel.rei.api.common.util.EntryIngredients; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.item.crafting.AbstractCookingRecipe; -import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeHolder; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Nullable; import java.util.Collections; import java.util.List; import java.util.Optional; public abstract class DefaultCookingDisplay extends BasicDisplay implements SimpleGridMenuDisplay { - private Recipe<?> recipe; + private RecipeHolder<?> recipe; private float xp; private double cookTime; - public DefaultCookingDisplay(AbstractCookingRecipe recipe) { - this(EntryIngredients.ofIngredients(recipe.getIngredients()), Collections.singletonList(EntryIngredients.of(recipe.getResultItem(BasicDisplay.registryAccess()))), - recipe, recipe.getExperience(), recipe.getCookingTime()); + public DefaultCookingDisplay(RecipeHolder<? extends AbstractCookingRecipe> recipe) { + this(EntryIngredients.ofIngredients(recipe.value().getIngredients()), Collections.singletonList(EntryIngredients.of(recipe.value().getResultItem(BasicDisplay.registryAccess()))), + recipe, recipe.value().getExperience(), recipe.value().getCookingTime()); } public DefaultCookingDisplay(List<EntryIngredient> input, List<EntryIngredient> output, CompoundTag tag) { @@ -52,8 +53,8 @@ public abstract class DefaultCookingDisplay extends BasicDisplay implements Simp tag.getFloat("xp"), tag.getDouble("cookTime")); } - public DefaultCookingDisplay(List<EntryIngredient> input, List<EntryIngredient> output, Recipe<?> recipe, float xp, double cookTime) { - super(input, output, Optional.ofNullable(recipe).map(Recipe::getId)); + public DefaultCookingDisplay(List<EntryIngredient> input, List<EntryIngredient> output, @Nullable RecipeHolder<?> recipe, float xp, double cookTime) { + super(input, output, Optional.ofNullable(recipe).map(RecipeHolder::id)); this.recipe = recipe; this.xp = xp; this.cookTime = cookTime; @@ -68,7 +69,7 @@ public abstract class DefaultCookingDisplay extends BasicDisplay implements Simp } @ApiStatus.Internal - public Optional<Recipe<?>> getOptionalRecipe() { + public Optional<RecipeHolder<?>> getOptionalRecipe() { return Optional.ofNullable(recipe); } diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultSmeltingDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultSmeltingDisplay.java index ff8ba1387..f89fbad75 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultSmeltingDisplay.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultSmeltingDisplay.java @@ -27,12 +27,13 @@ import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.plugin.common.BuiltinPlugin; import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.SmeltingRecipe; import java.util.List; public class DefaultSmeltingDisplay extends DefaultCookingDisplay { - public DefaultSmeltingDisplay(SmeltingRecipe recipe) { + public DefaultSmeltingDisplay(RecipeHolder<SmeltingRecipe> recipe) { super(recipe); } diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultSmokingDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultSmokingDisplay.java index c769eb3e4..e77ec3465 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultSmokingDisplay.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultSmokingDisplay.java @@ -27,12 +27,13 @@ import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.plugin.common.BuiltinPlugin; import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.SmokingRecipe; import java.util.List; public class DefaultSmokingDisplay extends DefaultCookingDisplay { - public DefaultSmokingDisplay(SmokingRecipe recipe) { + public DefaultSmokingDisplay(RecipeHolder<SmokingRecipe> recipe) { super(recipe); } diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/CraftingRecipeSizeProvider.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/CraftingRecipeSizeProvider.java index 79ba2f856..4fb13af7c 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/CraftingRecipeSizeProvider.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/CraftingRecipeSizeProvider.java @@ -24,6 +24,7 @@ package me.shedaniel.rei.plugin.common.displays.crafting; import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeHolder; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; @@ -73,4 +74,9 @@ public interface CraftingRecipeSizeProvider<R extends Recipe<?>> { @Nullable Size getSize(R recipe); + + @Nullable + default Size getSize(RecipeHolder<R> recipeHolder) { + return getSize(recipeHolder.value()); + } } 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 03243114a..543f487ab 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 @@ -43,24 +43,17 @@ import net.minecraft.core.NonNullList; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.Ingredient; -import net.minecraft.world.item.crafting.Recipe; -import net.minecraft.world.item.crafting.ShapedRecipe; -import net.minecraft.world.item.crafting.ShapelessRecipe; +import net.minecraft.world.item.crafting.*; import org.jetbrains.annotations.Nullable; import java.lang.reflect.InvocationTargetException; import java.util.*; public abstract class DefaultCraftingDisplay<C extends Recipe<?>> extends BasicDisplay implements SimpleGridMenuDisplay { - protected Optional<C> recipe; + protected Optional<RecipeHolder<C>> recipe; - public DefaultCraftingDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, Optional<C> recipe) { - this(inputs, outputs, recipe.map(Recipe::getId), recipe); - } - - public DefaultCraftingDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, Optional<ResourceLocation> location, Optional<C> recipe) { - super(inputs, outputs, location); + public DefaultCraftingDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, Optional<RecipeHolder<C>> recipe) { + super(inputs, outputs, recipe.map(RecipeHolder::id)); this.recipe = recipe; } @@ -89,24 +82,25 @@ public abstract class DefaultCraftingDisplay<C extends Recipe<?>> extends BasicD } @Nullable - public static DefaultCraftingDisplay<?> of(Recipe<?> recipe) { + public static DefaultCraftingDisplay<?> of(RecipeHolder<? extends Recipe<?>> holder) { + Recipe<?> recipe = holder.value(); if (recipe instanceof ShapelessRecipe) { - return new DefaultShapelessDisplay((ShapelessRecipe) recipe); + return new DefaultShapelessDisplay((RecipeHolder<ShapelessRecipe>) holder); } else if (recipe instanceof ShapedRecipe) { - return new DefaultShapedDisplay((ShapedRecipe) recipe); + return new DefaultShapedDisplay((RecipeHolder<ShapedRecipe>) holder); } else if (!recipe.isSpecial()) { NonNullList<Ingredient> ingredients = recipe.getIngredients(); for (CraftingRecipeSizeProvider<?> pair : SIZE_PROVIDER) { - CraftingRecipeSizeProvider.Size size = ((CraftingRecipeSizeProvider<Recipe<?>>) pair).getSize(recipe); + CraftingRecipeSizeProvider.Size size = ((CraftingRecipeSizeProvider<Recipe<?>>) pair).getSize((RecipeHolder<Recipe<?>>) holder); if (size != null) { - return new DefaultCustomShapedDisplay(recipe, EntryIngredients.ofIngredients(recipe.getIngredients()), + return new DefaultCustomShapedDisplay(holder, EntryIngredients.ofIngredients(recipe.getIngredients()), Collections.singletonList(EntryIngredients.of(recipe.getResultItem(BasicDisplay.registryAccess()))), size.getWidth(), size.getHeight()); } } - return new DefaultCustomDisplay(recipe, EntryIngredients.ofIngredients(recipe.getIngredients()), + return new DefaultCustomDisplay(holder, EntryIngredients.ofIngredients(recipe.getIngredients()), Collections.singletonList(EntryIngredients.of(recipe.getResultItem(BasicDisplay.registryAccess())))); } @@ -118,13 +112,13 @@ public abstract class DefaultCraftingDisplay<C extends Recipe<?>> extends BasicD return BuiltinPlugin.CRAFTING; } - public Optional<C> getOptionalRecipe() { + public Optional<RecipeHolder<C>> getOptionalRecipe() { return recipe; } @Override public Optional<ResourceLocation> getDisplayLocation() { - return getOptionalRecipe().map(Recipe::getId); + return getOptionalRecipe().map(RecipeHolder::id); } public <T extends AbstractContainerMenu> List<List<ItemStack>> getOrganisedInputEntries(SimpleGridMenuInfo<T, DefaultCraftingDisplay<?>> menuInfo, T container) { 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 8907a5c04..07e374cd9 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 @@ -27,6 +27,7 @@ import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.registry.RecipeManagerContext; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.cra |
