diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java index ccc824bd9..87288628b 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java @@ -48,6 +48,7 @@ public class BukkitCommandManager extends AbstractCommandManager new DebugSpawnFurnitureCommand(this, plugin), new DebugTargetBlockCommand(this, plugin), new DebugIsSectionInjectedCommand(this, plugin), + new DebugMigrateTemplatesCommand(this, plugin), new DebugEntityId2UUIDCommand(this, plugin), new TotemAnimationCommand(this, plugin), new EnableResourceCommand(this, plugin), diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugMigrateTemplatesCommand.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugMigrateTemplatesCommand.java new file mode 100644 index 000000000..227b0f19f --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugMigrateTemplatesCommand.java @@ -0,0 +1,60 @@ +package net.momirealms.craftengine.bukkit.plugin.command.feature; + +import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine; +import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature; +import net.momirealms.craftengine.core.pack.Pack; +import net.momirealms.craftengine.core.plugin.CraftEngine; +import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager; +import net.momirealms.craftengine.core.util.FileUtils; +import org.bukkit.command.CommandSender; +import org.incendo.cloud.Command; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class DebugMigrateTemplatesCommand extends BukkitCommandFeature { + private static final Pattern PATTERN = Pattern.compile("(? commandManager, CraftEngine plugin) { + super(commandManager, plugin); + } + + @Override + public Command.Builder assembleCommand(org.incendo.cloud.CommandManager manager, Command.Builder builder) { + return builder + .handler(context -> { + for (Pack pack : BukkitCraftEngine.instance().packManager().loadedPacks()) { + for (Path file : FileUtils.getYmlConfigsDeeply(pack.configurationFolder())) { + try { + Files.writeString(file, replacePlaceholders(Files.readString(file))); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + context.sender().sendMessage("Done"); + }); + } + + @Override + public String getFeatureID() { + return "debug_migrate_templates"; + } + + private static String replacePlaceholders(String input) { + if (input == null) { + return null; + } + Matcher matcher = PATTERN.matcher(input); + StringBuilder sb = new StringBuilder(); + while (matcher.find()) { + // 将 {xxx} 替换为 ${xxx} + matcher.appendReplacement(sb, "\\${" + matcher.group(1) + "}"); + } + matcher.appendTail(sb); + return sb.toString(); + } +} \ No newline at end of file diff --git a/common-files/src/main/resources/commands.yml b/common-files/src/main/resources/commands.yml index d7b499210..17aa9c83e 100644 --- a/common-files/src/main/resources/commands.yml +++ b/common-files/src/main/resources/commands.yml @@ -189,6 +189,13 @@ debug_entity_id_to_uuid: - /craftengine debug entity-id-to-uuid - /ce debug entity-id-to-uuid +debug_migrate_templates: + enable: true + permission: ce.command.debug.migrate_templates + usage: + - /craftengine debug migrate-templates + - /ce debug migrate-templates + debug_test: enable: true permission: ce.command.debug.test diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/ItemSettings.java b/core/src/main/java/net/momirealms/craftengine/core/item/ItemSettings.java index e412ea280..3398b7e9f 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/ItemSettings.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/ItemSettings.java @@ -153,6 +153,11 @@ public class ItemSettings { return this; } + public ItemSettings craftRemainder(Key key) { + this.craftRemainder = key; + return this; + } + public ItemSettings canRepair(boolean canRepair) { this.canRepair = canRepair; return this; @@ -246,6 +251,10 @@ public class ItemSettings { if (value == null) settings.consumeReplacement(null); else settings.consumeReplacement(Key.of(value.toString())); })); + registerFactory("craft-remainder", (value -> settings -> { + if (value == null) settings.craftRemainder(null); + else settings.craftRemainder(Key.of(value.toString())); + })); registerFactory("tags", (value -> { List tags = MiscUtils.getAsStringList(value); return settings -> settings.tags(tags.stream().map(Key::of).collect(Collectors.toSet())); @@ -298,9 +307,6 @@ public class ItemSettings { ); return settings -> settings.foodData(data); })); -// registerFactory("craft-remainder", (value -> { -// -// })); } private static void registerFactory(String id, ItemSettings.Modifier.Factory factory) { diff --git a/gradle.properties b/gradle.properties index c65d6830a..1395597ac 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,8 +3,8 @@ org.gradle.jvmargs=-Xmx1G # Project settings # Rule: [major update].[feature update].[bug fix] project_version=0.0.56.6 -config_version=36 -lang_version=15 +config_version=37 +lang_version=16 project_group=net.momirealms latest_supported_version=1.21.5