diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/BukkitRecipeManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/BukkitRecipeManager.java index 7ec945e9c..aa69741ca 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/BukkitRecipeManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/BukkitRecipeManager.java @@ -19,6 +19,7 @@ import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.ItemBuildContext; import net.momirealms.craftengine.core.item.ItemKeys; import net.momirealms.craftengine.core.item.recipe.*; +import net.momirealms.craftengine.core.item.recipe.postprocessor.PostProcessors; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.config.Config; import net.momirealms.craftengine.core.registry.BuiltInRegistries; @@ -28,10 +29,8 @@ import org.bukkit.NamespacedKey; import org.bukkit.event.HandlerList; import org.bukkit.inventory.ItemStack; -import java.io.IOException; import java.io.Reader; import java.lang.reflect.Array; -import java.sql.Ref; import java.util.*; import java.util.function.BiFunction; import java.util.function.Consumer; @@ -288,6 +287,7 @@ public class BukkitRecipeManager extends AbstractRecipeManager { public BukkitRecipeManager(BukkitCraftEngine plugin) { instance = this; + PostProcessors.init(); this.plugin = plugin; this.recipeEventListener = new RecipeEventListener(plugin, this, plugin.itemManager()); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java index 4877f0aa3..c5b48563d 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java @@ -3755,11 +3755,14 @@ public final class CoreReflections { methodHandle$ServerConfigurationPacketListenerImpl$finishCurrentTask = ReflectionUtils.unreflectMethod(method$ServerConfigurationPacketListenerImpl$finishCurrentTask) .asType(MethodType.methodType(void.class, Object.class, Object.class)); + } else { + methodHandle$ServerConfigurationPacketListenerImpl$finishCurrentTask = null; + } + if (VersionHelper.isOrAbove1_20_5()) { methodHandle$ServerCommonPacketListenerImpl$closedSetter = ReflectionUtils.unreflectSetter(field$ServerCommonPacketListenerImpl$closed) .asType(MethodType.methodType(void.class, Object.class, boolean.class)); } else { - methodHandle$ServerConfigurationPacketListenerImpl$finishCurrentTask = null; methodHandle$ServerCommonPacketListenerImpl$closedSetter = null; } } catch (ReflectiveOperationException e) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomRecipeResult.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomRecipeResult.java index aff047c53..0101cb8c9 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomRecipeResult.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomRecipeResult.java @@ -3,21 +3,13 @@ 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 CustomRecipeResult(BuildableItem item, int count, PostProcessor[] postProcessors) { public T buildItemStack(ItemBuildContext context) { @@ -34,24 +26,8 @@ public record CustomRecipeResult(BuildableItem item, int count, PostProces return builtItem; } - static { - registerPostProcessorType(Key.of("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 + @SuppressWarnings("unchecked") public interface PostProcessor { static PostProcessor fromMap(Map map) { @@ -71,20 +47,4 @@ public record CustomRecipeResult(BuildableItem item, int count, PostProces 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/postprocessor/ApplyItemDataProcessor.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/postprocessor/ApplyItemDataProcessor.java new file mode 100644 index 000000000..a0feb356c --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/postprocessor/ApplyItemDataProcessor.java @@ -0,0 +1,46 @@ +package net.momirealms.craftengine.core.item.recipe.postprocessor; + +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.item.recipe.CustomRecipeResult; +import net.momirealms.craftengine.core.registry.BuiltInRegistries; +import net.momirealms.craftengine.core.util.Key; +import net.momirealms.craftengine.core.util.ResourceConfigUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +public class ApplyItemDataProcessor implements CustomRecipeResult.PostProcessor { + public static final Type TYPE = new Type<>(); + 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; + } + + public static class Type implements CustomRecipeResult.PostProcessor.Type { + + @Override + @SuppressWarnings("unchecked") + public CustomRecipeResult.PostProcessor create(Map 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])); + } + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/postprocessor/PostProcessors.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/postprocessor/PostProcessors.java new file mode 100644 index 000000000..d128e1dc0 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/postprocessor/PostProcessors.java @@ -0,0 +1,21 @@ +package net.momirealms.craftengine.core.item.recipe.postprocessor; + +import net.momirealms.craftengine.core.item.recipe.CustomRecipeResult; +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.ResourceKey; + +public class PostProcessors { + public static final Key APPLY_DATA = Key.of("craftengine", "apply_data"); + + public static void init() { + register(APPLY_DATA, ApplyItemDataProcessor.TYPE); + } + + public static void register(Key id, CustomRecipeResult.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 fd0da1023..4f646e4bc 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 @@ -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 e0845e4ff..5457cc615 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 @@ -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")); }