From 8699a196d60cc015168a829f78e81c2171c6cc86 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Mon, 21 Apr 2025 17:11:21 +0800 Subject: [PATCH] =?UTF-8?q?feat(core):=20=E6=B7=BB=E5=8A=A0=E8=BF=9B?= =?UTF-8?q?=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/translations/en.yml | 3 +- .../src/main/resources/translations/zh_cn.yml | 3 +- .../advancement/BukkitAdvancementManager.java | 58 +++++++++++++++++++ .../bukkit/plugin/BukkitCraftEngine.java | 7 +++ .../AbstractAdvancementManager.java | 11 ++++ .../core/advancement/AdvancementManager.java | 9 +++ .../core/pack/LoadingSequence.java | 1 + .../craftengine/core/plugin/CraftEngine.java | 13 +++++ .../craftengine/core/plugin/Plugin.java | 3 + .../momirealms/craftengine/core/util/Key.java | 4 ++ gradle.properties | 4 +- 11 files changed, 112 insertions(+), 4 deletions(-) create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/advancement/BukkitAdvancementManager.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/advancement/AbstractAdvancementManager.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/advancement/AdvancementManager.java diff --git a/bukkit/loader/src/main/resources/translations/en.yml b/bukkit/loader/src/main/resources/translations/en.yml index ddef3454c..8091239fc 100644 --- a/bukkit/loader/src/main/resources/translations/en.yml +++ b/bukkit/loader/src/main/resources/translations/en.yml @@ -114,4 +114,5 @@ warning.config.model.generation.texture.invalid_resource_location: "Issu warning.config.model.generation.parent.invalid_resource_location: "Issue found in file - The config '' has a parent argument [] that contains legal characters. Please read https://minecraft.wiki/w/Resource_location#Legal_characters" warning.config.emoji.lack_keywords: "Issue found in file - The emoji '' is missing the required 'keywords' argument." warning.config.emoji.duplicated: "Issue found in file - Duplicated emoji ''." -warning.config.emoji.invalid_image: "Issue found in file - The emoji '' has an invalid 'image' argument ''." \ No newline at end of file +warning.config.emoji.invalid_image: "Issue found in file - The emoji '' has an invalid 'image' argument ''." +warning.config.advancement.duplicated: "Issue found in file - Duplicated advancement ''." \ No newline at end of file diff --git a/bukkit/loader/src/main/resources/translations/zh_cn.yml b/bukkit/loader/src/main/resources/translations/zh_cn.yml index 21921cb41..e3383afee 100644 --- a/bukkit/loader/src/main/resources/translations/zh_cn.yml +++ b/bukkit/loader/src/main/resources/translations/zh_cn.yml @@ -114,4 +114,5 @@ warning.config.model.generation.texture.invalid_resource_location: "在 warning.config.model.generation.parent.invalid_resource_location: "在文件 中发现问题 - 配置项 '' 的父模型参数 [] 包含非法字符,请参考资源路径规范:https://zh.minecraft.wiki/w/%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4ID#%E5%90%88%E6%B3%95%E5%AD%97%E7%AC%A6" warning.config.emoji.lack_keywords: "在文件 中发现问题 - 表情 '' 缺少必要的 'keywords' 配置" warning.config.emoji.duplicated: "在文件 中发现问题 - 表情 '' 重复定义" -warning.config.emoji.invalid_image: "在文件 中发现问题 - 表情 '' 使用了无效的 'image' 图片参数 ''." \ No newline at end of file +warning.config.emoji.invalid_image: "在文件 中发现问题 - 表情 '' 使用了无效的 'image' 图片参数 ''." +warning.config.advancement.duplicated: "在文件 中发现问题 - 进度 '' 重复定义" \ No newline at end of file diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/advancement/BukkitAdvancementManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/advancement/BukkitAdvancementManager.java new file mode 100644 index 000000000..92026d457 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/advancement/BukkitAdvancementManager.java @@ -0,0 +1,58 @@ +package net.momirealms.craftengine.bukkit.advancement; + +import com.google.gson.JsonElement; +import net.momirealms.craftengine.bukkit.nms.FastNMS; +import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine; +import net.momirealms.craftengine.core.advancement.AbstractAdvancementManager; +import net.momirealms.craftengine.core.pack.LoadingSequence; +import net.momirealms.craftengine.core.pack.Pack; +import net.momirealms.craftengine.core.plugin.config.ConfigSectionParser; +import net.momirealms.craftengine.core.plugin.locale.TranslationManager; +import net.momirealms.craftengine.core.util.GsonHelper; +import net.momirealms.craftengine.core.util.Key; + +import java.nio.file.Path; +import java.util.HashMap; +import java.util.Map; + +public class BukkitAdvancementManager extends AbstractAdvancementManager { + private final BukkitCraftEngine plugin; + private final AdvancementParser advancementParser; + private final Map advancements = new HashMap<>(); + + public BukkitAdvancementManager(BukkitCraftEngine plugin) { + super(plugin); + this.plugin = plugin; + this.advancementParser = new AdvancementParser(); + } + + @Override + public ConfigSectionParser parser() { + return this.advancementParser; + } + + public class AdvancementParser implements ConfigSectionParser { + public static final String[] CONFIG_SECTION_NAME = new String[] {"advancements", "advancement"}; + + @Override + public String[] sectionId() { + return CONFIG_SECTION_NAME; + } + + @Override + public int loadingSequence() { + return LoadingSequence.ADVANCEMENT; + } + + @Override + public void parseSection(Pack pack, Path path, Key id, Map section) { + if (advancements.containsKey(id)) { + TranslationManager.instance().log("warning.config.advancement.duplicated", path.toString(), id.toString()); + return; + } + JsonElement jsonTree = GsonHelper.get().toJsonTree(section); + FastNMS.INSTANCE.registerAdvancement(id.decompose(), jsonTree); + advancements.put(id, jsonTree); + } + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java index 891850e23..6c8d8ff1b 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java @@ -1,6 +1,7 @@ package net.momirealms.craftengine.bukkit.plugin; import net.momirealms.antigrieflib.AntiGriefLib; +import net.momirealms.craftengine.bukkit.advancement.BukkitAdvancementManager; import net.momirealms.craftengine.bukkit.api.event.CraftEngineReloadEvent; import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; import net.momirealms.craftengine.bukkit.block.behavior.BukkitBlockBehaviors; @@ -156,6 +157,7 @@ public class BukkitCraftEngine extends CraftEngine { super.soundManager = new BukkitSoundManager(this); super.vanillaLootManager = new BukkitVanillaLootManager(this); super.fontManager = new BukkitFontManager(this); + super.advancementManager = new BukkitAdvancementManager(this); super.onPluginEnable(); // compatibility // register expansion @@ -245,6 +247,11 @@ public class BukkitCraftEngine extends CraftEngine { return (BukkitBlockManager) blockManager; } + @Override + public BukkitAdvancementManager advancementManager() { + return (BukkitAdvancementManager) advancementManager; + } + @Override public BukkitFurnitureManager furnitureManager() { return (BukkitFurnitureManager) furnitureManager; diff --git a/core/src/main/java/net/momirealms/craftengine/core/advancement/AbstractAdvancementManager.java b/core/src/main/java/net/momirealms/craftengine/core/advancement/AbstractAdvancementManager.java new file mode 100644 index 000000000..8af17d774 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/advancement/AbstractAdvancementManager.java @@ -0,0 +1,11 @@ +package net.momirealms.craftengine.core.advancement; + +import net.momirealms.craftengine.core.plugin.CraftEngine; + +public abstract class AbstractAdvancementManager implements AdvancementManager { + private final CraftEngine plugin; + + public AbstractAdvancementManager(CraftEngine plugin) { + this.plugin = plugin; + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/advancement/AdvancementManager.java b/core/src/main/java/net/momirealms/craftengine/core/advancement/AdvancementManager.java new file mode 100644 index 000000000..0d2b8a2b0 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/advancement/AdvancementManager.java @@ -0,0 +1,9 @@ +package net.momirealms.craftengine.core.advancement; + +import net.momirealms.craftengine.core.plugin.Manageable; +import net.momirealms.craftengine.core.plugin.config.ConfigSectionParser; + +public interface AdvancementManager extends Manageable { + + ConfigSectionParser parser(); +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/LoadingSequence.java b/core/src/main/java/net/momirealms/craftengine/core/pack/LoadingSequence.java index 110a1db86..104508c8c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/LoadingSequence.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/LoadingSequence.java @@ -14,4 +14,5 @@ public class LoadingSequence { public static final int JUKEBOX_SONG = 100; public static final int VANILLA_LOOTS = 110; public static final int EMOJI = 120; + public static final int ADVANCEMENT = 130; } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java index e7de1ecf4..0a2fe02bc 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java @@ -1,5 +1,6 @@ package net.momirealms.craftengine.core.plugin; +import net.momirealms.craftengine.core.advancement.AdvancementManager; import net.momirealms.craftengine.core.block.BlockManager; import net.momirealms.craftengine.core.entity.furniture.FurnitureManager; import net.momirealms.craftengine.core.font.FontManager; @@ -66,6 +67,7 @@ public abstract class CraftEngine implements Plugin { protected GuiManager guiManager; protected SoundManager soundManager; protected VanillaLootManager vanillaLootManager; + protected AdvancementManager advancementManager; private final Consumer reloadEventDispatcher; private boolean isReloading; @@ -142,6 +144,7 @@ public abstract class CraftEngine implements Plugin { this.vanillaLootManager.reload(); this.guiManager.reload(); this.packManager.reload(); + this.advancementManager.reload(); if (reloadRecipe) { this.recipeManager.reload(); } @@ -161,6 +164,7 @@ public abstract class CraftEngine implements Plugin { this.itemBrowserManager.delayedLoad(); // collect illegal characters from minecraft:default font this.fontManager.delayedLoad(); + this.advancementManager.delayedLoad(); if (reloadRecipe) { // convert data pack recipes this.recipeManager.delayedLoad(); @@ -210,6 +214,7 @@ public abstract class CraftEngine implements Plugin { this.packManager.delayedInit(); this.fontManager.delayedInit(); this.vanillaLootManager.delayedInit(); + this.advancementManager.delayedInit(); // reload the plugin try { this.reloadPlugin(Runnable::run, Runnable::run, true); @@ -228,6 +233,7 @@ public abstract class CraftEngine implements Plugin { public void onPluginDisable() { if (this.networkManager != null) this.networkManager.disable(); if (this.fontManager != null) this.fontManager.disable(); + if (this.advancementManager != null) this.advancementManager.disable(); if (this.packManager != null) this.packManager.disable(); if (this.itemManager != null) this.itemManager.disable(); if (this.blockManager != null) this.blockManager.disable(); @@ -268,6 +274,8 @@ public abstract class CraftEngine implements Plugin { this.packManager.registerConfigSectionParsers(this.soundManager.parsers()); // register vanilla loot parser this.packManager.registerConfigSectionParser(this.vanillaLootManager.parser()); + // register advancement parser + this.packManager.registerConfigSectionParser(this.advancementManager.parser()); } protected abstract void platformDelayedEnable(); @@ -391,6 +399,11 @@ public abstract class CraftEngine implements Plugin { return fontManager; } + @Override + public AdvancementManager advancementManager() { + return advancementManager; + } + @Override public TranslationManager translationManager() { return translationManager; diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/Plugin.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/Plugin.java index d9b766a7f..aa0fb2508 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/Plugin.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/Plugin.java @@ -1,5 +1,6 @@ package net.momirealms.craftengine.core.plugin; +import net.momirealms.craftengine.core.advancement.AdvancementManager; import net.momirealms.craftengine.core.block.BlockManager; import net.momirealms.craftengine.core.entity.furniture.FurnitureManager; import net.momirealms.craftengine.core.entity.player.Player; @@ -61,6 +62,8 @@ public interface Plugin { FontManager fontManager(); + AdvancementManager advancementManager(); + Config config(); TranslationManager translationManager(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/Key.java b/core/src/main/java/net/momirealms/craftengine/core/util/Key.java index 63acc24e4..bd0a211bc 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/Key.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/Key.java @@ -28,6 +28,10 @@ public record Key(String namespace, String value) { return of(decompose(namespacedId, "minecraft")); } + public String[] decompose() { + return new String[] { namespace, value }; + } + @Override public int hashCode() { return toString().hashCode(); diff --git a/gradle.properties b/gradle.properties index 70408b833..68485818a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.jvmargs=-Xmx1G # Rule: [major update].[feature update].[bug fix] project_version=0.0.49-beta.5 config_version=29 -lang_version=6 +lang_version=7 project_group=net.momirealms latest_supported_version=1.21.5 latest_minecraft_version=1.21.5 @@ -51,7 +51,7 @@ byte_buddy_version=1.17.5 ahocorasick_version=0.6.3 snake_yaml_version=2.4 anti_grief_version=0.15 -nms_helper_version=0.60.5 +nms_helper_version=0.60.7 reactive_streams_version=1.0.4 amazon_awssdk_version=2.31.23 amazon_awssdk_eventstream_version=1.0.1