From f99ec773e9297b3f03f89cdf86836c5e326880bf Mon Sep 17 00:00:00 2001 From: tastybento Date: Fri, 14 Aug 2026 07:41:50 -0700 Subject: [PATCH 1/4] feat: draw the /ch chunks map as a dialog of chunk buttons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Chat renders a glyph grid differently on every client — font, chat width and scale all pull it out of shape. The map is now a multi-action dialog laid out at 2 * radius + 1 columns, so every chunk is a fixed-size button and the grid looks the same everywhere. Each button keeps the chat map's glyph, so the legend still reads, and adds a tooltip naming the chunk and, on the frontier, what it costs or how much credit is still missing. Clicking is read-only — it reopens the map with that chunk described at the top; chunks are still claimed by hitting the border. Servers too old for dialogs fall back to the chat map unchanged. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_017EZEwab2kL4i1FNnBYvSmp --- .../commands/island/IslandChunksCommand.java | 10 +- .../chunkblock/panels/ChunksDialog.java | 262 ++++++++++++++++++ src/main/resources/locales/en-US.yml | 10 + .../chunkblock/panels/ChunksDialogTest.java | 181 ++++++++++++ 4 files changed, 462 insertions(+), 1 deletion(-) create mode 100644 src/main/java/world/bentobox/chunkblock/panels/ChunksDialog.java create mode 100644 src/test/java/world/bentobox/chunkblock/panels/ChunksDialogTest.java diff --git a/src/main/java/world/bentobox/chunkblock/commands/island/IslandChunksCommand.java b/src/main/java/world/bentobox/chunkblock/commands/island/IslandChunksCommand.java index 0aa6d43..a9d1e45 100644 --- a/src/main/java/world/bentobox/chunkblock/commands/island/IslandChunksCommand.java +++ b/src/main/java/world/bentobox/chunkblock/commands/island/IslandChunksCommand.java @@ -6,16 +6,19 @@ import net.kyori.adventure.key.Key; import world.bentobox.bentobox.api.commands.CompositeCommand; +import world.bentobox.bentobox.api.dialogs.Dialogs; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.util.Util; import world.bentobox.chunkblock.ChunkBlock; import world.bentobox.chunkblock.chunks.ChunkManager; import world.bentobox.chunkblock.chunks.ChunkManager.ClaimResult; +import world.bentobox.chunkblock.panels.ChunksDialog; /** * /ch chunks — shows how big your island is, how much level credit you can spend, and a - * little chat map of your territory with the chunks you could claim next. + * map of your territory with the chunks you could claim next: a dialog of one button per + * chunk where the server supports dialogs, a chat map of glyphs where it does not. * * @author tastybento */ @@ -63,6 +66,11 @@ public boolean execute(User user, String label, List args) { return false; } Island island = optionalIsland.get(); + // The dialog map is the good one: buttons are the same size on every client. The + // chat map is what servers too old for dialogs get instead. + if (Dialogs.isSupported() && ChunksDialog.show(addon, user, island)) { + return true; + } ChunkManager cm = addon.getChunkManager(); int unlocked = cm.getUnlockedChunkCount(island); int max = cm.getMaxChunks(island); diff --git a/src/main/java/world/bentobox/chunkblock/panels/ChunksDialog.java b/src/main/java/world/bentobox/chunkblock/panels/ChunksDialog.java new file mode 100644 index 0000000..632f5e8 --- /dev/null +++ b/src/main/java/world/bentobox/chunkblock/panels/ChunksDialog.java @@ -0,0 +1,262 @@ +package world.bentobox.chunkblock.panels; + +import java.time.Duration; +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; + +import io.papermc.paper.dialog.Dialog; +import io.papermc.paper.registry.data.dialog.ActionButton; +import io.papermc.paper.registry.data.dialog.DialogBase; +import io.papermc.paper.registry.data.dialog.action.DialogAction; +import io.papermc.paper.registry.data.dialog.body.DialogBody; +import io.papermc.paper.registry.data.dialog.body.PlainMessageDialogBody; +import io.papermc.paper.registry.data.dialog.type.DialogType; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickCallback; +import world.bentobox.bentobox.api.dialogs.Dialogs; +import world.bentobox.bentobox.api.user.User; +import world.bentobox.bentobox.database.objects.Island; +import world.bentobox.bentobox.util.Util; +import world.bentobox.chunkblock.ChunkBlock; +import world.bentobox.chunkblock.chunks.ChunkManager; +import world.bentobox.chunkblock.chunks.ChunkManager.ClaimResult; + +/** + * The territory map of {@code /ch chunks} drawn as a dialog: one button per chunk, laid + * out in a grid. Chat renders a glyph grid differently on every client — font, chat width + * and scale all pull it out of shape — whereas dialog buttons are fixed-size boxes that + * look the same everywhere, and can carry a tooltip explaining the chunk under the mouse. + *

