From 56bf11822efd7c15701c5f409dcd6b9fbc993923 Mon Sep 17 00:00:00 2001 From: loki Date: Wed, 25 Feb 2026 13:01:44 +0100 Subject: [PATCH] v1.2.4: Fix colors, add Russian locale, remove update checker - Fixed HEX color format conversion (&#RRGGBB -> <#RRGGBB>) - Added full Russian translation (ru.yml) - Added ru.yml to auto-copy on first run - Removed UpdateChecker (old IP plugin remnant) - Fixed Config.getChildren() deep parameter bug - Updated plugin.yml version to use Gradle variable --- .../java/dev/efnilite/vilib/util/Strings.java | 3 + .../java/dev/loki/loparkour/LoParkour.java | 3 - .../dev/loki/loparkour/config/Config.java | 3 +- .../dev/loki/loparkour/config/Locales.java | 1 + .../dev/loki/loparkour/config/Option.java | 2 +- src/main/resources/locales/ru.yml | 308 +++++++++++++++--- src/main/resources/plugin.yml | 4 +- 7 files changed, 267 insertions(+), 57 deletions(-) diff --git a/loparkour-vilib/src/main/java/dev/efnilite/vilib/util/Strings.java b/loparkour-vilib/src/main/java/dev/efnilite/vilib/util/Strings.java index 18330c4..7fe3b0d 100644 --- a/loparkour-vilib/src/main/java/dev/efnilite/vilib/util/Strings.java +++ b/loparkour-vilib/src/main/java/dev/efnilite/vilib/util/Strings.java @@ -57,6 +57,9 @@ public class Strings { */ @NotNull public static String colour(@NotNull String string) { + // Convert old hex format &#RRGGBB to MiniMessage format <#RRGGBB> + string = string.replaceAll("&#([0-9A-Fa-f]{6})", "<#$1>"); + Component component = MINI_MESSAGE.deserialize(string); // sanitize input return ChatColor.translateAlternateColorCodes(LegacyComponentSerializer.SECTION_CHAR, LEGACY_COMPONENT_SERIALIZER.serialize(component)); diff --git a/src/main/java/dev/loki/loparkour/LoParkour.java b/src/main/java/dev/loki/loparkour/LoParkour.java index eb723f7..aaf1452 100644 --- a/src/main/java/dev/loki/loparkour/LoParkour.java +++ b/src/main/java/dev/loki/loparkour/LoParkour.java @@ -23,7 +23,6 @@ import org.bstats.charts.SimplePie; import org.bstats.charts.SingleLineChart; import dev.efnilite.vilib.inventory.Menu; import dev.efnilite.vilib.util.Logging; -import dev.efnilite.vilib.util.UpdateChecker; import org.jetbrains.annotations.Nullable; import java.io.File; @@ -150,8 +149,6 @@ public final class LoParkour extends ViPlugin { ParkourUser.joinCount = 0; return joins; })); - - UpdateChecker.check(this, 87226); } @Override diff --git a/src/main/java/dev/loki/loparkour/config/Config.java b/src/main/java/dev/loki/loparkour/config/Config.java index c540f39..308fca3 100644 --- a/src/main/java/dev/loki/loparkour/config/Config.java +++ b/src/main/java/dev/loki/loparkour/config/Config.java @@ -187,7 +187,8 @@ public enum Config { return new ArrayList<>(); } - return new ArrayList<>(section.getKeys(deep != null)); + boolean isDeep = deep.length > 0 && deep[0]; + return new ArrayList<>(section.getKeys(isDeep)); } // checks if the specified path exists to avoid developer error diff --git a/src/main/java/dev/loki/loparkour/config/Locales.java b/src/main/java/dev/loki/loparkour/config/Locales.java index de5db59..bdcdee0 100644 --- a/src/main/java/dev/loki/loparkour/config/Locales.java +++ b/src/main/java/dev/loki/loparkour/config/Locales.java @@ -64,6 +64,7 @@ public class Locales { // create non-existent files if (files != null && files.length == 0) { plugin.saveResource("locales/en.yml", false); + plugin.saveResource("locales/ru.yml", false); plugin.saveResource("locales/nl.yml", false); plugin.saveResource("locales/fr.yml", false); plugin.saveResource("locales/zh_cn.yml", false); diff --git a/src/main/java/dev/loki/loparkour/config/Option.java b/src/main/java/dev/loki/loparkour/config/Option.java index 157ad8b..38ebb54 100644 --- a/src/main/java/dev/loki/loparkour/config/Option.java +++ b/src/main/java/dev/loki/loparkour/config/Option.java @@ -246,7 +246,7 @@ public class Option { JUMP_TYPE_ENABLED = new HashMap<>(); JUMP_TYPE_CHANCE = new HashMap<>(); - for (String type : Config.CONFIG.getChildren("jump-types.types", false)) { + for (String type : Config.CONFIG.getChildren("jump-types.types")) { String path = "jump-types.types." + type; JUMP_TYPE_ENABLED.put(type, Config.CONFIG.getBoolean(path + ".enabled")); JUMP_TYPE_CHANCE.put(type, Config.CONFIG.getDouble(path + ".chance")); diff --git a/src/main/resources/locales/ru.yml b/src/main/resources/locales/ru.yml index db6d096..2494e0f 100644 --- a/src/main/resources/locales/ru.yml +++ b/src/main/resources/locales/ru.yml @@ -1,51 +1,259 @@ -menu: - main: - title: "&#FF6464Главное меню" - play: "�D4FFИграть" - community: "&#FFD700Сообщество" - settings: "&#A0A0A0Настройки" - lobby: "ZEE90Лобби" - quit: "&#FF4444Выход" - - play: - title: "�D4FFВыбор режима" - single: "�FF00Одиночный" - spectator: "&#FFFF00Наблюдатель" - - settings: - title: "&#A0A0A0Настройки" - language: "&#FFFFFFЯзык" - parkour: "�D4FFПаркур" - chat: "ZEE90Чат" - - parkour_settings: - title: "�D4FFНастройки паркура" - style: "&#FF6464Стиль блоков" - leads: "&#FFD700Количество блоков" - time: "&#A0A0A0Время" - schematics: "�FFFFСхематики" - scoreboard: "ZEE90Табло" - fall_message: "&#FF4444Сообщение о падении" - particles: "&#FFAAFFЧастицы" - sound: "&#FFFFAAЗвук" - special_blocks: "�D4FFСпециальные блоки" - - community: - title: "&#FFD700Сообщество" - leaderboards: "�D4FFТаблица лидеров" - - lobby: - title: "ZEE90Лобби" - visibility: "&#FFFFFFВидимость игроков" - management: "&#A0A0A0Управление" +# Русский (Russian, ru) +# By loki +# Материалы должны быть из: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html +# Узнать больше о цветах: https://docs.adventure.kyori.net/minimessage/format.html#format -messages: - join: "�D4FFВы присоединились к паркуру!" - leave: "&#FF6464Вы покинули паркур" - fall: "&#FF4444Вы упали! Счет: %score%" - score: "&#FFD700Новый рекорд: %score%!" - no_permission: "&#FF4444У вас нет прав!" - -commands: - help: "�D4FF/loparkour &#FFFFFF- Главное меню" - reload: "�D4FFКонфигурация перезагружена!" +name: "Русский" + +main: + name: "&#FFFFFFПаркур" + +play: + name: "&#FFFFFFИграть" + + item: + material: "sugar_cane" + name: "�D4FFИграть" + lore: "" + + single: + name: "&#FFFFFFОдиночный" + + item: + material: "ender_pearl" + name: "�D4FFОдиночная игра" + lore: "" + + default: + material: "barrel" + name: "�D4FFОбычный" + lore: "񢩈Стандартный режим игры." + + spectator: + name: "&#FFFFFFНаблюдатель" + + join: "�D4FFТеперь вы наблюдатель. Используйте \"/parkour\" чтобы выйти/сменить режим." + action_bar: "�D4FFВы наблюдатель &#A0A0A0• �D4FFИспользуйте \"/parkour\" чтобы выйти." + + other_join: "+ &#A0A0A0%s начал наблюдать за вами" + other_leave: "&#FF4444- &#A0A0A0%s перестал наблюдать за вами" + + item: + material: "glass" + name: "�D4FFНаблюдатель" + lore: "" + + head: + material: "" + name: "�D4FF%s" + lore: "" + +community: + name: "&#FFFFFFСообщество" + + item: + material: "oak_boat" + name: "�D4FFСообщество" + lore: "" + + leaderboards: + name: "&#FFFFFFТаблица лидеров" + + item: + material: "gold_nugget" + name: "�D4FFТаблица лидеров" + lore: "" + + sort: + material: "bookshelf" + name: "�D4FFСортировка по %s" + lore: "" + values: ["счёту", "времени", "сложности"] + + head: + material: "" + name: "�D4FF#%r - %p" + lore: "�D4FFСчёт: &#A0A0A0%s||�D4FFВремя: &#A0A0A0%t||�D4FFСложность: &#A0A0A0%d񢩈/1.0" + +settings: + name: "&#FFFFFFНастройки" + + item: + material: "comparator" + name: "�D4FFНастройки" + lore: "" + + lang: + name: "&#FFFFFFЯзык" + + item: + material: "writable_book" + name: "�D4FFЯзык" + lore: "񢩈Текущий: �D4FF%s" + + chat: + material: "crossbow" + name: "�D4FFЧат" + lore: "񢩈Текущий: �D4FF%s||񢩈Выберите с кем вы можете общаться" + values: ["только лобби", "только игроки", "публичный"] + + formats: + lobby: "�D4FF(Лобби) �D4FF%s 񢩈> &#A0A0A0%s" + players: "�D4FF(Игроки) �D4FF%s 񢩈> &#A0A0A0%s" + + parkour_settings: + + enabled: "�D4FF✔" + disabled: "&#FF4444✘" + + item: + material: "redstone" + name: "�D4FFНастройки паркура" + lore: "񢩈Измените внешний вид вашего паркура." + + items: + + no_change: + material: "barrier" + name: "Вы не можете изменить это сейчас!" + lore: "&#A0A0A0У вас счёт больше 0,||&#A0A0A0поэтому вы не можете изменить эту настройку." + + styles: + name: "&#FFFFFFСтили" + + style_item: + material: "" + name: "&#FFFFFF%s" + lore: "�D4FFКатегория: &#A0A0A0%s" + + item: + material: "crafting_table" + name: "�D4FFСтиль" + lore: "�D4FFТекущий: &#A0A0A0%s||&#A0A0A0Выберите какие блоки будут использоваться." + + leads: + material: "feather" + name: "�D4FFДистанция" + lore: "�D4FFТекущая: &#A0A0A0%s блоков||&#A0A0A0Сколько блоков будет||&#A0A0A0сгенерировано впереди вас." + + time: + material: "clock" + name: "�D4FFВремя" + lore: "�D4FFТекущее: &#A0A0A0%s||&#A0A0A0Ваше текущее визуальное время." + + schematics: + material: "" + name: "�D4FFСложность схематик" + lore: "�D4FFТекущая: &#A0A0A0%s||&#A0A0A0Сложность схематик" + values: ["&#FF4444выкл", "�D4FFлёгкая", "средняя", "�D4FFсложная", "очень сложная"] + + scoreboard: + material: "" + name: "Показывать табло" + lore: "&#A0A0A0Текущее: %s||&#A0A0A0Если включено, показывает табло." + + fall_message: + item: + material: "" + name: "Показывать сообщение о падении" + lore: "&#A0A0A0Текущее: %s||&#A0A0A0Если включено, показывает сообщение при падении||&#A0A0A0с дополнительной информацией." + + divider: "񢩈-----------------------------------" + score: "�D4FFСчёт &#FFFFFF%s" + time: "�D4FFВремя &#FFFFFF%s" + high_score: "�D4FFРекорд &#FFFFFF%s" + + formats: + miss: "&#A0A0A0Вы не дотянули до рекорда на %s очков!" + beat: "&#A0A0A0Вы побили свой рекорд на %s очков!" + tied: "&#A0A0A0Вы повторили свой рекорд!" + + particles: + material: "" + name: "Показывать частицы" + lore: "&#A0A0A0Текущее: %s||&#A0A0A0Если включено, каждый сгенерированный блок||&#A0A0A0будет показывать частицы." + + sound: + material: "" + name: "Воспроизводить звуки" + lore: "&#A0A0A0Текущее: %s||&#A0A0A0Если включено, каждый сгенерированный блок||&#A0A0A0будет воспроизводить звук." + + special_blocks: + material: "" + name: "Использовать специальные блоки" + lore: "&#A0A0A0Текущее: %s||&#A0A0A0Если включено, использует специальные блоки||&#A0A0A0такие как лёд и плиты." + + score_difficulty: + material: "" + name: "Сложность от счёта" + lore: "&#A0A0A0Текущее: %s||&#A0A0A0Если включено, чем выше ваш счёт,||&#A0A0A0тем сложнее становится." + +lobby: + name: "&#FFFFFFЛобби" + + other_join: '+ &#A0A0A0%s присоединился к вашему лобби' + other_leave: '&#FF4444- &#A0A0A0%s покинул ваше лобби' + + item: + material: "iron_ingot" + name: "�D4FFВаше лобби" + lore: "" + + visibility: + material: "firework_rocket" + name: "�D4FFВидимость" + lore: "񢩈Текущая: �D4FF%s||񢩈Выберите кто может присоединиться к вашему лобби." + values: ["приватное", "только по приглашению", "публичное"] + + player_management: + name: "&#FFFFFFУправление игроками" + + kicked: "&#A0A0A0Вы были кикнуты из лобби владельцем." + advice: "&#A0A0A0Установите видимость лобби на 'только по приглашению' или 'приватное' чтобы избежать случайных присоединений." + muted: "&#A0A0A0Вы были замучены владельцем лобби." + unmuted: "&#A0A0A0С вас сняли мут владелец лобби." + + item: + material: "cake" + name: "�D4FFУправление игроками" + lore: "񢩈Кикайте или мутьте игроков здесь." + + head: + material: "" + name: "�D4FF%s" + lore: "" + top: "񢩈Замучен в лобби||" + bottom: "�D4FFЛевый клик񢩈 чтобы кикнуть из лобби||�D4FFПравый клик񢩈 чтобы замутить/размутить в лобби" + +scoreboard: + + title: "�D4FFLoParkour" + + lines: + - "" + - "�D4FFСчёт &#FFFFFF%score%" + - "�D4FFВремя &#FFFFFF%time%" + - "�D4FFРекорд &#FFFFFF%high_score%" + - "&#FF4444" + - "�D4FFserver.ip" + +other: + + no_do: "&#A0A0A0Вы не можете сделать это сейчас." + no_teleporting: "&#FFFFFFВы не можете войти в мир паркура телепортацией!" + customize: "&#A0A0A0Настройте свой паркур используя \"/parkour\"" + + quit: + material: "barrier" + name: "�D4FFВыход" + lore: "" + + close: + material: "arrow" + name: "�D4FFЗакрыть" + lore: "" + + iep: + material: "elytra" + name: "�D4FFПолёт" + lore: "&#A0A0A0Паркур с элитрами!" diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 0647bbd..6884eb9 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,8 +1,8 @@ name: 'LoParkour' description: 'Advanced infinitely generating parkour plugin.' author: loki -version: 1.1.0 -api-version: 1.16 +version: ${version} +api-version: 1.20 main: dev.loki.loparkour.LoParkour softdepend: [floodgate, Vault, PlaceholderAPI, Multiverse-Core, VoidGen] commands: