From cceff15588d1cf1ff6e4abaad51dd3fced2d31da Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Mon, 4 Aug 2025 18:06:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9post=20processors?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../item/recipe/AbstractGroupedRecipe.java | 7 +- .../item/recipe/AbstractRecipeSerializer.java | 17 ++-- .../item/recipe/CustomBlastingRecipe.java | 3 +- .../core/item/recipe/CustomBrewingRecipe.java | 7 +- .../item/recipe/CustomCampfireRecipe.java | 3 +- .../core/item/recipe/CustomCookingRecipe.java | 5 +- .../recipe/CustomCraftingTableRecipe.java | 3 +- .../core/item/recipe/CustomShapedRecipe.java | 3 +- .../item/recipe/CustomShapelessRecipe.java | 3 +- .../item/recipe/CustomSmeltingRecipe.java | 3 +- .../recipe/CustomSmithingTransformRecipe.java | 7 +- .../core/item/recipe/CustomSmokingRecipe.java | 3 +- .../item/recipe/CustomStoneCuttingRecipe.java | 3 +- .../core/item/recipe/FixedResultRecipe.java | 5 +- .../core/item/recipe/SimpleRecipeResult.java | 90 ------------------- .../result/ApplyItemDataPostProcessor.java | 21 +++++ .../recipe/result/CustomRecipeResult.java | 22 +++++ .../item/recipe/result/PostProcessor.java | 16 ++++ .../item/recipe/result/PostProcessors.java | 47 ++++++++++ .../core/registry/BuiltInRegistries.java | 4 +- .../craftengine/core/registry/Registries.java | 4 +- 21 files changed, 155 insertions(+), 121 deletions(-) delete mode 100644 core/src/main/java/net/momirealms/craftengine/core/item/recipe/SimpleRecipeResult.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/ApplyItemDataPostProcessor.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/CustomRecipeResult.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/PostProcessor.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/PostProcessors.java diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/AbstractGroupedRecipe.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/AbstractGroupedRecipe.java index 226ebb3ec..c0634f467 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/AbstractGroupedRecipe.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/AbstractGroupedRecipe.java @@ -1,15 +1,16 @@ package net.momirealms.craftengine.core.item.recipe; import net.momirealms.craftengine.core.item.ItemBuildContext; +import net.momirealms.craftengine.core.item.recipe.result.CustomRecipeResult; import net.momirealms.craftengine.core.util.Key; import org.jetbrains.annotations.Nullable; public abstract class AbstractGroupedRecipe implements FixedResultRecipe { protected final String group; protected final Key id; - protected final SimpleRecipeResult result; + protected final CustomRecipeResult result; - protected AbstractGroupedRecipe(Key id, String group, SimpleRecipeResult result) { + protected AbstractGroupedRecipe(Key id, String group, CustomRecipeResult result) { this.group = group == null ? "" : group; this.id = id; this.result = result; @@ -31,7 +32,7 @@ public abstract class AbstractGroupedRecipe implements FixedResultRecipe { } @Override - public SimpleRecipeResult result() { + public CustomRecipeResult result() { return this.result; } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/AbstractRecipeSerializer.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/AbstractRecipeSerializer.java index 257bb938a..ddb4b0e4c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/AbstractRecipeSerializer.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/AbstractRecipeSerializer.java @@ -8,6 +8,9 @@ import net.momirealms.craftengine.core.item.recipe.reader.VanillaRecipeReader; import net.momirealms.craftengine.core.item.recipe.reader.VanillaRecipeReader1_20; import net.momirealms.craftengine.core.item.recipe.reader.VanillaRecipeReader1_20_5; import net.momirealms.craftengine.core.item.recipe.reader.VanillaRecipeReader1_21_2; +import net.momirealms.craftengine.core.item.recipe.result.CustomRecipeResult; +import net.momirealms.craftengine.core.item.recipe.result.PostProcessor; +import net.momirealms.craftengine.core.item.recipe.result.PostProcessors; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.util.*; @@ -57,26 +60,26 @@ public abstract class AbstractRecipeSerializer> implement return recipeCategory; } - @SuppressWarnings({"unchecked", "rawtypes"}) - protected SimpleRecipeResult parseResult(Map arguments) { + @SuppressWarnings({"unchecked"}) + protected CustomRecipeResult parseResult(Map arguments) { Map resultMap = MiscUtils.castToMap(arguments.get("result"), true); if (resultMap == null) { throw new LocalizedResourceConfigException("warning.config.recipe.missing_result"); } String id = ResourceConfigUtils.requireNonEmptyStringOrThrow(resultMap.get("id"), "warning.config.recipe.result.missing_id"); int count = ResourceConfigUtils.getAsInt(resultMap.getOrDefault("count", 1), "count"); - List> processors = ResourceConfigUtils.parseConfigAsList(resultMap.get("post-processors"), SimpleRecipeResult.PostProcessor::fromMap); - return new SimpleRecipeResult( + List> processors = ResourceConfigUtils.parseConfigAsList(resultMap.get("post-processors"), PostProcessors::fromMap); + return (CustomRecipeResult) new CustomRecipeResult<>( CraftEngine.instance().itemManager().getBuildableItem(Key.of(id)).orElseThrow(() -> new LocalizedResourceConfigException("warning.config.recipe.invalid_result", id)), count, - processors.isEmpty() ? null : processors.toArray(new SimpleRecipeResult.PostProcessor[0]) + processors.isEmpty() ? null : processors.toArray(new PostProcessor[0]) ); } @SuppressWarnings("unchecked") - protected SimpleRecipeResult parseResult(DatapackRecipeResult recipeResult) { + protected CustomRecipeResult parseResult(DatapackRecipeResult recipeResult) { Item result = (Item) CraftEngine.instance().itemManager().build(recipeResult); - return new SimpleRecipeResult<>(CloneableConstantItem.of(result), recipeResult.count(), null); + return new CustomRecipeResult<>(CloneableConstantItem.of(result), recipeResult.count(), null); } @Nullable diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomBlastingRecipe.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomBlastingRecipe.java index 937954b43..eaff6e37a 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomBlastingRecipe.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomBlastingRecipe.java @@ -1,6 +1,7 @@ package net.momirealms.craftengine.core.item.recipe; import com.google.gson.JsonObject; +import net.momirealms.craftengine.core.item.recipe.result.CustomRecipeResult; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.ResourceConfigUtils; import org.jetbrains.annotations.NotNull; @@ -10,7 +11,7 @@ import java.util.Map; public class CustomBlastingRecipe extends CustomCookingRecipe { public static final Serializer SERIALIZER = new Serializer<>(); - public CustomBlastingRecipe(Key id, CookingRecipeCategory category, String group, Ingredient ingredient, int cookingTime, float experience, SimpleRecipeResult result) { + public CustomBlastingRecipe(Key id, CookingRecipeCategory category, String group, Ingredient ingredient, int cookingTime, float experience, CustomRecipeResult result) { super(id, category, group, ingredient, cookingTime, experience, result); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomBrewingRecipe.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomBrewingRecipe.java index 41b621e5e..38e349063 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomBrewingRecipe.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomBrewingRecipe.java @@ -4,6 +4,7 @@ import com.google.gson.JsonObject; import net.momirealms.craftengine.core.item.ItemBuildContext; import net.momirealms.craftengine.core.item.recipe.input.BrewingInput; import net.momirealms.craftengine.core.item.recipe.input.RecipeInput; +import net.momirealms.craftengine.core.item.recipe.result.CustomRecipeResult; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.MiscUtils; @@ -19,12 +20,12 @@ public class CustomBrewingRecipe implements FixedResultRecipe { private final Key id; private final Ingredient container; private final Ingredient ingredient; - private final SimpleRecipeResult result; + private final CustomRecipeResult result; public CustomBrewingRecipe(@NotNull Key id, @NotNull Ingredient container, @NotNull Ingredient ingredient, - @NotNull SimpleRecipeResult result) { + @NotNull CustomRecipeResult result) { this.id = id; this.container = container; this.ingredient = ingredient; @@ -32,7 +33,7 @@ public class CustomBrewingRecipe implements FixedResultRecipe { } @Override - public SimpleRecipeResult result() { + public CustomRecipeResult result() { return this.result; } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomCampfireRecipe.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomCampfireRecipe.java index 3ccde065f..9522de1fa 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomCampfireRecipe.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomCampfireRecipe.java @@ -1,6 +1,7 @@ package net.momirealms.craftengine.core.item.recipe; import com.google.gson.JsonObject; +import net.momirealms.craftengine.core.item.recipe.result.CustomRecipeResult; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.ResourceConfigUtils; import org.jetbrains.annotations.NotNull; @@ -10,7 +11,7 @@ import java.util.Map; public class CustomCampfireRecipe extends CustomCookingRecipe { public static final Serializer SERIALIZER = new Serializer<>(); - public CustomCampfireRecipe(Key id, CookingRecipeCategory category, String group, Ingredient ingredient, int cookingTime, float experience, SimpleRecipeResult result) { + public CustomCampfireRecipe(Key id, CookingRecipeCategory category, String group, Ingredient ingredient, int cookingTime, float experience, CustomRecipeResult result) { super(id, category, group, ingredient, cookingTime, experience, result); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomCookingRecipe.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomCookingRecipe.java index a29aace6e..78009eab6 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomCookingRecipe.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomCookingRecipe.java @@ -2,6 +2,7 @@ package net.momirealms.craftengine.core.item.recipe; import net.momirealms.craftengine.core.item.recipe.input.RecipeInput; import net.momirealms.craftengine.core.item.recipe.input.SingleItemInput; +import net.momirealms.craftengine.core.item.recipe.result.CustomRecipeResult; import net.momirealms.craftengine.core.util.Key; import java.util.List; @@ -18,7 +19,7 @@ public abstract class CustomCookingRecipe extends AbstractGroupedRecipe { Ingredient ingredient, int cookingTime, float experience, - SimpleRecipeResult result) { + CustomRecipeResult result) { super(id, group, result); this.category = category == null ? CookingRecipeCategory.MISC : category; this.ingredient = ingredient; @@ -40,7 +41,7 @@ public abstract class CustomCookingRecipe extends AbstractGroupedRecipe { return ingredient; } - public SimpleRecipeResult result() { + public CustomRecipeResult result() { return result; } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomCraftingTableRecipe.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomCraftingTableRecipe.java index 34f7618de..be75eede6 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomCraftingTableRecipe.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomCraftingTableRecipe.java @@ -1,11 +1,12 @@ package net.momirealms.craftengine.core.item.recipe; +import net.momirealms.craftengine.core.item.recipe.result.CustomRecipeResult; import net.momirealms.craftengine.core.util.Key; public abstract class CustomCraftingTableRecipe extends AbstractGroupedRecipe { protected final CraftingRecipeCategory category; - protected CustomCraftingTableRecipe(Key id, CraftingRecipeCategory category, String group, SimpleRecipeResult result) { + protected CustomCraftingTableRecipe(Key id, CraftingRecipeCategory category, String group, CustomRecipeResult result) { super(id, group, result); this.category = category == null ? CraftingRecipeCategory.MISC : category; } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomShapedRecipe.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomShapedRecipe.java index 7f6cd7135..806beee76 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomShapedRecipe.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomShapedRecipe.java @@ -4,6 +4,7 @@ import com.google.common.collect.Maps; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.item.recipe.input.CraftingInput; import net.momirealms.craftengine.core.item.recipe.input.RecipeInput; +import net.momirealms.craftengine.core.item.recipe.result.CustomRecipeResult; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.MiscUtils; @@ -17,7 +18,7 @@ public class CustomShapedRecipe extends CustomCraftingTableRecipe { private final ParsedPattern parsedPattern; private final Pattern pattern; - public CustomShapedRecipe(Key id, CraftingRecipeCategory category, String group, Pattern pattern, SimpleRecipeResult result) { + public CustomShapedRecipe(Key id, CraftingRecipeCategory category, String group, Pattern pattern, CustomRecipeResult result) { super(id, category, group, result); this.pattern = pattern; this.parsedPattern = pattern.parse(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomShapelessRecipe.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomShapelessRecipe.java index 786e7f937..16637d5bd 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomShapelessRecipe.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomShapelessRecipe.java @@ -3,6 +3,7 @@ package net.momirealms.craftengine.core.item.recipe; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.item.recipe.input.CraftingInput; import net.momirealms.craftengine.core.item.recipe.input.RecipeInput; +import net.momirealms.craftengine.core.item.recipe.result.CustomRecipeResult; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.MiscUtils; import org.jetbrains.annotations.NotNull; @@ -16,7 +17,7 @@ public class CustomShapelessRecipe extends CustomCraftingTableRecipe { private final List> ingredients; private final PlacementInfo placementInfo; - public CustomShapelessRecipe(Key id, CraftingRecipeCategory category, String group, List> ingredients, SimpleRecipeResult result) { + public CustomShapelessRecipe(Key id, CraftingRecipeCategory category, String group, List> ingredients, CustomRecipeResult result) { super(id, category, group, result); this.ingredients = ingredients; this.placementInfo = PlacementInfo.create(ingredients); diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmeltingRecipe.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmeltingRecipe.java index bc564c379..7cadcc45c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmeltingRecipe.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmeltingRecipe.java @@ -1,6 +1,7 @@ package net.momirealms.craftengine.core.item.recipe; import com.google.gson.JsonObject; +import net.momirealms.craftengine.core.item.recipe.result.CustomRecipeResult; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.ResourceConfigUtils; import org.jetbrains.annotations.NotNull; @@ -10,7 +11,7 @@ import java.util.Map; public class CustomSmeltingRecipe extends CustomCookingRecipe { public static final Serializer SERIALIZER = new Serializer<>(); - public CustomSmeltingRecipe(Key id, CookingRecipeCategory category, String group, Ingredient ingredient, int cookingTime, float experience, SimpleRecipeResult result) { + public CustomSmeltingRecipe(Key id, CookingRecipeCategory category, String group, Ingredient ingredient, int cookingTime, float experience, CustomRecipeResult result) { super(id, category, group, ingredient, cookingTime, experience, result); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmithingTransformRecipe.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmithingTransformRecipe.java index 24ff7b8a3..c73ac1b6e 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmithingTransformRecipe.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmithingTransformRecipe.java @@ -5,6 +5,7 @@ import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.ItemBuildContext; import net.momirealms.craftengine.core.item.recipe.input.RecipeInput; import net.momirealms.craftengine.core.item.recipe.input.SmithingInput; +import net.momirealms.craftengine.core.item.recipe.result.CustomRecipeResult; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.registry.BuiltInRegistries; @@ -22,7 +23,7 @@ import java.util.Objects; public class CustomSmithingTransformRecipe implements FixedResultRecipe { public static final Serializer SERIALIZER = new Serializer<>(); private final Key id; - private final SimpleRecipeResult result; + private final CustomRecipeResult result; private final Ingredient base; private final Ingredient template; private final Ingredient addition; @@ -33,7 +34,7 @@ public class CustomSmithingTransformRecipe implements FixedResultRecipe { @NotNull Ingredient base, @Nullable Ingredient template, @Nullable Ingredient addition, - SimpleRecipeResult result, + CustomRecipeResult result, boolean mergeComponents, List processors ) { @@ -116,7 +117,7 @@ public class CustomSmithingTransformRecipe implements FixedResultRecipe { return finalResult.getItem(); } - public SimpleRecipeResult result() { + public CustomRecipeResult result() { return this.result; } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmokingRecipe.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmokingRecipe.java index df7e682e3..eb0bca8f5 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmokingRecipe.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmokingRecipe.java @@ -1,6 +1,7 @@ package net.momirealms.craftengine.core.item.recipe; import com.google.gson.JsonObject; +import net.momirealms.craftengine.core.item.recipe.result.CustomRecipeResult; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.ResourceConfigUtils; import org.jetbrains.annotations.NotNull; @@ -10,7 +11,7 @@ import java.util.Map; public class CustomSmokingRecipe extends CustomCookingRecipe { public static final Serializer SERIALIZER = new Serializer<>(); - public CustomSmokingRecipe(Key id, CookingRecipeCategory category, String group, Ingredient ingredient, int cookingTime, float experience, SimpleRecipeResult result) { + public CustomSmokingRecipe(Key id, CookingRecipeCategory category, String group, Ingredient ingredient, int cookingTime, float experience, CustomRecipeResult result) { super(id, category, group, ingredient, cookingTime, experience, result); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomStoneCuttingRecipe.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomStoneCuttingRecipe.java index b3d517c4b..0476b96d7 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomStoneCuttingRecipe.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomStoneCuttingRecipe.java @@ -3,6 +3,7 @@ package net.momirealms.craftengine.core.item.recipe; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.item.recipe.input.RecipeInput; import net.momirealms.craftengine.core.item.recipe.input.SingleItemInput; +import net.momirealms.craftengine.core.item.recipe.result.CustomRecipeResult; import net.momirealms.craftengine.core.util.Key; import org.jetbrains.annotations.NotNull; @@ -13,7 +14,7 @@ public class CustomStoneCuttingRecipe extends AbstractGroupedRecipe { public static final Serializer SERIALIZER = new Serializer<>(); protected final Ingredient ingredient; - public CustomStoneCuttingRecipe(Key id, String group, Ingredient ingredient, SimpleRecipeResult result) { + public CustomStoneCuttingRecipe(Key id, String group, Ingredient ingredient, CustomRecipeResult result) { super(id, group, result); this.ingredient = ingredient; } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/FixedResultRecipe.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/FixedResultRecipe.java index 3bbd1e6f2..757d37533 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/FixedResultRecipe.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/FixedResultRecipe.java @@ -2,12 +2,15 @@ package net.momirealms.craftengine.core.item.recipe; import net.momirealms.craftengine.core.item.ItemBuildContext; import net.momirealms.craftengine.core.item.recipe.input.RecipeInput; +import net.momirealms.craftengine.core.item.recipe.result.CustomRecipeResult; public interface FixedResultRecipe extends Recipe { T result(ItemBuildContext context); - SimpleRecipeResult result(); + CustomRecipeResult result(); + + @Override default T assemble(RecipeInput input, ItemBuildContext context) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/SimpleRecipeResult.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/SimpleRecipeResult.java deleted file mode 100644 index 5ce0ad88f..000000000 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/SimpleRecipeResult.java +++ /dev/null @@ -1,90 +0,0 @@ -package net.momirealms.craftengine.core.item.recipe; - -import net.momirealms.craftengine.core.item.BuildableItem; -import net.momirealms.craftengine.core.item.Item; -import net.momirealms.craftengine.core.item.ItemBuildContext; -import net.momirealms.craftengine.core.item.modifier.ItemDataModifier; -import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; -import net.momirealms.craftengine.core.registry.BuiltInRegistries; -import net.momirealms.craftengine.core.registry.Registries; -import net.momirealms.craftengine.core.registry.WritableRegistry; -import net.momirealms.craftengine.core.util.Key; -import net.momirealms.craftengine.core.util.ResourceConfigUtils; -import net.momirealms.craftengine.core.util.ResourceKey; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -@SuppressWarnings("unchecked") -public record SimpleRecipeResult(BuildableItem item, int count, PostProcessor[] postProcessors) { - - public T buildItemStack(ItemBuildContext context) { - return buildItem(context).getItem(); - } - - public Item buildItem(ItemBuildContext context) { - Item builtItem = this.item.buildItem(context, count); - if (this.postProcessors != null) { - for (PostProcessor postProcessor : this.postProcessors) { - builtItem = postProcessor.process(builtItem, context); - } - } - return builtItem; - } - - static { - registerPostProcessorType(Key.of("craftengine", "apply_data"), args -> { - List> modifiers = new ArrayList<>(); - Map data = ResourceConfigUtils.getAsMap(args.get("data"), "data"); - for (Map.Entry entry : data.entrySet()) { - Optional.ofNullable(BuiltInRegistries.ITEM_DATA_MODIFIER_FACTORY.getValue(Key.withDefaultNamespace(entry.getKey(), "craftengine"))) - .ifPresent(factory -> modifiers.add(factory.create(entry.getValue()))); - } - return new ApplyItemDataProcessor<>(modifiers.toArray(new ItemDataModifier[0])); - }); - } - - public static void registerPostProcessorType(Key id, PostProcessor.Type type) { - ((WritableRegistry>) BuiltInRegistries.RECIPE_POST_PROCESSOR_TYPE) - .register(ResourceKey.create(Registries.RECIPE_POST_PROCESSOR_TYPE.location(), id), type); - } - - @FunctionalInterface - public interface PostProcessor { - - static PostProcessor fromMap(Map map) { - String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("type"), "warning.config.recipe.result.post_processor.missing_type"); - Key key = Key.withDefaultNamespace(type, Key.DEFAULT_NAMESPACE); - PostProcessor.Type processor = (PostProcessor.Type) BuiltInRegistries.RECIPE_POST_PROCESSOR_TYPE.getValue(key); - if (processor == null) { - throw new LocalizedResourceConfigException("warning.config.recipe.result.post_processor.invalid_type", type); - } - return processor.create(map); - } - - Item process(Item item, ItemBuildContext context); - - interface Type { - - PostProcessor create(Map args); - } - } - - public static class ApplyItemDataProcessor implements PostProcessor { - private final ItemDataModifier[] modifiers; - - public ApplyItemDataProcessor(ItemDataModifier[] modifiers) { - this.modifiers = modifiers; - } - - @Override - public Item process(Item item, ItemBuildContext context) { - for (ItemDataModifier modifier : this.modifiers) { - item.apply(modifier, context); - } - return item; - } - } -} diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/ApplyItemDataPostProcessor.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/ApplyItemDataPostProcessor.java new file mode 100644 index 000000000..3ace66275 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/ApplyItemDataPostProcessor.java @@ -0,0 +1,21 @@ +package net.momirealms.craftengine.core.item.recipe.result; + +import net.momirealms.craftengine.core.item.Item; +import net.momirealms.craftengine.core.item.ItemBuildContext; +import net.momirealms.craftengine.core.item.modifier.ItemDataModifier; + +public class ApplyItemDataPostProcessor implements PostProcessor { + private final ItemDataModifier[] modifiers; + + public ApplyItemDataPostProcessor(ItemDataModifier[] modifiers) { + this.modifiers = modifiers; + } + + @Override + public Item process(Item item, ItemBuildContext context) { + for (ItemDataModifier modifier : this.modifiers) { + item.apply(modifier, context); + } + return item; + } +} \ No newline at end of file diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/CustomRecipeResult.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/CustomRecipeResult.java new file mode 100644 index 000000000..26e21d102 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/CustomRecipeResult.java @@ -0,0 +1,22 @@ +package net.momirealms.craftengine.core.item.recipe.result; + +import net.momirealms.craftengine.core.item.BuildableItem; +import net.momirealms.craftengine.core.item.Item; +import net.momirealms.craftengine.core.item.ItemBuildContext; + +public record CustomRecipeResult(BuildableItem item, int count, PostProcessor[] postProcessors) { + + public T buildItemStack(ItemBuildContext context) { + return buildItem(context).getItem(); + } + + public Item buildItem(ItemBuildContext context) { + Item builtItem = this.item.buildItem(context, this.count); + if (this.postProcessors != null) { + for (PostProcessor postProcessor : this.postProcessors) { + builtItem = postProcessor.process(builtItem, context); + } + } + return builtItem; + } +} \ No newline at end of file diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/PostProcessor.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/PostProcessor.java new file mode 100644 index 000000000..7e8eb5c2f --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/PostProcessor.java @@ -0,0 +1,16 @@ +package net.momirealms.craftengine.core.item.recipe.result; + +import net.momirealms.craftengine.core.item.Item; +import net.momirealms.craftengine.core.item.ItemBuildContext; + +import java.util.Map; + +public interface PostProcessor { + + Item process(Item item, ItemBuildContext context); + + interface Type { + + PostProcessor create(Map args); + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/PostProcessors.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/PostProcessors.java new file mode 100644 index 000000000..b091523f5 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/PostProcessors.java @@ -0,0 +1,47 @@ +package net.momirealms.craftengine.core.item.recipe.result; + +import net.momirealms.craftengine.core.item.modifier.ItemDataModifier; +import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; +import net.momirealms.craftengine.core.registry.BuiltInRegistries; +import net.momirealms.craftengine.core.registry.Registries; +import net.momirealms.craftengine.core.registry.WritableRegistry; +import net.momirealms.craftengine.core.util.Key; +import net.momirealms.craftengine.core.util.ResourceConfigUtils; +import net.momirealms.craftengine.core.util.ResourceKey; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +@SuppressWarnings("unchecked") +public class PostProcessors { + public static final Key APPLY_DATA = Key.of("craftengine:apply_data"); + + static { + registerPostProcessorType(APPLY_DATA, args -> { + List> modifiers = new ArrayList<>(); + Map data = ResourceConfigUtils.getAsMap(args.get("data"), "data"); + for (Map.Entry entry : data.entrySet()) { + Optional.ofNullable(BuiltInRegistries.ITEM_DATA_MODIFIER_FACTORY.getValue(Key.withDefaultNamespace(entry.getKey(), Key.DEFAULT_NAMESPACE))) + .ifPresent(factory -> modifiers.add(factory.create(entry.getValue()))); + } + return new ApplyItemDataPostProcessor<>(modifiers.toArray(new ItemDataModifier[0])); + }); + } + + public static PostProcessor fromMap(Map map) { + String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("type"), "warning.config.recipe.result.post_processor.missing_type"); + Key key = Key.withDefaultNamespace(type, Key.DEFAULT_NAMESPACE); + PostProcessor.Type processor = (PostProcessor.Type) BuiltInRegistries.RECIPE_POST_PROCESSOR_TYPE.getValue(key); + if (processor == null) { + throw new LocalizedResourceConfigException("warning.config.recipe.result.post_processor.invalid_type", type); + } + return processor.create(map); + } + + public static void registerPostProcessorType(Key id, PostProcessor.Type type) { + ((WritableRegistry>) BuiltInRegistries.RECIPE_POST_PROCESSOR_TYPE) + .register(ResourceKey.create(Registries.RECIPE_POST_PROCESSOR_TYPE.location(), id), type); + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java b/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java index 061c5d4fc..482b2e1d5 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java +++ b/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java @@ -10,10 +10,10 @@ import net.momirealms.craftengine.core.item.equipment.EquipmentFactory; import net.momirealms.craftengine.core.item.recipe.CustomSmithingTransformRecipe; import net.momirealms.craftengine.core.item.recipe.Recipe; import net.momirealms.craftengine.core.item.recipe.RecipeSerializer; -import net.momirealms.craftengine.core.item.recipe.SimpleRecipeResult; import net.momirealms.craftengine.core.item.recipe.network.legacy.LegacyRecipe; import net.momirealms.craftengine.core.item.recipe.network.modern.display.RecipeDisplay; import net.momirealms.craftengine.core.item.recipe.network.modern.display.slot.SlotDisplay; +import net.momirealms.craftengine.core.item.recipe.result.PostProcessor; import net.momirealms.craftengine.core.loot.LootContext; import net.momirealms.craftengine.core.loot.entry.LootEntryContainerFactory; import net.momirealms.craftengine.core.loot.function.ApplyBonusCountFunction; @@ -78,7 +78,7 @@ public class BuiltInRegistries { public static final Registry SLOT_DISPLAY_TYPE = createConstantBoundRegistry(Registries.SLOT_DISPLAY_TYPE); public static final Registry RECIPE_DISPLAY_TYPE = createConstantBoundRegistry(Registries.RECIPE_DISPLAY_TYPE); public static final Registry LEGACY_RECIPE_TYPE = createConstantBoundRegistry(Registries.LEGACY_RECIPE_TYPE); - public static final Registry> RECIPE_POST_PROCESSOR_TYPE = createConstantBoundRegistry(Registries.RECIPE_POST_PROCESSOR_TYPE); + public static final Registry> RECIPE_POST_PROCESSOR_TYPE = createConstantBoundRegistry(Registries.RECIPE_POST_PROCESSOR_TYPE); private static Registry createConstantBoundRegistry(ResourceKey> key) { return new ConstantBoundRegistry<>(key); diff --git a/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java b/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java index 291233df3..78e68ec0e 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java +++ b/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java @@ -10,10 +10,10 @@ import net.momirealms.craftengine.core.item.equipment.EquipmentFactory; import net.momirealms.craftengine.core.item.recipe.CustomSmithingTransformRecipe; import net.momirealms.craftengine.core.item.recipe.Recipe; import net.momirealms.craftengine.core.item.recipe.RecipeSerializer; -import net.momirealms.craftengine.core.item.recipe.SimpleRecipeResult; import net.momirealms.craftengine.core.item.recipe.network.legacy.LegacyRecipe; import net.momirealms.craftengine.core.item.recipe.network.modern.display.RecipeDisplay; import net.momirealms.craftengine.core.item.recipe.network.modern.display.slot.SlotDisplay; +import net.momirealms.craftengine.core.item.recipe.result.PostProcessor; import net.momirealms.craftengine.core.loot.LootContext; import net.momirealms.craftengine.core.loot.entry.LootEntryContainerFactory; import net.momirealms.craftengine.core.loot.function.ApplyBonusCountFunction; @@ -80,5 +80,5 @@ public class Registries { public static final ResourceKey> SLOT_DISPLAY_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("slot_display_type")); public static final ResourceKey> RECIPE_DISPLAY_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("recipe_display_type")); public static final ResourceKey> LEGACY_RECIPE_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("legacy_recipe_type")); - public static final ResourceKey>> RECIPE_POST_PROCESSOR_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("recipe_post_processor_type")); + public static final ResourceKey>> RECIPE_POST_PROCESSOR_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("recipe_post_processor_type")); }