+ * The map is read-only: chunks are still claimed by hitting the border, so clicking a + * chunk only reports what it is and reopens the map. + * + * @author tastybento + */ +public class ChunksDialog { + + /** + * Widest map that still fits the dialog. A grid this wide is {@value #MAX_RADIUS} * 2 + * + 1 buttons across, which is as much as the dialog screen holds before the outer + * columns are squeezed off. + */ + static final int MAX_RADIUS = 6; + + /** Button size in dialog units. Roughly square once the client adds its own padding. */ + private static final int BUTTON_WIDTH = 26; + + /** Width of the close button along the bottom */ + private static final int CLOSE_BUTTON_WIDTH = 100; + + /** How long a chunk button's click callback stays live after the dialog is shown */ + private static final Duration CALLBACK_LIFETIME = Duration.ofMinutes(5); + + private static final String REFERENCE = "chunkblock.chunks.dialog."; + + /** What a chunk is to this island, which decides its glyph and its tooltip */ + enum Kind { + /** The chunk holding the magic block, which can never lock */ + CENTER, + /** Already claimed */ + OWNED, + /** Locked, but adjacent to the island and inside the protection range */ + CLAIMABLE, + /** Locked and not claimable yet */ + LOCKED + } + + /** + * One square of the map. + * + * @param dx chunk offset east of the center chunk + * @param dz chunk offset south of the center chunk + * @param kind what this chunk is to the island + * @param here true if the player is standing in this chunk + */ + record Cell(int dx, int dz, Kind kind, boolean here) { + } + + private final ChunkBlock addon; + private final User user; + private final Island island; + private final int radius; + + ChunksDialog(ChunkBlock addon, User user, Island island) { + this.addon = addon; + this.user = user; + this.island = island; + this.radius = Math.min(MAX_RADIUS, addon.getChunkManager().currentRing(island) + 1); + } + + /** + * Shows the territory map to a player. + * + * @param addon the addon + * @param user the player to show it to + * @param island the island whose territory is mapped + * @return true if the dialog was shown; false if this server cannot show dialogs, in + * which case the caller should fall back to the chat map + */ + public static boolean show(@NonNull ChunkBlock addon, @NonNull User user, @NonNull Island island) { + return show(addon, user, island, null); + } + + /** + * @param selection the chunk description to show above the map, or null for none + */ + private static boolean show(ChunkBlock addon, User user, Island island, @Nullable Component selection) { + if (!Dialogs.isSupported() || !user.isPlayer() || user.getPlayer() == null) { + return false; + } + try { + new ChunksDialog(addon, user, island).open(selection); + return true; + } catch (Exception | LinkageError e) { + // A server that reports dialog support but cannot build one is no reason to + // leave the player with nothing — the caller falls back to the chat map + addon.logError("Could not show the chunks dialog: " + e.getMessage()); + return false; + } + } + + private void open(@Nullable Component selection) { + ChunkManager cm = addon.getChunkManager(); + int unlocked = cm.getUnlockedChunkCount(island); + int max = cm.getMaxChunks(island); + List body = new ArrayList<>(); + if (selection != null) { + body.add(DialogBody.plainMessage(selection)); + } + body.add(DialogBody.plainMessage(text("chunkblock.chunks.info", "[unlocked]", String.valueOf(unlocked), + "[max]", String.valueOf(max), "[credit]", String.valueOf(Math.max(0, cm.getCredit(island))), "[cost]", + String.valueOf(cm.getChunkCost())))); + body.add(DialogBody.plainMessage(text("chunkblock.chunks.rings", "[rings]", + String.valueOf(cm.completedRings(island)), "[max]", String.valueOf(cm.maxRingRadius(island))))); + body.add(DialogBody.plainMessage( + text("chunkblock.chunks.map.legend", "[cost]", String.valueOf(cm.getChunkCost())))); + + DialogBase base = DialogBase + .builder(text("chunkblock.chunks.map.title", "[unlocked]", String.valueOf(unlocked), "[max]", + String.valueOf(max))) + .canCloseWithEscape(true).afterAction(DialogBase.DialogAfterAction.CLOSE).body(body).build(); + + List buttons = cells().stream().map(this::button).toList(); + DialogType type = DialogType.multiAction(buttons).columns(2 * radius + 1) + .exitAction(ActionButton.create(text(REFERENCE + "close"), null, CLOSE_BUTTON_WIDTH, null)).build(); + + user.getPlayer().showDialog(Dialog.create(factory -> factory.empty().base(base).type(type))); + } + + /** + * The map, row by row from north to south — the same reading order the buttons are laid + * out in, so the grid comes out with north at the top. + */ + List cells() { + ChunkManager cm = addon.getChunkManager(); + int centerChunkX = island.getCenter().getBlockX() >> 4; + int centerChunkZ = island.getCenter().getBlockZ() >> 4; + Location location = user.getLocation(); + // A player who is not in this world stands on no chunk of the map + boolean sameWorld = location != null && Util.sameWorld(island.getWorld(), location.getWorld()); + int playerDx = sameWorld ? (location.getBlockX() >> 4) - centerChunkX : Integer.MIN_VALUE; + int playerDz = sameWorld ? (location.getBlockZ() >> 4) - centerChunkZ : Integer.MIN_VALUE; + List cells = new ArrayList<>(); + for (int dz = -radius; dz <= radius; dz++) { + for (int dx = -radius; dx <= radius; dx++) { + Kind kind; + if (dx == 0 && dz == 0) { + kind = Kind.CENTER; + } else if (addon.getOneBlocksIsland(island).isChunkUnlocked(dx, dz)) { + kind = Kind.OWNED; + } else if (cm.checkGeometry(island, centerChunkX + dx, centerChunkZ + dz) == ClaimResult.OK) { + kind = Kind.CLAIMABLE; + } else { + kind = Kind.LOCKED; + } + cells.add(new Cell(dx, dz, kind, dx == playerDx && dz == playerDz)); + } + } + return cells; + } + + private ActionButton button(Cell cell) { + Component tooltip = tooltip(cell); + return ActionButton.builder(glyph(cell)).tooltip(tooltip).width(BUTTON_WIDTH) + .action(DialogAction.customClick((view, audience) -> reopen(tooltip), + ClickCallback.Options.builder().uses(1).lifetime(CALLBACK_LIFETIME).build())) + .build(); + } + + /** + * Puts the map back up with the clicked chunk named at the top. Clicking any button + * closes the dialog, so a map that stays put has to be shown again. + */ + private void reopen(Component selection) { + // Dialog callbacks may arrive off the main thread, and everything the map reads is + // island data + Bukkit.getScheduler().runTask(addon.getPlugin(), () -> show(addon, user, island, selection)); + } + + /** + * The glyph on a chunk's button. The same marks the chat map uses, so the legend reads + * the same either way. + */ + static String glyphReference(Cell cell) { + if (cell.here()) { + return switch (cell.kind()) { + case CENTER -> "&b◉"; + case OWNED, CLAIMABLE -> "&b◆"; + case LOCKED -> "&b◇"; + }; + } + return switch (cell.kind()) { + case CENTER -> "&6◎"; + case OWNED -> "&a■"; + case CLAIMABLE -> "&e▣"; + case LOCKED -> "&7□"; + }; + } + + private Component glyph(Cell cell) { + return Util.parseMiniMessageOrLegacy(glyphReference(cell)); + } + + /** + * What the chunk under the mouse is: its offset from the center chunk and, for a chunk + * that could be claimed next, what it would cost. + */ + private Component tooltip(Cell cell) { + ChunkManager cm = addon.getChunkManager(); + long cost = cm.getChunkCost(); + Component tip = switch (cell.kind()) { + case CENTER -> text(REFERENCE + "tooltip.center"); + case OWNED -> text(REFERENCE + "tooltip.owned", "[x]", offset(cell.dx()), "[z]", offset(cell.dz())); + case CLAIMABLE -> { + long credit = cm.getCredit(island); + yield credit >= cost + ? text(REFERENCE + "tooltip.claimable", "[x]", offset(cell.dx()), "[z]", offset(cell.dz()), + "[cost]", String.valueOf(cost)) + : text(REFERENCE + "tooltip.no-credit", "[x]", offset(cell.dx()), "[z]", offset(cell.dz()), + "[cost]", String.valueOf(cost), "[needed]", String.valueOf(cost - credit)); + } + case LOCKED -> text(REFERENCE + "tooltip.locked", "[x]", offset(cell.dx()), "[z]", offset(cell.dz())); + }; + if (cell.here()) { + tip = tip.append(Component.newline()).append(text(REFERENCE + "tooltip.you-are-here")); + } + return tip; + } + + /** Chunk offsets read better signed: the center is 0,0 and everything else hangs off it */ + private static String offset(int value) { + return value > 0 ? "+" + value : String.valueOf(value); + } + + private Component text(String reference, String... variables) { + return Util.parseMiniMessageOrLegacy(user.getTranslation(reference, variables)); + } +} diff --git a/src/main/resources/locales/en-US.yml b/src/main/resources/locales/en-US.yml index 21e4da2..b268836 100755 --- a/src/main/resources/locales/en-US.yml +++ b/src/main/resources/locales/en-US.yml @@ -61,6 +61,16 @@ chunkblock: row: "&a [row]" legend: "&a ■ yours &e ▣ claimable ([cost] level(s) each) &7 □ locked &6 ◎ center &b ◆ you" you-are-here: "&b You are on the marked chunk." + # The map dialog: one button per chunk. Tooltips show when the mouse is over a chunk. + dialog: + close: "&f Close" + tooltip: + center: "&6 The center chunk — your magic block is here." + owned: "&a Chunk [x], [z] &r&a — yours." + claimable: "&e Chunk [x], [z] &r&e — claimable for &b [cost] &e level(s). Go to that border and hit it." + no-credit: "&e Chunk [x], [z] &r&e — costs &b [cost] &e level(s). You need &c [needed] &e more level(s) of credit." + locked: "&7 Chunk [x], [z] &r&7 — locked. Claim your way out to it." + you-are-here: "&b You are standing here." bossbar: title: "Blocks remaining" # status: "&a Phase blocks &b [total]. Blocks left: [todo]" diff --git a/src/test/java/world/bentobox/chunkblock/panels/ChunksDialogTest.java b/src/test/java/world/bentobox/chunkblock/panels/ChunksDialogTest.java new file mode 100644 index 0000000..82a52a7 --- /dev/null +++ b/src/test/java/world/bentobox/chunkblock/panels/ChunksDialogTest.java @@ -0,0 +1,181 @@ +package world.bentobox.chunkblock.panels; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.List; + +import org.bukkit.Location; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; + +import world.bentobox.bentobox.api.user.User; +import world.bentobox.chunkblock.ChunkBlock; +import world.bentobox.chunkblock.CommonTestSetup; +import world.bentobox.chunkblock.Settings; +import world.bentobox.chunkblock.chunks.ChunkManager; +import world.bentobox.chunkblock.dataobjects.OneBlockIslands; +import world.bentobox.chunkblock.listeners.BlockListener; +import world.bentobox.chunkblock.panels.ChunksDialog.Cell; +import world.bentobox.chunkblock.panels.ChunksDialog.Kind; + +/** + * Tests the grid behind the {@code /ch chunks} dialog — what each chunk button is, and how + * far the map reaches. + */ +class ChunksDialogTest extends CommonTestSetup { + + @Mock + private User user; + @Mock + private ChunkBlock addon; + @Mock + private Location playerLocation; + + private OneBlockIslands data; + private ChunkManager cm; + private long level; + + @Override + @BeforeEach + public void setUp() throws Exception { + super.setUp(); + Settings settings = new Settings(); + when(addon.getSettings()).thenReturn(settings); + data = new OneBlockIslands("test"); + when(addon.getOneBlocksIsland(island)).thenReturn(data); + when(addon.getBlockListener()).thenReturn(mock(BlockListener.class)); + level = 0; + when(addon.getIslandLevel(island)).thenAnswer(i -> level); + cm = new ChunkManager(addon); + when(addon.getChunkManager()).thenReturn(cm); + + // Island center chunk-centered at chunk (0, 0) + when(island.getCenter()).thenReturn(location); + when(island.getWorld()).thenReturn(world); + when(location.getBlockX()).thenReturn(8); + when(location.getBlockZ()).thenReturn(8); + when(island.getProtectionRange()).thenReturn(240); + // The player's own location is a separate mock, so moving them leaves the island put + when(playerLocation.getBlockX()).thenReturn(8); + when(playerLocation.getBlockZ()).thenReturn(8); + when(playerLocation.getWorld()).thenReturn(world); + when(user.getLocation()).thenReturn(playerLocation); + when(world.getName()).thenReturn("chunkblock_world"); + } + + @Test + void testFreshIslandOffersTheChunksTouchingTheCenter() { + List cells = new ChunksDialog(addon, user, island).cells(); + // One claimed chunk, so the map reaches one ring out — 3 x 3 + assertEquals(9, cells.size()); + assertEquals(Kind.CENTER, kindOf(cells, 0, 0)); + // Claims run along the edges, so the four side-by-side chunks are the frontier... + for (int[] offset : new int[][] { { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 } }) { + assertEquals(Kind.CLAIMABLE, kindOf(cells, offset[0], offset[1]), + "chunk " + offset[0] + "," + offset[1]); + } + // ...and the corners, which touch nothing but a diagonal, are not + for (int[] offset : new int[][] { { 1, 1 }, { -1, 1 }, { -1, -1 }, { 1, -1 } }) { + assertEquals(Kind.LOCKED, kindOf(cells, offset[0], offset[1]), "chunk " + offset[0] + "," + offset[1]); + } + } + + @Test + void testClaimedChunksAreOwnedAndTheMapGrowsOutwards() { + level = 8; + for (int[] offset : new int[][] { { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 }, { 1, 1 }, { -1, 1 }, { -1, -1 }, + { 1, -1 } }) { + cm.claim(island, offset[0], offset[1]); + } + List cells = new ChunksDialog(addon, user, island).cells(); + // Ring 1 claimed, so the map reaches ring 2 — 5 x 5 + assertEquals(25, cells.size()); + assertEquals(Kind.CENTER, kindOf(cells, 0, 0)); + assertEquals(Kind.OWNED, kindOf(cells, 1, 0)); + assertEquals(Kind.CLAIMABLE, kindOf(cells, 2, 0)); + } + + @Test + void testChunksOutOfReachAreLocked() { + // Only one chunk claimed, so the far side of a 5 x 5 map is nobody's frontier + level = 8; + cm.claim(island, 1, 0); + List cells = new ChunksDialog(addon, user, island).cells(); + assertEquals(25, cells.size()); + assertEquals(Kind.LOCKED, kindOf(cells, -2, -2)); + assertEquals(Kind.CLAIMABLE, kindOf(cells, 2, 0)); + } + + @Test + void testMapIsCappedAtTheWidestGridTheDialogHolds() { + when(island.getProtectionRange()).thenReturn(2000); + level = 500; + for (int dx = 1; dx <= 20; dx++) { + cm.claim(island, dx, 0); + } + List cells = new ChunksDialog(addon, user, island).cells(); + int width = 2 * ChunksDialog.MAX_RADIUS + 1; + assertEquals(width * width, cells.size()); + } + + @Test + void testThePlayersOwnChunkIsMarked() { + // Stand one chunk east of the center + when(playerLocation.getBlockX()).thenReturn(24); + List cells = new ChunksDialog(addon, user, island).cells(); + assertTrue(cellAt(cells, 1, 0).here()); + assertFalse(cellAt(cells, 0, 0).here()); + // The mark rides on top of what the chunk is, it does not replace it + assertEquals(Kind.CLAIMABLE, kindOf(cells, 1, 0)); + assertEquals("&b◆", ChunksDialog.glyphReference(cellAt(cells, 1, 0))); + assertEquals("&6◎", ChunksDialog.glyphReference(cellAt(cells, 0, 0))); + } + + @Test + void testAPlayerInAnotherWorldMarksNoChunk() { + org.bukkit.World elsewhere = mock(org.bukkit.World.class); + when(elsewhere.getName()).thenReturn("somewhere_else"); + when(playerLocation.getWorld()).thenReturn(elsewhere); + List cells = new ChunksDialog(addon, user, island).cells(); + assertTrue(cells.stream().noneMatch(Cell::here)); + } + + @Test + void testGlyphsMatchTheChatMapLegend() { + assertEquals("&a■", ChunksDialog.glyphReference(new Cell(1, 0, Kind.OWNED, false))); + assertEquals("&e▣", ChunksDialog.glyphReference(new Cell(1, 0, Kind.CLAIMABLE, false))); + assertEquals("&7□", ChunksDialog.glyphReference(new Cell(1, 0, Kind.LOCKED, false))); + assertEquals("&b◉", ChunksDialog.glyphReference(new Cell(0, 0, Kind.CENTER, true))); + assertEquals("&b◇", ChunksDialog.glyphReference(new Cell(3, 3, Kind.LOCKED, true))); + } + + @Test + void testNothingIsShownWhenTheUserIsNotAPlayer() { + when(user.isPlayer()).thenReturn(false); + assertFalse(ChunksDialog.show(addon, user, island)); + } + + @Test + void testCellsAreOrderedRowByRowSoTheGridComesOutNorthUp() { + List cells = new ChunksDialog(addon, user, island).cells(); + // The dialog lays buttons out in list order, filling each row left to right + assertEquals(new Cell(-1, -1, Kind.LOCKED, false), cells.get(0)); + assertEquals(new Cell(0, -1, Kind.CLAIMABLE, false), cells.get(1)); + assertEquals(new Cell(-1, 0, Kind.CLAIMABLE, false), cells.get(3)); + assertEquals(new Cell(1, 1, Kind.LOCKED, false), cells.get(8)); + } + + private Cell cellAt(List cells, int dx, int dz) { + return cells.stream().filter(c -> c.dx() == dx && c.dz() == dz).findFirst() + .orElseThrow(() -> new AssertionError("no cell at " + dx + "," + dz)); + } + + private Kind kindOf(List cells, int dx, int dz) { + return cellAt(cells, dx, dz).kind(); + } +} From aea65790214aea85bc24808483fc44bd5c98fc4c Mon Sep 17 00:00:00 2001 From: tastybento Date: Fri, 14 Aug 2026 07:45:13 -0700 Subject: [PATCH 2/4] i18n: sync the zh-TW chunk gating keys Adds the dialog map's close button and six tooltips, plus the three ring keys the dialog body and the ring announcements use. Also completes the map legend, which stopped at the locked glyph and never got the center and you-are-here marks. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_017EZEwab2kL4i1FNnBYvSmp --- src/main/resources/locales/zh-TW.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/resources/locales/zh-TW.yml b/src/main/resources/locales/zh-TW.yml index f6c40ce..3811988 100644 --- a/src/main/resources/locales/zh-TW.yml +++ b/src/main/resources/locales/zh-TW.yml @@ -191,16 +191,28 @@ chunkblock: claim-hint: '&e 撞擊邊界即可花費 &b [cost] &e 點等級額度認領這個區塊!你目前有 &b [credit] &e 點額度。' claimed: '&a &l 區塊已認領!&r&a 你的島嶼現在有 &b [number] &a 個區塊。剩餘額度:&b [credit] &a 點等級。' credit: '&a 你還可以認領 &b [count] &a 個區塊!前往你的邊界,朝想擴張的方向撞擊它。' + dialog: + close: '&f 關閉' + tooltip: + center: '&6 中心區塊 — 你的魔法方塊就在這裡。' + owned: '&a 區塊 [x], [z] &r&a — 你的。' + claimable: '&e 區塊 [x], [z] &r&e — 可用 &b [cost] &e 點等級額度認領。前往該邊界並撞擊它。' + no-credit: '&e 區塊 [x], [z] &r&e — 需要 &b [cost] &e 點等級額度。你還缺 &c [needed] &e 點額度。' + locked: '&7 區塊 [x], [z] &r&7 — 已鎖定。持續向外認領才能到達。' + you-are-here: '&b 你正站在這裡。' ejected: '&c 你所在的區塊被重新鎖定,因此你已被移動到安全地點。' entry-denied: '&c 那個區塊已被鎖定。' info: '&a 區塊:&b [unlocked]&a/&b[max]&a。額度:&b [credit] &a 點等級 — 認領一個區塊需要 &b [cost]&a。' locked: '&c 你無法碰觸那裡 — 該區塊已被鎖定。' map: - legend: '&a ■ 你的 &e ▣ 可認領(每個 [cost] 點等級) &7 □ 已鎖定' + legend: '&a ■ 你的 &e ▣ 可認領(每個 [cost] 點等級) &7 □ 已鎖定 &6 ◎ 中心 &b ◆ 你' row: '&a [row]' title: '&a 你的島嶼領土([unlocked]/[max] 個區塊):' you-are-here: '&b 你目前站在標記的區塊上。' max-reached: '&d 你的島嶼已達到最大尺寸 [number] 個區塊!' no-credit: '&c 你還需要 &b [needed] &c 點等級額度才能認領這個區塊。' relocked: '&c 你的島嶼等級下降 — [count] 個區塊已重新鎖定(由最新認領的開始)。提升等級即可重新奪回!' + ring-broadcast: '&6 [name] 的島嶼已完成第 &b [ring] &6 圈 — &b [chunks] &6 個區塊,而且還在成長!' + ring-complete: '&6 &l 第 [ring] 圈完成!&r&6 島嶼周圍的整圈都是你的了 — 總共 &b [chunks] &6 個區塊。' + rings: '&a 已完成圈數:&b [rings] &a / &b [max]&a。' sethome-denied: '&c 你不能在已鎖定的區塊內設定重生點。' From 86faa128f3f862d223ba2acff943f4fac004ec7f Mon Sep 17 00:00:00 2001 From: tastybento Date: Fri, 14 Aug 2026 07:56:31 -0700 Subject: [PATCH 3/4] refactor: keep the chunk map's colours in Components, not colour codes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The map was building glyphs as legacy "&b◉" strings and, for the chat map, splicing a whole row of them into the [row] variable of a translation. With locale text moving to MiniMessage that is a bug waiting to happen: colour codes inside a MiniMessage line are not formatting, they are text. Pulls the grid out into ChunkMap, shared by the dialog and the chat fallback, and hands out glyphs as coloured Components. The chat map, which can only put text into [row], serializes those Components to MiniMessage instead. Dialog text now goes through User#getTranslationAsComponent rather than parsing the translation here, and the new dialog locale entries are written in MiniMessage. Verified both ways round: a MiniMessage row renders identically under a legacy "&a [row]" template and a MiniMessage one, so locale files already on disk keep working. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_017EZEwab2kL4i1FNnBYvSmp --- CLAUDE.md | 6 + .../bentobox/chunkblock/chunks/ChunkMap.java | 135 ++++++++++++++ .../commands/island/IslandChunksCommand.java | 36 ++-- .../chunkblock/panels/ChunksDialog.java | 87 +-------- src/main/resources/locales/en-US.yml | 15 +- src/main/resources/locales/zh-TW.yml | 14 +- .../chunkblock/chunks/ChunkMapTest.java | 174 ++++++++++++++++++ .../island/IslandChunksCommandTest.java | 25 ++- .../chunkblock/panels/ChunksDialogTest.java | 109 +---------- 9 files changed, 375 insertions(+), 226 deletions(-) create mode 100644 src/main/java/world/bentobox/chunkblock/chunks/ChunkMap.java create mode 100644 src/test/java/world/bentobox/chunkblock/chunks/ChunkMapTest.java diff --git a/CLAUDE.md b/CLAUDE.md index c027fb1..3a30d42 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -65,6 +65,12 @@ mvn verify + SonarCloud), Jenkins at ci.codemc.org builds release jars on master - Locale keys live under `chunkblock.chunks.*` for gating messages (en-US.yml is the source of truth; other locales lag until synced). +- **New locale text is MiniMessage** (``, ``); the old `&`-codes still parse, + so files are mixed. Never build colored text yourself and splice it into a translation — + go through `User#getTranslationAsComponent` / `sendMessage(Component)` and keep colors in + Components. Where a formatted fragment really must reach a `[variable]` (the chat map's + `[row]`), serialize it to MiniMessage with `Util.getMiniMessage()` rather than emitting + `&` codes into what may be a MiniMessage line. - Public API for other plugins: `ChunkUnlockEvent`/`ChunkRelockEvent` (per chunk, carry claim-order index), request handler `unlocked-chunks`. - Tests extend `CommonTestSetup` (mocked Bukkit/BentoBox); `ChunkManagerTest` and the diff --git a/src/main/java/world/bentobox/chunkblock/chunks/ChunkMap.java b/src/main/java/world/bentobox/chunkblock/chunks/ChunkMap.java new file mode 100644 index 0000000..f85f299 --- /dev/null +++ b/src/main/java/world/bentobox/chunkblock/chunks/ChunkMap.java @@ -0,0 +1,135 @@ +package world.bentobox.chunkblock.chunks; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Location; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import world.bentobox.bentobox.database.objects.Island; +import world.bentobox.bentobox.util.Util; +import world.bentobox.chunkblock.ChunkBlock; +import world.bentobox.chunkblock.chunks.ChunkManager.ClaimResult; + +/** + * The island's territory as a grid of squares, shared by the two things that draw it: the + * dialog map of {@code /ch chunks}, which makes a button of every chunk, and the chat map + * it falls back to. + *

+ * Glyphs are handed out as {@link Component Components} rather than colored text. A + * component can be put in a dialog button as it is and serialized to MiniMessage for the + * chat map, whereas a string of color codes has to be spliced into translated text, which + * is where formatting quietly breaks. + * + * @author tastybento + */ +public final class ChunkMap { + + /** What a chunk is to an island, which decides its glyph and what the map says about it */ + public enum Kind { + /** The chunk holding the magic block, which can never lock */ + CENTER, + /** Already claimed */ + OWNED, + /** Locked, but adjacent to the island and inside the protection range */ + CLAIMABLE, + /** Locked and not claimable yet */ + LOCKED + } + + /** + * One square of the map. + * + * @param dx chunk offset east of the center chunk + * @param dz chunk offset south of the center chunk + * @param kind what this chunk is to the island + * @param here true if the viewer is standing in this chunk + */ + public record Cell(int dx, int dz, Kind kind, boolean here) { + } + + private ChunkMap() { + // Utility class + } + + /** + * Maps the territory around an island, row by row from north to south and west to east + * within a row — the order both maps draw in. + * + * @param addon the addon + * @param island the island whose territory is mapped + * @param viewer where the player is standing, or null if they are nowhere on the map + * @param radius how many chunks out from the center the map reaches + * @return the cells of a square map (2 * radius + 1) chunks across + */ + public static List cells(@NonNull ChunkBlock addon, @NonNull Island island, @Nullable Location viewer, + int radius) { + ChunkManager cm = addon.getChunkManager(); + int centerChunkX = island.getCenter().getBlockX() >> 4; + int centerChunkZ = island.getCenter().getBlockZ() >> 4; + // A player who is not in this world stands on no chunk of the map + boolean sameWorld = viewer != null && Util.sameWorld(island.getWorld(), viewer.getWorld()); + int playerDx = sameWorld ? (viewer.getBlockX() >> 4) - centerChunkX : Integer.MIN_VALUE; + int playerDz = sameWorld ? (viewer.getBlockZ() >> 4) - centerChunkZ : Integer.MIN_VALUE; + List cells = new ArrayList<>(); + for (int dz = -radius; dz <= radius; dz++) { + for (int dx = -radius; dx <= radius; dx++) { + Kind kind; + if (dx == 0 && dz == 0) { + kind = Kind.CENTER; + } else if (addon.getOneBlocksIsland(island).isChunkUnlocked(dx, dz)) { + kind = Kind.OWNED; + } else if (cm.checkGeometry(island, centerChunkX + dx, centerChunkZ + dz) == ClaimResult.OK) { + kind = Kind.CLAIMABLE; + } else { + kind = Kind.LOCKED; + } + cells.add(new Cell(dx, dz, kind, dx == playerDx && dz == playerDz)); + } + } + return cells; + } + + /** + * The glyph standing for a chunk. The chunk the player is on keeps its own outline but + * takes the marker color, so the map still says what that chunk is. + * + * @param cell the chunk + * @return the glyph, colored + */ + @NonNull + public static Component glyph(@NonNull Cell cell) { + String mark = switch (cell.kind()) { + case CENTER -> cell.here() ? "◉" : "◎"; + case OWNED -> cell.here() ? "◆" : "■"; + case CLAIMABLE -> cell.here() ? "◆" : "▣"; + case LOCKED -> cell.here() ? "◇" : "□"; + }; + return Component.text(mark, cell.here() ? NamedTextColor.AQUA : color(cell.kind())); + } + + /** + * The glyph as MiniMessage text, for the chat map: a whole row of these goes into the + * {@code [row]} variable of a translation, so the row has to be text by the time it + * gets there — MiniMessage text, matching the locale files, never color codes. + * + * @param cell the chunk + * @return the glyph as MiniMessage + */ + @NonNull + public static String glyphText(@NonNull Cell cell) { + return Util.getMiniMessage().serialize(glyph(cell)); + } + + private static NamedTextColor color(Kind kind) { + return switch (kind) { + case CENTER -> NamedTextColor.GOLD; + case OWNED -> NamedTextColor.GREEN; + case CLAIMABLE -> NamedTextColor.YELLOW; + case LOCKED -> NamedTextColor.GRAY; + }; + } +} diff --git a/src/main/java/world/bentobox/chunkblock/commands/island/IslandChunksCommand.java b/src/main/java/world/bentobox/chunkblock/commands/island/IslandChunksCommand.java index a9d1e45..caa2938 100644 --- a/src/main/java/world/bentobox/chunkblock/commands/island/IslandChunksCommand.java +++ b/src/main/java/world/bentobox/chunkblock/commands/island/IslandChunksCommand.java @@ -3,6 +3,7 @@ import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.stream.Collectors; import net.kyori.adventure.key.Key; import world.bentobox.bentobox.api.commands.CompositeCommand; @@ -12,7 +13,8 @@ import world.bentobox.bentobox.util.Util; import world.bentobox.chunkblock.ChunkBlock; import world.bentobox.chunkblock.chunks.ChunkManager; -import world.bentobox.chunkblock.chunks.ChunkManager.ClaimResult; +import world.bentobox.chunkblock.chunks.ChunkMap; +import world.bentobox.chunkblock.chunks.ChunkMap.Cell; import world.bentobox.chunkblock.panels.ChunksDialog; /** @@ -92,30 +94,18 @@ public boolean execute(User user, String label, List args) { private void showMap(User user, Island island, int unlocked, int max) { ChunkManager cm = addon.getChunkManager(); int radius = Math.min(MAX_MAP_RADIUS, cm.currentRing(island) + 1); - int centerChunkX = island.getCenter().getBlockX() >> 4; - int centerChunkZ = island.getCenter().getBlockZ() >> 4; - int playerDx = (user.getLocation().getBlockX() >> 4) - centerChunkX; - int playerDz = (user.getLocation().getBlockZ() >> 4) - centerChunkZ; + int width = 2 * radius + 1; + List cells = ChunkMap.cells(addon, island, user.getLocation(), radius); user.sendMessage("chunkblock.chunks.map.title", "[unlocked]", String.valueOf(unlocked), "[max]", String.valueOf(max)); - for (int dz = -radius; dz <= radius; dz++) { - StringBuilder row = new StringBuilder(); - for (int dx = -radius; dx <= radius; dx++) { - boolean here = dx == playerDx && dz == playerDz; - if (dx == 0 && dz == 0) { - // The center chunk holds the magic block and can never lock, so it is - // marked in its own right — without it the grid has nothing to orient by - row.append(here ? "&b◉" : "&6◎"); - } else if (addon.getOneBlocksIsland(island).isChunkUnlocked(dx, dz)) { - row.append(here ? "&b◆" : "&a■"); - } else if (cm.checkGeometry(island, centerChunkX + dx, centerChunkZ + dz) == ClaimResult.OK) { - row.append(here ? "&b◆" : "&e▣"); - } else { - row.append(here ? "&b◇" : "&7□"); - } - } - user.sendMessage(user.getTranslationAsComponent("chunkblock.chunks.map.row", "[row]", row.toString()) - .font(MONOSPACE_FONT)); + for (int row = 0; row < width; row++) { + // A row goes into the [row] variable of a translation, so it has to be text by + // then. It is MiniMessage text, the same format the locale files are written + // in — color codes spliced into a MiniMessage line would show up raw. + String glyphs = cells.subList(row * width, (row + 1) * width).stream().map(ChunkMap::glyphText) + .collect(Collectors.joining()); + user.sendMessage( + user.getTranslationAsComponent("chunkblock.chunks.map.row", "[row]", glyphs).font(MONOSPACE_FONT)); } user.sendMessage("chunkblock.chunks.map.legend", "[cost]", String.valueOf(cm.getChunkCost())); } diff --git a/src/main/java/world/bentobox/chunkblock/panels/ChunksDialog.java b/src/main/java/world/bentobox/chunkblock/panels/ChunksDialog.java index 632f5e8..ae23b3f 100644 --- a/src/main/java/world/bentobox/chunkblock/panels/ChunksDialog.java +++ b/src/main/java/world/bentobox/chunkblock/panels/ChunksDialog.java @@ -5,7 +5,6 @@ import java.util.List; import org.bukkit.Bukkit; -import org.bukkit.Location; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; @@ -21,10 +20,10 @@ import world.bentobox.bentobox.api.dialogs.Dialogs; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.Island; -import world.bentobox.bentobox.util.Util; import world.bentobox.chunkblock.ChunkBlock; import world.bentobox.chunkblock.chunks.ChunkManager; -import world.bentobox.chunkblock.chunks.ChunkManager.ClaimResult; +import world.bentobox.chunkblock.chunks.ChunkMap; +import world.bentobox.chunkblock.chunks.ChunkMap.Cell; /** * The territory map of {@code /ch chunks} drawn as a dialog: one button per chunk, laid @@ -57,29 +56,6 @@ public class ChunksDialog { private static final String REFERENCE = "chunkblock.chunks.dialog."; - /** What a chunk is to this island, which decides its glyph and its tooltip */ - enum Kind { - /** The chunk holding the magic block, which can never lock */ - CENTER, - /** Already claimed */ - OWNED, - /** Locked, but adjacent to the island and inside the protection range */ - CLAIMABLE, - /** Locked and not claimable yet */ - LOCKED - } - - /** - * One square of the map. - * - * @param dx chunk offset east of the center chunk - * @param dz chunk offset south of the center chunk - * @param kind what this chunk is to the island - * @param here true if the player is standing in this chunk - */ - record Cell(int dx, int dz, Kind kind, boolean here) { - } - private final ChunkBlock addon; private final User user; private final Island island; @@ -156,36 +132,12 @@ private void open(@Nullable Component selection) { * out in, so the grid comes out with north at the top. */ List cells() { - ChunkManager cm = addon.getChunkManager(); - int centerChunkX = island.getCenter().getBlockX() >> 4; - int centerChunkZ = island.getCenter().getBlockZ() >> 4; - Location location = user.getLocation(); - // A player who is not in this world stands on no chunk of the map - boolean sameWorld = location != null && Util.sameWorld(island.getWorld(), location.getWorld()); - int playerDx = sameWorld ? (location.getBlockX() >> 4) - centerChunkX : Integer.MIN_VALUE; - int playerDz = sameWorld ? (location.getBlockZ() >> 4) - centerChunkZ : Integer.MIN_VALUE; - List cells = new ArrayList<>(); - for (int dz = -radius; dz <= radius; dz++) { - for (int dx = -radius; dx <= radius; dx++) { - Kind kind; - if (dx == 0 && dz == 0) { - kind = Kind.CENTER; - } else if (addon.getOneBlocksIsland(island).isChunkUnlocked(dx, dz)) { - kind = Kind.OWNED; - } else if (cm.checkGeometry(island, centerChunkX + dx, centerChunkZ + dz) == ClaimResult.OK) { - kind = Kind.CLAIMABLE; - } else { - kind = Kind.LOCKED; - } - cells.add(new Cell(dx, dz, kind, dx == playerDx && dz == playerDz)); - } - } - return cells; + return ChunkMap.cells(addon, island, user.getLocation(), radius); } private ActionButton button(Cell cell) { Component tooltip = tooltip(cell); - return ActionButton.builder(glyph(cell)).tooltip(tooltip).width(BUTTON_WIDTH) + return ActionButton.builder(ChunkMap.glyph(cell)).tooltip(tooltip).width(BUTTON_WIDTH) .action(DialogAction.customClick((view, audience) -> reopen(tooltip), ClickCallback.Options.builder().uses(1).lifetime(CALLBACK_LIFETIME).build())) .build(); @@ -201,30 +153,6 @@ private void reopen(Component selection) { Bukkit.getScheduler().runTask(addon.getPlugin(), () -> show(addon, user, island, selection)); } - /** - * The glyph on a chunk's button. The same marks the chat map uses, so the legend reads - * the same either way. - */ - static String glyphReference(Cell cell) { - if (cell.here()) { - return switch (cell.kind()) { - case CENTER -> "&b◉"; - case OWNED, CLAIMABLE -> "&b◆"; - case LOCKED -> "&b◇"; - }; - } - return switch (cell.kind()) { - case CENTER -> "&6◎"; - case OWNED -> "&a■"; - case CLAIMABLE -> "&e▣"; - case LOCKED -> "&7□"; - }; - } - - private Component glyph(Cell cell) { - return Util.parseMiniMessageOrLegacy(glyphReference(cell)); - } - /** * What the chunk under the mouse is: its offset from the center chunk and, for a chunk * that could be claimed next, what it would cost. @@ -256,7 +184,12 @@ private static String offset(int value) { return value > 0 ? "+" + value : String.valueOf(value); } + /** + * Translates a locale key straight to a component. Going through the user rather than + * parsing the translated string here keeps every message on BentoBox's own path, + * whether the locale file is written in MiniMessage or in old color codes. + */ private Component text(String reference, String... variables) { - return Util.parseMiniMessageOrLegacy(user.getTranslation(reference, variables)); + return user.getTranslationAsComponent(reference, variables); } } diff --git a/src/main/resources/locales/en-US.yml b/src/main/resources/locales/en-US.yml index b268836..b2710a7 100755 --- a/src/main/resources/locales/en-US.yml +++ b/src/main/resources/locales/en-US.yml @@ -62,15 +62,16 @@ chunkblock: legend: "&a ■ yours &e ▣ claimable ([cost] level(s) each) &7 □ locked &6 ◎ center &b ◆ you" you-are-here: "&b You are on the marked chunk." # The map dialog: one button per chunk. Tooltips show when the mouse is over a chunk. + # These are MiniMessage, which is what new text should use — the old &-codes still work. dialog: - close: "&f Close" + close: "Close" tooltip: - center: "&6 The center chunk — your magic block is here." - owned: "&a Chunk [x], [z] &r&a — yours." - claimable: "&e Chunk [x], [z] &r&e — claimable for &b [cost] &e level(s). Go to that border and hit it." - no-credit: "&e Chunk [x], [z] &r&e — costs &b [cost] &e level(s). You need &c [needed] &e more level(s) of credit." - locked: "&7 Chunk [x], [z] &r&7 — locked. Claim your way out to it." - you-are-here: "&b You are standing here." + center: "The center chunk — your magic block is here." + owned: "Chunk [x], [z] — yours." + claimable: "Chunk [x], [z] — claimable for [cost] level(s). Go to that border and hit it." + no-credit: "Chunk [x], [z] — costs [cost] level(s). You need [needed] more level(s) of credit." + locked: "Chunk [x], [z] — locked. Claim your way out to it." + you-are-here: "You are standing here." bossbar: title: "Blocks remaining" # status: "&a Phase blocks &b [total]. Blocks left: [todo]" diff --git a/src/main/resources/locales/zh-TW.yml b/src/main/resources/locales/zh-TW.yml index 3811988..f4648b9 100644 --- a/src/main/resources/locales/zh-TW.yml +++ b/src/main/resources/locales/zh-TW.yml @@ -192,14 +192,14 @@ chunkblock: claimed: '&a &l 區塊已認領!&r&a 你的島嶼現在有 &b [number] &a 個區塊。剩餘額度:&b [credit] &a 點等級。' credit: '&a 你還可以認領 &b [count] &a 個區塊!前往你的邊界,朝想擴張的方向撞擊它。' dialog: - close: '&f 關閉' + close: '關閉' tooltip: - center: '&6 中心區塊 — 你的魔法方塊就在這裡。' - owned: '&a 區塊 [x], [z] &r&a — 你的。' - claimable: '&e 區塊 [x], [z] &r&e — 可用 &b [cost] &e 點等級額度認領。前往該邊界並撞擊它。' - no-credit: '&e 區塊 [x], [z] &r&e — 需要 &b [cost] &e 點等級額度。你還缺 &c [needed] &e 點額度。' - locked: '&7 區塊 [x], [z] &r&7 — 已鎖定。持續向外認領才能到達。' - you-are-here: '&b 你正站在這裡。' + center: '中心區塊 — 你的魔法方塊就在這裡。' + owned: '區塊 [x], [z] — 你的。' + claimable: '區塊 [x], [z] — 可用 [cost] 點等級額度認領。前往該邊界並撞擊它。' + no-credit: '區塊 [x], [z] — 需要 [cost] 點等級額度。你還缺 [needed] 點額度。' + locked: '區塊 [x], [z] — 已鎖定。持續向外認領才能到達。' + you-are-here: '你正站在這裡。' ejected: '&c 你所在的區塊被重新鎖定,因此你已被移動到安全地點。' entry-denied: '&c 那個區塊已被鎖定。' info: '&a 區塊:&b [unlocked]&a/&b[max]&a。額度:&b [credit] &a 點等級 — 認領一個區塊需要 &b [cost]&a。' diff --git a/src/test/java/world/bentobox/chunkblock/chunks/ChunkMapTest.java b/src/test/java/world/bentobox/chunkblock/chunks/ChunkMapTest.java new file mode 100644 index 0000000..667a9e3 --- /dev/null +++ b/src/test/java/world/bentobox/chunkblock/chunks/ChunkMapTest.java @@ -0,0 +1,174 @@ +package world.bentobox.chunkblock.chunks; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.List; + +import org.bukkit.Location; +import org.bukkit.World; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.format.NamedTextColor; +import world.bentobox.chunkblock.ChunkBlock; +import world.bentobox.chunkblock.CommonTestSetup; +import world.bentobox.chunkblock.Settings; +import world.bentobox.chunkblock.chunks.ChunkMap.Cell; +import world.bentobox.chunkblock.chunks.ChunkMap.Kind; +import world.bentobox.chunkblock.dataobjects.OneBlockIslands; +import world.bentobox.chunkblock.listeners.BlockListener; + +/** + * Tests the territory grid behind both maps of {@code /ch chunks} — what each chunk is, and + * the glyph it is drawn with. + */ +class ChunkMapTest extends CommonTestSetup { + + @Mock + private ChunkBlock addon; + @Mock + private Location playerLocation; + + private OneBlockIslands data; + private ChunkManager cm; + private long level; + + @Override + @BeforeEach + public void setUp() throws Exception { + super.setUp(); + Settings settings = new Settings(); + when(addon.getSettings()).thenReturn(settings); + data = new OneBlockIslands("test"); + when(addon.getOneBlocksIsland(island)).thenReturn(data); + when(addon.getBlockListener()).thenReturn(mock(BlockListener.class)); + level = 0; + when(addon.getIslandLevel(island)).thenAnswer(i -> level); + cm = new ChunkManager(addon); + when(addon.getChunkManager()).thenReturn(cm); + + // Island center chunk-centered at chunk (0, 0) + when(island.getCenter()).thenReturn(location); + when(island.getWorld()).thenReturn(world); + when(location.getBlockX()).thenReturn(8); + when(location.getBlockZ()).thenReturn(8); + when(island.getProtectionRange()).thenReturn(240); + // The player's own location is a separate mock, so moving them leaves the island put + when(playerLocation.getBlockX()).thenReturn(8); + when(playerLocation.getBlockZ()).thenReturn(8); + when(playerLocation.getWorld()).thenReturn(world); + when(world.getName()).thenReturn("chunkblock_world"); + } + + @Test + void testFreshIslandOffersTheChunksTouchingTheCenter() { + List cells = ChunkMap.cells(addon, island, playerLocation, 1); + assertEquals(9, cells.size()); + assertEquals(Kind.CENTER, kindOf(cells, 0, 0)); + // Claims run along the edges, so the four side-by-side chunks are the frontier... + for (int[] offset : new int[][] { { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 } }) { + assertEquals(Kind.CLAIMABLE, kindOf(cells, offset[0], offset[1]), + "chunk " + offset[0] + "," + offset[1]); + } + // ...and the corners, which touch nothing but a diagonal, are not + for (int[] offset : new int[][] { { 1, 1 }, { -1, 1 }, { -1, -1 }, { 1, -1 } }) { + assertEquals(Kind.LOCKED, kindOf(cells, offset[0], offset[1]), "chunk " + offset[0] + "," + offset[1]); + } + } + + @Test + void testClaimedChunksAreOwnedAndTheFrontierMovesOut() { + level = 8; + for (int[] offset : new int[][] { { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 }, { 1, 1 }, { -1, 1 }, { -1, -1 }, + { 1, -1 } }) { + cm.claim(island, offset[0], offset[1]); + } + List cells = ChunkMap.cells(addon, island, playerLocation, 2); + assertEquals(25, cells.size()); + assertEquals(Kind.CENTER, kindOf(cells, 0, 0)); + assertEquals(Kind.OWNED, kindOf(cells, 1, 0)); + assertEquals(Kind.CLAIMABLE, kindOf(cells, 2, 0)); + } + + @Test + void testChunksOutOfReachAreLocked() { + level = 8; + cm.claim(island, 1, 0); + List cells = ChunkMap.cells(addon, island, playerLocation, 2); + assertEquals(Kind.LOCKED, kindOf(cells, -2, -2)); + assertEquals(Kind.CLAIMABLE, kindOf(cells, 2, 0)); + } + + @Test + void testThePlayersOwnChunkIsMarked() { + // Stand one chunk east of the center + when(playerLocation.getBlockX()).thenReturn(24); + List cells = ChunkMap.cells(addon, island, playerLocation, 1); + assertTrue(cellAt(cells, 1, 0).here()); + assertFalse(cellAt(cells, 0, 0).here()); + // The mark rides on top of what the chunk is, it does not replace it + assertEquals(Kind.CLAIMABLE, kindOf(cells, 1, 0)); + } + + @Test + void testAPlayerInAnotherWorldMarksNoChunk() { + World elsewhere = mock(World.class); + when(elsewhere.getName()).thenReturn("somewhere_else"); + when(playerLocation.getWorld()).thenReturn(elsewhere); + assertTrue(ChunkMap.cells(addon, island, playerLocation, 1).stream().noneMatch(Cell::here)); + } + + @Test + void testCellsAreOrderedRowByRowSoTheGridComesOutNorthUp() { + List cells = ChunkMap.cells(addon, island, playerLocation, 1); + // Both maps lay the cells out in list order, filling each row from west to east + assertEquals(new Cell(-1, -1, Kind.LOCKED, false), cells.get(0)); + assertEquals(new Cell(0, -1, Kind.CLAIMABLE, false), cells.get(1)); + assertEquals(new Cell(-1, 0, Kind.CLAIMABLE, false), cells.get(3)); + assertEquals(new Cell(1, 1, Kind.LOCKED, false), cells.get(8)); + } + + @Test + void testGlyphsAreColouredComponentsNotColourCodes() { + assertGlyph("■", NamedTextColor.GREEN, new Cell(1, 0, Kind.OWNED, false)); + assertGlyph("▣", NamedTextColor.YELLOW, new Cell(1, 0, Kind.CLAIMABLE, false)); + assertGlyph("□", NamedTextColor.GRAY, new Cell(1, 0, Kind.LOCKED, false)); + assertGlyph("◎", NamedTextColor.GOLD, new Cell(0, 0, Kind.CENTER, false)); + } + + @Test + void testTheChunkThePlayerIsOnKeepsItsOutlineInTheMarkerColour() { + assertGlyph("◉", NamedTextColor.AQUA, new Cell(0, 0, Kind.CENTER, true)); + assertGlyph("◆", NamedTextColor.AQUA, new Cell(1, 0, Kind.OWNED, true)); + assertGlyph("◇", NamedTextColor.AQUA, new Cell(3, 3, Kind.LOCKED, true)); + } + + @Test + void testGlyphTextIsMiniMessageSoItCanGoIntoATranslation() { + // Legacy colour codes here would show up raw in a MiniMessage locale line + assertEquals("■", ChunkMap.glyphText(new Cell(1, 0, Kind.OWNED, false))); + assertEquals("◆", ChunkMap.glyphText(new Cell(1, 0, Kind.CLAIMABLE, true))); + } + + private void assertGlyph(String mark, NamedTextColor colour, Cell cell) { + Component glyph = ChunkMap.glyph(cell); + assertEquals(mark, ((TextComponent) glyph).content()); + assertEquals(colour, glyph.color()); + } + + private Cell cellAt(List cells, int dx, int dz) { + return cells.stream().filter(c -> c.dx() == dx && c.dz() == dz).findFirst() + .orElseThrow(() -> new AssertionError("no cell at " + dx + "," + dz)); + } + + private Kind kindOf(List cells, int dx, int dz) { + return cellAt(cells, dx, dz).kind(); + } +} diff --git a/src/test/java/world/bentobox/chunkblock/commands/island/IslandChunksCommandTest.java b/src/test/java/world/bentobox/chunkblock/commands/island/IslandChunksCommandTest.java index 98b7b41..39af0d2 100644 --- a/src/test/java/world/bentobox/chunkblock/commands/island/IslandChunksCommandTest.java +++ b/src/test/java/world/bentobox/chunkblock/commands/island/IslandChunksCommandTest.java @@ -10,6 +10,7 @@ import static org.mockito.Mockito.when; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Optional; @@ -69,12 +70,15 @@ public void setUp() throws Exception { // Island center chunk-centered at chunk (0, 0) when(island.getCenter()).thenReturn(location); + when(island.getWorld()).thenReturn(world); + when(world.getName()).thenReturn("chunkblock_world"); when(location.getBlockX()).thenReturn(8); when(location.getBlockZ()).thenReturn(8); when(island.getProtectionRange()).thenReturn(240); // The player's own location is a separate mock, so moving them leaves the island put when(playerLocation.getBlockX()).thenReturn(8); when(playerLocation.getBlockZ()).thenReturn(8); + when(playerLocation.getWorld()).thenReturn(world); when(user.getLocation()).thenReturn(playerLocation); when(user.getWorld()).thenReturn(world); when(im.getIslandAt(playerLocation)).thenReturn(Optional.of(island)); @@ -101,7 +105,7 @@ void testCenterChunkIsMarkedWhenThePlayerStandsOnIt() { List rows = mapRows(); // Fresh island: one claimed chunk, so the map reaches one ring out — 3 x 3 assertEquals(3, rows.size()); - assertEquals("&b◉", middleGlyph(rows.get(1))); + assertEquals("◉", middleGlyph(rows.get(1))); } @Test @@ -110,7 +114,7 @@ void testCenterChunkIsMarkedWhenThePlayerIsElsewhere() { when(playerLocation.getBlockX()).thenReturn(24); assertTrue(command.execute(user, "", List.of())); List rows = mapRows(); - assertEquals("&6◎", middleGlyph(rows.get(1))); + assertEquals("◎", middleGlyph(rows.get(1))); } @Test @@ -125,9 +129,9 @@ void testCenterKeepsItsMarkWhileTerritoryGrows() { // Ring 1 claimed, so the map reaches ring 2 — 5 x 5 assertEquals(5, rows.size()); String center = rows.get(2); - assertEquals("&b◉", middleGlyph(center)); + assertEquals("◉", middleGlyph(center)); // The eight chunks around the center are owned, not confused with the center itself - assertEquals("&a■&b◉&a■", center.substring(center.indexOf("&b◉") - 3, center.indexOf("&b◉") + 6)); + assertEquals(List.of("■", "◉", "■"), glyphs(center).subList(1, 4)); } @Test @@ -159,11 +163,14 @@ private List mapRows() { return rows; } - /** The glyph at the middle of a row, colour code included */ + /** A row split back into its glyphs, each one a MiniMessage colour tag plus its mark */ + private List glyphs(String row) { + return Arrays.stream(row.split("(?=<)")).filter(s -> !s.isEmpty()).toList(); + } + + /** The glyph at the middle of a row, colour tag included */ private String middleGlyph(String row) { - // Every glyph is a two-character colour code plus one character - int glyphs = row.length() / 3; - int middle = (glyphs / 2) * 3; - return row.substring(middle, middle + 3); + List glyphs = glyphs(row); + return glyphs.get(glyphs.size() / 2); } } diff --git a/src/test/java/world/bentobox/chunkblock/panels/ChunksDialogTest.java b/src/test/java/world/bentobox/chunkblock/panels/ChunksDialogTest.java index 82a52a7..8f6735a 100644 --- a/src/test/java/world/bentobox/chunkblock/panels/ChunksDialogTest.java +++ b/src/test/java/world/bentobox/chunkblock/panels/ChunksDialogTest.java @@ -2,12 +2,9 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import java.util.List; - import org.bukkit.Location; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -20,12 +17,10 @@ import world.bentobox.chunkblock.chunks.ChunkManager; import world.bentobox.chunkblock.dataobjects.OneBlockIslands; import world.bentobox.chunkblock.listeners.BlockListener; -import world.bentobox.chunkblock.panels.ChunksDialog.Cell; -import world.bentobox.chunkblock.panels.ChunksDialog.Kind; /** - * Tests the grid behind the {@code /ch chunks} dialog — what each chunk button is, and how - * far the map reaches. + * Tests how far the dialog map reaches and when it declines to show at all. What each chunk + * is and how it is drawn belongs to the shared grid, and is covered by {@code ChunkMapTest}. */ class ChunksDialogTest extends CommonTestSetup { @@ -36,7 +31,6 @@ class ChunksDialogTest extends CommonTestSetup { @Mock private Location playerLocation; - private OneBlockIslands data; private ChunkManager cm; private long level; @@ -46,21 +40,18 @@ public void setUp() throws Exception { super.setUp(); Settings settings = new Settings(); when(addon.getSettings()).thenReturn(settings); - data = new OneBlockIslands("test"); - when(addon.getOneBlocksIsland(island)).thenReturn(data); + when(addon.getOneBlocksIsland(island)).thenReturn(new OneBlockIslands("test")); when(addon.getBlockListener()).thenReturn(mock(BlockListener.class)); level = 0; when(addon.getIslandLevel(island)).thenAnswer(i -> level); cm = new ChunkManager(addon); when(addon.getChunkManager()).thenReturn(cm); - // Island center chunk-centered at chunk (0, 0) when(island.getCenter()).thenReturn(location); when(island.getWorld()).thenReturn(world); when(location.getBlockX()).thenReturn(8); when(location.getBlockZ()).thenReturn(8); when(island.getProtectionRange()).thenReturn(240); - // The player's own location is a separate mock, so moving them leaves the island put when(playerLocation.getBlockX()).thenReturn(8); when(playerLocation.getBlockZ()).thenReturn(8); when(playerLocation.getWorld()).thenReturn(world); @@ -69,46 +60,9 @@ public void setUp() throws Exception { } @Test - void testFreshIslandOffersTheChunksTouchingTheCenter() { - List cells = new ChunksDialog(addon, user, island).cells(); + void testAFreshIslandShowsTheRingAroundTheCenter() { // One claimed chunk, so the map reaches one ring out — 3 x 3 - assertEquals(9, cells.size()); - assertEquals(Kind.CENTER, kindOf(cells, 0, 0)); - // Claims run along the edges, so the four side-by-side chunks are the frontier... - for (int[] offset : new int[][] { { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 } }) { - assertEquals(Kind.CLAIMABLE, kindOf(cells, offset[0], offset[1]), - "chunk " + offset[0] + "," + offset[1]); - } - // ...and the corners, which touch nothing but a diagonal, are not - for (int[] offset : new int[][] { { 1, 1 }, { -1, 1 }, { -1, -1 }, { 1, -1 } }) { - assertEquals(Kind.LOCKED, kindOf(cells, offset[0], offset[1]), "chunk " + offset[0] + "," + offset[1]); - } - } - - @Test - void testClaimedChunksAreOwnedAndTheMapGrowsOutwards() { - level = 8; - for (int[] offset : new int[][] { { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 }, { 1, 1 }, { -1, 1 }, { -1, -1 }, - { 1, -1 } }) { - cm.claim(island, offset[0], offset[1]); - } - List cells = new ChunksDialog(addon, user, island).cells(); - // Ring 1 claimed, so the map reaches ring 2 — 5 x 5 - assertEquals(25, cells.size()); - assertEquals(Kind.CENTER, kindOf(cells, 0, 0)); - assertEquals(Kind.OWNED, kindOf(cells, 1, 0)); - assertEquals(Kind.CLAIMABLE, kindOf(cells, 2, 0)); - } - - @Test - void testChunksOutOfReachAreLocked() { - // Only one chunk claimed, so the far side of a 5 x 5 map is nobody's frontier - level = 8; - cm.claim(island, 1, 0); - List cells = new ChunksDialog(addon, user, island).cells(); - assertEquals(25, cells.size()); - assertEquals(Kind.LOCKED, kindOf(cells, -2, -2)); - assertEquals(Kind.CLAIMABLE, kindOf(cells, 2, 0)); + assertEquals(9, new ChunksDialog(addon, user, island).cells().size()); } @Test @@ -118,40 +72,8 @@ void testMapIsCappedAtTheWidestGridTheDialogHolds() { for (int dx = 1; dx <= 20; dx++) { cm.claim(island, dx, 0); } - List cells = new ChunksDialog(addon, user, island).cells(); int width = 2 * ChunksDialog.MAX_RADIUS + 1; - assertEquals(width * width, cells.size()); - } - - @Test - void testThePlayersOwnChunkIsMarked() { - // Stand one chunk east of the center - when(playerLocation.getBlockX()).thenReturn(24); - List cells = new ChunksDialog(addon, user, island).cells(); - assertTrue(cellAt(cells, 1, 0).here()); - assertFalse(cellAt(cells, 0, 0).here()); - // The mark rides on top of what the chunk is, it does not replace it - assertEquals(Kind.CLAIMABLE, kindOf(cells, 1, 0)); - assertEquals("&b◆", ChunksDialog.glyphReference(cellAt(cells, 1, 0))); - assertEquals("&6◎", ChunksDialog.glyphReference(cellAt(cells, 0, 0))); - } - - @Test - void testAPlayerInAnotherWorldMarksNoChunk() { - org.bukkit.World elsewhere = mock(org.bukkit.World.class); - when(elsewhere.getName()).thenReturn("somewhere_else"); - when(playerLocation.getWorld()).thenReturn(elsewhere); - List cells = new ChunksDialog(addon, user, island).cells(); - assertTrue(cells.stream().noneMatch(Cell::here)); - } - - @Test - void testGlyphsMatchTheChatMapLegend() { - assertEquals("&a■", ChunksDialog.glyphReference(new Cell(1, 0, Kind.OWNED, false))); - assertEquals("&e▣", ChunksDialog.glyphReference(new Cell(1, 0, Kind.CLAIMABLE, false))); - assertEquals("&7□", ChunksDialog.glyphReference(new Cell(1, 0, Kind.LOCKED, false))); - assertEquals("&b◉", ChunksDialog.glyphReference(new Cell(0, 0, Kind.CENTER, true))); - assertEquals("&b◇", ChunksDialog.glyphReference(new Cell(3, 3, Kind.LOCKED, true))); + assertEquals(width * width, new ChunksDialog(addon, user, island).cells().size()); } @Test @@ -159,23 +81,4 @@ void testNothingIsShownWhenTheUserIsNotAPlayer() { when(user.isPlayer()).thenReturn(false); assertFalse(ChunksDialog.show(addon, user, island)); } - - @Test - void testCellsAreOrderedRowByRowSoTheGridComesOutNorthUp() { - List cells = new ChunksDialog(addon, user, island).cells(); - // The dialog lays buttons out in list order, filling each row left to right - assertEquals(new Cell(-1, -1, Kind.LOCKED, false), cells.get(0)); - assertEquals(new Cell(0, -1, Kind.CLAIMABLE, false), cells.get(1)); - assertEquals(new Cell(-1, 0, Kind.CLAIMABLE, false), cells.get(3)); - assertEquals(new Cell(1, 1, Kind.LOCKED, false), cells.get(8)); - } - - private Cell cellAt(List cells, int dx, int dz) { - return cells.stream().filter(c -> c.dx() == dx && c.dz() == dz).findFirst() - .orElseThrow(() -> new AssertionError("no cell at " + dx + "," + dz)); - } - - private Kind kindOf(List cells, int dx, int dz) { - return cellAt(cells, dx, dz).kind(); - } } From 009de3a6f726a28312f11e436d93a9ae9e201a14 Mon Sep 17 00:00:00 2001 From: tastybento Date: Fri, 14 Aug 2026 08:27:45 -0700 Subject: [PATCH 4/4] i18n: convert every locale file to MiniMessage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BentoBox text is MiniMessage now; the &-codes still parse, but leaving the files in the old format is what makes formatting bugs possible — anything that has to build a fragment and put it into a translation has to guess which format the line is in. Converted with BentoBox's own Util.legacyToMiniMessage, so each value now says exactly what the runtime was already rendering, then tidied up: a straight conversion closes and immediately reopens a tag wherever the old text repeated a colour code, which is every line of a multi-line description. Verified by rendering all 1582 values before and after and comparing the style of every character: no value moved. Placeholder checks report the same 47 pre-existing issues as before, none new. Ten values across vi, tr, it, es, fr, uk and ja were left alone: they contain a broken colour code ("& c", "&un", "& l") that never rendered as colour and still doesn't. Worth a translator's eye, separately. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_017EZEwab2kL4i1FNnBYvSmp --- src/main/resources/locales/cs.yml | 130 ++++++++------- src/main/resources/locales/de.yml | 148 ++++++++--------- src/main/resources/locales/en-US.yml | 236 +++++++++++++-------------- src/main/resources/locales/es.yml | 140 ++++++++-------- src/main/resources/locales/fr.yml | 126 +++++++------- src/main/resources/locales/hr.yml | 140 ++++++++-------- src/main/resources/locales/hu.yml | 140 ++++++++-------- src/main/resources/locales/id.yml | 134 ++++++++------- src/main/resources/locales/it.yml | 130 ++++++++------- src/main/resources/locales/ja.yml | 114 +++++++------ src/main/resources/locales/pl.yml | 128 +++++++-------- src/main/resources/locales/pt.yml | 134 ++++++++------- src/main/resources/locales/ru.yml | 4 +- src/main/resources/locales/tr.yml | 136 ++++++++------- src/main/resources/locales/uk.yml | 134 ++++++++------- src/main/resources/locales/vi.yml | 124 +++++++------- src/main/resources/locales/zh-CN.yml | 132 +++++++-------- src/main/resources/locales/zh-TW.yml | 228 +++++++++++++------------- 18 files changed, 1197 insertions(+), 1261 deletions(-) diff --git a/src/main/resources/locales/cs.yml b/src/main/resources/locales/cs.yml index 5f61bf5..983ac4e 100644 --- a/src/main/resources/locales/cs.yml +++ b/src/main/resources/locales/cs.yml @@ -3,111 +3,109 @@ protection: CHUNKBLOCK_MAGIC_BLOCK: name: Ochrana Kouzelného Bloku description: |- - &b Hodnost, která může rozbít - &b kouzelný blok, pokud - &b dokáže rozbíjet bloky. - hint: "&c Vaše hodnost nemůže rozbít kouzelný blok!" + Hodnost, která může rozbít + kouzelný blok, pokud + dokáže rozbíjet bloky. + hint: "Vaše hodnost nemůže rozbít kouzelný blok!" CHUNKBLOCK_START_SAFETY: name: Počáteční Bezpečnost description: |- - &b Zabrání novým hráčům - &b v pohybu po dobu 1 minuty, - &b aby nespadli. - hint: "&c Pohyb zablokován kvůli bezpečnosti na [number] sekund!" - free-to-move: "&a Můžete se volně pohybovat. Buďte opatrní!" + Zabrání novým hráčům + v pohybu po dobu 1 minuty, + aby nespadli. + hint: "Pohyb zablokován kvůli bezpečnosti na [number] sekund!" + free-to-move: "Můžete se volně pohybovat. Buďte opatrní!" CHUNKBLOCK_BOSSBAR: - name: Boss Bar - description: |- - &b Zobrazuje stavový panel - &b pro každou fázi. + name: Boss Bar + description: |- + Zobrazuje stavový panel + pro každou fázi. CHUNKBLOCK_ACTIONBAR: name: Action Bar description: |- - &b Zobrazuje stav - &b pro každou fázi - &b v Action Baru. + Zobrazuje stav + pro každou fázi + v Action Baru. chunkblock: bossbar: title: Bloky zbývající - status: '&a Fázové bloky & B [done] & d / & b [total]' + status: 'Fázové bloky & B [done] & d / & b [total]' color: RED style: SEGMENTED_20 - not-active: '&c Boss Bar není pro tento ostrov aktivní' + not-active: 'Boss Bar není pro tento ostrov aktivní' actionbar: - status: "&a Fáze: &b [phase-name] &d | &a Bloky: &b [done] &d / &b [total] &d | &a Postup: &b [percent-done]" - not-active: "&c Action Bar není pro tento ostrov aktivní" + status: "Fáze: [phase-name] | Bloky: [done] / [total] | Postup: [percent-done]" + not-active: "Action Bar není pro tento ostrov aktivní" commands: admin: setcount: parameters: [lifetime] description: nastavit počet bloků hráče - set: '&a počet [name] je nastaven na [number]' - set-lifetime: '&a [name] je nastaveno na [number]' + set: 'počet [name] je nastaven na [number]' + set-lifetime: '[name] je nastaveno na [number]' setchest: parameters: description: dejte pohled na hrudník do fáze se specifikovanou vzácností - chest-is-empty: '&c Ten hrudník je prázdný, takže jej nelze přidat' - unknown-phase: '&c Neznámá fáze. Chcete-li si je prohlédnout, použijte tabulátor' - unknown-rarity: '&c Neznámá vzácnost. Používejte COMMON, UNCOMMON, RARE nebo EPIC' - look-at-chest: '&c Podívejte se na naplněnou hruď a nastavte ji' - only-single-chest: '&c Lze nastavit pouze jednotlivé bedny' - success: '&a Hrudník byl úspěšně přidán do fáze' - failure: '&c Hrudník nelze přidat do fáze! Chyby najdete na konzole' + chest-is-empty: 'Ten hrudník je prázdný, takže jej nelze přidat' + unknown-phase: 'Neznámá fáze. Chcete-li si je prohlédnout, použijte tabulátor' + unknown-rarity: 'Neznámá vzácnost. Používejte COMMON, UNCOMMON, RARE nebo EPIC' + look-at-chest: 'Podívejte se na naplněnou hruď a nastavte ji' + only-single-chest: 'Lze nastavit pouze jednotlivé bedny' + success: 'Hrudník byl úspěšně přidán do fáze' + failure: 'Hrudník nelze přidat do fáze! Chyby najdete na konzole' sanity: parameters: description: zobrazí v konzoli kontrolu pravděpodobnosti fází - see-console: '&a Podívejte se do konzoly pro zprávu' + see-console: 'Podívejte se do konzoly pro zprávu' count: description: zobrazit počet bloků a fázi - info: '&a Jste na bloku &b [number] ve fázi &a [name]' + info: 'Jste na bloku [number] ve fázi [name]' info: - count: >- - Ostrov &a je na bloku &b [number]&a ve fázi &b [name] &a. Počet doživotí - &b [lifetime] &a. + count: 'Ostrov je na bloku [number] ve fázi [name] . Počet doživotí [lifetime] .' phases: description: zobrazit seznam všech fází - title: '&2 Fáze OneBlock' - name-syntax: '&a [name]' - description-syntax: '&b [number] bloků' + title: 'Fáze OneBlock' + name-syntax: '[name]' + description-syntax: '[number] bloků' island: bossbar: description: přepíná fázový šéfový bar - status_on: '&b Bossbar se otočil &a zapnul' - status_off: '&b Bossbar se &c otočil' + status_on: 'Bossbar se otočil zapnul' + status_off: 'Bossbar se otočil' actionbar: description: přepíná action bar fáze - status_on: "&b Action Bar &a zapnut" - status_off: "&b Action Bar &c vypnut" + status_on: "Action Bar zapnut" + status_off: "Action Bar vypnut" setcount: parameters: description: nastavte počet bloků na dříve dokončenou hodnotu - set: '&a Počet nastaven na [number].' - too-high: '&c Maximálně můžeš nastavit [number]!' + set: 'Počet nastaven na [number].' + too-high: 'Maximálně můžeš nastavit [number]!' respawn-block: description: respawnuje magický blok v situacích, kdy zmizí - block-exist: '&a Blok existuje, nevyžadoval respawning. Označil jsem to za vás.' - block-respawned: '&a Blok byl znovu vytvořen.' + block-exist: 'Blok existuje, nevyžadoval respawning. Označil jsem to za vás.' + block-respawned: 'Blok byl znovu vytvořen.' phase: insufficient-level: Tvůj ostrov je na příliš nízké úrovni, musí být alespoň [number]. insufficient-funds: Nemáš dostatečné prostředky! Musíš mít alespoň [number]. insufficient-bank-balance: V Bance ostrova není dostatek financí! Je potřeba alespoň [number]. - insufficient-permission: '&c Nemůžete pokračovat, dokud nezískáte oprávnění [name]!' - cooldown: '&c Další fáze bude dostupná za [number] sekund!' + insufficient-permission: 'Nemůžete pokračovat, dokud nezískáte oprávnění [name]!' + cooldown: 'Další fáze bude dostupná za [number] sekund!' placeholders: infinite: Nekonečný my-island-phase-default: Neznámá gui: titles: - phases: '&0&l Jednoblokové fáze' + phases: 'Jednoblokové fáze' buttons: previous: - name: '&f&l Předchozí stránka' - description: '&7 Přepnout na stránku [number]' + name: 'Předchozí stránka' + description: 'Přepnout na stránku [number]' next: - name: '&f&l Další stránka' - description: '&7 Přepnout na stránku [number]' + name: 'Další stránka' + description: 'Přepnout na stránku [number]' phase: - name: '&f&l [phase]' + name: '[phase]' description: |- [starting-block] [biome] @@ -115,20 +113,20 @@ chunkblock: [economy] [level] [permission] - starting-block: '&7 Spustí se po rozbití bloků &e [number].' - biome: '&7 Biom: &e [biome]' - bank: '&7 Vyžaduje &e $[number] &7 na bankovním účtu.' - economy: '&7 Vyžaduje &e $[number] &7 v hráčském účtu.' - level: '&7 Vyžaduje &e [number] &7 úroveň ostrova.' - permission: '&7 Vyžaduje oprávnění `&e[permission]&7`.' - blocks-prefix: '&7 Bloků ve fázi -' - blocks: '&e [name], ' + starting-block: 'Spustí se po rozbití bloků [number].' + biome: 'Biom: [biome]' + bank: 'Vyžaduje $[number] na bankovním účtu.' + economy: 'Vyžaduje $[number] v hráčském účtu.' + level: 'Vyžaduje [number] úroveň ostrova.' + permission: 'Vyžaduje oprávnění `[permission]`.' + blocks-prefix: 'Bloků ve fázi -' + blocks: '[name], ' wrap-at: '50' tips: - click-to-previous: '&e Klepnutím na &7 zobrazíte předchozí stránku.' - click-to-next: '&e Klepnutím na &7 zobrazíte další stránku.' - click-to-change: '&e Klikněte na &7 pro změnu.' + click-to-previous: 'Klepnutím na zobrazíte předchozí stránku.' + click-to-next: 'Klepnutím na zobrazíte další stránku.' + click-to-change: 'Klikněte na pro změnu.' island: starting-hologram: |- - &a Vítejte v ChunkBlock - &e Prolomte tento blok + Vítejte v ChunkBlock + Prolomte tento blok diff --git a/src/main/resources/locales/de.yml b/src/main/resources/locales/de.yml index 073f740..61837db 100644 --- a/src/main/resources/locales/de.yml +++ b/src/main/resources/locales/de.yml @@ -3,127 +3,115 @@ protection: CHUNKBLOCK_MAGIC_BLOCK: name: Schutz des Magischen Blocks description: |- - &b Rang, der den magischen - &b Block zerstören kann, falls - &b Blöcke zerstört werden können. - hint: "&c Dein Rang kann den magischen Block nicht zerstören!" + Rang, der den magischen + Block zerstören kann, falls + Blöcke zerstört werden können. + hint: "Dein Rang kann den magischen Block nicht zerstören!" CHUNKBLOCK_START_SAFETY: name: Start-Sicherheit description: |- - &b Verhindert, dass neue Spieler - &b sich 1 Minute lang bewegen, - &b damit sie nicht herunterfallen. - hint: "&c Bewegung aus Sicherheitsgründen für [number] weitere Sekunden blockiert!" - free-to-move: "&a Du kannst dich frei bewegen. Sei vorsichtig!" + Verhindert, dass neue Spieler + sich 1 Minute lang bewegen, + damit sie nicht herunterfallen. + hint: "Bewegung aus Sicherheitsgründen für [number] weitere Sekunden blockiert!" + free-to-move: "Du kannst dich frei bewegen. Sei vorsichtig!" CHUNKBLOCK_BOSSBAR: - name: Boss-Balken - description: |- - &b Zeigt eine Statusleiste - &b für jede Phase. + name: Boss-Balken + description: |- + Zeigt eine Statusleiste + für jede Phase. CHUNKBLOCK_ACTIONBAR: name: Action-Leiste description: |- - &b Zeigt einen Status - &b für jede Phase - &b in der Action-Leiste. + Zeigt einen Status + für jede Phase + in der Action-Leiste. chunkblock: bossbar: title: Verbleibende Blöcke - status: '&a Phasenblöcke &b [done] &d / &b [total]' + status: 'Phasenblöcke [done] / [total]' color: RED style: SEGMENTED_20 - not-active: '&c Boss Bar ist für diese Insel nicht aktiv' + not-active: 'Boss Bar ist für diese Insel nicht aktiv' actionbar: - status: "&a Phase: &b [phase-name] &d | &a Blöcke: &b [done] &d / &b [total] &d | &a Fortschritt: &b [percent-done]" - not-active: "&c Action Bar ist für diese Insel nicht aktiv" + status: "Phase: [phase-name] | Blöcke: [done] / [total] | Fortschritt: [percent-done]" + not-active: "Action Bar ist für diese Insel nicht aktiv" commands: admin: setcount: parameters: [lifetime] description: Setze die Blockanzahl des Spielers - set: '&a [name] zählt auf [number]' - set-lifetime: Die Lebenszeitanzahl von &a [name] wurde auf [number] gesetzt + set: '[name] zählt auf [number]' + set-lifetime: 'Die Lebenszeitanzahl von [name] wurde auf [number] gesetzt' setchest: parameters: description: >- Versetzen Sie die betrachtete Truhe in eine Phase mit der angegebenen Seltenheit - chest-is-empty: '&c Diese Truhe ist leer und kann daher nicht hinzugefügt werden' - unknown-phase: '&c Unbekannte Phase. Verwenden Sie tab-complete, um sie anzuzeigen' - unknown-rarity: >- - &c Unbekannte Seltenheit. Verwenden Sie COMMON, UNCOMMON, RARE oder - EPIC - look-at-chest: '&c Sieh dir eine gefüllte Truhe an, um sie einzustellen' - only-single-chest: '&c Es können nur einzelne Truhen eingestellt werden' - success: '&a Eine Truhe erfolgreich zur Phase hinzugefügt' - failure: >- - &c Truhe konnte nicht zur Phase hinzugefügt werden! Siehe Konsole für - Fehler + chest-is-empty: 'Diese Truhe ist leer und kann daher nicht hinzugefügt werden' + unknown-phase: 'Unbekannte Phase. Verwenden Sie tab-complete, um sie anzuzeigen' + unknown-rarity: 'Unbekannte Seltenheit. Verwenden Sie COMMON, UNCOMMON, RARE oder EPIC' + look-at-chest: 'Sieh dir eine gefüllte Truhe an, um sie einzustellen' + only-single-chest: 'Es können nur einzelne Truhen eingestellt werden' + success: 'Eine Truhe erfolgreich zur Phase hinzugefügt' + failure: 'Truhe konnte nicht zur Phase hinzugefügt werden! Siehe Konsole für Fehler' sanity: parameters: description: >- Zeigen Sie eine Überprüfung der Phasenwahrscheinlichkeiten in der Konsole an - see-console: '&a Den Bericht finden Sie in der Konsole' + see-console: 'Den Bericht finden Sie in der Konsole' count: description: Zeige die Blockanzahl und Phase - info: '&a Sie befinden sich in der Phase &a [name] in Block &b [number]' + info: 'Sie befinden sich in der Phase [name] in Block [number]' info: - count: >- - &a Island befindet sich in Block &b [number]&a in der Phase &b [Name] - &a. Lebenszeitanzahl &b [lifetime] &a. + count: 'Island befindet sich in Block [number] in der Phase [Name] . Lebenszeitanzahl [lifetime] .' phases: description: Zeigen Sie eine Liste aller Phasen an - title: '&2 OneBlock-Phasen' - name-syntax: '&a [name]' - description-syntax: '&b [number] Blöcke' + title: 'OneBlock-Phasen' + name-syntax: '[name]' + description-syntax: '[number] Blöcke' island: bossbar: description: Phase Boss Bar umschalten - status_on: '&b Bossbar &a eingeschaltet' - status_off: '&b Bossbar &c ausgeschaltet' + status_on: 'Bossbar eingeschaltet' + status_off: 'Bossbar ausgeschaltet' actionbar: description: "schaltet die Phasen-Aktionsleiste um" - status_on: "&b Action Bar &a eingeschaltet" - status_off: "&b Action Bar &c ausgeschaltet" + status_on: "Action Bar eingeschaltet" + status_off: "Action Bar ausgeschaltet" setcount: parameters: description: Setzen Sie die Blockanzahl auf den zuvor abgeschlossenen Wert - set: '&a Zähler auf [number] gesetzt.' - too-high: '&c Das Maximum, das Sie festlegen können, ist [number]!' + set: 'Zähler auf [number] gesetzt.' + too-high: 'Das Maximum, das Sie festlegen können, ist [number]!' respawn-block: description: >- lässt den magischen Block in Situationen wieder erscheinen, in denen er verschwindet - block-exist: >- - &ein Block existiert, musste nicht neu gestartet werden. Ich habe es für - dich markiert. - block-respawned: '&a Block wieder aufgetaucht.' + block-exist: 'in Block existiert, musste nicht neu gestartet werden. Ich habe es für dich markiert.' + block-respawned: 'Block wieder aufgetaucht.' phase: - insufficient-level: '&c Ihr Insellevel ist zu niedrig, um fortzufahren! Es muss [number] sein.' - insufficient-funds: '&c Ihr Guthaben ist zu gering, um fortzufahren! Sie müssen [number] sein.' - insufficient-bank-balance: >- - &c Der Saldo der Inselbank ist zu niedrig, um fortzufahren! Es muss - [number] sein. - insufficient-permission: >- - &c Sie können nicht weitermachen, bis Sie die [name]-Berechtigung - erhalten! - cooldown: '&c Die nächste Stufe ist in [number] Sekunden verfügbar!' + insufficient-level: 'Ihr Insellevel ist zu niedrig, um fortzufahren! Es muss [number] sein.' + insufficient-funds: 'Ihr Guthaben ist zu gering, um fortzufahren! Sie müssen [number] sein.' + insufficient-bank-balance: 'Der Saldo der Inselbank ist zu niedrig, um fortzufahren! Es muss [number] sein.' + insufficient-permission: 'Sie können nicht weitermachen, bis Sie die [name]-Berechtigung erhalten!' + cooldown: 'Die nächste Stufe ist in [number] Sekunden verfügbar!' placeholders: infinite: Unendlich my-island-phase-default: Unbekannt gui: titles: - phases: '&0&l OneBlock-Phasen' + phases: 'OneBlock-Phasen' buttons: previous: - name: '&f&l Vorherige Seite' - description: '&7 Zur Seite [number] wechseln' + name: 'Vorherige Seite' + description: 'Zur Seite [number] wechseln' next: - name: '&f&l Nächste Seite' - description: '&7 Zur Seite [number] wechseln' + name: 'Nächste Seite' + description: 'Zur Seite [number] wechseln' phase: - name: '&f&l [phase]' + name: '[phase]' description: |- [starting-block] [biome] @@ -131,21 +119,21 @@ chunkblock: [economy] [level] [permission] - starting-block: '&7 Startet nach dem Aufbrechen von &e [number] Blöcken.' - biome: '&7 Biom: &e [biome]' - bank: '&7 Erfordert &e $[number] &7 auf dem Bankkonto.' - economy: '&7 Erfordert &e $[number] &7 im Spielerkonto.' - level: '&7 Erfordert &e [number] &7 Inselebene.' - permission: '&7 Erfordert die Berechtigung „&e[permission]&7“.' - blocks-prefix: '&7 Blöcke in Phase -' - blocks: '&e [name], ' + starting-block: 'Startet nach dem Aufbrechen von [number] Blöcken.' + biome: 'Biom: [biome]' + bank: 'Erfordert $[number] auf dem Bankkonto.' + economy: 'Erfordert $[number] im Spielerkonto.' + level: 'Erfordert [number] Inselebene.' + permission: 'Erfordert die Berechtigung „[permission]“.' + blocks-prefix: 'Blöcke in Phase -' + blocks: '[name], ' wrap-at: '50' tips: - click-to-previous: '&e Klicken Sie auf &7, um die vorherige Seite anzuzeigen.' - click-to-next: '&e Klicken Sie auf &7, um die nächste Seite anzuzeigen.' - click-to-change: '&e Zum Ändern &7klicken.' + click-to-previous: 'Klicken Sie auf , um die vorherige Seite anzuzeigen.' + click-to-next: 'Klicken Sie auf , um die nächste Seite anzuzeigen.' + click-to-change: 'Zum Ändern klicken.' island: starting-hologram: |- - &aWillkommen bei ChunkBlock - &eBrechen Sie diesen Block, - &eum zu beginnen + Willkommen bei ChunkBlock + Brechen Sie diesen Block, + um zu beginnen diff --git a/src/main/resources/locales/en-US.yml b/src/main/resources/locales/en-US.yml index b2710a7..f16f8c9 100755 --- a/src/main/resources/locales/en-US.yml +++ b/src/main/resources/locales/en-US.yml @@ -8,59 +8,59 @@ protection: CHUNKBLOCK_MAGIC_BLOCK: name: Magic Block Protection description: |- - &b Rank that can break the magic - &b block if they can break blocks. - hint: "&c Your rank cannot break the magic block!" + Rank that can break the magic + block if they can break blocks. + hint: "Your rank cannot break the magic block!" CHUNKBLOCK_CLAIM_CHUNKS: name: Claim Chunks description: |- - &b Rank that can spend the - &b island's level credit to - &b claim new chunks. - hint: "&c Your rank cannot claim chunks for this island!" + Rank that can spend the + island's level credit to + claim new chunks. + hint: "Your rank cannot claim chunks for this island!" CHUNKBLOCK_START_SAFETY: name: Starting Safety description: |- - &b Prevents new players - &b from moving for 1 minute - &b so they don't fall off. - hint: "&c Movement blocked for safety for [number] more seconds!" - free-to-move: "&a You are free to move. Be careful!" + Prevents new players + from moving for 1 minute + so they don't fall off. + hint: "Movement blocked for safety for [number] more seconds!" + free-to-move: "You are free to move. Be careful!" CHUNKBLOCK_BOSSBAR: - name: Boss Bar - description: |- - &b Shows a status bar - &b for each phase. + name: Boss Bar + description: |- + Shows a status bar + for each phase. CHUNKBLOCK_ACTIONBAR: name: Action Bar description: |- - &b Shows a status - &b for each phase - &b in the Action Bar. + Shows a status + for each phase + in the Action Bar. chunkblock: chunks: - entry-denied: "&c That chunk is locked." - locked: "&c You can't touch that — the chunk is locked." - claim-hint: "&e Hit the border to claim this chunk for &b [cost] &e level(s)! You have &b [credit] &e level(s) of credit." - claim-confirm: "&e Claim this chunk for &b [cost] &e level(s)? That leaves you &b [after] &e level(s) of credit. &6Sneak and hit the border again &e within &b [seconds]s &e to confirm." - no-credit: "&c You need &b [needed] &c more level(s) of credit to claim this chunk." - beyond-limit: "&c That chunk is beyond your island's protection area." - claimed: "&a &l Chunk claimed! &r&a Your island is now &b [number] &a chunks. Credit left: &b [credit] &a level(s)." - credit: "&a You can claim &b [count] &a more chunk(s)! Go to your border and hit it where you want to grow." - relocked: "&c Your island level dropped — [count] chunk(s) re-locked, newest first. Regain the levels to claim them back!" - ejected: "&c The chunk you were in re-locked, so you were moved to safety." - max-reached: "&d Your island has reached its maximum size of [number] chunks!" - ring-complete: "&6 &l Ring [ring] complete! &r&6 The whole ring around your island is yours — &b [chunks] &6 chunks in all." - ring-broadcast: "&6 [name]'s island has closed ring &b [ring] &6 — &b [chunks] &6 chunks and still growing!" - rings: "&a Rings completed: &b [rings] &a of &b [max]&a." - sethome-denied: "&c You can't set a home in a locked chunk." - info: "&a Chunks: &b [unlocked]&a/&b[max]&a. Credit: &b [credit] &a level(s) — a chunk costs &b [cost]&a." + entry-denied: "That chunk is locked." + locked: "You can't touch that — the chunk is locked." + claim-hint: "Hit the border to claim this chunk for [cost] level(s)! You have [credit] level(s) of credit." + claim-confirm: "Claim this chunk for [cost] level(s)? That leaves you [after] level(s) of credit. Sneak and hit the border again within [seconds]s to confirm." + no-credit: "You need [needed] more level(s) of credit to claim this chunk." + beyond-limit: "That chunk is beyond your island's protection area." + claimed: "Chunk claimed! Your island is now [number] chunks. Credit left: [credit] level(s)." + credit: "You can claim [count] more chunk(s)! Go to your border and hit it where you want to grow." + relocked: "Your island level dropped — [count] chunk(s) re-locked, newest first. Regain the levels to claim them back!" + ejected: "The chunk you were in re-locked, so you were moved to safety." + max-reached: "Your island has reached its maximum size of [number] chunks!" + ring-complete: "Ring [ring] complete! The whole ring around your island is yours — [chunks] chunks in all." + ring-broadcast: "[name]'s island has closed ring [ring] [chunks] chunks and still growing!" + rings: "Rings completed: [rings] of [max]." + sethome-denied: "You can't set a home in a locked chunk." + info: "Chunks: [unlocked]/[max]. Credit: [credit] level(s) — a chunk costs [cost]." map: - title: "&a Your island territory ([unlocked]/[max] chunks):" - row: "&a [row]" - legend: "&a ■ yours &e ▣ claimable ([cost] level(s) each) &7 □ locked &6 ◎ center &b ◆ you" - you-are-here: "&b You are on the marked chunk." + title: "Your island territory ([unlocked]/[max] chunks):" + row: "[row]" + legend: "■ yours ▣ claimable ([cost] level(s) each) □ locked ◎ center ◆ you" + you-are-here: "You are on the marked chunk." # The map dialog: one button per chunk. Tooltips show when the mouse is over a chunk. # These are MiniMessage, which is what new text should use — the old &-codes still work. dialog: @@ -76,15 +76,15 @@ chunkblock: title: "Blocks remaining" # status: "&a Phase blocks &b [total]. Blocks left: [todo]" # status: "&a [phase-name] : [percent-done]" - status: "&a Phase blocks &b [done] &d / &b [total]" + status: "Phase blocks [done] / [total]" # RED, WHITE, PINK, BLUE, GREEN, YELLOW, or PURPLE color: RED # SOLID, SEGMENTED_6, SEGMENTED_10, SEGMENTED_12, SEGMENTED_20 style: SOLID - not-active: "&c Boss Bar is not active for this island" + not-active: "Boss Bar is not active for this island" actionbar: - status: "&a Phase: &b [phase-name] &d | &a Blocks: &b [done] &d / &b [total] &d | &a Progression: &b [percent-done]" - not-active: "&c Action Bar is not active for this island" + status: "Phase: [phase-name] | Blocks: [done] / [total] | Progression: [percent-done]" + not-active: "Action Bar is not active for this island" commands: chunks: description: "show your unlocked chunks and a map of your territory" @@ -92,116 +92,116 @@ chunkblock: chunks: parameters: " [reset]" description: "inspect a player's unlocked chunks or re-lock them back to the start" - info: "&a [name]: &b [number]&a/&b[max] &a chunks, &b [spent] &a level(s) spent, &b [credit] &a credit." - reset: "&a [name]'s chunks were re-locked back to just the center chunk." + info: "[name]: [number]/[max] chunks, [spent] level(s) spent, [credit] credit." + reset: "[name]'s chunks were re-locked back to just the center chunk." bypass: description: "toggle chunk lock enforcement for yourself" - "on": "&a You now bypass chunk locks. Border visuals are hidden for you." - "off": "&a Chunk locks apply to you again." + "on": "You now bypass chunk locks. Border visuals are hidden for you." + "off": "Chunk locks apply to you again." setcount: parameters: " [lifetime]" description: "set player's block count" - set: "&a [name]'s count set to [number]" - set-lifetime: "&a [name]'s lifetime count set to [number]" + set: "[name]'s count set to [number]" + set-lifetime: "[name]'s lifetime count set to [number]" setchest: parameters: " " description: "put the looked-at chest in a phase with the rarity specified" - chest-is-empty: "&c That chest is empty so cannot be added" - unknown-phase: "&c Unknown phase. Use tab-complete to see them" - unknown-rarity: "&c Unknown rarity. Use COMMON, UNCOMMON, RARE or EPIC" - look-at-chest: "&c Look at a filled chest to set it" - only-single-chest: "&c Only single chests can be set" - success: "&a Chest successfully added to phase" - failure: "&c Chest could not be added to the phase! See console for errors" + chest-is-empty: "That chest is empty so cannot be added" + unknown-phase: "Unknown phase. Use tab-complete to see them" + unknown-rarity: "Unknown rarity. Use COMMON, UNCOMMON, RARE or EPIC" + look-at-chest: "Look at a filled chest to set it" + only-single-chest: "Only single chests can be set" + success: "Chest successfully added to phase" + failure: "Chest could not be added to the phase! See console for errors" sanity: parameters: "" description: "display a sanity check of the phase probabilities in the console" - see-console: "&a See the console for the report" + see-console: "See the console for the report" phases: description: "open the phase order editor" - no-index: "&c No phase index is loaded, so phases cannot be reordered" - saved: "&a Phase order saved and applied" - save-failed: "&c Could not save the phase order! See console for errors" + no-index: "No phase index is loaded, so phases cannot be reordered" + saved: "Phase order saved and applied" + save-failed: "Could not save the phase order! See console for errors" gui: - title: "&2 Phase Order" - info-title: "&f How to use" + title: "Phase Order" + info-title: "How to use" instructions: |- - &7 Click a phase to pick it up, - &7 then click where it should go. - &7 Right-click toggles a phase - &7 on or off. - repeat: "&7 After the last phase the count jumps to &b [number]" - phase-name: "&a [name]" - start: "&7 Start: &b [number]" - length: "&7 Length: &b [number]" - disabled: "&c Disabled" - version-locked: "&c Needs Minecraft [version]+" - pick-up: "&e Click to move" - toggle: "&e Right-click to toggle" - set-length: "&e Shift-left-click to set length" - drop-here: "&e Click to drop here" - drop-at-end: "&a Drop at the end" - held: "&e Moving: [name]" - put-back: "&e Click to put back" - enter-length: "&e Enter a new length in chat for &a [name] &e - it is currently &b [number] &e blocks. Type &c cancel &e to keep it." - invalid-length: "&c The length must be a whole number above 0" - length-cancelled: "&c Length unchanged" + Click a phase to pick it up, + then click where it should go. + Right-click toggles a phase + on or off. + repeat: "After the last phase the count jumps to [number]" + phase-name: "[name]" + start: "Start: [number]" + length: "Length: [number]" + disabled: "Disabled" + version-locked: "Needs Minecraft [version]+" + pick-up: "Click to move" + toggle: "Right-click to toggle" + set-length: "Shift-left-click to set length" + drop-here: "Click to drop here" + drop-at-end: "Drop at the end" + held: "Moving: [name]" + put-back: "Click to put back" + enter-length: "Enter a new length in chat for [name] - it is currently [number] blocks. Type cancel to keep it." + invalid-length: "The length must be a whole number above 0" + length-cancelled: "Length unchanged" cancel-word: "cancel" count: description: show the block count and phase - info: "&a You are on block &b [number] in the &a [name] phase" + info: "You are on block [number] in the [name] phase" info: - count: "&a Island is on block &b [number] &a in the &b [name] &a phase. Lifetime count &b [lifetime] &a." + count: "Island is on block [number] in the [name] phase. Lifetime count [lifetime] ." phases: description: show a list of all the phases - title: "&2 ChunkBlock Phases" - name-syntax: "&a [name]" - description-syntax: "&b [number] blocks" + title: "ChunkBlock Phases" + name-syntax: "[name]" + description-syntax: "[number] blocks" island: bossbar: description: "toggles phase boss bar" - status_on: "&b Bossbar turned &a on" - status_off: "&b Bossbar turned &c off" + status_on: "Bossbar turned on" + status_off: "Bossbar turned off" actionbar: description: "toggles phase action bar" - status_on: "&b Action Bar turned &a on" - status_off: "&b Action Bar turned &c off" + status_on: "Action Bar turned on" + status_off: "Action Bar turned off" setcount: parameters: "" description: "set block count to previously completed value" - set: "&a Count set to [number]." - too-high: "&c The maximum you can set is [number]!" + set: "Count set to [number]." + too-high: "The maximum you can set is [number]!" respawn-block: description: "respawns magic block in situations when it disappears" - block-exist: "&a Block exists, did not require respawning. I marked it for you." - block-respawned: "&a Block respawned." + block-exist: "Block exists, did not require respawning. I marked it for you." + block-respawned: "Block respawned." phase: - insufficient-level: "&c Your island level is too low to proceed! It must be [number]." - insufficient-funds: "&c Your funds are too low to proceed! They must be [number]." - insufficient-bank-balance: "&c The island bank balance is too low to proceed! It must be [number]." - insufficient-permission: "&c You can proceed no further until you obtain the [name] permission!" - cooldown: "&c Next phase will be available in [number] seconds!" + insufficient-level: "Your island level is too low to proceed! It must be [number]." + insufficient-funds: "Your funds are too low to proceed! They must be [number]." + insufficient-bank-balance: "The island bank balance is too low to proceed! It must be [number]." + insufficient-permission: "You can proceed no further until you obtain the [name] permission!" + cooldown: "Next phase will be available in [number] seconds!" placeholders: infinite: Infinite my-island-phase-default: Unknown gui: titles: - phases: '&0&l ChunkBlock Phases' + phases: 'ChunkBlock Phases' # This section contains all button names and lore (description) buttons: # List of buttons in GUI's # Button that is used in multipage 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 multipage 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 phase: - name: "&f&l [phase]" + name: "[phase]" description: |- [starting-block] [biome] @@ -211,24 +211,24 @@ chunkblock: [permission] [blocks] # Replaces text with [starting-block] - starting-block: "&7 Starts after breaking &e [number] blocks." + starting-block: "Starts after breaking [number] blocks." # Replaces text with [biome] - biome: "&7 Biome: &e [biome]" + biome: "Biome: [biome]" # Replaces text with [bank] - bank: "&7 Requires &e $[number] &7 in bank account." + bank: "Requires $[number] in bank account." # Replaces text with [economy] - economy: "&7 Requires &e $[number] &7 in player account." + economy: "Requires $[number] in player account." # Replaces text with [level] - level: "&7 Requires &e [number] &7 island level." + level: "Requires [number] island level." # Replaces text with [permission] - permission: "&7 Requires `&e[permission]&7` permission." + permission: "Requires `[permission]` permission." # Replaces text with [blocks] - blocks-prefix: '&7 Blocks in phase - ' - blocks: '&e [name], ' + blocks-prefix: 'Blocks in phase - ' + blocks: '[name], ' wrap-at: '50' tips: - click-to-previous: "&e Click &7 to view previous page." - click-to-next: "&e Click &7 to view next page." - click-to-change: "&e Click &7 to change." + click-to-previous: "Click to view previous page." + click-to-next: "Click to view next page." + click-to-change: "Click to change." island: - starting-hologram: "&aWelcome to ChunkBlock\n&eBreak This Block to Begin" + starting-hologram: "Welcome to ChunkBlock\nBreak This Block to Begin" diff --git a/src/main/resources/locales/es.yml b/src/main/resources/locales/es.yml index eda91e8..10ed09a 100644 --- a/src/main/resources/locales/es.yml +++ b/src/main/resources/locales/es.yml @@ -3,121 +3,113 @@ protection: CHUNKBLOCK_MAGIC_BLOCK: name: Protección de Bloque Mágico description: |- - &b Rango que puede romper el - &b bloque mágico si puede - &b romper bloques. - hint: "&c ¡Tu rango no puede romper el bloque mágico!" + Rango que puede romper el + bloque mágico si puede + romper bloques. + hint: "¡Tu rango no puede romper el bloque mágico!" CHUNKBLOCK_START_SAFETY: name: Seguridad Inicial description: |- - &b Evita que los nuevos jugadores - &b se muevan durante 1 minuto - &b para que no se caigan. - hint: "&c Movimiento bloqueado por seguridad durante [number] segundos más!" - free-to-move: "&a Eres libre de moverte. ¡Ten cuidado!" + Evita que los nuevos jugadores + se muevan durante 1 minuto + para que no se caigan. + hint: "Movimiento bloqueado por seguridad durante [number] segundos más!" + free-to-move: "Eres libre de moverte. ¡Ten cuidado!" CHUNKBLOCK_BOSSBAR: - name: Barra de Jefe (Boss Bar) - description: |- - &b Muestra una barra de estado - &b para cada fase. + name: Barra de Jefe (Boss Bar) + description: |- + Muestra una barra de estado + para cada fase. CHUNKBLOCK_ACTIONBAR: name: Barra de Acción (Action Bar) description: |- - &b Muestra un estado - &b para cada fase - &b en la Barra de Acción. + Muestra un estado + para cada fase + en la Barra de Acción. chunkblock: bossbar: title: Bloques restantes - status: '&a Bloques de fase &b [done] &d / &b [total]' + status: 'Bloques de fase [done] / [total]' color: RED style: SEGMENTED_20 - not-active: '&c Boss Bar no está activo para esta isla' + not-active: 'Boss Bar no está activo para esta isla' actionbar: - status: "&a Fase: &b [phase-name] &d | &a Bloques: &b [done] &d / &b [total] &d | &a Progreso: &b [percent-done]" - not-active: "&c La barra de acción no está activa para esta isla" + status: "Fase: [phase-name] | Bloques: [done] / [total] | Progreso: [percent-done]" + not-active: "La barra de acción no está activa para esta isla" commands: admin: setcount: parameters: [lifetime] description: Establece el número de bloques minados al jugador - set: '&aEl número de bloques minados de [name] se ha establecido en [number]' - set-lifetime: '&aEl numero de bloques totales de [name] se ha establecido en [number]' + set: 'El número de bloques minados de [name] se ha establecido en [number]' + set-lifetime: 'El numero de bloques totales de [name] se ha establecido en [number]' setchest: parameters: description: >- Coloca el cofre que estas mirando en una fase con la rareza especificada - chest-is-empty: '&cEse cofre está vacío, así que no se puede agregar' - unknown-phase: '&cFase desconocida. Presione TAB para verlas' - unknown-rarity: '&cRareza desconocida. Use COMMON, UNCOMMON, RARE o EPIC' - look-at-chest: '&cApunta hacia un cofre lleno para configurarlo' - only-single-chest: '&cSolo se pueden configurar cofres individuales' - success: '&aEl cofre ha sido agregado con éxito a la fase' - failure: >- - &c¡No se pudo agregar el cofre a la fase! Revisa la consola para más - detalles + chest-is-empty: 'Ese cofre está vacío, así que no se puede agregar' + unknown-phase: 'Fase desconocida. Presione TAB para verlas' + unknown-rarity: 'Rareza desconocida. Use COMMON, UNCOMMON, RARE o EPIC' + look-at-chest: 'Apunta hacia un cofre lleno para configurarlo' + only-single-chest: 'Solo se pueden configurar cofres individuales' + success: 'El cofre ha sido agregado con éxito a la fase' + failure: '¡No se pudo agregar el cofre a la fase! Revisa la consola para más detalles' sanity: parameters: description: >- Muestra una comprobación de las probabilidades de la fase en la consola - see-console: '&aRevisa la consola para ver el informe' + see-console: 'Revisa la consola para ver el informe' count: description: Muestra el número de bloques minados y la fase correspondiente - info: '&aTienes &b[number] bloques minados en la fase &a[name]' + info: 'Tienes [number] bloques minados en la fase [name]' info: - count: >- - &a Island está en el bloque &b [number]&a en la fase &b [name] &a. - Recuento de vida &b [lifetime] &a. + count: 'Island está en el bloque [number] en la fase [name] . Recuento de vida [lifetime] .' phases: description: Muestra una lista de todas las fases - title: '&2Fases de OneBlock' - name-syntax: '&a[name]' - description-syntax: '&b[number] bloques' + title: 'Fases de OneBlock' + name-syntax: '[name]' + description-syntax: '[number] bloques' island: bossbar: description: Barra de jefe de fase de alojamiento - status_on: '&b Bossbar &a encendió' - status_off: '&b Bossbar &a apagó' + status_on: 'Bossbar encendió' + status_off: 'Bossbar apagó' actionbar: description: alterna la barra de acción de fase - status_on: "&b Barra de acción &a activada" - status_off: "&b Barra de acción &c desactivada" + status_on: "Barra de acción activada" + status_off: "Barra de acción desactivada" setcount: parameters: description: Establece la cantidad de bloques a un valor previamente completado - set: '&aCantidad establecida en [number].' - too-high: '&c¡Lo máximo que puedes establecer es [number]!' + set: 'Cantidad establecida en [number].' + too-high: '¡Lo máximo que puedes establecer es [number]!' respawn-block: description: reaparece el bloque mágico en situaciones en las que desaparece - block-exist: '&a Block existe, no requirió reaparición. Te lo marqué.' + block-exist: 'Block existe, no requirió reaparición. Te lo marqué.' block-respawned: '& un bloque reapareció.' phase: - insufficient-level: >- - &c¡Tu nivel de isla es demasiado bajo para seguir! Este debe ser de - [number]. - insufficient-funds: '&c¡Tus fondos son insuficientes! Debes tener [number].' - insufficient-bank-balance: >- - &c¡El dinero del banco en la isla es demasiado bajo para seguir! Debes - tener [number]. - insufficient-permission: '&c ¡No puede continuar hasta que obtenga el permiso de [name]!' - cooldown: '&c ¡La siguiente etapa estará disponible en [number] segundos!' + insufficient-level: '¡Tu nivel de isla es demasiado bajo para seguir! Este debe ser de [number].' + insufficient-funds: '¡Tus fondos son insuficientes! Debes tener [number].' + insufficient-bank-balance: '¡El dinero del banco en la isla es demasiado bajo para seguir! Debes tener [number].' + insufficient-permission: '¡No puede continuar hasta que obtenga el permiso de [name]!' + cooldown: '¡La siguiente etapa estará disponible en [number] segundos!' placeholders: infinite: Infinito my-island-phase-default: Desconocida gui: titles: - phases: '&0&l Fases de OneBlock' + phases: 'Fases de OneBlock' buttons: previous: - name: '&f&l Pagina Anterior' - description: '&7 Ir a la pagina [number]' + name: 'Pagina Anterior' + description: 'Ir a la pagina [number]' next: - name: '&f&l Siguiente pagina' - description: '&7 Ir a la pagina [number]' + name: 'Siguiente pagina' + description: 'Ir a la pagina [number]' phase: - name: '&f&l [phase]' + name: '[phase]' description: |- [starting-block] [biome] @@ -125,20 +117,20 @@ chunkblock: [economy] [level] [permission] - starting-block: '&7 Comienza tras romper &e [number] bloques.' - biome: '&7 Bioma: &e [biome]' - bank: '&7 Requiere &e $[number] &7 en la cuenta del banco.' - economy: '&7 Requiere &e $[number] &7 en la cuenta del jugador.' - level: '&7 Requiere &e [number] &7 nivel de isla.' - permission: '&7 Requiere permiso `&e[permission]&7`.' - blocks-prefix: '&7 Bloques en fase -' - blocks: '&e [name], ' + starting-block: 'Comienza tras romper [number] bloques.' + biome: 'Bioma: [biome]' + bank: 'Requiere $[number] en la cuenta del banco.' + economy: 'Requiere $[number] en la cuenta del jugador.' + level: 'Requiere [number] nivel de isla.' + permission: 'Requiere permiso `[permission]`.' + blocks-prefix: 'Bloques en fase -' + blocks: '[name], ' wrap-at: '50' tips: - click-to-previous: '&e Click &7 para ver pagina anterior.' - click-to-next: '&e Click &7 para ver pagina siguiente.' - click-to-change: '&e Click &7 para cambiar.' + click-to-previous: 'Click para ver pagina anterior.' + click-to-next: 'Click para ver pagina siguiente.' + click-to-change: 'Click para cambiar.' island: starting-hologram: |- - &aBienvenido a ChunkBlock - &eRompe este bloque para empezar + Bienvenido a ChunkBlock + Rompe este bloque para empezar diff --git a/src/main/resources/locales/fr.yml b/src/main/resources/locales/fr.yml index 8e33ba3..eae92d1 100644 --- a/src/main/resources/locales/fr.yml +++ b/src/main/resources/locales/fr.yml @@ -3,90 +3,86 @@ protection: CHUNKBLOCK_MAGIC_BLOCK: name: Protection du Bloc Magique description: |- - &b Rang qui peut casser le bloc - &b magique s'il peut casser - &b des blocs. - hint: "&c Votre rang ne peut pas casser le bloc magique!" + Rang qui peut casser le bloc + magique s'il peut casser + des blocs. + hint: "Votre rang ne peut pas casser le bloc magique!" CHUNKBLOCK_START_SAFETY: name: Sécurité de Départ description: |- - &b Empêche les nouveaux joueurs - &b de bouger pendant 1 minute - &b pour qu'ils ne tombent pas. - hint: "&c Mouvement bloqué par sécurité pendant [number] secondes supplémentaires!" - free-to-move: "&a Vous êtes libre de bouger. Faites attention!" + Empêche les nouveaux joueurs + de bouger pendant 1 minute + pour qu'ils ne tombent pas. + hint: "Mouvement bloqué par sécurité pendant [number] secondes supplémentaires!" + free-to-move: "Vous êtes libre de bouger. Faites attention!" CHUNKBLOCK_BOSSBAR: - name: Barre de Boss - description: |- - &b Affiche une barre de statut - &b pour chaque phase. + name: Barre de Boss + description: |- + Affiche une barre de statut + pour chaque phase. CHUNKBLOCK_ACTIONBAR: name: Barre d'Action description: |- - &b Affiche un statut - &b pour chaque phase - &b dans la Barre d'Action. + Affiche un statut + pour chaque phase + dans la Barre d'Action. chunkblock: bossbar: title: Blocs restants - status: '&a Blocs de phase &b [done] &d / &b [total]' + status: 'Blocs de phase [done] / [total]' color: RED style: SEGMENTED_20 - not-active: '&c Boss Bar n''est pas actif pour cette île' + not-active: 'Boss Bar n''est pas actif pour cette île' actionbar: - status: "&a Phase : &b [phase-name] &d | &a Blocs : &b [done] &d / &b [total] &d | &a Progression : &b [percent-done]" - not-active: "&c La barre d'action n'est pas active pour cette île" + status: "Phase : [phase-name] | Blocs : [done] / [total] | Progression : [percent-done]" + not-active: "La barre d'action n'est pas active pour cette île" commands: admin: setcount: parameters: [DuréeDeVie] description: Définir le nombre de blocks du joueur - set: '&a Le compte de [name] est défini sur [number].' - set-lifetime: '&a La durée de vie de [name] est de [number]' + set: 'Le compte de [name] est défini sur [number].' + set-lifetime: 'La durée de vie de [name] est de [number]' setchest: parameters: description: mettre le coffre regardé dans une phase avec la rareté spécifiée - chest-is-empty: '&c Ce coffre est vide donc il ne peut pas être ajouté' - unknown-phase: '&c Phase inconnue. Utilisez tab-complete pour les voir' - unknown-rarity: '&c Rareté inconnue. Utilisez COMMON, UNCOMMON, RARE ou EPIC' - look-at-chest: '&c Regardez un coffre rempli pour le placer' - only-single-chest: '&c Seuls les coffres simples peuvent être définis' - success: '&a Le coffre a été ajouté avec succès à la phase' - failure: >- - &c Le coffre n'a pas pu être ajouté à la phase! Voir la console pour - les erreurs + chest-is-empty: 'Ce coffre est vide donc il ne peut pas être ajouté' + unknown-phase: 'Phase inconnue. Utilisez tab-complete pour les voir' + unknown-rarity: 'Rareté inconnue. Utilisez COMMON, UNCOMMON, RARE ou EPIC' + look-at-chest: 'Regardez un coffre rempli pour le placer' + only-single-chest: 'Seuls les coffres simples peuvent être définis' + success: 'Le coffre a été ajouté avec succès à la phase' + failure: 'Le coffre n''a pas pu être ajouté à la phase! Voir la console pour les erreurs' sanity: parameters: description: >- afficher un contrôle d'intégrité des probabilités de phase dans la console - see-console: '&a Voir la console pour le rapport' + see-console: 'Voir la console pour le rapport' count: description: afficher le nombre de blocs et la phase - info: '&a Vous êtes sur le bloc &b [number] dans la phase &a [name]' + info: 'Vous êtes sur le bloc [number] dans la phase [name]' info: - count: >- - &a L'île est sur le bloc &b [number]&a dans la phase &b [name] &a. - Nombre de durée de vie &b [lifetime] &a. + count: 'L''île est sur le bloc [number] dans la phase [name] . Nombre de durée de vie [lifetime] .' phases: description: afficher une liste de toutes les phases - title: '&2 Phases OneBlock' - name-syntax: '&a [name]' - description-syntax: '&b [number] blocs' + title: 'Phases OneBlock' + name-syntax: '[name]' + description-syntax: '[number] blocs' island: bossbar: description: bascule la barre de boss de phase - status_on: '&b Bossbar a &a activé' - status_off: '&b Bossbar &a désactivé' + status_on: 'Bossbar a activé' + status_off: 'Bossbar désactivé' actionbar: description: "active/désactive la barre d'action de phase" - status_on: "&b Barre d'action &a activée" - status_off: "&b Barre d'action &c désactivée" + status_on: "Barre d'action activée" + status_off: "Barre d'action désactivée" setcount: parameters: description: définir le nombre de blocs à la valeur précédemment terminée - set: '&a Nombre défini sur [number].' - too-high: "&c Le maximum que vous pouvez définir est [number]\_!" + set: 'Nombre défini sur [number].' + too-high: "Le maximum que vous pouvez définir est [number] !" respawn-block: description: réapparaît le bloc magique dans les situations où il disparaît block-exist: >- @@ -99,21 +95,21 @@ chunkblock: insufficient-bank-balance: >- Ta banque d'île n'a pas les fonds nécessaire ! Vous devez au moins avoir [number]. - insufficient-permission: "&c Vous ne pouvez pas continuer jusqu'à ce que vous obteniez l'autorisation de [name]\_!" - cooldown: '&c La prochaine étape sera disponible dans [number] secondes!' + insufficient-permission: "Vous ne pouvez pas continuer jusqu'à ce que vous obteniez l'autorisation de [name] !" + cooldown: 'La prochaine étape sera disponible dans [number] secondes!' placeholders: infinite: Infini my-island-phase-default: Inconnue gui: titles: - phases: '&0&l Phases OneBlock' + phases: 'Phases OneBlock' buttons: previous: - name: '&f&l Page Précédente' - description: '&7 Aller à la page [number]' + name: 'Page Précédente' + description: 'Aller à la page [number]' next: - name: '&f&l Page Suivante' - description: '&7 Aller à la page [number]' + name: 'Page Suivante' + description: 'Aller à la page [number]' phase: name: '& l [phase]' description: |- @@ -123,20 +119,20 @@ chunkblock: [economy] [level] [permission] - starting-block: '&7 Commence après avoir détruit &e [number] blocs.' - biome: "&7 Biome\_: &e [biome]" - bank: '&7 Requiert &e $[number] &7 dans ta banque.' - economy: '&7 Requiert &e $[number] &7 dans ton solde.' - level: '&7 Requiert &e [number] &7 niveaux d''île.' - permission: '&7 Requiert la permission : `&e[permission]&7` .' - blocks-prefix: '&7 Blocs en phase -' - blocks: '&e [name],' + starting-block: 'Commence après avoir détruit [number] blocs.' + biome: "Biome : [biome]" + bank: 'Requiert $[number] dans ta banque.' + economy: 'Requiert $[number] dans ton solde.' + level: 'Requiert [number] niveaux d''île.' + permission: 'Requiert la permission : `[permission]` .' + blocks-prefix: 'Blocs en phase -' + blocks: '[name],' wrap-at: '50' tips: - click-to-previous: '&e Click &7 pour voir la page précédente.' - click-to-next: '&e Click &7 pour voir la page suivante.' - click-to-change: '&e Click &7 pour changer.' + click-to-previous: 'Click pour voir la page précédente.' + click-to-next: 'Click pour voir la page suivante.' + click-to-change: 'Click pour changer.' island: starting-hologram: |- - &aBienvenue sur ChunkBlock - &eMine ce bloc pour commencer + Bienvenue sur ChunkBlock + Mine ce bloc pour commencer diff --git a/src/main/resources/locales/hr.yml b/src/main/resources/locales/hr.yml index c31c5a1..661773e 100644 --- a/src/main/resources/locales/hr.yml +++ b/src/main/resources/locales/hr.yml @@ -3,115 +3,109 @@ protection: CHUNKBLOCK_MAGIC_BLOCK: name: Zaštita Magičnog Bloka description: |- - &b Rang koji može razbiti - &b magični blok, ako - &b može razbiti blokove. - hint: "&c Vaš rang ne može razbiti magični blok!" + Rang koji može razbiti + magični blok, ako + može razbiti blokove. + hint: "Vaš rang ne može razbiti magični blok!" CHUNKBLOCK_START_SAFETY: name: Početna Sigurnost description: |- - &b Sprječava nove igrače - &b da se kreću 1 minutu - &b da ne padnu. - hint: "&c Kretanje je blokirano iz sigurnosnih razloga još [number] sekundi!" - free-to-move: "&a Slobodni ste za kretanje. Budite oprezni!" + Sprječava nove igrače + da se kreću 1 minutu + da ne padnu. + hint: "Kretanje je blokirano iz sigurnosnih razloga još [number] sekundi!" + free-to-move: "Slobodni ste za kretanje. Budite oprezni!" CHUNKBLOCK_BOSSBAR: - name: Boss Traka - description: |- - &b Prikazuje statusnu traku - &b za svaku fazu. + name: Boss Traka + description: |- + Prikazuje statusnu traku + za svaku fazu. CHUNKBLOCK_ACTIONBAR: name: Traka Akcije description: |- - &b Prikazuje status - &b za svaku fazu - &b u Traci Akcije. + Prikazuje status + za svaku fazu + u Traci Akcije. chunkblock: bossbar: title: Preostali blokovi - status: '&a Fazni blokovi &b [done] &d / &b [total]' + status: 'Fazni blokovi [done] / [total]' color: RED style: SEGMENTED_20 - not-active: '&c Boss bar nije aktivan za ovaj otok' + not-active: 'Boss bar nije aktivan za ovaj otok' actionbar: - status: "&a Faza: &b [phase-name] &d | &a Blokovi: &b [done] &d / &b [total] &d | &a Napredak: &b [percent-done]" - not-active: "&c Akcijska traka nije aktivna za ovaj otok" + status: "Faza: [phase-name] | Blokovi: [done] / [total] | Napredak: [percent-done]" + not-active: "Akcijska traka nije aktivna za ovaj otok" commands: admin: setcount: parameters: description: postavljanje broja blokova igrača - set: '&a broj [name] postavljen je na [number]' - set-lifetime: '&broj životnog vijeka [name] postavljen na [number]' + set: 'broj [name] postavljen je na [number]' + set-lifetime: 'roj životnog vijeka [name] postavljen na [number]' setchest: parameters: description: stavite pregledani sanduk u fazu s specificiranom rijetkošću - chest-is-empty: '&c Taj je škrinja prazna pa se ne može dodati' - unknown-phase: '&c Nepoznata faza. Da biste ih vidjeli, upotrijebite karticu' - unknown-rarity: '&c Nepoznata rijetkost. Koristite COMMON, UNCOMMON, RARE ili EPIC' - look-at-chest: '&c Pogledajte napunjen škrinju da ga postavite' - only-single-chest: '&c Mogu se postaviti samo pojedinačne škrinje' - success: '&a Komoda uspješno dodana u fazu' - failure: >- - &c Grudište se nije moglo dodati u fazu! Pogledajte konzolu za - pogreške + chest-is-empty: 'Taj je škrinja prazna pa se ne može dodati' + unknown-phase: 'Nepoznata faza. Da biste ih vidjeli, upotrijebite karticu' + unknown-rarity: 'Nepoznata rijetkost. Koristite COMMON, UNCOMMON, RARE ili EPIC' + look-at-chest: 'Pogledajte napunjen škrinju da ga postavite' + only-single-chest: 'Mogu se postaviti samo pojedinačne škrinje' + success: 'Komoda uspješno dodana u fazu' + failure: 'Grudište se nije moglo dodati u fazu! Pogledajte konzolu za pogreške' sanity: parameters: description: prikazati provjeru ispravnosti faznih vjerojatnosti u konzoli - see-console: '&a Pogledajte konzolu za izvješće' + see-console: 'Pogledajte konzolu za izvješće' count: description: prikazuju broj i fazu bloka - info: '&a Nalazite se na bloku &b [number] u fazi &a [name]' + info: 'Nalazite se na bloku [number] u fazi [name]' info: - count: >- - &a Otok je u bloku &b [number]&a u &b [name] &a fazi. Životni vijek &b - [lifetime] &a. + count: 'Otok je u bloku [number] u [name] fazi. Životni vijek [lifetime] .' phases: description: prikažite popis svih faza - title: '&2 OneBlock Faze' - name-syntax: '&a [name]' - description-syntax: '&b [number] blokova' + title: 'OneBlock Faze' + name-syntax: '[name]' + description-syntax: '[number] blokova' island: bossbar: description: prebacuje fazni boss bar - status_on: '&b Bossbar se &a uključio' - status_off: '&b Bossbar se &a isključio' + status_on: 'Bossbar se uključio' + status_off: 'Bossbar se isključio' actionbar: description: uključuje/isključuje akcijsku traku faze - status_on: "&b Akcijska traka &a uključena" - status_off: "&b Akcijska traka &c isključena" + status_on: "Akcijska traka uključena" + status_off: "Akcijska traka isključena" setcount: parameters: description: postaviti broj blokova na prethodno dovršenu vrijednost - set: '&a Brojanje postavljeno na [number].' - too-high: '&c Maksimalno što možete postaviti je [number]!' + set: 'Brojanje postavljeno na [number].' + too-high: 'Maksimalno što možete postaviti je [number]!' respawn-block: description: ponovno rađa magični blok u situacijama kada nestane - block-exist: >- - &a blok postoji, nije zahtijevao ponovno stvaranje. Označila sam za - tebe. - block-respawned: '&a blok se ponovno pojavio.' + block-exist: 'blok postoji, nije zahtijevao ponovno stvaranje. Označila sam za tebe.' + block-respawned: 'blok se ponovno pojavio.' phase: - insufficient-level: '&c Vaša razina otoka je preniska za nastavak! Mora biti [number].' - insufficient-funds: '&c Vaša su sredstva premala za nastavak! Moraju biti [number].' - insufficient-bank-balance: '&c Stanje otočne banke je premalo za nastavak! Mora biti [number].' - insufficient-permission: '&c Ne možete nastaviti dok ne dobijete dopuštenje [name]!' - cooldown: '&c Sljedeća faza bit će dostupna za [number] sekundi!' + insufficient-level: 'Vaša razina otoka je preniska za nastavak! Mora biti [number].' + insufficient-funds: 'Vaša su sredstva premala za nastavak! Moraju biti [number].' + insufficient-bank-balance: 'Stanje otočne banke je premalo za nastavak! Mora biti [number].' + insufficient-permission: 'Ne možete nastaviti dok ne dobijete dopuštenje [name]!' + cooldown: 'Sljedeća faza bit će dostupna za [number] sekundi!' placeholders: infinite: Beskonačno my-island-phase-default: Nepoznato gui: titles: - phases: '&0&l OneBlock faze' + phases: 'OneBlock faze' buttons: previous: - name: '&f&l Prethodna stranica' - description: '&7 Prijeđi na stranicu [number].' + name: 'Prethodna stranica' + description: 'Prijeđi na stranicu [number].' next: - name: '&f&l Sljedeća stranica' - description: '&7 Prijeđi na stranicu [number].' + name: 'Sljedeća stranica' + description: 'Prijeđi na stranicu [number].' phase: - name: '&f&l [phase]' + name: '[phase]' description: |- [starting-block] [biome] @@ -119,20 +113,20 @@ chunkblock: [economy] [level] [permission] - starting-block: '&7 Počinje nakon razbijanja &e [number] blokova.' - biome: '&7 Biome: &e [biome]' - bank: '&7 Zahtijeva &e $[number] &7 na bankovnom računu.' - economy: '&7 Zahtijeva &e $[number] &7 na računu igrača.' - level: '&7 Zahtijeva &e [number] &7 razinu otoka.' - permission: '&7 Zahtijeva dozvolu `&e[permission]&7`.' - blocks-prefix: '&7 Blokovi u fazi -' - blocks: '&e [name], ' + starting-block: 'Počinje nakon razbijanja [number] blokova.' + biome: 'Biome: [biome]' + bank: 'Zahtijeva $[number] na bankovnom računu.' + economy: 'Zahtijeva $[number] na računu igrača.' + level: 'Zahtijeva [number] razinu otoka.' + permission: 'Zahtijeva dozvolu `[permission]`.' + blocks-prefix: 'Blokovi u fazi -' + blocks: '[name], ' wrap-at: '50' tips: - click-to-previous: '&e Kliknite &7 za pregled prethodne stranice.' - click-to-next: '&e Kliknite &7 za pregled sljedeće stranice.' - click-to-change: '&e Kliknite &7 za promjenu.' + click-to-previous: 'Kliknite za pregled prethodne stranice.' + click-to-next: 'Kliknite za pregled sljedeće stranice.' + click-to-change: 'Kliknite za promjenu.' island: starting-hologram: |- - &aDobro došli u ChunkBlock - &eRazbijte ovaj blok za početak + Dobro došli u ChunkBlock + Razbijte ovaj blok za početak diff --git a/src/main/resources/locales/hu.yml b/src/main/resources/locales/hu.yml index 590c841..76919bf 100644 --- a/src/main/resources/locales/hu.yml +++ b/src/main/resources/locales/hu.yml @@ -3,118 +3,112 @@ protection: CHUNKBLOCK_MAGIC_BLOCK: name: Mágikus Blokk Védelem description: |- - &b Rang, amely képes - &b szétrombolni a mágikus - &b blokkot, ha tud blokkokat - &b rombolni. - hint: "&c A rangod nem törheti szét a mágikus blokkot!" + Rang, amely képes + szétrombolni a mágikus + blokkot, ha tud blokkokat + rombolni. + hint: "A rangod nem törheti szét a mágikus blokkot!" CHUNKBLOCK_START_SAFETY: name: Kezdő Biztonság description: |- - &b Megakadályozza az új játékosokat - &b a mozgásban 1 percig, - &b hogy ne essenek le. - hint: "&c Mozgás blokkolva biztonsági okokból még [number] másodpercig!" - free-to-move: "&a Szabadon mozoghatsz. Légy óvatos!" + Megakadályozza az új játékosokat + a mozgásban 1 percig, + hogy ne essenek le. + hint: "Mozgás blokkolva biztonsági okokból még [number] másodpercig!" + free-to-move: "Szabadon mozoghatsz. Légy óvatos!" CHUNKBLOCK_BOSSBAR: - name: Boss Bar - description: |- - &b Állapotjelző sávot - &b mutat minden fázishoz. + name: Boss Bar + description: |- + Állapotjelző sávot + mutat minden fázishoz. CHUNKBLOCK_ACTIONBAR: name: Műveleti Sáv (Action Bar) description: |- - &b Állapotot mutat - &b minden fázishoz - &b a Műveleti Sávban. + Állapotot mutat + minden fázishoz + a Műveleti Sávban. chunkblock: bossbar: title: Blokkok maradtak - status: '&a Fázisblokkok &b [done] &d / &b [total]' + status: 'Fázisblokkok [done] / [total]' color: RED style: SEGMENTED_20 - not-active: '&c A Boss Bar nem aktív ezen a szigeten' + not-active: 'A Boss Bar nem aktív ezen a szigeten' actionbar: - status: "&a Fázis: &b [phase-name] &d | &a Blokkok: &b [done] &d / &b [total] &d | &a Haladás: &b [percent-done]" - not-active: "&c Az akciósáv nem aktív ezen a szigeten" + status: "Fázis: [phase-name] | Blokkok: [done] / [total] | Haladás: [percent-done]" + not-active: "Az akciósáv nem aktív ezen a szigeten" commands: admin: setcount: parameters: description: állítsa be a játékos blokkszámát - set: '&a [name] számának beállítása erre: [number]' - set-lifetime: '&a [name] élettartama a következőre van állítva: [number]' + set: '[name] számának beállítása erre: [number]' + set-lifetime: '[name] élettartama a következőre van állítva: [number]' setchest: parameters: description: helyezze a nézett mellkasát egy szakaszba a megadott ritkasággal - chest-is-empty: '&c A mellkas üres, ezért nem adható hozzá' - unknown-phase: '&c Ismeretlen fázis. A Tab-Complete használatával megtekintheti őket' - unknown-rarity: '&c Ismeretlen ritkaság. Használjon COMMON, UNCOMMON, RARE vagy EPIC' - look-at-chest: '&c Nézzen meg egy töltött mellkasat, hogy beállítsa' - only-single-chest: '&c Csak egyetlen ládát lehet beállítani' + chest-is-empty: 'A mellkas üres, ezért nem adható hozzá' + unknown-phase: 'Ismeretlen fázis. A Tab-Complete használatával megtekintheti őket' + unknown-rarity: 'Ismeretlen ritkaság. Használjon COMMON, UNCOMMON, RARE vagy EPIC' + look-at-chest: 'Nézzen meg egy töltött mellkasat, hogy beállítsa' + only-single-chest: 'Csak egyetlen ládát lehet beállítani' success: és egy mellkas sikeresen hozzáadva a fázishoz - failure: '&c A mellkas nem adható hozzá a fázishoz! A hibákat lásd a konzolon' + failure: 'A mellkas nem adható hozzá a fázishoz! A hibákat lásd a konzolon' sanity: parameters: description: >- jelenítse meg a fázis valószínűségeinek józanság-ellenőrzését a konzolban - see-console: '&a Lásd a jelentés konzolt' + see-console: 'Lásd a jelentés konzolt' count: description: mutassa meg a blokkok számát és a fázist - info: '&a Ön a &b [number] blokkban van a &a [name] fázisban' + info: 'Ön a [number] blokkban van a [name] fázisban' info: - count: >- - Az &a sziget a &b [number]&a blokkon található, a &b [name] &a fázisban. - Élettartam száma &b [lifetime] &a. + count: 'Az sziget a [number] blokkon található, a [name] fázisban. Élettartam száma [lifetime] .' phases: description: az összes fázis felsorolása - title: '&2 OneBlock Fázis' - name-syntax: '&a [name]' - description-syntax: '&b [number] blokkolja' + title: 'OneBlock Fázis' + name-syntax: '[name]' + description-syntax: '[number] blokkolja' island: bossbar: description: váltók fázisú főnök sáv - status_on: '&b Bossbar &a bekapcsolt' - status_off: '&b Bossbar &c kikapcsolt' + status_on: 'Bossbar bekapcsolt' + status_off: 'Bossbar kikapcsolt' actionbar: description: fázis akciósáv ki/bekapcsolása - status_on: "&b Akciósáv &a bekapcsolva" - status_off: "&b Akciósáv &c kikapcsolva" + status_on: "Akciósáv bekapcsolva" + status_off: "Akciósáv kikapcsolva" setcount: parameters: description: állítsa be a blokkszámot a korábban kitöltött értékre - set: '&a A számláló értéke [szám].' - too-high: '&c A beállítható maximum [number]!' + set: 'A számláló értéke [szám].' + too-high: 'A beállítható maximum [number]!' respawn-block: description: varázsblokkot hoz újra olyan helyzetekben, amikor eltűnik - block-exist: '&a Blokk létezik, nem igényelt újbóli megjelenést. megjelöltem neked.' - block-respawned: '&a blokk újjáéledt.' + block-exist: 'Blokk létezik, nem igényelt újbóli megjelenést. megjelöltem neked.' + block-respawned: 'blokk újjáéledt.' phase: - insufficient-level: >- - &c A sziget szintje túl alacsony a folytatáshoz! Ennek a következőnek kell - lennie: [number]. - insufficient-funds: '&c A kerete túl kevés a folytatáshoz! Ezeknek [number]-nak kell lenniük.' - insufficient-bank-balance: >- - &c A sziget banki egyenlege túl alacsony a folytatáshoz! Ennek a - következőnek kell lennie: [number]. - insufficient-permission: '&c Nem folytathatja tovább, amíg meg nem szerzi a [name] engedélyt!' - cooldown: '&c A következő szakasz [number] másodpercen belül elérhető lesz!' + insufficient-level: 'A sziget szintje túl alacsony a folytatáshoz! Ennek a következőnek kell lennie: [number].' + insufficient-funds: 'A kerete túl kevés a folytatáshoz! Ezeknek [number]-nak kell lenniük.' + insufficient-bank-balance: 'A sziget banki egyenlege túl alacsony a folytatáshoz! Ennek a következőnek kell lennie: [number].' + insufficient-permission: 'Nem folytathatja tovább, amíg meg nem szerzi a [name] engedélyt!' + cooldown: 'A következő szakasz [number] másodpercen belül elérhető lesz!' placeholders: infinite: Végtelen my-island-phase-default: Ismeretlen gui: titles: - phases: '&0&l OneBlock fázisok' + phases: 'OneBlock fázisok' buttons: previous: - name: '&f&l Előző oldal' - description: '&7 Váltás a [number] oldalra' + name: 'Előző oldal' + description: 'Váltás a [number] oldalra' next: - name: '&f&l Következő oldal' - description: '&7 Váltás a [number] oldalra' + name: 'Következő oldal' + description: 'Váltás a [number] oldalra' phase: - name: '&f&l [phase]' + name: '[phase]' description: |- [starting-block] [biome] @@ -122,20 +116,20 @@ chunkblock: [economy] [level] [permission] - starting-block: '&7 Az &e [number] blokk feltörése után indul.' - biome: '&7 életrajz: &e [biome]' - bank: '&7 Szükséges &e $[number] &7 bankszámlára.' - economy: '&7 &e $[number] &7 játékos fiókot igényel.' - level: '&7 &e [number] &7 szigetszint szükséges.' - permission: '&7 `&e[permission]&7` engedély szükséges.' - blocks-prefix: '&7 Blokkok fázisban -' - blocks: '&e [name], ' + starting-block: 'Az [number] blokk feltörése után indul.' + biome: 'életrajz: [biome]' + bank: 'Szükséges $[number] bankszámlára.' + economy: '$[number] játékos fiókot igényel.' + level: '[number] szigetszint szükséges.' + permission: '`[permission]` engedély szükséges.' + blocks-prefix: 'Blokkok fázisban -' + blocks: '[name], ' wrap-at: '50' tips: - click-to-previous: '&e Kattintson a &7 gombra az előző oldal megtekintéséhez.' - click-to-next: '&e Kattintson a &7 gombra a következő oldal megtekintéséhez.' - click-to-change: '&e Kattintson a &7 gombra a módosításhoz.' + click-to-previous: 'Kattintson a gombra az előző oldal megtekintéséhez.' + click-to-next: 'Kattintson a gombra a következő oldal megtekintéséhez.' + click-to-change: 'Kattintson a gombra a módosításhoz.' island: starting-hologram: |- - &aÜdvözlünk az ChunkBlockban - &eSzüntesse meg ezt a blokkot a kezdéshez + Üdvözlünk az ChunkBlockban + Szüntesse meg ezt a blokkot a kezdéshez diff --git a/src/main/resources/locales/id.yml b/src/main/resources/locales/id.yml index a08e651..b2506f6 100644 --- a/src/main/resources/locales/id.yml +++ b/src/main/resources/locales/id.yml @@ -3,97 +3,93 @@ protection: CHUNKBLOCK_MAGIC_BLOCK: name: Perlindungan Blok Ajaib description: |- - &b Pangkat yang dapat - &b menghancurkan blok ajaib - &b jika mereka dapat menghancurkan blok. - hint: "&c Pangkatmu tidak dapat menghancurkan blok ajaib!" + Pangkat yang dapat + menghancurkan blok ajaib + jika mereka dapat menghancurkan blok. + hint: "Pangkatmu tidak dapat menghancurkan blok ajaib!" CHUNKBLOCK_START_SAFETY: name: Keamanan Awal description: |- - &b Mencegah pemain baru - &b bergerak selama 1 menit - &b agar mereka tidak jatuh. - hint: "&c Pergerakan diblokir untuk keselamatan selama [number] detik lagi!" - free-to-move: "&a Anda bebas bergerak. Hati-hati!" + Mencegah pemain baru + bergerak selama 1 menit + agar mereka tidak jatuh. + hint: "Pergerakan diblokir untuk keselamatan selama [number] detik lagi!" + free-to-move: "Anda bebas bergerak. Hati-hati!" CHUNKBLOCK_BOSSBAR: - name: Boss Bar - description: |- - &b Menampilkan bilah status - &b untuk setiap fase. + name: Boss Bar + description: |- + Menampilkan bilah status + untuk setiap fase. CHUNKBLOCK_ACTIONBAR: name: Action Bar description: |- - &b Menampilkan status - &b untuk setiap fase - &b di Action Bar. + Menampilkan status + untuk setiap fase + di Action Bar. chunkblock: bossbar: title: Blok tersisa - status: Blok fase &b [done] &d / &b [total] + status: 'Blok fase [done] / [total]' color: RED style: SEGMENTED_20 - not-active: '&c Bos Bar tidak aktif untuk pulau ini' + not-active: 'Bos Bar tidak aktif untuk pulau ini' actionbar: - status: "&a Fase: &b [phase-name] &d | &a Blok: &b [done] &d / &b [total] &d | &a Kemajuan: &b [percent-done]" - not-active: "&c Action Bar tidak aktif untuk pulau ini" + status: "Fase: [phase-name] | Blok: [done] / [total] | Kemajuan: [percent-done]" + not-active: "Action Bar tidak aktif untuk pulau ini" commands: admin: setcount: parameters: description: atur jumlah blok pemain - set: '&a hitungan [name] diatur ke [number]' - set-lifetime: '&a Hitungan seumur hidup [name] diatur ke [number]' + set: 'hitungan [name] diatur ke [number]' + set-lifetime: 'Hitungan seumur hidup [name] diatur ke [number]' setchest: parameters: description: letakkan dada yang tampak dalam fase dengan kelangkaan yang ditentukan - chest-is-empty: '&c Peti itu kosong sehingga tidak bisa ditambahkan' - unknown-phase: '&c Fase tidak dikenal. Gunakan tab-complete untuk melihatnya' - unknown-rarity: >- - &c Kelangkaan tidak diketahui. Gunakan COMMON, UNCOMMON, RARE atau - EPIC - look-at-chest: '&c Lihat peti berisi untuk mengaturnya' - only-single-chest: '&c Hanya peti tunggal yang dapat ditetapkan' - success: '&a Dada berhasil ditambahkan ke fase' - failure: '&c Dada tidak dapat ditambahkan ke fase! Lihat konsol untuk kesalahan' + chest-is-empty: 'Peti itu kosong sehingga tidak bisa ditambahkan' + unknown-phase: 'Fase tidak dikenal. Gunakan tab-complete untuk melihatnya' + unknown-rarity: 'Kelangkaan tidak diketahui. Gunakan COMMON, UNCOMMON, RARE atau EPIC' + look-at-chest: 'Lihat peti berisi untuk mengaturnya' + only-single-chest: 'Hanya peti tunggal yang dapat ditetapkan' + success: 'Dada berhasil ditambahkan ke fase' + failure: 'Dada tidak dapat ditambahkan ke fase! Lihat konsol untuk kesalahan' sanity: parameters: description: menampilkan pemeriksaan kewarasan dari probabilitas fase di konsol - see-console: '&a Lihat konsol untuk laporannya' + see-console: 'Lihat konsol untuk laporannya' count: description: perlihatkan jumlah blok dan fase - info: '&a Anda berada di blok &b [number] dalam fase &a [name]' + info: 'Anda berada di blok [number] dalam fase [name]' info: - count: '&a Pulau ada di blok &b [number] &a dalam fase &b [name]. ' + count: 'Pulau ada di blok [number] dalam fase [name]. ' phases: description: perlihatkan daftar semua fase - title: '&2 Fase OneBlock' - name-syntax: '&a [name]' - description-syntax: '&b [number] blok' + title: 'Fase OneBlock' + name-syntax: '[name]' + description-syntax: '[number] blok' island: bossbar: description: Mengalogkan Bar Bos Fase - status_on: '&b Bos bar &a dihidupkan' - status_off: '&b Bos bar &c dimatikan' + status_on: 'Bos bar dihidupkan' + status_off: 'Bos bar dimatikan' actionbar: description: mengaktifkan/menonaktifkan action bar fase - status_on: "&b Action Bar &a diaktifkan" - status_off: "&b Action Bar &c dinonaktifkan" + status_on: "Action Bar diaktifkan" + status_off: "Action Bar dinonaktifkan" setcount: parameters: description: Setel jumlah blok ke nilai yang sebelumnya selesai - set: '&a Hitung diatur ke [number].' - too-high: '&c Maksimum yang dapat Anda atur adalah [number]!' + set: 'Hitung diatur ke [number].' + too-high: 'Maksimum yang dapat Anda atur adalah [number]!' respawn-block: description: respawns blok ajaib dalam situasi saat menghilang - block-exist: '&a Blok ada, tidak memerlukan respawning. ' - block-respawned: '&a Blokir dihidupkan kembali.' + block-exist: 'Blok ada, tidak memerlukan respawning. ' + block-respawned: 'Blokir dihidupkan kembali.' phase: - insufficient-level: '&c Tingkat pulau Anda terlalu rendah untuk [number]! ' - insufficient-funds: '&c Dana Anda terlalu rendah untuk [number]! ' - insufficient-bank-balance: '&c Saldo bank pulau terlalu rendah untuk [number]! ' - insufficient-permission: >- - &c Anda tidak dapat melanjutkan lebih jauh sampai Anda mendapatkan izin - [name]! + insufficient-level: 'Tingkat pulau Anda terlalu rendah untuk [number]! ' + insufficient-funds: 'Dana Anda terlalu rendah untuk [number]! ' + insufficient-bank-balance: 'Saldo bank pulau terlalu rendah untuk [number]! ' + insufficient-permission: 'Anda tidak dapat melanjutkan lebih jauh sampai Anda mendapatkan izin [name]!' cooldown: Fase berikutnya akan tersedia dalam detik [number]! placeholders: infinite: Tak terbatas @@ -103,13 +99,13 @@ chunkblock: phases: ChunkBlock Phases buttons: 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 berikutnya' - description: '&7 Beralih ke halaman [number]' + name: 'halaman berikutnya' + description: 'Beralih ke halaman [number]' phase: - name: '&f&l [phase]' + name: '[phase]' description: |- [starting-block] [biome] @@ -118,20 +114,20 @@ chunkblock: [level] [permission] [blocks] - starting-block: '&7 Dimulai setelah melanggar &e blok [number].' - biome: '&7 Biome: &e [biome]' - bank: '&7 Membutuhkan &e $[number] &7 di rekening bank.' - economy: '&7 Membutuhkan &e $[number] &7 di akun pemain.' - level: '&7 Membutuhkan tingkat pulau &e [number].' - permission: '&7 Membutuhkan izin &e `[permission]`.' - blocks-prefix: '&7 Blok dalam fase -' - blocks: '&e [name], ' + starting-block: 'Dimulai setelah melanggar blok [number].' + biome: 'Biome: [biome]' + bank: 'Membutuhkan $[number] di rekening bank.' + economy: 'Membutuhkan $[number] di akun pemain.' + level: 'Membutuhkan tingkat pulau [number].' + permission: 'Membutuhkan izin `[permission]`.' + blocks-prefix: 'Blok dalam fase -' + blocks: '[name], ' wrap-at: '50' tips: - click-to-previous: '&e Klik &7 untuk melihat halaman sebelumnya.' - click-to-next: '&e Klik &7 untuk melihat halaman berikutnya.' - click-to-change: '&e Klik &7 untuk berubah.' + click-to-previous: 'Klik untuk melihat halaman sebelumnya.' + click-to-next: 'Klik untuk melihat halaman berikutnya.' + click-to-change: 'Klik untuk berubah.' island: starting-hologram: |- - &a Selamat datang di AONEBLOCK - &e Hancurkan blok ini untuk memulai + Selamat datang di AONEBLOCK + Hancurkan blok ini untuk memulai diff --git a/src/main/resources/locales/it.yml b/src/main/resources/locales/it.yml index 300d221..d79f37c 100644 --- a/src/main/resources/locales/it.yml +++ b/src/main/resources/locales/it.yml @@ -3,113 +3,111 @@ protection: CHUNKBLOCK_MAGIC_BLOCK: name: Protezione Blocco Magico description: |- - &b Rango che può rompere il - &b blocco magico se può - &b rompere i blocchi. - hint: "&c Il tuo rango non può rompere il blocco magico!" + Rango che può rompere il + blocco magico se può + rompere i blocchi. + hint: "Il tuo rango non può rompere il blocco magico!" CHUNKBLOCK_START_SAFETY: name: Sicurezza Iniziale description: |- - &b Impedisce ai nuovi giocatori - &b di muoversi per 1 minuto - &b in modo che non cadano. - hint: "&c Movimento bloccato per sicurezza per [number] secondi ancora!" - free-to-move: "&a Sei libero di muoverti. Fai attenzione!" + Impedisce ai nuovi giocatori + di muoversi per 1 minuto + in modo che non cadano. + hint: "Movimento bloccato per sicurezza per [number] secondi ancora!" + free-to-move: "Sei libero di muoverti. Fai attenzione!" CHUNKBLOCK_BOSSBAR: - name: Boss Bar - description: |- - &b Mostra una barra di stato - &b per ogni fase. + name: Boss Bar + description: |- + Mostra una barra di stato + per ogni fase. CHUNKBLOCK_ACTIONBAR: name: Action Bar description: |- - &b Mostra uno stato - &b per ogni fase - &b nella Action Bar. + Mostra uno stato + per ogni fase + nella Action Bar. chunkblock: bossbar: title: Blocca i restanti - status: '&a Blocchi di fase &b [done] &d / &b [total]' + status: 'Blocchi di fase [done] / [total]' color: RED style: SEGMENTED_20 - not-active: '&c Boss Bar non è attivo per quest''isola' + not-active: 'Boss Bar non è attivo per quest''isola' actionbar: - status: "&a Fase: &b [phase-name] &d | &a Blocchi: &b [done] &d / &b [total] &d | &a Progresso: &b [percent-done]" - not-active: "&c La barra d'azione non è attiva per quest'isola" + status: "Fase: [phase-name] | Blocchi: [done] / [total] | Progresso: [percent-done]" + not-active: "La barra d'azione non è attiva per quest'isola" commands: admin: setcount: parameters: description: imposta il conteggio dei blocchi del giocatore - set: '&a il conteggio di [name] impostato su [number]' - set-lifetime: '&a Il conteggio della vita di [name] è impostato su [number]' + set: 'il conteggio di [name] impostato su [number]' + set-lifetime: 'Il conteggio della vita di [name] è impostato su [number]' setchest: parameters: description: mettere il torace osservato in una fase con la rarità specificata - chest-is-empty: '&c Quella cassa è vuota quindi non può essere aggiunta' - unknown-phase: '&c Fase sconosciuta. Usa tab-complete per vederli' - unknown-rarity: '&c Rarità sconosciuta. Utilizzare COMMON, UNCOMMON, RARE o EPIC' - look-at-chest: '&c Guarda una cassa piena per impostarla' - only-single-chest: '&c Possono essere impostati solo singoli forzieri' - success: '&a Una cassa aggiunta correttamente alla fase' - failure: '&c Chest non può essere aggiunto alla fase! Vedi console per errori' + chest-is-empty: 'Quella cassa è vuota quindi non può essere aggiunta' + unknown-phase: 'Fase sconosciuta. Usa tab-complete per vederli' + unknown-rarity: 'Rarità sconosciuta. Utilizzare COMMON, UNCOMMON, RARE o EPIC' + look-at-chest: 'Guarda una cassa piena per impostarla' + only-single-chest: 'Possono essere impostati solo singoli forzieri' + success: 'Una cassa aggiunta correttamente alla fase' + failure: 'Chest non può essere aggiunto alla fase! Vedi console per errori' sanity: parameters: description: >- visualizzare un controllo di integrità delle probabilità di fase nella console - see-console: '&a Vedi la console per il rapporto' + see-console: 'Vedi la console per il rapporto' count: description: mostra il conteggio dei blocchi e la fase - info: '&a Sei sul blocco &b [number] nella fase &a [name]' + info: 'Sei sul blocco [number] nella fase [name]' info: - count: >- - &a L'isola è in blocco &b [number] &a nella fase &b [name] &a. Lifetime - count &b [lifetime] &a. + count: 'L''isola è in blocco [number] nella fase [name] . Lifetime count [lifetime] .' phases: description: mostra un elenco di tutte le fasi - title: '&2 Fasi OneBlock' - name-syntax: '&a [name]' - description-syntax: '&b [number] blocchi' + title: 'Fasi OneBlock' + name-syntax: '[name]' + description-syntax: '[number] blocchi' island: bossbar: description: barra boss di fase di levetta - status_on: '&b Bossbar si è &a acceso' - status_off: '&b Bossbar si è &c spento' + status_on: 'Bossbar si è acceso' + status_off: 'Bossbar si è spento' actionbar: description: "attiva/disattiva la barra d'azione della fase" - status_on: "&b Barra d'azione &a attivata" - status_off: "&b Barra d'azione &c disattivata" + status_on: "Barra d'azione attivata" + status_off: "Barra d'azione disattivata" setcount: parameters: description: Imposta il conteggio dei blocchi sul valore precedentemente completato - set: '&a Contare impostato su [number].' - too-high: '&c Il massimo che puoi impostare è [number]!' + set: 'Contare impostato su [number].' + too-high: 'Il massimo che puoi impostare è [number]!' respawn-block: description: Respira il blocco magico in situazioni quando scompare - block-exist: '&a Il blocco esiste, non ha richiesto il rigenerazione. ' - block-respawned: '&a Blocco rigenerato.' + block-exist: 'Il blocco esiste, non ha richiesto il rigenerazione. ' + block-respawned: 'Blocco rigenerato.' phase: insufficient-level: 'Il tuo livello dell''isola è troppo basso per procedere! ' insufficient-funds: '& c i tuoi fondi sono troppo bassi per procedere! Devono essere [number].' - insufficient-bank-balance: '&c The island bank balance is too low to proceed! It must be [number].' - insufficient-permission: '&c You can proceed no further until you obtain the [name] permission!' - cooldown: '&c Next phase will be available in [number] seconds!' + insufficient-bank-balance: 'The island bank balance is too low to proceed! It must be [number].' + insufficient-permission: 'You can proceed no further until you obtain the [name] permission!' + cooldown: 'Next phase will be available in [number] seconds!' placeholders: infinite: Infinito my-island-phase-default: Sconosciuta gui: titles: - phases: '&0&l fasi di un blocco' + phases: 'fasi di un blocco' buttons: previous: name: '& l pagina precedente' - description: '&7 Passa alla pagina [number]' + description: 'Passa alla pagina [number]' next: - name: '&f&l Pagina successiva' - description: '&7 Passa alla pagina [number]' + name: 'Pagina successiva' + description: 'Passa alla pagina [number]' phase: - name: '&f&l [phase]' + name: '[phase]' description: |- [starting-block] [biome] @@ -118,20 +116,20 @@ chunkblock: [level] [permission] [blocks] - starting-block: '&7 Inizia dopo aver rotto i blocchi &e [number].' - biome: '&7 Biome: &e [biome]' - bank: '&7 Richiede &e $ [number] &7 nel conto bancario.' - economy: '&7 Richiede &e $ [number] &7 nell''account giocatore.' - level: '&7 Richiede il livello &e [number] &7 dell''isola.' - permission: '&7 Richiede il permesso &e`[permission]`.' - blocks-prefix: '&7 Blocchi in fase -' - blocks: '&e [name], ' + starting-block: 'Inizia dopo aver rotto i blocchi [number].' + biome: 'Biome: [biome]' + bank: 'Richiede $ [number] nel conto bancario.' + economy: 'Richiede $ [number] nell''account giocatore.' + level: 'Richiede il livello [number] dell''isola.' + permission: 'Richiede il permesso `[permission]`.' + blocks-prefix: 'Blocchi in fase -' + blocks: '[name], ' wrap-at: '50' tips: - click-to-previous: '&e Fare clic &7 per visualizzare la pagina precedente.' - click-to-next: '&e Fare clic &7 per visualizzare la pagina successiva.' - click-to-change: '&e Fai clic &7 per cambiare.' + click-to-previous: 'Fare clic per visualizzare la pagina precedente.' + click-to-next: 'Fare clic per visualizzare la pagina successiva.' + click-to-change: 'Fai clic per cambiare.' island: starting-hologram: |- - &a Benvenuti in Aoneblock - &e Rompere questo blocco per iniziare + Benvenuti in Aoneblock + Rompere questo blocco per iniziare diff --git a/src/main/resources/locales/ja.yml b/src/main/resources/locales/ja.yml index 8239163..bbb78c1 100644 --- a/src/main/resources/locales/ja.yml +++ b/src/main/resources/locales/ja.yml @@ -3,46 +3,46 @@ protection: CHUNKBLOCK_MAGIC_BLOCK: name: 魔法ブロック保護 description: |- - &b ブロックを破壊できる場合、 - &b 魔法ブロックを破壊できる - &b ランク。 - hint: "&c あなたのランクでは魔法ブロックを破壊できません!" + ブロックを破壊できる場合、 + 魔法ブロックを破壊できる + ランク。 + hint: "あなたのランクでは魔法ブロックを破壊できません!" CHUNKBLOCK_START_SAFETY: name: 開始時の安全対策 description: |- - &b 新しいプレイヤーが - &b 1分間移動するのを防ぎ、 - &b 落下を防ぎます。 - hint: "&c 安全のため、あと [number] 秒間移動がブロックされています!" - free-to-move: "&a 自由に動けます。注意してください!" + 新しいプレイヤーが + 1分間移動するのを防ぎ、 + 落下を防ぎます。 + hint: "安全のため、あと [number] 秒間移動がブロックされています!" + free-to-move: "自由に動けます。注意してください!" CHUNKBLOCK_BOSSBAR: - name: ボスバー - description: |- - &b 各フェーズの - &b ステータスバーを表示します。 + name: ボスバー + description: |- + 各フェーズの + ステータスバーを表示します。 CHUNKBLOCK_ACTIONBAR: name: アクションバー description: |- - &b 各フェーズの - &b ステータスを - &b アクションバーに表示します。 + 各フェーズの + ステータスを + アクションバーに表示します。 chunkblock: bossbar: title: 残りのブロック - status: 位相ブロック &b [done] &d / &b [total] + status: '位相ブロック [done] / [total]' color: RED style: SEGMENTED_20 - not-active: '&c この島ではボスバーがアクティブではありません' + not-active: 'この島ではボスバーがアクティブではありません' actionbar: - status: "&a フェーズ: &b [phase-name] &d | &a ブロック数: &b [done] &d / &b [total] &d | &a 進行状況: &b [percent-done]" - not-active: "&c この島ではアクションバーが有効ではありません" + status: "フェーズ: [phase-name] | ブロック数: [done] / [total] | 進行状況: [percent-done]" + not-active: "この島ではアクションバーが有効ではありません" commands: admin: setcount: parameters: <名前> <数> description: プレイヤーのブロック数を設定する set: '[name]の数が[number]に設定されました' - set-lifetime: '&a [name] の有効期間カウントが [number] に設定されました' + set-lifetime: '[name] の有効期間カウントが [number] に設定されました' setchest: parameters: <フェーズ> <レア度> description: 見つめられた胸部を、指定された希少性を持つフェーズに置く @@ -61,53 +61,51 @@ chunkblock: description: ブロック数とフェーズを表示する info: '[name]フェーズのブロック[number]にいます' info: - count: >- - &a 島は &b [name] &a フェーズのブロック &b [number]&a 上にあります。生涯カウント &b [lifetime] - &a。 + count: '島は [name] フェーズのブロック [number] 上にあります。生涯カウント [lifetime] ' phases: description: すべてのフェーズのリストを表示する title: &2 OneBlockフェーズ - name-syntax: '&a[name]' - description-syntax: '&b [number]ブロック' + name-syntax: '[name]' + description-syntax: '[number]ブロック' island: bossbar: description: トグルフェーズボスバー - status_on: '&b ボスバーが&a オン' - status_off: '&b ボスバーが&aオフ' + status_on: 'ボスバーが オン' + status_off: 'ボスバーがオフ' actionbar: description: フェーズアクションバーの切り替え - status_on: "&b アクションバーを &a オン &bにしました" - status_off: "&b アクションバーを &c オフ &bにしました" + status_on: "アクションバーを オン にしました" + status_off: "アクションバーを オフ にしました" setcount: parameters: <カウント> description: ブロック数を以前に完了した値に設定する - set: '&a カウントを [数値] に設定します。' - too-high: '&c 設定できる最大値は [number] です!' + set: 'カウントを [数値] に設定します。' + too-high: '設定できる最大値は [number] です!' respawn-block: description: マジックブロックが消えた場合に再出現します - block-exist: '&a ブロックが存在します。再生成は必要ありませんでした。私はあなたのためにそれをマークしました。' - block-respawned: '&a ブロックが復活しました。' + block-exist: 'ブロックが存在します。再生成は必要ありませんでした。私はあなたのためにそれをマークしました。' + block-respawned: 'ブロックが復活しました。' phase: - insufficient-level: '&c 島のレベルが低すぎるので先に進めません! [number] である必要があります。' - insufficient-funds: '&c 資金が少なすぎるため続行できません。 [number] である必要があります。' - insufficient-bank-balance: '&c 島の銀行残高が少なすぎるため続行できません。 [number] である必要があります。' - insufficient-permission: '&c [name] の許可を取得するまで、これ以上先に進むことはできません。' - cooldown: '&c [number] 秒で次のステージへ!' + insufficient-level: '島のレベルが低すぎるので先に進めません! [number] である必要があります。' + insufficient-funds: '資金が少なすぎるため続行できません。 [number] である必要があります。' + insufficient-bank-balance: '島の銀行残高が少なすぎるため続行できません。 [number] である必要があります。' + insufficient-permission: '[name] の許可を取得するまで、これ以上先に進むことはできません。' + cooldown: '[number] 秒で次のステージへ!' placeholders: infinite: 無限 my-island-phase-default: 不明 gui: titles: - phases: '&0&l ワンブロックフェーズ' + phases: 'ワンブロックフェーズ' buttons: previous: - name: '&f&l 前のページ' - description: '&7 [number]ページに切り替えます' + name: '前のページ' + description: '[number]ページに切り替えます' next: - name: '&f&l 次のページ' - description: '&7 [番号]ページに切り替えます' + name: '次のページ' + description: '[番号]ページに切り替えます' phase: - name: '&f&l [phase]' + name: '[phase]' description: |- [starting-block] [biome] @@ -115,20 +113,20 @@ chunkblock: [economy] [level] [permission] - starting-block: '&7 &e [number] ブロックを分割した後に開始します。' - biome: '&7 バイオーム: &e [biome]' - bank: '&7 銀行口座に &e $[number] &7 が必要です。' - economy: '&7 プレイヤーアカウントに &e $[number] &7 が必要です。' - level: '&7 &e [number] &7 の島レベルが必要です。' - permission: '&7 `&e[permission]&7` 権限が必要です。' - blocks-prefix: '&7 フェーズのブロック - ' - blocks: '&e [name], ' + starting-block: '[number] ブロックを分割した後に開始します。' + biome: 'バイオーム: [biome]' + bank: '銀行口座に $[number] が必要です。' + economy: 'プレイヤーアカウントに $[number] が必要です。' + level: '[number] の島レベルが必要です。' + permission: '`[permission]` 権限が必要です。' + blocks-prefix: 'フェーズのブロック - ' + blocks: '[name], ' wrap-at: '50' tips: - click-to-previous: '&e &7 をクリックして前のページを表示します。' - click-to-next: '&e &7 をクリックして次のページを表示します。' - click-to-change: '&e &7 をクリックして変更します。' + click-to-previous: 'をクリックして前のページを表示します。' + click-to-next: 'をクリックして次のページを表示します。' + click-to-change: 'をクリックして変更します。' island: starting-hologram: |- - &aChunkBlock へようこそ - &eこのブロックを壊して開始してください + ChunkBlock へようこそ + このブロックを壊して開始してください diff --git a/src/main/resources/locales/pl.yml b/src/main/resources/locales/pl.yml index 2fdb553..b2f0587 100644 --- a/src/main/resources/locales/pl.yml +++ b/src/main/resources/locales/pl.yml @@ -3,90 +3,88 @@ protection: CHUNKBLOCK_MAGIC_BLOCK: name: Ochrona Magicznego Bloku description: |- - &b Ranga, która może zniszczyć - &b magiczny blok, jeśli - &b może niszczyć bloki. - hint: "&c Twoja ranga nie może zniszczyć magicznego bloku!" + Ranga, która może zniszczyć + magiczny blok, jeśli + może niszczyć bloki. + hint: "Twoja ranga nie może zniszczyć magicznego bloku!" CHUNKBLOCK_START_SAFETY: name: Bezpieczeństwo Początkowe description: |- - &b Zapobiega poruszaniu się - &b nowym graczom przez 1 minutę, - &b aby nie spadli. - hint: "&c Ruch zablokowany ze względów bezpieczeństwa na kolejne [number] sekund!" - free-to-move: "&a Możesz się swobodnie poruszać. Bądź ostrożny!" + Zapobiega poruszaniu się + nowym graczom przez 1 minutę, + aby nie spadli. + hint: "Ruch zablokowany ze względów bezpieczeństwa na kolejne [number] sekund!" + free-to-move: "Możesz się swobodnie poruszać. Bądź ostrożny!" CHUNKBLOCK_BOSSBAR: - name: Pasek Bossa - description: |- - &b Pokazuje pasek statusu - &b dla każdej fazy. + name: Pasek Bossa + description: |- + Pokazuje pasek statusu + dla każdej fazy. CHUNKBLOCK_ACTIONBAR: name: Pasek Akcji description: |- - &b Pokazuje status - &b dla każdej fazy - &b na Pasku Akcji. + Pokazuje status + dla każdej fazy + na Pasku Akcji. chunkblock: bossbar: title: Pozostałe bloki - status: '&a Bloki fazowe &b [done] &d / &b [total]' + status: 'Bloki fazowe [done] / [total]' color: RED style: SEGMENTED_20 - not-active: '&c Boss Bar nie jest aktywny dla tej wyspy' + not-active: 'Boss Bar nie jest aktywny dla tej wyspy' actionbar: - status: "&a Faza: &b [phase-name] &d | &a Bloki: &b [done] &d / &b [total] &d | &a Postęp: &b [percent-done]" - not-active: "&c Pasek akcji nie jest aktywny dla tej wyspy" + status: "Faza: [phase-name] | Bloki: [done] / [total] | Postęp: [percent-done]" + not-active: "Pasek akcji nie jest aktywny dla tej wyspy" commands: admin: setcount: parameters: description: ustaw liczbę bloków gracza - set: '&a Liczba [name] została ustawiona na [number]' - set-lifetime: '&a [name] licznik życia ustawiony na [number]' + set: 'Liczba [name] została ustawiona na [number]' + set-lifetime: '[name] licznik życia ustawiony na [number]' setchest: parameters: description: umieść oglądaną skrzynię w fazie o określonej rzadkości - chest-is-empty: '&cTa skrzynia jest pusta, więc nie można jej dodać' - unknown-phase: '&cNieznana faza. Aby uzupełnić, użyj tabulacji' - unknown-rarity: '&cNieznana rzadkość. Użyj COMMON, UNCOMMON, RARE lub EPIC' - look-at-chest: '&cSpójrz na wypełnioną skrzynię, aby ją ustawić' - only-single-chest: '&cMożna ustawić tylko pojedyncze skrzynie' - success: '&aSkrzynia pomyślnie dodana do fazy' - failure: '&cSkrzynia nie mogła zostać dodana do fazy! Zobacz błąd w konsoli' + chest-is-empty: 'Ta skrzynia jest pusta, więc nie można jej dodać' + unknown-phase: 'Nieznana faza. Aby uzupełnić, użyj tabulacji' + unknown-rarity: 'Nieznana rzadkość. Użyj COMMON, UNCOMMON, RARE lub EPIC' + look-at-chest: 'Spójrz na wypełnioną skrzynię, aby ją ustawić' + only-single-chest: 'Można ustawić tylko pojedyncze skrzynie' + success: 'Skrzynia pomyślnie dodana do fazy' + failure: 'Skrzynia nie mogła zostać dodana do fazy! Zobacz błąd w konsoli' sanity: parameters: description: wyświetlać kontrolę poprawności prawdopodobieństwa fazy w konsoli - see-console: '&a Zobacz raport w konsoli' + see-console: 'Zobacz raport w konsoli' count: description: pokaż liczbę bloków i fazę - info: '&a Jesteś na bloku &b [number] w fazie &a [name]' + info: 'Jesteś na bloku [number] w fazie [name]' info: - count: >- - &a Wyspa jest na bloku &b [number] w fazie [name]. Lifetime count &b - [lifetime] &a. + count: 'Wyspa jest na bloku [number] w fazie [name]. Lifetime count [lifetime] .' phases: description: pokaż listę wszystkich faz - title: '&2 Fazy OneBlock' - name-syntax: '&a [name]' - description-syntax: '&b [number] bloków' + title: 'Fazy OneBlock' + name-syntax: '[name]' + description-syntax: '[number] bloków' island: bossbar: description: Przełącza fazę boss - status_on: '&b Bossbar &a włączył' - status_off: '&b Bossbar &a wyłączył' + status_on: 'Bossbar włączył' + status_off: 'Bossbar wyłączył' actionbar: description: przełącza pasek akcji fazy - status_on: "&b Pasek akcji &a włączony" - status_off: "&b Pasek akcji &c wyłączony" + status_on: "Pasek akcji włączony" + status_off: "Pasek akcji wyłączony" setcount: parameters: description: ustaw liczbę bloków na poprzednio uzupełnioną wartość - set: '&a Liczba ustawiona na [number].' - too-high: '&c Maksymalna wartość, jaką możesz ustawić, to [number]!' + set: 'Liczba ustawiona na [number].' + too-high: 'Maksymalna wartość, jaką możesz ustawić, to [number]!' respawn-block: description: odnawia magiczny blok, w przypadku zniknięcia - block-exist: '&a Blok nie potrzebował odnowienia. Został chwilowo zaznaczony' - block-respawned: '&a Odnowiono blok, proszę nie usuwaj go ponownie' + block-exist: 'Blok nie potrzebował odnowienia. Został chwilowo zaznaczony' + block-respawned: 'Odnowiono blok, proszę nie usuwaj go ponownie' phase: insufficient-level: Poziom Twojej wyspy jest za niski, aby kontynuować! Musi to być [number]. insufficient-funds: Twoje fundusze są zbyt niskie, aby kontynuować! Musisz posiadać [number]. @@ -94,22 +92,22 @@ chunkblock: Saldo na rachunku bankowym wyspy jest zbyt niskie, aby kontynuować! Musi to być [number]. insufficient-permission: Nie możesz kontynuować, dopóki nie uzyskasz pozwolenia [name]! - cooldown: '&c Następny etap będzie dostępny za [number] sekund!' + cooldown: 'Następny etap będzie dostępny za [number] sekund!' placeholders: infinite: Nieskończony my-island-phase-default: Nieznana gui: titles: - phases: '&0&l Fazy OneBlock' + phases: 'Fazy OneBlock' buttons: previous: - name: '&f&lNastępna strona' - description: '&7 Przeskocz do [number] strony' + name: 'Następna strona' + description: 'Przeskocz do [number] strony' next: - name: '&f&l Następna strona' - description: '&7 Przeskocz do [number] strony' + name: 'Następna strona' + description: 'Przeskocz do [number] strony' phase: - name: '&f&l [phase]' + name: '[phase]' description: |- [starting-block] [biome] @@ -117,20 +115,20 @@ chunkblock: [economy] [level] [permission] - starting-block: '&7 Rozpoczyna sie po&e [number] &7zniszczonych blokach.' - biome: '&7 Biom: &e [biome]' - bank: '&7 Potrzebujesz&e $[number] &7 na twoim koncie.' - economy: '&7 Potrzebujesz&e $[number] &7 na twoim koncie.' - level: '&7 Potrzebujesz &e [number] &7 poziom wyspy.' - permission: '&7 Wymaga uprawnienia `&e[permission]&7`.' - blocks-prefix: '&7 Bloki w fazie -' - blocks: '&e [name], ' + starting-block: 'Rozpoczyna sie po [number] zniszczonych blokach.' + biome: 'Biom: [biome]' + bank: 'Potrzebujesz $[number] na twoim koncie.' + economy: 'Potrzebujesz $[number] na twoim koncie.' + level: 'Potrzebujesz [number] poziom wyspy.' + permission: 'Wymaga uprawnienia `[permission]`.' + blocks-prefix: 'Bloki w fazie -' + blocks: '[name], ' wrap-at: '50' tips: - 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-change: '&e Kliknij &7, aby zmienić.' + click-to-previous: 'Kliknij , aby wyświetlić poprzednią stronę.' + click-to-next: 'Kliknij , aby wyświetlić następną stronę.' + click-to-change: 'Kliknij , aby zmienić.' island: starting-hologram: |- - &aWitamy w OneBlock - &eZniszcz ten blok, aby rozpocząć + Witamy w OneBlock + Zniszcz ten blok, aby rozpocząć diff --git a/src/main/resources/locales/pt.yml b/src/main/resources/locales/pt.yml index 5e417a0..8d566e0 100644 --- a/src/main/resources/locales/pt.yml +++ b/src/main/resources/locales/pt.yml @@ -3,98 +3,96 @@ protection: CHUNKBLOCK_MAGIC_BLOCK: name: Proteção de Bloco Mágico description: |- - &b Rank que pode quebrar o - &b bloco mágico se puder - &b quebrar blocos. - hint: "&c Seu rank não pode quebrar o bloco mágico!" + Rank que pode quebrar o + bloco mágico se puder + quebrar blocos. + hint: "Seu rank não pode quebrar o bloco mágico!" CHUNKBLOCK_START_SAFETY: name: Segurança Inicial description: |- - &b Impede que novos jogadores - &b se movam por 1 minuto - &b para que não caiam. - hint: "&c Movimento bloqueado por segurança por mais [number] segundos!" - free-to-move: "&a Você está livre para se mover. Tenha cuidado!" + Impede que novos jogadores + se movam por 1 minuto + para que não caiam. + hint: "Movimento bloqueado por segurança por mais [number] segundos!" + free-to-move: "Você está livre para se mover. Tenha cuidado!" CHUNKBLOCK_BOSSBAR: - name: Boss Bar - description: |- - &b Mostra uma barra de status - &b para cada fase. + name: Boss Bar + description: |- + Mostra uma barra de status + para cada fase. CHUNKBLOCK_ACTIONBAR: name: Action Bar description: |- - &b Mostra um status - &b para cada fase - &b na Action Bar. + Mostra um status + para cada fase + na Action Bar. chunkblock: bossbar: title: Bloqueia o restante - status: '&a Blocos de fase &b [done] &d / &b [total]' + status: 'Blocos de fase [done] / [total]' color: RED style: SEGMENTED_20 - not-active: '&c O Boss Bar não está ativo para esta ilha' + not-active: 'O Boss Bar não está ativo para esta ilha' actionbar: - status: "&a Fase: &b [phase-name] &d | &a Blocos: &b [done] &d / &b [total] &d | &a Progresso: &b [percent-done]" - not-active: "&c A barra de ação não está ativa para esta ilha" + status: "Fase: [phase-name] | Blocos: [done] / [total] | Progresso: [percent-done]" + not-active: "A barra de ação não está ativa para esta ilha" commands: admin: setcount: parameters: description: definir contagem de blocos do jogador - set: '&a [name] contagem definida para [number]' - set-lifetime: '&a A contagem de vida útil [name] definida como [number]' + set: '[name] contagem definida para [number]' + set-lifetime: 'A contagem de vida útil [name] definida como [number]' setchest: parameters: description: colocar o baú olhado em uma fase com a raridade especificada - chest-is-empty: '&c Esse baú está vazio, então não pode ser adicionado' - unknown-phase: '&c Fase desconhecida. Use tab-complete para vê-los' - unknown-rarity: '&c Raridade desconhecida. Use COMMON, UNCOMMON, RARE ou EPIC' - look-at-chest: '&c Olhe para um baú cheio para configurá-lo' - only-single-chest: '&c Apenas baús individuais podem ser ajustados' - success: '&a Baú adicionado com sucesso à fase' - failure: '&c O Bau não pôde ser adicionado à fase! Veja o console para erros' + chest-is-empty: 'Esse baú está vazio, então não pode ser adicionado' + unknown-phase: 'Fase desconhecida. Use tab-complete para vê-los' + unknown-rarity: 'Raridade desconhecida. Use COMMON, UNCOMMON, RARE ou EPIC' + look-at-chest: 'Olhe para um baú cheio para configurá-lo' + only-single-chest: 'Apenas baús individuais podem ser ajustados' + success: 'Baú adicionado com sucesso à fase' + failure: 'O Bau não pôde ser adicionado à fase! Veja o console para erros' sanity: parameters: description: >- exibir uma verificação de sanidade das probabilidades de fase no console - see-console: '&a Veja o console para o relatório' + see-console: 'Veja o console para o relatório' count: description: mostra a contagem de blocos e a fase - info: '&a Você está no bloco &b [number] no &a [name] fase' + info: 'Você está no bloco [number] no [name] fase' info: - count: >- - &a A ilha está em bloco &b [number] &a na fase &b [name]. Lifetime count - &b [lifetime] &a. + count: 'A ilha está em bloco [number] na fase [name]. Lifetime count [lifetime] .' phases: description: mostra uma lista de todas as fases - title: '&2 OneBlock Fases' - name-syntax: '&a [name]' - description-syntax: '&b [number] blocos' + title: 'OneBlock Fases' + name-syntax: '[name]' + description-syntax: '[number] blocos' island: bossbar: description: Alterna o Boss Boss Bar - status_on: '&b Bossbar &a ligado' - status_off: '&b Bossbar &c desligado' + status_on: 'Bossbar ligado' + status_off: 'Bossbar desligado' actionbar: description: alterna a barra de ação de fase - status_on: "&b Barra de ação &a ativada" - status_off: "&b Barra de ação &c desativada" + status_on: "Barra de ação ativada" + status_off: "Barra de ação desativada" setcount: parameters: description: Defina a contagem de blocos para o valor previamente concluído - set: '&a Contagem definida como [number].' - too-high: '&c O máximo que você pode definir é [number]!' + set: 'Contagem definida como [number].' + too-high: 'O máximo que você pode definir é [number]!' respawn-block: description: Responda o bloco mágico em situações quando desaparece - block-exist: '&a O bloco existe, não exigiu reaparecimento. ' - block-respawned: '&a Bloquear o reaparecido.' + block-exist: 'O bloco existe, não exigiu reaparecimento. ' + block-respawned: 'Bloquear o reaparecido.' phase: - insufficient-level: '&c O nível da sua ilha é muito baixo para prosseguir! ' - insufficient-funds: '&c Seus fundos são muito baixos para prosseguir! ' - insufficient-bank-balance: '&c O saldo do banco da ilha é muito baixo para prosseguir! ' - insufficient-permission: '&c Você não pode proceder mais até obter a permissão [name]!' - cooldown: '&c A próxima fase estará disponível em [number] segundos!' + insufficient-level: 'O nível da sua ilha é muito baixo para prosseguir! ' + insufficient-funds: 'Seus fundos são muito baixos para prosseguir! ' + insufficient-bank-balance: 'O saldo do banco da ilha é muito baixo para prosseguir! ' + insufficient-permission: 'Você não pode proceder mais até obter a permissão [name]!' + cooldown: 'A próxima fase estará disponível em [number] segundos!' placeholders: infinite: Infinito my-island-phase-default: Desconhecida @@ -103,13 +101,13 @@ chunkblock: phases: Oneblock Fases buttons: previous: - name: '&f&l Página anterior' - description: '&7 Mudar para a página [number]' + name: 'Página anterior' + description: 'Mudar para a página [number]' next: - name: '&f&l Próxima página' - description: '&7 Mudar para a página [number]' + name: 'Próxima página' + description: 'Mudar para a página [number]' phase: - name: '&f&l [phase]' + name: '[phase]' description: |- [starting-block] [biome] @@ -118,20 +116,20 @@ chunkblock: [level] [permission] [blocks] - starting-block: '&7 Começa após quebrar &e blocos [number].' - biome: '&7 Bioma: [biome]' - bank: '&7 Requer &e $ [number] &7 na conta bancária.' - economy: '&7 Requer &e $ [number] &7 na conta do jogador.' - level: '&7 Requer &e [number] &7 no nível da ilha.' - permission: '&7 Requer `&e[permission]&7` permissão.' - blocks-prefix: '&7 Blocos em fase -' - blocks: '&e [name], ' + starting-block: 'Começa após quebrar blocos [number].' + biome: 'Bioma: [biome]' + bank: 'Requer $ [number] na conta bancária.' + economy: 'Requer $ [number] na conta do jogador.' + level: 'Requer [number] no nível da ilha.' + permission: 'Requer `[permission]` permissão.' + blocks-prefix: 'Blocos em fase -' + blocks: '[name], ' wrap-at: '50' tips: - click-to-previous: '&e Clique &7 para visualizar a página anterior.' - click-to-next: '&e Clique &7 para visualizar a próxima página.' - click-to-change: '&e Clique &7 para alterar.' + click-to-previous: 'Clique para visualizar a página anterior.' + click-to-next: 'Clique para visualizar a próxima página.' + click-to-change: 'Clique para alterar.' island: starting-hologram: |- - &a Bem -vindo ao ChunkBlock - &e Quebre este bloco para começar + Bem -vindo ao ChunkBlock + Quebre este bloco para começar diff --git a/src/main/resources/locales/ru.yml b/src/main/resources/locales/ru.yml index 6b8fc56..11279d3 100644 --- a/src/main/resources/locales/ru.yml +++ b/src/main/resources/locales/ru.yml @@ -36,9 +36,7 @@ chunkblock: style: SOLID not-active: Боссбар отключен на этом острове. actionbar: - status: 'Фаза: [phase-name] | - Блоков: [done] / [total] | - Прогресс: [percent-done]' + status: 'Фаза: [phase-name] | Блоков: [done] / [total] | Прогресс: [percent-done]' not-active: Панель действий отключена на этом острове. commands: admin: diff --git a/src/main/resources/locales/tr.yml b/src/main/resources/locales/tr.yml index 6854346..9aa4cec 100644 --- a/src/main/resources/locales/tr.yml +++ b/src/main/resources/locales/tr.yml @@ -3,113 +3,109 @@ protection: CHUNKBLOCK_MAGIC_BLOCK: name: Büyülü Blok Koruması description: |- - &b Blokları kırabilirlerse - &b büyülü bloğu kırabilecek - &b rütbe. - hint: "&c Rütbeniz büyülü bloğu kıramaz!" + Blokları kırabilirlerse + büyülü bloğu kırabilecek + rütbe. + hint: "Rütbeniz büyülü bloğu kıramaz!" CHUNKBLOCK_START_SAFETY: name: Başlangıç Güvenliği description: |- - &b Yeni oyuncuların 1 dakika - &b boyunca hareket etmesini - &b engelleyerek düşmelerini önler. - hint: "&c Güvenlik için hareket [number] saniye daha engellendi!" - free-to-move: "&a Serbestçe hareket edebilirsiniz. Dikkatli olun!" + Yeni oyuncuların 1 dakika + boyunca hareket etmesini + engelleyerek düşmelerini önler. + hint: "Güvenlik için hareket [number] saniye daha engellendi!" + free-to-move: "Serbestçe hareket edebilirsiniz. Dikkatli olun!" CHUNKBLOCK_BOSSBAR: - name: Boss Çubuğu - description: |- - &b Her aşama için bir - &b durum çubuğu gösterir. + name: Boss Çubuğu + description: |- + Her aşama için bir + durum çubuğu gösterir. CHUNKBLOCK_ACTIONBAR: name: Eylem Çubuğu (Action Bar) description: |- - &b Her aşama için bir - &b durumu Eylem Çubuğunda - &b gösterir. + Her aşama için bir + durumu Eylem Çubuğunda + gösterir. chunkblock: bossbar: title: Kalan bloklar - status: '&a Faz blokları &b [done] &d / &b [total]' + status: 'Faz blokları [done] / [total]' color: RED style: SEGMENTED_20 - not-active: '&c Patron Bar bu ada için aktif değil' + not-active: 'Patron Bar bu ada için aktif değil' actionbar: - status: "&a Aşama: &b [phase-name] &d | &a Bloklar: &b [done] &d / &b [total] &d | &a İlerleme: &b [percent-done]" - not-active: "&c Bu ada için eylem çubuğu aktif değil" + status: "Aşama: [phase-name] | Bloklar: [done] / [total] | İlerleme: [percent-done]" + not-active: "Bu ada için eylem çubuğu aktif değil" commands: admin: setcount: parameters: [lifetime] description: oyuncunun blok sayısını ayarla - set: '&a [name] ''ın sayısı [number] olarak ayarlandı' - set-lifetime: '&a [name]''nin toplam kırılan blok sayısı [number] olarak ayarlandı' + set: '[name] ''ın sayısı [number] olarak ayarlandı' + set-lifetime: '[name]''nin toplam kırılan blok sayısı [number] olarak ayarlandı' setchest: parameters: description: bakılan sandığı nadir görülen bir evreye koyar - chest-is-empty: '&c Bu sandık boş, bu yüzden eklenemez' - unknown-phase: >- - &c Bilinmeyen aşama. Bunları görmek için sekme-tamamlama özelliğini - kullanın + chest-is-empty: 'Bu sandık boş, bu yüzden eklenemez' + unknown-phase: 'Bilinmeyen aşama. Bunları görmek için sekme-tamamlama özelliğini kullanın' unknown-rarity: '& c Bilinmeyen nadirlik. COMMON, UNCOMMON, RARE veya EPIC kullanın' - look-at-chest: '&c Ayarlamak için dolu bir sandığa bakın' - only-single-chest: '&c Yalnızca tek sandık ayarlanabilir' - success: '&a Sandık aşamaya başarıyla eklendi' - failure: '&c Sandık aşamaya eklenemedi! Hatalar için konsola bakın' + look-at-chest: 'Ayarlamak için dolu bir sandığa bakın' + only-single-chest: 'Yalnızca tek sandık ayarlanabilir' + success: 'Sandık aşamaya başarıyla eklendi' + failure: 'Sandık aşamaya eklenemedi! Hatalar için konsola bakın' sanity: parameters: description: konsoldaki faz olasılıklarının akıl sağlığını kontrol etmek - see-console: '&a Rapor için konsola bakın' + see-console: 'Rapor için konsola bakın' count: description: blok sayısını ve aşamayı göster - info: '&a [name] aşamasında blok &b [number] üzerindesiniz' + info: '[name] aşamasında blok [number] üzerindesiniz' info: - count: >- - &a Ada blok sayısı &b [number] &b [name] &a aşamasında. Toplam kırılan - blok &b [lifetime] &a. + count: 'Ada blok sayısı [number] [name] aşamasında. Toplam kırılan blok [lifetime] .' phases: description: tüm aşamaların bir listesini göster - title: '&2 TekBlok Aşaması' - name-syntax: '&a [name]' - description-syntax: '&b [number] blokları' + title: 'TekBlok Aşaması' + name-syntax: '[name]' + description-syntax: '[number] blokları' island: bossbar: description: Faz patron çubuğunu değiştirir - status_on: '&b Bossbar &a açıldı' - status_off: '&b Bossbar &c kapandı' + status_on: 'Bossbar açıldı' + status_off: 'Bossbar kapandı' actionbar: description: aşama eylem çubuğunu açar/kapatır - status_on: "&b Eylem Çubuğu &a açıldı" - status_off: "&b Eylem Çubuğu &c kapatıldı" + status_on: "Eylem Çubuğu açıldı" + status_off: "Eylem Çubuğu kapatıldı" setcount: parameters: description: blok sayısını önceden tamamlanmış değere ayarla - set: '&a Sayım [number] olarak ayarlandı.' - too-high: '&c Ayarlayabileceğiniz maksimum sayı [number]!' + set: 'Sayım [number] olarak ayarlandı.' + too-high: 'Ayarlayabileceğiniz maksimum sayı [number]!' respawn-block: description: Kaynak bloğunu kaybolma durumlarında yeniden doğurur - block-exist: '&a Kaynak bloğu yerinde senin için işaretledim.' - block-respawned: '&a Kaynak bloğu yeniden doğdu.' + block-exist: 'Kaynak bloğu yerinde senin için işaretledim.' + block-respawned: 'Kaynak bloğu yeniden doğdu.' phase: - insufficient-level: '&c Ada seviyeniz devam etmek için çok düşük! [number] olmalıdır.' - insufficient-funds: '&c Paranız devam etmek için çok düşük! [number] olmalıdırlar.' - insufficient-bank-balance: '&c Ada bankası bakiyesi devam etmek için çok düşük! [number] olmalıdır.' - insufficient-permission: '&c [name] iznini alana kadar devam edemezsiniz!' - cooldown: '&c Bir sonraki aşama [number] saniye içinde hazır olacak!' + insufficient-level: 'Ada seviyeniz devam etmek için çok düşük! [number] olmalıdır.' + insufficient-funds: 'Paranız devam etmek için çok düşük! [number] olmalıdırlar.' + insufficient-bank-balance: 'Ada bankası bakiyesi devam etmek için çok düşük! [number] olmalıdır.' + insufficient-permission: '[name] iznini alana kadar devam edemezsiniz!' + cooldown: 'Bir sonraki aşama [number] saniye içinde hazır olacak!' placeholders: infinite: Sonsuz my-island-phase-default: Bilinmiyor gui: titles: - phases: '&0&l TekBlok Aşamaları' + phases: 'TekBlok Aşamaları' buttons: previous: - name: '&f&l Önceki Sayfa' - description: '&7 [number] Sayılı sayfaya geçer' + name: 'Önceki Sayfa' + description: '[number] Sayılı sayfaya geçer' next: - name: '&f&l Sıradaki Sayfa ' - description: '&7 [number] Sayılı sayfaya geçer' + name: 'Sıradaki Sayfa ' + description: '[number] Sayılı sayfaya geçer' phase: - name: '&f&l [phase]' + name: '[phase]' description: |- [starting-block] [biome] @@ -118,20 +114,20 @@ chunkblock: [level] [permission] [blocks] - starting-block: '&7 &e [sayı] kadar blok kırdıktan sonra başlar.' - biome: '&7 Biome: &e [biome]' - bank: '&7 Banka hesabında &e $[number] &7 olması gerekli.' - economy: '&7 Bakiyenizin &e $[number] &7 olması gerekli.' - level: '&7 &e [sayı] &7 kadar ada seviyeniz olmalı.' - permission: '&7 `&e[izin]&7` izni gerektirir.' - blocks-prefix: '&7 Aşamadaki bloklar - ' - blocks: '&e [name], ' + starting-block: '[sayı] kadar blok kırdıktan sonra başlar.' + biome: 'Biome: [biome]' + bank: 'Banka hesabında $[number] olması gerekli.' + economy: 'Bakiyenizin $[number] olması gerekli.' + level: '[sayı] kadar ada seviyeniz olmalı.' + permission: '`[izin]` izni gerektirir.' + blocks-prefix: 'Aşamadaki bloklar - ' + blocks: '[name], ' wrap-at: '50' tips: - click-to-previous: '&e Önceki sayfayı görüntülemek için &7 tıklayın.' - click-to-next: '&e Sonraki sayfayı görüntülemek için &7 tıklayın.' - click-to-change: '&e Değiştirmek için &7 tıklayın.' + click-to-previous: 'Önceki sayfayı görüntülemek için tıklayın.' + click-to-next: 'Sonraki sayfayı görüntülemek için tıklayın.' + click-to-change: 'Değiştirmek için tıklayın.' island: starting-hologram: |- - &aTekBlok'a Hoş Geldiniz - &eBaşlamak için Bu Bloğu Kırın + TekBlok'a Hoş Geldiniz + Başlamak için Bu Bloğu Kırın diff --git a/src/main/resources/locales/uk.yml b/src/main/resources/locales/uk.yml index b1af17c..22e724f 100644 --- a/src/main/resources/locales/uk.yml +++ b/src/main/resources/locales/uk.yml @@ -3,115 +3,109 @@ protection: CHUNKBLOCK_MAGIC_BLOCK: name: Захист Магічного Блоку description: |- - &b Ранг, який може зламати - &b магічний блок, якщо - &b може ламати блоки. - hint: "&c Ваш ранг не може зламати магічний блок!" + Ранг, який може зламати + магічний блок, якщо + може ламати блоки. + hint: "Ваш ранг не може зламати магічний блок!" CHUNKBLOCK_START_SAFETY: name: Початкова Безпека description: |- - &b Запобігає руху нових гравців - &b протягом 1 хвилини, - &b щоб вони не впали. - hint: "&c Рух заблоковано з міркувань безпеки ще на [number] секунд!" - free-to-move: "&a Ви можете вільно рухатися. Будьте обережні!" + Запобігає руху нових гравців + протягом 1 хвилини, + щоб вони не впали. + hint: "Рух заблоковано з міркувань безпеки ще на [number] секунд!" + free-to-move: "Ви можете вільно рухатися. Будьте обережні!" CHUNKBLOCK_BOSSBAR: - name: Boss Bar - description: |- - &b Показує панель стану - &b для кожної фази. + name: Boss Bar + description: |- + Показує панель стану + для кожної фази. CHUNKBLOCK_ACTIONBAR: name: Action Bar description: |- - &b Показує статус - &b для кожної фази - &b в Action Bar. + Показує статус + для кожної фази + в Action Bar. chunkblock: bossbar: title: Блоки, що залишилися - status: '&a Фазові блоки &b [done] &d / &b [total]' + status: 'Фазові блоки [done] / [total]' color: RED style: SEGMENTED_20 - not-active: '&c Boss Bar не активний для цього острова' + not-active: 'Boss Bar не активний для цього острова' actionbar: - status: "&a Фаза: &b [phase-name] &d | &a Блоки: &b [done] &d / &b [total] &d | &a Прогрес: &b [percent-done]" - not-active: "&c Панель дій не активна для цього острова" + status: "Фаза: [phase-name] | Блоки: [done] / [total] | Прогрес: [percent-done]" + not-active: "Панель дій не активна для цього острова" commands: admin: setcount: parameters: [lifetime] description: встановити кількість блоків гравця - set: '&a [name] встановлено значення [number]' - set-lifetime: '&a [name] тривалість життя встановлено на [number]' + set: '[name] встановлено значення [number]' + set-lifetime: '[name] тривалість життя встановлено на [number]' setchest: parameters: description: поставити скриню, на яку дивляться, у фазу з указаною рідкістю - chest-is-empty: '&c Ця скриня порожня, тому її неможливо додати' - unknown-phase: '&c Невідома фаза. Використовуйте Tab-complete, щоб побачити їх' - unknown-rarity: '&c Невідома рідкість. Використовуйте COMMON, UNCOMMON, RARE або EPIC' - look-at-chest: '&c Подивіться на заповнену скриню, щоб встановити її' - only-single-chest: '&c Можна встановити лише окремі скрині' + chest-is-empty: 'Ця скриня порожня, тому її неможливо додати' + unknown-phase: 'Невідома фаза. Використовуйте Tab-complete, щоб побачити їх' + unknown-rarity: 'Невідома рідкість. Використовуйте COMMON, UNCOMMON, RARE або EPIC' + look-at-chest: 'Подивіться на заповнену скриню, щоб встановити її' + only-single-chest: 'Можна встановити лише окремі скрині' success: '& Скриню успішно додано до фази' - failure: '&c Скриня не може бути додана до фази! Перегляньте консоль для помилок' + failure: 'Скриня не може бути додана до фази! Перегляньте консоль для помилок' sanity: parameters: description: відобразити перевірку працездатності ймовірностей фази на консолі - see-console: '&a Дивіться консоль для звіту' + see-console: 'Дивіться консоль для звіту' count: description: показати кількість блоків і фазу - info: '&a Ви знаходитесь у блоці &b [number] у фазі &a [name].' + info: 'Ви знаходитесь у блоці [number] у фазі [name].' info: - count: >- - &a Острів знаходиться на блоці &b [number]&a у фазі &b [name] &a. - Підрахунок тривалості життя &b [lifetime] &a. + count: 'Острів знаходиться на блоці [number] у фазі [name] . Підрахунок тривалості життя [lifetime] .' phases: description: показати список усіх фаз - title: '&2 OneBlock фази' - name-syntax: '&a [name]' - description-syntax: '&b [number] блоків' + title: 'OneBlock фази' + name-syntax: '[name]' + description-syntax: '[number] блоків' island: bossbar: description: перемикає фазу боса - status_on: '&b Bossbar &a увімкнув' - status_off: '&b Bossbar &c вимкнувся' + status_on: 'Bossbar увімкнув' + status_off: 'Bossbar вимкнувся' actionbar: description: перемикає панель дій фази - status_on: "&b Панель дій &a увімкнена" - status_off: "&b Панель дій &c вимкнена" + status_on: "Панель дій увімкнена" + status_off: "Панель дій вимкнена" setcount: parameters: description: встановити кількість блоків до попередньо завершеного значення - set: '&a Лічильник встановлено на [number].' - too-high: '&c Максимум, який ви можете встановити, це [number]!' + set: 'Лічильник встановлено на [number].' + too-high: 'Максимум, який ви можете встановити, це [number]!' respawn-block: description: відроджує магічний блок у ситуаціях, коли він зникає - block-exist: '&a Блок існує, не потребує відновлення. Я позначив це для вас.' + block-exist: 'Блок існує, не потребує відновлення. Я позначив це для вас.' block-respawned: '& Блок відродився.' phase: - insufficient-level: >- - &c Рівень вашого острова занадто низький, щоб продовжити! Це має бути - [number]. - insufficient-funds: '&c Ваших коштів занадто мало, щоб продовжити! Вони мають бути [number].' - insufficient-bank-balance: >- - &c Баланс острівного банку занадто низький, щоб продовжити! Це має бути - [number]. - insufficient-permission: '&c Ви не можете продовжувати далі, доки не отримаєте дозвіл [name]!' - cooldown: '&c Наступна фаза буде доступна через [number] секунд!' + insufficient-level: 'Рівень вашого острова занадто низький, щоб продовжити! Це має бути [number].' + insufficient-funds: 'Ваших коштів занадто мало, щоб продовжити! Вони мають бути [number].' + insufficient-bank-balance: 'Баланс острівного банку занадто низький, щоб продовжити! Це має бути [number].' + insufficient-permission: 'Ви не можете продовжувати далі, доки не отримаєте дозвіл [name]!' + cooldown: 'Наступна фаза буде доступна через [number] секунд!' placeholders: infinite: Нескінченний my-island-phase-default: Невідомо gui: titles: - phases: '&0&l Фази одного блоку' + phases: 'Фази одного блоку' buttons: previous: - name: '&f&l Попередня сторінка' - description: '&7 Перейти на сторінку [number].' + name: 'Попередня сторінка' + description: 'Перейти на сторінку [number].' next: - name: '&f&l Наступна сторінка' - description: '&7 Перейти на сторінку [number].' + name: 'Наступна сторінка' + description: 'Перейти на сторінку [number].' phase: - name: '&f&l [phase]' + name: '[phase]' description: |- [starting-block] [biome] @@ -119,20 +113,20 @@ chunkblock: [economy] [level] [permission] - starting-block: '&7 Запускається після розбиття &e [number] блоків.' - biome: '&7 Біом: &e [biome]' - bank: '&7 Потрібен &e $[number] &7 на банківському рахунку.' - economy: '&7 Потрібен &e $[number] &7 в обліковому записі гравця.' - level: '&7 Потрібен рівень острова &e [number] &7.' - permission: '&7 Потрібен дозвіл `&e[permission]&7`.' + starting-block: 'Запускається після розбиття [number] блоків.' + biome: 'Біом: [biome]' + bank: 'Потрібен $[number] на банківському рахунку.' + economy: 'Потрібен $[number] в обліковому записі гравця.' + level: 'Потрібен рівень острова [number] .' + permission: 'Потрібен дозвіл `[permission]`.' blocks-prefix: Блоки по фазі - - blocks: '&e [name], ' + blocks: '[name], ' wrap-at: '50' tips: - click-to-previous: '&e Натисніть &7, щоб переглянути попередню сторінку.' - click-to-next: '&e Натисніть &7, щоб переглянути наступну сторінку.' - click-to-change: '&e Натисніть &7, щоб змінити.' + click-to-previous: 'Натисніть , щоб переглянути попередню сторінку.' + click-to-next: 'Натисніть , щоб переглянути наступну сторінку.' + click-to-change: 'Натисніть , щоб змінити.' island: starting-hologram: |- - &aЛаскаво просимо до ChunkBlock - &eРозбийте цей блок, щоб почати + Ласкаво просимо до ChunkBlock + Розбийте цей блок, щоб почати diff --git a/src/main/resources/locales/vi.yml b/src/main/resources/locales/vi.yml index 1473291..e83074a 100644 --- a/src/main/resources/locales/vi.yml +++ b/src/main/resources/locales/vi.yml @@ -3,92 +3,90 @@ protection: CHUNKBLOCK_MAGIC_BLOCK: name: Bảo Vệ Khối Ma Thuật description: |- - &b Xếp hạng có thể phá - &b khối ma thuật nếu họ - &b có thể phá khối. - hint: "&c Xếp hạng của bạn không thể phá khối ma thuật!" + Xếp hạng có thể phá + khối ma thuật nếu họ + có thể phá khối. + hint: "Xếp hạng của bạn không thể phá khối ma thuật!" CHUNKBLOCK_START_SAFETY: name: An Toàn Khởi Đầu description: |- - &b Ngăn người chơi mới - &b di chuyển trong 1 phút - &b để họ không bị rơi. - hint: "&c Di chuyển bị chặn vì lý do an toàn trong [number] giây nữa!" - free-to-move: "&a Bạn được phép di chuyển tự do. Hãy cẩn thận!" + Ngăn người chơi mới + di chuyển trong 1 phút + để họ không bị rơi. + hint: "Di chuyển bị chặn vì lý do an toàn trong [number] giây nữa!" + free-to-move: "Bạn được phép di chuyển tự do. Hãy cẩn thận!" CHUNKBLOCK_BOSSBAR: - name: Thanh Boss - description: |- - &b Hiển thị thanh trạng thái - &b cho mỗi giai đoạn. + name: Thanh Boss + description: |- + Hiển thị thanh trạng thái + cho mỗi giai đoạn. CHUNKBLOCK_ACTIONBAR: name: Thanh Hành Động (Action Bar) description: |- - &b Hiển thị trạng thái - &b cho mỗi giai đoạn - &b trên Thanh Hành Động. + Hiển thị trạng thái + cho mỗi giai đoạn + trên Thanh Hành Động. chunkblock: bossbar: title: Khối còn lại - status: '&a Khối pha &b [done] &d / &b [total]' + status: 'Khối pha [done] / [total]' color: RED style: SEGMENTED_20 - not-active: '&c Boss Bar không hoạt động cho hòn đảo này' + not-active: 'Boss Bar không hoạt động cho hòn đảo này' actionbar: - status: "&a Giai đoạn: &b [phase-name] &d | &a Khối: &b [done] &d / &b [total] &d | &a Tiến độ: &b [percent-done]" - not-active: "&c Thanh hành động không hoạt động cho hòn đảo này" + status: "Giai đoạn: [phase-name] | Khối: [done] / [total] | Tiến độ: [percent-done]" + not-active: "Thanh hành động không hoạt động cho hòn đảo này" commands: admin: setcount: parameters: description: chỉnh số đếm khối của người chơi - set: '&a Số đếm khối của [name] được đặt thành [number]' - set-lifetime: '&a Bộ đếm thời gian tồn tại của [name] được đặt thành [number]' + set: 'Số đếm khối của [name] được đặt thành [number]' + set-lifetime: 'Bộ đếm thời gian tồn tại của [name] được đặt thành [number]' setchest: parameters: <độ hiếm> description: thêm rương đang nhìn vào một giai đoạn với độ hiếm được chỉ định - chest-is-empty: '&c Rương đó trống nên không thể thêm vào' - unknown-phase: '&c Giai đoạn chưa biết. Dùng TAB để xem chúng' - unknown-rarity: '&c Độ hiếm chưa biết. Sử dụng COMMON, UNCOMMON, RARE hoặc EPIC' - look-at-chest: '&c Nhìn vào một cái rương đầy để đặt nó' - only-single-chest: '&c Chỉ có thể đặt các rương đơn' - success: '&a Rương được thêm thành công vào giai đoạn' - failure: >- - &c Rương không thể được thêm vào giai đoạn! Xem bảng điều khiển để - biết lỗi + chest-is-empty: 'Rương đó trống nên không thể thêm vào' + unknown-phase: 'Giai đoạn chưa biết. Dùng TAB để xem chúng' + unknown-rarity: 'Độ hiếm chưa biết. Sử dụng COMMON, UNCOMMON, RARE hoặc EPIC' + look-at-chest: 'Nhìn vào một cái rương đầy để đặt nó' + only-single-chest: 'Chỉ có thể đặt các rương đơn' + success: 'Rương được thêm thành công vào giai đoạn' + failure: 'Rương không thể được thêm vào giai đoạn! Xem bảng điều khiển để biết lỗi' sanity: parameters: description: >- hiển thị kiểm tra sự đúng đắn của xác suất giao đoạn lên bảng điều khiển - see-console: '&a Xem bảng điều khiển cho báo cáo' + see-console: 'Xem bảng điều khiển cho báo cáo' count: description: hiển thị số khối và giai đoạn - info: '&a Bạn đang ở trên khối &b [number] trong giai đoạn &a [name]' + info: 'Bạn đang ở trên khối [number] trong giai đoạn [name]' info: - count: '&a Đảo nằm trên khối &b [number] &a trong giai đoạn &b [name]. ' + count: 'Đảo nằm trên khối [number] trong giai đoạn [name]. ' phases: description: hiển thị một danh sách tất cả các giai đoạn - title: '&2 Giai đoạn OneBlock' - name-syntax: '&a [name]' - description-syntax: '&b [number] khối' + title: 'Giai đoạn OneBlock' + name-syntax: '[name]' + description-syntax: '[number] khối' island: bossbar: description: bật thanh Boss giai đoạn - status_on: '&b Bossbar &a bật lên' - status_off: '&b Bossbar &c tắt' + status_on: 'Bossbar bật lên' + status_off: 'Bossbar tắt' actionbar: description: bật/tắt thanh hành động giai đoạn - status_on: "&b Thanh hành động đã &a bật" - status_off: "&b Thanh hành động đã &c tắt" + status_on: "Thanh hành động đã bật" + status_off: "Thanh hành động đã tắt" setcount: parameters: description: đặt số khối thành giá trị đã hoàn thành trước đó - set: '&a Bộ đếm được đặt thành [number].' - too-high: '&cMức tối đa bạn có thể đặt là[number]!' + set: 'Bộ đếm được đặt thành [number].' + too-high: 'Mức tối đa bạn có thể đặt là[number]!' respawn-block: description: Block ma thuật hồi sinh trong các tình huống khi nó biến mất - block-exist: '&a Khối tồn tại, không yêu cầu phản hồi. ' - block-respawned: '&a Chặn hồi sinh.' + block-exist: 'Khối tồn tại, không yêu cầu phản hồi. ' + block-respawned: 'Chặn hồi sinh.' phase: insufficient-level: Cấp đảo của bạn quá thấp để thực thi! Nó phải là [number]. insufficient-funds: Tài chính của bạn quá thấp để thực thi! Nó phải là [number]. @@ -100,16 +98,16 @@ chunkblock: my-island-phase-default: Không xác định gui: titles: - phases: '&0&l Giai đoạn OneBlock' + phases: 'Giai đoạn OneBlock' buttons: previous: - name: '&f&l Trang trước' - description: '&7 Chuyển sang trang [number]' + name: 'Trang trước' + description: 'Chuyển sang trang [number]' next: - name: '&f&l Trang tiếp theo' + name: 'Trang tiếp theo' description: '& Chuyển sang trang [number]' phase: - name: '&f&l [phase]' + name: '[phase]' description: |- [starting-block] [biome] @@ -118,20 +116,20 @@ chunkblock: [level] [permission] [blocks] - starting-block: '&7 Bắt đầu sau khi phá vỡ &e [number] khối.' - biome: '&7 Biome: &e [biome]' - bank: '&7 Yêu cầu 7e $[number] &7 trong tài khoản ngân hàng.' - economy: '&7 Yêu cầu &e $[number] &7 trong tài khoản người chơi.' - level: '&7 Yêu cầu &e[number] &7 cấp đảo.' - permission: '&7 Yêu cầu `&e[permission]&7` quyền.' - blocks-prefix: '&7 Khối trong giai đoạn -' - blocks: '&e [name], ' + starting-block: 'Bắt đầu sau khi phá vỡ [number] khối.' + biome: 'Biome: [biome]' + bank: 'Yêu cầu 7e $[number] trong tài khoản ngân hàng.' + economy: 'Yêu cầu $[number] trong tài khoản người chơi.' + level: 'Yêu cầu [number] cấp đảo.' + permission: 'Yêu cầu `[permission]` quyền.' + blocks-prefix: 'Khối trong giai đoạn -' + blocks: '[name], ' wrap-at: '50' tips: - click-to-previous: '&e Bấm &7 để xem trang trước.' - click-to-next: '&e Bấm &7 để xem trang tiếp theo.' - click-to-change: '&e Bấm &7 để thay đổi.' + click-to-previous: 'Bấm để xem trang trước.' + click-to-next: 'Bấm để xem trang tiếp theo.' + click-to-change: 'Bấm để thay đổi.' island: starting-hologram: |- - &aChào mừng đến với OneBlock - &eĐập khối này để bắt đầu + Chào mừng đến với OneBlock + Đập khối này để bắt đầu diff --git a/src/main/resources/locales/zh-CN.yml b/src/main/resources/locales/zh-CN.yml index 934a27a..c05eb39 100644 --- a/src/main/resources/locales/zh-CN.yml +++ b/src/main/resources/locales/zh-CN.yml @@ -3,108 +3,108 @@ protection: CHUNKBLOCK_MAGIC_BLOCK: name: 魔法方块保护 description: |- - &b 如果玩家可以破坏方块, - &b 则该等级可以破坏 - &b 魔法方块。 - hint: "&c 您的等级无法破坏魔法方块!" + 如果玩家可以破坏方块, + 则该等级可以破坏 + 魔法方块。 + hint: "您的等级无法破坏魔法方块!" CHUNKBLOCK_START_SAFETY: name: 初始安全保护 description: |- - &b 阻止新玩家在1分钟内 - &b 移动,以防他们跌落。 - hint: "&c 出于安全考虑,移动已被阻止 [number] 秒!" - free-to-move: "&a 您可以自由移动了。请小心!" + 阻止新玩家在1分钟内 + 移动,以防他们跌落。 + hint: "出于安全考虑,移动已被阻止 [number] 秒!" + free-to-move: "您可以自由移动了。请小心!" CHUNKBLOCK_BOSSBAR: - name: Boss 血条 - description: |- - &b 为每个阶段 - &b 显示一个状态条。 + name: Boss 血条 + description: |- + 为每个阶段 + 显示一个状态条。 CHUNKBLOCK_ACTIONBAR: name: 动作栏 description: |- - &b 在动作栏中 - &b 显示每个阶段 - &b 的状态。 + 在动作栏中 + 显示每个阶段 + 的状态。 chunkblock: bossbar: title: 剩余的块 - status: '&a 相位块&b [done] &d / &b [total]' + status: '相位块 [done] / [total]' color: RED style: SEGMENTED_20 - not-active: '&c 老板酒吧对这个岛不活跃' + not-active: '老板酒吧对这个岛不活跃' actionbar: - status: "&a 阶段: &b [phase-name] &d | &a 方块数: &b [done] &d / &b [total] &d | &a 进度: &b [percent-done]" - not-active: "&c 该岛屿的动作栏未激活" + status: "阶段: [phase-name] | 方块数: [done] / [total] | 进度: [percent-done]" + not-active: "该岛屿的动作栏未激活" commands: admin: setcount: parameters: <玩家名称> <数量> description: 设置玩家挖掘的方块数 - set: '&a [name] 挖掘的方块数已设置为 [number]' - set-lifetime: '&a [name] 的重置次数已设置为 [number]' + set: '[name] 挖掘的方块数已设置为 [number]' + set-lifetime: '[name] 的重置次数已设置为 [number]' setchest: parameters: <阶段> <稀有度> description: 将您光标指向的箱子添加到一个阶段中, 并选择稀有度 - chest-is-empty: '&c 该箱子无法添加, 因为它是空的' - unknown-phase: '&c 未知阶段. 用 Tab 补全来查看所有阶段' - unknown-rarity: '&c 未知稀有度. 可使用的有 COMMON, UNCOMMON, RARE 或 EPIC' - look-at-chest: '&c 将光标指向一个包含物品的箱子来设置它' - only-single-chest: '&c 只能设置单个箱子' - success: '&a 成功将箱子添加到该阶段' - failure: '&c 无法添加箱子到该阶段! 报错已在后台生成' + chest-is-empty: '该箱子无法添加, 因为它是空的' + unknown-phase: '未知阶段. 用 Tab 补全来查看所有阶段' + unknown-rarity: '未知稀有度. 可使用的有 COMMON, UNCOMMON, RARE 或 EPIC' + look-at-chest: '将光标指向一个包含物品的箱子来设置它' + only-single-chest: '只能设置单个箱子' + success: '成功将箱子添加到该阶段' + failure: '无法添加箱子到该阶段! 报错已在后台生成' sanity: parameters: <阶段> description: 在后台生成一份关于各阶段所占百分比的完整报告 - see-console: '&a 报告已在后台生成' + see-console: '报告已在后台生成' count: description: 显示方块数量和阶段 - info: '&a 您当前挖掘的方块数量是 &b [number], 为 &a [name] 阶段' + info: '您当前挖掘的方块数量是 [number], 为 [name] 阶段' info: - count: '&a 岛位于 &b [name] &a 阶段的 &b [number]&a 区块。生命周期计数 &b [lifetime] &a。' + count: '岛位于 [name] 阶段的 [number] 区块。生命周期计数 [lifetime] ' phases: description: 显示所有阶段的列表 - title: '&2 OneBlock 阶段' - name-syntax: '&a [name]' - description-syntax: '&b 挖掘了 [number] 个方块' + title: 'OneBlock 阶段' + name-syntax: '[name]' + description-syntax: '挖掘了 [number] 个方块' island: bossbar: description: 切换相位栏 - status_on: '&b Bossbar turned &a on' - status_off: '&b Bossbar turned &c off' + status_on: 'Bossbar turned on' + status_off: 'Bossbar turned off' actionbar: description: 切换阶段动作栏 - status_on: "&b 动作栏已 &a 开启" - status_off: "&b 动作栏已 &c 关闭" + status_on: "动作栏已 开启" + status_off: "动作栏已 关闭" setcount: parameters: description: 将块计数设置为先前完成的值 - set: '&a 数量设置为 [number].' - too-high: '&c 你最大只能设置 [number]!' + set: '数量设置为 [number].' + too-high: '你最大只能设置 [number]!' respawn-block: description: 在魔法块消失的情况下重生 - block-exist: '&a 块存在,不需要重生。我给你标记了。' - block-respawned: '&a 块重生。' + block-exist: '块存在,不需要重生。我给你标记了。' + block-respawned: '块重生。' phase: - insufficient-level: '&c 岛屿等级过低, 无法执行此操作! 等级必须达到 [number].' - insufficient-funds: '&c 余额不足, 无法执行此操作! 余额应多于 [number].' - insufficient-bank-balance: '&c 岛屿银行余额不足, 无法执行此操作! 余额应多于 [number].' - insufficient-permission: '&c 在获得 [name] 许可之前,您不能继续操作!' - cooldown: '&c [number] 秒后即可进入下一阶段!' + insufficient-level: '岛屿等级过低, 无法执行此操作! 等级必须达到 [number].' + insufficient-funds: '余额不足, 无法执行此操作! 余额应多于 [number].' + insufficient-bank-balance: '岛屿银行余额不足, 无法执行此操作! 余额应多于 [number].' + insufficient-permission: '在获得 [name] 许可之前,您不能继续操作!' + cooldown: '[number] 秒后即可进入下一阶段!' placeholders: infinite: 无限 my-island-phase-default: 未知 gui: titles: - phases: '&0&l OneBlock 阶段' + phases: 'OneBlock 阶段' buttons: previous: - name: '&f&l 上一页' - description: '&7 切换到[number]页' + name: '上一页' + description: '切换到[number]页' next: - name: '&f&l 下一页' - description: '&7 切换到[number]页' + name: '下一页' + description: '切换到[number]页' phase: - name: '&f&l [phase]' + name: '[phase]' description: |- [starting-block] [biome] @@ -112,20 +112,20 @@ chunkblock: [economy] [level] [permission] - starting-block: '&7 在破坏 &e [number] 块后开始。' - biome: '&7 生物群落:&e [biome]' - bank: '&7 需要银行帐户中有 &e $[number] &7。' - economy: '&7 需要玩家帐户中有 &e $[number] &7。' - level: '&7 需要 &e [number] &7 岛屿等级。' - permission: '&7 需要 `&e[permission]&7` 权限。' - blocks-prefix: '&7 阶段块 - ' - blocks: '&e [name], ' + starting-block: '在破坏 [number] 块后开始。' + biome: '生物群落: [biome]' + bank: '需要银行帐户中有 $[number] ' + economy: '需要玩家帐户中有 $[number] ' + level: '需要 [number] 岛屿等级。' + permission: '需要 `[permission]` 权限。' + blocks-prefix: '阶段块 - ' + blocks: '[name], ' wrap-at: '50' tips: - click-to-previous: '&e 单击&7 查看上一页。' - click-to-next: '&e 单击 &7 查看下一页。' - click-to-change: '&e 单击 &7 进行更改。' + click-to-previous: '单击 查看上一页。' + click-to-next: '单击 查看下一页。' + click-to-change: '单击 进行更改。' island: starting-hologram: |- - &a欢迎来到 ChunkBlock - &e破坏此方块以开始 + 欢迎来到 ChunkBlock + 破坏此方块以开始 diff --git a/src/main/resources/locales/zh-TW.yml b/src/main/resources/locales/zh-TW.yml index f4648b9..e442ca9 100644 --- a/src/main/resources/locales/zh-TW.yml +++ b/src/main/resources/locales/zh-TW.yml @@ -7,156 +7,156 @@ protection: flags: CHUNKBLOCK_MAGIC_BLOCK: name: 魔法方塊保護 - description: '&b 如果玩家可以破壞方塊, + description: '如果玩家可以破壞方塊, - &b 則該等級可以破壞 + 則該等級可以破壞 - &b 魔法方塊。' - hint: '&c 你的等級無法破壞魔法方塊!' + 魔法方塊。' + hint: '你的等級無法破壞魔法方塊!' CHUNKBLOCK_START_SAFETY: name: 初始安全保護 - description: '&b 阻止新玩家在1分鐘內 + description: '阻止新玩家在1分鐘內 - &b 移動,以防他們跌落。' - hint: '&c 出於安全考慮,移動已被阻止 [number] 秒!' - free-to-move: '&a 你可以自由移動了,請小心!' + 移動,以防他們跌落。' + hint: '出於安全考慮,移動已被阻止 [number] 秒!' + free-to-move: '你可以自由移動了,請小心!' CHUNKBLOCK_BOSSBAR: name: Boss 血條 - description: '&b 為每個階段 + description: '為每個階段 - &b 顯示一個狀態條。' + 顯示一個狀態條。' CHUNKBLOCK_ACTIONBAR: name: 動作欄 - description: '&b 在動作欄中 + description: '在動作欄中 - &b 顯示每個階段 + 顯示每個階段 - &b 的狀態。' + 的狀態。' CHUNKBLOCK_CLAIM_CHUNKS: name: 認領區塊 - description: '&b 可花費島嶼的等級額度 + description: '可花費島嶼的等級額度 - &b 認領新區塊 + 認領新區塊 - &b 的身分組。' - hint: '&c 你的身分組無法為這座島嶼認領區塊!' + 的身分組。' + hint: '你的身分組無法為這座島嶼認領區塊!' chunkblock: bossbar: title: 剩餘的塊 - status: '&a 階段方塊&b [done] &d / &b [total]' + status: '階段方塊 [done] / [total]' color: RED style: SEGMENTED_20 - not-active: '&c 此島嶼的 Boss 血條未啟用' + not-active: '此島嶼的 Boss 血條未啟用' actionbar: - status: '&a 階段: &b [phase-name] &d | &a 方塊數: &b [done] &d / &b [total] &d | &a 進度: &b [percent-done]' - not-active: '&c 該島嶼的動作欄未啟用' + status: '階段: [phase-name] | 方塊數: [done] / [total] | 進度: [percent-done]' + not-active: '該島嶼的動作欄未啟用' commands: admin: setcount: parameters: <名稱> <計數> description: 設定玩家的方塊數量 - set: '&a [name] 的計數設定為 [number]' - set-lifetime: '&a [name] 的生命週期計數設定為 [number]' + set: '[name] 的計數設定為 [number]' + set-lifetime: '[name] 的生命週期計數設定為 [number]' setchest: parameters: <階段> <稀有> description: 將所看的箱子放在指定稀有度的階段 - chest-is-empty: '&c該箱子為空,因此無法添加' - unknown-phase: '&c未知階段。使用 Tab 鍵自動補全查看' - unknown-rarity: '&c未知稀有。使用COMMON,UNCOMMON,RARE或EPIC' - look-at-chest: '&c請看向裝滿的箱子' - only-single-chest: '&c只能設定單一箱子' - success: '&a 箱子成功添加' - failure: '&c 無法將箱子加入該階段! 請參閱控制台以獲取錯誤' + chest-is-empty: '該箱子為空,因此無法添加' + unknown-phase: '未知階段。使用 Tab 鍵自動補全查看' + unknown-rarity: '未知稀有。使用COMMON,UNCOMMON,RARE或EPIC' + look-at-chest: '請看向裝滿的箱子' + only-single-chest: '只能設定單一箱子' + success: '箱子成功添加' + failure: '無法將箱子加入該階段! 請參閱控制台以獲取錯誤' sanity: parameters: <階段> description: 在主控台顯示各階段機率的健全性檢查 - see-console: '&a請參閱控制台以獲取報告' + see-console: '請參閱控制台以獲取報告' bypass: description: 切換你自己是否受區塊鎖定限制 - 'off': '&a 區塊鎖定已重新套用在你身上。' - 'on': '&a 你現在可以無視區塊鎖定,且邊界視覺效果對你隱藏。' + 'off': '區塊鎖定已重新套用在你身上。' + 'on': '你現在可以無視區塊鎖定,且邊界視覺效果對你隱藏。' chunks: description: 查看玩家已解鎖的區塊,或將其重新鎖回起始狀態 - info: '&a [name]:&b [number]&a/&b[max] &a 個區塊,已花費 &b [spent] &a 點等級,剩餘額度 &b [credit] &a 點。' + info: '[name]: [number]/[max] 個區塊,已花費 [spent] 點等級,剩餘額度 [credit] 點。' parameters: <玩家> [reset] - reset: '&a [name] 的區塊已重新鎖回只剩中心區塊。' + reset: '[name] 的區塊已重新鎖回只剩中心區塊。' phases: description: 開啟階段順序編輯器 - no-index: '&c 尚未載入階段索引,因此無法重新排序階段' - save-failed: '&c 無法儲存階段順序!請查看主控台錯誤訊息' - saved: '&a 階段順序已儲存並套用' + no-index: '尚未載入階段索引,因此無法重新排序階段' + save-failed: '無法儲存階段順序!請查看主控台錯誤訊息' + saved: '階段順序已儲存並套用' gui: cancel-word: cancel - disabled: '&c 已停用' - drop-at-end: '&a 放到最後' - drop-here: '&e 點擊以放置於此' - enter-length: '&e 請在聊天室輸入 &a [name] &e 的新長度-目前為 &b [number] &e 個方塊。輸入 &c cancel &e 可保持不變。' - held: '&e 移動中:[name]' - info-title: '&f 使用方式' - instructions: '&7 點擊一個階段以拿起它,\n&7 再點擊要放置的位置。\n&7 右鍵點擊可切換\n&7 階段的啟用/停用。' - invalid-length: '&c 長度必須是大於 0 的整數' - length: '&7 長度:&b [number]' - length-cancelled: '&c 長度未變更' - phase-name: '&a [name]' - pick-up: '&e 點擊以移動' - put-back: '&e 點擊以放回' - repeat: '&7 最後一個階段結束後,計數將跳至 &b [number]' - set-length: '&e Shift + 左鍵點擊以設定長度' - start: '&7 起始:&b [number]' - title: '&2 階段順序' - toggle: '&e 右鍵點擊以切換' - version-locked: '&c 需要 Minecraft [version]+' + disabled: '已停用' + drop-at-end: '放到最後' + drop-here: '點擊以放置於此' + enter-length: '請在聊天室輸入 [name] 的新長度-目前為 [number] 個方塊。輸入 cancel 可保持不變。' + held: '移動中:[name]' + info-title: '使用方式' + instructions: '點擊一個階段以拿起它,\n 再點擊要放置的位置。\n 右鍵點擊可切換\n 階段的啟用/停用。' + invalid-length: '長度必須是大於 0 的整數' + length: '長度: [number]' + length-cancelled: '長度未變更' + phase-name: '[name]' + pick-up: '點擊以移動' + put-back: '點擊以放回' + repeat: '最後一個階段結束後,計數將跳至 [number]' + set-length: 'Shift + 左鍵點擊以設定長度' + start: '起始: [number]' + title: '階段順序' + toggle: '右鍵點擊以切換' + version-locked: '需要 Minecraft [version]+' count: description: 顯示方塊數量與所在階段 - info: '&a你目前在 &a[name] &r階段,已破壞 &b[number] &r個方塊' + info: '你目前在 [name] 階段,已破壞 [number] 個方塊' info: - count: '&a 島位於 &b [names] &a 階段的 &b [number]&a 區塊。生命週期計數 &b [lifetime] &a。' + count: '島位於 [names] 階段的 [number] 區塊。生命週期計數 [lifetime] ' phases: description: 顯示所有階段的列表 - title: '&2 ChunkBlock 階段' - name-syntax: '&a [name]' - description-syntax: '&b [number]塊' + title: 'ChunkBlock 階段' + name-syntax: '[name]' + description-syntax: '[number]塊' island: bossbar: description: 切換階段狀態列 - status_on: '&b Bossbar&a 打開' - status_off: '&b Bossbar&c 關閉' + status_on: 'Bossbar 打開' + status_off: 'Bossbar 關閉' actionbar: description: 切換階段動作欄 - status_on: '&b 動作欄已 &a 開啟' - status_off: '&b 動作欄已 &c 關閉' + status_on: '動作欄已 開啟' + status_off: '動作欄已 關閉' setcount: parameters: <計數> description: 將區塊計數設定為之前完成的值 - set: '&a 計數設定為 [number]。' - too-high: '&c 你可以設定的最大值是 [number]!' + set: '計數設定為 [number]。' + too-high: '你可以設定的最大值是 [number]!' respawn-block: description: 在魔法塊消失的情況下重生 - block-exist: '&a 塊存在,不需要重生。我給你標記了。' - block-respawned: '&a 塊重生。' + block-exist: '塊存在,不需要重生。我給你標記了。' + block-respawned: '塊重生。' chunks: description: 顯示你已解鎖的區塊與你的領土地圖 phase: - insufficient-level: '&c 你的島嶼等級太低,無法繼續!必須是[number]。' - insufficient-funds: '&c 你的資金太低,無法繼續!至少需要 [number]。' - insufficient-bank-balance: '&c 島上銀行餘額太低,無法繼續!必須是[number]。' - insufficient-permission: '&c 在獲得 [name] 許可之前,你不能繼續操作!' - cooldown: '&c [number] 秒後即可進入下一階段!' + insufficient-level: '你的島嶼等級太低,無法繼續!必須是[number]。' + insufficient-funds: '你的資金太低,無法繼續!至少需要 [number]。' + insufficient-bank-balance: '島上銀行餘額太低,無法繼續!必須是[number]。' + insufficient-permission: '在獲得 [name] 許可之前,你不能繼續操作!' + cooldown: '[number] 秒後即可進入下一階段!' placeholders: infinite: 無窮 my-island-phase-default: 未知 gui: titles: - phases: '&0&l ChunkBlock 階段' + phases: 'ChunkBlock 階段' buttons: previous: - name: '&f&l 上一頁' - description: '&7 切換到[number]頁' + name: '上一頁' + description: '切換到[number]頁' next: - name: '&f&l 下一頁' - description: '&7 切換到[number]頁' + name: '下一頁' + description: '切換到[number]頁' phase: - name: '&f&l [階段]' + name: '[階段]' description: '[starting-block] [biome] @@ -168,29 +168,29 @@ chunkblock: [level] [permission]' - starting-block: '&7 在破壞 &e [number] 區塊後開始。' - biome: '&7 生態域:&e [biome]' - bank: '&7 需要銀行帳戶中有 &e $[number] &7。' - economy: '&7 需要玩家帳號中有 &e $[number] &7。' - level: '&7 需要 &e [number] &7 島嶼等級。' - permission: '&7 需要 `&e[permission]&7` 權限。' - blocks-prefix: '&7 階段塊 - ' - blocks: '&e [name], ' + starting-block: '在破壞 [number] 區塊後開始。' + biome: '生態域: [biome]' + bank: '需要銀行帳戶中有 $[number] ' + economy: '需要玩家帳號中有 $[number] ' + level: '需要 [number] 島嶼等級。' + permission: '需要 `[permission]` 權限。' + blocks-prefix: '階段塊 - ' + blocks: '[name], ' wrap-at: '50' tips: - click-to-previous: '&e 點選&7 查看上一頁。' - click-to-next: '&e 點選&7 查看下一頁。' - click-to-change: '&e 點選 &7 進行更改。' + click-to-previous: '點選 查看上一頁。' + click-to-next: '點選 查看下一頁。' + click-to-change: '點選 進行更改。' island: - starting-hologram: '&a歡迎來到 ChunkBlock + starting-hologram: '歡迎來到 ChunkBlock - 打破此區塊以開始(&E)' + 打破此區塊以開始()' chunks: - beyond-limit: '&c 那個區塊超出你的島嶼保護範圍。' - claim-confirm: '&e 要花費 &b [cost] &e 點等級額度認領這個區塊嗎?認領後你將剩下 &b [after] &e 點額度。&6請潛行並在 &e &b [seconds]s &e 內再次撞擊邊界以確認。' - claim-hint: '&e 撞擊邊界即可花費 &b [cost] &e 點等級額度認領這個區塊!你目前有 &b [credit] &e 點額度。' - claimed: '&a &l 區塊已認領!&r&a 你的島嶼現在有 &b [number] &a 個區塊。剩餘額度:&b [credit] &a 點等級。' - credit: '&a 你還可以認領 &b [count] &a 個區塊!前往你的邊界,朝想擴張的方向撞擊它。' + beyond-limit: '那個區塊超出你的島嶼保護範圍。' + claim-confirm: '要花費 [cost] 點等級額度認領這個區塊嗎?認領後你將剩下 [after] 點額度。請潛行並在 [seconds]s 內再次撞擊邊界以確認。' + claim-hint: '撞擊邊界即可花費 [cost] 點等級額度認領這個區塊!你目前有 [credit] 點額度。' + claimed: '區塊已認領!你的島嶼現在有 [number] 個區塊。剩餘額度: [credit] 點等級。' + credit: '你還可以認領 [count] 個區塊!前往你的邊界,朝想擴張的方向撞擊它。' dialog: close: '關閉' tooltip: @@ -200,19 +200,19 @@ chunkblock: no-credit: '區塊 [x], [z] — 需要 [cost] 點等級額度。你還缺 [needed] 點額度。' locked: '區塊 [x], [z] — 已鎖定。持續向外認領才能到達。' you-are-here: '你正站在這裡。' - ejected: '&c 你所在的區塊被重新鎖定,因此你已被移動到安全地點。' - entry-denied: '&c 那個區塊已被鎖定。' - info: '&a 區塊:&b [unlocked]&a/&b[max]&a。額度:&b [credit] &a 點等級 — 認領一個區塊需要 &b [cost]&a。' - locked: '&c 你無法碰觸那裡 — 該區塊已被鎖定。' + ejected: '你所在的區塊被重新鎖定,因此你已被移動到安全地點。' + entry-denied: '那個區塊已被鎖定。' + info: '區塊: [unlocked]/[max]。額度: [credit] 點等級 — 認領一個區塊需要 [cost]' + locked: '你無法碰觸那裡 — 該區塊已被鎖定。' map: - legend: '&a ■ 你的 &e ▣ 可認領(每個 [cost] 點等級) &7 □ 已鎖定 &6 ◎ 中心 &b ◆ 你' - row: '&a [row]' - title: '&a 你的島嶼領土([unlocked]/[max] 個區塊):' - you-are-here: '&b 你目前站在標記的區塊上。' - max-reached: '&d 你的島嶼已達到最大尺寸 [number] 個區塊!' - no-credit: '&c 你還需要 &b [needed] &c 點等級額度才能認領這個區塊。' - relocked: '&c 你的島嶼等級下降 — [count] 個區塊已重新鎖定(由最新認領的開始)。提升等級即可重新奪回!' - ring-broadcast: '&6 [name] 的島嶼已完成第 &b [ring] &6 圈 — &b [chunks] &6 個區塊,而且還在成長!' - ring-complete: '&6 &l 第 [ring] 圈完成!&r&6 島嶼周圍的整圈都是你的了 — 總共 &b [chunks] &6 個區塊。' - rings: '&a 已完成圈數:&b [rings] &a / &b [max]&a。' - sethome-denied: '&c 你不能在已鎖定的區塊內設定重生點。' + legend: '■ 你的 ▣ 可認領(每個 [cost] 點等級) □ 已鎖定 ◎ 中心 ◆ 你' + row: '[row]' + title: '你的島嶼領土([unlocked]/[max] 個區塊):' + you-are-here: '你目前站在標記的區塊上。' + max-reached: '你的島嶼已達到最大尺寸 [number] 個區塊!' + no-credit: '你還需要 [needed] 點等級額度才能認領這個區塊。' + relocked: '你的島嶼等級下降 — [count] 個區塊已重新鎖定(由最新認領的開始)。提升等級即可重新奪回!' + ring-broadcast: '[name] 的島嶼已完成第 [ring] 圈 — [chunks] 個區塊,而且還在成長!' + ring-complete: '第 [ring] 圈完成!島嶼周圍的整圈都是你的了 — 總共 [chunks] 個區塊。' + rings: '已完成圈數: [rings] / [max]' + sethome-denied: '你不能在已鎖定的區塊內設定重生點。'