diff --git a/bukkit/loader/src/main/resources/translations/en.yml b/bukkit/loader/src/main/resources/translations/en.yml index 84171e524..258eea889 100644 --- a/bukkit/loader/src/main/resources/translations/en.yml +++ b/bukkit/loader/src/main/resources/translations/en.yml @@ -257,6 +257,7 @@ warning.config.host.gitlab.missing_token: "Issue found in config.yml at warning.config.host.gitlab.missing_project: "Issue found in config.yml at 'resource-pack.delivery.hosting' - Missing required 'project-id' argument for gitlab host." warning.config.host.proxy.missing_host: "Issue found in config.yml at 'resource-pack.delivery.hosting' - Missing required 'host' argument for proxy." warning.config.host.proxy.missing_port: "Issue found in config.yml at 'resource-pack.delivery.hosting' - Missing required 'port' argument for proxy." +warning.config.host.proxy.missing_scheme: "Issue found in config.yml at 'resource-pack.delivery.hosting' - Missing required 'scheme' argument for proxy." warning.config.host.proxy.invalid: "Issue found in config.yml at 'resource-pack.delivery.hosting' - Invalid proxy ''." warning.config.conflict_matcher.missing_type: "Issue found in config.yml at 'resource-pack.duplicated-files-handler' - Missing required 'type' argument for one of the handlers." warning.config.conflict_matcher.invalid_type: "Issue found in config.yml at 'resource-pack.duplicated-files-handler' - One of the terms is using the invalid type ''." diff --git a/bukkit/loader/src/main/resources/translations/zh_cn.yml b/bukkit/loader/src/main/resources/translations/zh_cn.yml index 203b8e906..7720bcbc0 100644 --- a/bukkit/loader/src/main/resources/translations/zh_cn.yml +++ b/bukkit/loader/src/main/resources/translations/zh_cn.yml @@ -1,6 +1,7 @@ # 别动这个 lang-version: "${lang_version}" +# 命令 exception.invalid_syntax: "无效语法. 正确语法: " exception.invalid_argument: "无效参数. 原因: " exception.invalid_sender: " 不允许执行该命令. 执行者必须是 " @@ -62,4 +63,212 @@ command.resource.list: "启用的资源(): < command.upload.failure.not_supported: "当前托管模式 '' 不支持上传资源包." command.upload.on_progress: "已开始上传进程. 检查控制台以获取详细信息." command.send_resource_pack.success.single: "发送资源包给 " -command.send_resource_pack.success.multiple: "发送资源包给 个玩家" \ No newline at end of file +command.send_resource_pack.success.multiple: "发送资源包给 个玩家" +warning.config.pack.duplicated_files: "发现重复文件 请通过 config.yml 的 'resource-pack.duplicated-files-handler' 部分解决" +warning.config.type.int: "在文件 发现问题 - 无法加载 '': 无法将 '' 转换为整数类型 (选项 '')" +warning.config.type.float: "在文件 发现问题 - 无法加载 '': 无法将 '' 转换为浮点数类型 (选项 '')" +warning.config.type.double: "在文件 发现问题 - 无法加载 '': 无法将 '' 转换为双精度类型 (选项 '')" +warning.config.type.quaternionf: "在文件 发现问题 - 无法加载 '': 无法将 '' 转换为四元数类型 (选项 '')" +warning.config.type.vector3f: "在文件 发现问题 - 无法加载 '': 无法将 '' 转换为三维向量类型 (选项 '')" +warning.config.structure.not_section: "在文件 发现问题 - 配置项 '' 应为配置段落 但实际类型为 ''" +warning.config.image.duplicate: "在文件 发现问题 - 重复的图片配置 '' 请检查其他文件中是否存在相同配置" +warning.config.image.missing_height: "在文件 发现问题 - 图片 '' 缺少必需的 'height' 参数" +warning.config.image.height_ascent_conflict: "在文件 发现问题 - 图片 '' 违反位图规则: 'height' 参数 '' 必须不小于 'ascent' 参数 ''" +warning.config.image.missing_file: "在文件 发现问题 - 图片 '' 缺少必需的 'file' 参数" +warning.config.image.invalid_file_chars: "在文件 发现问题 - 图片 '' 的 'file' 参数 '' 包含非法字符 请参考 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.image.invalid_font_chars: "在文件 发现问题 - 图片 '' 的 'font' 参数 '' 包含非法字符 请参考 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.image.missing_char: "在文件 发现问题 - 图片 '' 缺少必需的 'char' 参数" +warning.config.image.codepoint_conflict: "在文件 发现问题 - 图片 '' 在字体 中使用的字符 '()' 已被其他图片 '' 占用" +warning.config.image.invalid_codepoint_grid: "在文件 发现问题 - 图片 '' 的 'chars' 码位网格无效" +warning.config.image.file_not_found: "在文件 发现问题 - 图片 '' 的 PNG 文件 '' 未找到" +warning.config.image.invalid_hex_value: "在文件 发现问题 - 图片 '' 使用的 Unicode 字符 '' 不是有效的十六进制值" +warning.config.recipe.duplicate: "在文件 发现问题 - 重复的配方 '' 请检查其他文件中是否存在相同配置" +warning.config.recipe.missing_type: "在文件 发现问题 - 配方 '' 缺少必需的 'type' 参数" +warning.config.recipe.invalid_type: "在文件 发现问题 - 配方 '' 使用了无效的配方类型 ''" +warning.config.recipe.invalid_item: "在文件 发现问题 - 配方 '' 使用了无效的物品 ''" +warning.config.recipe.missing_ingredient: "在文件 发现问题 - 烧炼配方 '' 缺少必需的 'ingredient' 参数" +warning.config.recipe.missing_result: "在文件 发现问题 - 配方 '' 缺少必需的 'result' 参数" +warning.config.recipe.result.missing_id: "在文件 发现问题 - 配方 '' 的结果缺少必需的 'id' 参数" +warning.config.recipe.crafting.invalid_category: "在文件 发现问题 - 合成配方 '' 使用了无效的分类 '' 允许的分类: []" +warning.config.recipe.cooking.invalid_category: "在文件 发现问题 - 烧炼配方 '' 使用了无效的分类 '' 允许的分类: []" +warning.config.recipe.shaped.missing_pattern: "在文件 发现问题 - 有序合成配方 '' 缺少必需的 'pattern' 参数" +warning.config.recipe.shaped.invalid_pattern: "在文件 发现问题 - 有序合成配方 '' 使用了无效的图案 ''" +warning.config.recipe.shaped.invalid_symbol: "在文件 发现问题 - 有序合成配方 '' 在图案中使用了无效符号 ''" +warning.config.recipe.smithing_transform.post_processor.missing_type: "在文件 发现问题 - 锻造升级配方 '' 的后处理器缺少必需的 'type' 参数" +warning.config.recipe.smithing_transform.post_processor.invalid_type: "在文件 发现问题 - 锻造升级配方 '' 使用了无效的后处理器类型 ''" +warning.config.recipe.smithing_transform.post_processor.keep_component.missing_components: "在文件 发现问题 - 锻造升级配方 '' 的 'keep_components' 后处理器缺少必需的 'components' 参数" +warning.config.recipe.smithing_transform.post_processor.keep_component.missing_tags: "在文件 发现问题 - 锻造升级配方 '' 的 'keep_tags' 后处理器缺少必需的 'tags' 参数" +warning.config.i18n.unknown_locale: "在文件 发现问题 - 未知的语言环境 ''" +warning.config.template.duplicate: "在文件 发现问题 - 重复的模板 '' 请检查其他文件中是否存在相同配置" +warning.config.template.argument.self_increase_int.invalid_range: "在文件 发现问题 - 模板 '' 在 'self_increase_int' 参数中使用了一个起始值 '' 大于终止值 ''" +warning.config.template.argument.list.invalid_type: "在文件 发现问题 - 模板 '' 的 'list' 参数需要列表类型 但输入参数类型为 ''" +warning.config.vanilla_loot.missing_type: "在文件 发现问题 - 原版战利品 '' 缺少必需的 'type' 参数" +warning.config.vanilla_loot.invalid_type: "在文件 发现问题 - 原版战利品 '' 使用了无效类型 '' 允许的类型: []" +warning.config.vanilla_loot.block.invalid_target: "在文件 发现问题 - 原版战利品 '' 中存在无效的方块目标 ''" +warning.config.sound.duplicate: "在文件 发现问题 - 重复的音效 '' 请检查其他文件中是否存在相同配置" +warning.config.sound.missing_sounds: "在文件 发现问题 - 音效 '' 缺少必需的 'sounds' 参数" +warning.config.sound.missing_name: "在文件 发现问题 - 音效 '' 缺少必需的 'name' 参数" +warning.config.jukebox_song.duplicate: "在文件 发现问题 - 重复的唱片机歌曲 '' 请检查其他文件中是否存在相同配置" +warning.config.jukebox_song.missing_sound: "在文件 发现问题 - 唱片机歌曲 '' 缺少必需的 'sound' 参数" +warning.config.furniture.duplicate: "在文件 发现问题 - 重复的家具 '' 请检查其他文件中是否存在相同配置" +warning.config.furniture.missing_placement: "在文件 发现问题 - 家具 '' 缺少必需的 'placement' 参数" +warning.config.furniture.element.missing_item: "在文件 发现问题 - 家具 '' 的某个元素缺少必需的 'item' 参数" +warning.config.furniture.settings.unknown: "在文件 发现问题 - 家具 '' 使用了未知的设置类型 ''" +warning.config.furniture.hitbox.invalid_type: "在文件 发现问题 - 家具 '' 使用了无效的碰撞箱类型 ''" +warning.config.furniture.hitbox.custom.invalid_entity: "在文件 发现问题 - 家具 '' 的自定义碰撞箱使用了无效的实体类型 ''" +warning.config.item.duplicate: "在文件 发现问题 - 重复的物品 '' 请检查其他文件中是否存在相同配置" +warning.config.item.settings.unknown: "在文件 发现问题 - 物品 '' 使用了未知的设置类型 ''" +warning.config.item.missing_material: "在文件 发现问题 - 物品 '' 缺少必需的 'material' 参数" +warning.config.item.invalid_material: "在文件 发现问题 - 物品 '' 使用了无效的材料类型 ''" +warning.config.item.bad_custom_model_data: "在文件 发现问题 - 物品 '' 使用的自定义模型数据 '' 数值过大 建议使用小于 16,777,216 的值" +warning.config.item.custom_model_data_conflict: "在文件 发现问题 - 物品 '' 使用的自定义模型数据 '' 已被物品 '' 占用" +warning.config.item.missing_model_id: "在文件 发现问题 - 物品 '' 缺少必需的 'custom-model-data' 或 'item-model' 参数" +warning.config.item.behavior.missing_type: "在文件 发现问题 - 物品 '' 的行为配置缺少必需的 'type' 参数" +warning.config.item.behavior.invalid_type: "在文件 发现问题 - 物品 '' 使用了无效的行为类型 ''" +warning.config.item.behavior.block.missing_block: "在文件 发现问题 - 物品 '' 的 'block_item' 行为缺少必需的 'block' 参数" +warning.config.item.behavior.furniture.missing_furniture: "在文件 发现问题 - 物品 '' 的 'furniture_item' 行为缺少必需的 'furniture' 参数" +warning.config.item.behavior.liquid_collision.missing_block: "在文件 发现问题 - 物品 '' 的 'liquid_collision_block_item' 行为缺少必需的 'block' 参数" +warning.config.item.model.invalid_type: "在文件 发现问题 - 物品 '' 使用了无效的模型类型 ''" +warning.config.item.model.tint.missing_type: "在文件 发现问题 - 物品 '' 的染色配置缺少必需的 'type' 参数" +warning.config.item.model.tint.invalid_type: "在文件 发现问题 - 物品 '' 使用了无效的染色类型 ''" +warning.config.item.model.tint.constant.missing_value: "在文件 发现问题 - 物品 '' 的固定染色配置缺少必需的 'value' 参数" +warning.config.item.model.tint.grass.invalid_temp: "在文件 发现问题 - 物品 '' 的草地染色使用了无效的温度值 '' 有效范围应为 0 至 1" +warning.config.item.model.tint.grass.invalid_downfall: "在文件 发现问题 - 物品 '' 的草地染色使用了无效的降水值 '' 有效范围应为 0 至 1" +warning.config.item.model.tint.invalid_value: "在文件 发现问题 - 物品 '' 使用了无效的染色值 ''" +warning.config.item.model.base.missing_path: "在文件 发现问题 - 物品 '' 的 'minecraft:model' 模型缺少必需的 'path' 参数" +warning.config.item.model.base.invalid_path: "在文件 发现问题 - 物品 '' 的 'minecraft:model' 模型路径 '' 包含非法字符 请参考 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.item.model.condition.missing_property: "在文件 发现问题 - 物品 '' 的 'minecraft:condition' 模型缺少必需的 'property' 参数" +warning.config.item.model.condition.invalid_property: "在文件 发现问题 - 物品 '' 的 'minecraft:condition' 模型使用了无效属性 ''" +warning.config.item.model.condition.missing_on_true: "在文件 发现问题 - 物品 '' 的 'minecraft:condition' 模型缺少必需的 'on-true' 参数" +warning.config.item.model.condition.missing_on_false: "在文件 发现问题 - 物品 '' 的 'minecraft:condition' 模型缺少必需的 'on-false' 参数" +warning.config.item.model.condition.keybind.missing: "在文件 发现问题 - 物品 '' 的 'minecraft:keybind_down' 属性缺少必需的 'keybind' 参数" +warning.config.item.model.condition.has_component.missing_component: "在文件 发现问题 - 物品 '' 的 'minecraft:has_component' 属性缺少必需的 'component' 参数" +warning.config.item.model.composite.missing_models: "在文件 发现问题 - 物品 '' 的 'minecraft:composite' 模型缺少必需的 'models' 参数" +warning.config.item.model.range_dispatch.missing_property: "在文件 发现问题 - 物品 '' 的 'minecraft:range_dispatch' 模型缺少必需的 'property' 参数" +warning.config.item.model.range_dispatch.invalid_property: "在文件 发现问题 - 物品 '' 的 'minecraft:range_dispatch' 模型使用了无效属性 ''" +warning.config.item.model.range_dispatch.missing_entries: "在文件 发现问题 - 物品 '' 的 'minecraft:composite' 模型缺少必需的 'entries' 参数" +warning.config.item.model.range_dispatch.entry.missing_model: "在文件 发现问题 - 物品 '' 的 'minecraft:composite' 模型的某个条目缺少必需的 'model' 参数" +warning.config.item.model.range_dispatch.compass.missing_target: "在文件 发现问题 - 物品 '' 的 'minecraft:compass' 属性缺少必需的 'target' 参数" +warning.config.item.model.range_dispatch.time.missing_source: "在文件 发现问题 - 物品 '' 的 'minecraft:time' 属性缺少必需的 'source' 参数" +warning.config.item.model.select.missing_property: "在文件 发现问题 - 物品 '' 的 'minecraft:select' 模型缺少必需的 'property' 参数" +warning.config.item.model.select.invalid_property: "在文件 发现问题 - 物品 '' 的 'minecraft:select' 模型使用了无效属性 ''" +warning.config.item.model.select.missing_cases: "在文件 发现问题 - 物品 '' 的 'minecraft:select' 模型缺少必需的 'cases' 参数" +warning.config.item.model.select.case.missing_when: "在文件 发现问题 - 物品 '' 的 'minecraft:select' 模型的某个 case 缺少必需的 'when' 参数" +warning.config.item.model.select.case.missing_model: "在文件 发现问题 - 物品 '' 的 'minecraft:select' 模型的某个 case 缺少必需的 'model' 参数" +warning.config.item.model.select.block_state.missing_property: "在文件 发现问题 - 物品 '' 的 'minecraft:block_state' 属性缺少必需的 'block-state-property' 参数" +warning.config.item.model.select.local_time.missing_pattern: "在文件 发现问题 - 物品 '' 的 'minecraft:local_time' 属性缺少必需的 'pattern' 参数" +warning.config.item.model.special.missing_type: "在文件 发现问题 - 物品 '' 的 'minecraft:special' 模型缺少必需的 'type' 参数" +warning.config.item.model.special.invalid_type: "在文件 发现问题 - 物品 '' 的 'minecraft:special' 模型使用了无效类型 ''" +warning.config.item.model.special.banner.missing_color: "在文件 发现问题 - 物品 '' 的 'minecraft:banner' 特殊模型缺少必需的 'color' 参数" +warning.config.item.model.special.sign.missing_wood_type: "在文件 发现问题 - 物品 '' 的 'minecraft:hanging_sign'/'minecraft:standing_sign' 特殊模型缺少必需的 'wood-type' 参数" +warning.config.item.model.special.sign.missing_texture: "在文件 发现问题 - 物品 '' 的 'minecraft:hanging_sign'/'minecraft:standing_sign' 特殊模型缺少必需的 'texture' 参数" +warning.config.item.model.special.chest.missing_texture: "在文件 发现问题 - 物品 '' 的 'minecraft:chest' 特殊模型缺少必需的 'texture' 参数" +warning.config.item.model.special.chest.invalid_openness: "在文件 发现问题 - 物品 '' 的 'minecraft:chest' 特殊模型使用了无效的 'openness' 值 '' 有效范围应为 0~1" +warning.config.item.model.special.shulker_box.missing_texture: "在文件 发现问题 - 物品 '' 的 'minecraft:shulker_box' 特殊模型缺少必需的 'texture' 参数" +warning.config.item.model.special.shulker_box.invalid_openness: "在文件 发现问题 - 物品 '' 的 'minecraft:shulker_box' 特殊模型使用了无效的 'openness' 值 '' 有效范围应为 0~1" +warning.config.item.model.special.head.missing_kind: "在文件 发现问题 - 物品 '' 的 'minecraft:head' 特殊模型缺少必需的 'kind' 参数" +warning.config.item.model.special.head.missing_texture: "在文件 发现问题 - 物品 '' 的 'minecraft:head' 特殊模型缺少必需的 'texture' 参数" +warning.config.block.duplicate: "在文件 发现问题 - 重复的方块 '' 请检查其他文件中是否存在相同配置" +warning.config.block.missing_state: "在文件 发现问题 - 方块 '' 缺少必需的 'state' 参数" +warning.config.block.state.property.missing_type: "在文件 发现问题 - 方块 '' 的属性 '' 缺少必需的 'type' 参数" +warning.config.block.state.property.invalid_type: "在文件 发现问题 - 方块 '' 的属性 '' 使用了无效的类型参数 ''" +warning.config.block.state.property.integer.invalid_range: "在文件 发现问题 - 方块 '' 的整数属性 '' 使用了无效的范围参数 '' 正确语法: 1~2" +warning.config.block.state.missing_real_id: "在文件 发现问题 - 方块 '' 的 'state' 缺少必需的 'id' 参数 该 ID 是服务端方块 ID 用于唯一标识每种方块状态类型" +warning.config.block.state.missing_state: "在文件 发现问题 - 方块 '' 的 'state' 缺少必需的 'state' 参数" +warning.config.block.state.missing_properties: "在文件 发现问题 - 方块 '' 的 'states' 缺少必需的 'properties' 段落" +warning.config.block.state.missing_appearances: "在文件 发现问题 - 方块 '' 的 'states' 缺少必需的 'appearances' 段落" +warning.config.block.state.missing_variants: "在文件 发现问题 - 方块 '' 的 'states' 缺少必需的 'variants' 段落" +warning.config.block.state.variant.missing_appearance: "在文件 发现问题 - 方块 '' 的变体 '' 缺少必需的 'appearance' 参数" +warning.config.block.state.variant.invalid_appearance: "在文件 发现问题 - 方块 '' 的变体 '' 使用了不存在的 appearance ''" +warning.config.block.state.invalid_vanilla: "在文件 发现问题 - 方块 '' 使用了无效的原版方块状态 ''" +warning.config.block.state.unavailable_vanilla: "在文件 发现问题 - 方块 '' 使用了不可用的原版方块状态 '' 请在 mappings.yml 中释放该状态" +warning.config.block.state.invalid_vanilla_id: "在文件 发现问题 - 方块 '' 使用的原版方块状态 '' 超出可用槽位范围 '0~'" +warning.config.block.state.conflict: "在文件 发现问题 - 方块 '' 使用的原版方块状态 '' 已被 '' 占用" +warning.config.block.state.bind_failed: "在文件 发现问题 - 方块 '' 无法为 '' 绑定真实方块状态 因该状态已被 '' 占用" +warning.config.block.state.missing_model: "在文件 发现问题 - 方块 '' 缺少必需的 'model' 或 'models' 参数" +warning.config.block.state.invalid_real_id: "在文件 发现问题 - 方块 '' 使用的真实方块状态 '' 超出可用槽位范围 '0~' 如果槽位已用尽 请在 additional-real-blocks.yml 中添加更多真实状态" +warning.config.block.state.model.missing_path: "在文件 发现问题 - 方块 '' 的 'model' 缺少必需的 'path' 选项" +warning.config.block.state.model.invalid_path: "在文件 发现问题 - 方块 '' 的 'path' 参数 '' 包含非法字符 请参考 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.block.settings.unknown: "在文件 发现问题 - 方块 '' 使用了未知的设置类型 ''" +warning.config.block.behavior.missing_type: "在文件 发现问题 - 方块 '' 的行为配置缺少必需的 'type' 参数" +warning.config.block.behavior.invalid_type: "在文件 发现问题 - 方块 '' 使用了无效的行为类型 ''" +warning.config.block.behavior.concrete.missing_solid: "在文件 发现问题 - 方块 '' 的 'concrete_block' 行为缺少必需的 'solid-block' 选项" +warning.config.block.behavior.crop.missing_age: "在文件 发现问题 - 方块 '' 的 'crop_block' 行为缺少必需的 'age' 属性" +warning.config.block.behavior.sugar_cane.missing_age: "在文件 发现问题 - 方块 '' 的 'sugar_cane_block' 行为缺少必需的 'age' 属性" +warning.config.block.behavior.leaves.missing_persistent: "在文件 发现问题 - 方块 '' 的 'leaves_block' 行为缺少必需的 'persistent' 属性" +warning.config.block.behavior.leaves.missing_distance: "在文件 发现问题 - 方块 '' 的 'leaves_block' 行为缺少必需的 'distance' 属性" +warning.config.block.behavior.sapling.missing_stage: "在文件 发现问题 - 方块 '' 的 'sapling_block' 行为缺少必需的 'stage' 属性" +warning.config.block.behavior.sapling.missing_feature: "在文件 发现问题 - 方块 '' 的 'sapling_block' 行为缺少必需的 'feature' 参数" +warning.config.block.behavior.strippable.missing_stripped: "在文件 发现问题 - 方块 '' 的 'strippable_block' 行为缺少必需的 'stripped' 参数" +warning.config.model.generation.missing_parent: "在文件 发现问题 - 配置项 '' 的 'generation' 段落缺少必需的 'parent' 参数" +warning.config.model.generation.conflict: "在文件 发现问题 - 无法为 '' 生成模型 存在多个配置尝试使用相同路径 '' 生成不同的 JSON 模型" +warning.config.model.generation.texture.invalid: "在文件 发现问题 - 配置项 '' 的纹理 '' 路径 '' 包含非法字符 请参考 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.model.generation.parent.invalid: "在文件 发现问题 - 配置项 '' 的父级参数 '' 包含非法字符 请参考 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.missing_keywords: "在文件 发现问题 - 表情 '' 缺少必需的 'keywords' 参数" +warning.config.emoji.duplicate: "在文件 发现问题 - 重复的表情 '' 请检查其他文件中是否存在相同配置" +warning.config.emoji.invalid_image: "在文件 发现问题 - 表情 '' 的 'image' 参数 '' 无效" +warning.config.advancement.duplicate: "在文件 发现问题 - 重复的进度 '' 请检查其他文件中是否存在相同配置" +warning.config.loot_table.missing_pools: "在文件 发现问题 - '' 的战利品表配置错误 缺少必需的 'pools' 参数" +warning.config.loot_table.invalid_pools_type: "在文件 发现问题 - '' 的战利品表配置错误 'pools' 应为字符串/映射列表 当前类型: ''" +warning.config.loot_table.invalid_conditions_type: "在文件 发现问题 - '' 的战利品表配置错误 'conditions' 应为映射列表 当前类型: ''" +warning.config.loot_table.invalid_functions_type: "在文件 发现问题 - '' 的战利品表配置错误 'functions' 应为映射列表 当前类型: ''" +warning.config.loot_table.invalid_entries_type: "在文件 发现问题 - '' 的战利品表配置错误 'entries' 应为映射列表 当前类型: ''" +warning.config.loot_table.function.missing_type: "在文件 发现问题 - '' 的战利品表配置错误 某个函数缺少必需的 'type' 参数" +warning.config.loot_table.function.invalid_type: "在文件 发现问题 - '' 的战利品表配置错误 某个函数使用了无效的函数类型 ''" +warning.config.loot_table.function.apply_bonus.missing_enchantment: "在文件 发现问题 - '' 的战利品表配置错误 'apply_bonus' 函数缺少必需的 'enchantment' 参数" +warning.config.loot_table.function.apply_bonus.missing_formula: "在文件 发现问题 - '' 的战利品表配置错误 'apply_bonus' 函数缺少必需的 'formula' 参数" +warning.config.loot_table.function.drop_exp.missing_count: "在文件 发现问题 - '' 的战利品表配置错误 'drop_exp' 函数缺少必需的 'count' 参数" +warning.config.loot_table.function.set_count.missing_count: "在文件 发现问题 - '' 的战利品表配置错误 'set_count' 函数缺少必需的 'count' 参数" +warning.config.loot_table.entry.missing_type: "在文件 发现问题 - '' 的战利品表配置错误 某个条目缺少必需的 'type' 参数" +warning.config.loot_table.entry.invalid_type: "在文件 发现问题 - '' 的战利品表配置错误 某个条目使用了无效的条目类型 ''" +warning.config.loot_table.entry.exp.missing_count: "在文件 发现问题 - '' 的战利品表配置错误 'exp' 条目缺少必需的 'count' 参数" +warning.config.loot_table.entry.item.missing_item: "在文件 发现问题 - '' 的战利品表配置错误 'item' 条目缺少必需的 'item' 参数" +warning.config.loot_table.condition.missing_type: "在文件 发现问题 - '' 的战利品表配置错误 某个条件缺少必需的 'type' 参数" +warning.config.loot_table.condition.invalid_type: "在文件 发现问题 - '' 的战利品表配置错误 某个条件使用了无效的条件类型 ''" +warning.config.loot_table.condition.table_bonus.missing_enchantment: "在文件 发现问题 - '' 的战利品表配置错误 'table_bonus' 条件缺少必需的 'enchantment' 参数" +warning.config.loot_table.condition.table_bonus.missing_chances: "在文件 发现问题 - '' 的战利品表配置错误 'table_bonus' 条件缺少必需的 'chances' 参数" +warning.config.loot_table.number.missing_type: "在文件 发现问题 - '' 的战利品表配置错误 某个数值缺少必需的 'type' 参数" +warning.config.loot_table.number.invalid_type: "在文件 发现问题 - '' 的战利品表配置错误 某个数值使用了无效的数值类型 ''" +warning.config.host.missing_type: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - 缺少必需的 'type' 参数" +warning.config.host.invalid_type: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - 无效的托管类型 '' 请参考 https://mo-mi.gitbook.io/xiaomomi-plugins/craftengine/plugin-wiki/craftengine/resource-pack/host" +warning.config.host.external.missing_url: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - 外部托管缺少必需的 'url' 参数" +warning.config.host.alist.missing_api_url: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - Alist 托管缺少必需的 'api-url' 参数" +warning.config.host.alist.missing_username: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - Alist 托管缺少必需的 'username' 参数或环境变量 'CE_ALIST_USERNAME'" +warning.config.host.alist.missing_password: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - Alist 托管缺少必需的 'password' 参数或环境变量 'CE_ALIST_PASSWORD'" +warning.config.host.alist.missing_upload_path: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - Alist 托管缺少必需的 'upload-path' 参数" +warning.config.host.dropbox.missing_app_key: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - Dropbox 托管缺少必需的 'app-key' 参数或环境变量 'CE_DROPBOX_APP_KEY'" +warning.config.host.dropbox.missing_app_secret: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - Dropbox 托管缺少必需的 'app-secret' 参数或环境变量 'CE_DROPBOX_APP_SECRET'" +warning.config.host.dropbox.missing_refresh_token: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - Dropbox 托管缺少必需的 'refresh-token' 参数或环境变量 'CE_DROPBOX_REFRESH_TOKEN'" +warning.config.host.dropbox.missing_upload_path: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - Dropbox 托管缺少必需的 'upload-path' 参数" +warning.config.host.lobfile.missing_api_key: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - Lobfile 托管缺少必需的 'api-key' 参数" +warning.config.host.onedrive.missing_client_id: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - OneDrive 托管缺少必需的 'client-id' 参数或环境变量 'CE_ONEDRIVE_CLIENT_ID'" +warning.config.host.onedrive.missing_client_secret: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - OneDrive 托管缺少必需的 'client-secret' 参数或环境变量 'CE_ONEDRIVE_CLIENT_SECRET'" +warning.config.host.onedrive.missing_refresh_token: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - OneDrive 托管缺少必需的 'refresh-token' 参数或环境变量 'CE_ONEDRIVE_REFRESH_TOKEN'" +warning.config.host.onedrive.missing_upload_path: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - OneDrive 托管缺少必需的 'upload-path' 参数" +warning.config.host.s3.missing_endpoint: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - S3 托管缺少必需的 'endpoint' 参数" +warning.config.host.s3.missing_bucket: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - S3 托管缺少必需的 'bucket' 参数" +warning.config.host.s3.missing_access_key: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - S3 托管缺少必需的 'access-key-id' 参数或环境变量 'CE_S3_ACCESS_KEY_ID'" +warning.config.host.s3.missing_secret: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - S3 托管缺少必需的 'access-key-secret' 参数或环境变量 'CE_S3_ACCESS_KEY_SECRET'" +warning.config.host.s3.missing_upload_path: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - S3 托管缺少必需的 'upload-path' 参数" +warning.config.host.self.missing_ip: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - 自托管托管缺少必需的 'ip' 参数" +warning.config.host.self.invalid_port: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - 自托管托管的端口 '' 无效" +warning.config.host.gitlab.missing_url: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - GitLab 托管缺少必需的 'gitlab-url' 参数" +warning.config.host.gitlab.missing_token: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - GitLab 托管缺少必需的 'access-token' 参数" +warning.config.host.gitlab.missing_project: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - GitLab 托管缺少必需的 'project-id' 参数" +warning.config.host.proxy.missing_host: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - 代理配置缺少必需的 'host' 参数" +warning.config.host.proxy.missing_port: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - 代理配置缺少必需的 'port' 参数" +warning.config.host.proxy.missing_scheme: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - 代理配置缺少必需的 'scheme' 参数" +warning.config.host.proxy.invalid: "在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - 无效的代理配置 ''" +warning.config.conflict_matcher.missing_type: "在 config.yml 的 'resource-pack.duplicated-files-handler' 处发现问题 - 文件冲突处理器的某个匹配器缺少必需的 'type' 参数" +warning.config.conflict_matcher.invalid_type: "在 config.yml 的 'resource-pack.duplicated-files-handler' 处发现问题 - 文件冲突处理器的某个匹配器使用了无效类型 ''" +warning.config.conflict_matcher.exact.missing_path: "在 config.yml 的 'resource-pack.duplicated-files-handler' 处发现问题 - 精确路径匹配器缺少必需的 'path' 参数" +warning.config.conflict_matcher.contains.missing_path: "在 config.yml 的 'resource-pack.duplicated-files-handler' 处发现问题 - 路径包含匹配器缺少必需的 'path' 参数" +warning.config.conflict_matcher.filename.missing_name: "在 config.yml 的 'resource-pack.duplicated-files-handler' 处发现问题 - 文件名匹配器缺少必需的 'path' 参数" +warning.config.conflict_matcher.pattern.missing_pattern: "在 config.yml 的 'resource-pack.duplicated-files-handler' 处发现问题 - 正则表达式匹配器缺少必需的 'pattern' 参数" +warning.config.conflict_matcher.parent_prefix.missing_prefix: "在 config.yml 的 'resource-pack.duplicated-files-handler' 处发现问题 - 父路径前缀匹配器缺少必需的 'prefix' 参数" +warning.config.conflict_matcher.parent_suffix.missing_suffix: "在 config.yml 的 'resource-pack.duplicated-files-handler' 处发现问题 - 父路径后缀匹配器缺少必需的 'suffix' 参数" +warning.config.conflict_matcher.inverted.missing_term: "在 config.yml 的 'resource-pack.duplicated-files-handler' 处发现问题 - 反向匹配器缺少必需的 'term' 参数" +warning.config.conflict_matcher.all_of.missing_terms: "在 config.yml 的 'resource-pack.duplicated-files-handler' 处发现问题 - 全匹配器缺少必需的 'terms' 参数" +warning.config.conflict_matcher.any_of.missing_terms: "在 config.yml 的 'resource-pack.duplicated-files-handler' 处发现问题 - 任一匹配器缺少必需的 'terms' 参数" +warning.config.conflict_resolution.missing_type: "在 config.yml 的 'resource-pack.duplicated-files-handler' 处发现问题 - 文件冲突处理器的某个解决方案缺少必需的 'type' 参数" +warning.config.conflict_resolution.invalid_type: "在 config.yml 的 'resource-pack.duplicated-files-handler' 处发现问题 - 文件冲突处理器的某个解决方案使用了无效类型 ''" \ No newline at end of file diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/AlistHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/AlistHost.java index e86d71c90..55278dc62 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/AlistHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/AlistHost.java @@ -292,22 +292,22 @@ public class AlistHost implements ResourcePackHost { @Override public ResourcePackHost create(Map arguments) { boolean useEnv = (boolean) arguments.getOrDefault("use-environment-variables", false); - String apiUrl = (String) arguments.get("api-url"); + String apiUrl = Optional.ofNullable(arguments.get("api-url")).map(String::valueOf).orElse(null); if (apiUrl == null || apiUrl.isEmpty()) { throw new LocalizedException("warning.config.host.alist.missing_api_url"); } - String userName = useEnv ? System.getenv("CE_ALIST_USERNAME") : (String) arguments.get("username"); + String userName = useEnv ? System.getenv("CE_ALIST_USERNAME") : Optional.ofNullable(arguments.get("username")).map(String::valueOf).orElse(null); if (userName == null || userName.isEmpty()) { throw new LocalizedException("warning.config.host.alist.missing_username"); } - String password = useEnv ? System.getenv("CE_ALIST_PASSWORD") : (String) arguments.get("password"); + String password = useEnv ? System.getenv("CE_ALIST_PASSWORD") : Optional.ofNullable(arguments.get("password")).map(String::valueOf).orElse(null); if (password == null || password.isEmpty()) { throw new LocalizedException("warning.config.host.alist.missing_password"); } - String filePassword = useEnv ? System.getenv("CE_ALIST_FILE_PASSWORD") : (String) arguments.getOrDefault("file-password", ""); - String otpCode = (String) arguments.get("otp-code"); + String filePassword = useEnv ? System.getenv("CE_ALIST_FILE_PASSWORD") : arguments.getOrDefault("file-password", "").toString(); + String otpCode = Optional.ofNullable(arguments.get("otp-code")).map(String::valueOf).orElse(null); Duration jwtTokenExpiration = Duration.ofHours((int) arguments.getOrDefault("jwt-token-expiration", 48)); - String uploadPath = (String) arguments.get("upload-path"); + String uploadPath = Optional.ofNullable(arguments.get("upload-path")).map(String::valueOf).orElse(null); if (uploadPath == null || uploadPath.isEmpty()) { throw new LocalizedException("warning.config.host.alist.missing_upload_path"); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/DropboxHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/DropboxHost.java index ff0e64b2e..7e273c339 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/DropboxHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/DropboxHost.java @@ -267,19 +267,19 @@ public class DropboxHost implements ResourcePackHost { @Override public ResourcePackHost create(Map arguments) { boolean useEnv = (boolean) arguments.getOrDefault("use-environment-variables", false); - String appKey = useEnv ? System.getenv("CE_DROPBOX_APP_KEY") : (String) arguments.get("app-key"); + String appKey = useEnv ? System.getenv("CE_DROPBOX_APP_KEY") : Optional.ofNullable(arguments.get("app-key")).map(String::valueOf).orElse(null); if (appKey == null || appKey.isEmpty()) { throw new LocalizedException("warning.config.host.dropbox.missing_app_key"); } - String appSecret = useEnv ? System.getenv("CE_DROPBOX_APP_SECRET") : (String) arguments.get("app-secret"); + String appSecret = useEnv ? System.getenv("CE_DROPBOX_APP_SECRET") : Optional.ofNullable(arguments.get("app-secret")).map(String::valueOf).orElse(null); if (appSecret == null || appSecret.isEmpty()) { throw new LocalizedException("warning.config.host.dropbox.missing_app_secret"); } - String refreshToken = useEnv ? System.getenv("CE_DROPBOX_REFRESH_TOKEN") : (String) arguments.get("refresh-token"); + String refreshToken = useEnv ? System.getenv("CE_DROPBOX_REFRESH_TOKEN") : Optional.ofNullable(arguments.get("refresh-token")).map(String::valueOf).orElse(null); if (refreshToken == null || refreshToken.isEmpty()) { throw new LocalizedException("warning.config.host.dropbox.missing_refresh_token"); } - String uploadPath = (String) arguments.get("upload-path"); + String uploadPath = Optional.ofNullable(arguments.get("upload-path")).map(String::valueOf).orElse(null); if (uploadPath == null || uploadPath.isEmpty()) { throw new LocalizedException("warning.config.host.dropbox.missing_upload_path"); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/ExternalHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/ExternalHost.java index ac7b9628f..dec6095cd 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/ExternalHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/ExternalHost.java @@ -10,6 +10,7 @@ import net.momirealms.craftengine.core.util.Key; import java.nio.file.Path; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.UUID; import java.util.concurrent.CompletableFuture; @@ -45,19 +46,16 @@ public class ExternalHost implements ResourcePackHost { @Override public ResourcePackHost create(Map arguments) { - String url = (String) arguments.get("url"); + String url = Optional.ofNullable(arguments.get("url")).map(String::valueOf).orElse(null); if (url == null || url.isEmpty()) { throw new LocalizedException("warning.config.host.external.missing_url"); } - String uuid = (String) arguments.get("uuid"); + String uuid = Optional.ofNullable(arguments.get("uuid")).map(String::valueOf).orElse(null); if (uuid == null || uuid.isEmpty()) { uuid = UUID.nameUUIDFromBytes(url.getBytes()).toString(); } UUID hostUUID = UUID.fromString(uuid); - String sha1 = (String) arguments.get("sha1"); - if (sha1 == null) { - sha1 = ""; - } + String sha1 = arguments.getOrDefault("sha1", "").toString(); return new ExternalHost(new ResourcePackDownloadData(url, hostUUID, sha1)); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/GitLabHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/GitLabHost.java index d53024fcc..d0c1f9b57 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/GitLabHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/GitLabHost.java @@ -177,18 +177,18 @@ public class GitLabHost implements ResourcePackHost { @Override public ResourcePackHost create(Map arguments) { boolean useEnv = (boolean) arguments.getOrDefault("use-environment-variables", false); - String gitlabUrl = (String) arguments.get("gitlab-url"); + String gitlabUrl = Optional.ofNullable(arguments.get("gitlab-url")).map(String::valueOf).orElse(null); if (gitlabUrl == null || gitlabUrl.isEmpty()) { throw new LocalizedException("warning.config.host.gitlab.missing_url"); } if (gitlabUrl.endsWith("/")) { gitlabUrl = gitlabUrl.substring(0, gitlabUrl.length() - 1); } - String accessToken = useEnv ? System.getenv("CE_GITLAB_ACCESS_TOKEN") : (String) arguments.get("access-token"); + String accessToken = useEnv ? System.getenv("CE_GITLAB_ACCESS_TOKEN") : Optional.ofNullable(arguments.get("access-token")).map(String::valueOf).orElse(null); if (accessToken == null || accessToken.isEmpty()) { throw new LocalizedException("warning.config.host.gitlab.missing_token"); } - String projectId = (String) arguments.get("project-id"); + String projectId = Optional.ofNullable(arguments.get("project-id")).map(String::valueOf).orElse(null); if (projectId == null || projectId.isEmpty()) { throw new LocalizedException("warning.config.host.gitlab.missing_project"); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/LobFileHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/LobFileHost.java index d598bc636..3359d3b8b 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/LobFileHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/LobFileHost.java @@ -272,7 +272,7 @@ public class LobFileHost implements ResourcePackHost { @Override public ResourcePackHost create(Map arguments) { boolean useEnv = (boolean) arguments.getOrDefault("use-environment-variables", false); - String apiKey = useEnv ? System.getenv("CE_LOBFILE_API_KEY") : (String) arguments.get("api-key"); + String apiKey = useEnv ? System.getenv("CE_LOBFILE_API_KEY") : Optional.ofNullable(arguments.get("api-key")).map(String::valueOf).orElse(null); if (apiKey == null || apiKey.isEmpty()) { throw new LocalizedException("warning.config.host.lobfile.missing_api_key"); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/OneDriveHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/OneDriveHost.java index 8cb253436..de06dd2b3 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/OneDriveHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/OneDriveHost.java @@ -232,19 +232,19 @@ public class OneDriveHost implements ResourcePackHost { @Override public ResourcePackHost create(Map arguments) { boolean useEnv = (boolean) arguments.getOrDefault("use-environment-variables", false); - String clientId = useEnv ? System.getenv("CE_ONEDRIVE_CLIENT_ID") : (String) arguments.get("client-id"); + String clientId = useEnv ? System.getenv("CE_ONEDRIVE_CLIENT_ID") : Optional.ofNullable(arguments.get("client-id")).map(String::valueOf).orElse(null); if (clientId == null || clientId.isEmpty()) { throw new LocalizedException("warning.config.host.onedrive.missing_client_id"); } - String clientSecret = useEnv ? System.getenv("CE_ONEDRIVE_CLIENT_SECRET") : (String) arguments.get("client-secret"); + String clientSecret = useEnv ? System.getenv("CE_ONEDRIVE_CLIENT_SECRET") : Optional.ofNullable(arguments.get("client-secret")).map(String::valueOf).orElse(null); if (clientSecret == null || clientSecret.isEmpty()) { throw new LocalizedException("warning.config.host.onedrive.missing_client_secret"); } - String refreshToken = useEnv ? System.getenv("CE_ONEDRIVE_REFRESH_TOKEN") : (String) arguments.get("refresh-token"); + String refreshToken = useEnv ? System.getenv("CE_ONEDRIVE_REFRESH_TOKEN") : Optional.ofNullable(arguments.get("refresh-token")).map(String::valueOf).orElse(null); if (refreshToken == null || refreshToken.isEmpty()) { throw new LocalizedException("warning.config.host.onedrive.missing_refresh_token"); } - String uploadPath = (String) arguments.getOrDefault("upload-path", "resource_pack.zip"); + String uploadPath = arguments.getOrDefault("upload-path", "resource_pack.zip").toString(); if (uploadPath == null || uploadPath.isEmpty()) { throw new LocalizedException("warning.config.host.onedrive.missing_upload_path"); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/S3Host.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/S3Host.java index 7c8fbb214..3cd890e9f 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/S3Host.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/S3Host.java @@ -9,6 +9,7 @@ import net.momirealms.craftengine.core.plugin.locale.LocalizedException; import net.momirealms.craftengine.core.util.HashUtils; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.MiscUtils; +import net.momirealms.craftengine.core.util.ResourceConfigUtils; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; import software.amazon.awssdk.auth.signer.AwsS3V4Signer; @@ -31,10 +32,7 @@ import java.net.URL; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.time.Duration; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionException; @@ -158,26 +156,26 @@ public class S3Host implements ResourcePackHost { @SuppressWarnings("deprecation") public ResourcePackHost create(Map arguments) { boolean useEnv = (boolean) arguments.getOrDefault("use-environment-variables", false); - String endpoint = (String) arguments.get("endpoint"); + String endpoint = Optional.ofNullable(arguments.get("endpoint")).map(String::valueOf).orElse(null); if (endpoint == null || endpoint.isEmpty()) { throw new LocalizedException("warning.config.host.s3.missing_endpoint"); } - String protocol = (String) arguments.getOrDefault("protocol", "https"); + String protocol = arguments.getOrDefault("protocol", "https").toString(); boolean usePathStyle = (boolean) arguments.getOrDefault("path-style", false); - String bucket = (String) arguments.get("bucket"); + String bucket = Optional.ofNullable(arguments.get("bucket")).map(String::valueOf).orElse(null); if (bucket == null || bucket.isEmpty()) { throw new LocalizedException("warning.config.host.s3.missing_bucket"); } - String region = (String) arguments.getOrDefault("region", "auto"); - String accessKeyId = useEnv ? System.getenv("CE_S3_ACCESS_KEY_ID") : (String) arguments.get("access-key-id"); + String region = arguments.getOrDefault("region", "auto").toString(); + String accessKeyId = useEnv ? System.getenv("CE_S3_ACCESS_KEY_ID") : Optional.ofNullable(arguments.get("access-key-id")).map(String::valueOf).orElse(null); if (accessKeyId == null || accessKeyId.isEmpty()) { throw new LocalizedException("warning.config.host.s3.missing_access_key"); } - String accessKeySecret = useEnv ? System.getenv("CE_S3_ACCESS_KEY_SECRET") : (String) arguments.get("access-key-secret"); + String accessKeySecret = useEnv ? System.getenv("CE_S3_ACCESS_KEY_SECRET") : Optional.ofNullable(arguments.get("access-key-secret")).map(String::valueOf).orElse(null); if (accessKeySecret == null || accessKeySecret.isEmpty()) { throw new LocalizedException("warning.config.host.s3.missing_secret"); } - String uploadPath = (String) arguments.getOrDefault("upload-path", "craftengine/resource_pack.zip"); + String uploadPath = arguments.getOrDefault("upload-path", "craftengine/resource_pack.zip").toString(); if (uploadPath == null || uploadPath.isEmpty()) { throw new LocalizedException("warning.config.host.s3.missing_upload_path"); } @@ -188,8 +186,8 @@ public class S3Host implements ResourcePackHost { String cdnDomain = null; String cdnProtocol = "https"; if (cdn != null) { - cdnDomain = (String) cdn.get("domain"); - cdnProtocol = (String) cdn.getOrDefault("protocol", "https"); + cdnDomain = Optional.ofNullable(arguments.get("domain")).map(String::valueOf).orElse(null); + cdnProtocol = arguments.getOrDefault("protocol", "https").toString(); } AwsBasicCredentials credentials = AwsBasicCredentials.create(accessKeyId, accessKeySecret); @@ -208,14 +206,20 @@ public class S3Host implements ResourcePackHost { Map proxySetting = MiscUtils.castToMap(arguments.get("proxy"), true); if (proxySetting != null) { - String host = (String) proxySetting.get("host"); - int port = (Integer) proxySetting.get("port"); - String scheme = (String) proxySetting.get("scheme"); - String username = (String) proxySetting.get("username"); - String password = (String) proxySetting.get("password"); - if (host == null || host.isEmpty() || port <= 0 || port > 65535 || scheme == null || scheme.isEmpty()) { - throw new IllegalArgumentException("Invalid proxy configuration"); + String host = Optional.ofNullable(proxySetting.get("host")).map(String::valueOf).orElse(null); + if (host == null || host.isEmpty()) { + throw new LocalizedException("warning.config.host.proxy.missing_host"); } + int port = ResourceConfigUtils.getAsInt(proxySetting.get("port"), "port"); + if (port <= 0 || port > 65535) { + throw new LocalizedException("warning.config.host.proxy.missing_port"); + } + String scheme = Optional.ofNullable(proxySetting.get("scheme")).map(String::valueOf).orElse(null); + if (scheme == null || scheme.isEmpty()) { + throw new LocalizedException("warning.config.host.proxy.missing_scheme"); + } + String username = Optional.ofNullable(proxySetting.get("username")).map(String::valueOf).orElse(null); + String password = Optional.ofNullable(proxySetting.get("password")).map(String::valueOf).orElse(null); ProxyConfiguration.Builder builder = ProxyConfiguration.builder().host(host).port(port).scheme(scheme); if (username != null) builder.username(username); if (password != null) builder.password(password); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/SelfHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/SelfHost.java index dea487a5a..39245b0b8 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/SelfHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/SelfHost.java @@ -14,6 +14,7 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.nio.file.Path; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.UUID; import java.util.concurrent.CompletableFuture; @@ -61,7 +62,7 @@ public class SelfHost implements ResourcePackHost { @Override public ResourcePackHost create(Map arguments) { SelfHostHttpServer selfHostHttpServer = SelfHostHttpServer.instance(); - String ip = (String) arguments.get("ip"); + String ip = Optional.ofNullable(arguments.get("ip")).map(String::valueOf).orElse(null); if (ip == null) { throw new LocalizedException("warning.config.host.self.missing_ip"); } @@ -70,7 +71,7 @@ public class SelfHost implements ResourcePackHost { throw new LocalizedException("warning.config.host.self.invalid_port", String.valueOf(port)); } boolean oneTimeToken = (boolean) arguments.getOrDefault("one-time-token", true); - String protocol = (String) arguments.getOrDefault("protocol", "http"); + String protocol = arguments.getOrDefault("protocol", "http").toString(); boolean denyNonMinecraftRequest = (boolean) arguments.getOrDefault("deny-non-minecraft-request", true); Map rateMap = MiscUtils.castToMap(arguments.get("rate-map"), true); int maxRequests = 5; diff --git a/gradle.properties b/gradle.properties index bb25020a2..b9f7ce9ff 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.52 -config_version=30 -lang_version=8 +config_version=31 +lang_version=9 project_group=net.momirealms latest_supported_version=1.21.5