From 94d796e09b115fcebf0817f53ff5a797f73d6891 Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Sun, 5 May 2024 01:23:10 +0200 Subject: [PATCH] started work on translatable Strings (CreateCommand) --- .../minecleaner/MinecleanerPlugin.java | 22 +++++++++++++++ .../minecleaner/commands/CreateCommand.java | 27 +++++++++++-------- .../utils/MinecleanerComponentUtils.java | 23 ++++++++++++++++ src/main/resources/lang/de_DE.properties | 9 +++++++ src/main/resources/lang/en_US.properties | 9 +++++++ src/main/resources/plugin.yml | 2 +- 6 files changed, 80 insertions(+), 12 deletions(-) create mode 100644 src/main/java/de/lunarakai/minecleaner/utils/MinecleanerComponentUtils.java create mode 100644 src/main/resources/lang/de_DE.properties create mode 100644 src/main/resources/lang/en_US.properties diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java index 8cd79de..c91a96e 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java @@ -1,6 +1,10 @@ package de.lunarakai.minecleaner; import de.lunarakai.minecleaner.commands.SettingsCommand; +import net.kyori.adventure.key.Key; +import net.kyori.adventure.translation.GlobalTranslator; +import net.kyori.adventure.translation.TranslationRegistry; +import net.kyori.adventure.util.UTF8ResourceBundleControl; import org.bukkit.plugin.java.JavaPlugin; import de.iani.cubesidestats.api.CubesideStatisticsAPI; import de.iani.cubesideutils.bukkit.commands.CommandRouter; @@ -12,6 +16,8 @@ import de.lunarakai.minecleaner.commands.InfoCommand; import de.lunarakai.minecleaner.commands.ListCommand; import de.lunarakai.minecleaner.commands.StatsCommand; +import java.util.Locale; +import java.util.ResourceBundle; import java.util.logging.Level; public final class MinecleanerPlugin extends JavaPlugin { @@ -26,6 +32,18 @@ public final class MinecleanerPlugin extends JavaPlugin { @Override public void onEnable() { this.saveDefaultConfig(); + + TranslationRegistry registry = TranslationRegistry.create(Key.key("minecleaner:lang")); + + ResourceBundle bundle_en_US = ResourceBundle.getBundle("lang.en_US", Locale.US, UTF8ResourceBundleControl.get()); + registry.registerAll(Locale.US, bundle_en_US, true); + GlobalTranslator.translator().addSource(registry); + + ResourceBundle bundle_de_DE = ResourceBundle.getBundle("lang.de_DE", Locale.GERMAN, UTF8ResourceBundleControl.get()); + registry.registerAll(Locale.GERMAN, bundle_de_DE, true); + + GlobalTranslator.translator().addSource(registry); + getServer().getScheduler().runTask(this, this::onLateEnable); } @@ -42,6 +60,10 @@ public final class MinecleanerPlugin extends JavaPlugin { this.getLogger().log(Level.WARNING, "Cubeside Statistics not found. No Statistics will be available"); } + + + + arenaList = new ArenaList(this); arenaList.load(); diff --git a/src/main/java/de/lunarakai/minecleaner/commands/CreateCommand.java b/src/main/java/de/lunarakai/minecleaner/commands/CreateCommand.java index 38a2022..865268a 100644 --- a/src/main/java/de/lunarakai/minecleaner/commands/CreateCommand.java +++ b/src/main/java/de/lunarakai/minecleaner/commands/CreateCommand.java @@ -5,6 +5,8 @@ import java.util.Collection; import java.util.List; import java.util.regex.Pattern; import javax.annotation.Nullable; + +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Location; import org.bukkit.block.BlockFace; import org.bukkit.command.Command; @@ -22,6 +24,8 @@ import de.lunarakai.minecleaner.MinecleanerArena; import de.lunarakai.minecleaner.MinecleanerPlugin; import net.md_5.bungee.api.ChatColor; +import static de.lunarakai.minecleaner.utils.MinecleanerComponentUtils.createLangComponent; + public class CreateCommand extends SubCommand { private static final Pattern VALID_ARENA_NAME = Pattern.compile("^[a-z0-9_]+$"); @@ -55,11 +59,11 @@ public class CreateCommand extends SubCommand { } String name = args.getNext().toLowerCase().trim(); if(!VALID_ARENA_NAME.matcher(name).matches()) { - sender.sendMessage(ChatColor.DARK_RED + "Ungültiger Arenaname. Erlaubt sind Buchstaben, Zahlen und der Unterstrich"); + sender.sendMessage(createLangComponent("arena.name.invalid", NamedTextColor.DARK_RED)); return true; } if(plugin.getArenaList().getArena(name) != null) { - sender.sendMessage(ChatColor.DARK_RED + "Eine Arena mit diesem Namen existiert bereits"); + sender.sendMessage(createLangComponent( "arena.name.exists", NamedTextColor.DARK_RED)); return true; } boolean noblocks = false; @@ -73,13 +77,13 @@ public class CreateCommand extends SubCommand { try { widthindex = Integer.parseInt(arg); } catch(NumberFormatException e) { - sender.sendMessage(ChatColor.DARK_RED + "Kein Valider Arena WidthIndex!"); - sender.sendMessage(ChatColor.DARK_RED + "0 (oder weglassen) = 9*9, 1 = 12*12, 2 = 12*18, 3 = 12*33"); + sender.sendMessage(createLangComponent("arena.widthindex.invalid", NamedTextColor.DARK_RED)); + sender.sendMessage(createLangComponent("arena.widthindex.validOptions", NamedTextColor.DARK_RED)); return true; } if(widthindex > 3) { - sender.sendMessage(ChatColor.DARK_RED + "Arena WidthIndex darf nicht größer als 3 sein"); - sender.sendMessage(ChatColor.DARK_RED + "0 (oder weglassen) = 9*9, 1 = 12*12, 2 = 12*18, 3 = 12*33"); + sender.sendMessage(createLangComponent( "arena.widthindex.toolarge", NamedTextColor.DARK_RED)); + sender.sendMessage(createLangComponent("arena.widthindex.validOptions", NamedTextColor.DARK_RED)); return true; } } else { @@ -94,12 +98,14 @@ public class CreateCommand extends SubCommand { @Nullable RayTraceResult target = player.rayTraceBlocks(6); if(target == null || target.getHitBlock() == null) { - sender.sendMessage(ChatColor.DARK_RED + "Bitte gucke den Block an, der im Zentrum des " + plugin.getDisplayedPluginName() + "-Spielfelds sein soll."); + //sender.sendMessage(ChatColor.DARK_RED + "Bitte gucke den Block an, der im Zentrum des " + plugin.getDisplayedPluginName() + "-Spielfelds sein soll."); + sender.sendMessage(createLangComponent( "arena.create.lookAtCenter", plugin.getDisplayedPluginName(), NamedTextColor.DARK_RED)); return true; } BlockFace face = target.getHitBlockFace(); if(face != BlockFace.NORTH && face != BlockFace.WEST && face != BlockFace.EAST && face != BlockFace.SOUTH) { - sender.sendMessage(ChatColor.DARK_RED + "Bitte gucke die Seite des Blockes an, wo das " + plugin.getDisplayedPluginName() + "-Spielfeld erstellt werden soll."); + //sender.sendMessage(ChatColor.DARK_RED + "Bitte gucke die Seite des Blockes an, wo das " + plugin.getDisplayedPluginName() + "-Spielfeld erstellt werden soll."); + sender.sendMessage(createLangComponent("arena.create.lookAtSide", plugin.getDisplayedPluginName(), NamedTextColor.DARK_RED)); return true; } location = target.getHitBlock().getLocation(); @@ -107,7 +113,7 @@ public class CreateCommand extends SubCommand { MinecleanerArena newArena = new MinecleanerArena(plugin, name, location, widthindex, orientation); if(plugin.getArenaList().collidesWithArena(newArena)) { - sender.sendMessage(ChatColor.DARK_RED + "An dieser Stelle befindet sich bereits eine Arena."); + sender.sendMessage(createLangComponent("arena.create.otherArena", NamedTextColor.DARK_RED)); return true; } newArena.generateBlockDisplays(); @@ -115,7 +121,7 @@ public class CreateCommand extends SubCommand { newArena.generateBackgroundBlocks(); } plugin.getArenaList().addArena(newArena); - sender.sendMessage(ChatColor.GREEN + "Die Arena wurde erfolgreich angelegt."); + sender.sendMessage(createLangComponent("arena.create.success", NamedTextColor.GREEN)); return true; } @@ -151,5 +157,4 @@ public class CreateCommand extends SubCommand { } return List.of(); } - } diff --git a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerComponentUtils.java b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerComponentUtils.java new file mode 100644 index 0000000..b6127cb --- /dev/null +++ b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerComponentUtils.java @@ -0,0 +1,23 @@ +package de.lunarakai.minecleaner.utils; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.format.NamedTextColor; + +public class MinecleanerComponentUtils { + + public static TextComponent createLangComponent(String langKey, NamedTextColor namedColor) { + return Component.text() + .color(namedColor) + .append(Component.translatable(langKey)) + .build(); + } + + public static TextComponent createLangComponent(String langKey, String arg0, NamedTextColor namedColor) { + return Component.text() + .color(namedColor) + .append(Component.translatable(langKey, Component.text(arg0))) + .build(); + } + +} diff --git a/src/main/resources/lang/de_DE.properties b/src/main/resources/lang/de_DE.properties new file mode 100644 index 0000000..649270c --- /dev/null +++ b/src/main/resources/lang/de_DE.properties @@ -0,0 +1,9 @@ +arena.name.invalid=Ungueltiger Arenaname. Erlaubt sind Buchstaben, Zahlen und der Unterstrich +arena.name.exists=Eine Arena mit diesem Namen existiert bereits +arena.widthindex.invalid=Kein Valider Arena WidthIndex! +arena.widthindex.validOptions=0 (oder weglassen) = 9*9, 1 = 12*12, 2 = 12*18, 3 = 12*33 +arena.widthindex.toolarge=Arena WidthIndex darf nicht groesser als 3 sein +arena.create.lookAtCenter=Bitte gucke den Block an, der im Zentrum des {0}-Spielfelds sein soll. +arena.create.lookAtSide=Bitte gucke die Seite des Blockes an, wo das {0}-Spielfeld erstellt werden soll. +arena.create.otherArena=An dieser Stelle befindet sich bereits eine Arena. +arena.create.success=Die Arena wurde erfolgreich angelegt. \ No newline at end of file diff --git a/src/main/resources/lang/en_US.properties b/src/main/resources/lang/en_US.properties new file mode 100644 index 0000000..298922c --- /dev/null +++ b/src/main/resources/lang/en_US.properties @@ -0,0 +1,9 @@ +arena.name.invalid=Invalid arena name. Allowed are letters, numbers and the underscore +arena.name.exists=An arena with this name already exists +arena.widthindex.invalid=Not a valid Arena WidthIndex +arena.widthindex.validOptions=0 (or leave empty) = 9*9, 1 = 12*12, 2 = 12*18, 3 = 12*33 +arena.widthindex.toolarge=Arena WidthIndex must not be greater than 3 +arena.create.lookAtCenter=Please look at the block that should be in the center of the {0} field. +arena.create.lookAtSide=Please look at the side of the block where the {0} field is to be created. +arena.create.otherArena=There is already an arena at this location. +arena.create.success=The arena has been created successfully. \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 1ac16a2..e72cb94 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: Minecleaner -version: '${project.version}-${git.commit.id.abbrev}' +version: '${project.version}-dev-${git.commit.id.abbrev}' author: LunarAkai website: https://github.com/LunarAkai/Minecleaner main: de.lunarakai.minecleaner.MinecleanerPlugin