diff --git a/extension/src/main/java/de/jeremystartm/pickshadow/api/translation/TranslationManager.java b/extension/src/main/java/de/jeremystartm/pickshadow/api/translation/TranslationManager.java index 6ae0006..b6df51a 100644 --- a/extension/src/main/java/de/jeremystartm/pickshadow/api/translation/TranslationManager.java +++ b/extension/src/main/java/de/jeremystartm/pickshadow/api/translation/TranslationManager.java @@ -25,6 +25,7 @@ import com.google.gson.reflect.TypeToken; import de.staropensource.sosengine.base.logging.LoggerInstance; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.IOException; import java.io.InputStream; @@ -61,27 +62,22 @@ public final class TranslationManager { * @param languageString language string to get * @param sender sender to translate for * @param includePrefix if {@link LanguageString#PREFIX} should be prepended + * @param placeholders placeholders * @since v1-release0 */ - public static @NotNull String get(@NotNull LanguageString languageString, @NotNull CommandSender sender, boolean includePrefix) { - String language = "en"; + public static @NotNull String get(@NotNull LanguageString languageString, @NotNull CommandSender sender, boolean includePrefix, @NotNull Map.Entry<@NotNull String, @NotNull String> @Nullable ... placeholders) { + String temp = "en"; if (includePrefix) - return get(LanguageString.PREFIX, "en") + get(languageString, language).replace("\n", "\n" + get(LanguageString.PREFIX_NEWLINE, "en")); + temp = get(LanguageString.PREFIX, "en") + get(languageString, temp).replace("\n", "\n" + get(LanguageString.PREFIX_NEWLINE, "en")); else - return get(languageString, language); - } + temp = get(languageString, temp); - /** - * Returns the translation for the specified language - * string for the specified {@link CommandSender}. - * - * @param languageString language string to get - * @param sender sender to translate for - * @since v1-release0 - */ - public static @NotNull String get(@NotNull LanguageString languageString, @NotNull CommandSender sender) { - return get(languageString, sender, false); + if (placeholders != null) + for (Map.Entry<@NotNull String, @NotNull String> placeholder : placeholders) + temp = temp.replace("%" + placeholder.getKey() + "%", placeholder.getValue()); + + return temp; } /** diff --git a/extension/src/main/java/de/jeremystartm/pickshadow/command/general/ClearChatCommand.java b/extension/src/main/java/de/jeremystartm/pickshadow/command/general/ClearChatCommand.java index f850c7b..2d79c52 100644 --- a/extension/src/main/java/de/jeremystartm/pickshadow/command/general/ClearChatCommand.java +++ b/extension/src/main/java/de/jeremystartm/pickshadow/command/general/ClearChatCommand.java @@ -31,6 +31,8 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; +import static java.util.Map.entry; + /** * Handles the {@code /clearchat} command. * @@ -101,6 +103,6 @@ public final class ClearChatCommand extends CommandBase { LanguageString.CLEARCHAT_CRINGE, }; - return TranslationManager.get(strings[(int) System.currentTimeMillis() % strings.length], receiver, true).replace("%sender%", sender.getName()); + return TranslationManager.get(strings[(int) System.currentTimeMillis() % strings.length], receiver, true, entry("sender", sender.getName())); } } diff --git a/extension/src/main/java/de/jeremystartm/pickshadow/command/general/ExtensionCommand.java b/extension/src/main/java/de/jeremystartm/pickshadow/command/general/ExtensionCommand.java index 16f8b79..e2b2c5a 100644 --- a/extension/src/main/java/de/jeremystartm/pickshadow/command/general/ExtensionCommand.java +++ b/extension/src/main/java/de/jeremystartm/pickshadow/command/general/ExtensionCommand.java @@ -30,6 +30,8 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.NotNull; +import static java.util.Map.entry; + /** * Handles the {@code /psse} command. * @@ -74,12 +76,14 @@ public final class ExtensionCommand extends CommandBase { case "psse", "pickshadow", "server" -> { if (arguments.length == 0) sender.sendRichMessage( - TranslationManager.get(LanguageString.EXTENSIONCMD_GREETER, sender, true) - .replace("%codename%", ExtensionInformation.getVersioningCodename()) - .replace("%version%", ExtensionInformation.getVersioningString()) - .replace("%commit%", ExtensionInformation.getGitCommitIdentifierShort()) - .replace("%dirty%", String.valueOf(ExtensionInformation.isGitDirty())) - ); + TranslationManager.get(LanguageString.EXTENSIONCMD_GREETER, + sender, + true, + entry("codename", ExtensionInformation.getVersioningCodename()), + entry("version", ExtensionInformation.getVersioningString()), + entry("commit", ExtensionInformation.getGitCommitIdentifierShort()), + entry("%dirty%", String.valueOf(ExtensionInformation.isGitDirty())) + )); else { switch (arguments[0]) { case "killjvm" -> { @@ -90,7 +94,7 @@ public final class ExtensionCommand extends CommandBase { } case "license" -> sender.sendRichMessage(TranslationManager.get(LanguageString.EXTENSIONCMD_LICENSE, sender, true)); case "source" -> sender.sendRichMessage(TranslationManager.get(LanguageString.EXTENSIONCMD_SOURCE, sender, true)); - default -> sender.sendRichMessage(TranslationManager.get(LanguageString.ERROR_INVALID_ARGUMENT, sender, true).replace("%argument%", arguments[0])); + default -> sender.sendRichMessage(TranslationManager.get(LanguageString.ERROR_INVALID_ARGUMENT, sender, true, entry("argument", arguments[0]))); } if (arguments[0].equals("killjvm")) Runtime.getRuntime().halt(0); diff --git a/extension/src/main/java/de/jeremystartm/pickshadow/command/general/MessageCommand.java b/extension/src/main/java/de/jeremystartm/pickshadow/command/general/MessageCommand.java index c1438e1..873a2d0 100644 --- a/extension/src/main/java/de/jeremystartm/pickshadow/command/general/MessageCommand.java +++ b/extension/src/main/java/de/jeremystartm/pickshadow/command/general/MessageCommand.java @@ -21,7 +21,6 @@ package de.jeremystartm.pickshadow.command.general; import de.jeremystartm.pickshadow.api.command.CommandBase; import de.jeremystartm.pickshadow.api.command.completion.StaticTabCompletion; -import de.jeremystartm.pickshadow.api.command.completion.StubTabCompletion; import de.jeremystartm.pickshadow.api.command.TabCompletion; import de.jeremystartm.pickshadow.api.translation.LanguageString; import de.jeremystartm.pickshadow.api.translation.TranslationManager; @@ -32,6 +31,8 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; +import static java.util.Map.entry; + /** * Handles the {@code /message} command. * @@ -84,10 +85,7 @@ public final class MessageCommand extends CommandBase { // Check if receiver is online if (receiver == null || !receiver.isOnline()) { - player.sendRichMessage( - TranslationManager.get(LanguageString.ERROR_PLAYER_NOT_FOUND, sender, true) - .replace("%player%", arguments[0]) - ); + player.sendRichMessage(TranslationManager.get(LanguageString.ERROR_PLAYER_NOT_FOUND, sender, true, entry("player", arguments[0]))); return; } @@ -105,10 +103,14 @@ public final class MessageCommand extends CommandBase { message.append(arguments[i]); } - output = TranslationManager.get(LanguageString.MESSAGING_FORMAT, sender, false) - .replace("%from%", player.getName()) - .replace("%to%", receiver.getName()) - .replace("%message%", message.toString()); + output = TranslationManager.get( + LanguageString.MESSAGING_FORMAT, + sender, + false, + entry("from", player.getName()), + entry("to", receiver.getName()), + entry("message", message.toString()) + ); // Send message player.sendRichMessage(output);