From ca021229a6797788434f5d9d7db27a8eab0336d0 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Mon, 9 Jun 2025 04:25:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=82=E6=95=B0=E9=BB=98=E8=AE=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/plugin/BukkitPlatform.java | 20 ++++++++++++++++ .../reflection/minecraft/MRegistryOps.java | 5 ++++ .../plugin/user/BukkitServerPlayer.java | 12 +++++----- .../src/main/resources/translations/en.yml | 1 + .../src/main/resources/translations/zh_cn.yml | 1 + core/build.gradle.kts | 6 +++-- .../craftengine/core/plugin/Platform.java | 2 ++ .../config/template/TemplateManager.java | 23 +++++++++++++++---- gradle.properties | 6 ++--- 9 files changed, 60 insertions(+), 16 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitPlatform.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitPlatform.java index 2b3647fa1..1d43f760f 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitPlatform.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitPlatform.java @@ -1,12 +1,32 @@ package net.momirealms.craftengine.bukkit.plugin; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.momirealms.craftengine.bukkit.nms.FastNMS; +import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MRegistryOps; +import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.Platform; +import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import org.bukkit.Bukkit; +import java.util.Map; + public class BukkitPlatform implements Platform { @Override public void dispatchCommand(String command) { Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), command); } + + @SuppressWarnings("unchecked") + @Override + public Object nbt2Java(String nbt) { + try { + Object tag = FastNMS.INSTANCE.method$TagParser$parseCompoundFully("{\"root\":" + nbt + "}"); + Map map = (Map) MRegistryOps.NBT.convertTo(MRegistryOps.JAVA, tag); + return map.get("root"); + } catch (CommandSyntaxException e) { + CraftEngine.instance().debug(e::getMessage); + throw new LocalizedResourceConfigException("warning.config.template.argument.default_value.invalid_syntax", e, nbt); + } + } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/MRegistryOps.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/MRegistryOps.java index 9ad05cd9d..6af862ac3 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/MRegistryOps.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/MRegistryOps.java @@ -9,6 +9,7 @@ import net.momirealms.craftengine.bukkit.util.BukkitReflectionUtils; import net.momirealms.craftengine.core.util.ReflectionUtils; import net.momirealms.craftengine.core.util.VersionHelper; import net.momirealms.sparrow.nbt.Tag; +import net.momirealms.sparrow.nbt.codec.LegacyJavaOps; import net.momirealms.sparrow.nbt.codec.LegacyNBTOps; import net.momirealms.sparrow.nbt.codec.NBTOps; @@ -34,8 +35,12 @@ public class MRegistryOps { static { try { if (clazz$JavaOps != null) { + // 1.20.5+ Object javaOps = ReflectionUtils.getDeclaredField(clazz$JavaOps, clazz$JavaOps, 0).get(null); JAVA = (DynamicOps) CoreReflections.method$RegistryOps$create.invoke(null, javaOps, FastNMS.INSTANCE.registryAccess()); + } else if (!VersionHelper.isOrAbove1_20_5()) { + // 1.20.1-1.20.4 + JAVA = (DynamicOps) CoreReflections.method$RegistryOps$create.invoke(null, LegacyJavaOps.INSTANCE, FastNMS.INSTANCE.registryAccess()); } else { JAVA = null; } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java index 824ff6cdb..436b5b6a9 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java @@ -138,17 +138,17 @@ public class BukkitServerPlayer extends Player { @Override public Channel nettyChannel() { - return channel; + return this.channel; } @Override public CraftEngine plugin() { - return plugin; + return this.plugin; } @Override public boolean isMiningBlock() { - return destroyPos != null; + return this.destroyPos != null; } public void setDestroyedState(Object destroyedState) { @@ -221,8 +221,8 @@ public class BukkitServerPlayer extends Player { @Override public boolean updateLastSuccessfulInteractionTick(int tick) { - if (lastSuccessfulInteraction != tick) { - lastSuccessfulInteraction = tick; + if (this.lastSuccessfulInteraction != tick) { + this.lastSuccessfulInteraction = tick; return true; } else { return false; @@ -231,7 +231,7 @@ public class BukkitServerPlayer extends Player { @Override public int lastSuccessfulInteractionTick() { - return lastSuccessfulInteraction; + return this.lastSuccessfulInteraction; } @Override diff --git a/common-files/src/main/resources/translations/en.yml b/common-files/src/main/resources/translations/en.yml index 57c72c316..826d2c3a5 100644 --- a/common-files/src/main/resources/translations/en.yml +++ b/common-files/src/main/resources/translations/en.yml @@ -135,6 +135,7 @@ warning.config.template.duplicate: "Issue found in file - Duplic warning.config.template.invalid: "Issue found in file - The config '' is using an invalid template ''." warning.config.template.argument.self_increase_int.invalid_range: "Issue found in file - The template '' is using a 'from' '' larger than 'to' '' in 'self_increase_int' argument." warning.config.template.argument.list.invalid_type: "Issue found in file - The template '' is using a 'list' argument which expects a 'List' as argument while the input argument is a(n) ''." +warning.config.template.argument.default_value.invalid_syntax: "Issue found in file - The template '' is using an invalid default value '' for argument ''." warning.config.vanilla_loot.missing_type: "Issue found in file - The vanilla loot '' is missing the required 'type' argument." warning.config.vanilla_loot.invalid_type: "Issue found in file - The vanilla loot '' is using an invalid type ''. Allowed types: []." warning.config.vanilla_loot.block.invalid_target: "Issue found in file - Invalid block target '' in vanilla loot ''." diff --git a/common-files/src/main/resources/translations/zh_cn.yml b/common-files/src/main/resources/translations/zh_cn.yml index 89f955ba7..db490963c 100644 --- a/common-files/src/main/resources/translations/zh_cn.yml +++ b/common-files/src/main/resources/translations/zh_cn.yml @@ -135,6 +135,7 @@ warning.config.template.duplicate: "在文件 发现问题 - 重 warning.config.template.argument.self_increase_int.invalid_range: "在文件 发现问题 - 模板 '' 在 'self_increase_int' 参数中使用了一个起始值 '' 大于终止值 ''" warning.config.template.invalid: "在文件 发现问题 - 配置 '' 使用了无效的模板 ''." warning.config.template.argument.list.invalid_type: "在文件 发现问题 - 模板 '' 的 'list' 参数需要列表类型 但输入参数类型为 ''" +warning.config.template.argument.default_value.invalid_syntax: "在文件 发现问题 - 模板 '' 在参数 '' 中使用了无效的默认值 ''." warning.config.vanilla_loot.missing_type: "在文件 发现问题 - 原版战利品 '' 缺少必需的 'type' 参数" warning.config.vanilla_loot.invalid_type: "在文件 发现问题 - 原版战利品 '' 使用了无效类型 '' 允许的类型: []" warning.config.vanilla_loot.block.invalid_target: "在文件 发现问题 - 原版战利品 '' 中存在无效的方块目标 ''" diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 9d10ade1b..18f604a63 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -20,6 +20,8 @@ dependencies { implementation("net.momirealms:sparrow-nbt-adventure:${rootProject.properties["sparrow_nbt_version"]}") implementation("net.momirealms:sparrow-nbt-codec:${rootProject.properties["sparrow_nbt_version"]}") implementation("net.momirealms:sparrow-nbt-legacy-codec:${rootProject.properties["sparrow_nbt_version"]}") + // S3 + implementation("net.momirealms:craft-engine-s3:0.1") // Util compileOnly("net.momirealms:sparrow-util:${rootProject.properties["sparrow_util_version"]}") // Adventure @@ -60,8 +62,8 @@ dependencies { compileOnly("com.ezylang:EvalEx:${rootProject.properties["evalex_version"]}") // Jimfs compileOnly("com.google.jimfs:jimfs:${rootProject.properties["jimfs_version"]}") - // S3 - implementation("net.momirealms:craft-engine-s3:0.1") + // Brigadier + compileOnly("com.mojang:brigadier:${rootProject.properties["mojang_brigadier_version"]}") } java { diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/Platform.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/Platform.java index 3c48cfb5e..09b32b9a5 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/Platform.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/Platform.java @@ -3,4 +3,6 @@ package net.momirealms.craftengine.core.plugin; public interface Platform { void dispatchCommand(String command); + + Object nbt2Java(String nbt); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/config/template/TemplateManager.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/config/template/TemplateManager.java index fa21e3e14..d04a4733b 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/config/template/TemplateManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/config/template/TemplateManager.java @@ -1,7 +1,9 @@ package net.momirealms.craftengine.core.plugin.config.template; +import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.Manageable; import net.momirealms.craftengine.core.plugin.config.ConfigParser; +import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.util.Key; import java.util.ArrayList; @@ -62,10 +64,23 @@ public interface TemplateManager extends Manageable { final class Placeholder implements ArgumentString { private final String placeholder; private final String rawText; + private final Object defaultValue; public Placeholder(String placeholder) { - this.placeholder = placeholder; - this.rawText = "{" + this.placeholder + "}"; + this.rawText = "{" + placeholder + "}"; + int first = placeholder.indexOf(':'); + if (first == -1) { + this.placeholder = placeholder; + this.defaultValue = this.rawText; + } else { + this.placeholder = placeholder.substring(0, first); + try { + this.defaultValue = CraftEngine.instance().platform().nbt2Java(placeholder.substring(first + 1)); + } catch (LocalizedResourceConfigException e) { + e.appendTailArgument(this.placeholder); + throw e; + } + } } public static Placeholder placeholder(String placeholder) { @@ -78,7 +93,7 @@ public interface TemplateManager extends Manageable { if (replacement != null) { return replacement.get(arguments); } - return rawValue(); + return this.defaultValue; } @Override @@ -210,8 +225,6 @@ public interface TemplateManager extends Manageable { temp_i--; } if (input.charAt(i) == '{' && backslashes % 2 == 0) { - // 发现占位符起点 - int placeholderStartIndex = i; // 追加从上一个位置到当前占位符之前的文本 if (lastAppendPosition < i) { arguments.add(Literal.literal(input.substring(lastAppendPosition, i))); diff --git a/gradle.properties b/gradle.properties index 2d68a579a..2b2f692e9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx1G # Project settings # Rule: [major update].[feature update].[bug fix] -project_version=0.0.56.3 +project_version=0.0.56.4 config_version=35 lang_version=15 project_group=net.momirealms @@ -40,7 +40,7 @@ zstd_version=1.5.7-2 commons_io_version=2.18.0 commons_imaging_version=1.0.0-alpha6 commons_lang3_version=3.17.0 -sparrow_nbt_version=0.9.0 +sparrow_nbt_version=0.9.1 sparrow_util_version=0.47 fastutil_version=8.5.15 netty_version=4.1.121.Final @@ -51,7 +51,7 @@ byte_buddy_version=1.17.5 ahocorasick_version=0.6.3 snake_yaml_version=2.4 anti_grief_version=0.17 -nms_helper_version=0.67.1 +nms_helper_version=0.67.2 evalex_version=3.5.0 reactive_streams_version=1.0.4 amazon_awssdk_version=2.31.23