diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/CreateResourceCommand.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/CreateResourceCommand.java index 2ffeb4559..c1d968bb4 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/CreateResourceCommand.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/CreateResourceCommand.java @@ -6,16 +6,23 @@ import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature; import net.momirealms.craftengine.core.pack.ResourceLocation; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager; +import net.momirealms.craftengine.core.plugin.config.StringKeyConstructor; import net.momirealms.craftengine.core.plugin.locale.MessageConstants; import net.momirealms.craftengine.core.util.FileUtils; import org.bukkit.command.CommandSender; import org.incendo.cloud.Command; import org.incendo.cloud.CommandManager; import org.incendo.cloud.parser.standard.StringParser; +import org.yaml.snakeyaml.LoaderOptions; +import org.yaml.snakeyaml.Yaml; import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; +import java.util.HashMap; +import java.util.Map; public class CreateResourceCommand extends BukkitCommandFeature { @@ -31,51 +38,49 @@ public class CreateResourceCommand extends BukkitCommandFeature { .required("pack", StringParser.stringComponent(StringParser.StringMode.SINGLE)) .optional("namespace", StringParser.stringComponent(StringParser.StringMode.SINGLE)) .optional("author", StringParser.stringComponent(StringParser.StringMode.SINGLE)) - .optional("description", StringParser.stringComponent(StringParser.StringMode.QUOTED)) + .optional("description", StringParser.stringComponent(StringParser.StringMode.GREEDY_FLAG_YIELDING)) .handler(context -> { String packFolder = context.get("pack"); Path packPath = plugin().dataFolderPath().resolve("resources").resolve(packFolder); + if (Files.exists(packPath)) { + handleFeedback(context, MessageConstants.COMMAND_RESOURCE_CREATE_FAILURE_EXISTS, Component.text(packFolder)); + return; + } Path configurationPath = packPath.resolve("configuration"); Path resourcepackPath = packPath.resolve("resourcepack"); Path packMetaPath = packPath.resolve("pack.yml"); - if (Files.exists(packPath)) { - handleFeedback(context, MessageConstants.COMMAND_RESOURCE_CREATE_EXISTS, Component.text(packFolder)); - return; - } String namespace = context.getOrDefault("namespace", packFolder); if (!ResourceLocation.isValidNamespace(namespace)) { handleFeedback(context, MessageConstants.COMMAND_RESOURCE_CREATE_FAILURE_INVALID_NAMESPACE, Component.text(packFolder), Component.text(namespace)); return; } String author = context.getOrDefault("author", "CraftEngine"); - String description = context.getOrDefault("description", "Auto-created by CraftEngine"); + String description = context.getOrDefault("description", "Auto-generated by CraftEngine"); try { FileUtils.createDirectoriesSafe(packPath); FileUtils.createDirectoriesSafe(configurationPath); Path namespacePath = resourcepackPath.resolve("assets").resolve(namespace); FileUtils.createDirectoriesSafe(namespacePath); - if (context.flags().hasFlag("full")) { - Path modelsPath = namespacePath.resolve("models"); - FileUtils.createDirectoriesSafe(modelsPath.resolve("block")); - FileUtils.createDirectoriesSafe(modelsPath.resolve("item")); - Path texturesPath = namespacePath.resolve("textures"); - FileUtils.createDirectoriesSafe(texturesPath.resolve("block")); - FileUtils.createDirectoriesSafe(texturesPath.resolve("entity")); - FileUtils.createDirectoriesSafe(texturesPath.resolve("font")); - FileUtils.createDirectoriesSafe(texturesPath.resolve("gui").resolve("sprites").resolve("tooltip")); - FileUtils.createDirectoriesSafe(texturesPath.resolve("item")); - FileUtils.createDirectoriesSafe(texturesPath.resolve("trims")); - FileUtils.createDirectoriesSafe(namespacePath.resolve("sounds")); - } - YamlDocument document = plugin().config().loadYamlData(packMetaPath); - document.set("author", author); - document.set("version", "0.0.1"); - document.set("description", description); - document.set("namespace", namespace); - document.set("enable", false); - document.save(packMetaPath.toFile()); + Path modelsPath = namespacePath.resolve("models"); + FileUtils.createDirectoriesSafe(modelsPath.resolve("block")); + FileUtils.createDirectoriesSafe(modelsPath.resolve("item")); + Path texturesPath = namespacePath.resolve("textures"); + FileUtils.createDirectoriesSafe(texturesPath.resolve("block")); + FileUtils.createDirectoriesSafe(texturesPath.resolve("font")); + FileUtils.createDirectoriesSafe(texturesPath.resolve("gui").resolve("sprites").resolve("tooltip")); + FileUtils.createDirectoriesSafe(texturesPath.resolve("item")); + FileUtils.createDirectoriesSafe(namespacePath.resolve("sounds")); + Yaml yaml = new Yaml(new StringKeyConstructor(packMetaPath, new LoaderOptions())); + Map data = new HashMap<>(); + data.put("author", author); + data.put("description", description); + data.put("version", "1.0"); + data.put("namespace", namespace); + data.put("enable", true); + String dump = yaml.dump(data); + Files.writeString(packMetaPath, dump); } catch (IOException e) { - handleFeedback(context, MessageConstants.COMMAND_RESOURCE_CREATE_FAILURE, Component.text(packFolder), Component.text(e.getMessage())); + handleFeedback(context, MessageConstants.COMMAND_RESOURCE_CREATE_FAILURE_UNKNOWN, Component.text(packFolder), Component.text(e.getMessage())); return; } handleFeedback(context, MessageConstants.COMMAND_RESOURCE_CREATE_SUCCESS, Component.text(packFolder)); diff --git a/common-files/src/main/resources/translations/en.yml b/common-files/src/main/resources/translations/en.yml index b5d152c3a..f8f325359 100644 --- a/common-files/src/main/resources/translations/en.yml +++ b/common-files/src/main/resources/translations/en.yml @@ -86,9 +86,9 @@ command.resource.disable.success: "Disabled resource . Run Unknown resource " command.resource.list: "Enabled resources(): Disabled resources(): " command.resource.create.success: "Created resource ." -command.resource.create.failure: "Failed to create resource , Error: " +command.resource.create.failure.unknown: "Failed to create resource , Error: " command.resource.create.failure.invalid_namespace: "Failed to create resource , The namespace is invalid." -command.resource.create.exists: "Resource already exists." +command.resource.create.failure.exists: "Resource already exists." command.upload.failure.not_supported: "Current hosting method '' doesn't support uploading resource packs." command.upload.on_progress: "Started uploading progress. Check the console for more information." command.send_resource_pack.success.single: "Sent resource pack to ." diff --git a/common-files/src/main/resources/translations/zh_cn.yml b/common-files/src/main/resources/translations/zh_cn.yml index cc6386a50..ee38b4de6 100644 --- a/common-files/src/main/resources/translations/zh_cn.yml +++ b/common-files/src/main/resources/translations/zh_cn.yml @@ -86,9 +86,9 @@ command.resource.disable.success: "已禁用 . 执行 未知资源 " command.resource.list: "启用的资源(): 禁用的资源(): " command.resource.create.success: "已创建资源 " -command.resource.create.failure: "创建资源 失败, 错误信息: " +command.resource.create.failure.unknown: "创建资源 失败, 错误信息: " command.resource.create.failure.invalid_namespace: "创建资源 失败, 命名空间 不合法" -command.resource.create.exists: "资源 已存在" +command.resource.create.failure.exists: "资源 已存在" command.upload.failure.not_supported: "当前托管模式 '' 不支持上传资源包" command.upload.on_progress: "已开始上传进程. 检查控制台以获取详细信息" command.send_resource_pack.success.single: "发送资源包给 " diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/MessageConstants.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/MessageConstants.java index 195989c08..de2de6730 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/MessageConstants.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/MessageConstants.java @@ -27,9 +27,9 @@ public interface MessageConstants { TranslatableComponent.Builder COMMAND_RESOURCE_DISABLE_FAILURE = Component.translatable().key("command.resource.disable.failure.unknown"); TranslatableComponent.Builder COMMAND_RESOURCE_LIST = Component.translatable().key("command.resource.list"); TranslatableComponent.Builder COMMAND_RESOURCE_CREATE_SUCCESS = Component.translatable().key("command.resource.create.success"); - TranslatableComponent.Builder COMMAND_RESOURCE_CREATE_FAILURE = Component.translatable().key("command.resource.create.failure"); + TranslatableComponent.Builder COMMAND_RESOURCE_CREATE_FAILURE_UNKNOWN = Component.translatable().key("command.resource.create.failure.unknown"); TranslatableComponent.Builder COMMAND_RESOURCE_CREATE_FAILURE_INVALID_NAMESPACE = Component.translatable().key("command.resource.create.failure.invalid_namespace"); - TranslatableComponent.Builder COMMAND_RESOURCE_CREATE_EXISTS = Component.translatable().key("command.resource.create.exists"); + TranslatableComponent.Builder COMMAND_RESOURCE_CREATE_FAILURE_EXISTS = Component.translatable().key("command.resource.create.failure.exists"); TranslatableComponent.Builder COMMAND_UPLOAD_FAILURE_NOT_SUPPORTED = Component.translatable().key("command.upload.failure.not_supported"); TranslatableComponent.Builder COMMAND_UPLOAD_ON_PROGRESS = Component.translatable().key("command.upload.on_progress"); TranslatableComponent.Builder COMMAND_SEND_RESOURCE_PACK_SUCCESS_SINGLE = Component.translatable().key("command.send_resource_pack.success.single");