From 3eafb8aae4b922208f93af725e2d46d791645156 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Tue, 30 Dec 2025 02:05:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dnpc=E8=B8=A9=E5=8E=8B?= =?UTF-8?q?=E5=8A=9B=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../item/listener/DebugStickListener.java | 2 ++ .../item/recipe/AbstractRecipeSerializer.java | 4 ++-- .../result/ApplyItemDataPostProcessor.java | 19 +++++++++---------- .../recipe/result/CustomRecipeResult.java | 4 ++-- .../item/recipe/result/PostProcessor.java | 4 ++-- .../recipe/result/PostProcessorFactory.java | 4 ++-- .../item/recipe/result/PostProcessorType.java | 2 +- .../item/recipe/result/PostProcessors.java | 9 ++++----- .../core/registry/BuiltInRegistries.java | 7 +++++-- .../craftengine/core/registry/Registries.java | 6 ++++-- 10 files changed, 33 insertions(+), 28 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/listener/DebugStickListener.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/listener/DebugStickListener.java index e9dbcc5bb..6fe60938c 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/listener/DebugStickListener.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/listener/DebugStickListener.java @@ -40,10 +40,12 @@ public class DebugStickListener implements Listener { @EventHandler(ignoreCancelled = true) public void onUseDebugStick(PlayerInteractEvent event) { + if (event.getAction() != Action.RIGHT_CLICK_BLOCK && event.getAction() != Action.LEFT_CLICK_BLOCK) return; Block clickedBlock = event.getClickedBlock(); if (clickedBlock == null) return; Player bukkitPlayer = event.getPlayer(); BukkitServerPlayer player = BukkitAdaptors.adapt(bukkitPlayer); + if (player == null) return; Item itemInHand = player.getItemInHand(event.getHand() == EquipmentSlot.HAND ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND); if (!BukkitItemUtils.isDebugStick(itemInHand)) return; if (!(player.canInstabuild() && player.hasPermission("minecraft.debugstick")) && !player.hasPermission("minecraft.debugstick.always")) { 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 9b931131c..ac8c6b9b5 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 @@ -98,7 +98,7 @@ public abstract class AbstractRecipeSerializer> implement if (resultItem.isEmpty()) { throw new LocalizedResourceConfigException("warning.config.recipe.invalid_result", id); } - List> processors = ResourceConfigUtils.parseConfigAsList(resultMap.get("post-processors"), PostProcessors::fromMap); + List processors = ResourceConfigUtils.parseConfigAsList(resultMap.get("post-processors"), PostProcessors::fromMap); return new CustomRecipeResult<>( resultItem, count, @@ -119,7 +119,7 @@ public abstract class AbstractRecipeSerializer> implement if (resultItem.isEmpty()) { throw new LocalizedResourceConfigException("warning.config.recipe.invalid_result", id); } - List> processors = ResourceConfigUtils.parseConfigAsList(resultMap.get("post-processors"), PostProcessors::fromMap); + List processors = ResourceConfigUtils.parseConfigAsList(resultMap.get("post-processors"), PostProcessors::fromMap); return new CustomRecipeResult<>( resultItem, count, 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 index 39c9354b8..6df5d9b99 100644 --- 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 @@ -10,31 +10,30 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -public class ApplyItemDataPostProcessor implements PostProcessor { - public static final PostProcessorFactory FACTORY = new Factory<>(); - private final ItemProcessor[] modifiers; +public class ApplyItemDataPostProcessor implements PostProcessor { + public static final PostProcessorFactory FACTORY = new Factory(); + private final ItemProcessor[] modifiers; - public ApplyItemDataPostProcessor(ItemProcessor[] modifiers) { + public ApplyItemDataPostProcessor(ItemProcessor[] modifiers) { this.modifiers = modifiers; } @Override - public Item process(Item item, ItemBuildContext context) { - for (ItemProcessor modifier : this.modifiers) { + public Item process(Item item, ItemBuildContext context) { + for (ItemProcessor modifier : this.modifiers) { item.apply(modifier, context); } return item; } - private static class Factory implements PostProcessorFactory { + private static class Factory implements PostProcessorFactory { - @SuppressWarnings("unchecked") @Override - public PostProcessor create(Map args) { + public ApplyItemDataPostProcessor create(Map args) { List> modifiers = new ArrayList<>(); Map data = ResourceConfigUtils.getAsMap(args.get("data"), "data"); ItemProcessors.applyDataModifiers(data, modifiers::add); - return new ApplyItemDataPostProcessor<>(modifiers.toArray(new ItemProcessor[0])); + return new ApplyItemDataPostProcessor(modifiers.toArray(new ItemProcessor[0])); } } } \ 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 index 26e21d102..abd24d4e5 100644 --- 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 @@ -4,7 +4,7 @@ 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 record CustomRecipeResult(BuildableItem item, int count, PostProcessor[] postProcessors) { public T buildItemStack(ItemBuildContext context) { return buildItem(context).getItem(); @@ -13,7 +13,7 @@ public record CustomRecipeResult(BuildableItem item, int count, PostProces public Item buildItem(ItemBuildContext context) { Item builtItem = this.item.buildItem(context, this.count); if (this.postProcessors != null) { - for (PostProcessor postProcessor : this.postProcessors) { + for (PostProcessor postProcessor : this.postProcessors) { builtItem = postProcessor.process(builtItem, context); } } 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 index 5b7a85f5b..fe8f8d60a 100644 --- 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 @@ -3,7 +3,7 @@ package net.momirealms.craftengine.core.item.recipe.result; import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.ItemBuildContext; -public interface PostProcessor { +public interface PostProcessor { - Item process(Item item, ItemBuildContext context); + Item process(Item item, ItemBuildContext context); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/PostProcessorFactory.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/PostProcessorFactory.java index b2d126a7a..b389dad83 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/PostProcessorFactory.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/PostProcessorFactory.java @@ -2,7 +2,7 @@ package net.momirealms.craftengine.core.item.recipe.result; import java.util.Map; -public interface PostProcessorFactory { +public interface PostProcessorFactory { - PostProcessor create(Map args); + T create(Map args); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/PostProcessorType.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/PostProcessorType.java index d55a65e41..ea240003e 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/PostProcessorType.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/result/PostProcessorType.java @@ -2,5 +2,5 @@ package net.momirealms.craftengine.core.item.recipe.result; import net.momirealms.craftengine.core.util.Key; -public record PostProcessorType(Key id, PostProcessorFactory factory) { +public record PostProcessorType(Key id, PostProcessorFactory factory) { } 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 index 491ecce7d..49697cd56 100644 --- 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 @@ -11,22 +11,21 @@ import net.momirealms.craftengine.core.util.ResourceKey; import java.util.Map; public final class PostProcessors { - public static final PostProcessorType APPLY_DATA = register(Key.ce("apply_data"), ApplyItemDataPostProcessor.FACTORY); + public static final PostProcessorType APPLY_DATA = register(Key.ce("apply_data"), ApplyItemDataPostProcessor.FACTORY); private PostProcessors() {} - @SuppressWarnings("unchecked") - public static PostProcessor fromMap(Map map) { + 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); - PostProcessorType processorType = (PostProcessorType) BuiltInRegistries.RECIPE_POST_PROCESSOR_TYPE.getValue(key); + PostProcessorType processorType = BuiltInRegistries.RECIPE_POST_PROCESSOR_TYPE.getValue(key); if (processorType == null) { throw new LocalizedResourceConfigException("warning.config.recipe.result.post_processor.invalid_type", type); } return processorType.factory().create(map); } - public static PostProcessorType register(Key id, PostProcessorFactory factory) { + public static PostProcessorType register(Key id, PostProcessorFactory factory) { PostProcessorType type = new PostProcessorType<>(id, factory); ((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 91b37d1d9..d9fa2096e 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 @@ -27,8 +27,11 @@ import net.momirealms.craftengine.core.item.recipe.network.modern.display.Recipe import net.momirealms.craftengine.core.item.recipe.network.modern.display.slot.SlotDisplay; import net.momirealms.craftengine.core.item.recipe.remainder.CraftRemainder; import net.momirealms.craftengine.core.item.recipe.remainder.CraftRemainderType; +import net.momirealms.craftengine.core.item.recipe.result.PostProcessor; import net.momirealms.craftengine.core.item.recipe.result.PostProcessorType; +import net.momirealms.craftengine.core.item.updater.ItemUpdater; import net.momirealms.craftengine.core.item.updater.ItemUpdaterType; +import net.momirealms.craftengine.core.item.updater.ItemUpdaters; import net.momirealms.craftengine.core.loot.entry.LootEntryContainerType; import net.momirealms.craftengine.core.loot.function.LootFunctionType; import net.momirealms.craftengine.core.loot.function.formula.Formula; @@ -92,8 +95,8 @@ public final class BuiltInRegistries { public static final Registry> SLOT_DISPLAY_TYPE = createConstantBoundRegistry(Registries.SLOT_DISPLAY_TYPE, 16); public static final Registry> RECIPE_DISPLAY_TYPE = createConstantBoundRegistry(Registries.RECIPE_DISPLAY_TYPE, 16); public static final Registry> LEGACY_RECIPE_TYPE = createConstantBoundRegistry(Registries.LEGACY_RECIPE_TYPE, 16); - public static final Registry> RECIPE_POST_PROCESSOR_TYPE = createConstantBoundRegistry(Registries.RECIPE_POST_PROCESSOR_TYPE, 16); - public static final Registry> ITEM_UPDATER_TYPE = createConstantBoundRegistry(Registries.ITEM_UPDATER_TYPE, 16); + public static final Registry> RECIPE_POST_PROCESSOR_TYPE = createConstantBoundRegistry(Registries.RECIPE_POST_PROCESSOR_TYPE, 16); + public static final Registry> ITEM_UPDATER_TYPE = createConstantBoundRegistry(Registries.ITEM_UPDATER_TYPE, 16); public static final Registry> MOD_PACKET = createConstantBoundRegistry(Registries.MOD_PACKET, 16); public static final Registry> BLOCK_ENTITY_TYPE = createConstantBoundRegistry(Registries.BLOCK_ENTITY_TYPE, 64); public static final Registry> BLOCK_ENTITY_ELEMENT_TYPE = createConstantBoundRegistry(Registries.BLOCK_ENTITY_ELEMENT_TYPE, 16); 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 1c792c46f..e4b565f19 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 @@ -27,7 +27,9 @@ import net.momirealms.craftengine.core.item.recipe.network.modern.display.Recipe import net.momirealms.craftengine.core.item.recipe.network.modern.display.slot.SlotDisplay; import net.momirealms.craftengine.core.item.recipe.remainder.CraftRemainder; import net.momirealms.craftengine.core.item.recipe.remainder.CraftRemainderType; +import net.momirealms.craftengine.core.item.recipe.result.PostProcessor; import net.momirealms.craftengine.core.item.recipe.result.PostProcessorType; +import net.momirealms.craftengine.core.item.updater.ItemUpdater; import net.momirealms.craftengine.core.item.updater.ItemUpdaterType; import net.momirealms.craftengine.core.loot.entry.LootEntryContainerType; import net.momirealms.craftengine.core.loot.function.LootFunctionType; @@ -96,8 +98,8 @@ public final 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>> ITEM_UPDATER_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("item_updater_type")); + public static final ResourceKey>> RECIPE_POST_PROCESSOR_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("recipe_post_processor_type")); + public static final ResourceKey>> ITEM_UPDATER_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("item_updater_type")); public static final ResourceKey>> MOD_PACKET = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("mod_packet_type")); public static final ResourceKey>> BLOCK_ENTITY_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("block_entity_type")); public static final ResourceKey>> BLOCK_ENTITY_ELEMENT_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("block_entity_element_type"));