9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-25 09:59:20 +00:00

修改post processors

This commit is contained in:
XiaoMoMi
2025-08-04 18:06:26 +08:00
parent 85012f7058
commit cceff15588
21 changed files with 155 additions and 121 deletions

View File

@@ -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<T> implements FixedResultRecipe<T> {
protected final String group;
protected final Key id;
protected final SimpleRecipeResult<T> result;
protected final CustomRecipeResult<T> result;
protected AbstractGroupedRecipe(Key id, String group, SimpleRecipeResult<T> result) {
protected AbstractGroupedRecipe(Key id, String group, CustomRecipeResult<T> result) {
this.group = group == null ? "" : group;
this.id = id;
this.result = result;
@@ -31,7 +32,7 @@ public abstract class AbstractGroupedRecipe<T> implements FixedResultRecipe<T> {
}
@Override
public SimpleRecipeResult<T> result() {
public CustomRecipeResult<T> result() {
return this.result;
}
}

View File

@@ -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<T, R extends Recipe<T>> implement
return recipeCategory;
}
@SuppressWarnings({"unchecked", "rawtypes"})
protected SimpleRecipeResult<T> parseResult(Map<String, Object> arguments) {
@SuppressWarnings({"unchecked"})
protected CustomRecipeResult<T> parseResult(Map<String, Object> arguments) {
Map<String, Object> 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<SimpleRecipeResult.PostProcessor<T>> processors = ResourceConfigUtils.parseConfigAsList(resultMap.get("post-processors"), SimpleRecipeResult.PostProcessor::fromMap);
return new SimpleRecipeResult(
List<PostProcessor<T>> processors = ResourceConfigUtils.parseConfigAsList(resultMap.get("post-processors"), PostProcessors::fromMap);
return (CustomRecipeResult<T>) 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<T> parseResult(DatapackRecipeResult recipeResult) {
protected CustomRecipeResult<T> parseResult(DatapackRecipeResult recipeResult) {
Item<T> result = (Item<T>) CraftEngine.instance().itemManager().build(recipeResult);
return new SimpleRecipeResult<>(CloneableConstantItem.of(result), recipeResult.count(), null);
return new CustomRecipeResult<>(CloneableConstantItem.of(result), recipeResult.count(), null);
}
@Nullable

View File

@@ -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<T> extends CustomCookingRecipe<T> {
public static final Serializer<?> SERIALIZER = new Serializer<>();
public CustomBlastingRecipe(Key id, CookingRecipeCategory category, String group, Ingredient<T> ingredient, int cookingTime, float experience, SimpleRecipeResult<T> result) {
public CustomBlastingRecipe(Key id, CookingRecipeCategory category, String group, Ingredient<T> ingredient, int cookingTime, float experience, CustomRecipeResult<T> result) {
super(id, category, group, ingredient, cookingTime, experience, result);
}

View File

@@ -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<T> implements FixedResultRecipe<T> {
private final Key id;
private final Ingredient<T> container;
private final Ingredient<T> ingredient;
private final SimpleRecipeResult<T> result;
private final CustomRecipeResult<T> result;
public CustomBrewingRecipe(@NotNull Key id,
@NotNull Ingredient<T> container,
@NotNull Ingredient<T> ingredient,
@NotNull SimpleRecipeResult<T> result) {
@NotNull CustomRecipeResult<T> result) {
this.id = id;
this.container = container;
this.ingredient = ingredient;
@@ -32,7 +33,7 @@ public class CustomBrewingRecipe<T> implements FixedResultRecipe<T> {
}
@Override
public SimpleRecipeResult<T> result() {
public CustomRecipeResult<T> result() {
return this.result;
}

View File

@@ -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<T> extends CustomCookingRecipe<T> {
public static final Serializer<?> SERIALIZER = new Serializer<>();
public CustomCampfireRecipe(Key id, CookingRecipeCategory category, String group, Ingredient<T> ingredient, int cookingTime, float experience, SimpleRecipeResult<T> result) {
public CustomCampfireRecipe(Key id, CookingRecipeCategory category, String group, Ingredient<T> ingredient, int cookingTime, float experience, CustomRecipeResult<T> result) {
super(id, category, group, ingredient, cookingTime, experience, result);
}

View File

@@ -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<T> extends AbstractGroupedRecipe<T> {
Ingredient<T> ingredient,
int cookingTime,
float experience,
SimpleRecipeResult<T> result) {
CustomRecipeResult<T> result) {
super(id, group, result);
this.category = category == null ? CookingRecipeCategory.MISC : category;
this.ingredient = ingredient;
@@ -40,7 +41,7 @@ public abstract class CustomCookingRecipe<T> extends AbstractGroupedRecipe<T> {
return ingredient;
}
public SimpleRecipeResult<T> result() {
public CustomRecipeResult<T> result() {
return result;
}

View File

@@ -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<T> extends AbstractGroupedRecipe<T> {
protected final CraftingRecipeCategory category;
protected CustomCraftingTableRecipe(Key id, CraftingRecipeCategory category, String group, SimpleRecipeResult<T> result) {
protected CustomCraftingTableRecipe(Key id, CraftingRecipeCategory category, String group, CustomRecipeResult<T> result) {
super(id, group, result);
this.category = category == null ? CraftingRecipeCategory.MISC : category;
}

View File

@@ -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<T> extends CustomCraftingTableRecipe<T> {
private final ParsedPattern<T> parsedPattern;
private final Pattern<T> pattern;
public CustomShapedRecipe(Key id, CraftingRecipeCategory category, String group, Pattern<T> pattern, SimpleRecipeResult<T> result) {
public CustomShapedRecipe(Key id, CraftingRecipeCategory category, String group, Pattern<T> pattern, CustomRecipeResult<T> result) {
super(id, category, group, result);
this.pattern = pattern;
this.parsedPattern = pattern.parse();

View File

@@ -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<T> extends CustomCraftingTableRecipe<T> {
private final List<Ingredient<T>> ingredients;
private final PlacementInfo<T> placementInfo;
public CustomShapelessRecipe(Key id, CraftingRecipeCategory category, String group, List<Ingredient<T>> ingredients, SimpleRecipeResult<T> result) {
public CustomShapelessRecipe(Key id, CraftingRecipeCategory category, String group, List<Ingredient<T>> ingredients, CustomRecipeResult<T> result) {
super(id, category, group, result);
this.ingredients = ingredients;
this.placementInfo = PlacementInfo.create(ingredients);

View File

@@ -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<T> extends CustomCookingRecipe<T> {
public static final Serializer<?> SERIALIZER = new Serializer<>();
public CustomSmeltingRecipe(Key id, CookingRecipeCategory category, String group, Ingredient<T> ingredient, int cookingTime, float experience, SimpleRecipeResult<T> result) {
public CustomSmeltingRecipe(Key id, CookingRecipeCategory category, String group, Ingredient<T> ingredient, int cookingTime, float experience, CustomRecipeResult<T> result) {
super(id, category, group, ingredient, cookingTime, experience, result);
}

View File

@@ -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<T> implements FixedResultRecipe<T> {
public static final Serializer<?> SERIALIZER = new Serializer<>();
private final Key id;
private final SimpleRecipeResult<T> result;
private final CustomRecipeResult<T> result;
private final Ingredient<T> base;
private final Ingredient<T> template;
private final Ingredient<T> addition;
@@ -33,7 +34,7 @@ public class CustomSmithingTransformRecipe<T> implements FixedResultRecipe<T> {
@NotNull Ingredient<T> base,
@Nullable Ingredient<T> template,
@Nullable Ingredient<T> addition,
SimpleRecipeResult<T> result,
CustomRecipeResult<T> result,
boolean mergeComponents,
List<ItemDataProcessor> processors
) {
@@ -116,7 +117,7 @@ public class CustomSmithingTransformRecipe<T> implements FixedResultRecipe<T> {
return finalResult.getItem();
}
public SimpleRecipeResult<T> result() {
public CustomRecipeResult<T> result() {
return this.result;
}

View File

@@ -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<T> extends CustomCookingRecipe<T> {
public static final Serializer<?> SERIALIZER = new Serializer<>();
public CustomSmokingRecipe(Key id, CookingRecipeCategory category, String group, Ingredient<T> ingredient, int cookingTime, float experience, SimpleRecipeResult<T> result) {
public CustomSmokingRecipe(Key id, CookingRecipeCategory category, String group, Ingredient<T> ingredient, int cookingTime, float experience, CustomRecipeResult<T> result) {
super(id, category, group, ingredient, cookingTime, experience, result);
}

View File

@@ -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<T> extends AbstractGroupedRecipe<T> {
public static final Serializer<?> SERIALIZER = new Serializer<>();
protected final Ingredient<T> ingredient;
public CustomStoneCuttingRecipe(Key id, String group, Ingredient<T> ingredient, SimpleRecipeResult<T> result) {
public CustomStoneCuttingRecipe(Key id, String group, Ingredient<T> ingredient, CustomRecipeResult<T> result) {
super(id, group, result);
this.ingredient = ingredient;
}

View File

@@ -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<T> extends Recipe<T> {
T result(ItemBuildContext context);
SimpleRecipeResult<T> result();
CustomRecipeResult<T> result();
@Override
default T assemble(RecipeInput input, ItemBuildContext context) {

View File

@@ -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<T>(BuildableItem<T> item, int count, PostProcessor<T>[] postProcessors) {
public T buildItemStack(ItemBuildContext context) {
return buildItem(context).getItem();
}
public Item<T> buildItem(ItemBuildContext context) {
Item<T> builtItem = this.item.buildItem(context, count);
if (this.postProcessors != null) {
for (PostProcessor<T> postProcessor : this.postProcessors) {
builtItem = postProcessor.process(builtItem, context);
}
}
return builtItem;
}
static {
registerPostProcessorType(Key.of("craftengine", "apply_data"), args -> {
List<ItemDataModifier<?>> modifiers = new ArrayList<>();
Map<String, Object> data = ResourceConfigUtils.getAsMap(args.get("data"), "data");
for (Map.Entry<String, Object> 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<PostProcessor.Type<?>>) BuiltInRegistries.RECIPE_POST_PROCESSOR_TYPE)
.register(ResourceKey.create(Registries.RECIPE_POST_PROCESSOR_TYPE.location(), id), type);
}
@FunctionalInterface
public interface PostProcessor<T> {
static <T> PostProcessor<T> fromMap(Map<String, Object> 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<T> processor = (PostProcessor.Type<T>) 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<T> process(Item<T> item, ItemBuildContext context);
interface Type<T> {
PostProcessor<T> create(Map<String, Object> args);
}
}
public static class ApplyItemDataProcessor<T> implements PostProcessor<T> {
private final ItemDataModifier<T>[] modifiers;
public ApplyItemDataProcessor(ItemDataModifier<T>[] modifiers) {
this.modifiers = modifiers;
}
@Override
public Item<T> process(Item<T> item, ItemBuildContext context) {
for (ItemDataModifier<T> modifier : this.modifiers) {
item.apply(modifier, context);
}
return item;
}
}
}

View File

@@ -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<T> implements PostProcessor<T> {
private final ItemDataModifier<T>[] modifiers;
public ApplyItemDataPostProcessor(ItemDataModifier<T>[] modifiers) {
this.modifiers = modifiers;
}
@Override
public Item<T> process(Item<T> item, ItemBuildContext context) {
for (ItemDataModifier<T> modifier : this.modifiers) {
item.apply(modifier, context);
}
return item;
}
}

View File

@@ -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<T>(BuildableItem<T> item, int count, PostProcessor<T>[] postProcessors) {
public T buildItemStack(ItemBuildContext context) {
return buildItem(context).getItem();
}
public Item<T> buildItem(ItemBuildContext context) {
Item<T> builtItem = this.item.buildItem(context, this.count);
if (this.postProcessors != null) {
for (PostProcessor<T> postProcessor : this.postProcessors) {
builtItem = postProcessor.process(builtItem, context);
}
}
return builtItem;
}
}

View File

@@ -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<T> {
Item<T> process(Item<T> item, ItemBuildContext context);
interface Type<T> {
PostProcessor<T> create(Map<String, Object> args);
}
}

View File

@@ -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<ItemDataModifier<?>> modifiers = new ArrayList<>();
Map<String, Object> data = ResourceConfigUtils.getAsMap(args.get("data"), "data");
for (Map.Entry<String, Object> 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 <T> PostProcessor<T> fromMap(Map<String, Object> 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<T> processor = (PostProcessor.Type<T>) 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<PostProcessor.Type<?>>) BuiltInRegistries.RECIPE_POST_PROCESSOR_TYPE)
.register(ResourceKey.create(Registries.RECIPE_POST_PROCESSOR_TYPE.location(), id), type);
}
}

View File

@@ -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<SlotDisplay.Type> SLOT_DISPLAY_TYPE = createConstantBoundRegistry(Registries.SLOT_DISPLAY_TYPE);
public static final Registry<RecipeDisplay.Type> RECIPE_DISPLAY_TYPE = createConstantBoundRegistry(Registries.RECIPE_DISPLAY_TYPE);
public static final Registry<LegacyRecipe.Type> LEGACY_RECIPE_TYPE = createConstantBoundRegistry(Registries.LEGACY_RECIPE_TYPE);
public static final Registry<SimpleRecipeResult.ApplyItemDataProcessor.Type<?>> RECIPE_POST_PROCESSOR_TYPE = createConstantBoundRegistry(Registries.RECIPE_POST_PROCESSOR_TYPE);
public static final Registry<PostProcessor.Type<?>> RECIPE_POST_PROCESSOR_TYPE = createConstantBoundRegistry(Registries.RECIPE_POST_PROCESSOR_TYPE);
private static <T> Registry<T> createConstantBoundRegistry(ResourceKey<? extends Registry<T>> key) {
return new ConstantBoundRegistry<>(key);

View File

@@ -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<Registry<SlotDisplay.Type>> SLOT_DISPLAY_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("slot_display_type"));
public static final ResourceKey<Registry<RecipeDisplay.Type>> RECIPE_DISPLAY_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("recipe_display_type"));
public static final ResourceKey<Registry<LegacyRecipe.Type>> LEGACY_RECIPE_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("legacy_recipe_type"));
public static final ResourceKey<Registry<SimpleRecipeResult.ApplyItemDataProcessor.Type<?>>> RECIPE_POST_PROCESSOR_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("recipe_post_processor_type"));
public static final ResourceKey<Registry<PostProcessor.Type<?>>> RECIPE_POST_PROCESSOR_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("recipe_post_processor_type"));
}