From c9851fe3606e3df54a3632058981bfba28db325f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 2 Mar 2026 01:19:43 +0000 Subject: [PATCH 01/33] Initial plan From c5c6ef2d0708a232f11dec9ae52fd973f8811eda Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 2 Mar 2026 01:28:45 +0000 Subject: [PATCH 02/33] Fix top ten ordering: use ConcurrentHashMap for thread safety and invalidate cache on update Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com> --- .../world/bentobox/level/LevelsManager.java | 2 + .../bentobox/level/objects/TopTenData.java | 4 +- .../bentobox/level/LevelsManagerTest.java | 37 +++++++++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/main/java/world/bentobox/level/LevelsManager.java b/src/main/java/world/bentobox/level/LevelsManager.java index d32bced..9b6d612 100644 --- a/src/main/java/world/bentobox/level/LevelsManager.java +++ b/src/main/java/world/bentobox/level/LevelsManager.java @@ -82,6 +82,8 @@ private boolean addToTopTen(Island island, long lv) { && hasTopTenPerm(island.getWorld(), island.getOwner())) { topTenLists.computeIfAbsent(island.getWorld(), k -> new TopTenData(island.getWorld())).getTopTen() .put(island.getUniqueId(), lv); + // Invalidate the cache for this world because of the update + cache.remove(island.getWorld()); return true; } return false; diff --git a/src/main/java/world/bentobox/level/objects/TopTenData.java b/src/main/java/world/bentobox/level/objects/TopTenData.java index 3d50b1f..ad48bb4 100644 --- a/src/main/java/world/bentobox/level/objects/TopTenData.java +++ b/src/main/java/world/bentobox/level/objects/TopTenData.java @@ -1,8 +1,8 @@ package world.bentobox.level.objects; -import java.util.LinkedHashMap; import java.util.Locale; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import org.bukkit.World; @@ -20,7 +20,7 @@ public class TopTenData { @Expose private String uniqueId = ""; @Expose - private Map topTen = new LinkedHashMap<>(); + private Map topTen = new ConcurrentHashMap<>(); public TopTenData(World k) { uniqueId = k.getName().toLowerCase(Locale.ENGLISH); diff --git a/src/test/java/world/bentobox/level/LevelsManagerTest.java b/src/test/java/world/bentobox/level/LevelsManagerTest.java index ab96e75..c88886c 100644 --- a/src/test/java/world/bentobox/level/LevelsManagerTest.java +++ b/src/test/java/world/bentobox/level/LevelsManagerTest.java @@ -381,6 +381,43 @@ public void testSetIslandLevel() { } + /** + * Test method for + * {@link world.bentobox.level.LevelsManager#getTopTen(org.bukkit.World, int)}. + * Verifies that the top ten is sorted in descending order by level. + */ + @Test + public void testGetTopTenSortOrder() { + lm.createAndCleanRankings(world); + Map ttl = lm.getTopTenLists(); + Map tt = ttl.get(world).getTopTen(); + // Add islands in non-sorted order, mimicking the reported issue + String island65 = UUID.randomUUID().toString(); + String island1065 = UUID.randomUUID().toString(); + String island500 = UUID.randomUUID().toString(); + String island200 = UUID.randomUUID().toString(); + // Insert in arbitrary order + tt.put(island65, 65L); + tt.put(island1065, 1065L); + tt.put(island500, 500L); + tt.put(island200, 200L); + when(im.getIslandById(island65)).thenReturn(Optional.of(island)); + when(im.getIslandById(island1065)).thenReturn(Optional.of(island)); + when(im.getIslandById(island500)).thenReturn(Optional.of(island)); + when(im.getIslandById(island200)).thenReturn(Optional.of(island)); + + Map topTen = lm.getTopTen(world, Level.TEN); + // Verify descending order + long previousLevel = Long.MAX_VALUE; + for (Long level : topTen.values()) { + assertTrue("Top ten not in descending order: " + level + " should be <= " + previousLevel, + level <= previousLevel); + previousLevel = level; + } + // Verify highest is first + assertEquals(1065L, topTen.values().iterator().next().longValue()); + } + /** * Test method for * {@link world.bentobox.level.LevelsManager#getRank(World, UUID)} From 2fd5615fe70eb368e0915f694c3c98e659bd3973 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 14 Mar 2026 16:10:35 +0000 Subject: [PATCH 03/33] Initial plan From d572a33c41303db99820a4171c6241a1b05db4b4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 14 Mar 2026 16:15:48 +0000 Subject: [PATCH 04/33] Fix incorrect block icons for hanging signs, vines, and cave vines - Remove _hanging stripping in ValuePanel.getIcon() so hanging signs display as hanging signs instead of regular signs - Split Tag fallback: ALL_HANGING_SIGNS -> OAK_HANGING_SIGN - Fix DetailsPanel wall hanging sign conversion to produce _HANGING_SIGN - Change twisting vines plant icon from VINE to TWISTING_VINES - Change weeping vines plant icon from VINE to WEEPING_VINES - Change cave vines plant icon from VINE to GLOW_BERRIES - Add CAVE_VINES to ValuePanel switch so it appears in /ob value menu Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com> --- .../java/world/bentobox/level/panels/DetailsPanel.java | 8 +++++--- .../java/world/bentobox/level/panels/ValuePanel.java | 10 ++++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/world/bentobox/level/panels/DetailsPanel.java b/src/main/java/world/bentobox/level/panels/DetailsPanel.java index a488230..3bcca04 100644 --- a/src/main/java/world/bentobox/level/panels/DetailsPanel.java +++ b/src/main/java/world/bentobox/level/panels/DetailsPanel.java @@ -767,9 +767,10 @@ private Material convertItem(Material m) { Material.getMaterial(m.name().substring(0, m.name().length() - 10) + "_SIGN"), Material.OAK_SIGN); } if (Tag.WALL_HANGING_SIGNS.isTagged(m)) { - // Wall signs end in _HANGING_WALL_SIGN + // Wall hanging signs end in _WALL_HANGING_SIGN return Objects.requireNonNullElse( - Material.getMaterial(m.name().substring(0, m.name().length() - 18) + "_SIGN"), Material.OAK_SIGN); + Material.getMaterial(m.name().substring(0, m.name().length() - 18) + "_HANGING_SIGN"), + Material.OAK_HANGING_SIGN); } return switch (m) { @@ -790,7 +791,8 @@ private Material convertItem(Material m) { DRAGON_WALL_HEAD, PIGLIN_WALL_HEAD -> Material.SKELETON_SKULL; case SWEET_BERRY_BUSH -> Material.SWEET_BERRIES; - case WEEPING_VINES_PLANT, TWISTING_VINES_PLANT -> Material.VINE; + case WEEPING_VINES_PLANT -> Material.WEEPING_VINES; + case TWISTING_VINES_PLANT -> Material.TWISTING_VINES; case CAVE_VINES, CAVE_VINES_PLANT -> Material.GLOW_BERRIES; case BIG_DRIPLEAF_STEM -> Material.BIG_DRIPLEAF; case BAMBOO_SAPLING, POTTED_BAMBOO -> Material.BAMBOO; diff --git a/src/main/java/world/bentobox/level/panels/ValuePanel.java b/src/main/java/world/bentobox/level/panels/ValuePanel.java index 9c635fd..70a0bf1 100644 --- a/src/main/java/world/bentobox/level/panels/ValuePanel.java +++ b/src/main/java/world/bentobox/level/panels/ValuePanel.java @@ -670,7 +670,6 @@ private PanelItem createMaterialButton(ItemTemplateRecord template, TemplatedPan private Material getIcon(String key) { // Filter out some names key = key.replaceAll("wall_", ""); - key = key.replaceAll("_hanging", ""); Material icon = Registry.MATERIAL.get(NamespacedKey.fromString(key)); if (icon == null && key.endsWith("_spawner")) { icon = Registry.MATERIAL.get(NamespacedKey.fromString(key.substring(0, key.length() - 2) + "_egg")); @@ -691,8 +690,8 @@ private Material getIcon(String key) { case END_PORTAL: return Material.BLACK_STAINED_GLASS_PANE; case SOUL_FIRE: return Material.SOUL_TORCH; case WALL_TORCH: return Material.TORCH; - case TWISTING_VINES_PLANT: return Material.VINE; - case CAVE_VINES_PLANT: return Material.VINE; + case TWISTING_VINES_PLANT: return Material.TWISTING_VINES; + case CAVE_VINES, CAVE_VINES_PLANT: return Material.GLOW_BERRIES; case BAMBOO_SAPLING: return Material.BAMBOO; case KELP_PLANT: return Material.KELP; case SWEET_BERRY_BUSH: return Material.SWEET_BERRIES; @@ -715,9 +714,12 @@ private Material getIcon(String key) { if (Tag.FLOWER_POTS.isTagged(icon)) { return Material.FLOWER_POT; } - if (Tag.WALL_SIGNS.isTagged(icon) || Tag.ALL_HANGING_SIGNS.isTagged(icon)) { + if (Tag.WALL_SIGNS.isTagged(icon)) { return Material.OAK_SIGN; } + if (Tag.ALL_HANGING_SIGNS.isTagged(icon)) { + return Material.OAK_HANGING_SIGN; + } if (Tag.CANDLE_CAKES.isTagged(icon)) { return Material.CAKE; } From 0d5000deb65a71fd6611afdd1b7aa3c3f289c802 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 15 Mar 2026 00:55:23 +0000 Subject: [PATCH 05/33] Initial plan From a09b0a4e3c1d7b7f7ff5a95b50a63c2703e8a711 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 5 Apr 2026 11:39:42 +0000 Subject: [PATCH 06/33] Initial plan From 76190aa2e3ce5e41d8240c88681897aa5a00732b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 5 Apr 2026 11:45:36 +0000 Subject: [PATCH 07/33] Add Russian locale file (ru.yml) with MiniMessage formatting Agent-Logs-Url: https://github.com/BentoBoxWorld/Level/sessions/4ff38416-6ac0-4f9d-a1b1-994973f034ff Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com> --- src/main/resources/locales/ru.yml | 215 ++++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 src/main/resources/locales/ru.yml diff --git a/src/main/resources/locales/ru.yml b/src/main/resources/locales/ru.yml new file mode 100644 index 0000000..5735c5c --- /dev/null +++ b/src/main/resources/locales/ru.yml @@ -0,0 +1,215 @@ +# ######################################################################################## # +# Это YML файл. Будьте осторожны при редактировании. Проверяйте свои правки # +# в YAML валидаторе, например, на http://yaml-online-parser.appspot.com # +# ######################################################################################## # + +admin: + level: + parameters: <игрок> + description: рассчитать уровень острова для игрока + sethandicap: + parameters: <игрок> [+/-]<гандикап> + description: 'установить или изменить гандикап острова. Например, +10 уберёт 10 очков, 30 установит гандикап в 30, а -20 добавит 20 очков.' + changed: 'Начальный гандикап острова изменён с [number] на [new_number].' + invalid-level: 'Неверный гандикап. Используйте целое число.' + levelstatus: + description: показать, сколько островов находится в очереди на сканирование + islands-in-queue: 'Островов в очереди: [number]' + top: + description: открывает панель с десяткой лучших по уровню острова + unknown-world: 'Неизвестный мир!' + display: '[rank]. [name] - [level]' + remove: + description: удалить игрока из десятки лучших по уровню острова + parameters: <игрок> + stats: + description: показать статистику по островам на этом сервере + title: Статистика островов сервера + world: '[name]' + no-data: 'Нет данных для обработки.' + average-level: 'Средний уровень острова: [number]' + median-level: 'Медианный уровень острова: [number]' + mode-level: 'Модальный уровень острова: [number]' + highest-level: 'Наивысший уровень острова: [number]' + lowest-level: 'Низший уровень острова: [number]' + distribution: 'Распределение уровней островов:' + islands: остров(а) +island: + level: + parameters: <игрок> + description: рассчитать уровень вашего острова + calculating: 'Вычисление уровня...' + estimated-wait: 'Предполагаемое ожидание: [number] секунд.' + in-queue: 'Вы номер [number] в очереди.' + island-level-is: 'Уровень острова: [level]' + required-points-to-next-level: 'Прогресс уровня: [progress]/[levelcost] очков.' + deaths: '([number] смертей)' + cooldown: 'Вы должны подождать [time] секунд, прежде чем повторить это.' + in-progress: 'Вычисление уровня острова уже выполняется...' + time-out: 'Вычисление уровня заняло слишком много времени. Пожалуйста, попробуйте позже.' + detail: + description: показать информацию о блоках на вашем острове + top: + description: показать десятку лучших по уровню острова + gui-title: 'Десятка лучших' + gui-heading: '[name]: [rank]' + island-level: 'Уровень [level]' + warp-to: 'Телепортация на остров [name]' + + level-details: + above-sea-level-blocks: Блоки выше уровня моря + spawners: Спавнера + underwater-blocks: Подводные блоки + all-blocks: Все блоки + no-island: 'Нет острова!' + names-island: 'Остров [name]' + syntax: '[name] x [number]' + hint: 'Перейдите на уровень, чтобы просмотреть отчёт по блокам.' + +level: + commands: + value: + parameters: '[HAND|<материал>]' + description: показывает ценность блоков. Добавьте "HAND" в конце, чтобы отобразить ценность предмета в руке. + gui: + titles: + top: 'Топ островов' + detail-panel: 'Остров [name]' + value-panel: 'Ценность блоков' + buttons: + island: + empty: 'Место [name]' + name: '[name]' + description: |- + [owner] + [members] + [place] + [level] + # Текст, заменяющий [name], если у острова нет имени. + owners-island: 'Остров [player]' + # Текст для [owner] в описании. + owner: 'Владелец: [player]' + # Заголовок перед списком участников для [members] в описании + members-title: 'Участники:' + # Список каждого участника под заголовком для [members] в описании + member: ' - [player]' + # Имя неизвестного игрока. + unknown: неизвестно + # Секция для [place] + place: '[number]. место' + # Секция для [level] + level: 'Уровень: [number]' + material: + name: '[number] x [material]' + description: |- + [description] + [count] + [value] + [calculated] + [limit] + [id] + id: 'ID блока: [id]' + value: 'Ценность блока: [number]' + limit: 'Лимит блоков: [number]' + count: 'Количество блоков: [number]' + calculated: 'Общая ценность: [number]' + value_blocks: + name: 'Все блоки с ценностью' + description: |- + Показать все блоки имеющие + ценность на острове. + all_blocks: + name: 'Все блоки' + description: |- + Показать все блоки + на острове. + above_sea_level: + name: 'Блоки выше уровня моря' + description: |- + Показать блоки, которые находятся + выше уровня моря. + underwater: + name: 'Блоки ниже уровня моря' + description: |- + Показать блоки, которые находятся + ниже уровня моря. + spawner: + name: 'Спавнера' + description: 'Показать только спавнера.' + block-name: 'Спавнер' + filters: + name: + name: 'Сортировать по имени' + description: 'Сортировать все блоки по имени.' + value: + name: 'Сортировать по ценности' + description: 'Сортировать все блоки по их ценности.' + count: + name: 'Сортировать по количеству' + description: 'Сортировать все блоки по их количеству.' + value: + name: '[material]' + description: |- + [description] + [value] + [underwater] + [limit] + [id] + id: 'ID блока: [id]' + value: 'Ценность блока: [number]' + underwater: 'Ниже уровня моря: [number]' + limit: 'Лимит блоков: [number]' + # Кнопка для возврата на предыдущую страницу в многостраничных интерфейсах. + previous: + name: 'Предыдущая страница' + description: 'Переключиться на страницу [number]' + next: + name: 'Следующая страница' + description: 'Переключиться на страницу [number]' + search: + name: 'Поиск по ID' + description: |- + Вписывайте ID блока. Очистить + поиск можно нажав ПКМ. + search: 'Значение: [value]' + tips: + click-to-view: 'Нажмите для просмотра.' + click-to-previous: 'Нажмите для просмотра предыдущей страницы.' + click-to-next: 'Нажмите для просмотра следующей страницы.' + click-to-select: 'Нажмите для выбора.' + left-click-to-cycle-up: 'ЛКМ для перебора вверх.' + right-click-to-cycle-down: 'ПКМ для перебора вниз.' + left-click-to-change: 'ЛКМ для редактирования.' + right-click-to-clear: 'ПКМ для очистки.' + click-to-asc: 'Нажмите для сортировки по возрастанию.' + click-to-desc: 'Нажмите для сортировки по убыванию.' + click-to-warp: 'Нажмите для телепортации.' + click-to-visit: 'Нажмите для посещения.' + right-click-to-visit: 'ПКМ для посещения.' + conversations: + # Префикс для сообщений, отправляемых сервером. + prefix: '[BentoBox]: ' + no-data: 'Запустите команду, чтобы просмотреть отчёт по блокам.' + # Строка для отмены ввода. (может быть только одна) + cancel-string: отмена + # Список строк для выхода из ввода. (разделяются запятыми) + exit-string: отмена, выход, выйти + # Сообщение с запросом ввода значения поиска. + write-search: 'Пожалуйста, введите значение поиска. (Напишите "отмена" для выхода)' + # Сообщение после обновления значения поиска. + search-updated: 'Значение поиска обновлено.' + # Сообщение, отправляемое пользователю при отмене ввода. + cancelled: 'Ввод отменён!' + # Сообщение, если у указанного материала нет ценности. + no-value: 'У этого предмета нет ценности.' + # Сообщение, если запрошенный материал не существует. + unknown-item: '"[material]" не существует в игре.' + # Сообщение при запросе ценности конкретного материала. + value: 'Ценность "[material]" составляет: [value] очков.' + value-underwater: 'Ценность "[material]" ниже уровня моря: [value]' + # Сообщение, если у игрока в руке нет предмета. + empty-hand: 'В вашей руке нет блока.' + # Сообщение о количестве размещённых блоков. + you-have: 'При последнем подсчёте у вас [number].' + # Сообщение о лимите. + you-can-place: 'Вы можете разместить до [number] блоков, и они будут учтены.' From 358a0e1e1cb471290fbcd9fbe6fbab0caa48a777 Mon Sep 17 00:00:00 2001 From: tastybento Date: Mon, 6 Apr 2026 20:51:03 -0700 Subject: [PATCH 08/33] Translate Czech (cs): bring up to date with en-US - Add missing island.detail.description - Update required-points-to-next-level to new [progress]/[levelcost] format Co-Authored-By: Claude Sonnet 4.6 --- src/main/resources/locales/cs.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/resources/locales/cs.yml b/src/main/resources/locales/cs.yml index cb9bcef..9eea45e 100644 --- a/src/main/resources/locales/cs.yml +++ b/src/main/resources/locales/cs.yml @@ -41,11 +41,13 @@ island: estimated-wait: '&a Odhadované čekání: [number] sekundy' in-queue: '&a Jste číslo [number] ve frontě' island-level-is: '&aÚroveň ostrova je &b[level]' - required-points-to-next-level: '&a[points] vyžadováno do další úrovně' + required-points-to-next-level: '&a Pokrok úrovně: &6 [progress]&b /&e [levelcost] &a bodů' deaths: '&c([number] smrtí)' cooldown: '&cMusíš čekat &b[time] &csekund, než můžeš příkaz znovu použít' in-progress: '&6 Probíhá výpočet úrovně ostrova ...' time-out: '&c Výpočet úrovně trval příliš dlouho. Zkuste to prosím znovu později.' + detail: + description: "zobrazit podrobnosti o blocích vašeho ostrova" top: description: ukázat TOP 10 gui-title: '&aTOP 10' From 4f3d815d14814681c47d96439314a8a37de96d8d Mon Sep 17 00:00:00 2001 From: tastybento Date: Mon, 6 Apr 2026 20:51:40 -0700 Subject: [PATCH 09/33] Translate Spanish (es): bring up to date with en-US - Add admin.stats section - Add island.detail.description - Add value_blocks button, spawner.block-name - Add you-have and you-can-place conversation messages - Update required-points-to-next-level to new [progress]/[levelcost] format Co-Authored-By: Claude Sonnet 4.6 --- src/main/resources/locales/es.yml | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/main/resources/locales/es.yml b/src/main/resources/locales/es.yml index e6a9bd2..808840e 100644 --- a/src/main/resources/locales/es.yml +++ b/src/main/resources/locales/es.yml @@ -19,6 +19,18 @@ admin: remove: description: Elimina a un jugador de los diez primeros parameters: "" + stats: + description: "mostrar estadísticas de islas en este servidor" + title: "Estadísticas de Islas del Servidor" + world: "&a [name]" + no-data: "&c No hay datos para procesar." + average-level: "Nivel promedio de isla: [number]" + median-level: "Nivel mediano de isla: [number]" + mode-level: "Nivel modal de isla: [number]" + highest-level: "Nivel más alto de isla: [number]" + lowest-level: "Nivel más bajo de isla: [number]" + distribution: "Distribución de niveles de isla:" + islands: "islas" island: level: parameters: "[player]" @@ -27,12 +39,13 @@ island: estimated-wait: "&aEspera estimada: [number] segundos" in-queue: "&aEstás en el puesto [number] de la cola" island-level-is: "&aNivel de isla es de &b[level]" - required-points-to-next-level: "&a[points] Puntos requeridos hasta el siguiente - nivel." + required-points-to-next-level: "&a Progreso de nivel: &6 [progress]&b /&e [levelcost] &a puntos" deaths: "&c([number] Muertes)" cooldown: "&cDebes esperar &b[time] &csegundos para poder volver a hacer esto." in-progress: "&6El Calculo del nivel de la islas está en progreso..." time-out: "&cEl calculo del nivel de la isla está tardando. Intente más tarde." + detail: + description: "muestra el detalle de los bloques de tu isla" top: description: Muestra el top de islas gui-title: "&aTop diez" @@ -89,6 +102,11 @@ level: limit: "&7 Limite de bloques: &e[number]" count: "&7 Número de bloques: &e[number]" calculated: "&7 Valor calculado: &e[number]" + value_blocks: + name: "&f&lTodos los Bloques con Valor" + description: |- + &7 Mostrar todos los bloques + &7 con valor en la isla. all_blocks: name: "&f&lTodos los bloques" description: |- @@ -109,6 +127,7 @@ level: spawner: name: "&f&lSpawners" description: "&7Mostrar solo spawners." + block-name: "&b Spawner" filters: name: name: "&f&lOrdenar por nombre" @@ -170,3 +189,5 @@ level: value: "&7 El valor de '[material]' es: &e[value]" value-underwater: "&7 El valor de '[material]' por debajo del nivel del mar: &e[value]" empty-hand: "&c No hay bloques en tu mano" + you-have: "&7 Tienes [number] en el último conteo." + you-can-place: "&7 Puedes colocar hasta [number] y que cuenten" From 80371922488306ff24471245a8e7711f92803e95 Mon Sep 17 00:00:00 2001 From: tastybento Date: Mon, 6 Apr 2026 20:52:10 -0700 Subject: [PATCH 10/33] Translate French (fr): bring up to date with en-US - Add admin.stats section - Add island.detail.description - Add value_blocks button, spawner.block-name - Add you-have and you-can-place conversation messages - Update required-points-to-next-level to new [progress]/[levelcost] format Co-Authored-By: Claude Sonnet 4.6 --- src/main/resources/locales/fr.yml | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/main/resources/locales/fr.yml b/src/main/resources/locales/fr.yml index f7d914b..dd9ecb3 100644 --- a/src/main/resources/locales/fr.yml +++ b/src/main/resources/locales/fr.yml @@ -19,6 +19,18 @@ admin: remove: description: retire le joueur du top 10 parameters: "" + stats: + description: "afficher les statistiques des îles sur ce serveur" + title: "Statistiques des Îles du Serveur" + world: "&a [name]" + no-data: "&c Aucune donnée à traiter." + average-level: "Niveau moyen des îles: [number]" + median-level: "Niveau médian des îles: [number]" + mode-level: "Niveau modal des îles: [number]" + highest-level: "Niveau le plus élevé des îles: [number]" + lowest-level: "Niveau le plus bas des îles: [number]" + distribution: "Distribution des niveaux d'îles:" + islands: "îles" island: level: parameters: "[joueur]" @@ -27,7 +39,7 @@ island: estimated-wait: "&a Attente estimée: [number] seconds" in-queue: "&a Vous êtes le numéro [number ] dans la file d'attente" island-level-is: "&aLe niveau d'île est &b[level]" - required-points-to-next-level: "&a[points] points avant le prochain niveau" + required-points-to-next-level: "&a Progression du niveau: &6 [progress]&b /&e [levelcost] &a points" deaths: "&c([number] morts)" cooldown: "&cVous devez attendre &b[time] &csecondes avant de pouvoir refaire cette action" @@ -40,6 +52,8 @@ island: gui-heading: "&6[name]: &B[rank]" island-level: "&BNiveau [level]" warp-to: "&ATéléportation vers l'île de [name]" + detail: + description: "affiche le détail des blocs de votre île" level-details: above-sea-level-blocks: Blocs au-dessus du niveau de la mer spawners: Spawners @@ -90,6 +104,11 @@ level: limit: "&7 Block limit: &e [number]" count: "&7 Nombre de blocs: &e [number]" calculated: "&7 Valeur calculée: &e [number]" + value_blocks: + name: "&f&l Tous les Blocs avec Valeur" + description: |- + &7 Afficher tous les blocs + &7 avec une valeur sur l'île. all_blocks: name: "&f&l Tous les blocs" description: |- @@ -110,6 +129,7 @@ level: spawner: name: "&f&l Spawners" description: "&7 Afficher uniquement les spawners." + block-name: "&b Spawner" filters: name: name: "&f&l STrier par nom" @@ -170,6 +190,8 @@ level: value: "&7 La valeur de '[material]' est : &e[value]" value-underwater: "&7 La valeur de '[material]' sous le niveau de la mer : &e[value]" empty-hand: "&c Il n'y a pas de blocs dans votre main" + you-have: "&7 Vous en avez [number] au dernier décompte." + you-can-place: "&7 Vous pouvez en placer jusqu'à [number] et les faire compter" meta: authors: '0': plagoutte From 64931a1b3262eae539a016fe13bd4a7b8e099d37 Mon Sep 17 00:00:00 2001 From: tastybento Date: Mon, 6 Apr 2026 20:52:38 -0700 Subject: [PATCH 11/33] Translate Dutch (nl): bring up to date with en-US - Add admin.stats section - Add island.detail.description - Add value_blocks button, spawner.block-name - Add you-have and you-can-place conversation messages - Update required-points-to-next-level to new [progress]/[levelcost] format Co-Authored-By: Claude Sonnet 4.6 --- src/main/resources/locales/nl.yml | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/main/resources/locales/nl.yml b/src/main/resources/locales/nl.yml index bd3fb47..5b1a22e 100644 --- a/src/main/resources/locales/nl.yml +++ b/src/main/resources/locales/nl.yml @@ -19,6 +19,18 @@ admin: remove: description: verwijder speler van de top tien parameters: "" + stats: + description: "toon statistieken van eilanden op deze server" + title: "Server Eiland Statistieken" + world: "&a [name]" + no-data: "&c Geen gegevens om te verwerken." + average-level: "Gemiddeld eilandniveau: [number]" + median-level: "Mediaan eilandniveau: [number]" + mode-level: "Modus eilandniveau: [number]" + highest-level: "Hoogste eilandniveau: [number]" + lowest-level: "Laagste eilandniveau: [number]" + distribution: "Verdeling eilandniveaus:" + islands: "eilanden" island: level: parameters: "[speler]" @@ -27,7 +39,7 @@ island: estimated-wait: "&a Verwachtte wachttijd: [number] seconde" in-queue: "&a Jij staat op plek [number] in de wachtrij" island-level-is: "&a Eiland level is &b[level]" - required-points-to-next-level: "&a [points] punten nodig voor het volgende level" + required-points-to-next-level: "&a Voortgang niveau: &6 [progress]&b /&e [levelcost] &a punten" deaths: "&c([number] doodgegaan)" cooldown: "&c Je moet nog &b[time] &c seconden wachten tot je dit weer kan doen." in-progress: "&6 Eiland level wordt berekend..." @@ -38,6 +50,8 @@ island: gui-heading: "&6[name]: &B[rank]" island-level: "&b Level [level]" warp-to: "&A Teleporteren naar [name]'s eiland" + detail: + description: "toont details van de blokken op uw eiland" level-details: above-sea-level-blocks: 'Blokken boven zeeniveau ' spawners: Monsterkooien @@ -88,6 +102,11 @@ level: limit: "&7 Block limiet: &e [number]" count: "&7 Aantal blokken: &e [number]" calculated: "&7 Berekende waarde: &e [number]" + value_blocks: + name: "&f&l Alle Blokken met Waarde" + description: |- + &7 Toon alle blokken + &7 met waarde op het eiland. all_blocks: name: "&f&l Alle Blokken" description: "&7 Toon alle blokken \n&7 op het eiland." @@ -104,6 +123,7 @@ level: spawner: name: "&f&l Monsterkooien" description: "&7 Toon alleen monsterkooien." + block-name: "&b Monsterkooien" filters: name: name: "&f&l Sorteer aan de hand van naam" @@ -163,3 +183,5 @@ level: value: "&7 De waarde van '[material]' is: &e[value]" value-underwater: "&7 The waarde van '[material]' onder zeeniveau: &e[value]" empty-hand: "&c Je hebt geen blok vast" + you-have: "&7 Je hebt [number] bij de laatste telling." + you-can-place: "&7 Je kunt tot [number] plaatsen en ze laten meetellen" From b3ec23e1e55ede7fa00d64423576ea477764a065 Mon Sep 17 00:00:00 2001 From: tastybento Date: Mon, 6 Apr 2026 20:53:11 -0700 Subject: [PATCH 12/33] Translate Polish (pl): bring up to date with en-US - Add admin.stats section - Add island.detail.description - Add value_blocks button, spawner.block-name - Add you-have and you-can-place conversation messages - Update required-points-to-next-level to new [progress]/[levelcost] format Co-Authored-By: Claude Sonnet 4.6 --- src/main/resources/locales/pl.yml | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/main/resources/locales/pl.yml b/src/main/resources/locales/pl.yml index 93473c9..5e1666a 100644 --- a/src/main/resources/locales/pl.yml +++ b/src/main/resources/locales/pl.yml @@ -18,6 +18,18 @@ admin: remove: description: usuwa gracza z Top 10 parameters: "" + stats: + description: "wyświetl statystyki wysp na tym serwerze" + title: "Statystyki Wysp Serwera" + world: "&a [name]" + no-data: "&c Brak danych do przetworzenia." + average-level: "Średni poziom wyspy: [number]" + median-level: "Medianowy poziom wyspy: [number]" + mode-level: "Modalny poziom wyspy: [number]" + highest-level: "Najwyższy poziom wyspy: [number]" + lowest-level: "Najniższy poziom wyspy: [number]" + distribution: "Rozkład poziomów wysp:" + islands: "wyspy" island: level: parameters: "[player]" @@ -26,7 +38,7 @@ island: estimated-wait: "&a Szacowany czas: [number] sekund" in-queue: "&a Jestes numerem [number] w kolejce" island-level-is: "&aPoziom wyspy wynosi &b[level]" - required-points-to-next-level: "&aPozostało [points] punktów do następnego poziomu" + required-points-to-next-level: "&a Postęp poziomu: &6 [progress]&b /&e [levelcost] &a punktów" deaths: "&c([number] śmierci)" cooldown: "&cMusisz zaczekać &b[time] &csekund przed następnym obliczeniem poziomu" in-progress: "&6 Trwa obliczanie poziomu twojej wyspy..." @@ -38,6 +50,8 @@ island: gui-heading: "&6[name]: &B[rank]" island-level: "&BPoziom [level]" warp-to: "&ATeleportowanie do wyspy [name]" + detail: + description: "wyświetla szczegóły bloków twojej wyspy" level-details: above-sea-level-blocks: Bloki nad poziomem morza spawners: Spawnery @@ -88,6 +102,11 @@ level: limit: "&7 Limit bloków: &e [number]" count: "&7 Numer bloku: &e [number]" calculated: "&7 Obliczona wartość: &e [number]" + value_blocks: + name: "&f&l Wszystkie Bloki z Wartością" + description: |- + &7 Wyświetl wszystkie bloki + &7 z wartością na wyspie. all_blocks: name: "&f&l Wszystkie bloki" description: |- @@ -107,6 +126,7 @@ level: spawner: name: "&f&l Spawnery" description: "&7 Wyświetlaj tylko spawnery." + block-name: "&b Spawner" filters: name: name: "&f&l Sortuj według nazwy" @@ -169,3 +189,5 @@ level: value: "&7 Wartość '[material]' to: &e[value]" value-underwater: "&7 Wartość „[material]” poniżej poziomu morza: &e[value]" empty-hand: "&c W twojej ręce nie ma bloków" + you-have: "&7 Masz [number] przy ostatnim zliczaniu." + you-can-place: "&7 Możesz umieścić do [number] i będą liczone" From 63a460df364c3662a7c37112054b73c5a25834b2 Mon Sep 17 00:00:00 2001 From: tastybento Date: Mon, 6 Apr 2026 20:53:42 -0700 Subject: [PATCH 13/33] Translate Indonesian (id): bring up to date with en-US - Add admin.stats section - Add island.detail.description - Add value_blocks button, spawner.block-name - Add you-have and you-can-place conversation messages - Update required-points-to-next-level to new [progress]/[levelcost] format Co-Authored-By: Claude Sonnet 4.6 --- src/main/resources/locales/id.yml | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/main/resources/locales/id.yml b/src/main/resources/locales/id.yml index 9492265..2ab4ab5 100644 --- a/src/main/resources/locales/id.yml +++ b/src/main/resources/locales/id.yml @@ -18,6 +18,18 @@ admin: remove: description: menghapus pemain dari sepuluh besar parameters: "" + stats: + description: "tampilkan statistik pulau di server ini" + title: "Statistik Pulau Server" + world: "&a [name]" + no-data: "&c Tidak ada data untuk diproses." + average-level: "Rata-rata Level Pulau: [number]" + median-level: "Median Level Pulau: [number]" + mode-level: "Modus Level Pulau: [number]" + highest-level: "Level Pulau Tertinggi: [number]" + lowest-level: "Level Pulau Terendah: [number]" + distribution: "Distribusi Level Pulau:" + islands: "pulau" island: level: parameters: "[player]" @@ -26,7 +38,7 @@ island: estimated-wait: "&a Perkiraan menunggu: [number] detik" in-queue: "&a Kamu berada pada antrian nomor [number]" island-level-is: "&a Level pulau adalah &b[level]" - required-points-to-next-level: "&a [points] poin dibutuhkan hingga level selanjutnya" + required-points-to-next-level: "&a Kemajuan level: &6 [progress]&b /&e [levelcost] &a poin" deaths: "&c([number] kematian)" cooldown: "&c Kamu harus menunggu &b[time] &c detik sebelum kamu dapat melakukannya lagi" @@ -38,6 +50,8 @@ island: gui-heading: "&6[name]: &B[rank]" island-level: "&b Level [level]" warp-to: "&A Warp ke pulau [name]" + detail: + description: "menampilkan detail blok pulau kamu" level-details: above-sea-level-blocks: Blok di atas permukaan laut spawners: Spawner @@ -88,6 +102,11 @@ level: limit: "&7 Batas blok: &e [number]" count: "&7 Jumlah blok: &e [number]" calculated: "&7 Nilai yang dihitung: &e [number]" + value_blocks: + name: "&f&l Semua Blok Bernilai" + description: |- + &7 Tampilkan semua blok + &7 yang bernilai di pulau. all_blocks: name: "&f&l Semua blok" description: |- @@ -108,6 +127,7 @@ level: spawner: name: "&f&l Spawner" description: "&7 Hanya tampilkan spawner." + block-name: "&b Spawner" filters: name: name: "&f&l Urut berdasarkan Nama" @@ -169,3 +189,5 @@ level: value: "&7 Nilai dari '[material]' adalah: &e[value]" value-underwater: "&7Nilai dari '[material]' di bawah permukaan laut: &e[value]" empty-hand: "&c Tidak ada blok di tangan mu" + you-have: "&7 Kamu memiliki [number] pada hitungan terakhir." + you-can-place: "&7 Kamu dapat menempatkan hingga [number] dan membuatnya terhitung" From b9d4ca0e01dfeadf98dd733e4d4d26ea23640091 Mon Sep 17 00:00:00 2001 From: tastybento Date: Mon, 6 Apr 2026 20:54:05 -0700 Subject: [PATCH 14/33] Translate Ukrainian (uk): bring up to date with en-US MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add island.detail.description - Add value_blocks button, spawner.block-name - Add you-have and you-can-place conversation messages - Update required-points-to-next-level to new [progress]/[levelcost] format - Fix spawner button name (Спавнери) Co-Authored-By: Claude Sonnet 4.6 --- src/main/resources/locales/uk.yml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/resources/locales/uk.yml b/src/main/resources/locales/uk.yml index 14962a0..b23a2d3 100644 --- a/src/main/resources/locales/uk.yml +++ b/src/main/resources/locales/uk.yml @@ -38,7 +38,7 @@ island: estimated-wait: "&a Приблизне очікування: [number] секунд" in-queue: "&a Ви номер [number] у черзі" island-level-is: "&a Рівень острова &b[level]" - required-points-to-next-level: "&a [points] потрібні бали до наступного рівня" + required-points-to-next-level: "&a Прогрес рівня: &6 [progress]&b /&e [levelcost] &a балів" deaths: "&c([number] смерті)" cooldown: "&c Ви повинні зачекати &b[time] &c секунд, поки ви зможете зробити це знову" @@ -50,6 +50,8 @@ island: gui-heading: "&6[name]: &B[rank]" island-level: "&b Рівень [level]" warp-to: "&A Варп на острів [name]." + detail: + description: "показує деталі блоків вашого острова" level-details: above-sea-level-blocks: Блоки над рівнем моря spawners: Спавера @@ -100,6 +102,11 @@ level: limit: "&7 Обмеження блоку: &e [number]" count: "&7 Кількість блоків: &e [number]" calculated: "&7 Розраховане значення: &e [number]" + value_blocks: + name: "&f&l Усі Блоки з Цінністю" + description: |- + &7 Показати всі блоки + &7 з цінністю на острові. all_blocks: name: "&f&l Усі блоки" description: |- @@ -118,8 +125,9 @@ level: &7, які знаходяться нижче моря &7 рівень. spawner: - name: "&f&l Спанера" + name: "&f&l Спавнери" description: "&7 Відображати лише спавнери." + block-name: "&b Спавнер" filters: name: name: "&f&l Сортувати за назвою" @@ -182,3 +190,5 @@ level: value: "&7 Значення '[material]' таке: &e[value]" value-underwater: "&7 Значення '[material]' нижче рівня моря: &e[value]" empty-hand: "&c У вашій руці немає блоків" + you-have: "&7 У вас є [number] за останнім підрахунком." + you-can-place: "&7 Ви можете розмістити до [number] і вони будуть враховані" From 995c41843a712e33ddb3fe41a0f115e5653ed492 Mon Sep 17 00:00:00 2001 From: tastybento Date: Mon, 6 Apr 2026 20:54:31 -0700 Subject: [PATCH 15/33] Translate Chinese Simplified (zh-CN): bring up to date with en-US - Add island.detail.description - Add value_blocks button, spawner.block-name - Add you-have and you-can-place conversation messages - Update required-points-to-next-level to new [progress]/[levelcost] format Co-Authored-By: Claude Sonnet 4.6 --- src/main/resources/locales/zh-CN.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/resources/locales/zh-CN.yml b/src/main/resources/locales/zh-CN.yml index e9283e0..d4b17fc 100644 --- a/src/main/resources/locales/zh-CN.yml +++ b/src/main/resources/locales/zh-CN.yml @@ -37,7 +37,7 @@ island: estimated-wait: '&a预计等待时间: [number]秒' in-queue: '&a你处于队列中第[number]个' island-level-is: '&a岛屿等级为: &b[level]' - required-points-to-next-level: '&a还需[points]点数才能到达下一级' + required-points-to-next-level: '&a等级进度: &6 [progress]&b /&e [levelcost] &a点数' deaths: '&c([number]次死亡)' cooldown: '&c还需等待&b[time]&c秒才能再次使用该指令' in-progress: '&6岛屿等级正在计算中...' @@ -50,6 +50,8 @@ island: island-level: '&b等级: [level]' warp-to: '&a正在传送到[name]的岛屿' + detail: + description: "显示你的岛屿方块详情" level-details: above-sea-level-blocks: 海平面以上的方块 spawners: 刷怪笼 @@ -100,6 +102,11 @@ level: limit: '&7方块限制: &e[number]' count: '&7方块数量: &e[number]' calculated: '&7计算值: &e[number]' + value_blocks: + name: '&f&l所有有价值的方块' + description: |- + &7 显示岛屿上所有 + &7 有价值的方块. all_blocks: name: '&f&l所有方块' description: '&7显示岛屿上所有的方块' @@ -112,6 +119,7 @@ level: spawner: name: '&f&l刷怪笼' description: '&7只显示刷怪笼' + block-name: '&b 刷怪笼' filters: name: name: '&f&l按名称排序' @@ -171,3 +179,5 @@ level: value: '&7物品''[material]''的价值: &e[value]' value-underwater: '&7物品''[material]''在海平面以下的价值: &e[value]' empty-hand: '&c你的手中没有拿着方块' + you-have: '&7 你上次统计时有[number]个.' + you-can-place: '&7 你最多可以放置[number]个并让它们被计算在内' From 4128b1a34dc32f703661f54576b02dceeae35b74 Mon Sep 17 00:00:00 2001 From: tastybento Date: Mon, 6 Apr 2026 20:55:55 -0700 Subject: [PATCH 16/33] Translate Portuguese (pt): bring up to date with en-US - Add admin.stats section - Add island.detail.description - Add missing island.level keys (in-progress, time-out) - Add full level section (commands, gui, conversations) - Remove old island.value structure, replace with level.commands.value - Update required-points-to-next-level to new [progress]/[levelcost] format Co-Authored-By: Claude Sonnet 4.6 --- src/main/resources/locales/pt.yml | 178 +++++++++++++++++++++++++++--- 1 file changed, 161 insertions(+), 17 deletions(-) diff --git a/src/main/resources/locales/pt.yml b/src/main/resources/locales/pt.yml index d87f1b8..e73d558 100644 --- a/src/main/resources/locales/pt.yml +++ b/src/main/resources/locales/pt.yml @@ -4,8 +4,12 @@ admin: parameters: "" description: calcula o nível da ilha para o jogador sethandicap: - parameters: " " - description: Define o handicap da ilha. É geralmente o nível da ilha inicial. + parameters: [+/-] + description: | + definir ou alterar o *handicap* da ilha + ex. +10 removerá 10 níveis, + 30 definirá o handicap para 30, + -20 adicionará 20 níveis changed: "&a O handicap inicial da ilha foi alterado de [number] para [new_number]." invalid-level: "&c Handicap inválido. Use um número inteiro." levelstatus: @@ -18,6 +22,18 @@ admin: remove: description: Remover jogador do Top 10 parameters: "" + stats: + description: "mostrar estatísticas das ilhas neste servidor" + title: "Estatísticas das Ilhas do Servidor" + world: "&a [name]" + no-data: "&c Sem dados para processar." + average-level: "Nível médio das ilhas: [number]" + median-level: "Nível mediano das ilhas: [number]" + mode-level: "Nível modal das ilhas: [number]" + highest-level: "Nível mais alto das ilhas: [number]" + lowest-level: "Nível mais baixo das ilhas: [number]" + distribution: "Distribuição dos níveis das ilhas:" + islands: "ilhas" island: level: parameters: "[player]" @@ -25,15 +41,14 @@ island: calculating: "&a Calculando level..." estimated-wait: "&a Espera estimada: [number] segundos." in-queue: "&a Você é o número [number] na fila." - island-level-is: "& O nível da ilha é&b [level]" - required-points-to-next-level: "&a [pontos] pontos são necessários para chegar - o próximo nível" + island-level-is: "&a O nível da ilha é &b[level]" + required-points-to-next-level: "&a Progresso do nível: &6 [progress]&b /&e [levelcost] &a pontos" deaths: "&c([number] mortes)" - cooldown: "&c Você deve esperar &b [time] &c segundos até que possa fazer isso - novamente." - in-progress: "&6 Calculando o nível da ilha..." - time-out: "&c O cálculo do nível demorou muito. Por favor, tente novamente mais - tarde." + cooldown: "&c Você deve esperar &b[time] &c segundos até que possa fazer isso novamente." + in-progress: "&6 O cálculo do nível da ilha está em andamento..." + time-out: "&c O cálculo do nível demorou muito. Por favor, tente novamente mais tarde." + detail: + description: "mostra os detalhes dos blocos da sua ilha" top: description: Mostra os dez melhores gui-title: "&a Top 10" @@ -48,10 +63,139 @@ island: no-island: "&c Sem ilha!" names-island: Ilha de [name] syntax: "[name] x [number]" - hint: "&c Executa o nível para ver o relatório de blocos." - value: - description: Mostra o valor de qualquer bloco - success: "&7 O valor deste bloco é: &e [value]" - success-underwater: "& 7O valor deste bloco abaixo do nível do mar: &e [value]" - empty-hand: "&c Não há blocos em sua mão." - no-value: "&c Item sem valor." + hint: "&c Execute level para ver o relatório de blocos." +level: + commands: + value: + parameters: "[hand|]" + description: mostra o valor dos blocos. Adicione 'hand' no final para exibir o valor do item na mão. + gui: + titles: + top: "&0&l Top Ilhas" + detail-panel: "&0&l Ilha de [name]" + value-panel: "&0&l Valores dos Blocos" + buttons: + island: + empty: '&f&l [name]. lugar' + name: '&f&l [name]' + description: |- + [owner] + [members] + [place] + [level] + owners-island: "Ilha de [player]" + owner: "&7&l Dono: &r&b [player]" + members-title: "&7&l Membros:" + member: "&b - [player]" + unknown: "desconhecido" + place: "&7&o [number]. &r&7 lugar" + level: "&7 Nível: &o [number]" + material: + name: "&f&l [number] x [material]" + description: |- + [description] + [count] + [value] + [calculated] + [limit] + [id] + id: "&7 ID do bloco: &e [id]" + value: "&7 Valor do bloco: &e [number]" + limit: "&7 Limite do bloco: &e [number]" + count: "&7 Número de blocos: &e [number]" + calculated: "&7 Valor calculado: &e [number]" + value_blocks: + name: "&f&l Todos os Blocos com Valor" + description: |- + &7 Exibir todos os blocos + &7 com valor na ilha. + all_blocks: + name: "&f&l Todos os Blocos" + description: |- + &7 Exibir todos os blocos + &7 na ilha. + above_sea_level: + name: "&f&l Blocos Acima do Nível do Mar" + description: |- + &7 Exibir apenas blocos + &7 que estão acima do + &7 nível do mar. + underwater: + name: "&f&l Blocos Abaixo do Nível do Mar" + description: |- + &7 Exibir apenas blocos + &7 que estão abaixo do + &7 nível do mar. + spawner: + name: "&f&l Spawners" + description: |- + &7 Exibir apenas spawners. + block-name: "&b Spawner" + filters: + name: + name: "&f&l Ordenar por Nome" + description: |- + &7 Ordenar todos os blocos por nome. + value: + name: "&f&l Ordenar por Valor" + description: |- + &7 Ordenar todos os blocos pelo valor. + count: + name: "&f&l Ordenar por Quantidade" + description: |- + &7 Ordenar todos os blocos pela quantidade. + value: + name: "&f&l [material]" + description: |- + [description] + [value] + [underwater] + [limit] + [id] + id: "&7 ID do bloco: &e [id]" + value: "&7 Valor do bloco: &e [number]" + underwater: "&7 Abaixo do nível do mar: &e [number]" + limit: "&7 Limite do bloco: &e [number]" + previous: + name: "&f&l Página Anterior" + description: |- + &7 Ir para a página [number] + next: + name: "&f&l Próxima Página" + description: |- + &7 Ir para a página [number] + search: + name: "&f&l Pesquisar" + description: |- + &7 Pesquisar um valor + &7 específico. + search: "&b Valor: [value]" + tips: + click-to-view: "&e Clique &7 para visualizar." + click-to-previous: "&e Clique &7 para ver a página anterior." + click-to-next: "&e Clique &7 para ver a próxima página." + click-to-select: "&e Clique &7 para selecionar." + left-click-to-cycle-up: "&e Clique Esquerdo &7 para avançar." + right-click-to-cycle-down: "&e Clique Direito &7 para retroceder." + left-click-to-change: "&e Clique Esquerdo &7 para editar." + right-click-to-clear: "&e Clique Direito &7 para limpar." + click-to-asc: "&e Clique &7 para ordenar em ordem crescente." + click-to-desc: "&e Clique &7 para ordenar em ordem decrescente." + click-to-warp: "&e Clique &7 para teletransportar." + click-to-visit: "&e Clique &7 para visitar." + right-click-to-visit: "&e Clique Direito &7 para visitar." + conversations: + prefix: "&l&6 [BentoBox]: &r" + no-data: "&c Execute level para ver o relatório de blocos." + cancel-string: cancelar + exit-string: cancelar, sair, encerrar + write-search: "&e Por favor, insira um valor de pesquisa. (Digite 'cancelar' para sair)" + search-updated: "&a Valor de pesquisa atualizado." + cancelled: "&c Conversa cancelada!" + no-value: "&c Esse item não tem valor." + unknown-item: "&c O '[material]' não existe no jogo." + value: "&7 O valor de '[material]' é: &e[value]" + value-underwater: "&7 O valor de '[material]' abaixo do nível do mar: &e[value]" + empty-hand: "&c Não há blocos em sua mão" + you-have: "&7 Você tem [number] no último conteo." + you-can-place: "&7 Você pode colocar até [number] e fazê-los contar" From d00883e0d4949d58ab465d67d0274282bc72f14f Mon Sep 17 00:00:00 2001 From: tastybento Date: Mon, 6 Apr 2026 20:56:50 -0700 Subject: [PATCH 17/33] Translate Vietnamese (vi): bring up to date with en-US - Add admin.stats section - Add island.detail.description - Add missing island.level keys (in-progress, time-out) - Add full level section (commands, gui, conversations) - Remove old island.value structure, replace with level.commands.value - Update required-points-to-next-level to new [progress]/[levelcost] format Co-Authored-By: Claude Sonnet 4.6 --- src/main/resources/locales/vi.yml | 174 +++++++++++++++++++++++++++--- 1 file changed, 161 insertions(+), 13 deletions(-) diff --git a/src/main/resources/locales/vi.yml b/src/main/resources/locales/vi.yml index 8ff6d15..bcdfccb 100644 --- a/src/main/resources/locales/vi.yml +++ b/src/main/resources/locales/vi.yml @@ -1,15 +1,20 @@ -# +########################################################################################### # This is a YML file. Be careful when editing. Check your edits in a YAML checker like # # the one at http://yaml-online-parser.appspot.com # +########################################################################################### admin: level: parameters: description: tính toán cấp độ đảo của người chơi sethandicap: - parameters: - description: chỉnh cấp của các đảo bắt đầu - changed: '&a Cấp đảo bắt đầu đã chỉnh từ [number] thành [new_number].' - invalid-level: '&c Cấp không xác định. Hãy dùng số nguyên.' + parameters: [+/-] + description: | + đặt hoặc thay đổi *handicap* của đảo + ví dụ: +10 sẽ bỏ 10 cấp, + 30 sẽ đặt handicap thành 30, + -20 sẽ thêm 20 cấp + changed: '&a Handicap ban đầu của đảo đã thay đổi từ [number] thành [new_number].' + invalid-level: '&c Handicap không hợp lệ. Hãy dùng số nguyên.' levelstatus: description: xem bao nhiêu đảo đang trong hàng chờ được quét islands-in-queue: '&a Đảo đang chờ: [number]' @@ -20,6 +25,18 @@ admin: remove: description: xoá người khỏi TOP 10 parameters: + stats: + description: "hiển thị thống kê đảo trên máy chủ này" + title: "Thống Kê Đảo Máy Chủ" + world: "&a [name]" + no-data: "&c Không có dữ liệu để xử lý." + average-level: "Cấp đảo trung bình: [number]" + median-level: "Cấp đảo trung vị: [number]" + mode-level: "Cấp đảo phổ biến nhất: [number]" + highest-level: "Cấp đảo cao nhất: [number]" + lowest-level: "Cấp đảo thấp nhất: [number]" + distribution: "Phân phối cấp đảo:" + islands: "đảo" island: level: parameters: '[người chơi]' @@ -28,11 +45,13 @@ island: estimated-wait: '&a Thời gian còn lại: [number] giây' in-queue: '&a Bạn đang ở vị trí [number] trong hàng chờ' island-level-is: '&a Cấp đảo là &b[level]' - required-points-to-next-level: '&a Cần [points] điểm để qua cấp tiếp theo' + required-points-to-next-level: '&a Tiến độ cấp: &6 [progress]&b /&e [levelcost] &a điểm' deaths: '&c([number] lần chết)' cooldown: '&c Bạn phải chờ &b[time] &c giây trước khi có thể làm điều đó' - in-progress: '&6 Quá trình tính toán cấp đảo đang thực hiện...' + in-progress: '&6 Đang tính toán cấp đảo...' time-out: '&c Tính toán cấp đảo quá lâu. Vui lòng thử lại sau.' + detail: + description: "hiển thị chi tiết các khối trên đảo của bạn" top: description: xem TOP 10 gui-title: '&a TOP 10' @@ -48,9 +67,138 @@ island: names-island: 'đảo của [name]' syntax: '[name] x [number]' hint: '&c Chạy lệnh cấp để xem báo cáo khối' - value: - description: xem giá trị của bất kì khối - success: '&7 Giá trị của khối này là: &e[value]' - success-underwater: '&7 Giá trị của khối này dưới mực nước biển: &e[value]' - empty-hand: '&c Không có khối nào trên tay bạn' - no-value: '&c Vật phẩm này vô giá trị.' +level: + commands: + value: + parameters: "[hand|]" + description: hiển thị giá trị của các khối. Thêm 'hand' vào cuối để hiển thị giá trị của vật phẩm đang cầm. + gui: + titles: + top: "&0&l Top Đảo" + detail-panel: "&0&l Đảo của [name]" + value-panel: "&0&l Giá Trị Khối" + buttons: + island: + empty: '&f&l Vị trí [name].' + name: '&f&l [name]' + description: |- + [owner] + [members] + [place] + [level] + owners-island: "Đảo của [player]" + owner: "&7&l Chủ: &r&b [player]" + members-title: "&7&l Thành viên:" + member: "&b - [player]" + unknown: "không rõ" + place: "&7&o [number]. &r&7 vị trí" + level: "&7 Cấp: &o [number]" + material: + name: "&f&l [number] x [material]" + description: |- + [description] + [count] + [value] + [calculated] + [limit] + [id] + id: "&7 ID khối: &e [id]" + value: "&7 Giá trị khối: &e [number]" + limit: "&7 Giới hạn khối: &e [number]" + count: "&7 Số lượng khối: &e [number]" + calculated: "&7 Giá trị tính toán: &e [number]" + value_blocks: + name: "&f&l Tất Cả Khối Có Giá Trị" + description: |- + &7 Hiển thị tất cả khối + &7 có giá trị trên đảo. + all_blocks: + name: "&f&l Tất Cả Khối" + description: |- + &7 Hiển thị tất cả khối + &7 trên đảo. + above_sea_level: + name: "&f&l Khối Trên Mực Nước Biển" + description: |- + &7 Chỉ hiển thị khối + &7 ở trên mực + &7 nước biển. + underwater: + name: "&f&l Khối Dưới Mực Nước Biển" + description: |- + &7 Chỉ hiển thị khối + &7 ở dưới mực + &7 nước biển. + spawner: + name: "&f&l Lồng Sinh Quái" + description: |- + &7 Chỉ hiển thị lồng sinh quái. + block-name: "&b Lồng Sinh Quái" + filters: + name: + name: "&f&l Sắp Xếp theo Tên" + description: |- + &7 Sắp xếp tất cả khối theo tên. + value: + name: "&f&l Sắp Xếp theo Giá Trị" + description: |- + &7 Sắp xếp tất cả khối theo giá trị. + count: + name: "&f&l Sắp Xếp theo Số Lượng" + description: |- + &7 Sắp xếp tất cả khối theo số lượng. + value: + name: "&f&l [material]" + description: |- + [description] + [value] + [underwater] + [limit] + [id] + id: "&7 ID khối: &e [id]" + value: "&7 Giá trị khối: &e [number]" + underwater: "&7 Dưới mực nước biển: &e [number]" + limit: "&7 Giới hạn khối: &e [number]" + previous: + name: "&f&l Trang Trước" + description: |- + &7 Chuyển đến trang [number] + next: + name: "&f&l Trang Tiếp" + description: |- + &7 Chuyển đến trang [number] + search: + name: "&f&l Tìm Kiếm" + description: |- + &7 Tìm kiếm một giá trị + &7 cụ thể. + search: "&b Giá trị: [value]" + tips: + click-to-view: "&e Nhấp &7 để xem." + click-to-previous: "&e Nhấp &7 để xem trang trước." + click-to-next: "&e Nhấp &7 để xem trang tiếp." + click-to-select: "&e Nhấp &7 để chọn." + left-click-to-cycle-up: "&e Nhấp Trái &7 để lên." + right-click-to-cycle-down: "&e Nhấp Phải &7 để xuống." + left-click-to-change: "&e Nhấp Trái &7 để chỉnh sửa." + right-click-to-clear: "&e Nhấp Phải &7 để xóa." + click-to-asc: "&e Nhấp &7 để sắp xếp tăng dần." + click-to-desc: "&e Nhấp &7 để sắp xếp giảm dần." + click-to-warp: "&e Nhấp &7 để dịch chuyển." + click-to-visit: "&e Nhấp &7 để thăm." + right-click-to-visit: "&e Nhấp Phải &7 để thăm." + conversations: + prefix: "&l&6 [BentoBox]: &r" + no-data: "&c Chạy lệnh cấp để xem báo cáo khối." + cancel-string: hủy + exit-string: hủy, thoát, bỏ + write-search: "&e Vui lòng nhập giá trị tìm kiếm. (Nhập 'hủy' để thoát)" + search-updated: "&a Giá trị tìm kiếm đã cập nhật." + cancelled: "&c Cuộc trò chuyện đã bị hủy!" + no-value: "&c Vật phẩm này không có giá trị." + unknown-item: "&c '[material]' không tồn tại trong trò chơi." + value: "&7 Giá trị của '[material]' là: &e[value]" + value-underwater: "&7 Giá trị của '[material]' dưới mực nước biển: &e[value]" + empty-hand: "&c Không có khối nào trên tay bạn" + you-have: "&7 Bạn có [number] lần đếm cuối cùng." + you-can-place: "&7 Bạn có thể đặt tối đa [number] và chúng sẽ được tính" From 615dc67e811095989414bb8b0dea74b6183b9009 Mon Sep 17 00:00:00 2001 From: tastybento Date: Mon, 6 Apr 2026 20:57:49 -0700 Subject: [PATCH 18/33] Translate Hungarian (hu): bring up to date with en-US - Add admin.stats section - Add island.detail.description - Add missing island.level keys (in-progress, time-out) - Add full level section (commands, gui, conversations) - Remove old island.value and island.top.remove structures - Update required-points-to-next-level to new [progress]/[levelcost] format Co-Authored-By: Claude Sonnet 4.6 --- src/main/resources/locales/hu.yml | 170 +++++++++++++++++++++++++++--- 1 file changed, 158 insertions(+), 12 deletions(-) diff --git a/src/main/resources/locales/hu.yml b/src/main/resources/locales/hu.yml index b0bf727..07fc99d 100644 --- a/src/main/resources/locales/hu.yml +++ b/src/main/resources/locales/hu.yml @@ -4,8 +4,12 @@ admin: parameters: "" description: Egy játékos sziget szintjének kiszámítása sethandicap: - parameters: " " - description: állítsa be a sziget hátrányát, általában a kezdő sziget szintjét + parameters: [+/-] + description: | + a sziget *hátrányának* beállítása vagy megváltoztatása + pl. +10 eltávolít 10 szintet, + 30 a hátrányt 30-ra állítja, + -20 hozzáad 20 szintet changed: "&a A kezdeti sziget hátrány változott erről [number] erre [new_number]." invalid-level: "&c Érvénytelen hátrány. Használj egész számot." levelstatus: @@ -18,6 +22,18 @@ admin: remove: description: játékos törlése a Top Tízből parameters: "" + stats: + description: "sziget statisztikák megjelenítése ezen a szerveren" + title: "Szerver Sziget Statisztikák" + world: "&a [name]" + no-data: "&c Nincs adat a feldolgozáshoz." + average-level: "Átlagos sziget szint: [number]" + median-level: "Medián sziget szint: [number]" + mode-level: "Módusz sziget szint: [number]" + highest-level: "Legmagasabb sziget szint: [number]" + lowest-level: "Legalacsonyabb sziget szint: [number]" + distribution: "Sziget szint eloszlás:" + islands: "szigetek" island: level: parameters: "[player]" @@ -26,18 +42,19 @@ island: estimated-wait: "&a Becsült várakozás: [number] másodperc" in-queue: "&a Te vagy a(z) [number] a sorban" island-level-is: "&aA sziget szint: &b[level]" - required-points-to-next-level: "&a[points] pont szükséges a következő szinthez." + required-points-to-next-level: "&a Szint előrehaladás: &6 [progress]&b /&e [levelcost] &a pont" deaths: "&c([number] halál)" cooldown: "&cVárnod kell &b[time] &cmásodpercet, hogy újra használhasd." + in-progress: "&6 A sziget szint kiszámítása folyamatban..." + time-out: "&c A szint kiszámítása túl sokáig tartott. Kérjük, próbálja újra később." + detail: + description: "megmutatja a szigeted blokkjainak részleteit" top: description: Top Tíz lista megtekintése gui-title: "&aTop Tíz" gui-heading: "&6[name]: &B[rank]" island-level: "&BLevel [level]" warp-to: "&ATeleportálás [name] szigetére." - remove: - description: játékos törlése a Top Tízből - parameters: "" level-details: above-sea-level-blocks: Tengerszint Feletti Blokkok spawners: Spawner-ek @@ -47,9 +64,138 @@ island: names-island: "[name] szigete" syntax: "[name] x [number]" hint: "&c Futtassa a szintet a blokk jelentés megjelenítéséhez" - value: - description: Bármely blokk értékét mutatja - success: "&7Ennek a blokknak az értéke: &e[value]" - success-underwater: "&7Ennek a blokknak a tengerszint alatti értéke: &e[value]" - empty-hand: "&cNincsenek blokkok a kezedben" - no-value: "&cEnnek nincs értéke." +level: + commands: + value: + parameters: "[hand|]" + description: megmutatja a blokkok értékét. Adja hozzá a 'hand' szót a végéhez a kézben lévő tárgy értékének megjelenítéséhez. + gui: + titles: + top: "&0&l Top Szigetek" + detail-panel: "&0&l [name] szigete" + value-panel: "&0&l Blokk Értékek" + buttons: + island: + empty: '&f&l [name]. hely' + name: '&f&l [name]' + description: |- + [owner] + [members] + [place] + [level] + owners-island: "[player] szigete" + owner: "&7&l Tulajdonos: &r&b [player]" + members-title: "&7&l Tagok:" + member: "&b - [player]" + unknown: "ismeretlen" + place: "&7&o [number]. &r&7 hely" + level: "&7 Szint: &o [number]" + material: + name: "&f&l [number] x [material]" + description: |- + [description] + [count] + [value] + [calculated] + [limit] + [id] + id: "&7 Blokk azonosító: &e [id]" + value: "&7 Blokk értéke: &e [number]" + limit: "&7 Blokk korlát: &e [number]" + count: "&7 Blokkok száma: &e [number]" + calculated: "&7 Számított érték: &e [number]" + value_blocks: + name: "&f&l Minden Értékes Blokk" + description: |- + &7 Megjelenít minden blokkot + &7 értékkel a szigeten. + all_blocks: + name: "&f&l Minden Blokk" + description: |- + &7 Megjelenít minden blokkot + &7 a szigeten. + above_sea_level: + name: "&f&l Tengerszint Feletti Blokkok" + description: |- + &7 Csak a tengerszint + &7 feletti blokkokat + &7 jeleníti meg. + underwater: + name: "&f&l Tengerszint Alatti Blokkok" + description: |- + &7 Csak a tengerszint + &7 alatti blokkokat + &7 jeleníti meg. + spawner: + name: "&f&l Spawner-ek" + description: |- + &7 Csak spawner-eket jelenít meg. + block-name: "&b Spawner" + filters: + name: + name: "&f&l Rendezés Név szerint" + description: |- + &7 Minden blokkot név szerint rendez. + value: + name: "&f&l Rendezés Érték szerint" + description: |- + &7 Minden blokkot értékük szerint rendez. + count: + name: "&f&l Rendezés Mennyiség szerint" + description: |- + &7 Minden blokkot mennyiségük szerint rendez. + value: + name: "&f&l [material]" + description: |- + [description] + [value] + [underwater] + [limit] + [id] + id: "&7 Blokk azonosító: &e [id]" + value: "&7 Blokk értéke: &e [number]" + underwater: "&7 Tengerszint alatt: &e [number]" + limit: "&7 Blokk korlát: &e [number]" + previous: + name: "&f&l Előző Oldal" + description: |- + &7 Váltás [number]. oldalra + next: + name: "&f&l Következő Oldal" + description: |- + &7 Váltás [number]. oldalra + search: + name: "&f&l Keresés" + description: |- + &7 Keresés egy adott + &7 értékre. + search: "&b Érték: [value]" + tips: + click-to-view: "&e Kattints &7 a megtekintéshez." + click-to-previous: "&e Kattints &7 az előző oldal megtekintéséhez." + click-to-next: "&e Kattints &7 a következő oldal megtekintéséhez." + click-to-select: "&e Kattints &7 a kiválasztáshoz." + left-click-to-cycle-up: "&e Bal Kattintás &7 a feljebb lépéshez." + right-click-to-cycle-down: "&e Jobb Kattintás &7 a lejjebb lépéshez." + left-click-to-change: "&e Bal Kattintás &7 a szerkesztéshez." + right-click-to-clear: "&e Jobb Kattintás &7 a törléshez." + click-to-asc: "&e Kattints &7 a növekvő sorrendű rendezéshez." + click-to-desc: "&e Kattints &7 a csökkenő sorrendű rendezéshez." + click-to-warp: "&e Kattints &7 a teleportáláshoz." + click-to-visit: "&e Kattints &7 a látogatáshoz." + right-click-to-visit: "&e Jobb Kattintás &7 a látogatáshoz." + conversations: + prefix: "&l&6 [BentoBox]: &r" + no-data: "&c Futtassa a szintet a blokk jelentés megtekintéséhez." + cancel-string: mégse + exit-string: mégse, kilép, abbahagyja + write-search: "&e Kérjük, adjon meg egy keresési értéket. (Írja be a 'mégse' szót a kilépéshez)" + search-updated: "&a Keresési érték frissítve." + cancelled: "&c Beszélgetés megszakítva!" + no-value: "&c Ennek a tárgynak nincs értéke." + unknown-item: "&c A '[material]' nem létezik a játékban." + value: "&7 A '[material]' értéke: &e[value]" + value-underwater: "&7 A '[material]' értéke tengerszint alatt: &e[value]" + empty-hand: "&c Nincs blokk a kezedben" + you-have: "&7 Az utolsó számláláskor [number] volt nálad." + you-can-place: "&7 Legfeljebb [number] darabot helyezhetsz le és számítanak" From b5620a23b72f727aae57aaf9e3c3b86404342b32 Mon Sep 17 00:00:00 2001 From: tastybento Date: Mon, 6 Apr 2026 20:58:44 -0700 Subject: [PATCH 19/33] Translate German (de): bring up to date with en-US - Add admin.level.sethandicap section - Add admin.levelstatus.description - Add admin.stats section - Add island.detail.description - Add missing island.level keys (in-progress, time-out, in-queue) - Add missing island.level-details keys (names-island, syntax, hint) - Add full level section (commands, gui, conversations) - Remove old island.value structure, replace with level.commands.value - Update required-points-to-next-level to new [progress]/[levelcost] format Co-Authored-By: Claude Sonnet 4.6 --- src/main/resources/locales/de.yml | 197 +++++++++++++++++++++++++++--- 1 file changed, 177 insertions(+), 20 deletions(-) diff --git a/src/main/resources/locales/de.yml b/src/main/resources/locales/de.yml index 68dc534..accb170 100644 --- a/src/main/resources/locales/de.yml +++ b/src/main/resources/locales/de.yml @@ -3,42 +3,199 @@ admin: level: parameters: "" description: Berechne das Insel Level für den Spieler + sethandicap: + parameters: [+/-] + description: | + Setze oder ändere das Insel-*Handicap* + z.B. +10 entfernt 10 Level, + 30 setzt Handicap auf 30, + -20 fügt 20 Level hinzu + changed: "&a Das anfängliche Insel-Handicap wurde von [number] auf [new_number] geändert." + invalid-level: "&c Ungültiges Handicap. Verwende eine ganze Zahl." levelstatus: - islands-in-queue: "&aInseln in der Warteschlange: [number]" + description: Zeige wie viele Inseln in der Warteschlange für den Scan sind + islands-in-queue: "&a Inseln in der Warteschlange: [number]" top: description: Zeige die Top-10 Liste - unknown-world: "&cUnbekannte Welt!" + unknown-world: "&c Unbekannte Welt!" display: "&f[rank]. &a[name] &7- &b[level]" remove: description: entferne Spieler von Top-10 parameters: "" + stats: + description: "Zeige Statistiken zu Inseln auf diesem Server" + title: "Server-Insel-Statistiken" + world: "&a [name]" + no-data: "&c Keine Daten zum Verarbeiten." + average-level: "Durchschnittliches Insel-Level: [number]" + median-level: "Medianes Insel-Level: [number]" + mode-level: "Häufigstes Insel-Level: [number]" + highest-level: "Höchstes Insel-Level: [number]" + lowest-level: "Niedrigstes Insel-Level: [number]" + distribution: "Insel-Level-Verteilung:" + islands: "Inseln" island: level: parameters: "[Spieler]" description: Berechne dein Insel Level oder zeige das Level von [Spieler] - calculating: "&aBerechne Level..." - estimated-wait: "&aGeschätzte Wartezeit: [number] Sekunden" - in-queue: "&aSie sind Nummer [number] in der Warteschlange" - island-level-is: "&aInsel Level: &b[level]" - required-points-to-next-level: "&a[points] Punkte werden für das nächste Level - benötigt" - deaths: "&c([number] Tode)" - cooldown: "&cDu musst &b[time] &csekunden warten bevor du das erneut machen kannst." + calculating: "&a Berechne Level..." + estimated-wait: "&a Geschätzte Wartezeit: [number] Sekunden" + in-queue: "&a Du bist Nummer [number] in der Warteschlange" + island-level-is: "&a Insel Level: &b[level]" + required-points-to-next-level: "&a Level-Fortschritt: &6 [progress]&b /&e [levelcost] &a Punkte" + deaths: "&c ([number] Tode)" + cooldown: "&c Du musst &b[time] &c Sekunden warten, bevor du das erneut machen kannst." + in-progress: "&6 Insel-Level-Berechnung läuft..." + time-out: "&c Die Level-Berechnung hat zu lange gedauert. Bitte versuche es später erneut." + detail: + description: "zeigt Details der Blöcke deiner Insel" top: description: Zeige die Top-10 - gui-title: "&aTop Zehn" + gui-title: "&a Top Zehn" gui-heading: "&6[name]: &B[rank]" - island-level: "&BLevel [level]" - warp-to: "&aTeleportiere zu [name]'s Insel" + island-level: "&b Level [level]" + warp-to: "&a Teleportiere zu [name]'s Insel" level-details: above-sea-level-blocks: Blöcke über dem Meeresspiegel spawners: Spawner underwater-blocks: Unterwasserblöcke all-blocks: Alle Blöcke - no-island: "&cKeine Insel!" - value: - description: Zeige den Wert jedes Blockes - success: "&7Wert: &e[value]" - success-underwater: "&7Wert des Blockes Unterwasser: &e[value]" - empty-hand: "&cDu hast keinen Block in der Hand" - no-value: "&cDas Item hat kein wert!" + no-island: "&c Keine Insel!" + names-island: "[name]'s Insel" + syntax: "[name] x [number]" + hint: "&c Führe level aus, um den Block-Bericht zu sehen" +level: + commands: + value: + parameters: "[hand|]" + description: zeigt den Wert von Blöcken. Füge 'hand' am Ende hinzu, um den Wert des gehaltenen Items anzuzeigen. + gui: + titles: + top: "&0&l Top Inseln" + detail-panel: "&0&l [name]'s Insel" + value-panel: "&0&l Block Werte" + buttons: + island: + empty: '&f&l [name]. Platz' + name: '&f&l [name]' + description: |- + [owner] + [members] + [place] + [level] + owners-island: "[player]'s Insel" + owner: "&7&l Besitzer: &r&b [player]" + members-title: "&7&l Mitglieder:" + member: "&b - [player]" + unknown: "unbekannt" + place: "&7&o [number]. &r&7 Platz" + level: "&7 Level: &o [number]" + material: + name: "&f&l [number] x [material]" + description: |- + [description] + [count] + [value] + [calculated] + [limit] + [id] + id: "&7 Block-ID: &e [id]" + value: "&7 Block-Wert: &e [number]" + limit: "&7 Block-Limit: &e [number]" + count: "&7 Anzahl der Blöcke: &e [number]" + calculated: "&7 Berechneter Wert: &e [number]" + value_blocks: + name: "&f&l Alle Blöcke mit Wert" + description: |- + &7 Zeige alle Blöcke + &7 mit Wert auf der Insel. + all_blocks: + name: "&f&l Alle Blöcke" + description: |- + &7 Zeige alle Blöcke + &7 auf der Insel. + above_sea_level: + name: "&f&l Blöcke über dem Meeresspiegel" + description: |- + &7 Zeige nur Blöcke + &7 die über dem + &7 Meeresspiegel sind. + underwater: + name: "&f&l Blöcke unter dem Meeresspiegel" + description: |- + &7 Zeige nur Blöcke + &7 die unter dem + &7 Meeresspiegel sind. + spawner: + name: "&f&l Spawner" + description: |- + &7 Zeige nur Spawner. + block-name: "&b Spawner" + filters: + name: + name: "&f&l Nach Name sortieren" + description: |- + &7 Alle Blöcke nach Name sortieren. + value: + name: "&f&l Nach Wert sortieren" + description: |- + &7 Alle Blöcke nach Wert sortieren. + count: + name: "&f&l Nach Anzahl sortieren" + description: |- + &7 Alle Blöcke nach Anzahl sortieren. + value: + name: "&f&l [material]" + description: |- + [description] + [value] + [underwater] + [limit] + [id] + id: "&7 Block-ID: &e [id]" + value: "&7 Block-Wert: &e [number]" + underwater: "&7 Unter dem Meeresspiegel: &e [number]" + limit: "&7 Block-Limit: &e [number]" + previous: + name: "&f&l Vorherige Seite" + description: |- + &7 Wechsle zu Seite [number] + next: + name: "&f&l Nächste Seite" + description: |- + &7 Wechsle zu Seite [number] + search: + name: "&f&l Suchen" + description: |- + &7 Suche nach einem bestimmten + &7 Wert. + search: "&b Wert: [value]" + tips: + click-to-view: "&e Klicken &7 zum Anzeigen." + click-to-previous: "&e Klicken &7 um die vorherige Seite anzuzeigen." + click-to-next: "&e Klicken &7 um die nächste Seite anzuzeigen." + click-to-select: "&e Klicken &7 zum Auswählen." + left-click-to-cycle-up: "&e Linksklick &7 zum Aufwärtsblättern." + right-click-to-cycle-down: "&e Rechtsklick &7 zum Abwärtsblättern." + left-click-to-change: "&e Linksklick &7 zum Bearbeiten." + right-click-to-clear: "&e Rechtsklick &7 zum Löschen." + click-to-asc: "&e Klicken &7 um aufsteigend zu sortieren." + click-to-desc: "&e Klicken &7 um absteigend zu sortieren." + click-to-warp: "&e Klicken &7 zum Teleportieren." + click-to-visit: "&e Klicken &7 zum Besuchen." + right-click-to-visit: "&e Rechtsklick &7 zum Besuchen." + conversations: + prefix: "&l&6 [BentoBox]: &r" + no-data: "&c Führe level aus, um den Block-Bericht zu sehen." + cancel-string: abbrechen + exit-string: abbrechen, beenden, verlassen + write-search: "&e Bitte gib einen Suchwert ein. (Schreibe 'abbrechen' zum Beenden)" + search-updated: "&a Suchwert aktualisiert." + cancelled: "&c Gespräch abgebrochen!" + no-value: "&c Dieses Item hat keinen Wert." + unknown-item: "&c Das '[material]' existiert nicht im Spiel." + value: "&7 Der Wert von '[material]' ist: &e[value]" + value-underwater: "&7 Der Wert von '[material]' unter dem Meeresspiegel: &e[value]" + empty-hand: "&c Du hast keinen Block in der Hand" + you-have: "&7 Du hast [number] beim letzten Zählen." + you-can-place: "&7 Du kannst bis zu [number] platzieren und sie werden gezählt" From 6702b49b8760e0f2a3bbc6b63e140d32279bf6a2 Mon Sep 17 00:00:00 2001 From: tastybento Date: Mon, 6 Apr 2026 20:59:36 -0700 Subject: [PATCH 20/33] Translate Korean (ko): bring up to date with en-US - Add admin.top.description, admin.stats section - Add island.detail.description - Add missing island.level keys (estimated-wait, in-queue, in-progress, time-out) - Add full level section (commands, gui, conversations) - Remove old island.value structure, replace with level.commands.value - Update required-points-to-next-level to new [progress]/[levelcost] format Co-Authored-By: Claude Sonnet 4.6 --- src/main/resources/locales/ko.yml | 198 ++++++++++++++++++++++++++---- 1 file changed, 173 insertions(+), 25 deletions(-) diff --git a/src/main/resources/locales/ko.yml b/src/main/resources/locales/ko.yml index 3b56843..d29f651 100644 --- a/src/main/resources/locales/ko.yml +++ b/src/main/resources/locales/ko.yml @@ -2,38 +2,59 @@ admin: level: parameters: "" - description: 플레이어의 섬레벨을 계산합니다 + description: 플레이어의 섬 레벨을 계산합니다 sethandicap: - parameters: "<플레이어> <핸디캡>" - description: 섬 핸디캡을 설정하십시오. 일반적으로 시작 섬의 레벨 - changed: "& a 초기 아일랜드 핸디캡이 [번호]에서 [new_number] (으)로 변경되었습니다." - invalid-level: "& c 잘못된 핸디캡. 정수를 사용하십시오." + parameters: <플레이어> [+/-]<핸디캡> + description: | + 섬 *핸디캡*을 설정하거나 변경합니다 + 예. +10은 레벨 10을 제거하고, + 30은 핸디캡을 30으로 설정하고, + -20은 레벨 20을 추가합니다 + changed: "&a 초기 섬 핸디캡이 [number]에서 [new_number](으)로 변경되었습니다." + invalid-level: "&c 잘못된 핸디캡입니다. 정수를 사용하세요." levelstatus: - description: 스캔 대기열에 몇 개의 섬이 있는지 표시 - islands-in-queue: "& a 대기열에있는 섬 : [번호]" + description: 스캔 대기열에 있는 섬 수를 표시합니다 + islands-in-queue: "&a 대기열에 있는 섬: [number]" top: - unknown-world: "& c 알수없는 월드 입니다" - display: "&f[rank]. &a[name] &7-&b[level]" + description: 상위 10개 목록을 표시합니다 + unknown-world: "&c 알 수 없는 세계입니다!" + display: "&f[rank]. &a[name] &7- &b[level]" remove: description: 탑 10에서 플레이어를 제거합니다 parameters: "<플레이어>" + stats: + description: "이 서버의 섬 통계를 표시합니다" + title: "서버 섬 통계" + world: "&a [name]" + no-data: "&c 처리할 데이터가 없습니다." + average-level: "평균 섬 레벨: [number]" + median-level: "중앙값 섬 레벨: [number]" + mode-level: "최빈값 섬 레벨: [number]" + highest-level: "최고 섬 레벨: [number]" + lowest-level: "최저 섬 레벨: [number]" + distribution: "섬 레벨 분포:" + islands: "섬" island: level: parameters: "[플레이어]" - description: 섬 레벨을 계산하거나 [플레이어]의 섬레벨을 보여줍니다 - calculating: "&a 계산중....\n" - estimated-wait: "&a예상 대기 시간 : [번호] 초" - in-queue: "& a 당신은 대기열에있는 숫자 [번호]입니다" - island-level-is: "& a 섬 레벨은 & b [level]" - required-points-to-next-level: "&a [point] 다음 레벨까지 요구되는 경험치" + description: 섬 레벨을 계산하거나 [플레이어]의 섬 레벨을 보여줍니다 + calculating: "&a 계산 중..." + estimated-wait: "&a 예상 대기 시간: [number]초" + in-queue: "&a 대기열에서 [number]번째입니다" + island-level-is: "&a 섬 레벨은 &b[level]입니다" + required-points-to-next-level: "&a 레벨 진행: &6 [progress]&b /&e [levelcost] &a 포인트" deaths: "&c ([number] 사망)" - cooldown: "&c그것을 다시하려면 &b[time]초&c를 기다려야합니다." + cooldown: "&c 다시 사용하려면 &b[time]초 &c를 기다려야 합니다." + in-progress: "&6 섬 레벨 계산이 진행 중입니다..." + time-out: "&c 레벨 계산이 너무 오래 걸렸습니다. 나중에 다시 시도해 주세요." + detail: + description: "섬 블록의 세부 정보를 표시합니다" top: description: 탑 10을 보여줍니다 gui-title: "&a 탑 10" - gui-heading: "&6 [name] : &B[rank]" + gui-heading: "&6 [name]: &B[rank]" island-level: "&b 레벨 [level]" - warp-to: "&a[name]님의 섬으로 이동중입니다.." + warp-to: "&a [name]님의 섬으로 이동 중입니다..." level-details: above-sea-level-blocks: 해발 블록 spawners: 스포너 @@ -42,10 +63,137 @@ island: no-island: "&c 섬이 없습니다." names-island: "[name]의 섬" syntax: "[name] x [number]" - hint: "&c 블록 리포트를 보려면 레벨을 해야합니다." - value: - description: 모든 블록의 값을 보여줍니다 - success: "&7이 블록의 값은 &e [value]입니다." - success-underwater: "&7 해수면 아래의 블록 값 : &e [value]" - empty-hand: "& c 손에 블록이 없습니다" - no-value: "&c 해당 항목에는 가치가 없습니다." + hint: "&c 블록 보고서를 보려면 level을 실행하세요." +level: + commands: + value: + parameters: "[hand|<재료>]" + description: 블록의 가치를 표시합니다. 손에 든 아이템의 가치를 표시하려면 끝에 'hand'를 추가하세요. + gui: + titles: + top: "&0&l 탑 섬" + detail-panel: "&0&l [name]의 섬" + value-panel: "&0&l 블록 가치" + buttons: + island: + empty: '&f&l [name]. 위치' + name: '&f&l [name]' + description: |- + [owner] + [members] + [place] + [level] + owners-island: "[player]의 섬" + owner: "&7&l 소유자: &r&b [player]" + members-title: "&7&l 멤버:" + member: "&b - [player]" + unknown: "알 수 없음" + place: "&7&o [number]. &r&7 위치" + level: "&7 레벨: &o [number]" + material: + name: "&f&l [number] x [material]" + description: |- + [description] + [count] + [value] + [calculated] + [limit] + [id] + id: "&7 블록 ID: &e [id]" + value: "&7 블록 가치: &e [number]" + limit: "&7 블록 제한: &e [number]" + count: "&7 블록 수: &e [number]" + calculated: "&7 계산된 가치: &e [number]" + value_blocks: + name: "&f&l 가치 있는 모든 블록" + description: |- + &7 섬에서 가치 있는 + &7 모든 블록을 표시합니다. + all_blocks: + name: "&f&l 모든 블록" + description: |- + &7 섬의 모든 블록을 + &7 표시합니다. + above_sea_level: + name: "&f&l 해수면 위의 블록" + description: |- + &7 해수면 위에 있는 + &7 블록만 표시합니다. + underwater: + name: "&f&l 해수면 아래의 블록" + description: |- + &7 해수면 아래에 있는 + &7 블록만 표시합니다. + spawner: + name: "&f&l 스포너" + description: |- + &7 스포너만 표시합니다. + block-name: "&b 스포너" + filters: + name: + name: "&f&l 이름으로 정렬" + description: |- + &7 모든 블록을 이름으로 정렬합니다. + value: + name: "&f&l 가치로 정렬" + description: |- + &7 모든 블록을 가치로 정렬합니다. + count: + name: "&f&l 개수로 정렬" + description: |- + &7 모든 블록을 개수로 정렬합니다. + value: + name: "&f&l [material]" + description: |- + [description] + [value] + [underwater] + [limit] + [id] + id: "&7 블록 ID: &e [id]" + value: "&7 블록 가치: &e [number]" + underwater: "&7 해수면 아래: &e [number]" + limit: "&7 블록 제한: &e [number]" + previous: + name: "&f&l 이전 페이지" + description: |- + &7 [number] 페이지로 이동 + next: + name: "&f&l 다음 페이지" + description: |- + &7 [number] 페이지로 이동 + search: + name: "&f&l 검색" + description: |- + &7 특정 값을 + &7 검색합니다. + search: "&b 값: [value]" + tips: + click-to-view: "&e 클릭 &7 하여 보기." + click-to-previous: "&e 클릭 &7 하여 이전 페이지 보기." + click-to-next: "&e 클릭 &7 하여 다음 페이지 보기." + click-to-select: "&e 클릭 &7 하여 선택." + left-click-to-cycle-up: "&e 왼쪽 클릭 &7 하여 위로." + right-click-to-cycle-down: "&e 오른쪽 클릭 &7 하여 아래로." + left-click-to-change: "&e 왼쪽 클릭 &7 하여 편집." + right-click-to-clear: "&e 오른쪽 클릭 &7 하여 지우기." + click-to-asc: "&e 클릭 &7 하여 오름차순 정렬." + click-to-desc: "&e 클릭 &7 하여 내림차순 정렬." + click-to-warp: "&e 클릭 &7 하여 워프." + click-to-visit: "&e 클릭 &7 하여 방문." + right-click-to-visit: "&e 오른쪽 클릭 &7 하여 방문." + conversations: + prefix: "&l&6 [BentoBox]: &r" + no-data: "&c 블록 보고서를 보려면 level을 실행하세요." + cancel-string: 취소 + exit-string: 취소, 종료, 나가기 + write-search: "&e 검색 값을 입력하세요. ('취소' 입력으로 종료)" + search-updated: "&a 검색 값이 업데이트되었습니다." + cancelled: "&c 대화가 취소되었습니다!" + no-value: "&c 이 아이템에는 가치가 없습니다." + unknown-item: "&c '[material]'은 게임에 존재하지 않습니다." + value: "&7 '[material]'의 가치는: &e[value]" + value-underwater: "&7 '[material]'의 해수면 아래 가치: &e[value]" + empty-hand: "&c 손에 블록이 없습니다" + you-have: "&7 마지막 계산 시 [number]개 있었습니다." + you-can-place: "&7 최대 [number]개까지 배치하면 계산됩니다" From 54b50bebe381474709156861e24cdc2b4e323a99 Mon Sep 17 00:00:00 2001 From: tastybento Date: Mon, 6 Apr 2026 21:00:43 -0700 Subject: [PATCH 21/33] Translate Latvian (lv): bring up to date with en-US - Add admin.level.sethandicap section - Add admin.levelstatus.islands-in-queue and description - Add admin.stats section - Add island.detail.description - Add missing island.level keys (estimated-wait, in-queue, in-progress, time-out) - Add island.level-details section (all keys) - Add full level section (commands, gui, conversations) - Remove old island.value structure, replace with level.commands.value - Update required-points-to-next-level to new [progress]/[levelcost] format Co-Authored-By: Claude Sonnet 4.6 --- src/main/resources/locales/lv.yml | 200 +++++++++++++++++++++++++++--- 1 file changed, 183 insertions(+), 17 deletions(-) diff --git a/src/main/resources/locales/lv.yml b/src/main/resources/locales/lv.yml index 9e0863d..69a3b98 100644 --- a/src/main/resources/locales/lv.yml +++ b/src/main/resources/locales/lv.yml @@ -3,33 +3,199 @@ admin: level: description: aprēķina spēlētāja salas līmeni parameters: "" + sethandicap: + parameters: [+/-] + description: | + iestata vai maina salas *handicap* + piem. +10 noņem 10 līmeņus, + 30 iestata handicap uz 30, + -20 pievieno 20 līmeņus + changed: "&a Sākuma salas handicap mainīts no [number] uz [new_number]." + invalid-level: "&c Nederīgs handicap. Izmanto veselu skaitli." + levelstatus: + description: rāda, cik salu ir skenēšanas rindā + islands-in-queue: "&a Salas rindā: [number]" top: description: rādīt labākās 10 salas display: "&f[rank]. &a[name] &7- &b[level]" - unknown-world: "&cNezināma pasaule!" + unknown-world: "&c Nezināma pasaule!" remove: description: noņemt spēlētāju no labāko desmit saraksta parameters: "" + stats: + description: "rādīt salas statistiku šajā serverī" + title: "Servera Salas Statistika" + world: "&a [name]" + no-data: "&c Nav datu apstrādei." + average-level: "Vidējais salas līmenis: [number]" + median-level: "Mediānais salas līmenis: [number]" + mode-level: "Biežākais salas līmenis: [number]" + highest-level: "Augstākais salas līmenis: [number]" + lowest-level: "Zemākais salas līmenis: [number]" + distribution: "Salas līmeņu sadalījums:" + islands: "salas" island: level: - calculating: "&aAprēķina līmeni..." - cooldown: "&cTev ir jāuzgaida &b[time]&c sekundes, lai vēlreiz aprēķinātu salas - līmeni!" - deaths: "&c([number] nāves)" + calculating: "&a Aprēķina līmeni..." + cooldown: "&c Tev ir jāuzgaida &b[time] &c sekundes, lai vēlreiz aprēķinātu salas līmeni!" + deaths: "&c ([number] nāves)" description: aprēķina tavas salas līmeni, vai parāda spēlētāja [player] līmeni - island-level-is: "&aSalas līmenis ir &b[level]" + island-level-is: "&a Salas līmenis ir &b[level]" parameters: "[player]" - required-points-to-next-level: "&aNepieciešami [points] punkti, lai sasniegtu - nākošo līmeni" + estimated-wait: "&a Paredzamais gaidīšanas laiks: [number] sekundes" + in-queue: "&a Tu esi numurs [number] rindā" + required-points-to-next-level: "&a Līmeņa progress: &6 [progress]&b /&e [levelcost] &a punkti" + in-progress: "&6 Salas līmeņa aprēķins notiek..." + time-out: "&c Līmeņa aprēķins ilga pārāk ilgi. Lūdzu, mēģini vēlāk." + detail: + description: "rāda tavas salas bloku detaļas" top: description: rādīt labākos 10 gui-heading: "&6[name]: &B[rank]" - gui-title: "&aLabākie 10" - island-level: "&BLīmenis [level]" - warp-to: "&APārvietoties uz [name] salu." - value: - description: rādīt vērtību jebkuram blokam - empty-hand: "&cTev nav bloks rokās." - no-value: "&cŠim blokam/priekšmetam nav vērtības." - success: "&7Vērtība šim blokam ir: &e[value]" - success-underwater: "&7Vērtība šim blokam zem jūras līmeņa: &e[value]" + gui-title: "&a Labākie 10" + island-level: "&b Līmenis [level]" + warp-to: "&a Pārvietojas uz [name] salu." + level-details: + above-sea-level-blocks: Bloki virs jūras līmeņa + spawners: Spawners + underwater-blocks: Zemūdens bloki + all-blocks: Visi bloki + no-island: "&c Nav salas!" + names-island: "[name] sala" + syntax: "[name] x [number]" + hint: "&c Palaid level, lai redzētu bloku pārskatu" +level: + commands: + value: + parameters: "[hand|]" + description: rāda bloku vērtības. Pievieno 'hand' beigās, lai rādītu rokā esošā priekšmeta vērtību. + gui: + titles: + top: "&0&l Top Salas" + detail-panel: "&0&l [name] sala" + value-panel: "&0&l Bloku Vērtības" + buttons: + island: + empty: '&f&l [name]. vieta' + name: '&f&l [name]' + description: |- + [owner] + [members] + [place] + [level] + owners-island: "[player] sala" + owner: "&7&l Īpašnieks: &r&b [player]" + members-title: "&7&l Dalībnieki:" + member: "&b - [player]" + unknown: "nezināms" + place: "&7&o [number]. &r&7 vieta" + level: "&7 Līmenis: &o [number]" + material: + name: "&f&l [number] x [material]" + description: |- + [description] + [count] + [value] + [calculated] + [limit] + [id] + id: "&7 Bloka ID: &e [id]" + value: "&7 Bloka vērtība: &e [number]" + limit: "&7 Bloka limits: &e [number]" + count: "&7 Bloku skaits: &e [number]" + calculated: "&7 Aprēķinātā vērtība: &e [number]" + value_blocks: + name: "&f&l Visi Bloki ar Vērtību" + description: |- + &7 Rādīt visus blokus + &7 ar vērtību salā. + all_blocks: + name: "&f&l Visi Bloki" + description: |- + &7 Rādīt visus blokus + &7 salā. + above_sea_level: + name: "&f&l Bloki virs jūras līmeņa" + description: |- + &7 Rādīt tikai blokus + &7 kas atrodas virs + &7 jūras līmeņa. + underwater: + name: "&f&l Bloki zem jūras līmeņa" + description: |- + &7 Rādīt tikai blokus + &7 kas atrodas zem + &7 jūras līmeņa. + spawner: + name: "&f&l Spawners" + description: |- + &7 Rādīt tikai spawnerus. + block-name: "&b Spawner" + filters: + name: + name: "&f&l Kārtot pēc Nosaukuma" + description: |- + &7 Kārtot visus blokus pēc nosaukuma. + value: + name: "&f&l Kārtot pēc Vērtības" + description: |- + &7 Kārtot visus blokus pēc vērtības. + count: + name: "&f&l Kārtot pēc Skaita" + description: |- + &7 Kārtot visus blokus pēc skaita. + value: + name: "&f&l [material]" + description: |- + [description] + [value] + [underwater] + [limit] + [id] + id: "&7 Bloka ID: &e [id]" + value: "&7 Bloka vērtība: &e [number]" + underwater: "&7 Zem jūras līmeņa: &e [number]" + limit: "&7 Bloka limits: &e [number]" + previous: + name: "&f&l Iepriekšējā Lapa" + description: |- + &7 Pāriet uz lapu [number] + next: + name: "&f&l Nākamā Lapa" + description: |- + &7 Pāriet uz lapu [number] + search: + name: "&f&l Meklēt" + description: |- + &7 Meklēt konkrētu + &7 vērtību. + search: "&b Vērtība: [value]" + tips: + click-to-view: "&e Klikšķini &7 lai skatītu." + click-to-previous: "&e Klikšķini &7 lai skatītu iepriekšējo lapu." + click-to-next: "&e Klikšķini &7 lai skatītu nākamo lapu." + click-to-select: "&e Klikšķini &7 lai izvēlētos." + left-click-to-cycle-up: "&e Kreisais Klikšķis &7 lai celtu." + right-click-to-cycle-down: "&e Labais Klikšķis &7 lai nolaistu." + left-click-to-change: "&e Kreisais Klikšķis &7 lai rediģētu." + right-click-to-clear: "&e Labais Klikšķis &7 lai notīrītu." + click-to-asc: "&e Klikšķini &7 lai kārtotu augošā secībā." + click-to-desc: "&e Klikšķini &7 lai kārtotu dilstošā secībā." + click-to-warp: "&e Klikšķini &7 lai teleportētos." + click-to-visit: "&e Klikšķini &7 lai apmeklētu." + right-click-to-visit: "&e Labais Klikšķis &7 lai apmeklētu." + conversations: + prefix: "&l&6 [BentoBox]: &r" + no-data: "&c Palaid level, lai redzētu bloku pārskatu." + cancel-string: atcelt + exit-string: atcelt, iziet, pamest + write-search: "&e Lūdzu ievadi meklēšanas vērtību. (Raksti 'atcelt' lai izietu)" + search-updated: "&a Meklēšanas vērtība atjaunināta." + cancelled: "&c Saruna atcelta!" + no-value: "&c Šim priekšmetam nav vērtības." + unknown-item: "&c '[material]' spēlē nepastāv." + value: "&7 '[material]' vērtība ir: &e[value]" + value-underwater: "&7 '[material]' vērtība zem jūras līmeņa: &e[value]" + empty-hand: "&c Rokās nav bloku" + you-have: "&7 Pēdējā skaitīšanā tev bija [number]." + you-can-place: "&7 Vari novietot līdz [number] un tie tiks skaitīti" From d68da46c3258f40479b169b1686ce3d667241851 Mon Sep 17 00:00:00 2001 From: tastybento Date: Mon, 6 Apr 2026 21:01:40 -0700 Subject: [PATCH 22/33] Translate Turkish (tr): bring up to date with en-US - Add admin.level.sethandicap section - Add admin.levelstatus section - Add admin.top.remove, admin.stats section - Add island.detail.description - Add missing island.level keys (estimated-wait, in-queue, in-progress, time-out) - Add island.level-details section (all keys) - Add full level section (commands, gui, conversations) - Remove old island.value structure, replace with level.commands.value - Update required-points-to-next-level to new [progress]/[levelcost] format Co-Authored-By: Claude Sonnet 4.6 --- src/main/resources/locales/tr.yml | 216 ++++++++++++++++++++++++++---- 1 file changed, 192 insertions(+), 24 deletions(-) diff --git a/src/main/resources/locales/tr.yml b/src/main/resources/locales/tr.yml index 1089c4f..894b7c5 100644 --- a/src/main/resources/locales/tr.yml +++ b/src/main/resources/locales/tr.yml @@ -5,33 +5,201 @@ admin: level: - parameters: "" + parameters: "" description: "Bir oyuncunun ada seviyesini hesapla" + sethandicap: + parameters: [+/-] + description: | + ada *handikabını* ayarla veya değiştir + örn. +10 10 seviye kaldırır, + 30 handikabı 30'a ayarlar, + -20 20 seviye ekler + changed: "&a Ada başlangıç handikabı [number] değerinden [new_number] değerine değiştirildi." + invalid-level: "&c Geçersiz handikap. Tam sayı kullanın." + levelstatus: + description: tarama için kaç adanın kuyrukta olduğunu göster + islands-in-queue: "&a Kuyrukta bulunan adalar: [number]" top: - description: "Ilk 10 adayı sırala" - unknown-world: "&cBilinmeyen kelime" + description: "İlk 10 adayı sırala" + unknown-world: "&c Bilinmeyen dünya!" display: "&f[rank]. &a[name] &7- &b[level]" - + remove: + description: oyuncuyu İlk On'dan kaldır + parameters: "" + stats: + description: "bu sunucudaki adaların istatistiklerini göster" + title: "Sunucu Ada İstatistikleri" + world: "&a [name]" + no-data: "&c İşlenecek veri yok." + average-level: "Ortalama Ada Seviyesi: [number]" + median-level: "Medyan Ada Seviyesi: [number]" + mode-level: "Mod Ada Seviyesi: [number]" + highest-level: "En Yüksek Ada Seviyesi: [number]" + lowest-level: "En Düşük Ada Seviyesi: [number]" + distribution: "Ada Seviyesi Dağılımı:" + islands: "ada" island: - level: - parameters: "[player]" - description: "&7Kendi ada seviyeni hesapla veya başka oyuncunun ada seviyesini öğren" - calculating: "&aLevel hesaplanıyor..." - island-level-is: "&7Ada seviyesi &b[level]" - required-points-to-next-level: "&7Adayı yükseltmek için &a[points] &7Puan gerekiyor" - deaths: "&c(Ölümler: [number])" - cooldown: "&7Bunu tekrar yapmak için &b[time] &7beklemelisin" - + level: + parameters: "[oyuncu]" + description: "Kendi ada seviyeni hesapla veya başka oyuncunun ada seviyesini öğren" + calculating: "&a Seviye hesaplanıyor..." + estimated-wait: "&a Tahmini bekleme: [number] saniye" + in-queue: "&a Kuyrukta [number]. sıradasın" + island-level-is: "&a Ada seviyesi &b[level]" + required-points-to-next-level: "&a Seviye ilerlemesi: &6 [progress]&b /&e [levelcost] &a puan" + deaths: "&c ([number] ölüm)" + cooldown: "&c Bunu tekrar yapmak için &b[time] &c saniye beklemelisin" + in-progress: "&6 Ada seviyesi hesaplaması devam ediyor..." + time-out: "&c Seviye hesaplaması çok uzun sürdü. Lütfen daha sonra tekrar deneyin." + detail: + description: "adanın blok ayrıntılarını gösterir" top: - description: "Ilk 10 adayı sırala" - gui-title: "&aIlk 10 Ada" + description: "İlk 10 adayı sırala" + gui-title: "&a İlk 10 Ada" gui-heading: "&6Sıralama: &3[rank]" - island-level: "&7Seviye: &a[level]" - warp-to: "&a[name] &7oyuncusunun adasına ışınlanıyor" - - value: - description: "Herhangi bir bloğun değerini gösterir" - success: "&7Bu bloğun değeri: &e[value]" - success-underwater: "&7Deniz seviyesinin altındaki bu bloğun değeri: &e[value]" - empty-hand: "&cElinde hiç blok yok" - no-value: "&cBu eşyanın bir değeri yok." + island-level: "&a Seviye: &7[level]" + warp-to: "&a [name] oyuncusunun adasına ışınlanıyor" + level-details: + above-sea-level-blocks: Deniz Seviyesi Üstü Bloklar + spawners: Spawner'lar + underwater-blocks: Su Altı Bloklar + all-blocks: Tüm Bloklar + no-island: "&c Ada yok!" + names-island: "[name]'nin adası" + syntax: "[name] x [number]" + hint: "&c Blok raporunu görmek için level komutunu çalıştırın" +level: + commands: + value: + parameters: "[hand|]" + description: blokların değerini gösterir. Elinizdeki eşyanın değerini görmek için sona 'hand' ekleyin. + gui: + titles: + top: "&0&l En İyi Adalar" + detail-panel: "&0&l [name]'nin adası" + value-panel: "&0&l Blok Değerleri" + buttons: + island: + empty: '&f&l [name]. sıra' + name: '&f&l [name]' + description: |- + [owner] + [members] + [place] + [level] + owners-island: "[player]'nin adası" + owner: "&7&l Sahip: &r&b [player]" + members-title: "&7&l Üyeler:" + member: "&b - [player]" + unknown: "bilinmiyor" + place: "&7&o [number]. &r&7 sıra" + level: "&7 Seviye: &o [number]" + material: + name: "&f&l [number] x [material]" + description: |- + [description] + [count] + [value] + [calculated] + [limit] + [id] + id: "&7 Blok ID: &e [id]" + value: "&7 Blok değeri: &e [number]" + limit: "&7 Blok limiti: &e [number]" + count: "&7 Blok sayısı: &e [number]" + calculated: "&7 Hesaplanan değer: &e [number]" + value_blocks: + name: "&f&l Değeri Olan Tüm Bloklar" + description: |- + &7 Adada değeri olan + &7 tüm blokları göster. + all_blocks: + name: "&f&l Tüm Bloklar" + description: |- + &7 Adadaki tüm + &7 blokları göster. + above_sea_level: + name: "&f&l Deniz Seviyesi Üstü Bloklar" + description: |- + &7 Sadece deniz + &7 seviyesi üstündeki + &7 blokları göster. + underwater: + name: "&f&l Deniz Seviyesi Altı Bloklar" + description: |- + &7 Sadece deniz + &7 seviyesi altındaki + &7 blokları göster. + spawner: + name: "&f&l Spawner'lar" + description: |- + &7 Sadece spawner'ları göster. + block-name: "&b Spawner" + filters: + name: + name: "&f&l İsme Göre Sırala" + description: |- + &7 Tüm blokları isme göre sırala. + value: + name: "&f&l Değere Göre Sırala" + description: |- + &7 Tüm blokları değerlerine göre sırala. + count: + name: "&f&l Sayıya Göre Sırala" + description: |- + &7 Tüm blokları sayılarına göre sırala. + value: + name: "&f&l [material]" + description: |- + [description] + [value] + [underwater] + [limit] + [id] + id: "&7 Blok ID: &e [id]" + value: "&7 Blok değeri: &e [number]" + underwater: "&7 Deniz seviyesi altı: &e [number]" + limit: "&7 Blok limiti: &e [number]" + previous: + name: "&f&l Önceki Sayfa" + description: |- + &7 [number]. sayfaya geç + next: + name: "&f&l Sonraki Sayfa" + description: |- + &7 [number]. sayfaya geç + search: + name: "&f&l Ara" + description: |- + &7 Belirli bir değer + &7 ara. + search: "&b Değer: [value]" + tips: + click-to-view: "&e Tıkla &7 görüntülemek için." + click-to-previous: "&e Tıkla &7 önceki sayfayı görüntülemek için." + click-to-next: "&e Tıkla &7 sonraki sayfayı görüntülemek için." + click-to-select: "&e Tıkla &7 seçmek için." + left-click-to-cycle-up: "&e Sol Tıkla &7 yukarı almak için." + right-click-to-cycle-down: "&e Sağ Tıkla &7 aşağı almak için." + left-click-to-change: "&e Sol Tıkla &7 düzenlemek için." + right-click-to-clear: "&e Sağ Tıkla &7 temizlemek için." + click-to-asc: "&e Tıkla &7 artan sırada sıralamak için." + click-to-desc: "&e Tıkla &7 azalan sırada sıralamak için." + click-to-warp: "&e Tıkla &7 ışınlanmak için." + click-to-visit: "&e Tıkla &7 ziyaret etmek için." + right-click-to-visit: "&e Sağ Tıkla &7 ziyaret etmek için." + conversations: + prefix: "&l&6 [BentoBox]: &r" + no-data: "&c Blok raporunu görmek için level komutunu çalıştırın." + cancel-string: iptal + exit-string: iptal, çıkış, bırak + write-search: "&e Lütfen bir arama değeri girin. (Çıkmak için 'iptal' yazın)" + search-updated: "&a Arama değeri güncellendi." + cancelled: "&c Konuşma iptal edildi!" + no-value: "&c Bu eşyanın değeri yok." + unknown-item: "&c '[material]' oyunda mevcut değil." + value: "&7 '[material]' değeri: &e[value]" + value-underwater: "&7 '[material]' deniz seviyesi altı değeri: &e[value]" + empty-hand: "&c Elinde hiç blok yok" + you-have: "&7 Son sayımda [number] tanen vardı." + you-can-place: "&7 [number] adete kadar yerleştirebilirsin ve sayılırlar" From 9c0a5e1611419d6d3c2117391fb6e4cc8f025780 Mon Sep 17 00:00:00 2001 From: tastybento Date: Mon, 6 Apr 2026 21:32:16 -0700 Subject: [PATCH 23/33] Version 2.24.0 Co-Authored-By: Claude Sonnet 4.6 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a2b10dd..f1207c4 100644 --- a/pom.xml +++ b/pom.xml @@ -69,7 +69,7 @@ -LOCAL - 2.23.0 + 2.24.0 BentoBoxWorld_Level bentobox-world https://sonarcloud.io From 322a605bf5311afc3599a7ebb51c498124d5e08c Mon Sep 17 00:00:00 2001 From: tastybento Date: Sat, 11 Apr 2026 07:09:06 -0700 Subject: [PATCH 24/33] Bump BentoBox to 3.14.0, migrate locales to MiniMessage, refresh Maven plugins Require BentoBox API 3.14.0 (addon.yml) and align the pom dependency with the bentobox.version property so both stay in sync. All 17 locale files are converted from legacy & color codes to MiniMessage tags now that the User API supports them natively. Maven plugins are bumped to their latest stable releases; the compiler plugin is forked to work around a plexus-compiler in-process bug ("this.hashes is null") that otherwise breaks test-compile. Co-Authored-By: Claude Opus 4.6 --- pom.xml | 27 ++-- src/main/resources/addon.yml | 2 +- src/main/resources/locales/cs.yml | 190 +++++++++++----------- src/main/resources/locales/de.yml | 198 +++++++++++------------ src/main/resources/locales/en-US.yml | 230 +++++++++++++++------------ src/main/resources/locales/es.yml | 198 +++++++++++------------ src/main/resources/locales/fr.yml | 196 +++++++++++------------ src/main/resources/locales/hu.yml | 198 +++++++++++------------ src/main/resources/locales/id.yml | 198 +++++++++++------------ src/main/resources/locales/ko.yml | 194 +++++++++++----------- src/main/resources/locales/lv.yml | 198 +++++++++++------------ src/main/resources/locales/nl.yml | 190 +++++++++++----------- src/main/resources/locales/pl.yml | 196 +++++++++++------------ src/main/resources/locales/pt.yml | 198 +++++++++++------------ src/main/resources/locales/tr.yml | 198 +++++++++++------------ src/main/resources/locales/uk.yml | 196 +++++++++++------------ src/main/resources/locales/vi.yml | 198 +++++++++++------------ src/main/resources/locales/zh-CN.yml | 184 ++++++++++----------- 18 files changed, 1611 insertions(+), 1578 deletions(-) diff --git a/pom.xml b/pom.xml index f1207c4..34820a5 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,7 @@ v1.21-SNAPSHOT 1.21.11-R0.1-SNAPSHOT - 3.10.2 + 3.14.0 1.12.0 @@ -222,7 +222,7 @@ world.bentobox bentobox - 3.10.0 + ${bentobox.version} world.bentobox @@ -378,25 +378,26 @@ org.apache.maven.plugins maven-clean-plugin - 3.4.0 + 3.5.0 org.apache.maven.plugins maven-resources-plugin - 3.3.1 + 3.5.0 org.apache.maven.plugins maven-compiler-plugin - 3.14.1 + 3.15.0 ${java.version} + true org.apache.maven.plugins maven-surefire-plugin - 3.5.4 + 3.5.5 ${argLine} @@ -434,12 +435,12 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.2 + 3.5.0 org.apache.maven.plugins maven-javadoc-plugin - 3.11.1 + 3.12.0 none false @@ -458,7 +459,7 @@ org.apache.maven.plugins maven-source-plugin - 3.3.1 + 3.4.0 attach-sources @@ -471,17 +472,17 @@ org.apache.maven.plugins maven-install-plugin - 3.1.3 + 3.1.4 org.apache.maven.plugins maven-deploy-plugin - 3.1.3 + 3.1.4 org.apache.maven.plugins maven-shade-plugin - 3.6.0 + 3.6.2 true @@ -513,7 +514,7 @@ org.jacoco jacoco-maven-plugin - 0.8.13 + 0.8.14 true diff --git a/src/main/resources/addon.yml b/src/main/resources/addon.yml index ac03c0b..e99df00 100755 --- a/src/main/resources/addon.yml +++ b/src/main/resources/addon.yml @@ -2,7 +2,7 @@ name: Level main: world.bentobox.level.Level version: ${version}${build.number} icon: DIAMOND -api-version: 2.4.0 +api-version: 3.14.0 authors: tastybento diff --git a/src/main/resources/locales/cs.yml b/src/main/resources/locales/cs.yml index 9eea45e..9ec10f1 100644 --- a/src/main/resources/locales/cs.yml +++ b/src/main/resources/locales/cs.yml @@ -9,23 +9,23 @@ admin: např. +10 odstraní 10 úrovní, 30 nastaví handicap na 30, -20 přidá 20 úrovní - changed: '&a Počáteční ostrovní handicap se změnil z [number] na [new_number].' - invalid-level: '&c Neplatný handicap. Použijte celé číslo.' + changed: ' Počáteční ostrovní handicap se změnil z [number] na [new_number].' + invalid-level: ' Neplatný handicap. Použijte celé číslo.' levelstatus: description: Ukažte, kolik ostrovů je ve frontě pro skenování - islands-in-queue: '&a Ostrovy ve frontě: [number]' + islands-in-queue: ' Ostrovy ve frontě: [number]' top: description: ukázat seznam TOP 10 - unknown-world: '&cNeznámý svět!' - display: '&f[rank]. &a[name] &7- &b[level]' + unknown-world: 'Neznámý svět!' + display: '[rank]. [name] - [level]' remove: description: odstranit hráče z TOP 10 parameters: stats: description: Zobrazit statistiky na ostrovech na tomto serveru title: Statistiky serveru - world: '&a [name]' - no-data: '&c Žádná data pro zpracování.' + world: ' [name]' + no-data: ' Žádná data pro zpracování.' average-level: 'Průměrná úroveň ostrova: [number]' median-level: 'Střední úroveň ostrova: [number]' mode-level: 'Úroveň ostrova režimu: [number]' @@ -37,32 +37,32 @@ island: level: parameters: '[player]' description: spočítat úroveň tvého ostrova nebo ostrova hráče [player] - calculating: '&aPočítám úroveň...' - estimated-wait: '&a Odhadované čekání: [number] sekundy' - in-queue: '&a Jste číslo [number] ve frontě' - island-level-is: '&aÚroveň ostrova je &b[level]' - required-points-to-next-level: '&a Pokrok úrovně: &6 [progress]&b /&e [levelcost] &a bodů' - deaths: '&c([number] smrtí)' - cooldown: '&cMusíš čekat &b[time] &csekund, než můžeš příkaz znovu použít' - in-progress: '&6 Probíhá výpočet úrovně ostrova ...' - time-out: '&c Výpočet úrovně trval příliš dlouho. Zkuste to prosím znovu později.' + calculating: 'Počítám úroveň...' + estimated-wait: ' Odhadované čekání: [number] sekundy' + in-queue: ' Jste číslo [number] ve frontě' + island-level-is: 'Úroveň ostrova je [level]' + required-points-to-next-level: ' Pokrok úrovně: [progress] / [levelcost] bodů' + deaths: '([number] smrtí)' + cooldown: 'Musíš čekat [time] sekund, než můžeš příkaz znovu použít' + in-progress: ' Probíhá výpočet úrovně ostrova ...' + time-out: ' Výpočet úrovně trval příliš dlouho. Zkuste to prosím znovu později.' detail: description: "zobrazit podrobnosti o blocích vašeho ostrova" top: description: ukázat TOP 10 - gui-title: '&aTOP 10' - gui-heading: '&6[name]: &B[rank]' - island-level: '&BÚroveň [level]' - warp-to: '&AWarp na ostrov [name]' + gui-title: 'TOP 10' + gui-heading: '[name]: [rank]' + island-level: 'Úroveň [level]' + warp-to: 'Warp na ostrov [name]' level-details: above-sea-level-blocks: Nad bloky hladiny moře spawners: Spawners underwater-blocks: Podvodové bloky all-blocks: Všechny bloky - no-island: '&c Žádný ostrov!' + no-island: ' Žádný ostrov!' names-island: '[name]''s Island' syntax: '[name] x [number]' - hint: '&c Spustit úroveň a zobrazit zprávu bloku' + hint: ' Spustit úroveň a zobrazit zprávu bloku' level: commands: value: @@ -72,27 +72,27 @@ level: položku v ruce. gui: titles: - top: '&0&l Nejlepší ostrovy' - detail-panel: '&0&l [name]''s Island' - value-panel: '&0&l Blokové hodnoty' + top: ' Nejlepší ostrovy' + detail-panel: ' [name]''s Island' + value-panel: ' Blokové hodnoty' buttons: island: - empty: '&f&l [name]. místo' - name: '&f&l [name]' + empty: ' [name]. místo' + name: ' [name]' description: |- [owner] [members] [place] [level] owners-island: '[player]''s Island' - owner: '&7&l Majitel: &r&b [player]' - members-title: '&7&l Členové:' - member: '&b - [player]' + owner: ' Majitel: [player]' + members-title: ' Členové:' + member: ' - [player]' unknown: neznámý - place: '&7&o [number]. &r&7 místo' - level: '&7 Úroveň:&o [number]' + place: ' [number]. místo' + level: ' Úroveň: [number]' material: - name: '&f&l [number] x [material]' + name: ' [number] x [material]' description: |- [description] [count] @@ -100,97 +100,97 @@ level: [calculated] [limit] [id] - id: '&7 Blok ID: &e [id]' - value: '&7 Hodnota bloku:&e [number]' - limit: '&7 Limit bloku:&e [number]' - count: '&7 Počet bloků:&e [number]' - calculated: '&7 Vypočítaná hodnota:&e [number]' + id: ' Blok ID: [id]' + value: ' Hodnota bloku: [number]' + limit: ' Limit bloku: [number]' + count: ' Počet bloků: [number]' + calculated: ' Vypočítaná hodnota: [number]' value_blocks: - name: '&f&l Všechny bloky s hodnotou' + name: ' Všechny bloky s hodnotou' description: |- - &7 Zobrazit všechny bloky - &7 s hodnotou na ostrově. + Zobrazit všechny bloky + s hodnotou na ostrově. all_blocks: - name: '&f&l Všechny bloky' + name: ' Všechny bloky' description: |- - &7 Zobrazit všechny bloky - &7 na ostrově. + Zobrazit všechny bloky + na ostrově. above_sea_level: - name: '&f&l Bloky nad hladinou moře' + name: ' Bloky nad hladinou moře' description: |- - &7 Zobrazit pouze bloky - &7 které jsou nad mořem - &7 úroveň. + Zobrazit pouze bloky + které jsou nad mořem + úroveň. underwater: - name: '&f&l Blocks Under Sea level' + name: ' Blocks Under Sea level' description: |- - &7 Zobrazit pouze bloky - &7 to je níže moře - &7 úroveň. + Zobrazit pouze bloky + to je níže moře + úroveň. spawner: - name: '&f&l Spawners' - description: '&7 Displej pouze tření.' - block-name: '&b Spawner' + name: ' Spawners' + description: ' Displej pouze tření.' + block-name: ' Spawner' filters: name: - name: '&f&l Sort by Name' - description: '&7 Sort all blocks by name.' + name: ' Sort by Name' + description: ' Sort all blocks by name.' value: - name: '&f&l Sort by Value' - description: '&7 Sort all blocks by their value.' + name: ' Sort by Value' + description: ' Sort all blocks by their value.' count: - name: '&f&l Sort by Count' - description: '&7 Sort all blocks by their amount.' + name: ' Sort by Count' + description: ' Sort all blocks by their amount.' value: - name: '&f&l [material]' + name: ' [material]' description: |- [description] [value] [underwater] [limit] [id] - id: '&7 Block id: &e [id]' - value: '&7 Hodnota bloku: &e [number]' - underwater: '&7 Hladina moře Bellow: &e [number]' - limit: '&7 Limit bloku: &e [number]' + id: ' Block id: [id]' + value: ' Hodnota bloku: [number]' + underwater: ' Hladina moře Bellow: [number]' + limit: ' Limit bloku: [number]' previous: name: Předchozí stránka - description: '&7 Přepněte na stránku [number]' + description: ' Přepněte na stránku [number]' next: name: Další stránka - description: '&7 Přepněte na stránku [number]' + description: ' Přepněte na stránku [number]' search: name: Vyhledávání description: |- - &7 Hledejte konkrétní - &7 hodnota. - search: '&b Hodnota: [value]' + Hledejte konkrétní + hodnota. + search: ' Hodnota: [value]' tips: - click-to-view: '&e Kliknutím zobrazíte.' - click-to-previous: '&e Kliknutím zobrazíte předchozí stránku.' - click-to-next: '&e Kliknutím zobrazíte další stránku.' - click-to-select: '&e Kliknutím vyberte.' - left-click-to-cycle-up: '&e Levé kliknutí na cyklus nahoru.' - right-click-to-cycle-down: '&e Kliknutím pravým tlačítkem je cyklujte dolů.' - left-click-to-change: '&e Levý kliknutí upravte.' - right-click-to-clear: '&e Kliknutím pravým tlačítkem vymažte.' - click-to-asc: '&e Kliknutím třídíte v zvyšování pořadí.' - click-to-desc: '&e Kliknutím třídíte v klesajícím pořadí.' - click-to-warp: '&e Klikněte na warp.' - click-to-visit: '&e Kliknutím navštívíte.' - right-click-to-visit: '&e Kliknutím na návštěvu.' + click-to-view: ' Kliknutím zobrazíte.' + click-to-previous: ' Kliknutím zobrazíte předchozí stránku.' + click-to-next: ' Kliknutím zobrazíte další stránku.' + click-to-select: ' Kliknutím vyberte.' + left-click-to-cycle-up: ' Levé kliknutí na cyklus nahoru.' + right-click-to-cycle-down: ' Kliknutím pravým tlačítkem je cyklujte dolů.' + left-click-to-change: ' Levý kliknutí upravte.' + right-click-to-clear: ' Kliknutím pravým tlačítkem vymažte.' + click-to-asc: ' Kliknutím třídíte v zvyšování pořadí.' + click-to-desc: ' Kliknutím třídíte v klesajícím pořadí.' + click-to-warp: ' Klikněte na warp.' + click-to-visit: ' Kliknutím navštívíte.' + right-click-to-visit: ' Kliknutím na návštěvu.' conversations: - prefix: '&l&6 [BentoBox]: &r' - no-data: '&c Spusťte úroveň a zobrazí se zpráva o bloku.' + prefix: ' [BentoBox]: ' + no-data: ' Spusťte úroveň a zobrazí se zpráva o bloku.' cancel-string: zrušit exit-string: zrušit, ukončit, přestat - write-search: '&e Zadejte hodnotu vyhledávání. (Napište „zrušit“ do ukončení)' + write-search: ' Zadejte hodnotu vyhledávání. (Napište „zrušit“ do ukončení)' search-updated: Aktualizována hodnota vyhledávání. - cancelled: '&c Konverzace zrušena!' - no-value: '&c Tato položka nemá žádnou hodnotu.' - unknown-item: '&c „[material]“ ve hře neexistuje.' - value: '&7 Hodnota „[material]“ je: &e [value]' - value-underwater: '&7 Hodnota [material] ''pod hladinou moře: &e [value]' - empty-hand: '&c V ruce nejsou žádné bloky' - you-have: '&7 Máte [number] na posledním počtu.' - you-can-place: '&7 Můžete umístit až [number] a nechat je počítat' + cancelled: ' Konverzace zrušena!' + no-value: ' Tato položka nemá žádnou hodnotu.' + unknown-item: ' „[material]“ ve hře neexistuje.' + value: ' Hodnota „[material]“ je: [value]' + value-underwater: ' Hodnota [material] ''pod hladinou moře: [value]' + empty-hand: ' V ruce nejsou žádné bloky' + you-have: ' Máte [number] na posledním počtu.' + you-can-place: ' Můžete umístit až [number] a nechat je počítat' diff --git a/src/main/resources/locales/de.yml b/src/main/resources/locales/de.yml index accb170..0cfa409 100644 --- a/src/main/resources/locales/de.yml +++ b/src/main/resources/locales/de.yml @@ -10,23 +10,23 @@ admin: z.B. +10 entfernt 10 Level, 30 setzt Handicap auf 30, -20 fügt 20 Level hinzu - changed: "&a Das anfängliche Insel-Handicap wurde von [number] auf [new_number] geändert." - invalid-level: "&c Ungültiges Handicap. Verwende eine ganze Zahl." + changed: " Das anfängliche Insel-Handicap wurde von [number] auf [new_number] geändert." + invalid-level: " Ungültiges Handicap. Verwende eine ganze Zahl." levelstatus: description: Zeige wie viele Inseln in der Warteschlange für den Scan sind - islands-in-queue: "&a Inseln in der Warteschlange: [number]" + islands-in-queue: " Inseln in der Warteschlange: [number]" top: description: Zeige die Top-10 Liste - unknown-world: "&c Unbekannte Welt!" - display: "&f[rank]. &a[name] &7- &b[level]" + unknown-world: " Unbekannte Welt!" + display: "[rank]. [name] - [level]" remove: description: entferne Spieler von Top-10 parameters: "" stats: description: "Zeige Statistiken zu Inseln auf diesem Server" title: "Server-Insel-Statistiken" - world: "&a [name]" - no-data: "&c Keine Daten zum Verarbeiten." + world: " [name]" + no-data: " Keine Daten zum Verarbeiten." average-level: "Durchschnittliches Insel-Level: [number]" median-level: "Medianes Insel-Level: [number]" mode-level: "Häufigstes Insel-Level: [number]" @@ -38,32 +38,32 @@ island: level: parameters: "[Spieler]" description: Berechne dein Insel Level oder zeige das Level von [Spieler] - calculating: "&a Berechne Level..." - estimated-wait: "&a Geschätzte Wartezeit: [number] Sekunden" - in-queue: "&a Du bist Nummer [number] in der Warteschlange" - island-level-is: "&a Insel Level: &b[level]" - required-points-to-next-level: "&a Level-Fortschritt: &6 [progress]&b /&e [levelcost] &a Punkte" - deaths: "&c ([number] Tode)" - cooldown: "&c Du musst &b[time] &c Sekunden warten, bevor du das erneut machen kannst." - in-progress: "&6 Insel-Level-Berechnung läuft..." - time-out: "&c Die Level-Berechnung hat zu lange gedauert. Bitte versuche es später erneut." + calculating: " Berechne Level..." + estimated-wait: " Geschätzte Wartezeit: [number] Sekunden" + in-queue: " Du bist Nummer [number] in der Warteschlange" + island-level-is: " Insel Level: [level]" + required-points-to-next-level: " Level-Fortschritt: [progress] / [levelcost] Punkte" + deaths: " ([number] Tode)" + cooldown: " Du musst [time] Sekunden warten, bevor du das erneut machen kannst." + in-progress: " Insel-Level-Berechnung läuft..." + time-out: " Die Level-Berechnung hat zu lange gedauert. Bitte versuche es später erneut." detail: description: "zeigt Details der Blöcke deiner Insel" top: description: Zeige die Top-10 - gui-title: "&a Top Zehn" - gui-heading: "&6[name]: &B[rank]" - island-level: "&b Level [level]" - warp-to: "&a Teleportiere zu [name]'s Insel" + gui-title: " Top Zehn" + gui-heading: "[name]: [rank]" + island-level: " Level [level]" + warp-to: " Teleportiere zu [name]'s Insel" level-details: above-sea-level-blocks: Blöcke über dem Meeresspiegel spawners: Spawner underwater-blocks: Unterwasserblöcke all-blocks: Alle Blöcke - no-island: "&c Keine Insel!" + no-island: " Keine Insel!" names-island: "[name]'s Insel" syntax: "[name] x [number]" - hint: "&c Führe level aus, um den Block-Bericht zu sehen" + hint: " Führe level aus, um den Block-Bericht zu sehen" level: commands: value: @@ -71,27 +71,27 @@ level: description: zeigt den Wert von Blöcken. Füge 'hand' am Ende hinzu, um den Wert des gehaltenen Items anzuzeigen. gui: titles: - top: "&0&l Top Inseln" - detail-panel: "&0&l [name]'s Insel" - value-panel: "&0&l Block Werte" + top: " Top Inseln" + detail-panel: " [name]'s Insel" + value-panel: " Block Werte" buttons: island: - empty: '&f&l [name]. Platz' - name: '&f&l [name]' + empty: ' [name]. Platz' + name: ' [name]' description: |- [owner] [members] [place] [level] owners-island: "[player]'s Insel" - owner: "&7&l Besitzer: &r&b [player]" - members-title: "&7&l Mitglieder:" - member: "&b - [player]" + owner: " Besitzer: [player]" + members-title: " Mitglieder:" + member: " - [player]" unknown: "unbekannt" - place: "&7&o [number]. &r&7 Platz" - level: "&7 Level: &o [number]" + place: " [number]. Platz" + level: " Level: [number]" material: - name: "&f&l [number] x [material]" + name: " [number] x [material]" description: |- [description] [count] @@ -99,103 +99,103 @@ level: [calculated] [limit] [id] - id: "&7 Block-ID: &e [id]" - value: "&7 Block-Wert: &e [number]" - limit: "&7 Block-Limit: &e [number]" - count: "&7 Anzahl der Blöcke: &e [number]" - calculated: "&7 Berechneter Wert: &e [number]" + id: " Block-ID: [id]" + value: " Block-Wert: [number]" + limit: " Block-Limit: [number]" + count: " Anzahl der Blöcke: [number]" + calculated: " Berechneter Wert: [number]" value_blocks: - name: "&f&l Alle Blöcke mit Wert" + name: " Alle Blöcke mit Wert" description: |- - &7 Zeige alle Blöcke - &7 mit Wert auf der Insel. + Zeige alle Blöcke + mit Wert auf der Insel. all_blocks: - name: "&f&l Alle Blöcke" + name: " Alle Blöcke" description: |- - &7 Zeige alle Blöcke - &7 auf der Insel. + Zeige alle Blöcke + auf der Insel. above_sea_level: - name: "&f&l Blöcke über dem Meeresspiegel" + name: " Blöcke über dem Meeresspiegel" description: |- - &7 Zeige nur Blöcke - &7 die über dem - &7 Meeresspiegel sind. + Zeige nur Blöcke + die über dem + Meeresspiegel sind. underwater: - name: "&f&l Blöcke unter dem Meeresspiegel" + name: " Blöcke unter dem Meeresspiegel" description: |- - &7 Zeige nur Blöcke - &7 die unter dem - &7 Meeresspiegel sind. + Zeige nur Blöcke + die unter dem + Meeresspiegel sind. spawner: - name: "&f&l Spawner" + name: " Spawner" description: |- - &7 Zeige nur Spawner. - block-name: "&b Spawner" + Zeige nur Spawner. + block-name: " Spawner" filters: name: - name: "&f&l Nach Name sortieren" + name: " Nach Name sortieren" description: |- - &7 Alle Blöcke nach Name sortieren. + Alle Blöcke nach Name sortieren. value: - name: "&f&l Nach Wert sortieren" + name: " Nach Wert sortieren" description: |- - &7 Alle Blöcke nach Wert sortieren. + Alle Blöcke nach Wert sortieren. count: - name: "&f&l Nach Anzahl sortieren" + name: " Nach Anzahl sortieren" description: |- - &7 Alle Blöcke nach Anzahl sortieren. + Alle Blöcke nach Anzahl sortieren. value: - name: "&f&l [material]" + name: " [material]" description: |- [description] [value] [underwater] [limit] [id] - id: "&7 Block-ID: &e [id]" - value: "&7 Block-Wert: &e [number]" - underwater: "&7 Unter dem Meeresspiegel: &e [number]" - limit: "&7 Block-Limit: &e [number]" + id: " Block-ID: [id]" + value: " Block-Wert: [number]" + underwater: " Unter dem Meeresspiegel: [number]" + limit: " Block-Limit: [number]" previous: - name: "&f&l Vorherige Seite" + name: " Vorherige Seite" description: |- - &7 Wechsle zu Seite [number] + Wechsle zu Seite [number] next: - name: "&f&l Nächste Seite" + name: " Nächste Seite" description: |- - &7 Wechsle zu Seite [number] + Wechsle zu Seite [number] search: - name: "&f&l Suchen" + name: " Suchen" description: |- - &7 Suche nach einem bestimmten - &7 Wert. - search: "&b Wert: [value]" + Suche nach einem bestimmten + Wert. + search: " Wert: [value]" tips: - click-to-view: "&e Klicken &7 zum Anzeigen." - click-to-previous: "&e Klicken &7 um die vorherige Seite anzuzeigen." - click-to-next: "&e Klicken &7 um die nächste Seite anzuzeigen." - click-to-select: "&e Klicken &7 zum Auswählen." - left-click-to-cycle-up: "&e Linksklick &7 zum Aufwärtsblättern." - right-click-to-cycle-down: "&e Rechtsklick &7 zum Abwärtsblättern." - left-click-to-change: "&e Linksklick &7 zum Bearbeiten." - right-click-to-clear: "&e Rechtsklick &7 zum Löschen." - click-to-asc: "&e Klicken &7 um aufsteigend zu sortieren." - click-to-desc: "&e Klicken &7 um absteigend zu sortieren." - click-to-warp: "&e Klicken &7 zum Teleportieren." - click-to-visit: "&e Klicken &7 zum Besuchen." - right-click-to-visit: "&e Rechtsklick &7 zum Besuchen." + click-to-view: " Klicken zum Anzeigen." + click-to-previous: " Klicken um die vorherige Seite anzuzeigen." + click-to-next: " Klicken um die nächste Seite anzuzeigen." + click-to-select: " Klicken zum Auswählen." + left-click-to-cycle-up: " Linksklick zum Aufwärtsblättern." + right-click-to-cycle-down: " Rechtsklick zum Abwärtsblättern." + left-click-to-change: " Linksklick zum Bearbeiten." + right-click-to-clear: " Rechtsklick zum Löschen." + click-to-asc: " Klicken um aufsteigend zu sortieren." + click-to-desc: " Klicken um absteigend zu sortieren." + click-to-warp: " Klicken zum Teleportieren." + click-to-visit: " Klicken zum Besuchen." + right-click-to-visit: " Rechtsklick zum Besuchen." conversations: - prefix: "&l&6 [BentoBox]: &r" - no-data: "&c Führe level aus, um den Block-Bericht zu sehen." + prefix: " [BentoBox]: " + no-data: " Führe level aus, um den Block-Bericht zu sehen." cancel-string: abbrechen exit-string: abbrechen, beenden, verlassen - write-search: "&e Bitte gib einen Suchwert ein. (Schreibe 'abbrechen' zum Beenden)" - search-updated: "&a Suchwert aktualisiert." - cancelled: "&c Gespräch abgebrochen!" - no-value: "&c Dieses Item hat keinen Wert." - unknown-item: "&c Das '[material]' existiert nicht im Spiel." - value: "&7 Der Wert von '[material]' ist: &e[value]" - value-underwater: "&7 Der Wert von '[material]' unter dem Meeresspiegel: &e[value]" - empty-hand: "&c Du hast keinen Block in der Hand" - you-have: "&7 Du hast [number] beim letzten Zählen." - you-can-place: "&7 Du kannst bis zu [number] platzieren und sie werden gezählt" + write-search: " Bitte gib einen Suchwert ein. (Schreibe 'abbrechen' zum Beenden)" + search-updated: " Suchwert aktualisiert." + cancelled: " Gespräch abgebrochen!" + no-value: " Dieses Item hat keinen Wert." + unknown-item: " Das '[material]' existiert nicht im Spiel." + value: " Der Wert von '[material]' ist: [value]" + value-underwater: " Der Wert von '[material]' unter dem Meeresspiegel: [value]" + empty-hand: " Du hast keinen Block in der Hand" + you-have: " Du hast [number] beim letzten Zählen." + you-can-place: " Du kannst bis zu [number] platzieren und sie werden gezählt" diff --git a/src/main/resources/locales/en-US.yml b/src/main/resources/locales/en-US.yml index b1bc380..1f91d39 100755 --- a/src/main/resources/locales/en-US.yml +++ b/src/main/resources/locales/en-US.yml @@ -14,23 +14,23 @@ admin: e.g. +10 will remove 10 levels, 30 will set handicap to 30, -20 will add 20 levels - changed: "&a Initial island handicap changed from [number] to [new_number]." - invalid-level: "&c Invalid handicap. Use an integer." + changed: " Initial island handicap changed from [number] to [new_number]." + invalid-level: " Invalid handicap. Use an integer." levelstatus: description: "show how many islands are in the queue for scanning" - islands-in-queue: "&a Islands in queue: [number]" + islands-in-queue: " Islands in queue: [number]" top: description: "show the top ten list" - unknown-world: "&c Unknown world!" - display: "&f[rank]. &a[name] &7- &b[level]" + unknown-world: " Unknown world!" + display: "[rank]. [name] - [level]" remove: description: "remove player from Top Ten" parameters: "" stats: description: "show stats on islands on this server" title: "Server Island Stats" - world: "&a [name]" - no-data: "&c No data to process." + world: " [name]" + no-data: " No data to process." average-level: "Average Island Level: [number]" median-level: "Median Island Level: [number]" mode-level: "Mode Island Level: [number]" @@ -42,33 +42,60 @@ island: level: parameters: "[player]" description: "calculate your island level or show the level of [player]" - calculating: "&a Calculating level..." - estimated-wait: "&a Estimated wait: [number] seconds" - in-queue: "&a You are number [number] in the queue" - island-level-is: "&a Island level is &b[level]" - required-points-to-next-level: "&a Level progress: &6 [progress]&b /&e [levelcost] &a points" - deaths: "&c ([number] deaths)" - cooldown: "&c You must wait &b[time] &c seconds until you can do that again" - in-progress: "&6 Island level calculation is in progress..." - time-out: "&c The level calculation took too long. Please try again later." + calculating: " Calculating level..." + estimated-wait: " Estimated wait: [number] seconds" + in-queue: " You are number [number] in the queue" + island-level-is: " Island level is [level]" + required-points-to-next-level: " Level progress: [progress] / [levelcost] points" + deaths: " ([number] deaths)" + cooldown: " You must wait [time] seconds until you can do that again" + in-progress: " Island level calculation is in progress..." + time-out: " The level calculation took too long. Please try again later." + donate: + parameters: "[hand [amount]]" + description: "donate blocks to permanently raise island level" + must-be-on-island: " You must be on your island to donate blocks." + no-permission: " You do not have permission to donate blocks on this island." + no-value: " That block has no level value." + invalid-amount: " Invalid amount. Use a positive number." + empty: " There are no valid blocks to donate." + cancelled: " Donation cancelled. Items returned." + success: " Donated [number] blocks for [points] points! These points are permanent." + confirm: " Confirm Donation" + cancel: " Cancel" + gui-title: " Donate Blocks" + gui-info: " Currently donated: [points] points" + preview: " Points to add: [points]" + hand: + success: " Donated [number] x [material] for [points] permanent points!" + not-block: " You must be holding a placeable block to donate." detail: description: "shows detail of your island blocks" top: description: "show the Top Ten" - gui-title: "&a Top Ten" - gui-heading: "&6[name]: &B[rank]" - island-level: "&b Level [level]" - warp-to: "&A Warping to [name]'s island" + gui-title: " Top Ten" + gui-heading: "[name]: [rank]" + island-level: " Level [level]" + warp-to: " Warping to [name]'s island" level-details: above-sea-level-blocks: "Above Sea Level Blocks" spawners: "Spawners" underwater-blocks: "Underwater Blocks" all-blocks: "All Blocks" - no-island: "&c No island!" + no-island: " No island!" names-island: "[name]'s island" syntax: "[name] x [number]" - hint: "&c Run level to see the block report" + hint: " Run level to see the block report" + +protection: + flags: + ISLAND_BLOCK_DONATION: + description: |- + Toggle who can donate + blocks to raise island level. + name: Block Donation + hint: Block donation not allowed level: commands: @@ -77,13 +104,13 @@ level: description: "shows the value of blocks. Add 'hand' at the end to display value for item in hand." gui: titles: - top: "&0&l Top Islands" - detail-panel: "&0&l [name]'s island" - value-panel: "&0&l Block Values" + top: " Top Islands" + detail-panel: " [name]'s island" + value-panel: " Block Values" buttons: island: - empty: '&f&l [name]. place' - name: '&f&l [name]' + empty: ' [name]. place' + name: ' [name]' description: |- [owner] [members] @@ -92,19 +119,19 @@ level: # Text that is replacing [name] if island do not have a name owners-island: "[player]'s Island" # Text for [owner] in description. - owner: "&7&l Owner: &r&b [player]" + owner: " Owner: [player]" # Title before listing members for [members] in description - members-title: "&7&l Members:" + members-title: " Members:" # List each member under the title for [members] in description - member: "&b - [player]" + member: " - [player]" # Name of unknown player. unknown: "unknown" # Section for parsing [place] - place: "&7&o [number]. &r&7 place" + place: " [number]. place" # Section for parsing [level] - level: "&7 Level: &o [number]" + level: " Level: [number]" material: - name: "&f&l [number] x [material]" + name: " [number] x [material]" description: |- [description] [count] @@ -112,117 +139,122 @@ level: [calculated] [limit] [id] - id: "&7 Block id: &e [id]" - value: "&7 Block value: &e [number]" - limit: "&7 Block limit: &e [number]" - count: "&7 Number of blocks: &e [number]" - calculated: "&7 Calculated value: &e [number]" + id: " Block id: [id]" + value: " Block value: [number]" + limit: " Block limit: [number]" + count: " Number of blocks: [number]" + calculated: " Calculated value: [number]" value_blocks: - name: "&f&l All Blocks With Value" + name: " All Blocks With Value" description: |- - &7 Display all blocks - &7 with value on island. + Display all blocks + with value on island. all_blocks: - name: "&f&l All Blocks" + name: " All Blocks" description: |- - &7 Display all blocks - &7 on island. + Display all blocks + on island. above_sea_level: - name: "&f&l Blocks Above Sea Level" + name: " Blocks Above Sea Level" description: |- - &7 Display only blocks - &7 that are above sea - &7 level. + Display only blocks + that are above sea + level. underwater: - name: "&f&l Blocks Under Sea level" + name: " Blocks Under Sea level" description: |- - &7 Display only blocks - &7 that are bellow sea - &7 level. + Display only blocks + that are bellow sea + level. spawner: - name: "&f&l Spawners" + name: " Spawners" + description: |- + Display only spawners. + block-name: " Spawner" + donated: + name: " Donated Blocks" description: |- - &7 Display only spawners. - block-name: "&b Spawner" + Display blocks permanently + donated to island level. filters: name: - name: "&f&l Sort by Name" + name: " Sort by Name" description: |- - &7 Sort all blocks by name. + Sort all blocks by name. value: - name: "&f&l Sort by Value" + name: " Sort by Value" description: |- - &7 Sort all blocks by their value. + Sort all blocks by their value. count: - name: "&f&l Sort by Count" + name: " Sort by Count" description: |- - &7 Sort all blocks by their amount. + Sort all blocks by their amount. value: - name: "&f&l [material]" + name: " [material]" description: |- [description] [value] [underwater] [limit] [id] - id: "&7 Block id: &e [id]" - value: "&7 Block value: &e [number]" - underwater: "&7 Bellow sea level: &e [number]" - limit: "&7 Block limit: &e [number]" + id: " Block id: [id]" + value: " Block value: [number]" + underwater: " Bellow sea level: [number]" + limit: " Block limit: [number]" # Button that is used in multi-page GUIs which allows to return to previous page. previous: - name: "&f&l Previous Page" + name: " Previous Page" description: |- - &7 Switch to [number] page + Switch to [number] page # Button that is used in multi-page GUIs which allows to go to next page. next: - name: "&f&l Next Page" + name: " Next Page" description: |- - &7 Switch to [number] page + Switch to [number] page search: - name: "&f&l Search" + name: " Search" description: |- - &7 Search for a specific - &7 value. - search: "&b Value: [value]" + Search for a specific + value. + search: " Value: [value]" tips: - click-to-view: "&e Click &7 to view." - click-to-previous: "&e Click &7 to view previous page." - click-to-next: "&e Click &7 to view next page." - click-to-select: "&e Click &7 to select." - left-click-to-cycle-up: "&e Left Click &7 to cycle up." - right-click-to-cycle-down: "&e Right Click &7 to cycle down." - left-click-to-change: "&e Left Click &7 to edit." - right-click-to-clear: "&e Right Click &7 to clear." - click-to-asc: "&e Click &7 to sort in increasing order." - click-to-desc: "&e Click &7 to sort in decreasing order." - click-to-warp: "&e Click &7 to warp." - click-to-visit: "&e Click &7 to visit." - right-click-to-visit: "&e Right Click &7 to visit." + click-to-view: " Click to view." + click-to-previous: " Click to view previous page." + click-to-next: " Click to view next page." + click-to-select: " Click to select." + left-click-to-cycle-up: " Left Click to cycle up." + right-click-to-cycle-down: " Right Click to cycle down." + left-click-to-change: " Left Click to edit." + right-click-to-clear: " Right Click to clear." + click-to-asc: " Click to sort in increasing order." + click-to-desc: " Click to sort in decreasing order." + click-to-warp: " Click to warp." + click-to-visit: " Click to visit." + right-click-to-visit: " Right Click to visit." conversations: # Prefix for messages that are send from server. - prefix: "&l&6 [BentoBox]: &r" - no-data: "&c Run level to see the block report." + prefix: " [BentoBox]: " + no-data: " Run level to see the block report." # String that allows to cancel conversation. (can be only one) cancel-string: "cancel" # List of strings that allows to exit conversation. (separated with ,) exit-string: "cancel, exit, quit" # Message that asks for search value input. - write-search: "&e Please enter a search value. (Write 'cancel' to exit)" + write-search: " Please enter a search value. (Write 'cancel' to exit)" # Message that appears after updating search value. - search-updated: "&a Search value updated." + search-updated: " Search value updated." # Message that is sent to user when conversation is cancelled. - cancelled: "&c Conversation cancelled!" + cancelled: " Conversation cancelled!" # Message that is sent to user when given material does not have any value. - no-value: "&c That item has no value." + no-value: " That item has no value." # Message that is sent to user when requested material does not exist. - unknown-item: "&c The '[material]' does not exist in game." + unknown-item: " The '[material]' does not exist in game." # Messages that is sent to user when requesting value for a specific material. - value: "&7 The value of '[material]' is: &e[value]" - value-underwater: "&7 The value of '[material]' below sea-level: &e[value]" + value: " The value of '[material]' is: [value]" + value-underwater: " The value of '[material]' below sea-level: [value]" # Message that is sent to user when he does not hold any items in hand. - empty-hand: "&c There are no blocks in your hand" + empty-hand: " There are no blocks in your hand" # Message when showing how many have been placed of a block - you-have: "&7 You have [number] at last count." + you-have: " You have [number] at last count." # Message about the limit - you-can-place: "&7 You can place up to [number] and have them count" + you-can-place: " You can place up to [number] and have them count" diff --git a/src/main/resources/locales/es.yml b/src/main/resources/locales/es.yml index 808840e..c03165d 100644 --- a/src/main/resources/locales/es.yml +++ b/src/main/resources/locales/es.yml @@ -7,23 +7,23 @@ admin: parameters: " " description: Define la desventaja de la isla, usualmente el nivel inicial para nuevas islas - changed: "&aDesventaja inicial de la isla cambiado de [number] a [new_number]." - invalid-level: "&cNúmero no válido. Usa un número entero." + changed: "Desventaja inicial de la isla cambiado de [number] a [new_number]." + invalid-level: "Número no válido. Usa un número entero." levelstatus: description: Muestra cuantas islas hay en la cola para escanear - islands-in-queue: "&aIslas en cola: [number]" + islands-in-queue: "Islas en cola: [number]" top: description: Muestra la lista de las diez primeras islas - unknown-world: "&c¡Mundo desconocido!" - display: "&f[rank]. &a[name] &7- &b[level]" + unknown-world: "¡Mundo desconocido!" + display: "[rank]. [name] - [level]" remove: description: Elimina a un jugador de los diez primeros parameters: "" stats: description: "mostrar estadísticas de islas en este servidor" title: "Estadísticas de Islas del Servidor" - world: "&a [name]" - no-data: "&c No hay datos para procesar." + world: " [name]" + no-data: " No hay datos para procesar." average-level: "Nivel promedio de isla: [number]" median-level: "Nivel mediano de isla: [number]" mode-level: "Nivel modal de isla: [number]" @@ -35,32 +35,32 @@ island: level: parameters: "[player]" description: Calcula tu nivel de isla o muestra el nivel de [player] - calculating: "&aCalculando nivel..." - estimated-wait: "&aEspera estimada: [number] segundos" - in-queue: "&aEstás en el puesto [number] de la cola" - island-level-is: "&aNivel de isla es de &b[level]" - required-points-to-next-level: "&a Progreso de nivel: &6 [progress]&b /&e [levelcost] &a puntos" - deaths: "&c([number] Muertes)" - cooldown: "&cDebes esperar &b[time] &csegundos para poder volver a hacer esto." - in-progress: "&6El Calculo del nivel de la islas está en progreso..." - time-out: "&cEl calculo del nivel de la isla está tardando. Intente más tarde." + calculating: "Calculando nivel..." + estimated-wait: "Espera estimada: [number] segundos" + in-queue: "Estás en el puesto [number] de la cola" + island-level-is: "Nivel de isla es de [level]" + required-points-to-next-level: " Progreso de nivel: [progress] / [levelcost] puntos" + deaths: "([number] Muertes)" + cooldown: "Debes esperar [time] segundos para poder volver a hacer esto." + in-progress: "El Calculo del nivel de la islas está en progreso..." + time-out: "El calculo del nivel de la isla está tardando. Intente más tarde." detail: description: "muestra el detalle de los bloques de tu isla" top: description: Muestra el top de islas - gui-title: "&aTop diez" - gui-heading: "&6[name]: &b[rank]" - island-level: "&bNivel [level]" - warp-to: "&aLlevándote a la isla de [name]" + gui-title: "Top diez" + gui-heading: "[name]: [rank]" + island-level: "Nivel [level]" + warp-to: "Llevándote a la isla de [name]" level-details: above-sea-level-blocks: Bloques sobre el nivel del mar spawners: Spawners underwater-blocks: Bloques debajo del nivel del mar all-blocks: Todos los bloques - no-island: "&c¡Sin isla!" + no-island: "¡Sin isla!" names-island: Isla de [name] syntax: "[name] x [number]" - hint: "&cEscriba /level para ver el recuento de bloques" + hint: "Escriba /level para ver el recuento de bloques" level: commands: value: @@ -69,27 +69,27 @@ level: el valor del bloque de la mano. gui: titles: - top: "&0&lTop de islas" - detail-panel: "&0&lIsla de [name]" - value-panel: "&0&l Valores de los Bloques" + top: "Top de islas" + detail-panel: "Isla de [name]" + value-panel: " Valores de los Bloques" buttons: island: - empty: "&f&l[name]. lugar" - name: "&f&l[name]" + empty: "[name]. lugar" + name: "[name]" description: |- [owner] [members] [place] [level] owners-island: Isla de [player] - owner: "&7&l Dueño: &r&b[player]" - members-title: "&7&l Miembros:" - member: "&b - [player]" + owner: " Dueño: [player]" + members-title: " Miembros:" + member: " - [player]" unknown: " desconocido" - place: "&7&o [number]. &r&7lugar" - level: "&7 Nivel: &o[number]" + place: " [number]. lugar" + level: " Nivel: [number]" material: - name: "&f&l[number] x [material]" + name: "[number] x [material]" description: |- [description] [count] @@ -97,97 +97,97 @@ level: [calculated] [limit] [id] - id: "&7 ID del bloque: &e[id]" - value: "&7 Valor del bloque: &e[number]" - limit: "&7 Limite de bloques: &e[number]" - count: "&7 Número de bloques: &e[number]" - calculated: "&7 Valor calculado: &e[number]" + id: " ID del bloque: [id]" + value: " Valor del bloque: [number]" + limit: " Limite de bloques: [number]" + count: " Número de bloques: [number]" + calculated: " Valor calculado: [number]" value_blocks: - name: "&f&lTodos los Bloques con Valor" + name: "Todos los Bloques con Valor" description: |- - &7 Mostrar todos los bloques - &7 con valor en la isla. + Mostrar todos los bloques + con valor en la isla. all_blocks: - name: "&f&lTodos los bloques" + name: "Todos los bloques" description: |- - &7 Muestra todos los - &7 bloques en la isla. + Muestra todos los + bloques en la isla. above_sea_level: - name: "&f&lBloques sobre el nivel del mar" + name: "Bloques sobre el nivel del mar" description: |- - &7 Muestra solo bloques - &7 que estén sobre el - &7 nivel del mar. + Muestra solo bloques + que estén sobre el + nivel del mar. underwater: - name: "&f&lBloques debajo del nivel del mar" + name: "Bloques debajo del nivel del mar" description: |- - &7 Muestra solo bloques - &7 que estén debajo del - &7 nivel del mar. + Muestra solo bloques + que estén debajo del + nivel del mar. spawner: - name: "&f&lSpawners" - description: "&7Mostrar solo spawners." - block-name: "&b Spawner" + name: "Spawners" + description: "Mostrar solo spawners." + block-name: " Spawner" filters: name: - name: "&f&lOrdenar por nombre" - description: "&7Ordenar todos los bloques por nombre." + name: "Ordenar por nombre" + description: "Ordenar todos los bloques por nombre." value: - name: "&f&lOrdenar por valor" - description: "&7Ordenar todos los bloques por valor." + name: "Ordenar por valor" + description: "Ordenar todos los bloques por valor." count: - name: "&f&lOrdenar por cantidad" - description: "&7Ordenar todos los bloques por cantidad." + name: "Ordenar por cantidad" + description: "Ordenar todos los bloques por cantidad." value: - name: "&f&l [material]" + name: " [material]" description: |- [description] [value] [underwater] [limit] [id] - id: "&7 ID de Bloque: &e [id]" - value: "&7 Valor del Bloque: &e [number]" - underwater: "&7 Por debajo del nivel del mar: &e [number]" - limit: "&7 Límite de bloque: &e [number]" + id: " ID de Bloque: [id]" + value: " Valor del Bloque: [number]" + underwater: " Por debajo del nivel del mar: [number]" + limit: " Límite de bloque: [number]" previous: - name: "&f&lPágina anterior" - description: "&7Cambiar a la página [number]" + name: "Página anterior" + description: "Cambiar a la página [number]" next: - name: "&f&lSiguiente página" - description: "&7Cambiar a la página [number]" + name: "Siguiente página" + description: "Cambiar a la página [number]" search: - name: "&f&l Buscar" + name: " Buscar" description: |- - &7 Buscar un determinado - &7 valor. - search: "&b Valor: [value]" + Buscar un determinado + valor. + search: " Valor: [value]" tips: - click-to-view: "&eClic &7para ver." - click-to-previous: "&eClic &7 para ir a la página anterior." - click-to-next: "&eClic &7 para ir a la siguiente página." - click-to-select: "&eClic &7 para seleccionar." - left-click-to-cycle-up: "&eClic izquierdo &7para ir hacia arriba." - right-click-to-cycle-down: "&eClic derecho &7para ir hacia abajo." - left-click-to-change: "&e Clic Izquierdo &7 para editar." - right-click-to-clear: "&e Clic Derecho &7 para borrar." - click-to-asc: "&e Clic &7 para ordenar de forma creciente." - click-to-desc: "&e Clic &7 para ordenar de forma decreciente." - click-to-warp: "&e Clic &7 para teletransportarse." - click-to-visit: "&e Clic &7 para visitar." - right-click-to-visit: "&e Clic Derecho &7 para visitar." + click-to-view: "Clic para ver." + click-to-previous: "Clic para ir a la página anterior." + click-to-next: "Clic para ir a la siguiente página." + click-to-select: "Clic para seleccionar." + left-click-to-cycle-up: "Clic izquierdo para ir hacia arriba." + right-click-to-cycle-down: "Clic derecho para ir hacia abajo." + left-click-to-change: " Clic Izquierdo para editar." + right-click-to-clear: " Clic Derecho para borrar." + click-to-asc: " Clic para ordenar de forma creciente." + click-to-desc: " Clic para ordenar de forma decreciente." + click-to-warp: " Clic para teletransportarse." + click-to-visit: " Clic para visitar." + right-click-to-visit: " Clic Derecho para visitar." conversations: - prefix: "&l&6[BentoBox]: &r" - no-data: "&cEscriba /level para ver el recuento de bloques." + prefix: "[BentoBox]: " + no-data: "Escriba /level para ver el recuento de bloques." cancel-string: cancelar exit-string: cancelar, salir, abandonar - write-search: "&e Introduce un valor de búsqueda. (Escribe 'cancel' para salir)" - search-updated: "&a Valor de búsqueda actualizado." - cancelled: "&c ¡Conversación cancelada!" - no-value: "&c Ese ítem no tiene valor." - unknown-item: "&c El '[material]' no existe en el juego." - value: "&7 El valor de '[material]' es: &e[value]" - value-underwater: "&7 El valor de '[material]' por debajo del nivel del mar: &e[value]" - empty-hand: "&c No hay bloques en tu mano" - you-have: "&7 Tienes [number] en el último conteo." - you-can-place: "&7 Puedes colocar hasta [number] y que cuenten" + write-search: " Introduce un valor de búsqueda. (Escribe 'cancel' para salir)" + search-updated: " Valor de búsqueda actualizado." + cancelled: " ¡Conversación cancelada!" + no-value: " Ese ítem no tiene valor." + unknown-item: " El '[material]' no existe en el juego." + value: " El valor de '[material]' es: [value]" + value-underwater: " El valor de '[material]' por debajo del nivel del mar: [value]" + empty-hand: " No hay bloques en tu mano" + you-have: " Tienes [number] en el último conteo." + you-can-place: " Puedes colocar hasta [number] y que cuenten" diff --git a/src/main/resources/locales/fr.yml b/src/main/resources/locales/fr.yml index dd9ecb3..5448165 100644 --- a/src/main/resources/locales/fr.yml +++ b/src/main/resources/locales/fr.yml @@ -7,23 +7,23 @@ admin: parameters: " " description: définir le handicap de l'île, généralement le niveau de l'île de départ - changed: "&a le handicap initial de l'île est passé de [number] à [new_number]." - invalid-level: "&c Handicap non valide. Utilisez un nombre entier." + changed: " le handicap initial de l'île est passé de [number] à [new_number]." + invalid-level: " Handicap non valide. Utilisez un nombre entier." levelstatus: description: affiche le nombre d'îles dans la file d'attente pour l'analyse - islands-in-queue: "&a Nombre d'Îles dans la file d'attente: [number]" + islands-in-queue: " Nombre d'Îles dans la file d'attente: [number]" top: description: affiche le top 10 des îles - unknown-world: "&cMonde inconnu." - display: "&f[rank]. &a[name] &7- &b[level]" + unknown-world: "Monde inconnu." + display: "[rank]. [name] - [level]" remove: description: retire le joueur du top 10 parameters: "" stats: description: "afficher les statistiques des îles sur ce serveur" title: "Statistiques des Îles du Serveur" - world: "&a [name]" - no-data: "&c Aucune donnée à traiter." + world: " [name]" + no-data: " Aucune donnée à traiter." average-level: "Niveau moyen des îles: [number]" median-level: "Niveau médian des îles: [number]" mode-level: "Niveau modal des îles: [number]" @@ -35,23 +35,23 @@ island: level: parameters: "[joueur]" description: calcule le niveau de votre île ou affiche le niveau d'un [joueur] - calculating: "&aCalcul du niveau en cours..." - estimated-wait: "&a Attente estimée: [number] seconds" - in-queue: "&a Vous êtes le numéro [number ] dans la file d'attente" - island-level-is: "&aLe niveau d'île est &b[level]" - required-points-to-next-level: "&a Progression du niveau: &6 [progress]&b /&e [levelcost] &a points" - deaths: "&c([number] morts)" - cooldown: "&cVous devez attendre &b[time] &csecondes avant de pouvoir refaire + calculating: "Calcul du niveau en cours..." + estimated-wait: " Attente estimée: [number] seconds" + in-queue: " Vous êtes le numéro [number ] dans la file d'attente" + island-level-is: "Le niveau d'île est [level]" + required-points-to-next-level: " Progression du niveau: [progress] / [levelcost] points" + deaths: "([number] morts)" + cooldown: "Vous devez attendre [time] secondes avant de pouvoir refaire cette action" - in-progress: "&6 Le calcul du niveau de l'île est en cours ..." - time-out: "&c Le calcul du niveau a pris trop de temps. Veuillez réessayer plus + in-progress: " Le calcul du niveau de l'île est en cours ..." + time-out: " Le calcul du niveau a pris trop de temps. Veuillez réessayer plus tard." top: description: affiche le top 10 - gui-title: "&aTop 10" - gui-heading: "&6[name]: &B[rank]" - island-level: "&BNiveau [level]" - warp-to: "&ATéléportation vers l'île de [name]" + gui-title: "Top 10" + gui-heading: "[name]: [rank]" + island-level: "Niveau [level]" + warp-to: "Téléportation vers l'île de [name]" detail: description: "affiche le détail des blocs de votre île" level-details: @@ -59,10 +59,10 @@ island: spawners: Spawners underwater-blocks: Blocs en-dessous du niveau de la mer all-blocks: Total des blocs - no-island: "&c Pas d'île!" + no-island: " Pas d'île!" names-island: île de [name] syntax: "[name] x [number]" - hint: "&c Exécuter level pour voir le rapport des blocs" + hint: " Exécuter level pour voir le rapport des blocs" level: commands: value: @@ -71,27 +71,27 @@ level: la valeur de l'objet en main. gui: titles: - top: "&0&l Top Islands" - detail-panel: "&0&l [name]'s island" - value-panel: "&0&l Block Values" + top: " Top Islands" + detail-panel: " [name]'s island" + value-panel: " Block Values" buttons: island: - empty: "&f&l [name]. place" - name: "&f&l [name]" + empty: " [name]. place" + name: " [name]" description: |- [owner] [members] [place] [level] owners-island: "[player]'s Island" - owner: "&7&l Propriétaire: &r&b [player]" - members-title: "&7&l Membres:" - member: "&b - [player]" + owner: " Propriétaire: [player]" + members-title: " Membres:" + member: " - [player]" unknown: inconnue - place: "&7&o [number]. &r&7 place" - level: "&7 Level: &o [number]" + place: " [number]. place" + level: " Level: [number]" material: - name: "&f&l [number] x [material]" + name: " [number] x [material]" description: |- [description] [count] @@ -99,99 +99,99 @@ level: [calculated] [limit] [id] - id: "&7 Block id: &e [id]" - value: "&7 Block value: &e [number]" - limit: "&7 Block limit: &e [number]" - count: "&7 Nombre de blocs: &e [number]" - calculated: "&7 Valeur calculée: &e [number]" + id: " Block id: [id]" + value: " Block value: [number]" + limit: " Block limit: [number]" + count: " Nombre de blocs: [number]" + calculated: " Valeur calculée: [number]" value_blocks: - name: "&f&l Tous les Blocs avec Valeur" + name: " Tous les Blocs avec Valeur" description: |- - &7 Afficher tous les blocs - &7 avec une valeur sur l'île. + Afficher tous les blocs + avec une valeur sur l'île. all_blocks: - name: "&f&l Tous les blocs" + name: " Tous les blocs" description: |- - &7 Afficher tous les blocs - &7 sur l'île. + Afficher tous les blocs + sur l'île. above_sea_level: - name: "&f&l Blocs au-dessus du niveau de la mer" + name: " Blocs au-dessus du niveau de la mer" description: |- - &7 Afficher uniquement les blocs - &7 qui sont au-dessus du niveau - &7 de la mer. + Afficher uniquement les blocs + qui sont au-dessus du niveau + de la mer. underwater: - name: "&f&l Blocs sous le niveau de la mer" + name: " Blocs sous le niveau de la mer" description: |- - &7 Afficher uniquement les blocs - &7 situés sous le niveau - &7 de la mer. + Afficher uniquement les blocs + situés sous le niveau + de la mer. spawner: - name: "&f&l Spawners" - description: "&7 Afficher uniquement les spawners." - block-name: "&b Spawner" + name: " Spawners" + description: " Afficher uniquement les spawners." + block-name: " Spawner" filters: name: - name: "&f&l STrier par nom" - description: "&7 Trier tous les blocs par nom." + name: " STrier par nom" + description: " Trier tous les blocs par nom." value: - name: "&f&l Trier par valeur" - description: "&7 Triez tous les blocs par leur valeur." + name: " Trier par valeur" + description: " Triez tous les blocs par leur valeur." count: - name: "&f&l Trier par nombre" - description: "&7 Trier tous les blocs par leur montant." + name: " Trier par nombre" + description: " Trier tous les blocs par leur montant." value: - name: "&f&l [material]" + name: " [material]" description: |- [description] [value] [underwater] [limit] [id] - id: "&7 Block id: &e [id]" - value: "&7 Block value: &e [number]" - underwater: "&7 Sous le niveau de la mer : &e [number]" - limit: "&7 Block limit: &e [number]" + id: " Block id: [id]" + value: " Block value: [number]" + underwater: " Sous le niveau de la mer : [number]" + limit: " Block limit: [number]" previous: - name: "&f&l Page précédente" - description: "&7 Passer à la page [number]" + name: " Page précédente" + description: " Passer à la page [number]" next: - name: "&f&l Page suivante" - description: "&7 Passer à la page [number]" + name: " Page suivante" + description: " Passer à la page [number]" search: - name: "&f&l Rechercher" - description: "&7 Recherche une valeur \n&7 spécifique." - search: "&b Valeur : [value]" + name: " Rechercher" + description: " Recherche une valeur \n spécifique." + search: " Valeur : [value]" tips: - click-to-view: "&e Cliquez &7 pour afficher." - click-to-previous: "&e Cliquez &7 pour afficher la page précédente." - click-to-next: "&e Cliquez &7 pour afficher la page suivante." - click-to-select: "&e Cliquez &7 pour sélectionner." - left-click-to-cycle-up: "&e Clic gauche &7 pour monter." - right-click-to-cycle-down: "&e Clic droit &7 pour descendre." - left-click-to-change: "&e Clic gauche &7 pour éditer." - right-click-to-clear: "&e Clic droit &7 pour effacer." - click-to-asc: "&e Cliquez &7 pour trier par ordre croissant." - click-to-desc: "&e Cliquez &7 pour trier par ordre décroissant." - click-to-warp: "&e Cliquer &7 to warp." - click-to-visit: "&e Cliquer &7 pour visiter." - right-click-to-visit: "&e Clic droit&7 pour visiter." + click-to-view: " Cliquez pour afficher." + click-to-previous: " Cliquez pour afficher la page précédente." + click-to-next: " Cliquez pour afficher la page suivante." + click-to-select: " Cliquez pour sélectionner." + left-click-to-cycle-up: " Clic gauche pour monter." + right-click-to-cycle-down: " Clic droit pour descendre." + left-click-to-change: " Clic gauche pour éditer." + right-click-to-clear: " Clic droit pour effacer." + click-to-asc: " Cliquez pour trier par ordre croissant." + click-to-desc: " Cliquez pour trier par ordre décroissant." + click-to-warp: " Cliquer to warp." + click-to-visit: " Cliquer pour visiter." + right-click-to-visit: " Clic droit pour visiter." conversations: - prefix: "&l&6 [BentoBox]: &r" - no-data: "&c Niveau d'exécution pour voir le rapport de blocage." + prefix: " [BentoBox]: " + no-data: " Niveau d'exécution pour voir le rapport de blocage." cancel-string: annuler exit-string: annuler, sortir, quitter - write-search: "&e Veuillez entrer une valeur de recherche. (Ecrivez 'cancel' pour + write-search: " Veuillez entrer une valeur de recherche. (Ecrivez 'cancel' pour quitter)" - search-updated: "&a Valeur de recherche mise à jour." - cancelled: "&c Conversation annulée !" - no-value: "&c Cet item n'a aucune valeur." - unknown-item: "&c Le '[material]' n'existe pas dans le jeu." - value: "&7 La valeur de '[material]' est : &e[value]" - value-underwater: "&7 La valeur de '[material]' sous le niveau de la mer : &e[value]" - empty-hand: "&c Il n'y a pas de blocs dans votre main" - you-have: "&7 Vous en avez [number] au dernier décompte." - you-can-place: "&7 Vous pouvez en placer jusqu'à [number] et les faire compter" + search-updated: " Valeur de recherche mise à jour." + cancelled: " Conversation annulée !" + no-value: " Cet item n'a aucune valeur." + unknown-item: " Le '[material]' n'existe pas dans le jeu." + value: " La valeur de '[material]' est : [value]" + value-underwater: " La valeur de '[material]' sous le niveau de la mer : [value]" + empty-hand: " Il n'y a pas de blocs dans votre main" + you-have: " Vous en avez [number] au dernier décompte." + you-can-place: " Vous pouvez en placer jusqu'à [number] et les faire compter" meta: authors: '0': plagoutte diff --git a/src/main/resources/locales/hu.yml b/src/main/resources/locales/hu.yml index 07fc99d..5f3a0a7 100644 --- a/src/main/resources/locales/hu.yml +++ b/src/main/resources/locales/hu.yml @@ -10,23 +10,23 @@ admin: pl. +10 eltávolít 10 szintet, 30 a hátrányt 30-ra állítja, -20 hozzáad 20 szintet - changed: "&a A kezdeti sziget hátrány változott erről [number] erre [new_number]." - invalid-level: "&c Érvénytelen hátrány. Használj egész számot." + changed: " A kezdeti sziget hátrány változott erről [number] erre [new_number]." + invalid-level: " Érvénytelen hátrány. Használj egész számot." levelstatus: description: megmutatja, hogy hány sziget van a szkennelési sorban - islands-in-queue: "&a Szigetek a sorban: [number]" + islands-in-queue: " Szigetek a sorban: [number]" top: description: Top Tíz lista megtekintése - unknown-world: "&cIsmeretlen világ!" - display: "&f[rank]. &a[name] &7- &b[level]" + unknown-world: "Ismeretlen világ!" + display: "[rank]. [name] - [level]" remove: description: játékos törlése a Top Tízből parameters: "" stats: description: "sziget statisztikák megjelenítése ezen a szerveren" title: "Szerver Sziget Statisztikák" - world: "&a [name]" - no-data: "&c Nincs adat a feldolgozáshoz." + world: " [name]" + no-data: " Nincs adat a feldolgozáshoz." average-level: "Átlagos sziget szint: [number]" median-level: "Medián sziget szint: [number]" mode-level: "Módusz sziget szint: [number]" @@ -38,32 +38,32 @@ island: level: parameters: "[player]" description: A saját vagy más játékos sziget szintjének kiszámítása - calculating: "&aSziget szint kiszámítása..." - estimated-wait: "&a Becsült várakozás: [number] másodperc" - in-queue: "&a Te vagy a(z) [number] a sorban" - island-level-is: "&aA sziget szint: &b[level]" - required-points-to-next-level: "&a Szint előrehaladás: &6 [progress]&b /&e [levelcost] &a pont" - deaths: "&c([number] halál)" - cooldown: "&cVárnod kell &b[time] &cmásodpercet, hogy újra használhasd." - in-progress: "&6 A sziget szint kiszámítása folyamatban..." - time-out: "&c A szint kiszámítása túl sokáig tartott. Kérjük, próbálja újra később." + calculating: "Sziget szint kiszámítása..." + estimated-wait: " Becsült várakozás: [number] másodperc" + in-queue: " Te vagy a(z) [number] a sorban" + island-level-is: "A sziget szint: [level]" + required-points-to-next-level: " Szint előrehaladás: [progress] / [levelcost] pont" + deaths: "([number] halál)" + cooldown: "Várnod kell [time] másodpercet, hogy újra használhasd." + in-progress: " A sziget szint kiszámítása folyamatban..." + time-out: " A szint kiszámítása túl sokáig tartott. Kérjük, próbálja újra később." detail: description: "megmutatja a szigeted blokkjainak részleteit" top: description: Top Tíz lista megtekintése - gui-title: "&aTop Tíz" - gui-heading: "&6[name]: &B[rank]" - island-level: "&BLevel [level]" - warp-to: "&ATeleportálás [name] szigetére." + gui-title: "Top Tíz" + gui-heading: "[name]: [rank]" + island-level: "Level [level]" + warp-to: "Teleportálás [name] szigetére." level-details: above-sea-level-blocks: Tengerszint Feletti Blokkok spawners: Spawner-ek underwater-blocks: Víz Alatti Blokkok all-blocks: Minden Blokk - no-island: "&c Nincs sziget!" + no-island: " Nincs sziget!" names-island: "[name] szigete" syntax: "[name] x [number]" - hint: "&c Futtassa a szintet a blokk jelentés megjelenítéséhez" + hint: " Futtassa a szintet a blokk jelentés megjelenítéséhez" level: commands: value: @@ -71,27 +71,27 @@ level: description: megmutatja a blokkok értékét. Adja hozzá a 'hand' szót a végéhez a kézben lévő tárgy értékének megjelenítéséhez. gui: titles: - top: "&0&l Top Szigetek" - detail-panel: "&0&l [name] szigete" - value-panel: "&0&l Blokk Értékek" + top: " Top Szigetek" + detail-panel: " [name] szigete" + value-panel: " Blokk Értékek" buttons: island: - empty: '&f&l [name]. hely' - name: '&f&l [name]' + empty: ' [name]. hely' + name: ' [name]' description: |- [owner] [members] [place] [level] owners-island: "[player] szigete" - owner: "&7&l Tulajdonos: &r&b [player]" - members-title: "&7&l Tagok:" - member: "&b - [player]" + owner: " Tulajdonos: [player]" + members-title: " Tagok:" + member: " - [player]" unknown: "ismeretlen" - place: "&7&o [number]. &r&7 hely" - level: "&7 Szint: &o [number]" + place: " [number]. hely" + level: " Szint: [number]" material: - name: "&f&l [number] x [material]" + name: " [number] x [material]" description: |- [description] [count] @@ -99,103 +99,103 @@ level: [calculated] [limit] [id] - id: "&7 Blokk azonosító: &e [id]" - value: "&7 Blokk értéke: &e [number]" - limit: "&7 Blokk korlát: &e [number]" - count: "&7 Blokkok száma: &e [number]" - calculated: "&7 Számított érték: &e [number]" + id: " Blokk azonosító: [id]" + value: " Blokk értéke: [number]" + limit: " Blokk korlát: [number]" + count: " Blokkok száma: [number]" + calculated: " Számított érték: [number]" value_blocks: - name: "&f&l Minden Értékes Blokk" + name: " Minden Értékes Blokk" description: |- - &7 Megjelenít minden blokkot - &7 értékkel a szigeten. + Megjelenít minden blokkot + értékkel a szigeten. all_blocks: - name: "&f&l Minden Blokk" + name: " Minden Blokk" description: |- - &7 Megjelenít minden blokkot - &7 a szigeten. + Megjelenít minden blokkot + a szigeten. above_sea_level: - name: "&f&l Tengerszint Feletti Blokkok" + name: " Tengerszint Feletti Blokkok" description: |- - &7 Csak a tengerszint - &7 feletti blokkokat - &7 jeleníti meg. + Csak a tengerszint + feletti blokkokat + jeleníti meg. underwater: - name: "&f&l Tengerszint Alatti Blokkok" + name: " Tengerszint Alatti Blokkok" description: |- - &7 Csak a tengerszint - &7 alatti blokkokat - &7 jeleníti meg. + Csak a tengerszint + alatti blokkokat + jeleníti meg. spawner: - name: "&f&l Spawner-ek" + name: " Spawner-ek" description: |- - &7 Csak spawner-eket jelenít meg. - block-name: "&b Spawner" + Csak spawner-eket jelenít meg. + block-name: " Spawner" filters: name: - name: "&f&l Rendezés Név szerint" + name: " Rendezés Név szerint" description: |- - &7 Minden blokkot név szerint rendez. + Minden blokkot név szerint rendez. value: - name: "&f&l Rendezés Érték szerint" + name: " Rendezés Érték szerint" description: |- - &7 Minden blokkot értékük szerint rendez. + Minden blokkot értékük szerint rendez. count: - name: "&f&l Rendezés Mennyiség szerint" + name: " Rendezés Mennyiség szerint" description: |- - &7 Minden blokkot mennyiségük szerint rendez. + Minden blokkot mennyiségük szerint rendez. value: - name: "&f&l [material]" + name: " [material]" description: |- [description] [value] [underwater] [limit] [id] - id: "&7 Blokk azonosító: &e [id]" - value: "&7 Blokk értéke: &e [number]" - underwater: "&7 Tengerszint alatt: &e [number]" - limit: "&7 Blokk korlát: &e [number]" + id: " Blokk azonosító: [id]" + value: " Blokk értéke: [number]" + underwater: " Tengerszint alatt: [number]" + limit: " Blokk korlát: [number]" previous: - name: "&f&l Előző Oldal" + name: " Előző Oldal" description: |- - &7 Váltás [number]. oldalra + Váltás [number]. oldalra next: - name: "&f&l Következő Oldal" + name: " Következő Oldal" description: |- - &7 Váltás [number]. oldalra + Váltás [number]. oldalra search: - name: "&f&l Keresés" + name: " Keresés" description: |- - &7 Keresés egy adott - &7 értékre. - search: "&b Érték: [value]" + Keresés egy adott + értékre. + search: " Érték: [value]" tips: - click-to-view: "&e Kattints &7 a megtekintéshez." - click-to-previous: "&e Kattints &7 az előző oldal megtekintéséhez." - click-to-next: "&e Kattints &7 a következő oldal megtekintéséhez." - click-to-select: "&e Kattints &7 a kiválasztáshoz." - left-click-to-cycle-up: "&e Bal Kattintás &7 a feljebb lépéshez." - right-click-to-cycle-down: "&e Jobb Kattintás &7 a lejjebb lépéshez." - left-click-to-change: "&e Bal Kattintás &7 a szerkesztéshez." - right-click-to-clear: "&e Jobb Kattintás &7 a törléshez." - click-to-asc: "&e Kattints &7 a növekvő sorrendű rendezéshez." - click-to-desc: "&e Kattints &7 a csökkenő sorrendű rendezéshez." - click-to-warp: "&e Kattints &7 a teleportáláshoz." - click-to-visit: "&e Kattints &7 a látogatáshoz." - right-click-to-visit: "&e Jobb Kattintás &7 a látogatáshoz." + click-to-view: " Kattints a megtekintéshez." + click-to-previous: " Kattints az előző oldal megtekintéséhez." + click-to-next: " Kattints a következő oldal megtekintéséhez." + click-to-select: " Kattints a kiválasztáshoz." + left-click-to-cycle-up: " Bal Kattintás a feljebb lépéshez." + right-click-to-cycle-down: " Jobb Kattintás a lejjebb lépéshez." + left-click-to-change: " Bal Kattintás a szerkesztéshez." + right-click-to-clear: " Jobb Kattintás a törléshez." + click-to-asc: " Kattints a növekvő sorrendű rendezéshez." + click-to-desc: " Kattints a csökkenő sorrendű rendezéshez." + click-to-warp: " Kattints a teleportáláshoz." + click-to-visit: " Kattints a látogatáshoz." + right-click-to-visit: " Jobb Kattintás a látogatáshoz." conversations: - prefix: "&l&6 [BentoBox]: &r" - no-data: "&c Futtassa a szintet a blokk jelentés megtekintéséhez." + prefix: " [BentoBox]: " + no-data: " Futtassa a szintet a blokk jelentés megtekintéséhez." cancel-string: mégse exit-string: mégse, kilép, abbahagyja - write-search: "&e Kérjük, adjon meg egy keresési értéket. (Írja be a 'mégse' szót a kilépéshez)" - search-updated: "&a Keresési érték frissítve." - cancelled: "&c Beszélgetés megszakítva!" - no-value: "&c Ennek a tárgynak nincs értéke." - unknown-item: "&c A '[material]' nem létezik a játékban." - value: "&7 A '[material]' értéke: &e[value]" - value-underwater: "&7 A '[material]' értéke tengerszint alatt: &e[value]" - empty-hand: "&c Nincs blokk a kezedben" - you-have: "&7 Az utolsó számláláskor [number] volt nálad." - you-can-place: "&7 Legfeljebb [number] darabot helyezhetsz le és számítanak" + write-search: " Kérjük, adjon meg egy keresési értéket. (Írja be a 'mégse' szót a kilépéshez)" + search-updated: " Keresési érték frissítve." + cancelled: " Beszélgetés megszakítva!" + no-value: " Ennek a tárgynak nincs értéke." + unknown-item: " A '[material]' nem létezik a játékban." + value: " A '[material]' értéke: [value]" + value-underwater: " A '[material]' értéke tengerszint alatt: [value]" + empty-hand: " Nincs blokk a kezedben" + you-have: " Az utolsó számláláskor [number] volt nálad." + you-can-place: " Legfeljebb [number] darabot helyezhetsz le és számítanak" diff --git a/src/main/resources/locales/id.yml b/src/main/resources/locales/id.yml index 2ab4ab5..33705f3 100644 --- a/src/main/resources/locales/id.yml +++ b/src/main/resources/locales/id.yml @@ -6,23 +6,23 @@ admin: sethandicap: parameters: " " description: mengatur handicap pulau, biasanya level pulau pemula - changed: "&a Handicap pulau awal diubah dari [number] menjadi [new_number]." - invalid-level: "&c Handicap tidak valid. Gunakan angka bulat." + changed: " Handicap pulau awal diubah dari [number] menjadi [new_number]." + invalid-level: " Handicap tidak valid. Gunakan angka bulat." levelstatus: description: menunjukkan berapa banyak pulau dalam antrian untuk pemindaian - islands-in-queue: "&a Pulau di dalam antrian: [number]" + islands-in-queue: " Pulau di dalam antrian: [number]" top: description: menunjukkan daftar sepuluh besar - unknown-world: "&c Dunia tidak ditemukan!" - display: "&f[rank]. &a[name] &7- &b[level]" + unknown-world: " Dunia tidak ditemukan!" + display: "[rank]. [name] - [level]" remove: description: menghapus pemain dari sepuluh besar parameters: "" stats: description: "tampilkan statistik pulau di server ini" title: "Statistik Pulau Server" - world: "&a [name]" - no-data: "&c Tidak ada data untuk diproses." + world: " [name]" + no-data: " Tidak ada data untuk diproses." average-level: "Rata-rata Level Pulau: [number]" median-level: "Median Level Pulau: [number]" mode-level: "Modus Level Pulau: [number]" @@ -34,22 +34,22 @@ island: level: parameters: "[player]" description: hitung level pulau kamu atau melihat level [player] - calculating: "&a Menghitung level..." - estimated-wait: "&a Perkiraan menunggu: [number] detik" - in-queue: "&a Kamu berada pada antrian nomor [number]" - island-level-is: "&a Level pulau adalah &b[level]" - required-points-to-next-level: "&a Kemajuan level: &6 [progress]&b /&e [levelcost] &a poin" - deaths: "&c([number] kematian)" - cooldown: "&c Kamu harus menunggu &b[time] &c detik sebelum kamu dapat melakukannya + calculating: " Menghitung level..." + estimated-wait: " Perkiraan menunggu: [number] detik" + in-queue: " Kamu berada pada antrian nomor [number]" + island-level-is: " Level pulau adalah [level]" + required-points-to-next-level: " Kemajuan level: [progress] / [levelcost] poin" + deaths: "([number] kematian)" + cooldown: " Kamu harus menunggu [time] detik sebelum kamu dapat melakukannya lagi" - in-progress: "&6 Perhitungan level pulau sedang dijalankan..." - time-out: "&c Perhitungan level pulau terlalu lama. Coba lagi nanti." + in-progress: " Perhitungan level pulau sedang dijalankan..." + time-out: " Perhitungan level pulau terlalu lama. Coba lagi nanti." top: description: menunjukkan Sepuluh Besar - gui-title: "&a Sepuluh Besar" - gui-heading: "&6[name]: &B[rank]" - island-level: "&b Level [level]" - warp-to: "&A Warp ke pulau [name]" + gui-title: " Sepuluh Besar" + gui-heading: "[name]: [rank]" + island-level: " Level [level]" + warp-to: " Warp ke pulau [name]" detail: description: "menampilkan detail blok pulau kamu" level-details: @@ -57,10 +57,10 @@ island: spawners: Spawner underwater-blocks: Blok di bawah permukaan laut all-blocks: Semua blok - no-island: "&c Tidak ada pulau!" + no-island: " Tidak ada pulau!" names-island: Pulau [name] syntax: "[name] x [number]" - hint: "&c Jalankan perintah level untuk melihat laporan blok" + hint: " Jalankan perintah level untuk melihat laporan blok" level: commands: value: @@ -69,27 +69,27 @@ level: nilai item di tangan. gui: titles: - top: "&0&l Pulau Terbaik" - detail-panel: "&0&l Pulau [name]" - value-panel: "&0&l Nilai Blok" + top: " Pulau Terbaik" + detail-panel: " Pulau [name]" + value-panel: " Nilai Blok" buttons: island: - empty: "&f&l [name]. place" - name: "&f&l [name]" + empty: " [name]. place" + name: " [name]" description: |- [owner] [members] [place] [level] owners-island: Pulau [player] - owner: "&7&l Pemilik: &r&b [player]" - members-title: "&7&l Anggota:" - member: "&b - [player]" + owner: " Pemilik: [player]" + members-title: " Anggota:" + member: " - [player]" unknown: tidak diketahui - place: "&r&7Peringkat &7&o [number]." - level: "&7 Level: &o [number]" + place: "Peringkat [number]." + level: " Level: [number]" material: - name: "&f&l [number] x [material]" + name: " [number] x [material]" description: |- [description] [count] @@ -97,97 +97,97 @@ level: [calculated] [limit] [id] - id: "&7 Id blok: &e [id]" - value: "&7 Nilai blok: &e [number]" - limit: "&7 Batas blok: &e [number]" - count: "&7 Jumlah blok: &e [number]" - calculated: "&7 Nilai yang dihitung: &e [number]" + id: " Id blok: [id]" + value: " Nilai blok: [number]" + limit: " Batas blok: [number]" + count: " Jumlah blok: [number]" + calculated: " Nilai yang dihitung: [number]" value_blocks: - name: "&f&l Semua Blok Bernilai" + name: " Semua Blok Bernilai" description: |- - &7 Tampilkan semua blok - &7 yang bernilai di pulau. + Tampilkan semua blok + yang bernilai di pulau. all_blocks: - name: "&f&l Semua blok" + name: " Semua blok" description: |- - &7 Tampilkan semua blok - &7 di pulau. + Tampilkan semua blok + di pulau. above_sea_level: - name: "&f&l Blok Diatas Permukaan Laut" + name: " Blok Diatas Permukaan Laut" description: |- - &7 Hanya mengampilkan blok - &7 yang berada di atas - &7 permukaan laut. + Hanya mengampilkan blok + yang berada di atas + permukaan laut. underwater: - name: "&f&l Blok Di bawah Permukaan Laut" + name: " Blok Di bawah Permukaan Laut" description: |- - &7 Hanya menampilkan blok - &7 yang berada di bawah - &7 permukaan laut. + Hanya menampilkan blok + yang berada di bawah + permukaan laut. spawner: - name: "&f&l Spawner" - description: "&7 Hanya tampilkan spawner." - block-name: "&b Spawner" + name: " Spawner" + description: " Hanya tampilkan spawner." + block-name: " Spawner" filters: name: - name: "&f&l Urut berdasarkan Nama" - description: "&7 Mengurutkan semua blok berdasarkan nama." + name: " Urut berdasarkan Nama" + description: " Mengurutkan semua blok berdasarkan nama." value: - name: "&f&l Urut berdasarkan Nilai" - description: "&7 Mengurutkan semua blok berdasarkan nilainya." + name: " Urut berdasarkan Nilai" + description: " Mengurutkan semua blok berdasarkan nilainya." count: - name: "&f&l Urut berdasarkan Jumlah" - description: "&7 Mengurutkan semua blok berdasarkan jumlahnya." + name: " Urut berdasarkan Jumlah" + description: " Mengurutkan semua blok berdasarkan jumlahnya." value: - name: "&f&l [material]" + name: " [material]" description: |- [description] [value] [underwater] [limit] [id] - id: "&7 Id blok: &e [id]" - value: "&7 Nilai blok: &e [number]" - underwater: "&7 Dibawah permukaan laut: &e [number]" - limit: "&7 Batas block: &e [number]" + id: " Id blok: [id]" + value: " Nilai blok: [number]" + underwater: " Dibawah permukaan laut: [number]" + limit: " Batas block: [number]" previous: - name: "&f&l Halaman sebelumnya" - description: "&7 Beralih ke halaman [number]" + name: " Halaman sebelumnya" + description: " Beralih ke halaman [number]" next: - name: "&f&l Halaman selanjutnya" - description: "&7 Beralih ke halaman [number]" + name: " Halaman selanjutnya" + description: " Beralih ke halaman [number]" search: - name: "&f&l Cari" + name: " Cari" description: |- - &7 Mencari nilai yang - &7 spesifik. - search: "&b Nilai: [value]" + Mencari nilai yang + spesifik. + search: " Nilai: [value]" tips: - click-to-view: "&e Klik &7 untuk melihat." - click-to-previous: "&e Klik &7 untuk melihat halaman sebelumnya." - click-to-next: "&e Klik &7 untuk melihat halaman selanjutnya." - click-to-select: "&e Klik &7 untuk memilih." - left-click-to-cycle-up: "&e Klik Kiri &7 untuk memutar ke atas." - right-click-to-cycle-down: "&e Klik Kanan &7 memutar ke bawah." - left-click-to-change: "&e Klik Kiri &7 untuk mengubah." - right-click-to-clear: "&e Klik Kanan &7 untuk membersihkan." - click-to-asc: "&e Klik &7 untuk mengurutkan dalam urutan menaik." - click-to-desc: "&e Klik &7 untuk mengurutkan dalam urutan menurun." - click-to-warp: "&e Klik &7 untuk warp." - click-to-visit: "&e Klik &7 untuk mengunjungi." - right-click-to-visit: "&e Klik Kanan &7 untuk mengunjungi." + click-to-view: " Klik untuk melihat." + click-to-previous: " Klik untuk melihat halaman sebelumnya." + click-to-next: " Klik untuk melihat halaman selanjutnya." + click-to-select: " Klik untuk memilih." + left-click-to-cycle-up: " Klik Kiri untuk memutar ke atas." + right-click-to-cycle-down: " Klik Kanan memutar ke bawah." + left-click-to-change: " Klik Kiri untuk mengubah." + right-click-to-clear: " Klik Kanan untuk membersihkan." + click-to-asc: " Klik untuk mengurutkan dalam urutan menaik." + click-to-desc: " Klik untuk mengurutkan dalam urutan menurun." + click-to-warp: " Klik untuk warp." + click-to-visit: " Klik untuk mengunjungi." + right-click-to-visit: " Klik Kanan untuk mengunjungi." conversations: - prefix: "&l&6 [BentoBox]: &r" - no-data: "&c Jalankan perintah level untuk melihat laporan blok" + prefix: " [BentoBox]: " + no-data: " Jalankan perintah level untuk melihat laporan blok" cancel-string: batal exit-string: batal, keluar, berhenti - write-search: "&e Tolong masukkan pencarian nilai. (Ketik 'batal' untuk keluar)" - search-updated: "&a Nilai pencarian diperbarui." - cancelled: "&c Percakapan dibatalkan!" - no-value: "&c Item itu tidak ada nilai." - unknown-item: "&c '[material]' tidak ada di dalam permainan." - value: "&7 Nilai dari '[material]' adalah: &e[value]" - value-underwater: "&7Nilai dari '[material]' di bawah permukaan laut: &e[value]" - empty-hand: "&c Tidak ada blok di tangan mu" - you-have: "&7 Kamu memiliki [number] pada hitungan terakhir." - you-can-place: "&7 Kamu dapat menempatkan hingga [number] dan membuatnya terhitung" + write-search: " Tolong masukkan pencarian nilai. (Ketik 'batal' untuk keluar)" + search-updated: " Nilai pencarian diperbarui." + cancelled: " Percakapan dibatalkan!" + no-value: " Item itu tidak ada nilai." + unknown-item: " '[material]' tidak ada di dalam permainan." + value: " Nilai dari '[material]' adalah: [value]" + value-underwater: "Nilai dari '[material]' di bawah permukaan laut: [value]" + empty-hand: " Tidak ada blok di tangan mu" + you-have: " Kamu memiliki [number] pada hitungan terakhir." + you-can-place: " Kamu dapat menempatkan hingga [number] dan membuatnya terhitung" diff --git a/src/main/resources/locales/ko.yml b/src/main/resources/locales/ko.yml index d29f651..4710019 100644 --- a/src/main/resources/locales/ko.yml +++ b/src/main/resources/locales/ko.yml @@ -10,23 +10,23 @@ admin: 예. +10은 레벨 10을 제거하고, 30은 핸디캡을 30으로 설정하고, -20은 레벨 20을 추가합니다 - changed: "&a 초기 섬 핸디캡이 [number]에서 [new_number](으)로 변경되었습니다." - invalid-level: "&c 잘못된 핸디캡입니다. 정수를 사용하세요." + changed: " 초기 섬 핸디캡이 [number]에서 [new_number](으)로 변경되었습니다." + invalid-level: " 잘못된 핸디캡입니다. 정수를 사용하세요." levelstatus: description: 스캔 대기열에 있는 섬 수를 표시합니다 - islands-in-queue: "&a 대기열에 있는 섬: [number]" + islands-in-queue: " 대기열에 있는 섬: [number]" top: description: 상위 10개 목록을 표시합니다 - unknown-world: "&c 알 수 없는 세계입니다!" - display: "&f[rank]. &a[name] &7- &b[level]" + unknown-world: " 알 수 없는 세계입니다!" + display: "[rank]. [name] - [level]" remove: description: 탑 10에서 플레이어를 제거합니다 parameters: "<플레이어>" stats: description: "이 서버의 섬 통계를 표시합니다" title: "서버 섬 통계" - world: "&a [name]" - no-data: "&c 처리할 데이터가 없습니다." + world: " [name]" + no-data: " 처리할 데이터가 없습니다." average-level: "평균 섬 레벨: [number]" median-level: "중앙값 섬 레벨: [number]" mode-level: "최빈값 섬 레벨: [number]" @@ -38,32 +38,32 @@ island: level: parameters: "[플레이어]" description: 섬 레벨을 계산하거나 [플레이어]의 섬 레벨을 보여줍니다 - calculating: "&a 계산 중..." - estimated-wait: "&a 예상 대기 시간: [number]초" - in-queue: "&a 대기열에서 [number]번째입니다" - island-level-is: "&a 섬 레벨은 &b[level]입니다" - required-points-to-next-level: "&a 레벨 진행: &6 [progress]&b /&e [levelcost] &a 포인트" - deaths: "&c ([number] 사망)" - cooldown: "&c 다시 사용하려면 &b[time]초 &c를 기다려야 합니다." - in-progress: "&6 섬 레벨 계산이 진행 중입니다..." - time-out: "&c 레벨 계산이 너무 오래 걸렸습니다. 나중에 다시 시도해 주세요." + calculating: " 계산 중..." + estimated-wait: " 예상 대기 시간: [number]초" + in-queue: " 대기열에서 [number]번째입니다" + island-level-is: " 섬 레벨은 [level]입니다" + required-points-to-next-level: " 레벨 진행: [progress] / [levelcost] 포인트" + deaths: " ([number] 사망)" + cooldown: " 다시 사용하려면 [time]초 를 기다려야 합니다." + in-progress: " 섬 레벨 계산이 진행 중입니다..." + time-out: " 레벨 계산이 너무 오래 걸렸습니다. 나중에 다시 시도해 주세요." detail: description: "섬 블록의 세부 정보를 표시합니다" top: description: 탑 10을 보여줍니다 - gui-title: "&a 탑 10" - gui-heading: "&6 [name]: &B[rank]" - island-level: "&b 레벨 [level]" - warp-to: "&a [name]님의 섬으로 이동 중입니다..." + gui-title: " 탑 10" + gui-heading: " [name]: [rank]" + island-level: " 레벨 [level]" + warp-to: " [name]님의 섬으로 이동 중입니다..." level-details: above-sea-level-blocks: 해발 블록 spawners: 스포너 underwater-blocks: 수중 블록 all-blocks: 모든 블록 - no-island: "&c 섬이 없습니다." + no-island: " 섬이 없습니다." names-island: "[name]의 섬" syntax: "[name] x [number]" - hint: "&c 블록 보고서를 보려면 level을 실행하세요." + hint: " 블록 보고서를 보려면 level을 실행하세요." level: commands: value: @@ -71,27 +71,27 @@ level: description: 블록의 가치를 표시합니다. 손에 든 아이템의 가치를 표시하려면 끝에 'hand'를 추가하세요. gui: titles: - top: "&0&l 탑 섬" - detail-panel: "&0&l [name]의 섬" - value-panel: "&0&l 블록 가치" + top: " 탑 섬" + detail-panel: " [name]의 섬" + value-panel: " 블록 가치" buttons: island: - empty: '&f&l [name]. 위치' - name: '&f&l [name]' + empty: ' [name]. 위치' + name: ' [name]' description: |- [owner] [members] [place] [level] owners-island: "[player]의 섬" - owner: "&7&l 소유자: &r&b [player]" - members-title: "&7&l 멤버:" - member: "&b - [player]" + owner: " 소유자: [player]" + members-title: " 멤버:" + member: " - [player]" unknown: "알 수 없음" - place: "&7&o [number]. &r&7 위치" - level: "&7 레벨: &o [number]" + place: " [number]. 위치" + level: " 레벨: [number]" material: - name: "&f&l [number] x [material]" + name: " [number] x [material]" description: |- [description] [count] @@ -99,101 +99,101 @@ level: [calculated] [limit] [id] - id: "&7 블록 ID: &e [id]" - value: "&7 블록 가치: &e [number]" - limit: "&7 블록 제한: &e [number]" - count: "&7 블록 수: &e [number]" - calculated: "&7 계산된 가치: &e [number]" + id: " 블록 ID: [id]" + value: " 블록 가치: [number]" + limit: " 블록 제한: [number]" + count: " 블록 수: [number]" + calculated: " 계산된 가치: [number]" value_blocks: - name: "&f&l 가치 있는 모든 블록" + name: " 가치 있는 모든 블록" description: |- - &7 섬에서 가치 있는 - &7 모든 블록을 표시합니다. + 섬에서 가치 있는 + 모든 블록을 표시합니다. all_blocks: - name: "&f&l 모든 블록" + name: " 모든 블록" description: |- - &7 섬의 모든 블록을 - &7 표시합니다. + 섬의 모든 블록을 + 표시합니다. above_sea_level: - name: "&f&l 해수면 위의 블록" + name: " 해수면 위의 블록" description: |- - &7 해수면 위에 있는 - &7 블록만 표시합니다. + 해수면 위에 있는 + 블록만 표시합니다. underwater: - name: "&f&l 해수면 아래의 블록" + name: " 해수면 아래의 블록" description: |- - &7 해수면 아래에 있는 - &7 블록만 표시합니다. + 해수면 아래에 있는 + 블록만 표시합니다. spawner: - name: "&f&l 스포너" + name: " 스포너" description: |- - &7 스포너만 표시합니다. - block-name: "&b 스포너" + 스포너만 표시합니다. + block-name: " 스포너" filters: name: - name: "&f&l 이름으로 정렬" + name: " 이름으로 정렬" description: |- - &7 모든 블록을 이름으로 정렬합니다. + 모든 블록을 이름으로 정렬합니다. value: - name: "&f&l 가치로 정렬" + name: " 가치로 정렬" description: |- - &7 모든 블록을 가치로 정렬합니다. + 모든 블록을 가치로 정렬합니다. count: - name: "&f&l 개수로 정렬" + name: " 개수로 정렬" description: |- - &7 모든 블록을 개수로 정렬합니다. + 모든 블록을 개수로 정렬합니다. value: - name: "&f&l [material]" + name: " [material]" description: |- [description] [value] [underwater] [limit] [id] - id: "&7 블록 ID: &e [id]" - value: "&7 블록 가치: &e [number]" - underwater: "&7 해수면 아래: &e [number]" - limit: "&7 블록 제한: &e [number]" + id: " 블록 ID: [id]" + value: " 블록 가치: [number]" + underwater: " 해수면 아래: [number]" + limit: " 블록 제한: [number]" previous: - name: "&f&l 이전 페이지" + name: " 이전 페이지" description: |- - &7 [number] 페이지로 이동 + [number] 페이지로 이동 next: - name: "&f&l 다음 페이지" + name: " 다음 페이지" description: |- - &7 [number] 페이지로 이동 + [number] 페이지로 이동 search: - name: "&f&l 검색" + name: " 검색" description: |- - &7 특정 값을 - &7 검색합니다. - search: "&b 값: [value]" + 특정 값을 + 검색합니다. + search: " 값: [value]" tips: - click-to-view: "&e 클릭 &7 하여 보기." - click-to-previous: "&e 클릭 &7 하여 이전 페이지 보기." - click-to-next: "&e 클릭 &7 하여 다음 페이지 보기." - click-to-select: "&e 클릭 &7 하여 선택." - left-click-to-cycle-up: "&e 왼쪽 클릭 &7 하여 위로." - right-click-to-cycle-down: "&e 오른쪽 클릭 &7 하여 아래로." - left-click-to-change: "&e 왼쪽 클릭 &7 하여 편집." - right-click-to-clear: "&e 오른쪽 클릭 &7 하여 지우기." - click-to-asc: "&e 클릭 &7 하여 오름차순 정렬." - click-to-desc: "&e 클릭 &7 하여 내림차순 정렬." - click-to-warp: "&e 클릭 &7 하여 워프." - click-to-visit: "&e 클릭 &7 하여 방문." - right-click-to-visit: "&e 오른쪽 클릭 &7 하여 방문." + click-to-view: " 클릭 하여 보기." + click-to-previous: " 클릭 하여 이전 페이지 보기." + click-to-next: " 클릭 하여 다음 페이지 보기." + click-to-select: " 클릭 하여 선택." + left-click-to-cycle-up: " 왼쪽 클릭 하여 위로." + right-click-to-cycle-down: " 오른쪽 클릭 하여 아래로." + left-click-to-change: " 왼쪽 클릭 하여 편집." + right-click-to-clear: " 오른쪽 클릭 하여 지우기." + click-to-asc: " 클릭 하여 오름차순 정렬." + click-to-desc: " 클릭 하여 내림차순 정렬." + click-to-warp: " 클릭 하여 워프." + click-to-visit: " 클릭 하여 방문." + right-click-to-visit: " 오른쪽 클릭 하여 방문." conversations: - prefix: "&l&6 [BentoBox]: &r" - no-data: "&c 블록 보고서를 보려면 level을 실행하세요." + prefix: " [BentoBox]: " + no-data: " 블록 보고서를 보려면 level을 실행하세요." cancel-string: 취소 exit-string: 취소, 종료, 나가기 - write-search: "&e 검색 값을 입력하세요. ('취소' 입력으로 종료)" - search-updated: "&a 검색 값이 업데이트되었습니다." - cancelled: "&c 대화가 취소되었습니다!" - no-value: "&c 이 아이템에는 가치가 없습니다." - unknown-item: "&c '[material]'은 게임에 존재하지 않습니다." - value: "&7 '[material]'의 가치는: &e[value]" - value-underwater: "&7 '[material]'의 해수면 아래 가치: &e[value]" - empty-hand: "&c 손에 블록이 없습니다" - you-have: "&7 마지막 계산 시 [number]개 있었습니다." - you-can-place: "&7 최대 [number]개까지 배치하면 계산됩니다" + write-search: " 검색 값을 입력하세요. ('취소' 입력으로 종료)" + search-updated: " 검색 값이 업데이트되었습니다." + cancelled: " 대화가 취소되었습니다!" + no-value: " 이 아이템에는 가치가 없습니다." + unknown-item: " '[material]'은 게임에 존재하지 않습니다." + value: " '[material]'의 가치는: [value]" + value-underwater: " '[material]'의 해수면 아래 가치: [value]" + empty-hand: " 손에 블록이 없습니다" + you-have: " 마지막 계산 시 [number]개 있었습니다." + you-can-place: " 최대 [number]개까지 배치하면 계산됩니다" diff --git a/src/main/resources/locales/lv.yml b/src/main/resources/locales/lv.yml index 69a3b98..b2875f5 100644 --- a/src/main/resources/locales/lv.yml +++ b/src/main/resources/locales/lv.yml @@ -10,23 +10,23 @@ admin: piem. +10 noņem 10 līmeņus, 30 iestata handicap uz 30, -20 pievieno 20 līmeņus - changed: "&a Sākuma salas handicap mainīts no [number] uz [new_number]." - invalid-level: "&c Nederīgs handicap. Izmanto veselu skaitli." + changed: " Sākuma salas handicap mainīts no [number] uz [new_number]." + invalid-level: " Nederīgs handicap. Izmanto veselu skaitli." levelstatus: description: rāda, cik salu ir skenēšanas rindā - islands-in-queue: "&a Salas rindā: [number]" + islands-in-queue: " Salas rindā: [number]" top: description: rādīt labākās 10 salas - display: "&f[rank]. &a[name] &7- &b[level]" - unknown-world: "&c Nezināma pasaule!" + display: "[rank]. [name] - [level]" + unknown-world: " Nezināma pasaule!" remove: description: noņemt spēlētāju no labāko desmit saraksta parameters: "" stats: description: "rādīt salas statistiku šajā serverī" title: "Servera Salas Statistika" - world: "&a [name]" - no-data: "&c Nav datu apstrādei." + world: " [name]" + no-data: " Nav datu apstrādei." average-level: "Vidējais salas līmenis: [number]" median-level: "Mediānais salas līmenis: [number]" mode-level: "Biežākais salas līmenis: [number]" @@ -36,34 +36,34 @@ admin: islands: "salas" island: level: - calculating: "&a Aprēķina līmeni..." - cooldown: "&c Tev ir jāuzgaida &b[time] &c sekundes, lai vēlreiz aprēķinātu salas līmeni!" - deaths: "&c ([number] nāves)" + calculating: " Aprēķina līmeni..." + cooldown: " Tev ir jāuzgaida [time] sekundes, lai vēlreiz aprēķinātu salas līmeni!" + deaths: " ([number] nāves)" description: aprēķina tavas salas līmeni, vai parāda spēlētāja [player] līmeni - island-level-is: "&a Salas līmenis ir &b[level]" + island-level-is: " Salas līmenis ir [level]" parameters: "[player]" - estimated-wait: "&a Paredzamais gaidīšanas laiks: [number] sekundes" - in-queue: "&a Tu esi numurs [number] rindā" - required-points-to-next-level: "&a Līmeņa progress: &6 [progress]&b /&e [levelcost] &a punkti" - in-progress: "&6 Salas līmeņa aprēķins notiek..." - time-out: "&c Līmeņa aprēķins ilga pārāk ilgi. Lūdzu, mēģini vēlāk." + estimated-wait: " Paredzamais gaidīšanas laiks: [number] sekundes" + in-queue: " Tu esi numurs [number] rindā" + required-points-to-next-level: " Līmeņa progress: [progress] / [levelcost] punkti" + in-progress: " Salas līmeņa aprēķins notiek..." + time-out: " Līmeņa aprēķins ilga pārāk ilgi. Lūdzu, mēģini vēlāk." detail: description: "rāda tavas salas bloku detaļas" top: description: rādīt labākos 10 - gui-heading: "&6[name]: &B[rank]" - gui-title: "&a Labākie 10" - island-level: "&b Līmenis [level]" - warp-to: "&a Pārvietojas uz [name] salu." + gui-heading: "[name]: [rank]" + gui-title: " Labākie 10" + island-level: " Līmenis [level]" + warp-to: " Pārvietojas uz [name] salu." level-details: above-sea-level-blocks: Bloki virs jūras līmeņa spawners: Spawners underwater-blocks: Zemūdens bloki all-blocks: Visi bloki - no-island: "&c Nav salas!" + no-island: " Nav salas!" names-island: "[name] sala" syntax: "[name] x [number]" - hint: "&c Palaid level, lai redzētu bloku pārskatu" + hint: " Palaid level, lai redzētu bloku pārskatu" level: commands: value: @@ -71,27 +71,27 @@ level: description: rāda bloku vērtības. Pievieno 'hand' beigās, lai rādītu rokā esošā priekšmeta vērtību. gui: titles: - top: "&0&l Top Salas" - detail-panel: "&0&l [name] sala" - value-panel: "&0&l Bloku Vērtības" + top: " Top Salas" + detail-panel: " [name] sala" + value-panel: " Bloku Vērtības" buttons: island: - empty: '&f&l [name]. vieta' - name: '&f&l [name]' + empty: ' [name]. vieta' + name: ' [name]' description: |- [owner] [members] [place] [level] owners-island: "[player] sala" - owner: "&7&l Īpašnieks: &r&b [player]" - members-title: "&7&l Dalībnieki:" - member: "&b - [player]" + owner: " Īpašnieks: [player]" + members-title: " Dalībnieki:" + member: " - [player]" unknown: "nezināms" - place: "&7&o [number]. &r&7 vieta" - level: "&7 Līmenis: &o [number]" + place: " [number]. vieta" + level: " Līmenis: [number]" material: - name: "&f&l [number] x [material]" + name: " [number] x [material]" description: |- [description] [count] @@ -99,103 +99,103 @@ level: [calculated] [limit] [id] - id: "&7 Bloka ID: &e [id]" - value: "&7 Bloka vērtība: &e [number]" - limit: "&7 Bloka limits: &e [number]" - count: "&7 Bloku skaits: &e [number]" - calculated: "&7 Aprēķinātā vērtība: &e [number]" + id: " Bloka ID: [id]" + value: " Bloka vērtība: [number]" + limit: " Bloka limits: [number]" + count: " Bloku skaits: [number]" + calculated: " Aprēķinātā vērtība: [number]" value_blocks: - name: "&f&l Visi Bloki ar Vērtību" + name: " Visi Bloki ar Vērtību" description: |- - &7 Rādīt visus blokus - &7 ar vērtību salā. + Rādīt visus blokus + ar vērtību salā. all_blocks: - name: "&f&l Visi Bloki" + name: " Visi Bloki" description: |- - &7 Rādīt visus blokus - &7 salā. + Rādīt visus blokus + salā. above_sea_level: - name: "&f&l Bloki virs jūras līmeņa" + name: " Bloki virs jūras līmeņa" description: |- - &7 Rādīt tikai blokus - &7 kas atrodas virs - &7 jūras līmeņa. + Rādīt tikai blokus + kas atrodas virs + jūras līmeņa. underwater: - name: "&f&l Bloki zem jūras līmeņa" + name: " Bloki zem jūras līmeņa" description: |- - &7 Rādīt tikai blokus - &7 kas atrodas zem - &7 jūras līmeņa. + Rādīt tikai blokus + kas atrodas zem + jūras līmeņa. spawner: - name: "&f&l Spawners" + name: " Spawners" description: |- - &7 Rādīt tikai spawnerus. - block-name: "&b Spawner" + Rādīt tikai spawnerus. + block-name: " Spawner" filters: name: - name: "&f&l Kārtot pēc Nosaukuma" + name: " Kārtot pēc Nosaukuma" description: |- - &7 Kārtot visus blokus pēc nosaukuma. + Kārtot visus blokus pēc nosaukuma. value: - name: "&f&l Kārtot pēc Vērtības" + name: " Kārtot pēc Vērtības" description: |- - &7 Kārtot visus blokus pēc vērtības. + Kārtot visus blokus pēc vērtības. count: - name: "&f&l Kārtot pēc Skaita" + name: " Kārtot pēc Skaita" description: |- - &7 Kārtot visus blokus pēc skaita. + Kārtot visus blokus pēc skaita. value: - name: "&f&l [material]" + name: " [material]" description: |- [description] [value] [underwater] [limit] [id] - id: "&7 Bloka ID: &e [id]" - value: "&7 Bloka vērtība: &e [number]" - underwater: "&7 Zem jūras līmeņa: &e [number]" - limit: "&7 Bloka limits: &e [number]" + id: " Bloka ID: [id]" + value: " Bloka vērtība: [number]" + underwater: " Zem jūras līmeņa: [number]" + limit: " Bloka limits: [number]" previous: - name: "&f&l Iepriekšējā Lapa" + name: " Iepriekšējā Lapa" description: |- - &7 Pāriet uz lapu [number] + Pāriet uz lapu [number] next: - name: "&f&l Nākamā Lapa" + name: " Nākamā Lapa" description: |- - &7 Pāriet uz lapu [number] + Pāriet uz lapu [number] search: - name: "&f&l Meklēt" + name: " Meklēt" description: |- - &7 Meklēt konkrētu - &7 vērtību. - search: "&b Vērtība: [value]" + Meklēt konkrētu + vērtību. + search: " Vērtība: [value]" tips: - click-to-view: "&e Klikšķini &7 lai skatītu." - click-to-previous: "&e Klikšķini &7 lai skatītu iepriekšējo lapu." - click-to-next: "&e Klikšķini &7 lai skatītu nākamo lapu." - click-to-select: "&e Klikšķini &7 lai izvēlētos." - left-click-to-cycle-up: "&e Kreisais Klikšķis &7 lai celtu." - right-click-to-cycle-down: "&e Labais Klikšķis &7 lai nolaistu." - left-click-to-change: "&e Kreisais Klikšķis &7 lai rediģētu." - right-click-to-clear: "&e Labais Klikšķis &7 lai notīrītu." - click-to-asc: "&e Klikšķini &7 lai kārtotu augošā secībā." - click-to-desc: "&e Klikšķini &7 lai kārtotu dilstošā secībā." - click-to-warp: "&e Klikšķini &7 lai teleportētos." - click-to-visit: "&e Klikšķini &7 lai apmeklētu." - right-click-to-visit: "&e Labais Klikšķis &7 lai apmeklētu." + click-to-view: " Klikšķini lai skatītu." + click-to-previous: " Klikšķini lai skatītu iepriekšējo lapu." + click-to-next: " Klikšķini lai skatītu nākamo lapu." + click-to-select: " Klikšķini lai izvēlētos." + left-click-to-cycle-up: " Kreisais Klikšķis lai celtu." + right-click-to-cycle-down: " Labais Klikšķis lai nolaistu." + left-click-to-change: " Kreisais Klikšķis lai rediģētu." + right-click-to-clear: " Labais Klikšķis lai notīrītu." + click-to-asc: " Klikšķini lai kārtotu augošā secībā." + click-to-desc: " Klikšķini lai kārtotu dilstošā secībā." + click-to-warp: " Klikšķini lai teleportētos." + click-to-visit: " Klikšķini lai apmeklētu." + right-click-to-visit: " Labais Klikšķis lai apmeklētu." conversations: - prefix: "&l&6 [BentoBox]: &r" - no-data: "&c Palaid level, lai redzētu bloku pārskatu." + prefix: " [BentoBox]: " + no-data: " Palaid level, lai redzētu bloku pārskatu." cancel-string: atcelt exit-string: atcelt, iziet, pamest - write-search: "&e Lūdzu ievadi meklēšanas vērtību. (Raksti 'atcelt' lai izietu)" - search-updated: "&a Meklēšanas vērtība atjaunināta." - cancelled: "&c Saruna atcelta!" - no-value: "&c Šim priekšmetam nav vērtības." - unknown-item: "&c '[material]' spēlē nepastāv." - value: "&7 '[material]' vērtība ir: &e[value]" - value-underwater: "&7 '[material]' vērtība zem jūras līmeņa: &e[value]" - empty-hand: "&c Rokās nav bloku" - you-have: "&7 Pēdējā skaitīšanā tev bija [number]." - you-can-place: "&7 Vari novietot līdz [number] un tie tiks skaitīti" + write-search: " Lūdzu ievadi meklēšanas vērtību. (Raksti 'atcelt' lai izietu)" + search-updated: " Meklēšanas vērtība atjaunināta." + cancelled: " Saruna atcelta!" + no-value: " Šim priekšmetam nav vērtības." + unknown-item: " '[material]' spēlē nepastāv." + value: " '[material]' vērtība ir: [value]" + value-underwater: " '[material]' vērtība zem jūras līmeņa: [value]" + empty-hand: " Rokās nav bloku" + you-have: " Pēdējā skaitīšanā tev bija [number]." + you-can-place: " Vari novietot līdz [number] un tie tiks skaitīti" diff --git a/src/main/resources/locales/nl.yml b/src/main/resources/locales/nl.yml index 5b1a22e..e0ae4e7 100644 --- a/src/main/resources/locales/nl.yml +++ b/src/main/resources/locales/nl.yml @@ -7,23 +7,23 @@ admin: parameters: " " description: stel handicap in voor het eiland, normaal gesproken het level van het starter eiland. - changed: "&a Initiële handicap is veranderd van [number] naar [new_number]." - invalid-level: "&c Ongeldige handicap. Gebruik een getal." + changed: " Initiële handicap is veranderd van [number] naar [new_number]." + invalid-level: " Ongeldige handicap. Gebruik een getal." levelstatus: description: laat zien hoeveel eilanden er in de wachtrij staan voor het scannen - islands-in-queue: "&a Aantal eilanden in de wachtrij: [number]" + islands-in-queue: " Aantal eilanden in de wachtrij: [number]" top: description: Laat de top tien zien - unknown-world: "&c Ongeldige wereld!" - display: "&f[rank]. &a[name] &7- &b[level]" + unknown-world: " Ongeldige wereld!" + display: "[rank]. [name] - [level]" remove: description: verwijder speler van de top tien parameters: "" stats: description: "toon statistieken van eilanden op deze server" title: "Server Eiland Statistieken" - world: "&a [name]" - no-data: "&c Geen gegevens om te verwerken." + world: " [name]" + no-data: " Geen gegevens om te verwerken." average-level: "Gemiddeld eilandniveau: [number]" median-level: "Mediaan eilandniveau: [number]" mode-level: "Modus eilandniveau: [number]" @@ -35,21 +35,21 @@ island: level: parameters: "[speler]" description: bereken het eiland level voor [player] - calculating: "&a Level aan het berekenen..." - estimated-wait: "&a Verwachtte wachttijd: [number] seconde" - in-queue: "&a Jij staat op plek [number] in de wachtrij" - island-level-is: "&a Eiland level is &b[level]" - required-points-to-next-level: "&a Voortgang niveau: &6 [progress]&b /&e [levelcost] &a punten" - deaths: "&c([number] doodgegaan)" - cooldown: "&c Je moet nog &b[time] &c seconden wachten tot je dit weer kan doen." - in-progress: "&6 Eiland level wordt berekend..." - time-out: "&c De level berekening duurde te lang. Probeer het later opnieuw." + calculating: " Level aan het berekenen..." + estimated-wait: " Verwachtte wachttijd: [number] seconde" + in-queue: " Jij staat op plek [number] in de wachtrij" + island-level-is: " Eiland level is [level]" + required-points-to-next-level: " Voortgang niveau: [progress] / [levelcost] punten" + deaths: "([number] doodgegaan)" + cooldown: " Je moet nog [time] seconden wachten tot je dit weer kan doen." + in-progress: " Eiland level wordt berekend..." + time-out: " De level berekening duurde te lang. Probeer het later opnieuw." top: description: Toon de Top tien - gui-title: "&a Top tien" - gui-heading: "&6[name]: &B[rank]" - island-level: "&b Level [level]" - warp-to: "&A Teleporteren naar [name]'s eiland" + gui-title: " Top tien" + gui-heading: "[name]: [rank]" + island-level: " Level [level]" + warp-to: " Teleporteren naar [name]'s eiland" detail: description: "toont details van de blokken op uw eiland" level-details: @@ -57,10 +57,10 @@ island: spawners: Monsterkooien underwater-blocks: Blokken onder zeeniveau all-blocks: Alle blokken - no-island: "&c Geen eiland!" + no-island: " Geen eiland!" names-island: "[name]'s eiland" syntax: "[name] x [number]" - hint: "&c Gebruik level om het blokkenrapport te zien" + hint: " Gebruik level om het blokkenrapport te zien" level: commands: value: @@ -69,27 +69,27 @@ level: waarde te laten zien van het item in je hand. gui: titles: - top: "&0&l Top eilanden" - detail-panel: "&0&l [name]'s eiland" - value-panel: "&0&l Blok waardes" + top: " Top eilanden" + detail-panel: " [name]'s eiland" + value-panel: " Blok waardes" buttons: island: - empty: "&f&l [name]. plaats" - name: "&f&l [name]" + empty: " [name]. plaats" + name: " [name]" description: |- [owner] [members] [place] [level] owners-island: "[player]'s Eiland" - owner: "&7&l Eigenaar: &r&b [player]" - members-title: "&7&l Leden:" - member: "&b - [player]" + owner: " Eigenaar: [player]" + members-title: " Leden:" + member: " - [player]" unknown: onbekend - place: "&7&o [number]. &r&7 plaats" - level: "&7 Level: &o [number]" + place: " [number]. plaats" + level: " Level: [number]" material: - name: "&f&l [number] x [material]" + name: " [number] x [material]" description: |- [description] [count] @@ -97,91 +97,91 @@ level: [calculated] [limit] [id] - id: "&7 Blok id: &e [id]" - value: "&7 Block waarde: &e [number]" - limit: "&7 Block limiet: &e [number]" - count: "&7 Aantal blokken: &e [number]" - calculated: "&7 Berekende waarde: &e [number]" + id: " Blok id: [id]" + value: " Block waarde: [number]" + limit: " Block limiet: [number]" + count: " Aantal blokken: [number]" + calculated: " Berekende waarde: [number]" value_blocks: - name: "&f&l Alle Blokken met Waarde" + name: " Alle Blokken met Waarde" description: |- - &7 Toon alle blokken - &7 met waarde op het eiland. + Toon alle blokken + met waarde op het eiland. all_blocks: - name: "&f&l Alle Blokken" - description: "&7 Toon alle blokken \n&7 op het eiland." + name: " Alle Blokken" + description: " Toon alle blokken \n op het eiland." above_sea_level: - name: "&f&l Blokken boven zeeniveau" + name: " Blokken boven zeeniveau" description: |- - &7 Toon alleen blokken - &7 die boven zeeniveau zijn + Toon alleen blokken + die boven zeeniveau zijn underwater: - name: "&f&l Blokken onder zeeniveau" + name: " Blokken onder zeeniveau" description: |- - &7 Toon alleen blokken - &7 die onder zeeniveau zijn + Toon alleen blokken + die onder zeeniveau zijn spawner: - name: "&f&l Monsterkooien" - description: "&7 Toon alleen monsterkooien." - block-name: "&b Monsterkooien" + name: " Monsterkooien" + description: " Toon alleen monsterkooien." + block-name: " Monsterkooien" filters: name: - name: "&f&l Sorteer aan de hand van naam" - description: "&7 Sorteer alle blokken aan de hand van naam." + name: " Sorteer aan de hand van naam" + description: " Sorteer alle blokken aan de hand van naam." value: - name: "&f&l Sorteer aan de hand van waarde" - description: "&7 Sorteer alle blokken aan de hand van waarde." + name: " Sorteer aan de hand van waarde" + description: " Sorteer alle blokken aan de hand van waarde." count: - name: "&f&l Sorteer aan de hand van aantal" - description: "&7 Sorteer alle blokken aan de hand van aantal." + name: " Sorteer aan de hand van aantal" + description: " Sorteer alle blokken aan de hand van aantal." value: - name: "&f&l [material]" + name: " [material]" description: |- [description] [value] [underwater] [limit] [id] - id: "&7 Blok id: &e [id]" - value: "&7 Block waarrde: &e [number]" - underwater: "&7 Onder zeeniveau: &e [number]" - limit: "&7 Blok limiet: &e [number]" + id: " Blok id: [id]" + value: " Block waarrde: [number]" + underwater: " Onder zeeniveau: [number]" + limit: " Blok limiet: [number]" previous: - name: "&f&l Vorige pagina" - description: "&7 Ga naar pagina [number]" + name: " Vorige pagina" + description: " Ga naar pagina [number]" next: - name: "&f&l Volgende pagina" - description: "&7 Ga naar pagina [number]" + name: " Volgende pagina" + description: " Ga naar pagina [number]" search: - name: "&f&l Zoek" - description: "&7 Zoek voor een \n&7 specifieke waarde." - search: "&b Waarde: [value]" + name: " Zoek" + description: " Zoek voor een \n specifieke waarde." + search: " Waarde: [value]" tips: - click-to-view: "&e Klik &7 om te zien." - click-to-previous: "&e Klik &7 om de vorige pagina te zien." - click-to-next: "&e Klik &7 om de volgende pagina te zien." - click-to-select: "&e Klik &7 om te selecteren." - left-click-to-cycle-up: "&e Linker Klik &7 om door te lopen." - right-click-to-cycle-down: "&e Rechter Klik &7 om terug door te lopen." - left-click-to-change: "&e Linker Klik &7 om bij te werken." - right-click-to-clear: "&e Linker Klik &7 om te verwijderen." - click-to-asc: "&e Klik &7 om te toenemend te sorteren." - click-to-desc: "&e Klik &7 om te afnemenend te sorteren." - click-to-warp: "&e Klik &7 om te teleporteren." - click-to-visit: "&e Klik &7 om te bezoeken." - right-click-to-visit: "&e Rechter Klik &7 om te bezoeken." + click-to-view: " Klik om te zien." + click-to-previous: " Klik om de vorige pagina te zien." + click-to-next: " Klik om de volgende pagina te zien." + click-to-select: " Klik om te selecteren." + left-click-to-cycle-up: " Linker Klik om door te lopen." + right-click-to-cycle-down: " Rechter Klik om terug door te lopen." + left-click-to-change: " Linker Klik om bij te werken." + right-click-to-clear: " Linker Klik om te verwijderen." + click-to-asc: " Klik om te toenemend te sorteren." + click-to-desc: " Klik om te afnemenend te sorteren." + click-to-warp: " Klik om te teleporteren." + click-to-visit: " Klik om te bezoeken." + right-click-to-visit: " Rechter Klik om te bezoeken." conversations: - prefix: "&l&6 [BentoBox]: &r" - no-data: "&c Gebruik level om het blokkenrapport te zien." + prefix: " [BentoBox]: " + no-data: " Gebruik level om het blokkenrapport te zien." cancel-string: stop exit-string: stop - write-search: "&e Schrijf een zoekopdracht. (Schrijf 'stop' om te zoeken)" - search-updated: "&a Zoekopdracht bijgewerkt." - cancelled: "&c Conversatie gestopt!" - no-value: "&c Dit item heeft geen waarde." - unknown-item: "&c '[material]' bestaat niet in het spel." - value: "&7 De waarde van '[material]' is: &e[value]" - value-underwater: "&7 The waarde van '[material]' onder zeeniveau: &e[value]" - empty-hand: "&c Je hebt geen blok vast" - you-have: "&7 Je hebt [number] bij de laatste telling." - you-can-place: "&7 Je kunt tot [number] plaatsen en ze laten meetellen" + write-search: " Schrijf een zoekopdracht. (Schrijf 'stop' om te zoeken)" + search-updated: " Zoekopdracht bijgewerkt." + cancelled: " Conversatie gestopt!" + no-value: " Dit item heeft geen waarde." + unknown-item: " '[material]' bestaat niet in het spel." + value: " De waarde van '[material]' is: [value]" + value-underwater: " The waarde van '[material]' onder zeeniveau: [value]" + empty-hand: " Je hebt geen blok vast" + you-have: " Je hebt [number] bij de laatste telling." + you-can-place: " Je kunt tot [number] plaatsen en ze laten meetellen" diff --git a/src/main/resources/locales/pl.yml b/src/main/resources/locales/pl.yml index 5e1666a..73d1da0 100644 --- a/src/main/resources/locales/pl.yml +++ b/src/main/resources/locales/pl.yml @@ -6,23 +6,23 @@ admin: sethandicap: parameters: " " description: ustawić 0 poziom wyspy, zwykle poziom wyspy startowej - changed: "&a Początkowy poziom wysp został zmieniony z [number] na [new_number]." - invalid-level: "&c Nieprawidłowy poziom. Użyj liczby całkowitej." + changed: " Początkowy poziom wysp został zmieniony z [number] na [new_number]." + invalid-level: " Nieprawidłowy poziom. Użyj liczby całkowitej." levelstatus: description: pokazuje ile wysp znajduje się w kolejce do skanowania - islands-in-queue: "&a Wyspy w kolejce: [number]" + islands-in-queue: " Wyspy w kolejce: [number]" top: description: pokazuje Top 10 wysp - unknown-world: "&cNieznany świat!" - display: "&f[rank]. &a[name] &7- &b[level]" + unknown-world: "Nieznany świat!" + display: "[rank]. [name] - [level]" remove: description: usuwa gracza z Top 10 parameters: "" stats: description: "wyświetl statystyki wysp na tym serwerze" title: "Statystyki Wysp Serwera" - world: "&a [name]" - no-data: "&c Brak danych do przetworzenia." + world: " [name]" + no-data: " Brak danych do przetworzenia." average-level: "Średni poziom wyspy: [number]" median-level: "Medianowy poziom wyspy: [number]" mode-level: "Modalny poziom wyspy: [number]" @@ -34,22 +34,22 @@ island: level: parameters: "[player]" description: oblicza poziom wyspy lub pokazać poziom [player] - calculating: "&aObliczanie poziomu wyspy..." - estimated-wait: "&a Szacowany czas: [number] sekund" - in-queue: "&a Jestes numerem [number] w kolejce" - island-level-is: "&aPoziom wyspy wynosi &b[level]" - required-points-to-next-level: "&a Postęp poziomu: &6 [progress]&b /&e [levelcost] &a punktów" - deaths: "&c([number] śmierci)" - cooldown: "&cMusisz zaczekać &b[time] &csekund przed następnym obliczeniem poziomu" - in-progress: "&6 Trwa obliczanie poziomu twojej wyspy..." - time-out: "&c Sprawdzanie poziomu twojej wyspy trwalo zbyt dlugo. Sprobuj ponownie + calculating: "Obliczanie poziomu wyspy..." + estimated-wait: " Szacowany czas: [number] sekund" + in-queue: " Jestes numerem [number] w kolejce" + island-level-is: "Poziom wyspy wynosi [level]" + required-points-to-next-level: " Postęp poziomu: [progress] / [levelcost] punktów" + deaths: "([number] śmierci)" + cooldown: "Musisz zaczekać [time] sekund przed następnym obliczeniem poziomu" + in-progress: " Trwa obliczanie poziomu twojej wyspy..." + time-out: " Sprawdzanie poziomu twojej wyspy trwalo zbyt dlugo. Sprobuj ponownie pozniej!" top: description: pokauje Top 10 wysp - gui-title: "&aTop 10" - gui-heading: "&6[name]: &B[rank]" - island-level: "&BPoziom [level]" - warp-to: "&ATeleportowanie do wyspy [name]" + gui-title: "Top 10" + gui-heading: "[name]: [rank]" + island-level: "Poziom [level]" + warp-to: "Teleportowanie do wyspy [name]" detail: description: "wyświetla szczegóły bloków twojej wyspy" level-details: @@ -57,10 +57,10 @@ island: spawners: Spawnery underwater-blocks: Podwodne bloki all-blocks: Wszystkie bloki - no-island: "&c Brak wyspy!" + no-island: " Brak wyspy!" names-island: Wyspa gracza [name] syntax: "[name] x [number]" - hint: "&c Uruchom poziom, aby wyświetlić raport o blokach" + hint: " Uruchom poziom, aby wyświetlić raport o blokach" level: commands: value: @@ -69,27 +69,27 @@ level: wartość pozycji w ręku. gui: titles: - top: "&0&l Najlepsze wyspy" - detail-panel: "&0&l Wyspa gracza [name] " - value-panel: "&0&l Wartości bloków" + top: " Najlepsze wyspy" + detail-panel: " Wyspa gracza [name] " + value-panel: " Wartości bloków" buttons: island: - empty: "&f&l [name]. miejsce" - name: "&f&l [name]" + empty: " [name]. miejsce" + name: " [name]" description: |- [owner] [members] [place] [level] owners-island: wyspa gracza [player] - owner: "&7&l Lider: &r&b [player]" - members-title: "&7&l Członkowie:" - member: "&b - [player]" + owner: " Lider: [player]" + members-title: " Członkowie:" + member: " - [player]" unknown: nieznany - place: "&7&o [number]. &r&7 miejsce" - level: "&7 Poziom: &o [number]" + place: " [number]. miejsce" + level: " Poziom: [number]" material: - name: "&f&l [number] x [material]" + name: " [number] x [material]" description: |- [description] [count] @@ -97,97 +97,97 @@ level: [calculated] [limit] [id] - id: "&7 Identyfikator bloku: &e [id]" - value: "&7 Wartość bloku: &e [number]" - limit: "&7 Limit bloków: &e [number]" - count: "&7 Numer bloku: &e [number]" - calculated: "&7 Obliczona wartość: &e [number]" + id: " Identyfikator bloku: [id]" + value: " Wartość bloku: [number]" + limit: " Limit bloków: [number]" + count: " Numer bloku: [number]" + calculated: " Obliczona wartość: [number]" value_blocks: - name: "&f&l Wszystkie Bloki z Wartością" + name: " Wszystkie Bloki z Wartością" description: |- - &7 Wyświetl wszystkie bloki - &7 z wartością na wyspie. + Wyświetl wszystkie bloki + z wartością na wyspie. all_blocks: - name: "&f&l Wszystkie bloki" + name: " Wszystkie bloki" description: |- - &7 Wyświetl wszystkie bloki - &7 na wyspie. + Wyświetl wszystkie bloki + na wyspie. above_sea_level: - name: "&f&l Bloki nad poziomem morza" + name: " Bloki nad poziomem morza" description: |- - &7 Wyświetlaj tylko bloki - &7 które są nad poziomem - &7 morza + Wyświetlaj tylko bloki + które są nad poziomem + morza underwater: - name: "&f&l Bloki pod poziomem morza" + name: " Bloki pod poziomem morza" description: |- - &7 Wyświetlaj tylko bloki - &7 ponad poziomem morza + Wyświetlaj tylko bloki + ponad poziomem morza spawner: - name: "&f&l Spawnery" - description: "&7 Wyświetlaj tylko spawnery." - block-name: "&b Spawner" + name: " Spawnery" + description: " Wyświetlaj tylko spawnery." + block-name: " Spawner" filters: name: - name: "&f&l Sortuj według nazwy" - description: "&7 Sortuj wszystkie bloki według nazwy." + name: " Sortuj według nazwy" + description: " Sortuj wszystkie bloki według nazwy." value: - name: "&f&l Sortuj według wartości" - description: "&7 Sortuj wszystkie bloki według ich wartości." + name: " Sortuj według wartości" + description: " Sortuj wszystkie bloki według ich wartości." count: - name: "&f&l Sortuj według liczby" - description: "&7 Sortuj wszystkie bloki według ich ilości." + name: " Sortuj według liczby" + description: " Sortuj wszystkie bloki według ich ilości." value: - name: "&f&l [material]" + name: " [material]" description: |- [description] [value] [underwater] [limit] [id] - id: "&7 Identyfikator bloku: &e [id]" - value: "&7 Wartość bloku: &e [number]" - underwater: "&7 Poniżej poziomu morza: &e [number]" - limit: "&7 Limit bloku: &e [number]" + id: " Identyfikator bloku: [id]" + value: " Wartość bloku: [number]" + underwater: " Poniżej poziomu morza: [number]" + limit: " Limit bloku: [number]" previous: - name: "&f&l Poprzednia strona" - description: "&7 Przełącz na stronę [number]" + name: " Poprzednia strona" + description: " Przełącz na stronę [number]" next: - name: "&f&l Następna strona" - description: "&7 Przełącz na stronę [number]" + name: " Następna strona" + description: " Przełącz na stronę [number]" search: - name: "&f&l Szukaj" + name: " Szukaj" description: |- - &7 Wyszukaj konkretną - &7 wartość. - search: "&b Wartość: [value]" + Wyszukaj konkretną + wartość. + search: " Wartość: [value]" tips: - click-to-view: "&e Kliknij &7, aby wyświetlić." - click-to-previous: "&e Kliknij &7, aby wyświetlić poprzednią stronę." - click-to-next: "&e Kliknij &7, aby wyświetlić następną stronę." - click-to-select: "&e Kliknij &7, aby wybrać." - left-click-to-cycle-up: "&e Kliknij lewym przyciskiem &7, aby przejść w górę." - right-click-to-cycle-down: "&e Kliknij prawym przyciskiem &7, aby przejść w + click-to-view: " Kliknij , aby wyświetlić." + click-to-previous: " Kliknij , aby wyświetlić poprzednią stronę." + click-to-next: " Kliknij , aby wyświetlić następną stronę." + click-to-select: " Kliknij , aby wybrać." + left-click-to-cycle-up: " Kliknij lewym przyciskiem , aby przejść w górę." + right-click-to-cycle-down: " Kliknij prawym przyciskiem , aby przejść w dół." - left-click-to-change: "&e Kliknij lewym przyciskiem &7, aby edytować." - right-click-to-clear: "&e Kliknij prawym przyciskiem &7, aby wyczyścić." - click-to-asc: "&e Kliknij &7, aby posortować w porządku rosnącym." - click-to-desc: "&e Kliknij &7, aby posortować w porządku malejącym." - click-to-warp: "&e Kliknij&7, aby przenieść" - click-to-visit: "&e Kliknij&7, aby odwiedzić" - right-click-to-visit: "&e Kliknij prawym przyciskiem &7, aby odwiedzić." + left-click-to-change: " Kliknij lewym przyciskiem , aby edytować." + right-click-to-clear: " Kliknij prawym przyciskiem , aby wyczyścić." + click-to-asc: " Kliknij , aby posortować w porządku rosnącym." + click-to-desc: " Kliknij , aby posortować w porządku malejącym." + click-to-warp: " Kliknij, aby przenieść" + click-to-visit: " Kliknij, aby odwiedzić" + right-click-to-visit: " Kliknij prawym przyciskiem , aby odwiedzić." conversations: - prefix: "&l&6 [BentoBox]: &r" - no-data: "&c Wykonaj sprawdzenie poziomu, przed raportem bloków" + prefix: " [BentoBox]: " + no-data: " Wykonaj sprawdzenie poziomu, przed raportem bloków" cancel-string: anuluj exit-string: cancel, exit, quit, anuluj - write-search: "&e Wprowadź wartość wyszukiwania. (Napisz „anuluj”, aby wyjść)" - search-updated: "&a Zaktualizowano wartość wyszukiwania." - cancelled: "&c Rozmowa została anulowana!" - no-value: "&c Ten element nie ma wartości." - unknown-item: "&c „[material]” nie istnieje w grze." - value: "&7 Wartość '[material]' to: &e[value]" - value-underwater: "&7 Wartość „[material]” poniżej poziomu morza: &e[value]" - empty-hand: "&c W twojej ręce nie ma bloków" - you-have: "&7 Masz [number] przy ostatnim zliczaniu." - you-can-place: "&7 Możesz umieścić do [number] i będą liczone" + write-search: " Wprowadź wartość wyszukiwania. (Napisz „anuluj”, aby wyjść)" + search-updated: " Zaktualizowano wartość wyszukiwania." + cancelled: " Rozmowa została anulowana!" + no-value: " Ten element nie ma wartości." + unknown-item: " „[material]” nie istnieje w grze." + value: " Wartość '[material]' to: [value]" + value-underwater: " Wartość „[material]” poniżej poziomu morza: [value]" + empty-hand: " W twojej ręce nie ma bloków" + you-have: " Masz [number] przy ostatnim zliczaniu." + you-can-place: " Możesz umieścić do [number] i będą liczone" diff --git a/src/main/resources/locales/pt.yml b/src/main/resources/locales/pt.yml index e73d558..0d047d9 100644 --- a/src/main/resources/locales/pt.yml +++ b/src/main/resources/locales/pt.yml @@ -10,23 +10,23 @@ admin: ex. +10 removerá 10 níveis, 30 definirá o handicap para 30, -20 adicionará 20 níveis - changed: "&a O handicap inicial da ilha foi alterado de [number] para [new_number]." - invalid-level: "&c Handicap inválido. Use um número inteiro." + changed: " O handicap inicial da ilha foi alterado de [number] para [new_number]." + invalid-level: " Handicap inválido. Use um número inteiro." levelstatus: description: mostrar quantas ilhas estão na fila para escaneamento. - islands-in-queue: "&a Ilhas na fila: [number]" + islands-in-queue: " Ilhas na fila: [number]" top: description: Mostra a lista dos dez primeiros - unknown-world: "&c Mundo desconhecido!" - display: "&f[rank]. &a[name] &7- &b[level]" + unknown-world: " Mundo desconhecido!" + display: "[rank]. [name] - [level]" remove: description: Remover jogador do Top 10 parameters: "" stats: description: "mostrar estatísticas das ilhas neste servidor" title: "Estatísticas das Ilhas do Servidor" - world: "&a [name]" - no-data: "&c Sem dados para processar." + world: " [name]" + no-data: " Sem dados para processar." average-level: "Nível médio das ilhas: [number]" median-level: "Nível mediano das ilhas: [number]" mode-level: "Nível modal das ilhas: [number]" @@ -38,32 +38,32 @@ island: level: parameters: "[player]" description: Calcula o nível da sua ilha ou mostra o nível de [player] - calculating: "&a Calculando level..." - estimated-wait: "&a Espera estimada: [number] segundos." - in-queue: "&a Você é o número [number] na fila." - island-level-is: "&a O nível da ilha é &b[level]" - required-points-to-next-level: "&a Progresso do nível: &6 [progress]&b /&e [levelcost] &a pontos" - deaths: "&c([number] mortes)" - cooldown: "&c Você deve esperar &b[time] &c segundos até que possa fazer isso novamente." - in-progress: "&6 O cálculo do nível da ilha está em andamento..." - time-out: "&c O cálculo do nível demorou muito. Por favor, tente novamente mais tarde." + calculating: " Calculando level..." + estimated-wait: " Espera estimada: [number] segundos." + in-queue: " Você é o número [number] na fila." + island-level-is: " O nível da ilha é [level]" + required-points-to-next-level: " Progresso do nível: [progress] / [levelcost] pontos" + deaths: "([number] mortes)" + cooldown: " Você deve esperar [time] segundos até que possa fazer isso novamente." + in-progress: " O cálculo do nível da ilha está em andamento..." + time-out: " O cálculo do nível demorou muito. Por favor, tente novamente mais tarde." detail: description: "mostra os detalhes dos blocos da sua ilha" top: description: Mostra os dez melhores - gui-title: "&a Top 10" - gui-heading: "&6[name]: &B[rank]" - island-level: "&b Level [level]" - warp-to: "&a Teletransportando para a ilha de [name]" + gui-title: " Top 10" + gui-heading: "[name]: [rank]" + island-level: " Level [level]" + warp-to: " Teletransportando para a ilha de [name]" level-details: above-sea-level-blocks: Blocos acima do nível do mar spawners: Spawners underwater-blocks: Blocos Subaquáticos all-blocks: Todos os blocos - no-island: "&c Sem ilha!" + no-island: " Sem ilha!" names-island: Ilha de [name] syntax: "[name] x [number]" - hint: "&c Execute level para ver o relatório de blocos." + hint: " Execute level para ver o relatório de blocos." level: commands: value: @@ -71,27 +71,27 @@ level: description: mostra o valor dos blocos. Adicione 'hand' no final para exibir o valor do item na mão. gui: titles: - top: "&0&l Top Ilhas" - detail-panel: "&0&l Ilha de [name]" - value-panel: "&0&l Valores dos Blocos" + top: " Top Ilhas" + detail-panel: " Ilha de [name]" + value-panel: " Valores dos Blocos" buttons: island: - empty: '&f&l [name]. lugar' - name: '&f&l [name]' + empty: ' [name]. lugar' + name: ' [name]' description: |- [owner] [members] [place] [level] owners-island: "Ilha de [player]" - owner: "&7&l Dono: &r&b [player]" - members-title: "&7&l Membros:" - member: "&b - [player]" + owner: " Dono: [player]" + members-title: " Membros:" + member: " - [player]" unknown: "desconhecido" - place: "&7&o [number]. &r&7 lugar" - level: "&7 Nível: &o [number]" + place: " [number]. lugar" + level: " Nível: [number]" material: - name: "&f&l [number] x [material]" + name: " [number] x [material]" description: |- [description] [count] @@ -99,103 +99,103 @@ level: [calculated] [limit] [id] - id: "&7 ID do bloco: &e [id]" - value: "&7 Valor do bloco: &e [number]" - limit: "&7 Limite do bloco: &e [number]" - count: "&7 Número de blocos: &e [number]" - calculated: "&7 Valor calculado: &e [number]" + id: " ID do bloco: [id]" + value: " Valor do bloco: [number]" + limit: " Limite do bloco: [number]" + count: " Número de blocos: [number]" + calculated: " Valor calculado: [number]" value_blocks: - name: "&f&l Todos os Blocos com Valor" + name: " Todos os Blocos com Valor" description: |- - &7 Exibir todos os blocos - &7 com valor na ilha. + Exibir todos os blocos + com valor na ilha. all_blocks: - name: "&f&l Todos os Blocos" + name: " Todos os Blocos" description: |- - &7 Exibir todos os blocos - &7 na ilha. + Exibir todos os blocos + na ilha. above_sea_level: - name: "&f&l Blocos Acima do Nível do Mar" + name: " Blocos Acima do Nível do Mar" description: |- - &7 Exibir apenas blocos - &7 que estão acima do - &7 nível do mar. + Exibir apenas blocos + que estão acima do + nível do mar. underwater: - name: "&f&l Blocos Abaixo do Nível do Mar" + name: " Blocos Abaixo do Nível do Mar" description: |- - &7 Exibir apenas blocos - &7 que estão abaixo do - &7 nível do mar. + Exibir apenas blocos + que estão abaixo do + nível do mar. spawner: - name: "&f&l Spawners" + name: " Spawners" description: |- - &7 Exibir apenas spawners. - block-name: "&b Spawner" + Exibir apenas spawners. + block-name: " Spawner" filters: name: - name: "&f&l Ordenar por Nome" + name: " Ordenar por Nome" description: |- - &7 Ordenar todos os blocos por nome. + Ordenar todos os blocos por nome. value: - name: "&f&l Ordenar por Valor" + name: " Ordenar por Valor" description: |- - &7 Ordenar todos os blocos pelo valor. + Ordenar todos os blocos pelo valor. count: - name: "&f&l Ordenar por Quantidade" + name: " Ordenar por Quantidade" description: |- - &7 Ordenar todos os blocos pela quantidade. + Ordenar todos os blocos pela quantidade. value: - name: "&f&l [material]" + name: " [material]" description: |- [description] [value] [underwater] [limit] [id] - id: "&7 ID do bloco: &e [id]" - value: "&7 Valor do bloco: &e [number]" - underwater: "&7 Abaixo do nível do mar: &e [number]" - limit: "&7 Limite do bloco: &e [number]" + id: " ID do bloco: [id]" + value: " Valor do bloco: [number]" + underwater: " Abaixo do nível do mar: [number]" + limit: " Limite do bloco: [number]" previous: - name: "&f&l Página Anterior" + name: " Página Anterior" description: |- - &7 Ir para a página [number] + Ir para a página [number] next: - name: "&f&l Próxima Página" + name: " Próxima Página" description: |- - &7 Ir para a página [number] + Ir para a página [number] search: - name: "&f&l Pesquisar" + name: " Pesquisar" description: |- - &7 Pesquisar um valor - &7 específico. - search: "&b Valor: [value]" + Pesquisar um valor + específico. + search: " Valor: [value]" tips: - click-to-view: "&e Clique &7 para visualizar." - click-to-previous: "&e Clique &7 para ver a página anterior." - click-to-next: "&e Clique &7 para ver a próxima página." - click-to-select: "&e Clique &7 para selecionar." - left-click-to-cycle-up: "&e Clique Esquerdo &7 para avançar." - right-click-to-cycle-down: "&e Clique Direito &7 para retroceder." - left-click-to-change: "&e Clique Esquerdo &7 para editar." - right-click-to-clear: "&e Clique Direito &7 para limpar." - click-to-asc: "&e Clique &7 para ordenar em ordem crescente." - click-to-desc: "&e Clique &7 para ordenar em ordem decrescente." - click-to-warp: "&e Clique &7 para teletransportar." - click-to-visit: "&e Clique &7 para visitar." - right-click-to-visit: "&e Clique Direito &7 para visitar." + click-to-view: " Clique para visualizar." + click-to-previous: " Clique para ver a página anterior." + click-to-next: " Clique para ver a próxima página." + click-to-select: " Clique para selecionar." + left-click-to-cycle-up: " Clique Esquerdo para avançar." + right-click-to-cycle-down: " Clique Direito para retroceder." + left-click-to-change: " Clique Esquerdo para editar." + right-click-to-clear: " Clique Direito para limpar." + click-to-asc: " Clique para ordenar em ordem crescente." + click-to-desc: " Clique para ordenar em ordem decrescente." + click-to-warp: " Clique para teletransportar." + click-to-visit: " Clique para visitar." + right-click-to-visit: " Clique Direito para visitar." conversations: - prefix: "&l&6 [BentoBox]: &r" - no-data: "&c Execute level para ver o relatório de blocos." + prefix: " [BentoBox]: " + no-data: " Execute level para ver o relatório de blocos." cancel-string: cancelar exit-string: cancelar, sair, encerrar - write-search: "&e Por favor, insira um valor de pesquisa. (Digite 'cancelar' para sair)" - search-updated: "&a Valor de pesquisa atualizado." - cancelled: "&c Conversa cancelada!" - no-value: "&c Esse item não tem valor." - unknown-item: "&c O '[material]' não existe no jogo." - value: "&7 O valor de '[material]' é: &e[value]" - value-underwater: "&7 O valor de '[material]' abaixo do nível do mar: &e[value]" - empty-hand: "&c Não há blocos em sua mão" - you-have: "&7 Você tem [number] no último conteo." - you-can-place: "&7 Você pode colocar até [number] e fazê-los contar" + write-search: " Por favor, insira um valor de pesquisa. (Digite 'cancelar' para sair)" + search-updated: " Valor de pesquisa atualizado." + cancelled: " Conversa cancelada!" + no-value: " Esse item não tem valor." + unknown-item: " O '[material]' não existe no jogo." + value: " O valor de '[material]' é: [value]" + value-underwater: " O valor de '[material]' abaixo do nível do mar: [value]" + empty-hand: " Não há blocos em sua mão" + you-have: " Você tem [number] no último conteo." + you-can-place: " Você pode colocar até [number] e fazê-los contar" diff --git a/src/main/resources/locales/tr.yml b/src/main/resources/locales/tr.yml index 894b7c5..eb7fe64 100644 --- a/src/main/resources/locales/tr.yml +++ b/src/main/resources/locales/tr.yml @@ -14,23 +14,23 @@ admin: örn. +10 10 seviye kaldırır, 30 handikabı 30'a ayarlar, -20 20 seviye ekler - changed: "&a Ada başlangıç handikabı [number] değerinden [new_number] değerine değiştirildi." - invalid-level: "&c Geçersiz handikap. Tam sayı kullanın." + changed: " Ada başlangıç handikabı [number] değerinden [new_number] değerine değiştirildi." + invalid-level: " Geçersiz handikap. Tam sayı kullanın." levelstatus: description: tarama için kaç adanın kuyrukta olduğunu göster - islands-in-queue: "&a Kuyrukta bulunan adalar: [number]" + islands-in-queue: " Kuyrukta bulunan adalar: [number]" top: description: "İlk 10 adayı sırala" - unknown-world: "&c Bilinmeyen dünya!" - display: "&f[rank]. &a[name] &7- &b[level]" + unknown-world: " Bilinmeyen dünya!" + display: "[rank]. [name] - [level]" remove: description: oyuncuyu İlk On'dan kaldır parameters: "" stats: description: "bu sunucudaki adaların istatistiklerini göster" title: "Sunucu Ada İstatistikleri" - world: "&a [name]" - no-data: "&c İşlenecek veri yok." + world: " [name]" + no-data: " İşlenecek veri yok." average-level: "Ortalama Ada Seviyesi: [number]" median-level: "Medyan Ada Seviyesi: [number]" mode-level: "Mod Ada Seviyesi: [number]" @@ -42,32 +42,32 @@ island: level: parameters: "[oyuncu]" description: "Kendi ada seviyeni hesapla veya başka oyuncunun ada seviyesini öğren" - calculating: "&a Seviye hesaplanıyor..." - estimated-wait: "&a Tahmini bekleme: [number] saniye" - in-queue: "&a Kuyrukta [number]. sıradasın" - island-level-is: "&a Ada seviyesi &b[level]" - required-points-to-next-level: "&a Seviye ilerlemesi: &6 [progress]&b /&e [levelcost] &a puan" - deaths: "&c ([number] ölüm)" - cooldown: "&c Bunu tekrar yapmak için &b[time] &c saniye beklemelisin" - in-progress: "&6 Ada seviyesi hesaplaması devam ediyor..." - time-out: "&c Seviye hesaplaması çok uzun sürdü. Lütfen daha sonra tekrar deneyin." + calculating: " Seviye hesaplanıyor..." + estimated-wait: " Tahmini bekleme: [number] saniye" + in-queue: " Kuyrukta [number]. sıradasın" + island-level-is: " Ada seviyesi [level]" + required-points-to-next-level: " Seviye ilerlemesi: [progress] / [levelcost] puan" + deaths: " ([number] ölüm)" + cooldown: " Bunu tekrar yapmak için [time] saniye beklemelisin" + in-progress: " Ada seviyesi hesaplaması devam ediyor..." + time-out: " Seviye hesaplaması çok uzun sürdü. Lütfen daha sonra tekrar deneyin." detail: description: "adanın blok ayrıntılarını gösterir" top: description: "İlk 10 adayı sırala" - gui-title: "&a İlk 10 Ada" - gui-heading: "&6Sıralama: &3[rank]" - island-level: "&a Seviye: &7[level]" - warp-to: "&a [name] oyuncusunun adasına ışınlanıyor" + gui-title: " İlk 10 Ada" + gui-heading: "Sıralama: [rank]" + island-level: " Seviye: [level]" + warp-to: " [name] oyuncusunun adasına ışınlanıyor" level-details: above-sea-level-blocks: Deniz Seviyesi Üstü Bloklar spawners: Spawner'lar underwater-blocks: Su Altı Bloklar all-blocks: Tüm Bloklar - no-island: "&c Ada yok!" + no-island: " Ada yok!" names-island: "[name]'nin adası" syntax: "[name] x [number]" - hint: "&c Blok raporunu görmek için level komutunu çalıştırın" + hint: " Blok raporunu görmek için level komutunu çalıştırın" level: commands: value: @@ -75,27 +75,27 @@ level: description: blokların değerini gösterir. Elinizdeki eşyanın değerini görmek için sona 'hand' ekleyin. gui: titles: - top: "&0&l En İyi Adalar" - detail-panel: "&0&l [name]'nin adası" - value-panel: "&0&l Blok Değerleri" + top: " En İyi Adalar" + detail-panel: " [name]'nin adası" + value-panel: " Blok Değerleri" buttons: island: - empty: '&f&l [name]. sıra' - name: '&f&l [name]' + empty: ' [name]. sıra' + name: ' [name]' description: |- [owner] [members] [place] [level] owners-island: "[player]'nin adası" - owner: "&7&l Sahip: &r&b [player]" - members-title: "&7&l Üyeler:" - member: "&b - [player]" + owner: " Sahip: [player]" + members-title: " Üyeler:" + member: " - [player]" unknown: "bilinmiyor" - place: "&7&o [number]. &r&7 sıra" - level: "&7 Seviye: &o [number]" + place: " [number]. sıra" + level: " Seviye: [number]" material: - name: "&f&l [number] x [material]" + name: " [number] x [material]" description: |- [description] [count] @@ -103,103 +103,103 @@ level: [calculated] [limit] [id] - id: "&7 Blok ID: &e [id]" - value: "&7 Blok değeri: &e [number]" - limit: "&7 Blok limiti: &e [number]" - count: "&7 Blok sayısı: &e [number]" - calculated: "&7 Hesaplanan değer: &e [number]" + id: " Blok ID: [id]" + value: " Blok değeri: [number]" + limit: " Blok limiti: [number]" + count: " Blok sayısı: [number]" + calculated: " Hesaplanan değer: [number]" value_blocks: - name: "&f&l Değeri Olan Tüm Bloklar" + name: " Değeri Olan Tüm Bloklar" description: |- - &7 Adada değeri olan - &7 tüm blokları göster. + Adada değeri olan + tüm blokları göster. all_blocks: - name: "&f&l Tüm Bloklar" + name: " Tüm Bloklar" description: |- - &7 Adadaki tüm - &7 blokları göster. + Adadaki tüm + blokları göster. above_sea_level: - name: "&f&l Deniz Seviyesi Üstü Bloklar" + name: " Deniz Seviyesi Üstü Bloklar" description: |- - &7 Sadece deniz - &7 seviyesi üstündeki - &7 blokları göster. + Sadece deniz + seviyesi üstündeki + blokları göster. underwater: - name: "&f&l Deniz Seviyesi Altı Bloklar" + name: " Deniz Seviyesi Altı Bloklar" description: |- - &7 Sadece deniz - &7 seviyesi altındaki - &7 blokları göster. + Sadece deniz + seviyesi altındaki + blokları göster. spawner: - name: "&f&l Spawner'lar" + name: " Spawner'lar" description: |- - &7 Sadece spawner'ları göster. - block-name: "&b Spawner" + Sadece spawner'ları göster. + block-name: " Spawner" filters: name: - name: "&f&l İsme Göre Sırala" + name: " İsme Göre Sırala" description: |- - &7 Tüm blokları isme göre sırala. + Tüm blokları isme göre sırala. value: - name: "&f&l Değere Göre Sırala" + name: " Değere Göre Sırala" description: |- - &7 Tüm blokları değerlerine göre sırala. + Tüm blokları değerlerine göre sırala. count: - name: "&f&l Sayıya Göre Sırala" + name: " Sayıya Göre Sırala" description: |- - &7 Tüm blokları sayılarına göre sırala. + Tüm blokları sayılarına göre sırala. value: - name: "&f&l [material]" + name: " [material]" description: |- [description] [value] [underwater] [limit] [id] - id: "&7 Blok ID: &e [id]" - value: "&7 Blok değeri: &e [number]" - underwater: "&7 Deniz seviyesi altı: &e [number]" - limit: "&7 Blok limiti: &e [number]" + id: " Blok ID: [id]" + value: " Blok değeri: [number]" + underwater: " Deniz seviyesi altı: [number]" + limit: " Blok limiti: [number]" previous: - name: "&f&l Önceki Sayfa" + name: " Önceki Sayfa" description: |- - &7 [number]. sayfaya geç + [number]. sayfaya geç next: - name: "&f&l Sonraki Sayfa" + name: " Sonraki Sayfa" description: |- - &7 [number]. sayfaya geç + [number]. sayfaya geç search: - name: "&f&l Ara" + name: " Ara" description: |- - &7 Belirli bir değer - &7 ara. - search: "&b Değer: [value]" + Belirli bir değer + ara. + search: " Değer: [value]" tips: - click-to-view: "&e Tıkla &7 görüntülemek için." - click-to-previous: "&e Tıkla &7 önceki sayfayı görüntülemek için." - click-to-next: "&e Tıkla &7 sonraki sayfayı görüntülemek için." - click-to-select: "&e Tıkla &7 seçmek için." - left-click-to-cycle-up: "&e Sol Tıkla &7 yukarı almak için." - right-click-to-cycle-down: "&e Sağ Tıkla &7 aşağı almak için." - left-click-to-change: "&e Sol Tıkla &7 düzenlemek için." - right-click-to-clear: "&e Sağ Tıkla &7 temizlemek için." - click-to-asc: "&e Tıkla &7 artan sırada sıralamak için." - click-to-desc: "&e Tıkla &7 azalan sırada sıralamak için." - click-to-warp: "&e Tıkla &7 ışınlanmak için." - click-to-visit: "&e Tıkla &7 ziyaret etmek için." - right-click-to-visit: "&e Sağ Tıkla &7 ziyaret etmek için." + click-to-view: " Tıkla görüntülemek için." + click-to-previous: " Tıkla önceki sayfayı görüntülemek için." + click-to-next: " Tıkla sonraki sayfayı görüntülemek için." + click-to-select: " Tıkla seçmek için." + left-click-to-cycle-up: " Sol Tıkla yukarı almak için." + right-click-to-cycle-down: " Sağ Tıkla aşağı almak için." + left-click-to-change: " Sol Tıkla düzenlemek için." + right-click-to-clear: " Sağ Tıkla temizlemek için." + click-to-asc: " Tıkla artan sırada sıralamak için." + click-to-desc: " Tıkla azalan sırada sıralamak için." + click-to-warp: " Tıkla ışınlanmak için." + click-to-visit: " Tıkla ziyaret etmek için." + right-click-to-visit: " Sağ Tıkla ziyaret etmek için." conversations: - prefix: "&l&6 [BentoBox]: &r" - no-data: "&c Blok raporunu görmek için level komutunu çalıştırın." + prefix: " [BentoBox]: " + no-data: " Blok raporunu görmek için level komutunu çalıştırın." cancel-string: iptal exit-string: iptal, çıkış, bırak - write-search: "&e Lütfen bir arama değeri girin. (Çıkmak için 'iptal' yazın)" - search-updated: "&a Arama değeri güncellendi." - cancelled: "&c Konuşma iptal edildi!" - no-value: "&c Bu eşyanın değeri yok." - unknown-item: "&c '[material]' oyunda mevcut değil." - value: "&7 '[material]' değeri: &e[value]" - value-underwater: "&7 '[material]' deniz seviyesi altı değeri: &e[value]" - empty-hand: "&c Elinde hiç blok yok" - you-have: "&7 Son sayımda [number] tanen vardı." - you-can-place: "&7 [number] adete kadar yerleştirebilirsin ve sayılırlar" + write-search: " Lütfen bir arama değeri girin. (Çıkmak için 'iptal' yazın)" + search-updated: " Arama değeri güncellendi." + cancelled: " Konuşma iptal edildi!" + no-value: " Bu eşyanın değeri yok." + unknown-item: " '[material]' oyunda mevcut değil." + value: " '[material]' değeri: [value]" + value-underwater: " '[material]' deniz seviyesi altı değeri: [value]" + empty-hand: " Elinde hiç blok yok" + you-have: " Son sayımda [number] tanen vardı." + you-can-place: " [number] adete kadar yerleştirebilirsin ve sayılırlar" diff --git a/src/main/resources/locales/uk.yml b/src/main/resources/locales/uk.yml index b23a2d3..85e6e1d 100644 --- a/src/main/resources/locales/uk.yml +++ b/src/main/resources/locales/uk.yml @@ -6,23 +6,23 @@ admin: sethandicap: parameters: " " description: встановити гандикап острова, як правило, рівень острова стартера - changed: "&a Початковий гандикап острова змінено з [number] на [new_number]." - invalid-level: "&c Недійсний гандикап. Використовуйте ціле число." + changed: " Початковий гандикап острова змінено з [number] на [new_number]." + invalid-level: " Недійсний гандикап. Використовуйте ціле число." levelstatus: description: показати, скільки островів у черзі на сканування - islands-in-queue: "&a Острови в черзі: [number]" + islands-in-queue: " Острови в черзі: [number]" top: description: показати першу десятку списку - unknown-world: "&c Невідомий світ!" - display: "&f[rank]. &a[name] &7- &b[level]" + unknown-world: " Невідомий світ!" + display: "[rank]. [name] - [level]" remove: description: видалити гравця з першої десятки parameters: "" stats: description: показати статистику островів на цьому сервері title: Статистика острова сервера - world: "&a [name]" - no-data: "&c Немає даних для обробки." + world: " [name]" + no-data: " Немає даних для обробки." average-level: 'Середній рівень острова: [number]' median-level: 'Середній рівень острова: [number]' mode-level: 'Рівень острова режиму: [number]' @@ -34,22 +34,22 @@ island: level: parameters: "[player]" description: обчисліть свій рівень острова або покажіть рівень [player] - calculating: "&a Розрахунок рівня..." - estimated-wait: "&a Приблизне очікування: [number] секунд" - in-queue: "&a Ви номер [number] у черзі" - island-level-is: "&a Рівень острова &b[level]" - required-points-to-next-level: "&a Прогрес рівня: &6 [progress]&b /&e [levelcost] &a балів" - deaths: "&c([number] смерті)" - cooldown: "&c Ви повинні зачекати &b[time] &c секунд, поки ви зможете зробити + calculating: " Розрахунок рівня..." + estimated-wait: " Приблизне очікування: [number] секунд" + in-queue: " Ви номер [number] у черзі" + island-level-is: " Рівень острова [level]" + required-points-to-next-level: " Прогрес рівня: [progress] / [levelcost] балів" + deaths: "([number] смерті)" + cooldown: " Ви повинні зачекати [time] секунд, поки ви зможете зробити це знову" - in-progress: "&6 Розрахунок рівня острова триває..." - time-out: "&c Розрахунок рівня тривав занадто довго. Будь-ласка спробуйте пізніше." + in-progress: " Розрахунок рівня острова триває..." + time-out: " Розрахунок рівня тривав занадто довго. Будь-ласка спробуйте пізніше." top: description: показати першу десятку gui-title: "& Десятка Кращих" - gui-heading: "&6[name]: &B[rank]" - island-level: "&b Рівень [level]" - warp-to: "&A Варп на острів [name]." + gui-heading: "[name]: [rank]" + island-level: " Рівень [level]" + warp-to: " Варп на острів [name]." detail: description: "показує деталі блоків вашого острова" level-details: @@ -57,10 +57,10 @@ island: spawners: Спавера underwater-blocks: Підводні блоки all-blocks: Всі блоки - no-island: "&c Немає острова!" + no-island: " Немає острова!" names-island: острів [name]. syntax: "[name] x [number]" - hint: "&c Запустіть рівень, щоб переглянути звіт про блокування" + hint: " Запустіть рівень, щоб переглянути звіт про блокування" level: commands: value: @@ -69,27 +69,27 @@ level: значення предмета в руках. gui: titles: - top: "&0&l Топ островів" - detail-panel: "&0&l острів [name]." - value-panel: "&0&l Значення блоку" + top: " Топ островів" + detail-panel: " острів [name]." + value-panel: " Значення блоку" buttons: island: - empty: "&f&l [name]. місце" - name: "&f&l [name]" + empty: " [name]. місце" + name: " [name]" description: |- [owner] [members] [place] [level] owners-island: Острів [player]. - owner: "&7&l Власник: &r&b [player]" - members-title: "&7&l Члени:" - member: "&b - [player]" + owner: " Власник: [player]" + members-title: " Члени:" + member: " - [player]" unknown: невідомий - place: "&7&o [number]. &r&7 місце" - level: "&7 Рівень: &o [number]" + place: " [number]. місце" + level: " Рівень: [number]" material: - name: "&f&l [number] x [material]" + name: " [number] x [material]" description: |- [description] [count] @@ -97,98 +97,98 @@ level: [calculated] [limit] [id] - id: "&7 Ідентифікатор блоку: &e [id]" - value: "&7 Значення блоку: &e [number]" - limit: "&7 Обмеження блоку: &e [number]" - count: "&7 Кількість блоків: &e [number]" - calculated: "&7 Розраховане значення: &e [number]" + id: " Ідентифікатор блоку: [id]" + value: " Значення блоку: [number]" + limit: " Обмеження блоку: [number]" + count: " Кількість блоків: [number]" + calculated: " Розраховане значення: [number]" value_blocks: - name: "&f&l Усі Блоки з Цінністю" + name: " Усі Блоки з Цінністю" description: |- - &7 Показати всі блоки - &7 з цінністю на острові. + Показати всі блоки + з цінністю на острові. all_blocks: - name: "&f&l Усі блоки" + name: " Усі блоки" description: |- - &7 Показати всі блоки - &7 на острові. + Показати всі блоки + на острові. above_sea_level: - name: "&f&l Блоки над рівнем моря" + name: " Блоки над рівнем моря" description: |- - &7 Показувати лише блоки - &7, які знаходяться над морем - &7 рівень. + Показувати лише блоки + , які знаходяться над морем + рівень. underwater: - name: "&f&l Блоки під рівнем моря" + name: " Блоки під рівнем моря" description: |- - &7 Показувати лише блоки - &7, які знаходяться нижче моря - &7 рівень. + Показувати лише блоки + , які знаходяться нижче моря + рівень. spawner: - name: "&f&l Спавнери" - description: "&7 Відображати лише спавнери." - block-name: "&b Спавнер" + name: " Спавнери" + description: " Відображати лише спавнери." + block-name: " Спавнер" filters: name: - name: "&f&l Сортувати за назвою" - description: "&7 Сортувати всі блоки за назвою." + name: " Сортувати за назвою" + description: " Сортувати всі блоки за назвою." value: - name: "&f&l Сортувати за значенням" - description: "&7 Сортувати всі блоки за їх значенням." + name: " Сортувати за значенням" + description: " Сортувати всі блоки за їх значенням." count: - name: "&f&l Сортувати за кількістю" - description: "&7 Відсортуйте всі блоки за їх кількістю." + name: " Сортувати за кількістю" + description: " Відсортуйте всі блоки за їх кількістю." value: - name: "&f&l [material]" + name: " [material]" description: |- [description] [value] [underwater] [limit] [id] - id: "&7 Ідентифікатор блоку: &e [id]" - value: "&7 Значення блоку: &e [number]" - underwater: "&7 Нижче рівня моря: &e [number]" - limit: "&7 Обмеження блоку: &e [number]" + id: " Ідентифікатор блоку: [id]" + value: " Значення блоку: [number]" + underwater: " Нижче рівня моря: [number]" + limit: " Обмеження блоку: [number]" previous: - name: "&f&l Попередня сторінка" - description: "&7 Перейти на сторінку [number]." + name: " Попередня сторінка" + description: " Перейти на сторінку [number]." next: - name: "&f&l Наступна сторінка" - description: "&7 Перейти на сторінку [number]." + name: " Наступна сторінка" + description: " Перейти на сторінку [number]." search: - name: "&f&l Пошук" + name: " Пошук" description: |- - &7 Пошук конкретного - &7 значення. - search: "&b Значення: [value]" + Пошук конкретного + значення. + search: " Значення: [value]" tips: - click-to-view: "&e Натисніть &7, щоб переглянути." - click-to-previous: "&e Натисніть &7, щоб переглянути попередню сторінку." - click-to-next: "&e Натисніть &7, щоб переглянути наступну сторінку." - click-to-select: "&e Натисніть &7, щоб вибрати." - left-click-to-cycle-up: "&e Клацніть лівою кнопкою миші &7, щоб перейти вгору." - right-click-to-cycle-down: "&e Клацніть правою кнопкою миші &7, щоб перейти + click-to-view: " Натисніть , щоб переглянути." + click-to-previous: " Натисніть , щоб переглянути попередню сторінку." + click-to-next: " Натисніть , щоб переглянути наступну сторінку." + click-to-select: " Натисніть , щоб вибрати." + left-click-to-cycle-up: " Клацніть лівою кнопкою миші , щоб перейти вгору." + right-click-to-cycle-down: " Клацніть правою кнопкою миші , щоб перейти вниз." - left-click-to-change: "&e Клацніть лівою кнопкою миші &7 для редагування." - right-click-to-clear: "&e Клацніть правою кнопкою миші &7, щоб очистити." - click-to-asc: "&e Клацніть &7, щоб відсортувати в порядку збільшення." - click-to-desc: "&e Клацніть &7, щоб відсортувати в порядку зменшення." - click-to-warp: "&e Натисніть &7, щоб деформувати." - click-to-visit: "&e Натисніть &7, щоб відвідати." - right-click-to-visit: "&e Клацніть правою кнопкою миші &7, щоб відвідати." + left-click-to-change: " Клацніть лівою кнопкою миші для редагування." + right-click-to-clear: " Клацніть правою кнопкою миші , щоб очистити." + click-to-asc: " Клацніть , щоб відсортувати в порядку збільшення." + click-to-desc: " Клацніть , щоб відсортувати в порядку зменшення." + click-to-warp: " Натисніть , щоб деформувати." + click-to-visit: " Натисніть , щоб відвідати." + right-click-to-visit: " Клацніть правою кнопкою миші , щоб відвідати." conversations: - prefix: "&l&6 [BentoBox]: &r" - no-data: "&c Запустіть рівень, щоб переглянути звіт про блокування." + prefix: " [BentoBox]: " + no-data: " Запустіть рівень, щоб переглянути звіт про блокування." cancel-string: cancel exit-string: cancel, exit, quit - write-search: "&e Введіть пошукове значення. (Напишіть 'cancel', щоб вийти)" - search-updated: "&a Значення пошуку оновлено." - cancelled: "&c Розмова скасована!" - no-value: "&c Цей предмет не має цінності." - unknown-item: "&c '[material]' не існує в грі." - value: "&7 Значення '[material]' таке: &e[value]" - value-underwater: "&7 Значення '[material]' нижче рівня моря: &e[value]" - empty-hand: "&c У вашій руці немає блоків" - you-have: "&7 У вас є [number] за останнім підрахунком." - you-can-place: "&7 Ви можете розмістити до [number] і вони будуть враховані" + write-search: " Введіть пошукове значення. (Напишіть 'cancel', щоб вийти)" + search-updated: " Значення пошуку оновлено." + cancelled: " Розмова скасована!" + no-value: " Цей предмет не має цінності." + unknown-item: " '[material]' не існує в грі." + value: " Значення '[material]' таке: [value]" + value-underwater: " Значення '[material]' нижче рівня моря: [value]" + empty-hand: " У вашій руці немає блоків" + you-have: " У вас є [number] за останнім підрахунком." + you-can-place: " Ви можете розмістити до [number] і вони будуть враховані" diff --git a/src/main/resources/locales/vi.yml b/src/main/resources/locales/vi.yml index bcdfccb..3ca0c6f 100644 --- a/src/main/resources/locales/vi.yml +++ b/src/main/resources/locales/vi.yml @@ -13,23 +13,23 @@ admin: ví dụ: +10 sẽ bỏ 10 cấp, 30 sẽ đặt handicap thành 30, -20 sẽ thêm 20 cấp - changed: '&a Handicap ban đầu của đảo đã thay đổi từ [number] thành [new_number].' - invalid-level: '&c Handicap không hợp lệ. Hãy dùng số nguyên.' + changed: ' Handicap ban đầu của đảo đã thay đổi từ [number] thành [new_number].' + invalid-level: ' Handicap không hợp lệ. Hãy dùng số nguyên.' levelstatus: description: xem bao nhiêu đảo đang trong hàng chờ được quét - islands-in-queue: '&a Đảo đang chờ: [number]' + islands-in-queue: ' Đảo đang chờ: [number]' top: description: xem bảng xếp hạng TOP 10 - unknown-world: '&c Thế giới không xác định!' - display: '&f[rank]. &a[name] &7- &b[level]' + unknown-world: ' Thế giới không xác định!' + display: '[rank]. [name] - [level]' remove: description: xoá người khỏi TOP 10 parameters: stats: description: "hiển thị thống kê đảo trên máy chủ này" title: "Thống Kê Đảo Máy Chủ" - world: "&a [name]" - no-data: "&c Không có dữ liệu để xử lý." + world: " [name]" + no-data: " Không có dữ liệu để xử lý." average-level: "Cấp đảo trung bình: [number]" median-level: "Cấp đảo trung vị: [number]" mode-level: "Cấp đảo phổ biến nhất: [number]" @@ -41,32 +41,32 @@ island: level: parameters: '[người chơi]' description: tính toán cấp đảo của bạn hoặc xem cấp đảo của [người chơi] - calculating: '&a Đang tính toán cấp đảo...' - estimated-wait: '&a Thời gian còn lại: [number] giây' - in-queue: '&a Bạn đang ở vị trí [number] trong hàng chờ' - island-level-is: '&a Cấp đảo là &b[level]' - required-points-to-next-level: '&a Tiến độ cấp: &6 [progress]&b /&e [levelcost] &a điểm' - deaths: '&c([number] lần chết)' - cooldown: '&c Bạn phải chờ &b[time] &c giây trước khi có thể làm điều đó' - in-progress: '&6 Đang tính toán cấp đảo...' - time-out: '&c Tính toán cấp đảo quá lâu. Vui lòng thử lại sau.' + calculating: ' Đang tính toán cấp đảo...' + estimated-wait: ' Thời gian còn lại: [number] giây' + in-queue: ' Bạn đang ở vị trí [number] trong hàng chờ' + island-level-is: ' Cấp đảo là [level]' + required-points-to-next-level: ' Tiến độ cấp: [progress] / [levelcost] điểm' + deaths: '([number] lần chết)' + cooldown: ' Bạn phải chờ [time] giây trước khi có thể làm điều đó' + in-progress: ' Đang tính toán cấp đảo...' + time-out: ' Tính toán cấp đảo quá lâu. Vui lòng thử lại sau.' detail: description: "hiển thị chi tiết các khối trên đảo của bạn" top: description: xem TOP 10 - gui-title: '&a TOP 10' - gui-heading: '&6[name]: &B[rank]' - island-level: '&b Cấp [level]' - warp-to: '&A Đang dịch chuyển đến đảo của [name]' + gui-title: ' TOP 10' + gui-heading: '[name]: [rank]' + island-level: ' Cấp [level]' + warp-to: ' Đang dịch chuyển đến đảo của [name]' level-details: above-sea-level-blocks: Khối Trên Mực Nước Biển spawners: Lồng Sinh Quái underwater-blocks: Khối Dưới Nước all-blocks: Toàn Bộ Khối - no-island: '&c Không có đảo!' + no-island: ' Không có đảo!' names-island: 'đảo của [name]' syntax: '[name] x [number]' - hint: '&c Chạy lệnh cấp để xem báo cáo khối' + hint: ' Chạy lệnh cấp để xem báo cáo khối' level: commands: value: @@ -74,27 +74,27 @@ level: description: hiển thị giá trị của các khối. Thêm 'hand' vào cuối để hiển thị giá trị của vật phẩm đang cầm. gui: titles: - top: "&0&l Top Đảo" - detail-panel: "&0&l Đảo của [name]" - value-panel: "&0&l Giá Trị Khối" + top: " Top Đảo" + detail-panel: " Đảo của [name]" + value-panel: " Giá Trị Khối" buttons: island: - empty: '&f&l Vị trí [name].' - name: '&f&l [name]' + empty: ' Vị trí [name].' + name: ' [name]' description: |- [owner] [members] [place] [level] owners-island: "Đảo của [player]" - owner: "&7&l Chủ: &r&b [player]" - members-title: "&7&l Thành viên:" - member: "&b - [player]" + owner: " Chủ: [player]" + members-title: " Thành viên:" + member: " - [player]" unknown: "không rõ" - place: "&7&o [number]. &r&7 vị trí" - level: "&7 Cấp: &o [number]" + place: " [number]. vị trí" + level: " Cấp: [number]" material: - name: "&f&l [number] x [material]" + name: " [number] x [material]" description: |- [description] [count] @@ -102,103 +102,103 @@ level: [calculated] [limit] [id] - id: "&7 ID khối: &e [id]" - value: "&7 Giá trị khối: &e [number]" - limit: "&7 Giới hạn khối: &e [number]" - count: "&7 Số lượng khối: &e [number]" - calculated: "&7 Giá trị tính toán: &e [number]" + id: " ID khối: [id]" + value: " Giá trị khối: [number]" + limit: " Giới hạn khối: [number]" + count: " Số lượng khối: [number]" + calculated: " Giá trị tính toán: [number]" value_blocks: - name: "&f&l Tất Cả Khối Có Giá Trị" + name: " Tất Cả Khối Có Giá Trị" description: |- - &7 Hiển thị tất cả khối - &7 có giá trị trên đảo. + Hiển thị tất cả khối + có giá trị trên đảo. all_blocks: - name: "&f&l Tất Cả Khối" + name: " Tất Cả Khối" description: |- - &7 Hiển thị tất cả khối - &7 trên đảo. + Hiển thị tất cả khối + trên đảo. above_sea_level: - name: "&f&l Khối Trên Mực Nước Biển" + name: " Khối Trên Mực Nước Biển" description: |- - &7 Chỉ hiển thị khối - &7 ở trên mực - &7 nước biển. + Chỉ hiển thị khối + ở trên mực + nước biển. underwater: - name: "&f&l Khối Dưới Mực Nước Biển" + name: " Khối Dưới Mực Nước Biển" description: |- - &7 Chỉ hiển thị khối - &7 ở dưới mực - &7 nước biển. + Chỉ hiển thị khối + ở dưới mực + nước biển. spawner: - name: "&f&l Lồng Sinh Quái" + name: " Lồng Sinh Quái" description: |- - &7 Chỉ hiển thị lồng sinh quái. - block-name: "&b Lồng Sinh Quái" + Chỉ hiển thị lồng sinh quái. + block-name: " Lồng Sinh Quái" filters: name: - name: "&f&l Sắp Xếp theo Tên" + name: " Sắp Xếp theo Tên" description: |- - &7 Sắp xếp tất cả khối theo tên. + Sắp xếp tất cả khối theo tên. value: - name: "&f&l Sắp Xếp theo Giá Trị" + name: " Sắp Xếp theo Giá Trị" description: |- - &7 Sắp xếp tất cả khối theo giá trị. + Sắp xếp tất cả khối theo giá trị. count: - name: "&f&l Sắp Xếp theo Số Lượng" + name: " Sắp Xếp theo Số Lượng" description: |- - &7 Sắp xếp tất cả khối theo số lượng. + Sắp xếp tất cả khối theo số lượng. value: - name: "&f&l [material]" + name: " [material]" description: |- [description] [value] [underwater] [limit] [id] - id: "&7 ID khối: &e [id]" - value: "&7 Giá trị khối: &e [number]" - underwater: "&7 Dưới mực nước biển: &e [number]" - limit: "&7 Giới hạn khối: &e [number]" + id: " ID khối: [id]" + value: " Giá trị khối: [number]" + underwater: " Dưới mực nước biển: [number]" + limit: " Giới hạn khối: [number]" previous: - name: "&f&l Trang Trước" + name: " Trang Trước" description: |- - &7 Chuyển đến trang [number] + Chuyển đến trang [number] next: - name: "&f&l Trang Tiếp" + name: " Trang Tiếp" description: |- - &7 Chuyển đến trang [number] + Chuyển đến trang [number] search: - name: "&f&l Tìm Kiếm" + name: " Tìm Kiếm" description: |- - &7 Tìm kiếm một giá trị - &7 cụ thể. - search: "&b Giá trị: [value]" + Tìm kiếm một giá trị + cụ thể. + search: " Giá trị: [value]" tips: - click-to-view: "&e Nhấp &7 để xem." - click-to-previous: "&e Nhấp &7 để xem trang trước." - click-to-next: "&e Nhấp &7 để xem trang tiếp." - click-to-select: "&e Nhấp &7 để chọn." - left-click-to-cycle-up: "&e Nhấp Trái &7 để lên." - right-click-to-cycle-down: "&e Nhấp Phải &7 để xuống." - left-click-to-change: "&e Nhấp Trái &7 để chỉnh sửa." - right-click-to-clear: "&e Nhấp Phải &7 để xóa." - click-to-asc: "&e Nhấp &7 để sắp xếp tăng dần." - click-to-desc: "&e Nhấp &7 để sắp xếp giảm dần." - click-to-warp: "&e Nhấp &7 để dịch chuyển." - click-to-visit: "&e Nhấp &7 để thăm." - right-click-to-visit: "&e Nhấp Phải &7 để thăm." + click-to-view: " Nhấp để xem." + click-to-previous: " Nhấp để xem trang trước." + click-to-next: " Nhấp để xem trang tiếp." + click-to-select: " Nhấp để chọn." + left-click-to-cycle-up: " Nhấp Trái để lên." + right-click-to-cycle-down: " Nhấp Phải để xuống." + left-click-to-change: " Nhấp Trái để chỉnh sửa." + right-click-to-clear: " Nhấp Phải để xóa." + click-to-asc: " Nhấp để sắp xếp tăng dần." + click-to-desc: " Nhấp để sắp xếp giảm dần." + click-to-warp: " Nhấp để dịch chuyển." + click-to-visit: " Nhấp để thăm." + right-click-to-visit: " Nhấp Phải để thăm." conversations: - prefix: "&l&6 [BentoBox]: &r" - no-data: "&c Chạy lệnh cấp để xem báo cáo khối." + prefix: " [BentoBox]: " + no-data: " Chạy lệnh cấp để xem báo cáo khối." cancel-string: hủy exit-string: hủy, thoát, bỏ - write-search: "&e Vui lòng nhập giá trị tìm kiếm. (Nhập 'hủy' để thoát)" - search-updated: "&a Giá trị tìm kiếm đã cập nhật." - cancelled: "&c Cuộc trò chuyện đã bị hủy!" - no-value: "&c Vật phẩm này không có giá trị." - unknown-item: "&c '[material]' không tồn tại trong trò chơi." - value: "&7 Giá trị của '[material]' là: &e[value]" - value-underwater: "&7 Giá trị của '[material]' dưới mực nước biển: &e[value]" - empty-hand: "&c Không có khối nào trên tay bạn" - you-have: "&7 Bạn có [number] lần đếm cuối cùng." - you-can-place: "&7 Bạn có thể đặt tối đa [number] và chúng sẽ được tính" + write-search: " Vui lòng nhập giá trị tìm kiếm. (Nhập 'hủy' để thoát)" + search-updated: " Giá trị tìm kiếm đã cập nhật." + cancelled: " Cuộc trò chuyện đã bị hủy!" + no-value: " Vật phẩm này không có giá trị." + unknown-item: " '[material]' không tồn tại trong trò chơi." + value: " Giá trị của '[material]' là: [value]" + value-underwater: " Giá trị của '[material]' dưới mực nước biển: [value]" + empty-hand: " Không có khối nào trên tay bạn" + you-have: " Bạn có [number] lần đếm cuối cùng." + you-can-place: " Bạn có thể đặt tối đa [number] và chúng sẽ được tính" diff --git a/src/main/resources/locales/zh-CN.yml b/src/main/resources/locales/zh-CN.yml index d4b17fc..cf7c8c1 100644 --- a/src/main/resources/locales/zh-CN.yml +++ b/src/main/resources/locales/zh-CN.yml @@ -5,23 +5,23 @@ admin: sethandicap: parameters: description: 设置偏差值, 通常用于抵消初始岛屿等级, 来保证岛屿等级从零开始. 实际岛屿等级 - = 最终的岛屿等级 - changed: '&a岛屿的偏差值从[number]更改为[new_number]' - invalid-level: '&c偏差值无效, 请使用整数' + changed: '岛屿的偏差值从[number]更改为[new_number]' + invalid-level: '偏差值无效, 请使用整数' levelstatus: description: 显示等级计算队列中的岛屿 - islands-in-queue: '&a列队中的岛屿: [number]' + islands-in-queue: '列队中的岛屿: [number]' top: description: 显示前十名 - unknown-world: '&c未知的世界!' - display: '&f[rank]. &a[name] &7- &b[level]' + unknown-world: '未知的世界!' + display: '[rank]. [name] - [level]' remove: description: 将玩家移出前十名 parameters: stats: description: 显示该服务器上岛屿的统计数据 title: 服务器岛屿数据 - world: '&a[name]' - no-data: '&c没有数据.' + world: '[name]' + no-data: '没有数据.' average-level: '平均岛屿等级: [number]' median-level: '中位数岛屿等级: [number]' mode-level: '众数岛屿等级: [number]' @@ -33,22 +33,22 @@ island: level: parameters: '[player]' description: 计算你或指定玩家[player]的岛屿等级 - calculating: '&a等级计算中...' - estimated-wait: '&a预计等待时间: [number]秒' - in-queue: '&a你处于队列中第[number]个' - island-level-is: '&a岛屿等级为: &b[level]' - required-points-to-next-level: '&a等级进度: &6 [progress]&b /&e [levelcost] &a点数' - deaths: '&c([number]次死亡)' - cooldown: '&c还需等待&b[time]&c秒才能再次使用该指令' - in-progress: '&6岛屿等级正在计算中...' - time-out: '&c等级计算超时, 请稍后再试' + calculating: '等级计算中...' + estimated-wait: '预计等待时间: [number]秒' + in-queue: '你处于队列中第[number]个' + island-level-is: '岛屿等级为: [level]' + required-points-to-next-level: '等级进度: [progress] / [levelcost] 点数' + deaths: '([number]次死亡)' + cooldown: '还需等待[time]秒才能再次使用该指令' + in-progress: '岛屿等级正在计算中...' + time-out: '等级计算超时, 请稍后再试' top: description: 显示前十名 - gui-title: '&a前十' - gui-heading: '&6[name]: &B[rank]' - island-level: '&b等级: [level]' - warp-to: '&a正在传送到[name]的岛屿' + gui-title: '前十' + gui-heading: '[name]: [rank]' + island-level: '等级: [level]' + warp-to: '正在传送到[name]的岛屿' detail: description: "显示你的岛屿方块详情" @@ -57,10 +57,10 @@ island: spawners: 刷怪笼 underwater-blocks: 水下的方块 all-blocks: 所有方块 - no-island: '&c没有岛屿!' + no-island: '没有岛屿!' names-island: '[name]的岛屿' syntax: '[name] x [number]' - hint: '&c运行level指令查看方块报告' + hint: '运行level指令查看方块报告' level: commands: @@ -69,27 +69,27 @@ level: description: 显示方块的价值. 在末尾添加'hand'可显示手中方块的价值 gui: titles: - top: '&0&l岛屿排行榜' - detail-panel: '&0&l[name]的岛屿' - value-panel: '&0&l方块价值' + top: '岛屿排行榜' + detail-panel: '[name]的岛屿' + value-panel: '方块价值' buttons: island: - empty: '&f&l第[name]名' - name: '&f&l[name]' + empty: '第[name]名' + name: '[name]' description: |- [owner] [members] [place] [level] owners-island: '[player]的岛屿' - owner: '&7&l岛主: &r&b[player]' - members-title: '&7&l成员: ' - member: '&b- [player]' + owner: '岛主: [player]' + members-title: '成员: ' + member: '- [player]' unknown: 未知 - place: '&7第&7&o[number]&r&7名' - level: '&7等级: &o[number]' + place: '[number]名' + level: '等级: [number]' material: - name: '&f&l [number] x [material]' + name: ' [number] x [material]' description: |- [description] [count] @@ -97,87 +97,87 @@ level: [calculated] [limit] [id] - id: '&7方块ID: &e[id]' - value: '&7方块价值: &e[number]' - limit: '&7方块限制: &e[number]' - count: '&7方块数量: &e[number]' - calculated: '&7计算值: &e[number]' + id: '方块ID: [id]' + value: '方块价值: [number]' + limit: '方块限制: [number]' + count: '方块数量: [number]' + calculated: '计算值: [number]' value_blocks: - name: '&f&l所有有价值的方块' + name: '所有有价值的方块' description: |- - &7 显示岛屿上所有 - &7 有价值的方块. + 显示岛屿上所有 + 有价值的方块. all_blocks: - name: '&f&l所有方块' - description: '&7显示岛屿上所有的方块' + name: '所有方块' + description: '显示岛屿上所有的方块' above_sea_level: - name: '&f&l海平面以上的方块' - description: '&7只显示所有海平面以上的方块' + name: '海平面以上的方块' + description: '只显示所有海平面以上的方块' underwater: - name: '&f&l海平面以下的方块' + name: '海平面以下的方块' description: 只显示所有海平面以下的方块 spawner: - name: '&f&l刷怪笼' - description: '&7只显示刷怪笼' - block-name: '&b 刷怪笼' + name: '刷怪笼' + description: '只显示刷怪笼' + block-name: ' 刷怪笼' filters: name: - name: '&f&l按名称排序' - description: '&7通过名称排序所有的方块' + name: '按名称排序' + description: '通过名称排序所有的方块' value: - name: '&f&l按价值排序' - description: '&7通过价值排序所有的方块' + name: '按价值排序' + description: '通过价值排序所有的方块' count: - name: '&f&l按数量排序' - description: '&7通过数量排序所有方块' + name: '按数量排序' + description: '通过数量排序所有方块' value: - name: '&f&l[material]' + name: '[material]' description: |- [description] [value] [underwater] [limit] [id] - id: '&7方块ID: &e[id]' - value: '&7方块价值: &e[number]' - underwater: '&7海平面以下方块的价值: &e[number]' - limit: '&7方块限制: &e[number]' + id: '方块ID: [id]' + value: '方块价值: [number]' + underwater: '海平面以下方块的价值: [number]' + limit: '方块限制: [number]' previous: - name: '&f&l上一页' - description: '&7切换到第[number]页' + name: '上一页' + description: '切换到第[number]页' next: - name: '&f&l下一页' - description: '&7切换到第[number]页' + name: '下一页' + description: '切换到第[number]页' search: - name: '&f&l搜索' - description: '&7搜索特定的内容' - search: '&b搜索值: [value]' + name: '搜索' + description: '搜索特定的内容' + search: '搜索值: [value]' tips: - click-to-view: '&e点击 &7查看' - click-to-previous: '&e点击 &7查看上一页' - click-to-next: '&e点击 &7查看下一页' - click-to-select: '&e点击 &7选择' - left-click-to-cycle-up: '&e左键 &7向上循环' - right-click-to-cycle-down: '&e右键 &7向下循环' - left-click-to-change: '&e左键 &7编辑' - right-click-to-clear: '&e右键 &7清除' - click-to-asc: '&e点击 &7以升序排序' - click-to-desc: '&e点击 &7以降序排序' - click-to-warp: '&e点击 &7去岛屿传送点' - click-to-visit: '&e点击 &7参观' - right-click-to-visit: '&e右键 &7查看' + click-to-view: '点击 查看' + click-to-previous: '点击 查看上一页' + click-to-next: '点击 查看下一页' + click-to-select: '点击 选择' + left-click-to-cycle-up: '左键 向上循环' + right-click-to-cycle-down: '右键 向下循环' + left-click-to-change: '左键 编辑' + right-click-to-clear: '右键 清除' + click-to-asc: '点击 以升序排序' + click-to-desc: '点击 以降序排序' + click-to-warp: '点击 去岛屿传送点' + click-to-visit: '点击 参观' + right-click-to-visit: '右键 查看' conversations: - prefix: '&l&6[BentoBox]: &r' - no-data: '&c运行level指令查看方块报告' + prefix: '[BentoBox]: ' + no-data: '运行level指令查看方块报告' cancel-string: cancel exit-string: cancel, exit, quit - write-search: '&e请输入要搜索的值. (输入''cancel''退出)' - search-updated: '&a搜索值已更新' - cancelled: '&c对话已取消' - no-value: '&c这件物品一文不值' - unknown-item: '&c物品''[material]''在游戏中不存在' - value: '&7物品''[material]''的价值: &e[value]' - value-underwater: '&7物品''[material]''在海平面以下的价值: &e[value]' - empty-hand: '&c你的手中没有拿着方块' - you-have: '&7 你上次统计时有[number]个.' - you-can-place: '&7 你最多可以放置[number]个并让它们被计算在内' + write-search: '请输入要搜索的值. (输入''cancel''退出)' + search-updated: '搜索值已更新' + cancelled: '对话已取消' + no-value: '这件物品一文不值' + unknown-item: '物品''[material]''在游戏中不存在' + value: '物品''[material]''的价值: [value]' + value-underwater: '物品''[material]''在海平面以下的价值: [value]' + empty-hand: '你的手中没有拿着方块' + you-have: ' 你上次统计时有[number]个.' + you-can-place: ' 你最多可以放置[number]个并让它们被计算在内' From 8346ae3d6d779cea936c3332cd7591dbf3d61d93 Mon Sep 17 00:00:00 2001 From: tastybento Date: Sat, 11 Apr 2026 07:36:06 -0700 Subject: [PATCH 25/33] Add block donation feature (#220) Players can permanently donate blocks to raise island level. - /island donate: opens chest-style GUI to drag blocks in - /island donate hand [amount]: quick donate from held item - ISLAND_BLOCK_DONATION flag (default: owner, configurable to member) - Donated points added to level calculation, persist across recalcs - DONATED tab in island detail panel - Donation audit log with timestamps and donor tracking - Admin level report extended with donated blocks section - Destructive action warnings on confirm button and GUI info - Backwards compatible: null-safe fields for legacy island data --- BLOCK_DONATION_PLAN.md | 128 +++++++ src/main/java/world/bentobox/level/Level.java | 18 + .../world/bentobox/level/LevelsManager.java | 39 ++ .../calculators/IslandLevelCalculator.java | 21 ++ .../bentobox/level/calculators/Results.java | 18 + .../level/commands/IslandDonateCommand.java | 134 +++++++ .../bentobox/level/objects/IslandLevels.java | 101 ++++++ .../bentobox/level/panels/DetailsPanel.java | 19 +- .../bentobox/level/panels/DonationPanel.java | 343 ++++++++++++++++++ src/main/resources/locales/en-US.yml | 8 +- src/main/resources/panels/detail_panel.yml | 11 + 11 files changed, 834 insertions(+), 6 deletions(-) create mode 100644 BLOCK_DONATION_PLAN.md create mode 100644 src/main/java/world/bentobox/level/commands/IslandDonateCommand.java create mode 100644 src/main/java/world/bentobox/level/panels/DonationPanel.java diff --git a/BLOCK_DONATION_PLAN.md b/BLOCK_DONATION_PLAN.md new file mode 100644 index 0000000..eb47f99 --- /dev/null +++ b/BLOCK_DONATION_PLAN.md @@ -0,0 +1,128 @@ +# Block Donation Feature - Implementation Plan + +**Branch:** `feature/block-donation` +**Issue:** https://github.com/BentoBoxWorld/Level/issues/220 +**Status:** Implemented - awaiting build verification + +## Problem + +Island level is calculated purely by scanning physical blocks. If a player removes blocks (to build elsewhere, or cleans up), their level drops. Players need a way to permanently "bank" block value that survives block removal. + +## Solution + +Players can **donate** blocks from their inventory to permanently raise their island level. Donated blocks are consumed (removed from inventory) and their point value is permanently recorded. This value persists across level recalculations since it's stored separately from scanned blocks. + +## Design Decisions + +- **GUI-based donation** via `/island donate` - opens a chest-style inventory where players drag blocks in, see a real-time point preview, and confirm/cancel +- **Quick hand donation** via `/island donate hand [amount]` - donates blocks held in hand for power users +- **Flag-controlled** - new `ISLAND_BLOCK_DONATION` protection flag, default rank = OWNER, configurable down to MEMBER +- **Irreversible** - once donated, blocks cannot be retrieved ("no take-backsies") +- **Auditable** - donation log with timestamps, donor UUID, material, count, and point value +- **Backwards compatible** - new fields in `IslandLevels` are null-safe; legacy records without donation fields load cleanly +- **Default enabled** - donations are allowed by default for this release + +## Files Created + +| File | Purpose | +|------|---------| +| `commands/IslandDonateCommand.java` | Player `/island donate` command with `hand` subcommand | +| `panels/DonationPanel.java` | Chest-style GUI for donating blocks | + +## Files Modified + +### 1. `IslandLevels.java` - Data Model + +Added `@Expose` fields with null-safe getters (backwards compatibility): +- `donatedBlocks: Map` - Material name to count +- `donatedPoints: Long` - Total point value of all donations +- `donationLog: List` - Audit trail +- `DonationRecord` - inner record with timestamp, donorUUID, material, count, points +- `addDonation()` - helper to record a donation + +### 2. `LevelsManager.java` - Donation API + +Added methods: +- `donateBlocks(island, donorUUID, material, count, points)` - records donation, saves async +- `getDonatedPoints(island)` - returns total donated points +- `getDonatedBlocks(island)` - returns the donated blocks map + +### 3. `IslandLevelCalculator.java` - Calculation Integration + +In `tidyUp()`, donated points are added to `rawBlockCount` (which is actually a point accumulator) after underwater multiplier and before death penalty. + +In `getReport()`, a "Donated blocks" section is appended listing all donated materials with their counts and point values. + +### 4. `Level.java` - Flag Registration & Command Registration + +- Registered `ISLAND_BLOCK_DONATION` flag (Protection type, default OWNER rank) +- Added `IslandDonateCommand` to player commands + +### 5. `DetailsPanel.java` - DONATED Tab + +Added `DONATED` to the `Tab` enum. In `updateFilters()`, the new tab reads from `levelsData.getDonatedBlocks()` and converts material names back to Material objects for display. + +### 6. `Results.java` - Donated Points Field + +Added `donatedPoints: AtomicLong` with getter/setter for inclusion in the report. + +### 7. `detail_panel.yml` - Panel Layout + +Added DONATED tab button at position 1:7 with HOPPER icon. + +### 8. `en-US.yml` - Locale Entries + +Added entries for: +- `protection.flags.ISLAND_BLOCK_DONATION.*` - flag name/description/hint +- `island.donate.*` - all command messages, GUI labels +- `level.gui.buttons.donated.*` - tab button in DetailsPanel + +## Level Calculation Flow (Updated) + +1. `Pipeliner` queues island for calculation +2. `IslandLevelCalculator` scans chunks, counts physical blocks (as point values) +3. In `tidyUp()`: + - Raw block points computed (physical blocks + underwater multiplier) + - **Donated points added to raw block points** <- NEW + - Death penalty applied + - Formula calculates level from total points + - Report generated (includes donated blocks section) <- NEW +4. `LevelsManager.setIslandResults()` persists results + - **Donated blocks/points are NOT overwritten** - they live in separate fields + +## GUI Design (DonationPanel) + +``` +Row 1: [border] [border] [border] [border] [info ] [border] [border] [border] [border] +Row 2: [border] [slot ] [slot ] [slot ] [slot ] [slot ] [slot ] [slot ] [border] +Row 3: [border] [slot ] [slot ] [slot ] [slot ] [slot ] [slot ] [slot ] [border] +Row 4: [border] [cancel] [border] [border] [preview] [border] [border] [border] [confirm] +``` + +- **Info pane** (slot 4): Shows current total donated points +- **Slots** (14 slots in rows 2-3): Drag blocks from inventory +- **Preview** (slot 31): Live point total of items in slots +- **Cancel** (slot 28, red glass): Returns all items +- **Confirm** (slot 34, green glass): Consumes items, records donation + +On GUI close without confirm -> items returned to player (safety). + +## Testing Checklist + +- [ ] `/island donate` opens GUI +- [ ] Drag blocks into GUI, preview updates +- [ ] Confirm consumes blocks and records points +- [ ] Cancel returns all blocks +- [ ] Close GUI without confirm returns blocks +- [ ] `/island donate hand` donates held blocks +- [ ] `/island donate hand 10` donates specific amount +- [ ] Non-block items rejected +- [ ] Zero-value blocks rejected +- [ ] Flag permission check (owner default, configurable) +- [ ] Must be on own island +- [ ] Donated points appear in level calculation +- [ ] Admin report shows donated blocks section +- [ ] DONATED tab in detail panel shows donated blocks +- [ ] Backwards compatibility: load island with no donation fields +- [ ] Multiple donations accumulate correctly +- [ ] Donation log records all entries with timestamps diff --git a/src/main/java/world/bentobox/level/Level.java b/src/main/java/world/bentobox/level/Level.java index ae91392..b674db7 100644 --- a/src/main/java/world/bentobox/level/Level.java +++ b/src/main/java/world/bentobox/level/Level.java @@ -7,6 +7,7 @@ import java.util.UUID; import org.bukkit.Bukkit; +import org.bukkit.Material; import org.bukkit.World; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; @@ -17,8 +18,10 @@ import world.bentobox.bentobox.api.addons.Addon; import world.bentobox.bentobox.api.addons.GameModeAddon; import world.bentobox.bentobox.api.configuration.Config; +import world.bentobox.bentobox.api.flags.Flag; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.Island; +import world.bentobox.bentobox.managers.RanksManager; import world.bentobox.bentobox.util.Util; import world.bentobox.level.calculators.Pipeliner; import world.bentobox.level.commands.AdminLevelCommand; @@ -27,6 +30,7 @@ import world.bentobox.level.commands.AdminStatsCommand; import world.bentobox.level.commands.AdminTopCommand; import world.bentobox.level.commands.IslandDetailCommand; +import world.bentobox.level.commands.IslandDonateCommand; import world.bentobox.level.commands.IslandLevelCommand; import world.bentobox.level.commands.IslandTopCommand; import world.bentobox.level.commands.IslandValueCommand; @@ -49,6 +53,16 @@ public class Level extends Addon { // The 10 in top ten public static final int TEN = 10; + /** + * Flag to control who can donate blocks to raise island level. + * Default: OWNER only. Can be extended down to MEMBER rank. + */ + public static final Flag BLOCK_DONATION = new Flag.Builder("ISLAND_BLOCK_DONATION", Material.HOPPER) + .type(Flag.Type.PROTECTION) + .defaultRank(RanksManager.OWNER_RANK) + .mode(Flag.Mode.BASIC) + .build(); + // Settings private ConfigSettings settings; private Config configObject = new Config<>(this, ConfigSettings.class); @@ -114,6 +128,9 @@ public void allLoaded() { hookPlugin("RoseStacker", this::hookRoseStackers); hookPlugin("UltimateStacker", this::hookUltimateStacker); + // Register the block donation flag + getPlugin().getFlagsManager().registerFlag(this, BLOCK_DONATION); + if (this.isEnabled()) { hookExtensions(); } @@ -250,6 +267,7 @@ private void registerCommands(GameModeAddon gm) { new IslandTopCommand(this, playerCmd); new IslandValueCommand(this, playerCmd); new IslandDetailCommand(this, playerCmd); + new IslandDonateCommand(this, playerCmd); }); } diff --git a/src/main/java/world/bentobox/level/LevelsManager.java b/src/main/java/world/bentobox/level/LevelsManager.java index 9b6d612..e45563c 100644 --- a/src/main/java/world/bentobox/level/LevelsManager.java +++ b/src/main/java/world/bentobox/level/LevelsManager.java @@ -542,4 +542,43 @@ public void deleteIsland(String uniqueId) { handler.deleteID(uniqueId); } + // ---- Block Donation Methods ---- + + /** + * Record a block donation for an island. Items should already be removed from the player's inventory. + * + * @param island the island receiving the donation + * @param donorUUID UUID of the donating player + * @param material the material name being donated + * @param count how many blocks + * @param points the point value of this donation + */ + public void donateBlocks(@NonNull Island island, @NonNull UUID donorUUID, @NonNull String material, int count, long points) { + IslandLevels ld = levelsCache.computeIfAbsent(island.getUniqueId(), IslandLevels::new); + ld.addDonation(donorUUID.toString(), material, count, points); + handler.saveObjectAsync(ld); + // Update the top ten to reflect the donation + addToTopTen(island, ld.getLevel()); + } + + /** + * Get the total donated points for an island. + * + * @param island the island + * @return total donated points + */ + public long getDonatedPoints(@NonNull Island island) { + return getLevelsData(island).getDonatedPoints(); + } + + /** + * Get the donated blocks map for an island. + * + * @param island the island + * @return map of material name to count + */ + public Map getDonatedBlocks(@NonNull Island island) { + return getLevelsData(island).getDonatedBlocks(); + } + } diff --git a/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java b/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java index a7425eb..d669703 100644 --- a/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java +++ b/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java @@ -287,6 +287,22 @@ private List getReport() { + " blocks (max " + limit + explain); } reportLines.add(LINE_BREAK); + // Donated blocks section + if (results.donatedPoints.get() > 0) { + reportLines.add("Donated blocks (permanent contributions):"); + reportLines.add("Total donated points = " + String.format("%,d", results.donatedPoints.get())); + Map donatedBlocks = addon.getManager().getDonatedBlocks(island); + donatedBlocks.entrySet().stream() + .sorted(Map.Entry.comparingByValue().reversed()) + .forEach(entry -> { + Integer value = addon.getBlockConfig().getBlockValues().getOrDefault(entry.getKey().toLowerCase(java.util.Locale.ENGLISH), 0); + long totalValue = (long) value * entry.getValue(); + reportLines.add(" " + Util.prettifyText(entry.getKey()) + " x " + + String.format("%,d", entry.getValue()) + + " = " + String.format("%,d", totalValue) + " points"); + }); + reportLines.add(LINE_BREAK); + } return reportLines; } @@ -701,6 +717,11 @@ public void tidyUp() { results.rawBlockCount .addAndGet((long) (results.underWaterBlockCount.get() * addon.getSettings().getUnderWaterMultiplier())); + // Add donated block points (permanent contributions that persist across recalculations) + long donatedPoints = addon.getManager().getDonatedPoints(island); + results.rawBlockCount.addAndGet(donatedPoints); + results.donatedPoints.set(donatedPoints); + // Set the death penalty if (this.addon.getSettings().isSumTeamDeaths()) { for (UUID uuid : this.island.getMemberSet()) { diff --git a/src/main/java/world/bentobox/level/calculators/Results.java b/src/main/java/world/bentobox/level/calculators/Results.java index db8124c..01c0c0a 100644 --- a/src/main/java/world/bentobox/level/calculators/Results.java +++ b/src/main/java/world/bentobox/level/calculators/Results.java @@ -54,6 +54,10 @@ public enum Result { * Total points before any death penalties */ AtomicLong totalPoints = new AtomicLong(0); + /** + * Points contributed via block donation (permanent) + */ + AtomicLong donatedPoints = new AtomicLong(0); final Result state; public Results(Result state) { @@ -179,4 +183,18 @@ public void setInitialCount(Long count) { this.initialCount.set(count); } + /** + * @return the donated points + */ + public long getDonatedPoints() { + return donatedPoints.get(); + } + + /** + * @param points the donated points to set + */ + public void setDonatedPoints(long points) { + this.donatedPoints.set(points); + } + } diff --git a/src/main/java/world/bentobox/level/commands/IslandDonateCommand.java b/src/main/java/world/bentobox/level/commands/IslandDonateCommand.java new file mode 100644 index 0000000..93f13ee --- /dev/null +++ b/src/main/java/world/bentobox/level/commands/IslandDonateCommand.java @@ -0,0 +1,134 @@ +package world.bentobox.level.commands; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +import world.bentobox.bentobox.api.commands.CompositeCommand; +import world.bentobox.bentobox.api.localization.TextVariables; +import world.bentobox.bentobox.api.user.User; +import world.bentobox.bentobox.database.objects.Island; +import world.bentobox.level.Level; +import world.bentobox.level.panels.DonationPanel; +import world.bentobox.level.util.Utils; + +/** + * Command: /island donate [hand [amount]] + * Opens a donation GUI or donates blocks from hand. + * + * @author tastybento + */ +public class IslandDonateCommand extends CompositeCommand { + + private final Level addon; + + public IslandDonateCommand(Level addon, CompositeCommand parent) { + super(parent, "donate"); + this.addon = addon; + } + + @Override + public void setup() { + this.setPermission("island.donate"); + this.setOnlyPlayer(true); + this.setParametersHelp("island.donate.parameters"); + this.setDescription("island.donate.description"); + } + + @Override + public boolean execute(User user, String label, List args) { + // Check the player is on an island they are part of + Island island = addon.getIslands().getIsland(getWorld(), user); + if (island == null) { + user.sendMessage("general.errors.no-island"); + return false; + } + + // Check the player is on their island + if (!island.onIsland(user.getLocation())) { + user.sendMessage("island.donate.must-be-on-island"); + return false; + } + + // Check flag permission + if (!island.isAllowed(user, Level.BLOCK_DONATION)) { + user.sendMessage("island.donate.no-permission"); + return false; + } + + // Handle "hand" subcommand + if (!args.isEmpty() && "hand".equalsIgnoreCase(args.get(0))) { + return handleHandDonation(user, island, args); + } + + // No args - open GUI + DonationPanel.openPanel(addon, getWorld(), user, island); + return true; + } + + /** + * Handle the /island donate hand [amount] subcommand. + */ + private boolean handleHandDonation(User user, Island island, List args) { + ItemStack hand = user.getPlayer().getInventory().getItemInMainHand(); + if (hand.getType().isAir() || !hand.getType().isBlock()) { + user.sendMessage("island.donate.hand.not-block"); + return false; + } + + Material material = hand.getType(); + Integer blockValue = addon.getBlockConfig().getValue(getWorld(), material); + if (blockValue == null || blockValue <= 0) { + user.sendMessage("island.donate.no-value"); + return false; + } + + // Determine amount + int amount = hand.getAmount(); + if (args.size() > 1) { + try { + amount = Integer.parseInt(args.get(1)); + if (amount < 1) { + user.sendMessage("island.donate.invalid-amount"); + return false; + } + amount = Math.min(amount, hand.getAmount()); + } catch (NumberFormatException e) { + user.sendMessage("island.donate.invalid-amount"); + return false; + } + } + + // Calculate points + long points = (long) amount * blockValue; + + // Remove items from hand + if (amount >= hand.getAmount()) { + user.getPlayer().getInventory().setItemInMainHand(null); + } else { + hand.setAmount(hand.getAmount() - amount); + } + + // Record the donation + addon.getManager().donateBlocks(island, user.getUniqueId(), material.name(), amount, points); + + // Notify the player + user.sendMessage("island.donate.hand.success", + TextVariables.NUMBER, String.valueOf(amount), + "[material]", Utils.prettifyObject(material, user), + "[points]", String.valueOf(points)); + + return true; + } + + @Override + public Optional> tabComplete(User user, String alias, List args) { + if (args.size() == 1) { + return Optional.of(List.of("hand")); + } + return Optional.of(new ArrayList<>()); + } +} diff --git a/src/main/java/world/bentobox/level/objects/IslandLevels.java b/src/main/java/world/bentobox/level/objects/IslandLevels.java index 3666ea6..b15bb69 100644 --- a/src/main/java/world/bentobox/level/objects/IslandLevels.java +++ b/src/main/java/world/bentobox/level/objects/IslandLevels.java @@ -1,6 +1,8 @@ package world.bentobox.level.objects; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Locale; import java.util.Map; @@ -74,6 +76,28 @@ public class IslandLevels implements DataObject { @Expose private Map mdCount; + /** + * Donated blocks - blocks permanently contributed to island level. + * Key is the material name (String), value is the count donated. + * Null-safe for backwards compatibility with legacy data. + */ + @Expose + private Map donatedBlocks; + + /** + * Total point value of all donated blocks. + * Null-safe for backwards compatibility. + */ + @Expose + private Long donatedPoints; + + /** + * Audit log of all donations made to this island. + * Null-safe for backwards compatibility. + */ + @Expose + private List donationLog; + /** * Constructor for new island * @param islandUUID - island UUID @@ -251,6 +275,83 @@ public void setInitialCount(Long initialCount) { this.initialCount = initialCount; } + // ---- Donation fields (null-safe for backwards compatibility) ---- + + /** + * Record for tracking individual donations for audit purposes. + * @param timestamp when the donation was made (epoch millis) + * @param donorUUID UUID of the player who donated + * @param material the material name that was donated + * @param count how many blocks were donated + * @param points the point value at time of donation + */ + public record DonationRecord(long timestamp, String donorUUID, String material, int count, long points) { + } + + /** + * Get the donated blocks map. + * @return map of material name to count, never null + */ + public Map getDonatedBlocks() { + if (donatedBlocks == null) { + donatedBlocks = new HashMap<>(); + } + return donatedBlocks; + } + + /** + * @param donatedBlocks the donatedBlocks to set + */ + public void setDonatedBlocks(Map donatedBlocks) { + this.donatedBlocks = donatedBlocks; + } + + /** + * Get the total donated points for this island. + * @return donated points, never null + */ + public long getDonatedPoints() { + return donatedPoints == null ? 0L : donatedPoints; + } + + /** + * @param donatedPoints the donatedPoints to set + */ + public void setDonatedPoints(long donatedPoints) { + this.donatedPoints = donatedPoints; + } + + /** + * Get the donation audit log. + * @return list of donation records, never null + */ + public List getDonationLog() { + if (donationLog == null) { + donationLog = new ArrayList<>(); + } + return donationLog; + } + + /** + * @param donationLog the donationLog to set + */ + public void setDonationLog(List donationLog) { + this.donationLog = donationLog; + } + + /** + * Add a donation to this island's records. + * @param donorUUID UUID of the player donating + * @param material the material being donated + * @param count how many blocks + * @param points the point value of this donation + */ + public void addDonation(String donorUUID, String material, int count, long points) { + getDonatedBlocks().merge(material, count, Integer::sum); + this.donatedPoints = getDonatedPoints() + points; + getDonationLog().add(new DonationRecord(System.currentTimeMillis(), donorUUID, material, count, points)); + } + /** * @return the initialLevel * @deprecated only used for backwards compatibility. Use {@link #getInitialCount()} instead diff --git a/src/main/java/world/bentobox/level/panels/DetailsPanel.java b/src/main/java/world/bentobox/level/panels/DetailsPanel.java index 3bcca04..d19769b 100644 --- a/src/main/java/world/bentobox/level/panels/DetailsPanel.java +++ b/src/main/java/world/bentobox/level/panels/DetailsPanel.java @@ -61,7 +61,11 @@ private enum Tab { /** * Spawner Tab. */ - SPAWNER + SPAWNER, + /** + * Donated blocks Tab. + */ + DONATED } /** @@ -210,7 +214,18 @@ private void build() { private void updateFilters() { this.blockCountList.clear(); - if (this.activeTab == Tab.SPAWNER) { + if (this.activeTab == Tab.DONATED) { + // Show donated blocks + Map donated = this.levelsData.getDonatedBlocks(); + for (Map.Entry entry : donated.entrySet()) { + if (entry.getValue() > 0) { + // Try to convert to Material for display + Material mat = Material.matchMaterial(entry.getKey()); + Object key = mat != null ? mat : entry.getKey(); + this.blockCountList.add(new BlockRec(key, entry.getValue(), 0)); + } + } + } else if (this.activeTab == Tab.SPAWNER) { if (this.addon.getBlockConfig().isNotHiddenBlock(Material.SPAWNER)) { Map spawnerCountMap = new EnumMap<>(EntityType.class); diff --git a/src/main/java/world/bentobox/level/panels/DonationPanel.java b/src/main/java/world/bentobox/level/panels/DonationPanel.java new file mode 100644 index 0000000..95acfca --- /dev/null +++ b/src/main/java/world/bentobox/level/panels/DonationPanel.java @@ -0,0 +1,343 @@ +package world.bentobox.level.panels; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.HandlerList; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.inventory.InventoryDragEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import world.bentobox.bentobox.api.localization.TextVariables; +import world.bentobox.bentobox.api.user.User; +import world.bentobox.bentobox.database.objects.Island; +import world.bentobox.level.Level; +import world.bentobox.level.util.Utils; + +/** + * Donation GUI panel. Players drag blocks from their inventory into the donation + * slots. A confirm button finalizes the donation; cancel returns items. + * + * @author tastybento + */ +public class DonationPanel implements Listener { + + private static final int SIZE = 36; // 4 rows + private static final String TITLE_REF = "island.donate.gui-title"; + + // Slot layout + private static final int INFO_SLOT = 4; + private static final int CANCEL_SLOT = 28; + private static final int PREVIEW_SLOT = 31; + private static final int CONFIRM_SLOT = 34; + + // Donation slots: rows 2 and 3, columns 2-8 (slots 10-16, 19-25) + private static final int[] DONATION_SLOTS = { + 10, 11, 12, 13, 14, 15, 16, + 19, 20, 21, 22, 23, 24, 25 + }; + + // Border slots: everything else + private static final Material BORDER_MATERIAL = Material.BLACK_STAINED_GLASS_PANE; + + private final Level addon; + private final World world; + private final User user; + private final Island island; + private final Inventory inventory; + private boolean confirmed = false; + + private DonationPanel(Level addon, World world, User user, Island island) { + this.addon = addon; + this.world = world; + this.user = user; + this.island = island; + + // Create the inventory + String title = user.getTranslation(TITLE_REF); + this.inventory = Bukkit.createInventory(null, SIZE, title); + + // Fill borders + ItemStack border = createNamedItem(BORDER_MATERIAL, " "); + for (int i = 0; i < SIZE; i++) { + inventory.setItem(i, border); + } + + // Clear donation slots + for (int slot : DONATION_SLOTS) { + inventory.setItem(slot, null); + } + + // Info pane + long currentDonated = addon.getManager().getDonatedPoints(island); + ItemStack info = createNamedItem(Material.BOOK, + user.getTranslation("island.donate.gui-info", + "[points]", String.valueOf(currentDonated))); + inventory.setItem(INFO_SLOT, info); + + // Cancel button + ItemStack cancel = createNamedItem(Material.RED_STAINED_GLASS_PANE, + user.getTranslation("island.donate.cancel")); + inventory.setItem(CANCEL_SLOT, cancel); + + // Preview pane (starts at 0) + updatePreview(); + + // Confirm button + ItemStack confirm = createNamedItem(Material.LIME_STAINED_GLASS_PANE, + user.getTranslation("island.donate.confirm")); + inventory.setItem(CONFIRM_SLOT, confirm); + + // Register listener + Bukkit.getPluginManager().registerEvents(this, addon.getPlugin()); + } + + private void build() { + user.getPlayer().openInventory(inventory); + } + + /** + * Calculate the total point value of items in the donation slots. + */ + private long calculateDonationValue() { + long total = 0; + for (int slot : DONATION_SLOTS) { + ItemStack item = inventory.getItem(slot); + if (item != null && !item.getType().isAir()) { + Integer value = addon.getBlockConfig().getValue(world, item.getType()); + if (value != null && value > 0) { + total += (long) value * item.getAmount(); + } + } + } + return total; + } + + /** + * Update the preview pane to show current point value. + */ + private void updatePreview() { + long points = calculateDonationValue(); + ItemStack preview = createNamedItem(Material.EXPERIENCE_BOTTLE, + user.getTranslation("island.donate.preview", + "[points]", String.valueOf(points))); + inventory.setItem(PREVIEW_SLOT, preview); + } + + /** + * Check if a slot is a donation slot. + */ + private boolean isDonationSlot(int slot) { + for (int s : DONATION_SLOTS) { + if (s == slot) return true; + } + return false; + } + + /** + * Process the donation - consume items and record them. + */ + private void processDonation() { + Map donations = new HashMap<>(); + long totalPoints = 0; + + for (int slot : DONATION_SLOTS) { + ItemStack item = inventory.getItem(slot); + if (item != null && !item.getType().isAir()) { + Material mat = item.getType(); + Integer value = addon.getBlockConfig().getValue(world, mat); + if (value != null && value > 0) { + int count = item.getAmount(); + long points = (long) value * count; + donations.merge(mat.name(), count, Integer::sum); + totalPoints += points; + // Record each material type as a separate donation log entry + addon.getManager().donateBlocks(island, user.getUniqueId(), mat.name(), count, points); + } + // Clear the slot - items are consumed + inventory.setItem(slot, null); + } + } + + if (donations.isEmpty()) { + user.sendMessage("island.donate.empty"); + } else { + user.sendMessage("island.donate.success", + "[points]", String.valueOf(totalPoints), + TextVariables.NUMBER, String.valueOf(donations.values().stream().mapToInt(Integer::intValue).sum())); + } + } + + /** + * Return all items in donation slots to the player. + */ + private void returnItems() { + Player player = user.getPlayer(); + for (int slot : DONATION_SLOTS) { + ItemStack item = inventory.getItem(slot); + if (item != null && !item.getType().isAir()) { + Map overflow = player.getInventory().addItem(item); + // Drop any items that don't fit + overflow.values().forEach(drop -> player.getWorld().dropItemNaturally(player.getLocation(), drop)); + inventory.setItem(slot, null); + } + } + } + + private void cleanup() { + HandlerList.unregisterAll(this); + } + + // ---- Event Handlers ---- + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) { + if (!event.getInventory().equals(inventory)) return; + if (!(event.getWhoClicked() instanceof Player player)) return; + if (!player.getUniqueId().equals(user.getUniqueId())) return; + + int slot = event.getRawSlot(); + + // Clicks in the player's own inventory are allowed (for picking up items) + if (slot >= SIZE) { + // But if they shift-click into the donation panel, only allow into donation slots + if (event.isShiftClick()) { + event.setCancelled(true); + // Manually handle shift-click to a donation slot + ItemStack clicked = event.getCurrentItem(); + if (clicked != null && !clicked.getType().isAir() && clicked.getType().isBlock()) { + for (int ds : DONATION_SLOTS) { + ItemStack existing = inventory.getItem(ds); + if (existing == null || existing.getType().isAir()) { + inventory.setItem(ds, clicked.clone()); + clicked.setAmount(0); + break; + } else if (existing.isSimilar(clicked) && existing.getAmount() < existing.getMaxStackSize()) { + int space = existing.getMaxStackSize() - existing.getAmount(); + int transfer = Math.min(space, clicked.getAmount()); + existing.setAmount(existing.getAmount() + transfer); + clicked.setAmount(clicked.getAmount() - transfer); + if (clicked.getAmount() <= 0) break; + } + } + } + updatePreview(); + } + return; + } + + // Cancel button + if (slot == CANCEL_SLOT) { + event.setCancelled(true); + returnItems(); + confirmed = true; // prevent double-return on close + player.closeInventory(); + user.sendMessage("island.donate.cancelled"); + return; + } + + // Confirm button + if (slot == CONFIRM_SLOT) { + event.setCancelled(true); + if (calculateDonationValue() <= 0) { + user.sendMessage("island.donate.empty"); + return; + } + confirmed = true; + processDonation(); + player.closeInventory(); + return; + } + + // Donation slots - allow placing/removing items + if (isDonationSlot(slot)) { + // Allow the click but validate on next tick + Bukkit.getScheduler().runTask(addon.getPlugin(), () -> { + // Validate: only blocks with value are allowed + ItemStack inSlot = inventory.getItem(slot); + if (inSlot != null && !inSlot.getType().isAir()) { + if (!inSlot.getType().isBlock()) { + // Return non-block item to player + player.getInventory().addItem(inSlot); + inventory.setItem(slot, null); + user.sendMessage("island.donate.hand.not-block"); + } + } + updatePreview(); + }); + return; + } + + // All other slots (borders, info, preview) - cancel + event.setCancelled(true); + } + + @EventHandler + public void onInventoryDrag(InventoryDragEvent event) { + if (!event.getInventory().equals(inventory)) return; + // Only allow drags into donation slots + for (int slot : event.getRawSlots()) { + if (slot < SIZE && !isDonationSlot(slot)) { + event.setCancelled(true); + return; + } + } + // Update preview after drag + Bukkit.getScheduler().runTask(addon.getPlugin(), this::updatePreview); + } + + @EventHandler + public void onInventoryClose(InventoryCloseEvent event) { + if (!event.getInventory().equals(inventory)) return; + if (!(event.getPlayer() instanceof Player player)) return; + if (!player.getUniqueId().equals(user.getUniqueId())) return; + + // Return items if not confirmed + if (!confirmed) { + returnItems(); + } + cleanup(); + } + + // ---- Helper Methods ---- + + /** + * Create a named item. If the text contains '|' characters, the first segment + * becomes the display name and the rest become lore lines. + */ + private static ItemStack createNamedItem(Material material, String text) { + ItemStack item = new ItemStack(material); + ItemMeta meta = item.getItemMeta(); + if (meta != null) { + String[] parts = text.split("\\|"); + meta.setDisplayName(parts[0]); + if (parts.length > 1) { + meta.setLore(Arrays.asList(Arrays.copyOfRange(parts, 1, parts.length))); + } + item.setItemMeta(meta); + } + return item; + } + + /** + * Open the donation panel for a player. + * + * @param addon Level addon + * @param world world context + * @param user the user opening the panel + * @param island the island to donate to + */ + public static void openPanel(Level addon, World world, User user, Island island) { + new DonationPanel(addon, world, user, island).build(); + } +} diff --git a/src/main/resources/locales/en-US.yml b/src/main/resources/locales/en-US.yml index 1f91d39..7db9537 100755 --- a/src/main/resources/locales/en-US.yml +++ b/src/main/resources/locales/en-US.yml @@ -61,11 +61,11 @@ island: empty: " There are no valid blocks to donate." cancelled: " Donation cancelled. Items returned." success: " Donated [number] blocks for [points] points! These points are permanent." - confirm: " Confirm Donation" - cancel: " Cancel" + confirm: " Confirm - Items will be DESTROYED!" + cancel: " Cancel - Return Items" gui-title: " Donate Blocks" - gui-info: " Currently donated: [points] points" - preview: " Points to add: [points]" + gui-info: " Donate blocks to your island| Currently donated: [points] points| Warning: donated items are| destroyed and cannot be returned!" + preview: " Points to add: [points]| These items will be destroyed!" hand: success: " Donated [number] x [material] for [points] permanent points!" not-block: " You must be holding a placeable block to donate." diff --git a/src/main/resources/panels/detail_panel.yml b/src/main/resources/panels/detail_panel.yml index 2099847..434bb2f 100644 --- a/src/main/resources/panels/detail_panel.yml +++ b/src/main/resources/panels/detail_panel.yml @@ -100,6 +100,17 @@ detail_panel: view: click-type: unknown tooltip: level.gui.tips.click-to-view + 7: + icon: HOPPER + title: level.gui.buttons.donated.name + description: level.gui.buttons.donated.description + data: + type: TAB + tab: DONATED + actions: + view: + click-type: unknown + tooltip: level.gui.tips.click-to-view 9: # You can create multiple buttons. By default it is one. icon: IRON_TRAPDOOR From 9a4ec0f24cdddbf10a1310927dfd9bc2e76488ab Mon Sep 17 00:00:00 2001 From: tastybento Date: Sat, 11 Apr 2026 08:12:12 -0700 Subject: [PATCH 26/33] Sync locales with new donation strings and document panel upgrade caveat Adds the new donation feature strings (island.donate, ISLAND_BLOCK_DONATION flag, donated tab button) to all non-English locales using English text as placeholder for translators. Notes in CLAUDE.md that on-disk panel templates are not overwritten on upgrade so release notes must call out panel changes. Co-Authored-By: Claude Opus 4.6 --- BLOCK_DONATION_PLAN.md | 128 ---------- CLAUDE.md | 91 +++++++ src/main/resources/locales/cs.yml | 32 +++ src/main/resources/locales/de.yml | 32 +++ src/main/resources/locales/en-US.yml | 230 +++++++++--------- src/main/resources/locales/es.yml | 32 +++ src/main/resources/locales/fr.yml | 32 +++ src/main/resources/locales/hu.yml | 32 +++ src/main/resources/locales/id.yml | 32 +++ src/main/resources/locales/ko.yml | 32 +++ src/main/resources/locales/lv.yml | 32 +++ src/main/resources/locales/nl.yml | 32 +++ src/main/resources/locales/pl.yml | 32 +++ src/main/resources/locales/pt.yml | 32 +++ src/main/resources/locales/ru.yml | 32 +++ src/main/resources/locales/tr.yml | 32 +++ src/main/resources/locales/uk.yml | 32 +++ src/main/resources/locales/vi.yml | 32 +++ src/main/resources/locales/zh-CN.yml | 32 +++ .../java/world/bentobox/level/LevelTest.java | 2 +- 20 files changed, 719 insertions(+), 244 deletions(-) delete mode 100644 BLOCK_DONATION_PLAN.md diff --git a/BLOCK_DONATION_PLAN.md b/BLOCK_DONATION_PLAN.md deleted file mode 100644 index eb47f99..0000000 --- a/BLOCK_DONATION_PLAN.md +++ /dev/null @@ -1,128 +0,0 @@ -# Block Donation Feature - Implementation Plan - -**Branch:** `feature/block-donation` -**Issue:** https://github.com/BentoBoxWorld/Level/issues/220 -**Status:** Implemented - awaiting build verification - -## Problem - -Island level is calculated purely by scanning physical blocks. If a player removes blocks (to build elsewhere, or cleans up), their level drops. Players need a way to permanently "bank" block value that survives block removal. - -## Solution - -Players can **donate** blocks from their inventory to permanently raise their island level. Donated blocks are consumed (removed from inventory) and their point value is permanently recorded. This value persists across level recalculations since it's stored separately from scanned blocks. - -## Design Decisions - -- **GUI-based donation** via `/island donate` - opens a chest-style inventory where players drag blocks in, see a real-time point preview, and confirm/cancel -- **Quick hand donation** via `/island donate hand [amount]` - donates blocks held in hand for power users -- **Flag-controlled** - new `ISLAND_BLOCK_DONATION` protection flag, default rank = OWNER, configurable down to MEMBER -- **Irreversible** - once donated, blocks cannot be retrieved ("no take-backsies") -- **Auditable** - donation log with timestamps, donor UUID, material, count, and point value -- **Backwards compatible** - new fields in `IslandLevels` are null-safe; legacy records without donation fields load cleanly -- **Default enabled** - donations are allowed by default for this release - -## Files Created - -| File | Purpose | -|------|---------| -| `commands/IslandDonateCommand.java` | Player `/island donate` command with `hand` subcommand | -| `panels/DonationPanel.java` | Chest-style GUI for donating blocks | - -## Files Modified - -### 1. `IslandLevels.java` - Data Model - -Added `@Expose` fields with null-safe getters (backwards compatibility): -- `donatedBlocks: Map` - Material name to count -- `donatedPoints: Long` - Total point value of all donations -- `donationLog: List` - Audit trail -- `DonationRecord` - inner record with timestamp, donorUUID, material, count, points -- `addDonation()` - helper to record a donation - -### 2. `LevelsManager.java` - Donation API - -Added methods: -- `donateBlocks(island, donorUUID, material, count, points)` - records donation, saves async -- `getDonatedPoints(island)` - returns total donated points -- `getDonatedBlocks(island)` - returns the donated blocks map - -### 3. `IslandLevelCalculator.java` - Calculation Integration - -In `tidyUp()`, donated points are added to `rawBlockCount` (which is actually a point accumulator) after underwater multiplier and before death penalty. - -In `getReport()`, a "Donated blocks" section is appended listing all donated materials with their counts and point values. - -### 4. `Level.java` - Flag Registration & Command Registration - -- Registered `ISLAND_BLOCK_DONATION` flag (Protection type, default OWNER rank) -- Added `IslandDonateCommand` to player commands - -### 5. `DetailsPanel.java` - DONATED Tab - -Added `DONATED` to the `Tab` enum. In `updateFilters()`, the new tab reads from `levelsData.getDonatedBlocks()` and converts material names back to Material objects for display. - -### 6. `Results.java` - Donated Points Field - -Added `donatedPoints: AtomicLong` with getter/setter for inclusion in the report. - -### 7. `detail_panel.yml` - Panel Layout - -Added DONATED tab button at position 1:7 with HOPPER icon. - -### 8. `en-US.yml` - Locale Entries - -Added entries for: -- `protection.flags.ISLAND_BLOCK_DONATION.*` - flag name/description/hint -- `island.donate.*` - all command messages, GUI labels -- `level.gui.buttons.donated.*` - tab button in DetailsPanel - -## Level Calculation Flow (Updated) - -1. `Pipeliner` queues island for calculation -2. `IslandLevelCalculator` scans chunks, counts physical blocks (as point values) -3. In `tidyUp()`: - - Raw block points computed (physical blocks + underwater multiplier) - - **Donated points added to raw block points** <- NEW - - Death penalty applied - - Formula calculates level from total points - - Report generated (includes donated blocks section) <- NEW -4. `LevelsManager.setIslandResults()` persists results - - **Donated blocks/points are NOT overwritten** - they live in separate fields - -## GUI Design (DonationPanel) - -``` -Row 1: [border] [border] [border] [border] [info ] [border] [border] [border] [border] -Row 2: [border] [slot ] [slot ] [slot ] [slot ] [slot ] [slot ] [slot ] [border] -Row 3: [border] [slot ] [slot ] [slot ] [slot ] [slot ] [slot ] [slot ] [border] -Row 4: [border] [cancel] [border] [border] [preview] [border] [border] [border] [confirm] -``` - -- **Info pane** (slot 4): Shows current total donated points -- **Slots** (14 slots in rows 2-3): Drag blocks from inventory -- **Preview** (slot 31): Live point total of items in slots -- **Cancel** (slot 28, red glass): Returns all items -- **Confirm** (slot 34, green glass): Consumes items, records donation - -On GUI close without confirm -> items returned to player (safety). - -## Testing Checklist - -- [ ] `/island donate` opens GUI -- [ ] Drag blocks into GUI, preview updates -- [ ] Confirm consumes blocks and records points -- [ ] Cancel returns all blocks -- [ ] Close GUI without confirm returns blocks -- [ ] `/island donate hand` donates held blocks -- [ ] `/island donate hand 10` donates specific amount -- [ ] Non-block items rejected -- [ ] Zero-value blocks rejected -- [ ] Flag permission check (owner default, configurable) -- [ ] Must be on own island -- [ ] Donated points appear in level calculation -- [ ] Admin report shows donated blocks section -- [ ] DONATED tab in detail panel shows donated blocks -- [ ] Backwards compatibility: load island with no donation fields -- [ ] Multiple donations accumulate correctly -- [ ] Donation log records all entries with timestamps diff --git a/CLAUDE.md b/CLAUDE.md index 8bb5bd9..a57ba96 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -89,8 +89,99 @@ JaCoCo coverage reports are generated during `mvn verify`. | `locales/` | `src/main/resources/locales/` | Translation strings | | `panels/` | `src/main/resources/panels/` | GUI layout definitions | +**Panel template upgrades:** Files under `panels/` are copied to the addon's data folder (`plugins/BentoBox/addons/Level/panels/`) on first run and are **not** overwritten on upgrade. If a release modifies a panel template (new tabs, buttons, slots, etc.), the release notes must instruct users to delete the affected on-disk panel file so it regenerates — otherwise existing servers will silently keep the old layout. + ## Code Conventions - Null safety via Eclipse JDT annotations (`@NonNull`, `@Nullable`) — honour these on public APIs - BentoBox framework patterns: `CompositeCommand` for commands, `@ConfigEntry`/`@ConfigComment` for config, `@StoreAt` for database objects - Pre- and post-events (`IslandPreLevelEvent`, `IslandLevelCalculatedEvent`) follow BentoBox's cancellable event pattern — fire both when adding new calculation triggers + +## Dependency Source Lookup + +When you need to inspect source code for a dependency (e.g., BentoBox, addons): + +1. **Check local Maven repo first**: `~/.m2/repository/` — sources jars are named `*-sources.jar` +2. **Check the workspace**: Look for sibling directories or Git submodules that may contain the dependency as a local project (e.g., `../bentoBox`, `../addon-*`) +3. **Check Maven local cache for already-extracted sources** before downloading anything +4. Only download a jar or fetch from the internet if the above steps yield nothing useful + +Prefer reading `.java` source files directly from a local Git clone over decompiling or extracting a jar. + +In general, the latest version of BentoBox should be targeted. + +## Project Layout + +Related projects are checked out as siblings under `~/git/`: + +**Core:** +- `bentobox/` — core BentoBox framework + +**Game modes:** +- `addon-acidisland/` — AcidIsland game mode +- `addon-bskyblock/` — BSkyBlock game mode +- `Boxed/` — Boxed game mode (expandable box area) +- `CaveBlock/` — CaveBlock game mode +- `OneBlock/` — AOneBlock game mode +- `SkyGrid/` — SkyGrid game mode +- `RaftMode/` — Raft survival game mode +- `StrangerRealms/` — StrangerRealms game mode +- `Brix/` — plot game mode +- `parkour/` — Parkour game mode +- `poseidon/` — Poseidon game mode +- `gg/` — gg game mode + +**Addons:** +- `addon-level/` — island level calculation +- `addon-challenges/` — challenges system +- `addon-welcomewarpsigns/` — warp signs +- `addon-limits/` — block/entity limits +- `addon-invSwitcher/` / `invSwitcher/` — inventory switcher +- `addon-biomes/` / `Biomes/` — biomes management +- `Bank/` — island bank +- `Border/` — world border for islands +- `Chat/` — island chat +- `CheckMeOut/` — island submission/voting +- `ControlPanel/` — game mode control panel +- `Converter/` — ASkyBlock to BSkyBlock converter +- `DimensionalTrees/` — dimension-specific trees +- `discordwebhook/` — Discord integration +- `Downloads/` — BentoBox downloads site +- `DragonFights/` — per-island ender dragon fights +- `ExtraMobs/` — additional mob spawning rules +- `FarmersDance/` — twerking crop growth +- `GravityFlux/` — gravity addon +- `Greenhouses-addon/` — greenhouse biomes +- `IslandFly/` — island flight permission +- `IslandRankup/` — island rankup system +- `Likes/` — island likes/dislikes +- `Limits/` — block/entity limits +- `lost-sheep/` — lost sheep adventure +- `MagicCobblestoneGenerator/` — custom cobblestone generator +- `PortalStart/` — portal-based island start +- `pp/` — pp addon +- `Regionerator/` — region management +- `Residence/` — residence addon +- `TopBlock/` — top ten for OneBlock +- `TwerkingForTrees/` — twerking tree growth +- `Upgrades/` — island upgrades (Vault) +- `Visit/` — island visiting +- `weblink/` — web link addon +- `CrowdBound/` — CrowdBound addon + +**Data packs:** +- `BoxedDataPack/` — advancement datapack for Boxed + +**Documentation & tools:** +- `docs/` — main documentation site +- `docs-chinese/` — Chinese documentation +- `docs-french/` — French documentation +- `BentoBoxWorld.github.io/` — GitHub Pages site +- `website/` — website +- `translation-tool/` — translation tool + +Check these for source before any network fetch. + +## Key Dependencies (source locations) + +- `world.bentobox:bentobox` → `~/git/bentobox/src/` diff --git a/src/main/resources/locales/cs.yml b/src/main/resources/locales/cs.yml index 9ec10f1..d5b8ff8 100644 --- a/src/main/resources/locales/cs.yml +++ b/src/main/resources/locales/cs.yml @@ -46,6 +46,24 @@ island: cooldown: 'Musíš čekat [time] sekund, než můžeš příkaz znovu použít' in-progress: ' Probíhá výpočet úrovně ostrova ...' time-out: ' Výpočet úrovně trval příliš dlouho. Zkuste to prosím znovu později.' + donate: + parameters: "[hand [amount]]" + description: "donate blocks to permanently raise island level" + must-be-on-island: "You must be on your island to donate blocks." + no-permission: "You do not have permission to donate blocks on this island." + no-value: "That block has no level value." + invalid-amount: "Invalid amount. Use a positive number." + empty: "There are no valid blocks to donate." + cancelled: "Donation cancelled. Items returned." + success: "Donated [number] blocks for [points]points! These points are permanent." + confirm: "Confirm - Items will be DESTROYED!" + cancel: "Cancel - Return Items" + gui-title: "Donate Blocks" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + preview: "Points to add: [points]|These items will be destroyed!" + hand: + success: "Donated [number] x [material] for [points]permanent points!" + not-block: "You must be holding a placeable block to donate." detail: description: "zobrazit podrobnosti o blocích vašeho ostrova" top: @@ -63,6 +81,15 @@ island: names-island: '[name]''s Island' syntax: '[name] x [number]' hint: ' Spustit úroveň a zobrazit zprávu bloku' +protection: + flags: + ISLAND_BLOCK_DONATION: + description: |- + Toggle who can donate + blocks to raise island level. + name: Block Donation + hint: Block donation not allowed + level: commands: value: @@ -131,6 +158,11 @@ level: name: ' Spawners' description: ' Displej pouze tření.' block-name: ' Spawner' + donated: + name: "Donated Blocks" + description: |- + Display blocks permanently + donated to island level. filters: name: name: ' Sort by Name' diff --git a/src/main/resources/locales/de.yml b/src/main/resources/locales/de.yml index 0cfa409..a058cbc 100644 --- a/src/main/resources/locales/de.yml +++ b/src/main/resources/locales/de.yml @@ -47,6 +47,24 @@ island: cooldown: " Du musst [time] Sekunden warten, bevor du das erneut machen kannst." in-progress: " Insel-Level-Berechnung läuft..." time-out: " Die Level-Berechnung hat zu lange gedauert. Bitte versuche es später erneut." + donate: + parameters: "[hand [amount]]" + description: "donate blocks to permanently raise island level" + must-be-on-island: "You must be on your island to donate blocks." + no-permission: "You do not have permission to donate blocks on this island." + no-value: "That block has no level value." + invalid-amount: "Invalid amount. Use a positive number." + empty: "There are no valid blocks to donate." + cancelled: "Donation cancelled. Items returned." + success: "Donated [number] blocks for [points]points! These points are permanent." + confirm: "Confirm - Items will be DESTROYED!" + cancel: "Cancel - Return Items" + gui-title: "Donate Blocks" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + preview: "Points to add: [points]|These items will be destroyed!" + hand: + success: "Donated [number] x [material] for [points]permanent points!" + not-block: "You must be holding a placeable block to donate." detail: description: "zeigt Details der Blöcke deiner Insel" top: @@ -64,6 +82,15 @@ island: names-island: "[name]'s Insel" syntax: "[name] x [number]" hint: " Führe level aus, um den Block-Bericht zu sehen" +protection: + flags: + ISLAND_BLOCK_DONATION: + description: |- + Toggle who can donate + blocks to raise island level. + name: Block Donation + hint: Block donation not allowed + level: commands: value: @@ -131,6 +158,11 @@ level: description: |- Zeige nur Spawner. block-name: " Spawner" + donated: + name: "Donated Blocks" + description: |- + Display blocks permanently + donated to island level. filters: name: name: " Nach Name sortieren" diff --git a/src/main/resources/locales/en-US.yml b/src/main/resources/locales/en-US.yml index 7db9537..ce897c5 100755 --- a/src/main/resources/locales/en-US.yml +++ b/src/main/resources/locales/en-US.yml @@ -8,20 +8,20 @@ admin: parameters: "" description: "calculate the island level for player" sethandicap: - parameters: [+/-] + parameters: [+/-] description: | set or change the island *handicap* e.g. +10 will remove 10 levels, 30 will set handicap to 30, -20 will add 20 levels - changed: " Initial island handicap changed from [number] to [new_number]." - invalid-level: " Invalid handicap. Use an integer." + changed: "Initial island handicap changed from [number] to [new_number]." + invalid-level: "Invalid handicap. Use an integer." levelstatus: description: "show how many islands are in the queue for scanning" - islands-in-queue: " Islands in queue: [number]" + islands-in-queue: "Islands in queue: [number]" top: description: "show the top ten list" - unknown-world: " Unknown world!" + unknown-world: "Unknown world!" display: "[rank]. [name] - [level]" remove: description: "remove player from Top Ten" @@ -29,8 +29,8 @@ admin: stats: description: "show stats on islands on this server" title: "Server Island Stats" - world: " [name]" - no-data: " No data to process." + world: "[name]" + no-data: "No data to process." average-level: "Average Island Level: [number]" median-level: "Median Island Level: [number]" mode-level: "Mode Island Level: [number]" @@ -42,51 +42,51 @@ island: level: parameters: "[player]" description: "calculate your island level or show the level of [player]" - calculating: " Calculating level..." - estimated-wait: " Estimated wait: [number] seconds" - in-queue: " You are number [number] in the queue" - island-level-is: " Island level is [level]" - required-points-to-next-level: " Level progress: [progress] / [levelcost] points" - deaths: " ([number] deaths)" - cooldown: " You must wait [time] seconds until you can do that again" - in-progress: " Island level calculation is in progress..." - time-out: " The level calculation took too long. Please try again later." + calculating: "Calculating level..." + estimated-wait: "Estimated wait: [number] seconds" + in-queue: "You are number [number] in the queue" + island-level-is: "Island level is [level]" + required-points-to-next-level: "Level progress: [progress]/[levelcost] points" + deaths: "([number] deaths)" + cooldown: "You must wait [time] seconds until you can do that again" + in-progress: "Island level calculation is in progress..." + time-out: "The level calculation took too long. Please try again later." donate: parameters: "[hand [amount]]" description: "donate blocks to permanently raise island level" - must-be-on-island: " You must be on your island to donate blocks." - no-permission: " You do not have permission to donate blocks on this island." - no-value: " That block has no level value." - invalid-amount: " Invalid amount. Use a positive number." - empty: " There are no valid blocks to donate." - cancelled: " Donation cancelled. Items returned." - success: " Donated [number] blocks for [points] points! These points are permanent." - confirm: " Confirm - Items will be DESTROYED!" - cancel: " Cancel - Return Items" - gui-title: " Donate Blocks" - gui-info: " Donate blocks to your island| Currently donated: [points] points| Warning: donated items are| destroyed and cannot be returned!" - preview: " Points to add: [points]| These items will be destroyed!" + must-be-on-island: "You must be on your island to donate blocks." + no-permission: "You do not have permission to donate blocks on this island." + no-value: "That block has no level value." + invalid-amount: "Invalid amount. Use a positive number." + empty: "There are no valid blocks to donate." + cancelled: "Donation cancelled. Items returned." + success: "Donated [number] blocks for [points]points! These points are permanent." + confirm: "Confirm - Items will be DESTROYED!" + cancel: "Cancel - Return Items" + gui-title: "Donate Blocks" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + preview: "Points to add: [points]|These items will be destroyed!" hand: - success: " Donated [number] x [material] for [points] permanent points!" - not-block: " You must be holding a placeable block to donate." + success: "Donated [number] x [material] for [points]permanent points!" + not-block: "You must be holding a placeable block to donate." detail: description: "shows detail of your island blocks" top: description: "show the Top Ten" - gui-title: " Top Ten" + gui-title: "Top Ten" gui-heading: "[name]: [rank]" - island-level: " Level [level]" - warp-to: " Warping to [name]'s island" + island-level: "Level [level]" + warp-to: "Warping to [name]'s island" level-details: above-sea-level-blocks: "Above Sea Level Blocks" spawners: "Spawners" underwater-blocks: "Underwater Blocks" all-blocks: "All Blocks" - no-island: " No island!" + no-island: "No island!" names-island: "[name]'s island" syntax: "[name] x [number]" - hint: " Run level to see the block report" + hint: "Run level to see the block report" protection: flags: @@ -104,13 +104,13 @@ level: description: "shows the value of blocks. Add 'hand' at the end to display value for item in hand." gui: titles: - top: " Top Islands" - detail-panel: " [name]'s island" - value-panel: " Block Values" + top: "Top Islands" + detail-panel: "[name]'s island" + value-panel: "Block Values" buttons: island: - empty: ' [name]. place' - name: ' [name]' + empty: '[name]. place' + name: '[name]' description: |- [owner] [members] @@ -119,19 +119,19 @@ level: # Text that is replacing [name] if island do not have a name owners-island: "[player]'s Island" # Text for [owner] in description. - owner: " Owner: [player]" + owner: "Owner: [player]" # Title before listing members for [members] in description - members-title: " Members:" + members-title: "Members:" # List each member under the title for [members] in description - member: " - [player]" + member: "- [player]" # Name of unknown player. unknown: "unknown" # Section for parsing [place] - place: " [number]. place" + place: "[number]. place" # Section for parsing [level] - level: " Level: [number]" + level: "Level: [number]" material: - name: " [number] x [material]" + name: "[number] x [material]" description: |- [description] [count] @@ -139,122 +139,122 @@ level: [calculated] [limit] [id] - id: " Block id: [id]" - value: " Block value: [number]" - limit: " Block limit: [number]" - count: " Number of blocks: [number]" - calculated: " Calculated value: [number]" + id: "Block id: [id]" + value: "Block value: [number]" + limit: "Block limit: [number]" + count: "Number of blocks: [number]" + calculated: "Calculated value: [number]" value_blocks: - name: " All Blocks With Value" + name: "All Blocks With Value" description: |- - Display all blocks - with value on island. + Display all blocks + with value on island. all_blocks: - name: " All Blocks" + name: "All Blocks" description: |- - Display all blocks - on island. + Display all blocks + on island. above_sea_level: - name: " Blocks Above Sea Level" + name: "Blocks Above Sea Level" description: |- - Display only blocks - that are above sea - level. + Display only blocks + that are above sea + level. underwater: - name: " Blocks Under Sea level" + name: "Blocks Under Sea level" description: |- - Display only blocks - that are bellow sea - level. + Display only blocks + that are bellow sea + level. spawner: - name: " Spawners" + name: "Spawners" description: |- - Display only spawners. - block-name: " Spawner" + Display only spawners. + block-name: "Spawner" donated: - name: " Donated Blocks" + name: "Donated Blocks" description: |- - Display blocks permanently - donated to island level. + Display blocks permanently + donated to island level. filters: name: - name: " Sort by Name" + name: "Sort by Name" description: |- - Sort all blocks by name. + Sort all blocks by name. value: - name: " Sort by Value" + name: "Sort by Value" description: |- - Sort all blocks by their value. + Sort all blocks by their value. count: - name: " Sort by Count" + name: "Sort by Count" description: |- - Sort all blocks by their amount. + Sort all blocks by their amount. value: - name: " [material]" + name: "[material]" description: |- [description] [value] [underwater] [limit] [id] - id: " Block id: [id]" - value: " Block value: [number]" - underwater: " Bellow sea level: [number]" - limit: " Block limit: [number]" + id: "Block id: [id]" + value: "Block value: [number]" + underwater: "Bellow sea level: [number]" + limit: "Block limit: [number]" # Button that is used in multi-page GUIs which allows to return to previous page. previous: - name: " Previous Page" + name: "Previous Page" description: |- - Switch to [number] page + Switch to [number] page # Button that is used in multi-page GUIs which allows to go to next page. next: - name: " Next Page" + name: "Next Page" description: |- - Switch to [number] page + Switch to [number] page search: - name: " Search" + name: "Search" description: |- - Search for a specific - value. - search: " Value: [value]" + Search for a specific + value. + search: "Value: [value]" tips: - click-to-view: " Click to view." - click-to-previous: " Click to view previous page." - click-to-next: " Click to view next page." - click-to-select: " Click to select." - left-click-to-cycle-up: " Left Click to cycle up." - right-click-to-cycle-down: " Right Click to cycle down." - left-click-to-change: " Left Click to edit." - right-click-to-clear: " Right Click to clear." - click-to-asc: " Click to sort in increasing order." - click-to-desc: " Click to sort in decreasing order." - click-to-warp: " Click to warp." - click-to-visit: " Click to visit." - right-click-to-visit: " Right Click to visit." + click-to-view: "Click to view." + click-to-previous: "Click to view previous page." + click-to-next: "Click to view next page." + click-to-select: "Click to select." + left-click-to-cycle-up: "Left Click to cycle up." + right-click-to-cycle-down: "Right Click to cycle down." + left-click-to-change: "Left Click to edit." + right-click-to-clear: "Right Click to clear." + click-to-asc: "Click to sort in increasing order." + click-to-desc: "Click to sort in decreasing order." + click-to-warp: "Click to warp." + click-to-visit: "Click to visit." + right-click-to-visit: "Right Click to visit." conversations: # Prefix for messages that are send from server. - prefix: " [BentoBox]: " - no-data: " Run level to see the block report." + prefix: "[BentoBox]: " + no-data: "Run level to see the block report." # String that allows to cancel conversation. (can be only one) cancel-string: "cancel" # List of strings that allows to exit conversation. (separated with ,) exit-string: "cancel, exit, quit" # Message that asks for search value input. - write-search: " Please enter a search value. (Write 'cancel' to exit)" + write-search: "Please enter a search value. (Write 'cancel' to exit)" # Message that appears after updating search value. - search-updated: " Search value updated." + search-updated: "Search value updated." # Message that is sent to user when conversation is cancelled. - cancelled: " Conversation cancelled!" + cancelled: "Conversation cancelled!" # Message that is sent to user when given material does not have any value. - no-value: " That item has no value." + no-value: "That item has no value." # Message that is sent to user when requested material does not exist. - unknown-item: " The '[material]' does not exist in game." + unknown-item: "The '[material]' does not exist in game." # Messages that is sent to user when requesting value for a specific material. - value: " The value of '[material]' is: [value]" - value-underwater: " The value of '[material]' below sea-level: [value]" + value: "The value of '[material]' is: [value]" + value-underwater: "The value of '[material]' below sea-level: [value]" # Message that is sent to user when he does not hold any items in hand. - empty-hand: " There are no blocks in your hand" + empty-hand: "There are no blocks in your hand" # Message when showing how many have been placed of a block - you-have: " You have [number] at last count." + you-have: "You have [number] at last count." # Message about the limit - you-can-place: " You can place up to [number] and have them count" + you-can-place: "You can place up to [number] and have them count" diff --git a/src/main/resources/locales/es.yml b/src/main/resources/locales/es.yml index c03165d..9947438 100644 --- a/src/main/resources/locales/es.yml +++ b/src/main/resources/locales/es.yml @@ -44,6 +44,24 @@ island: cooldown: "Debes esperar [time] segundos para poder volver a hacer esto." in-progress: "El Calculo del nivel de la islas está en progreso..." time-out: "El calculo del nivel de la isla está tardando. Intente más tarde." + donate: + parameters: "[hand [amount]]" + description: "donate blocks to permanently raise island level" + must-be-on-island: "You must be on your island to donate blocks." + no-permission: "You do not have permission to donate blocks on this island." + no-value: "That block has no level value." + invalid-amount: "Invalid amount. Use a positive number." + empty: "There are no valid blocks to donate." + cancelled: "Donation cancelled. Items returned." + success: "Donated [number] blocks for [points]points! These points are permanent." + confirm: "Confirm - Items will be DESTROYED!" + cancel: "Cancel - Return Items" + gui-title: "Donate Blocks" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + preview: "Points to add: [points]|These items will be destroyed!" + hand: + success: "Donated [number] x [material] for [points]permanent points!" + not-block: "You must be holding a placeable block to donate." detail: description: "muestra el detalle de los bloques de tu isla" top: @@ -61,6 +79,15 @@ island: names-island: Isla de [name] syntax: "[name] x [number]" hint: "Escriba /level para ver el recuento de bloques" +protection: + flags: + ISLAND_BLOCK_DONATION: + description: |- + Toggle who can donate + blocks to raise island level. + name: Block Donation + hint: Block donation not allowed + level: commands: value: @@ -128,6 +155,11 @@ level: name: "Spawners" description: "Mostrar solo spawners." block-name: " Spawner" + donated: + name: "Donated Blocks" + description: |- + Display blocks permanently + donated to island level. filters: name: name: "Ordenar por nombre" diff --git a/src/main/resources/locales/fr.yml b/src/main/resources/locales/fr.yml index 5448165..eee3f42 100644 --- a/src/main/resources/locales/fr.yml +++ b/src/main/resources/locales/fr.yml @@ -46,6 +46,24 @@ island: in-progress: " Le calcul du niveau de l'île est en cours ..." time-out: " Le calcul du niveau a pris trop de temps. Veuillez réessayer plus tard." + donate: + parameters: "[hand [amount]]" + description: "donate blocks to permanently raise island level" + must-be-on-island: "You must be on your island to donate blocks." + no-permission: "You do not have permission to donate blocks on this island." + no-value: "That block has no level value." + invalid-amount: "Invalid amount. Use a positive number." + empty: "There are no valid blocks to donate." + cancelled: "Donation cancelled. Items returned." + success: "Donated [number] blocks for [points]points! These points are permanent." + confirm: "Confirm - Items will be DESTROYED!" + cancel: "Cancel - Return Items" + gui-title: "Donate Blocks" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + preview: "Points to add: [points]|These items will be destroyed!" + hand: + success: "Donated [number] x [material] for [points]permanent points!" + not-block: "You must be holding a placeable block to donate." top: description: affiche le top 10 gui-title: "Top 10" @@ -63,6 +81,15 @@ island: names-island: île de [name] syntax: "[name] x [number]" hint: " Exécuter level pour voir le rapport des blocs" +protection: + flags: + ISLAND_BLOCK_DONATION: + description: |- + Toggle who can donate + blocks to raise island level. + name: Block Donation + hint: Block donation not allowed + level: commands: value: @@ -130,6 +157,11 @@ level: name: " Spawners" description: " Afficher uniquement les spawners." block-name: " Spawner" + donated: + name: "Donated Blocks" + description: |- + Display blocks permanently + donated to island level. filters: name: name: " STrier par nom" diff --git a/src/main/resources/locales/hu.yml b/src/main/resources/locales/hu.yml index 5f3a0a7..61a0a1f 100644 --- a/src/main/resources/locales/hu.yml +++ b/src/main/resources/locales/hu.yml @@ -47,6 +47,24 @@ island: cooldown: "Várnod kell [time] másodpercet, hogy újra használhasd." in-progress: " A sziget szint kiszámítása folyamatban..." time-out: " A szint kiszámítása túl sokáig tartott. Kérjük, próbálja újra később." + donate: + parameters: "[hand [amount]]" + description: "donate blocks to permanently raise island level" + must-be-on-island: "You must be on your island to donate blocks." + no-permission: "You do not have permission to donate blocks on this island." + no-value: "That block has no level value." + invalid-amount: "Invalid amount. Use a positive number." + empty: "There are no valid blocks to donate." + cancelled: "Donation cancelled. Items returned." + success: "Donated [number] blocks for [points]points! These points are permanent." + confirm: "Confirm - Items will be DESTROYED!" + cancel: "Cancel - Return Items" + gui-title: "Donate Blocks" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + preview: "Points to add: [points]|These items will be destroyed!" + hand: + success: "Donated [number] x [material] for [points]permanent points!" + not-block: "You must be holding a placeable block to donate." detail: description: "megmutatja a szigeted blokkjainak részleteit" top: @@ -64,6 +82,15 @@ island: names-island: "[name] szigete" syntax: "[name] x [number]" hint: " Futtassa a szintet a blokk jelentés megjelenítéséhez" +protection: + flags: + ISLAND_BLOCK_DONATION: + description: |- + Toggle who can donate + blocks to raise island level. + name: Block Donation + hint: Block donation not allowed + level: commands: value: @@ -131,6 +158,11 @@ level: description: |- Csak spawner-eket jelenít meg. block-name: " Spawner" + donated: + name: "Donated Blocks" + description: |- + Display blocks permanently + donated to island level. filters: name: name: " Rendezés Név szerint" diff --git a/src/main/resources/locales/id.yml b/src/main/resources/locales/id.yml index 33705f3..4ac568b 100644 --- a/src/main/resources/locales/id.yml +++ b/src/main/resources/locales/id.yml @@ -44,6 +44,24 @@ island: lagi" in-progress: " Perhitungan level pulau sedang dijalankan..." time-out: " Perhitungan level pulau terlalu lama. Coba lagi nanti." + donate: + parameters: "[hand [amount]]" + description: "donate blocks to permanently raise island level" + must-be-on-island: "You must be on your island to donate blocks." + no-permission: "You do not have permission to donate blocks on this island." + no-value: "That block has no level value." + invalid-amount: "Invalid amount. Use a positive number." + empty: "There are no valid blocks to donate." + cancelled: "Donation cancelled. Items returned." + success: "Donated [number] blocks for [points]points! These points are permanent." + confirm: "Confirm - Items will be DESTROYED!" + cancel: "Cancel - Return Items" + gui-title: "Donate Blocks" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + preview: "Points to add: [points]|These items will be destroyed!" + hand: + success: "Donated [number] x [material] for [points]permanent points!" + not-block: "You must be holding a placeable block to donate." top: description: menunjukkan Sepuluh Besar gui-title: " Sepuluh Besar" @@ -61,6 +79,15 @@ island: names-island: Pulau [name] syntax: "[name] x [number]" hint: " Jalankan perintah level untuk melihat laporan blok" +protection: + flags: + ISLAND_BLOCK_DONATION: + description: |- + Toggle who can donate + blocks to raise island level. + name: Block Donation + hint: Block donation not allowed + level: commands: value: @@ -128,6 +155,11 @@ level: name: " Spawner" description: " Hanya tampilkan spawner." block-name: " Spawner" + donated: + name: "Donated Blocks" + description: |- + Display blocks permanently + donated to island level. filters: name: name: " Urut berdasarkan Nama" diff --git a/src/main/resources/locales/ko.yml b/src/main/resources/locales/ko.yml index 4710019..f926667 100644 --- a/src/main/resources/locales/ko.yml +++ b/src/main/resources/locales/ko.yml @@ -47,6 +47,24 @@ island: cooldown: " 다시 사용하려면 [time]초 를 기다려야 합니다." in-progress: " 섬 레벨 계산이 진행 중입니다..." time-out: " 레벨 계산이 너무 오래 걸렸습니다. 나중에 다시 시도해 주세요." + donate: + parameters: "[hand [amount]]" + description: "donate blocks to permanently raise island level" + must-be-on-island: "You must be on your island to donate blocks." + no-permission: "You do not have permission to donate blocks on this island." + no-value: "That block has no level value." + invalid-amount: "Invalid amount. Use a positive number." + empty: "There are no valid blocks to donate." + cancelled: "Donation cancelled. Items returned." + success: "Donated [number] blocks for [points]points! These points are permanent." + confirm: "Confirm - Items will be DESTROYED!" + cancel: "Cancel - Return Items" + gui-title: "Donate Blocks" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + preview: "Points to add: [points]|These items will be destroyed!" + hand: + success: "Donated [number] x [material] for [points]permanent points!" + not-block: "You must be holding a placeable block to donate." detail: description: "섬 블록의 세부 정보를 표시합니다" top: @@ -64,6 +82,15 @@ island: names-island: "[name]의 섬" syntax: "[name] x [number]" hint: " 블록 보고서를 보려면 level을 실행하세요." +protection: + flags: + ISLAND_BLOCK_DONATION: + description: |- + Toggle who can donate + blocks to raise island level. + name: Block Donation + hint: Block donation not allowed + level: commands: value: @@ -129,6 +156,11 @@ level: description: |- 스포너만 표시합니다. block-name: " 스포너" + donated: + name: "Donated Blocks" + description: |- + Display blocks permanently + donated to island level. filters: name: name: " 이름으로 정렬" diff --git a/src/main/resources/locales/lv.yml b/src/main/resources/locales/lv.yml index b2875f5..f24ac76 100644 --- a/src/main/resources/locales/lv.yml +++ b/src/main/resources/locales/lv.yml @@ -47,6 +47,24 @@ island: required-points-to-next-level: " Līmeņa progress: [progress] / [levelcost] punkti" in-progress: " Salas līmeņa aprēķins notiek..." time-out: " Līmeņa aprēķins ilga pārāk ilgi. Lūdzu, mēģini vēlāk." + donate: + parameters: "[hand [amount]]" + description: "donate blocks to permanently raise island level" + must-be-on-island: "You must be on your island to donate blocks." + no-permission: "You do not have permission to donate blocks on this island." + no-value: "That block has no level value." + invalid-amount: "Invalid amount. Use a positive number." + empty: "There are no valid blocks to donate." + cancelled: "Donation cancelled. Items returned." + success: "Donated [number] blocks for [points]points! These points are permanent." + confirm: "Confirm - Items will be DESTROYED!" + cancel: "Cancel - Return Items" + gui-title: "Donate Blocks" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + preview: "Points to add: [points]|These items will be destroyed!" + hand: + success: "Donated [number] x [material] for [points]permanent points!" + not-block: "You must be holding a placeable block to donate." detail: description: "rāda tavas salas bloku detaļas" top: @@ -64,6 +82,15 @@ island: names-island: "[name] sala" syntax: "[name] x [number]" hint: " Palaid level, lai redzētu bloku pārskatu" +protection: + flags: + ISLAND_BLOCK_DONATION: + description: |- + Toggle who can donate + blocks to raise island level. + name: Block Donation + hint: Block donation not allowed + level: commands: value: @@ -131,6 +158,11 @@ level: description: |- Rādīt tikai spawnerus. block-name: " Spawner" + donated: + name: "Donated Blocks" + description: |- + Display blocks permanently + donated to island level. filters: name: name: " Kārtot pēc Nosaukuma" diff --git a/src/main/resources/locales/nl.yml b/src/main/resources/locales/nl.yml index e0ae4e7..46b40f5 100644 --- a/src/main/resources/locales/nl.yml +++ b/src/main/resources/locales/nl.yml @@ -44,6 +44,24 @@ island: cooldown: " Je moet nog [time] seconden wachten tot je dit weer kan doen." in-progress: " Eiland level wordt berekend..." time-out: " De level berekening duurde te lang. Probeer het later opnieuw." + donate: + parameters: "[hand [amount]]" + description: "donate blocks to permanently raise island level" + must-be-on-island: "You must be on your island to donate blocks." + no-permission: "You do not have permission to donate blocks on this island." + no-value: "That block has no level value." + invalid-amount: "Invalid amount. Use a positive number." + empty: "There are no valid blocks to donate." + cancelled: "Donation cancelled. Items returned." + success: "Donated [number] blocks for [points]points! These points are permanent." + confirm: "Confirm - Items will be DESTROYED!" + cancel: "Cancel - Return Items" + gui-title: "Donate Blocks" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + preview: "Points to add: [points]|These items will be destroyed!" + hand: + success: "Donated [number] x [material] for [points]permanent points!" + not-block: "You must be holding a placeable block to donate." top: description: Toon de Top tien gui-title: " Top tien" @@ -61,6 +79,15 @@ island: names-island: "[name]'s eiland" syntax: "[name] x [number]" hint: " Gebruik level om het blokkenrapport te zien" +protection: + flags: + ISLAND_BLOCK_DONATION: + description: |- + Toggle who can donate + blocks to raise island level. + name: Block Donation + hint: Block donation not allowed + level: commands: value: @@ -124,6 +151,11 @@ level: name: " Monsterkooien" description: " Toon alleen monsterkooien." block-name: " Monsterkooien" + donated: + name: "Donated Blocks" + description: |- + Display blocks permanently + donated to island level. filters: name: name: " Sorteer aan de hand van naam" diff --git a/src/main/resources/locales/pl.yml b/src/main/resources/locales/pl.yml index 73d1da0..51de36d 100644 --- a/src/main/resources/locales/pl.yml +++ b/src/main/resources/locales/pl.yml @@ -44,6 +44,24 @@ island: in-progress: " Trwa obliczanie poziomu twojej wyspy..." time-out: " Sprawdzanie poziomu twojej wyspy trwalo zbyt dlugo. Sprobuj ponownie pozniej!" + donate: + parameters: "[hand [amount]]" + description: "donate blocks to permanently raise island level" + must-be-on-island: "You must be on your island to donate blocks." + no-permission: "You do not have permission to donate blocks on this island." + no-value: "That block has no level value." + invalid-amount: "Invalid amount. Use a positive number." + empty: "There are no valid blocks to donate." + cancelled: "Donation cancelled. Items returned." + success: "Donated [number] blocks for [points]points! These points are permanent." + confirm: "Confirm - Items will be DESTROYED!" + cancel: "Cancel - Return Items" + gui-title: "Donate Blocks" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + preview: "Points to add: [points]|These items will be destroyed!" + hand: + success: "Donated [number] x [material] for [points]permanent points!" + not-block: "You must be holding a placeable block to donate." top: description: pokauje Top 10 wysp gui-title: "Top 10" @@ -61,6 +79,15 @@ island: names-island: Wyspa gracza [name] syntax: "[name] x [number]" hint: " Uruchom poziom, aby wyświetlić raport o blokach" +protection: + flags: + ISLAND_BLOCK_DONATION: + description: |- + Toggle who can donate + blocks to raise island level. + name: Block Donation + hint: Block donation not allowed + level: commands: value: @@ -127,6 +154,11 @@ level: name: " Spawnery" description: " Wyświetlaj tylko spawnery." block-name: " Spawner" + donated: + name: "Donated Blocks" + description: |- + Display blocks permanently + donated to island level. filters: name: name: " Sortuj według nazwy" diff --git a/src/main/resources/locales/pt.yml b/src/main/resources/locales/pt.yml index 0d047d9..fc114fb 100644 --- a/src/main/resources/locales/pt.yml +++ b/src/main/resources/locales/pt.yml @@ -47,6 +47,24 @@ island: cooldown: " Você deve esperar [time] segundos até que possa fazer isso novamente." in-progress: " O cálculo do nível da ilha está em andamento..." time-out: " O cálculo do nível demorou muito. Por favor, tente novamente mais tarde." + donate: + parameters: "[hand [amount]]" + description: "donate blocks to permanently raise island level" + must-be-on-island: "You must be on your island to donate blocks." + no-permission: "You do not have permission to donate blocks on this island." + no-value: "That block has no level value." + invalid-amount: "Invalid amount. Use a positive number." + empty: "There are no valid blocks to donate." + cancelled: "Donation cancelled. Items returned." + success: "Donated [number] blocks for [points]points! These points are permanent." + confirm: "Confirm - Items will be DESTROYED!" + cancel: "Cancel - Return Items" + gui-title: "Donate Blocks" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + preview: "Points to add: [points]|These items will be destroyed!" + hand: + success: "Donated [number] x [material] for [points]permanent points!" + not-block: "You must be holding a placeable block to donate." detail: description: "mostra os detalhes dos blocos da sua ilha" top: @@ -64,6 +82,15 @@ island: names-island: Ilha de [name] syntax: "[name] x [number]" hint: " Execute level para ver o relatório de blocos." +protection: + flags: + ISLAND_BLOCK_DONATION: + description: |- + Toggle who can donate + blocks to raise island level. + name: Block Donation + hint: Block donation not allowed + level: commands: value: @@ -131,6 +158,11 @@ level: description: |- Exibir apenas spawners. block-name: " Spawner" + donated: + name: "Donated Blocks" + description: |- + Display blocks permanently + donated to island level. filters: name: name: " Ordenar por Nome" diff --git a/src/main/resources/locales/ru.yml b/src/main/resources/locales/ru.yml index 5735c5c..de749e9 100644 --- a/src/main/resources/locales/ru.yml +++ b/src/main/resources/locales/ru.yml @@ -47,6 +47,24 @@ island: cooldown: 'Вы должны подождать [time] секунд, прежде чем повторить это.' in-progress: 'Вычисление уровня острова уже выполняется...' time-out: 'Вычисление уровня заняло слишком много времени. Пожалуйста, попробуйте позже.' + donate: + parameters: "[hand [amount]]" + description: "donate blocks to permanently raise island level" + must-be-on-island: "You must be on your island to donate blocks." + no-permission: "You do not have permission to donate blocks on this island." + no-value: "That block has no level value." + invalid-amount: "Invalid amount. Use a positive number." + empty: "There are no valid blocks to donate." + cancelled: "Donation cancelled. Items returned." + success: "Donated [number] blocks for [points]points! These points are permanent." + confirm: "Confirm - Items will be DESTROYED!" + cancel: "Cancel - Return Items" + gui-title: "Donate Blocks" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + preview: "Points to add: [points]|These items will be destroyed!" + hand: + success: "Donated [number] x [material] for [points]permanent points!" + not-block: "You must be holding a placeable block to donate." detail: description: показать информацию о блоках на вашем острове top: @@ -66,6 +84,15 @@ island: syntax: '[name] x [number]' hint: 'Перейдите на уровень, чтобы просмотреть отчёт по блокам.' +protection: + flags: + ISLAND_BLOCK_DONATION: + description: |- + Toggle who can donate + blocks to raise island level. + name: Block Donation + hint: Block donation not allowed + level: commands: value: @@ -137,6 +164,11 @@ level: name: 'Спавнера' description: 'Показать только спавнера.' block-name: 'Спавнер' + donated: + name: "Donated Blocks" + description: |- + Display blocks permanently + donated to island level. filters: name: name: 'Сортировать по имени' diff --git a/src/main/resources/locales/tr.yml b/src/main/resources/locales/tr.yml index eb7fe64..d119ea9 100644 --- a/src/main/resources/locales/tr.yml +++ b/src/main/resources/locales/tr.yml @@ -51,6 +51,24 @@ island: cooldown: " Bunu tekrar yapmak için [time] saniye beklemelisin" in-progress: " Ada seviyesi hesaplaması devam ediyor..." time-out: " Seviye hesaplaması çok uzun sürdü. Lütfen daha sonra tekrar deneyin." + donate: + parameters: "[hand [amount]]" + description: "donate blocks to permanently raise island level" + must-be-on-island: "You must be on your island to donate blocks." + no-permission: "You do not have permission to donate blocks on this island." + no-value: "That block has no level value." + invalid-amount: "Invalid amount. Use a positive number." + empty: "There are no valid blocks to donate." + cancelled: "Donation cancelled. Items returned." + success: "Donated [number] blocks for [points]points! These points are permanent." + confirm: "Confirm - Items will be DESTROYED!" + cancel: "Cancel - Return Items" + gui-title: "Donate Blocks" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + preview: "Points to add: [points]|These items will be destroyed!" + hand: + success: "Donated [number] x [material] for [points]permanent points!" + not-block: "You must be holding a placeable block to donate." detail: description: "adanın blok ayrıntılarını gösterir" top: @@ -68,6 +86,15 @@ island: names-island: "[name]'nin adası" syntax: "[name] x [number]" hint: " Blok raporunu görmek için level komutunu çalıştırın" +protection: + flags: + ISLAND_BLOCK_DONATION: + description: |- + Toggle who can donate + blocks to raise island level. + name: Block Donation + hint: Block donation not allowed + level: commands: value: @@ -135,6 +162,11 @@ level: description: |- Sadece spawner'ları göster. block-name: " Spawner" + donated: + name: "Donated Blocks" + description: |- + Display blocks permanently + donated to island level. filters: name: name: " İsme Göre Sırala" diff --git a/src/main/resources/locales/uk.yml b/src/main/resources/locales/uk.yml index 85e6e1d..f9bce55 100644 --- a/src/main/resources/locales/uk.yml +++ b/src/main/resources/locales/uk.yml @@ -44,6 +44,24 @@ island: це знову" in-progress: " Розрахунок рівня острова триває..." time-out: " Розрахунок рівня тривав занадто довго. Будь-ласка спробуйте пізніше." + donate: + parameters: "[hand [amount]]" + description: "donate blocks to permanently raise island level" + must-be-on-island: "You must be on your island to donate blocks." + no-permission: "You do not have permission to donate blocks on this island." + no-value: "That block has no level value." + invalid-amount: "Invalid amount. Use a positive number." + empty: "There are no valid blocks to donate." + cancelled: "Donation cancelled. Items returned." + success: "Donated [number] blocks for [points]points! These points are permanent." + confirm: "Confirm - Items will be DESTROYED!" + cancel: "Cancel - Return Items" + gui-title: "Donate Blocks" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + preview: "Points to add: [points]|These items will be destroyed!" + hand: + success: "Donated [number] x [material] for [points]permanent points!" + not-block: "You must be holding a placeable block to donate." top: description: показати першу десятку gui-title: "& Десятка Кращих" @@ -61,6 +79,15 @@ island: names-island: острів [name]. syntax: "[name] x [number]" hint: " Запустіть рівень, щоб переглянути звіт про блокування" +protection: + flags: + ISLAND_BLOCK_DONATION: + description: |- + Toggle who can donate + blocks to raise island level. + name: Block Donation + hint: Block donation not allowed + level: commands: value: @@ -128,6 +155,11 @@ level: name: " Спавнери" description: " Відображати лише спавнери." block-name: " Спавнер" + donated: + name: "Donated Blocks" + description: |- + Display blocks permanently + donated to island level. filters: name: name: " Сортувати за назвою" diff --git a/src/main/resources/locales/vi.yml b/src/main/resources/locales/vi.yml index 3ca0c6f..61a69c9 100644 --- a/src/main/resources/locales/vi.yml +++ b/src/main/resources/locales/vi.yml @@ -50,6 +50,24 @@ island: cooldown: ' Bạn phải chờ [time] giây trước khi có thể làm điều đó' in-progress: ' Đang tính toán cấp đảo...' time-out: ' Tính toán cấp đảo quá lâu. Vui lòng thử lại sau.' + donate: + parameters: "[hand [amount]]" + description: "donate blocks to permanently raise island level" + must-be-on-island: "You must be on your island to donate blocks." + no-permission: "You do not have permission to donate blocks on this island." + no-value: "That block has no level value." + invalid-amount: "Invalid amount. Use a positive number." + empty: "There are no valid blocks to donate." + cancelled: "Donation cancelled. Items returned." + success: "Donated [number] blocks for [points]points! These points are permanent." + confirm: "Confirm - Items will be DESTROYED!" + cancel: "Cancel - Return Items" + gui-title: "Donate Blocks" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + preview: "Points to add: [points]|These items will be destroyed!" + hand: + success: "Donated [number] x [material] for [points]permanent points!" + not-block: "You must be holding a placeable block to donate." detail: description: "hiển thị chi tiết các khối trên đảo của bạn" top: @@ -67,6 +85,15 @@ island: names-island: 'đảo của [name]' syntax: '[name] x [number]' hint: ' Chạy lệnh cấp để xem báo cáo khối' +protection: + flags: + ISLAND_BLOCK_DONATION: + description: |- + Toggle who can donate + blocks to raise island level. + name: Block Donation + hint: Block donation not allowed + level: commands: value: @@ -134,6 +161,11 @@ level: description: |- Chỉ hiển thị lồng sinh quái. block-name: " Lồng Sinh Quái" + donated: + name: "Donated Blocks" + description: |- + Display blocks permanently + donated to island level. filters: name: name: " Sắp Xếp theo Tên" diff --git a/src/main/resources/locales/zh-CN.yml b/src/main/resources/locales/zh-CN.yml index cf7c8c1..f3c21b8 100644 --- a/src/main/resources/locales/zh-CN.yml +++ b/src/main/resources/locales/zh-CN.yml @@ -42,6 +42,24 @@ island: cooldown: '还需等待[time]秒才能再次使用该指令' in-progress: '岛屿等级正在计算中...' time-out: '等级计算超时, 请稍后再试' + donate: + parameters: "[hand [amount]]" + description: "donate blocks to permanently raise island level" + must-be-on-island: "You must be on your island to donate blocks." + no-permission: "You do not have permission to donate blocks on this island." + no-value: "That block has no level value." + invalid-amount: "Invalid amount. Use a positive number." + empty: "There are no valid blocks to donate." + cancelled: "Donation cancelled. Items returned." + success: "Donated [number] blocks for [points]points! These points are permanent." + confirm: "Confirm - Items will be DESTROYED!" + cancel: "Cancel - Return Items" + gui-title: "Donate Blocks" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + preview: "Points to add: [points]|These items will be destroyed!" + hand: + success: "Donated [number] x [material] for [points]permanent points!" + not-block: "You must be holding a placeable block to donate." top: description: 显示前十名 @@ -62,6 +80,15 @@ island: syntax: '[name] x [number]' hint: '运行level指令查看方块报告' +protection: + flags: + ISLAND_BLOCK_DONATION: + description: |- + Toggle who can donate + blocks to raise island level. + name: Block Donation + hint: Block donation not allowed + level: commands: value: @@ -120,6 +147,11 @@ level: name: '刷怪笼' description: '只显示刷怪笼' block-name: ' 刷怪笼' + donated: + name: "Donated Blocks" + description: |- + Display blocks permanently + donated to island level. filters: name: name: '按名称排序' diff --git a/src/test/java/world/bentobox/level/LevelTest.java b/src/test/java/world/bentobox/level/LevelTest.java index 550509a..c436e27 100644 --- a/src/test/java/world/bentobox/level/LevelTest.java +++ b/src/test/java/world/bentobox/level/LevelTest.java @@ -219,7 +219,7 @@ public void testAllLoaded() { mockedBukkit.when(() -> Bukkit.getWorld("acidisland_world")).thenReturn(null); addon.allLoaded(); verify(plugin).log("[Level] Level hooking into BSkyBlock"); - verify(cmd, times(4)).getAddon(); // 4 commands + verify(cmd, times(5)).getAddon(); // 5 commands verify(adminCmd, times(5)).getAddon(); // Five commands // Placeholders verify(phm).registerPlaceholder(eq(addon), eq("bskyblock_island_level"), any()); From f0fc85db1c509a592810ef835c4566ef05593447 Mon Sep 17 00:00:00 2001 From: tastybento Date: Sat, 11 Apr 2026 08:35:32 -0700 Subject: [PATCH 27/33] Fix donation panel lore color leak and default italic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The donation panel built items via Bukkit's deprecated setDisplayName/ setLore APIs and split the translated text on '|'. Two adjacent MiniMessage spans of the same color collapse to a single legacy run (e.g. "§cWarning…|destroyed…"), so splitting dropped the §c from the second line and it rendered in default purple italic. Lore also got Minecraft's default italic because the legacy String API does not suppress it the way Adventure Components do. Switch to displayName(Component)/lore(List), parse each segment with Util.parseMiniMessageOrLegacy, suppress default italic, and carry the active §color/§format codes across '|' splits so styles do not get dropped on subsequent segments. Co-Authored-By: Claude Opus 4.6 --- .../bentobox/level/panels/DonationPanel.java | 71 +++++++++++++++++-- 1 file changed, 66 insertions(+), 5 deletions(-) diff --git a/src/main/java/world/bentobox/level/panels/DonationPanel.java b/src/main/java/world/bentobox/level/panels/DonationPanel.java index 95acfca..e18bdc3 100644 --- a/src/main/java/world/bentobox/level/panels/DonationPanel.java +++ b/src/main/java/world/bentobox/level/panels/DonationPanel.java @@ -1,7 +1,8 @@ package world.bentobox.level.panels; -import java.util.Arrays; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.bukkit.Bukkit; @@ -18,9 +19,13 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.TextDecoration; + import world.bentobox.bentobox.api.localization.TextVariables; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.Island; +import world.bentobox.bentobox.util.Util; import world.bentobox.level.Level; import world.bentobox.level.util.Utils; @@ -319,16 +324,72 @@ private static ItemStack createNamedItem(Material material, String text) { ItemStack item = new ItemStack(material); ItemMeta meta = item.getItemMeta(); if (meta != null) { - String[] parts = text.split("\\|"); - meta.setDisplayName(parts[0]); - if (parts.length > 1) { - meta.setLore(Arrays.asList(Arrays.copyOfRange(parts, 1, parts.length))); + List parts = splitWithStyleCarryover(text); + meta.displayName(removeDefaultItalic(Util.parseMiniMessageOrLegacy(parts.get(0)))); + if (parts.size() > 1) { + List lore = new ArrayList<>(parts.size() - 1); + for (int i = 1; i < parts.size(); i++) { + lore.add(removeDefaultItalic(Util.parseMiniMessageOrLegacy(parts.get(i)))); + } + meta.lore(lore); } item.setItemMeta(meta); } return item; } + /** + * Splits a legacy-coded string on '|' while carrying the active color and + * formatting codes from the previous segment to the next. Without this, + * a span like "§cWarning|destroyed" would split into "§cWarning" and + * "destroyed" — the second line would lose its red color, since the + * componentToLegacy walker only emits §c once for a contiguous run. + */ + private static List splitWithStyleCarryover(String text) { + List result = new ArrayList<>(); + StringBuilder current = new StringBuilder(); + String activeColor = ""; + StringBuilder activeFormats = new StringBuilder(); + int i = 0; + while (i < text.length()) { + char c = text.charAt(i); + if (c == '|') { + result.add(current.toString()); + current = new StringBuilder(); + current.append(activeColor).append(activeFormats); + i++; + continue; + } + if (c == '\u00A7' && i + 1 < text.length()) { + char code = Character.toLowerCase(text.charAt(i + 1)); + String pair = "\u00A7" + code; + current.append(pair); + if ("0123456789abcdef".indexOf(code) >= 0) { + activeColor = pair; + activeFormats.setLength(0); + } else if ("klmno".indexOf(code) >= 0) { + activeFormats.append(pair); + } else if (code == 'r') { + activeColor = ""; + activeFormats.setLength(0); + } + i += 2; + continue; + } + current.append(c); + i++; + } + result.add(current.toString()); + return result; + } + + private static Component removeDefaultItalic(Component component) { + if (component.decoration(TextDecoration.ITALIC) == TextDecoration.State.NOT_SET) { + return component.decoration(TextDecoration.ITALIC, TextDecoration.State.FALSE); + } + return component; + } + /** * Open the donation panel for a player. * From 4ae01bb4b575f1c890ebae19cb74d31d9e5dcba2 Mon Sep 17 00:00:00 2001 From: tastybento Date: Sat, 11 Apr 2026 12:57:34 -0700 Subject: [PATCH 28/33] Confirm hand donations and localize point totals Require a re-run confirmation before /island donate hand destroys items, fix tab completion to offer "hand" and the held stack size, route "help" through the standard help handler, and format [points] placeholders via the player's locale so large totals render with thousands separators. Sync the new confirm-prompt key plus spacing and typo fixes across every locale file. Co-Authored-By: Claude Opus 4.6 --- .../level/commands/IslandDonateCommand.java | 66 +++++++++++++------ .../level/commands/IslandLevelCommand.java | 7 +- .../bentobox/level/panels/DonationPanel.java | 6 +- .../java/world/bentobox/level/util/Utils.java | 8 +++ src/main/resources/locales/cs.yml | 9 +-- src/main/resources/locales/de.yml | 7 +- src/main/resources/locales/en-US.yml | 11 ++-- src/main/resources/locales/es.yml | 7 +- src/main/resources/locales/fr.yml | 7 +- src/main/resources/locales/hu.yml | 7 +- src/main/resources/locales/id.yml | 7 +- src/main/resources/locales/ko.yml | 7 +- src/main/resources/locales/lv.yml | 7 +- src/main/resources/locales/nl.yml | 7 +- src/main/resources/locales/pl.yml | 7 +- src/main/resources/locales/pt.yml | 7 +- src/main/resources/locales/ru.yml | 7 +- src/main/resources/locales/tr.yml | 7 +- src/main/resources/locales/uk.yml | 7 +- src/main/resources/locales/vi.yml | 7 +- src/main/resources/locales/zh-CN.yml | 7 +- 21 files changed, 131 insertions(+), 81 deletions(-) diff --git a/src/main/java/world/bentobox/level/commands/IslandDonateCommand.java b/src/main/java/world/bentobox/level/commands/IslandDonateCommand.java index 93f13ee..66ddf43 100644 --- a/src/main/java/world/bentobox/level/commands/IslandDonateCommand.java +++ b/src/main/java/world/bentobox/level/commands/IslandDonateCommand.java @@ -1,6 +1,5 @@ package world.bentobox.level.commands; -import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -8,9 +7,11 @@ import org.bukkit.inventory.ItemStack; import world.bentobox.bentobox.api.commands.CompositeCommand; +import world.bentobox.bentobox.api.commands.ConfirmableCommand; import world.bentobox.bentobox.api.localization.TextVariables; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.Island; +import world.bentobox.bentobox.util.Util; import world.bentobox.level.Level; import world.bentobox.level.panels.DonationPanel; import world.bentobox.level.util.Utils; @@ -21,7 +22,7 @@ * * @author tastybento */ -public class IslandDonateCommand extends CompositeCommand { +public class IslandDonateCommand extends ConfirmableCommand { private final Level addon; @@ -79,56 +80,79 @@ private boolean handleHandDonation(User user, Island island, List args) return false; } - Material material = hand.getType(); - Integer blockValue = addon.getBlockConfig().getValue(getWorld(), material); + final Material material = hand.getType(); + final Integer blockValue = addon.getBlockConfig().getValue(getWorld(), material); if (blockValue == null || blockValue <= 0) { user.sendMessage("island.donate.no-value"); return false; } - // Determine amount - int amount = hand.getAmount(); + int requested = hand.getAmount(); if (args.size() > 1) { + if ("help".equalsIgnoreCase(args.get(1))) { + showHelp(this, user); + return true; + } try { - amount = Integer.parseInt(args.get(1)); - if (amount < 1) { + requested = Integer.parseInt(args.get(1)); + if (requested < 1) { user.sendMessage("island.donate.invalid-amount"); return false; } - amount = Math.min(amount, hand.getAmount()); } catch (NumberFormatException e) { user.sendMessage("island.donate.invalid-amount"); return false; } } - // Calculate points + final int previewAmount = Math.min(requested, hand.getAmount()); + final long previewPoints = (long) previewAmount * blockValue; + final int finalRequested = requested; + + String prompt = user.getTranslation("island.donate.hand.confirm-prompt", + TextVariables.NUMBER, String.valueOf(previewAmount), + "[material]", Utils.prettifyObject(material, user), + "[points]", Utils.formatNumber(user, previewPoints)); + + askConfirmation(user, prompt, () -> performHandDonation(user, island, material, blockValue, finalRequested)); + return true; + } + + private void performHandDonation(User user, Island island, Material material, int blockValue, int requested) { + ItemStack currentHand = user.getPlayer().getInventory().getItemInMainHand(); + if (currentHand.getType() != material || currentHand.getAmount() == 0) { + user.sendMessage("island.donate.hand.not-block"); + return; + } + int amount = Math.min(requested, currentHand.getAmount()); long points = (long) amount * blockValue; - // Remove items from hand - if (amount >= hand.getAmount()) { + if (amount >= currentHand.getAmount()) { user.getPlayer().getInventory().setItemInMainHand(null); } else { - hand.setAmount(hand.getAmount() - amount); + currentHand.setAmount(currentHand.getAmount() - amount); } - // Record the donation addon.getManager().donateBlocks(island, user.getUniqueId(), material.name(), amount, points); - // Notify the player user.sendMessage("island.donate.hand.success", TextVariables.NUMBER, String.valueOf(amount), "[material]", Utils.prettifyObject(material, user), - "[points]", String.valueOf(points)); - - return true; + "[points]", Utils.formatNumber(user, points)); } @Override public Optional> tabComplete(User user, String alias, List args) { - if (args.size() == 1) { - return Optional.of(List.of("hand")); + String lastArg = !args.isEmpty() ? args.get(args.size() - 1) : ""; + if (args.size() <= 2) { + return Optional.of(Util.tabLimit(List.of("hand"), lastArg)); + } + if (args.size() == 3 && "hand".equalsIgnoreCase(args.get(1)) && user.isPlayer()) { + int held = user.getPlayer().getInventory().getItemInMainHand().getAmount(); + if (held > 0) { + return Optional.of(Util.tabLimit(List.of(String.valueOf(held)), lastArg)); + } } - return Optional.of(new ArrayList<>()); + return Optional.of(List.of()); } } diff --git a/src/main/java/world/bentobox/level/commands/IslandLevelCommand.java b/src/main/java/world/bentobox/level/commands/IslandLevelCommand.java index bf471de..240df2e 100644 --- a/src/main/java/world/bentobox/level/commands/IslandLevelCommand.java +++ b/src/main/java/world/bentobox/level/commands/IslandLevelCommand.java @@ -11,6 +11,7 @@ import world.bentobox.level.Level; import world.bentobox.level.calculators.Results; import world.bentobox.level.calculators.Results.Result; +import world.bentobox.level.util.Utils; public class IslandLevelCommand extends CompositeCommand { @@ -112,9 +113,9 @@ private void showResult(User user, UUID playerUUID, Island island, long oldLevel // Send player how many points are required to reach next island level if (results.getPointsToNextLevel() >= 0) { user.sendMessage("island.level.required-points-to-next-level", - "[points]", String.valueOf(results.getPointsToNextLevel()), - "[progress]", String.valueOf(this.addon.getSettings().getLevelCost()-results.getPointsToNextLevel()), - "[levelcost]", String.valueOf(this.addon.getSettings().getLevelCost()) + "[points]", Utils.formatNumber(user, results.getPointsToNextLevel()), + "[progress]", Utils.formatNumber(user, this.addon.getSettings().getLevelCost() - results.getPointsToNextLevel()), + "[levelcost]", Utils.formatNumber(user, this.addon.getSettings().getLevelCost()) ); } // Tell other team members diff --git a/src/main/java/world/bentobox/level/panels/DonationPanel.java b/src/main/java/world/bentobox/level/panels/DonationPanel.java index e18bdc3..d450f92 100644 --- a/src/main/java/world/bentobox/level/panels/DonationPanel.java +++ b/src/main/java/world/bentobox/level/panels/DonationPanel.java @@ -87,7 +87,7 @@ private DonationPanel(Level addon, World world, User user, Island island) { long currentDonated = addon.getManager().getDonatedPoints(island); ItemStack info = createNamedItem(Material.BOOK, user.getTranslation("island.donate.gui-info", - "[points]", String.valueOf(currentDonated))); + "[points]", Utils.formatNumber(user, currentDonated))); inventory.setItem(INFO_SLOT, info); // Cancel button @@ -135,7 +135,7 @@ private void updatePreview() { long points = calculateDonationValue(); ItemStack preview = createNamedItem(Material.EXPERIENCE_BOTTLE, user.getTranslation("island.donate.preview", - "[points]", String.valueOf(points))); + "[points]", Utils.formatNumber(user, points))); inventory.setItem(PREVIEW_SLOT, preview); } @@ -178,7 +178,7 @@ private void processDonation() { user.sendMessage("island.donate.empty"); } else { user.sendMessage("island.donate.success", - "[points]", String.valueOf(totalPoints), + "[points]", Utils.formatNumber(user, totalPoints), TextVariables.NUMBER, String.valueOf(donations.values().stream().mapToInt(Integer::intValue).sum())); } } diff --git a/src/main/java/world/bentobox/level/util/Utils.java b/src/main/java/world/bentobox/level/util/Utils.java index 5c23c0b..b807cb9 100644 --- a/src/main/java/world/bentobox/level/util/Utils.java +++ b/src/main/java/world/bentobox/level/util/Utils.java @@ -7,6 +7,7 @@ package world.bentobox.level.util; +import java.text.NumberFormat; import java.util.List; import org.bukkit.Material; @@ -22,6 +23,13 @@ public class Utils private Utils() {} // Private constructor as this is a utility class only with static methods + /** + * Formats a number using the user's locale (e.g. 10500 → "10,500" in en-US, "10.500" in de). + */ + public static String formatNumber(User user, long value) { + return NumberFormat.getInstance(user.getLocale()).format(value); + } + /** * This method sends a message to the user with appended "prefix" text before message. * @param user User who receives message. diff --git a/src/main/resources/locales/cs.yml b/src/main/resources/locales/cs.yml index d5b8ff8..9e7e836 100644 --- a/src/main/resources/locales/cs.yml +++ b/src/main/resources/locales/cs.yml @@ -55,15 +55,16 @@ island: invalid-amount: "Invalid amount. Use a positive number." empty: "There are no valid blocks to donate." cancelled: "Donation cancelled. Items returned." - success: "Donated [number] blocks for [points]points! These points are permanent." + success: "Donated [number] blocks for [points] points! These points are permanent." confirm: "Confirm - Items will be DESTROYED!" cancel: "Cancel - Return Items" gui-title: "Donate Blocks" - gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" preview: "Points to add: [points]|These items will be destroyed!" hand: - success: "Donated [number] x [material] for [points]permanent points!" + success: "Donated [number] x [material] for [points] permanent points!" not-block: "You must be holding a placeable block to donate." + confirm-prompt: "About to DESTROY [number] x [material] for [points] permanent points." detail: description: "zobrazit podrobnosti o blocích vašeho ostrova" top: @@ -183,7 +184,7 @@ level: [id] id: ' Block id: [id]' value: ' Hodnota bloku: [number]' - underwater: ' Hladina moře Bellow: [number]' + underwater: ' Hladina moře Below: [number]' limit: ' Limit bloku: [number]' previous: name: Předchozí stránka diff --git a/src/main/resources/locales/de.yml b/src/main/resources/locales/de.yml index a058cbc..2adfc2f 100644 --- a/src/main/resources/locales/de.yml +++ b/src/main/resources/locales/de.yml @@ -56,15 +56,16 @@ island: invalid-amount: "Invalid amount. Use a positive number." empty: "There are no valid blocks to donate." cancelled: "Donation cancelled. Items returned." - success: "Donated [number] blocks for [points]points! These points are permanent." + success: "Donated [number] blocks for [points] points! These points are permanent." confirm: "Confirm - Items will be DESTROYED!" cancel: "Cancel - Return Items" gui-title: "Donate Blocks" - gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" preview: "Points to add: [points]|These items will be destroyed!" hand: - success: "Donated [number] x [material] for [points]permanent points!" + success: "Donated [number] x [material] for [points] permanent points!" not-block: "You must be holding a placeable block to donate." + confirm-prompt: "About to DESTROY [number] x [material] for [points] permanent points." detail: description: "zeigt Details der Blöcke deiner Insel" top: diff --git a/src/main/resources/locales/en-US.yml b/src/main/resources/locales/en-US.yml index ce897c5..cb327d8 100755 --- a/src/main/resources/locales/en-US.yml +++ b/src/main/resources/locales/en-US.yml @@ -60,15 +60,16 @@ island: invalid-amount: "Invalid amount. Use a positive number." empty: "There are no valid blocks to donate." cancelled: "Donation cancelled. Items returned." - success: "Donated [number] blocks for [points]points! These points are permanent." + success: "Donated [number] blocks for [points] points! These points are permanent." confirm: "Confirm - Items will be DESTROYED!" cancel: "Cancel - Return Items" gui-title: "Donate Blocks" - gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" preview: "Points to add: [points]|These items will be destroyed!" hand: - success: "Donated [number] x [material] for [points]permanent points!" + success: "Donated [number] x [material] for [points] permanent points!" not-block: "You must be holding a placeable block to donate." + confirm-prompt: "About to DESTROY [number] x [material] for [points] permanent points." detail: description: "shows detail of your island blocks" top: @@ -164,7 +165,7 @@ level: name: "Blocks Under Sea level" description: |- Display only blocks - that are bellow sea + that are below sea level. spawner: name: "Spawners" @@ -199,7 +200,7 @@ level: [id] id: "Block id: [id]" value: "Block value: [number]" - underwater: "Bellow sea level: [number]" + underwater: "Below sea level: [number]" limit: "Block limit: [number]" # Button that is used in multi-page GUIs which allows to return to previous page. previous: diff --git a/src/main/resources/locales/es.yml b/src/main/resources/locales/es.yml index 9947438..47f583c 100644 --- a/src/main/resources/locales/es.yml +++ b/src/main/resources/locales/es.yml @@ -53,15 +53,16 @@ island: invalid-amount: "Invalid amount. Use a positive number." empty: "There are no valid blocks to donate." cancelled: "Donation cancelled. Items returned." - success: "Donated [number] blocks for [points]points! These points are permanent." + success: "Donated [number] blocks for [points] points! These points are permanent." confirm: "Confirm - Items will be DESTROYED!" cancel: "Cancel - Return Items" gui-title: "Donate Blocks" - gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" preview: "Points to add: [points]|These items will be destroyed!" hand: - success: "Donated [number] x [material] for [points]permanent points!" + success: "Donated [number] x [material] for [points] permanent points!" not-block: "You must be holding a placeable block to donate." + confirm-prompt: "About to DESTROY [number] x [material] for [points] permanent points." detail: description: "muestra el detalle de los bloques de tu isla" top: diff --git a/src/main/resources/locales/fr.yml b/src/main/resources/locales/fr.yml index eee3f42..27a1bd8 100644 --- a/src/main/resources/locales/fr.yml +++ b/src/main/resources/locales/fr.yml @@ -55,15 +55,16 @@ island: invalid-amount: "Invalid amount. Use a positive number." empty: "There are no valid blocks to donate." cancelled: "Donation cancelled. Items returned." - success: "Donated [number] blocks for [points]points! These points are permanent." + success: "Donated [number] blocks for [points] points! These points are permanent." confirm: "Confirm - Items will be DESTROYED!" cancel: "Cancel - Return Items" gui-title: "Donate Blocks" - gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" preview: "Points to add: [points]|These items will be destroyed!" hand: - success: "Donated [number] x [material] for [points]permanent points!" + success: "Donated [number] x [material] for [points] permanent points!" not-block: "You must be holding a placeable block to donate." + confirm-prompt: "About to DESTROY [number] x [material] for [points] permanent points." top: description: affiche le top 10 gui-title: "Top 10" diff --git a/src/main/resources/locales/hu.yml b/src/main/resources/locales/hu.yml index 61a0a1f..afff3ef 100644 --- a/src/main/resources/locales/hu.yml +++ b/src/main/resources/locales/hu.yml @@ -56,15 +56,16 @@ island: invalid-amount: "Invalid amount. Use a positive number." empty: "There are no valid blocks to donate." cancelled: "Donation cancelled. Items returned." - success: "Donated [number] blocks for [points]points! These points are permanent." + success: "Donated [number] blocks for [points] points! These points are permanent." confirm: "Confirm - Items will be DESTROYED!" cancel: "Cancel - Return Items" gui-title: "Donate Blocks" - gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" preview: "Points to add: [points]|These items will be destroyed!" hand: - success: "Donated [number] x [material] for [points]permanent points!" + success: "Donated [number] x [material] for [points] permanent points!" not-block: "You must be holding a placeable block to donate." + confirm-prompt: "About to DESTROY [number] x [material] for [points] permanent points." detail: description: "megmutatja a szigeted blokkjainak részleteit" top: diff --git a/src/main/resources/locales/id.yml b/src/main/resources/locales/id.yml index 4ac568b..f0c6574 100644 --- a/src/main/resources/locales/id.yml +++ b/src/main/resources/locales/id.yml @@ -53,15 +53,16 @@ island: invalid-amount: "Invalid amount. Use a positive number." empty: "There are no valid blocks to donate." cancelled: "Donation cancelled. Items returned." - success: "Donated [number] blocks for [points]points! These points are permanent." + success: "Donated [number] blocks for [points] points! These points are permanent." confirm: "Confirm - Items will be DESTROYED!" cancel: "Cancel - Return Items" gui-title: "Donate Blocks" - gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" preview: "Points to add: [points]|These items will be destroyed!" hand: - success: "Donated [number] x [material] for [points]permanent points!" + success: "Donated [number] x [material] for [points] permanent points!" not-block: "You must be holding a placeable block to donate." + confirm-prompt: "About to DESTROY [number] x [material] for [points] permanent points." top: description: menunjukkan Sepuluh Besar gui-title: " Sepuluh Besar" diff --git a/src/main/resources/locales/ko.yml b/src/main/resources/locales/ko.yml index f926667..6cbb516 100644 --- a/src/main/resources/locales/ko.yml +++ b/src/main/resources/locales/ko.yml @@ -56,15 +56,16 @@ island: invalid-amount: "Invalid amount. Use a positive number." empty: "There are no valid blocks to donate." cancelled: "Donation cancelled. Items returned." - success: "Donated [number] blocks for [points]points! These points are permanent." + success: "Donated [number] blocks for [points] points! These points are permanent." confirm: "Confirm - Items will be DESTROYED!" cancel: "Cancel - Return Items" gui-title: "Donate Blocks" - gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" preview: "Points to add: [points]|These items will be destroyed!" hand: - success: "Donated [number] x [material] for [points]permanent points!" + success: "Donated [number] x [material] for [points] permanent points!" not-block: "You must be holding a placeable block to donate." + confirm-prompt: "About to DESTROY [number] x [material] for [points] permanent points." detail: description: "섬 블록의 세부 정보를 표시합니다" top: diff --git a/src/main/resources/locales/lv.yml b/src/main/resources/locales/lv.yml index f24ac76..5792196 100644 --- a/src/main/resources/locales/lv.yml +++ b/src/main/resources/locales/lv.yml @@ -56,15 +56,16 @@ island: invalid-amount: "Invalid amount. Use a positive number." empty: "There are no valid blocks to donate." cancelled: "Donation cancelled. Items returned." - success: "Donated [number] blocks for [points]points! These points are permanent." + success: "Donated [number] blocks for [points] points! These points are permanent." confirm: "Confirm - Items will be DESTROYED!" cancel: "Cancel - Return Items" gui-title: "Donate Blocks" - gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" preview: "Points to add: [points]|These items will be destroyed!" hand: - success: "Donated [number] x [material] for [points]permanent points!" + success: "Donated [number] x [material] for [points] permanent points!" not-block: "You must be holding a placeable block to donate." + confirm-prompt: "About to DESTROY [number] x [material] for [points] permanent points." detail: description: "rāda tavas salas bloku detaļas" top: diff --git a/src/main/resources/locales/nl.yml b/src/main/resources/locales/nl.yml index 46b40f5..6fe42e4 100644 --- a/src/main/resources/locales/nl.yml +++ b/src/main/resources/locales/nl.yml @@ -53,15 +53,16 @@ island: invalid-amount: "Invalid amount. Use a positive number." empty: "There are no valid blocks to donate." cancelled: "Donation cancelled. Items returned." - success: "Donated [number] blocks for [points]points! These points are permanent." + success: "Donated [number] blocks for [points] points! These points are permanent." confirm: "Confirm - Items will be DESTROYED!" cancel: "Cancel - Return Items" gui-title: "Donate Blocks" - gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" preview: "Points to add: [points]|These items will be destroyed!" hand: - success: "Donated [number] x [material] for [points]permanent points!" + success: "Donated [number] x [material] for [points] permanent points!" not-block: "You must be holding a placeable block to donate." + confirm-prompt: "About to DESTROY [number] x [material] for [points] permanent points." top: description: Toon de Top tien gui-title: " Top tien" diff --git a/src/main/resources/locales/pl.yml b/src/main/resources/locales/pl.yml index 51de36d..a40d8fc 100644 --- a/src/main/resources/locales/pl.yml +++ b/src/main/resources/locales/pl.yml @@ -53,15 +53,16 @@ island: invalid-amount: "Invalid amount. Use a positive number." empty: "There are no valid blocks to donate." cancelled: "Donation cancelled. Items returned." - success: "Donated [number] blocks for [points]points! These points are permanent." + success: "Donated [number] blocks for [points] points! These points are permanent." confirm: "Confirm - Items will be DESTROYED!" cancel: "Cancel - Return Items" gui-title: "Donate Blocks" - gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" preview: "Points to add: [points]|These items will be destroyed!" hand: - success: "Donated [number] x [material] for [points]permanent points!" + success: "Donated [number] x [material] for [points] permanent points!" not-block: "You must be holding a placeable block to donate." + confirm-prompt: "About to DESTROY [number] x [material] for [points] permanent points." top: description: pokauje Top 10 wysp gui-title: "Top 10" diff --git a/src/main/resources/locales/pt.yml b/src/main/resources/locales/pt.yml index fc114fb..844402b 100644 --- a/src/main/resources/locales/pt.yml +++ b/src/main/resources/locales/pt.yml @@ -56,15 +56,16 @@ island: invalid-amount: "Invalid amount. Use a positive number." empty: "There are no valid blocks to donate." cancelled: "Donation cancelled. Items returned." - success: "Donated [number] blocks for [points]points! These points are permanent." + success: "Donated [number] blocks for [points] points! These points are permanent." confirm: "Confirm - Items will be DESTROYED!" cancel: "Cancel - Return Items" gui-title: "Donate Blocks" - gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" preview: "Points to add: [points]|These items will be destroyed!" hand: - success: "Donated [number] x [material] for [points]permanent points!" + success: "Donated [number] x [material] for [points] permanent points!" not-block: "You must be holding a placeable block to donate." + confirm-prompt: "About to DESTROY [number] x [material] for [points] permanent points." detail: description: "mostra os detalhes dos blocos da sua ilha" top: diff --git a/src/main/resources/locales/ru.yml b/src/main/resources/locales/ru.yml index de749e9..6150490 100644 --- a/src/main/resources/locales/ru.yml +++ b/src/main/resources/locales/ru.yml @@ -56,15 +56,16 @@ island: invalid-amount: "Invalid amount. Use a positive number." empty: "There are no valid blocks to donate." cancelled: "Donation cancelled. Items returned." - success: "Donated [number] blocks for [points]points! These points are permanent." + success: "Donated [number] blocks for [points] points! These points are permanent." confirm: "Confirm - Items will be DESTROYED!" cancel: "Cancel - Return Items" gui-title: "Donate Blocks" - gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" preview: "Points to add: [points]|These items will be destroyed!" hand: - success: "Donated [number] x [material] for [points]permanent points!" + success: "Donated [number] x [material] for [points] permanent points!" not-block: "You must be holding a placeable block to donate." + confirm-prompt: "About to DESTROY [number] x [material] for [points] permanent points." detail: description: показать информацию о блоках на вашем острове top: diff --git a/src/main/resources/locales/tr.yml b/src/main/resources/locales/tr.yml index d119ea9..1be47bb 100644 --- a/src/main/resources/locales/tr.yml +++ b/src/main/resources/locales/tr.yml @@ -60,15 +60,16 @@ island: invalid-amount: "Invalid amount. Use a positive number." empty: "There are no valid blocks to donate." cancelled: "Donation cancelled. Items returned." - success: "Donated [number] blocks for [points]points! These points are permanent." + success: "Donated [number] blocks for [points] points! These points are permanent." confirm: "Confirm - Items will be DESTROYED!" cancel: "Cancel - Return Items" gui-title: "Donate Blocks" - gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" preview: "Points to add: [points]|These items will be destroyed!" hand: - success: "Donated [number] x [material] for [points]permanent points!" + success: "Donated [number] x [material] for [points] permanent points!" not-block: "You must be holding a placeable block to donate." + confirm-prompt: "About to DESTROY [number] x [material] for [points] permanent points." detail: description: "adanın blok ayrıntılarını gösterir" top: diff --git a/src/main/resources/locales/uk.yml b/src/main/resources/locales/uk.yml index f9bce55..8bf009b 100644 --- a/src/main/resources/locales/uk.yml +++ b/src/main/resources/locales/uk.yml @@ -53,15 +53,16 @@ island: invalid-amount: "Invalid amount. Use a positive number." empty: "There are no valid blocks to donate." cancelled: "Donation cancelled. Items returned." - success: "Donated [number] blocks for [points]points! These points are permanent." + success: "Donated [number] blocks for [points] points! These points are permanent." confirm: "Confirm - Items will be DESTROYED!" cancel: "Cancel - Return Items" gui-title: "Donate Blocks" - gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" preview: "Points to add: [points]|These items will be destroyed!" hand: - success: "Donated [number] x [material] for [points]permanent points!" + success: "Donated [number] x [material] for [points] permanent points!" not-block: "You must be holding a placeable block to donate." + confirm-prompt: "About to DESTROY [number] x [material] for [points] permanent points." top: description: показати першу десятку gui-title: "& Десятка Кращих" diff --git a/src/main/resources/locales/vi.yml b/src/main/resources/locales/vi.yml index 61a69c9..2c0451e 100644 --- a/src/main/resources/locales/vi.yml +++ b/src/main/resources/locales/vi.yml @@ -59,15 +59,16 @@ island: invalid-amount: "Invalid amount. Use a positive number." empty: "There are no valid blocks to donate." cancelled: "Donation cancelled. Items returned." - success: "Donated [number] blocks for [points]points! These points are permanent." + success: "Donated [number] blocks for [points] points! These points are permanent." confirm: "Confirm - Items will be DESTROYED!" cancel: "Cancel - Return Items" gui-title: "Donate Blocks" - gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" preview: "Points to add: [points]|These items will be destroyed!" hand: - success: "Donated [number] x [material] for [points]permanent points!" + success: "Donated [number] x [material] for [points] permanent points!" not-block: "You must be holding a placeable block to donate." + confirm-prompt: "About to DESTROY [number] x [material] for [points] permanent points." detail: description: "hiển thị chi tiết các khối trên đảo của bạn" top: diff --git a/src/main/resources/locales/zh-CN.yml b/src/main/resources/locales/zh-CN.yml index f3c21b8..522a0ed 100644 --- a/src/main/resources/locales/zh-CN.yml +++ b/src/main/resources/locales/zh-CN.yml @@ -51,15 +51,16 @@ island: invalid-amount: "Invalid amount. Use a positive number." empty: "There are no valid blocks to donate." cancelled: "Donation cancelled. Items returned." - success: "Donated [number] blocks for [points]points! These points are permanent." + success: "Donated [number] blocks for [points] points! These points are permanent." confirm: "Confirm - Items will be DESTROYED!" cancel: "Cancel - Return Items" gui-title: "Donate Blocks" - gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" + gui-info: "Donate blocks to your island|Currently donated: [points] points|Warning: donated items are|destroyed and cannot be returned!" preview: "Points to add: [points]|These items will be destroyed!" hand: - success: "Donated [number] x [material] for [points]permanent points!" + success: "Donated [number] x [material] for [points] permanent points!" not-block: "You must be holding a placeable block to donate." + confirm-prompt: "About to DESTROY [number] x [material] for [points] permanent points." top: description: 显示前十名 From f27f8f79b70b2fd42ff9e0abe41b531324ab7fc6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 11 Apr 2026 22:46:01 +0000 Subject: [PATCH 29/33] Fix review feedback: donation panel safety, LevelsManager data integrity, locale spacing Agent-Logs-Url: https://github.com/BentoBoxWorld/Level/sessions/0764e162-6b48-4cf7-b3e9-f344016416bd Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com> --- .../world/bentobox/level/LevelsManager.java | 7 ++- .../bentobox/level/panels/DonationPanel.java | 56 +++++++++++++------ src/main/resources/locales/en-US.yml | 2 +- 3 files changed, 45 insertions(+), 20 deletions(-) diff --git a/src/main/java/world/bentobox/level/LevelsManager.java b/src/main/java/world/bentobox/level/LevelsManager.java index e45563c..a2a3c8f 100644 --- a/src/main/java/world/bentobox/level/LevelsManager.java +++ b/src/main/java/world/bentobox/level/LevelsManager.java @@ -554,11 +554,12 @@ public void deleteIsland(String uniqueId) { * @param points the point value of this donation */ public void donateBlocks(@NonNull Island island, @NonNull UUID donorUUID, @NonNull String material, int count, long points) { - IslandLevels ld = levelsCache.computeIfAbsent(island.getUniqueId(), IslandLevels::new); + IslandLevels ld = getLevelsData(island); ld.addDonation(donorUUID.toString(), material, count, points); handler.saveObjectAsync(ld); - // Update the top ten to reflect the donation - addToTopTen(island, ld.getLevel()); + // Do not update TopTen here: donations affect future recalculations, and the + // stored island level is only updated when setIslandResults(...) persists the + // recalculated level data. } /** diff --git a/src/main/java/world/bentobox/level/panels/DonationPanel.java b/src/main/java/world/bentobox/level/panels/DonationPanel.java index d450f92..3174d8f 100644 --- a/src/main/java/world/bentobox/level/panels/DonationPanel.java +++ b/src/main/java/world/bentobox/level/panels/DonationPanel.java @@ -150,11 +150,13 @@ private boolean isDonationSlot(int slot) { } /** - * Process the donation - consume items and record them. + * Process the donation - consume items and record them. Items with no + * configured value are returned to the player rather than consumed. */ private void processDonation() { Map donations = new HashMap<>(); long totalPoints = 0; + Player player = user.getPlayer(); for (int slot : DONATION_SLOTS) { ItemStack item = inventory.getItem(slot); @@ -168,9 +170,14 @@ private void processDonation() { totalPoints += points; // Record each material type as a separate donation log entry addon.getManager().donateBlocks(island, user.getUniqueId(), mat.name(), count, points); + // Clear the slot - items are consumed + inventory.setItem(slot, null); + } else { + // Return valueless items to the player rather than consuming them + inventory.setItem(slot, null); + Map overflow = player.getInventory().addItem(item); + overflow.values().forEach(drop -> player.getWorld().dropItemNaturally(player.getLocation(), drop)); } - // Clear the slot - items are consumed - inventory.setItem(slot, null); } } @@ -218,23 +225,37 @@ public void onInventoryClick(InventoryClickEvent event) { // But if they shift-click into the donation panel, only allow into donation slots if (event.isShiftClick()) { event.setCancelled(true); - // Manually handle shift-click to a donation slot + // Manually handle shift-click to a donation slot using inventory APIs ItemStack clicked = event.getCurrentItem(); - if (clicked != null && !clicked.getType().isAir() && clicked.getType().isBlock()) { + Integer clickedValue = clicked != null && !clicked.getType().isAir() && clicked.getType().isBlock() + ? addon.getBlockConfig().getValue(world, clicked.getType()) : null; + if (clickedValue != null && clickedValue > 0) { + ItemStack remaining = clicked.clone(); for (int ds : DONATION_SLOTS) { + if (remaining.getAmount() <= 0) { + break; + } + ItemStack existing = inventory.getItem(ds); if (existing == null || existing.getType().isAir()) { - inventory.setItem(ds, clicked.clone()); - clicked.setAmount(0); + inventory.setItem(ds, remaining.clone()); + remaining.setAmount(0); break; - } else if (existing.isSimilar(clicked) && existing.getAmount() < existing.getMaxStackSize()) { + } else if (existing.isSimilar(remaining) && existing.getAmount() < existing.getMaxStackSize()) { int space = existing.getMaxStackSize() - existing.getAmount(); - int transfer = Math.min(space, clicked.getAmount()); - existing.setAmount(existing.getAmount() + transfer); - clicked.setAmount(clicked.getAmount() - transfer); - if (clicked.getAmount() <= 0) break; + int transfer = Math.min(space, remaining.getAmount()); + ItemStack updated = existing.clone(); + updated.setAmount(updated.getAmount() + transfer); + inventory.setItem(ds, updated); + remaining.setAmount(remaining.getAmount() - transfer); } } + + if (remaining.getAmount() <= 0) { + event.setCurrentItem(null); + } else { + event.setCurrentItem(remaining); + } } updatePreview(); } @@ -268,13 +289,16 @@ public void onInventoryClick(InventoryClickEvent event) { if (isDonationSlot(slot)) { // Allow the click but validate on next tick Bukkit.getScheduler().runTask(addon.getPlugin(), () -> { - // Validate: only blocks with value are allowed + // Validate: only blocks with a configured value are allowed ItemStack inSlot = inventory.getItem(slot); if (inSlot != null && !inSlot.getType().isAir()) { - if (!inSlot.getType().isBlock()) { - // Return non-block item to player - player.getInventory().addItem(inSlot); + Integer blockValue = inSlot.getType().isBlock() + ? addon.getBlockConfig().getValue(world, inSlot.getType()) : null; + boolean validDonationItem = blockValue != null && blockValue > 0; + if (!validDonationItem) { inventory.setItem(slot, null); + Map overflow = player.getInventory().addItem(inSlot); + overflow.values().forEach(item -> player.getWorld().dropItemNaturally(player.getLocation(), item)); user.sendMessage("island.donate.hand.not-block"); } } diff --git a/src/main/resources/locales/en-US.yml b/src/main/resources/locales/en-US.yml index cb327d8..32d4524 100755 --- a/src/main/resources/locales/en-US.yml +++ b/src/main/resources/locales/en-US.yml @@ -8,7 +8,7 @@ admin: parameters: "" description: "calculate the island level for player" sethandicap: - parameters: [+/-] + parameters: " [+/-]" description: | set or change the island *handicap* e.g. +10 will remove 10 levels, From aa9226468ec8e6d639ff0274996db2a896a7a794 Mon Sep 17 00:00:00 2001 From: tastybento Date: Sat, 11 Apr 2026 16:28:37 -0700 Subject: [PATCH 30/33] Require Member rank minimum on block donation flag MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps BentoBox to 3.14.1-SNAPSHOT for the new Flag.Builder.minimumRank API and uses it on BLOCK_DONATION so VISITOR/COOP/TRUSTED ranks can never be selected as the donation rank — only MEMBER and above. Co-Authored-By: Claude Opus 4.6 --- pom.xml | 2 +- src/main/java/world/bentobox/level/Level.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 34820a5..86aebeb 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,7 @@ v1.21-SNAPSHOT 1.21.11-R0.1-SNAPSHOT - 3.14.0 + 3.14.1-SNAPSHOT 1.12.0 diff --git a/src/main/java/world/bentobox/level/Level.java b/src/main/java/world/bentobox/level/Level.java index b674db7..20f2094 100644 --- a/src/main/java/world/bentobox/level/Level.java +++ b/src/main/java/world/bentobox/level/Level.java @@ -60,6 +60,7 @@ public class Level extends Addon { public static final Flag BLOCK_DONATION = new Flag.Builder("ISLAND_BLOCK_DONATION", Material.HOPPER) .type(Flag.Type.PROTECTION) .defaultRank(RanksManager.OWNER_RANK) + .minimumRank(RanksManager.MEMBER_RANK) .mode(Flag.Mode.BASIC) .build(); From e68f50322c37447bebee1c1dfcada526cb1b9455 Mon Sep 17 00:00:00 2001 From: tastybento Date: Sat, 11 Apr 2026 16:37:32 -0700 Subject: [PATCH 31/33] Address Sonar findings on DonationPanel - Extract [points] placeholder into a POINTS_PLACEHOLDER constant so the literal is declared once instead of four times (S1192) - Switch the GUI creation to the Component-based Bukkit.createInventory overload so we are no longer calling the deprecated String variant (S1874), and reuse removeDefaultItalic so the title matches the styling rules used for item names - Split onInventoryClick into small focused helpers (handlePlayerInventoryClick, handleCancel, handleConfirm, handleDonationSlotClick, isValidDonationItem, distributeIntoDonationSlots). Drops cognitive complexity well below the 15 threshold and fixes the brain-method warning (S3776, S6541) - Rewrite the shift-click distribution loop as a while loop guarded by amount > 0 and the two-branch splitWithStyleCarryover loop as an if/else-if/else chain, so neither uses more than one break/continue (S135) Co-Authored-By: Claude Opus 4.6 --- .../bentobox/level/panels/DonationPanel.java | 186 ++++++++++-------- 1 file changed, 101 insertions(+), 85 deletions(-) diff --git a/src/main/java/world/bentobox/level/panels/DonationPanel.java b/src/main/java/world/bentobox/level/panels/DonationPanel.java index 3174d8f..76c15c2 100644 --- a/src/main/java/world/bentobox/level/panels/DonationPanel.java +++ b/src/main/java/world/bentobox/level/panels/DonationPanel.java @@ -39,6 +39,7 @@ public class DonationPanel implements Listener { private static final int SIZE = 36; // 4 rows private static final String TITLE_REF = "island.donate.gui-title"; + private static final String POINTS_PLACEHOLDER = "[points]"; // Slot layout private static final int INFO_SLOT = 4; @@ -69,7 +70,8 @@ private DonationPanel(Level addon, World world, User user, Island island) { this.island = island; // Create the inventory - String title = user.getTranslation(TITLE_REF); + Component title = removeDefaultItalic( + Util.parseMiniMessageOrLegacy(user.getTranslation(TITLE_REF))); this.inventory = Bukkit.createInventory(null, SIZE, title); // Fill borders @@ -87,7 +89,7 @@ private DonationPanel(Level addon, World world, User user, Island island) { long currentDonated = addon.getManager().getDonatedPoints(island); ItemStack info = createNamedItem(Material.BOOK, user.getTranslation("island.donate.gui-info", - "[points]", Utils.formatNumber(user, currentDonated))); + POINTS_PLACEHOLDER, Utils.formatNumber(user, currentDonated))); inventory.setItem(INFO_SLOT, info); // Cancel button @@ -135,7 +137,7 @@ private void updatePreview() { long points = calculateDonationValue(); ItemStack preview = createNamedItem(Material.EXPERIENCE_BOTTLE, user.getTranslation("island.donate.preview", - "[points]", Utils.formatNumber(user, points))); + POINTS_PLACEHOLDER, Utils.formatNumber(user, points))); inventory.setItem(PREVIEW_SLOT, preview); } @@ -185,7 +187,7 @@ private void processDonation() { user.sendMessage("island.donate.empty"); } else { user.sendMessage("island.donate.success", - "[points]", Utils.formatNumber(user, totalPoints), + POINTS_PLACEHOLDER, Utils.formatNumber(user, totalPoints), TextVariables.NUMBER, String.valueOf(donations.values().stream().mapToInt(Integer::intValue).sum())); } } @@ -220,95 +222,111 @@ public void onInventoryClick(InventoryClickEvent event) { int slot = event.getRawSlot(); - // Clicks in the player's own inventory are allowed (for picking up items) if (slot >= SIZE) { - // But if they shift-click into the donation panel, only allow into donation slots - if (event.isShiftClick()) { - event.setCancelled(true); - // Manually handle shift-click to a donation slot using inventory APIs - ItemStack clicked = event.getCurrentItem(); - Integer clickedValue = clicked != null && !clicked.getType().isAir() && clicked.getType().isBlock() - ? addon.getBlockConfig().getValue(world, clicked.getType()) : null; - if (clickedValue != null && clickedValue > 0) { - ItemStack remaining = clicked.clone(); - for (int ds : DONATION_SLOTS) { - if (remaining.getAmount() <= 0) { - break; - } - - ItemStack existing = inventory.getItem(ds); - if (existing == null || existing.getType().isAir()) { - inventory.setItem(ds, remaining.clone()); - remaining.setAmount(0); - break; - } else if (existing.isSimilar(remaining) && existing.getAmount() < existing.getMaxStackSize()) { - int space = existing.getMaxStackSize() - existing.getAmount(); - int transfer = Math.min(space, remaining.getAmount()); - ItemStack updated = existing.clone(); - updated.setAmount(updated.getAmount() + transfer); - inventory.setItem(ds, updated); - remaining.setAmount(remaining.getAmount() - transfer); - } - } - - if (remaining.getAmount() <= 0) { - event.setCurrentItem(null); - } else { - event.setCurrentItem(remaining); - } - } - updatePreview(); - } + handlePlayerInventoryClick(event); return; } - - // Cancel button if (slot == CANCEL_SLOT) { - event.setCancelled(true); - returnItems(); - confirmed = true; // prevent double-return on close - player.closeInventory(); - user.sendMessage("island.donate.cancelled"); + handleCancel(event, player); return; } - - // Confirm button if (slot == CONFIRM_SLOT) { - event.setCancelled(true); - if (calculateDonationValue() <= 0) { - user.sendMessage("island.donate.empty"); - return; - } - confirmed = true; - processDonation(); - player.closeInventory(); + handleConfirm(event, player); return; } - - // Donation slots - allow placing/removing items if (isDonationSlot(slot)) { - // Allow the click but validate on next tick - Bukkit.getScheduler().runTask(addon.getPlugin(), () -> { - // Validate: only blocks with a configured value are allowed - ItemStack inSlot = inventory.getItem(slot); - if (inSlot != null && !inSlot.getType().isAir()) { - Integer blockValue = inSlot.getType().isBlock() - ? addon.getBlockConfig().getValue(world, inSlot.getType()) : null; - boolean validDonationItem = blockValue != null && blockValue > 0; - if (!validDonationItem) { - inventory.setItem(slot, null); - Map overflow = player.getInventory().addItem(inSlot); - overflow.values().forEach(item -> player.getWorld().dropItemNaturally(player.getLocation(), item)); - user.sendMessage("island.donate.hand.not-block"); - } - } - updatePreview(); - }); + handleDonationSlotClick(slot, player); return; } + // Borders, info, preview - cancel + event.setCancelled(true); + } - // All other slots (borders, info, preview) - cancel + /** + * Clicks in the player's own inventory: allow normal pickups, but intercept + * shift-clicks to distribute valid blocks into donation slots. + */ + private void handlePlayerInventoryClick(InventoryClickEvent event) { + if (!event.isShiftClick()) return; event.setCancelled(true); + + ItemStack clicked = event.getCurrentItem(); + if (!isValidDonationItem(clicked)) { + return; + } + + ItemStack remaining = distributeIntoDonationSlots(clicked.clone()); + event.setCurrentItem(remaining.getAmount() <= 0 ? null : remaining); + updatePreview(); + } + + /** + * Distribute {@code remaining} across the donation slots in order, mutating + * its amount as items are consumed. Returns the same stack for convenience. + */ + private ItemStack distributeIntoDonationSlots(ItemStack remaining) { + int idx = 0; + while (idx < DONATION_SLOTS.length && remaining.getAmount() > 0) { + int ds = DONATION_SLOTS[idx]; + ItemStack existing = inventory.getItem(ds); + if (existing == null || existing.getType().isAir()) { + inventory.setItem(ds, remaining.clone()); + remaining.setAmount(0); + } else if (existing.isSimilar(remaining) && existing.getAmount() < existing.getMaxStackSize()) { + int space = existing.getMaxStackSize() - existing.getAmount(); + int transfer = Math.min(space, remaining.getAmount()); + ItemStack updated = existing.clone(); + updated.setAmount(updated.getAmount() + transfer); + inventory.setItem(ds, updated); + remaining.setAmount(remaining.getAmount() - transfer); + } + idx++; + } + return remaining; + } + + private void handleCancel(InventoryClickEvent event, Player player) { + event.setCancelled(true); + returnItems(); + confirmed = true; // prevent double-return on close + player.closeInventory(); + user.sendMessage("island.donate.cancelled"); + } + + private void handleConfirm(InventoryClickEvent event, Player player) { + event.setCancelled(true); + if (calculateDonationValue() <= 0) { + user.sendMessage("island.donate.empty"); + return; + } + confirmed = true; + processDonation(); + player.closeInventory(); + } + + /** + * Donation slots allow placement. Validate on the next tick and eject any + * item that is not a configured block donation. + */ + private void handleDonationSlotClick(int slot, Player player) { + Bukkit.getScheduler().runTask(addon.getPlugin(), () -> { + ItemStack inSlot = inventory.getItem(slot); + if (inSlot != null && !inSlot.getType().isAir() && !isValidDonationItem(inSlot)) { + inventory.setItem(slot, null); + Map overflow = player.getInventory().addItem(inSlot); + overflow.values().forEach(item -> player.getWorld().dropItemNaturally(player.getLocation(), item)); + user.sendMessage("island.donate.hand.not-block"); + } + updatePreview(); + }); + } + + private boolean isValidDonationItem(ItemStack item) { + if (item == null || item.getType().isAir() || !item.getType().isBlock()) { + return false; + } + Integer value = addon.getBlockConfig().getValue(world, item.getType()); + return value != null && value > 0; } @EventHandler @@ -382,9 +400,7 @@ private static List splitWithStyleCarryover(String text) { current = new StringBuilder(); current.append(activeColor).append(activeFormats); i++; - continue; - } - if (c == '\u00A7' && i + 1 < text.length()) { + } else if (c == '\u00A7' && i + 1 < text.length()) { char code = Character.toLowerCase(text.charAt(i + 1)); String pair = "\u00A7" + code; current.append(pair); @@ -398,10 +414,10 @@ private static List splitWithStyleCarryover(String text) { activeFormats.setLength(0); } i += 2; - continue; + } else { + current.append(c); + i++; } - current.append(c); - i++; } result.add(current.toString()); return result; From 2c546e3e4e2c8c6d66b4c75bf597904a1f2f0330 Mon Sep 17 00:00:00 2001 From: tastybento Date: Sat, 11 Apr 2026 16:50:15 -0700 Subject: [PATCH 32/33] Update CLAUDE.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- CLAUDE.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CLAUDE.md b/CLAUDE.md index a57ba96..27ee7c6 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -89,8 +89,9 @@ JaCoCo coverage reports are generated during `mvn verify`. | `locales/` | `src/main/resources/locales/` | Translation strings | | `panels/` | `src/main/resources/panels/` | GUI layout definitions | -**Panel template upgrades:** Files under `panels/` are copied to the addon's data folder (`plugins/BentoBox/addons/Level/panels/`) on first run and are **not** overwritten on upgrade. If a release modifies a panel template (new tabs, buttons, slots, etc.), the release notes must instruct users to delete the affected on-disk panel file so it regenerates — otherwise existing servers will silently keep the old layout. +**Panel template upgrades:** Files under `panels/` are copied to the addon's data folder (`plugins/BentoBox/addons/Level/panels/`) on first run and are **not** overwritten on upgrade. If a release modifies a panel template (new tabs, buttons, slots, etc.), the release notes/changelog must explicitly instruct users to delete the affected on-disk panel file so it regenerates — otherwise existing servers will silently keep the old layout. +**Current upgrade-sensitive example:** If `src/main/resources/panels/detail_panel.yml` changes (for example by adding a new `DONATED` tab), existing servers must delete/regenerate `plugins/BentoBox/addons/Level/panels/detail_panel.yml` after upgrading or they will continue using the old panel definition and the new tab will not appear. ## Code Conventions - Null safety via Eclipse JDT annotations (`@NonNull`, `@Nullable`) — honour these on public APIs From 099fc44ca736cf77976b33a8dd2da0a697b7dba6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 11 Apr 2026 23:56:25 +0000 Subject: [PATCH 33/33] Address second review: recalc after donation, fix tab-complete indexing, GUI-specific error message Agent-Logs-Url: https://github.com/BentoBoxWorld/Level/sessions/753156c2-d054-4c6f-820a-48c0ffedbbbe Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com> --- .../java/world/bentobox/level/LevelsManager.java | 16 +++++++++++++--- .../level/commands/IslandDonateCommand.java | 5 +++-- .../bentobox/level/panels/DonationPanel.java | 4 +++- src/main/resources/locales/en-US.yml | 1 + 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/main/java/world/bentobox/level/LevelsManager.java b/src/main/java/world/bentobox/level/LevelsManager.java index a2a3c8f..3816947 100644 --- a/src/main/java/world/bentobox/level/LevelsManager.java +++ b/src/main/java/world/bentobox/level/LevelsManager.java @@ -557,9 +557,19 @@ public void donateBlocks(@NonNull Island island, @NonNull UUID donorUUID, @NonNu IslandLevels ld = getLevelsData(island); ld.addDonation(donorUUID.toString(), material, count, points); handler.saveObjectAsync(ld); - // Do not update TopTen here: donations affect future recalculations, and the - // stored island level is only updated when setIslandResults(...) persists the - // recalculated level data. + } + + /** + * Queue a full level recalculation for the island. Call this after donations + * so that the level/top-ten update immediately. + * + * @param island the island to recalculate + */ + public void recalculateAfterDonation(@NonNull Island island) { + UUID owner = island.getOwner(); + if (owner != null) { + calculateLevel(owner, island); + } } /** diff --git a/src/main/java/world/bentobox/level/commands/IslandDonateCommand.java b/src/main/java/world/bentobox/level/commands/IslandDonateCommand.java index 66ddf43..37e1f28 100644 --- a/src/main/java/world/bentobox/level/commands/IslandDonateCommand.java +++ b/src/main/java/world/bentobox/level/commands/IslandDonateCommand.java @@ -134,6 +134,7 @@ private void performHandDonation(User user, Island island, Material material, in } addon.getManager().donateBlocks(island, user.getUniqueId(), material.name(), amount, points); + addon.getManager().recalculateAfterDonation(island); user.sendMessage("island.donate.hand.success", TextVariables.NUMBER, String.valueOf(amount), @@ -144,10 +145,10 @@ private void performHandDonation(User user, Island island, Material material, in @Override public Optional> tabComplete(User user, String alias, List args) { String lastArg = !args.isEmpty() ? args.get(args.size() - 1) : ""; - if (args.size() <= 2) { + if (args.size() <= 1) { return Optional.of(Util.tabLimit(List.of("hand"), lastArg)); } - if (args.size() == 3 && "hand".equalsIgnoreCase(args.get(1)) && user.isPlayer()) { + if (args.size() == 2 && "hand".equalsIgnoreCase(args.get(0)) && user.isPlayer()) { int held = user.getPlayer().getInventory().getItemInMainHand().getAmount(); if (held > 0) { return Optional.of(Util.tabLimit(List.of(String.valueOf(held)), lastArg)); diff --git a/src/main/java/world/bentobox/level/panels/DonationPanel.java b/src/main/java/world/bentobox/level/panels/DonationPanel.java index 76c15c2..4dbf373 100644 --- a/src/main/java/world/bentobox/level/panels/DonationPanel.java +++ b/src/main/java/world/bentobox/level/panels/DonationPanel.java @@ -189,6 +189,8 @@ private void processDonation() { user.sendMessage("island.donate.success", POINTS_PLACEHOLDER, Utils.formatNumber(user, totalPoints), TextVariables.NUMBER, String.valueOf(donations.values().stream().mapToInt(Integer::intValue).sum())); + // Queue a full level recalculation so the donation is reflected immediately + addon.getManager().recalculateAfterDonation(island); } } @@ -315,7 +317,7 @@ private void handleDonationSlotClick(int slot, Player player) { inventory.setItem(slot, null); Map overflow = player.getInventory().addItem(inSlot); overflow.values().forEach(item -> player.getWorld().dropItemNaturally(player.getLocation(), item)); - user.sendMessage("island.donate.hand.not-block"); + user.sendMessage("island.donate.invalid-item"); } updatePreview(); }); diff --git a/src/main/resources/locales/en-US.yml b/src/main/resources/locales/en-US.yml index 32d4524..08f3835 100755 --- a/src/main/resources/locales/en-US.yml +++ b/src/main/resources/locales/en-US.yml @@ -58,6 +58,7 @@ island: no-permission: "You do not have permission to donate blocks on this island." no-value: "That block has no level value." invalid-amount: "Invalid amount. Use a positive number." + invalid-item: "Only blocks with a configured level value can be donated." empty: "There are no valid blocks to donate." cancelled: "Donation cancelled. Items returned." success: "Donated [number] blocks for [points] points! These points are permanent."