diff --git a/src/main/java/net/knarcraft/knarlib/KnarLib.java b/src/main/java/net/knarcraft/knarlib/KnarLib.java index 9a6baf3..266b49f 100644 --- a/src/main/java/net/knarcraft/knarlib/KnarLib.java +++ b/src/main/java/net/knarcraft/knarlib/KnarLib.java @@ -4,6 +4,8 @@ import org.bukkit.plugin.java.JavaPlugin; /** * KnarLib's main class + * + *

Make sure you initialize KnarLib by running setPlugin() during onEnable! Some methods will not work without it.

*/ public final class KnarLib { diff --git a/src/main/java/net/knarcraft/knarlib/formatting/StringFormatter.java b/src/main/java/net/knarcraft/knarlib/formatting/StringFormatter.java index 4f36c06..ffb3bc4 100644 --- a/src/main/java/net/knarcraft/knarlib/formatting/StringFormatter.java +++ b/src/main/java/net/knarcraft/knarlib/formatting/StringFormatter.java @@ -20,11 +20,12 @@ public final class StringFormatter { /** * Displays a message signifying a successful action * - * @param sender

The command sender to display the message to

- * @param message

The translatable message to display

+ * @param sender

The command sender to display the message to

+ * @param translator

The translator to use for the translation

+ * @param message

The translatable message to display

*/ - public static void displaySuccessMessage(CommandSender sender, TranslatableMessage message) { - sender.sendMessage(ChatColor.GREEN + getFormattedMessage(Translator.getTranslatedMessage(message))); + public static void displaySuccessMessage(CommandSender sender, Translator translator, TranslatableMessage message) { + sender.sendMessage(ChatColor.GREEN + getFormattedMessage(translator.getTranslatedMessage(message))); } /** @@ -40,18 +41,19 @@ public final class StringFormatter { /** * Displays a message signifying an unsuccessful action * - * @param sender

The command sender to display the message to

- * @param message

The translatable message to display

+ * @param sender

The command sender to display the message to

+ * @param translator

The translator to use for the translation

+ * @param message

The translatable message to display

*/ - public static void displayErrorMessage(CommandSender sender, TranslatableMessage message) { - sender.sendMessage(ChatColor.DARK_RED + getFormattedMessage(Translator.getTranslatedMessage(message))); + public static void displayErrorMessage(CommandSender sender, Translator translator, TranslatableMessage message) { + sender.sendMessage(ChatColor.DARK_RED + getFormattedMessage(translator.getTranslatedMessage(message))); } /** * Displays a message signifying an unsuccessful action * * @param sender

The command sender to display the message to

- * @param message

The translatable message to display

+ * @param message

The raw message to display

*/ public static void displayErrorMessage(CommandSender sender, String message) { sender.sendMessage(ChatColor.DARK_RED + getFormattedMessage(message)); @@ -67,6 +69,34 @@ public final class StringFormatter { return "[" + pluginName + "] " + ChatColor.RESET + ColorHelper.translateColorCodes(message, ColorConversion.NORMAL); } + /** + * Replaces a placeholder in a string + * + * @param translator

The translator to use for the translation

+ * @param translatableMessage

The translatable message to replace in

+ * @param placeholder

The placeholder to replace

+ * @param replacement

The replacement value

+ * @return

The input string with the placeholder replaced

+ */ + public static String replacePlaceholder(Translator translator, TranslatableMessage translatableMessage, String placeholder, + String replacement) { + return replacePlaceholder(translator.getTranslatedMessage(translatableMessage), placeholder, replacement); + } + + /** + * Replaces placeholders in a string + * + * @param translator

The translator to use for the translation

+ * @param translatableMessage

The translatable message to replace in

+ * @param placeholders

The placeholders to replace

+ * @param replacements

The replacement values

+ * @return

The input string with placeholders replaced

+ */ + public static String replacePlaceholders(Translator translator, TranslatableMessage translatableMessage, String[] placeholders, + String[] replacements) { + return replacePlaceholders(translator.getTranslatedMessage(translatableMessage), placeholders, replacements); + } + /** * Replaces a placeholder in a string * diff --git a/src/main/java/net/knarcraft/knarlib/formatting/TimeFormatter.java b/src/main/java/net/knarcraft/knarlib/formatting/TimeFormatter.java index 7e91049..3ae530f 100644 --- a/src/main/java/net/knarcraft/knarlib/formatting/TimeFormatter.java +++ b/src/main/java/net/knarcraft/knarlib/formatting/TimeFormatter.java @@ -23,11 +23,13 @@ public final class TimeFormatter { /** * Gets the string used for displaying this sign's duration * + * @param translator

The translator to use for translation

+ * @param duration

The duration, in seconds, to display

* @return

The string used for displaying this sign's duration

*/ - public static String getDurationString(long duration) { + public static String getDurationString(Translator translator, long duration) { if (duration == 0) { - return Translator.getTranslatedMessage(TranslatableTimeUnit.UNIT_NOW); + return translator.getTranslatedMessage(TranslatableTimeUnit.UNIT_NOW); } else { if (sortedUnits == null) { initializeUnits(); @@ -35,11 +37,11 @@ public final class TimeFormatter { for (double unit : sortedUnits) { if (duration / unit >= 1) { double units = round(duration / unit); - return formatDurationString(units, timeUnits.get(unit)[units == 1 ? 0 : 1], + return formatDurationString(units, translator, timeUnits.get(unit)[units == 1 ? 0 : 1], (units * 10) % 10 == 0); } } - return formatDurationString(duration, TranslatableTimeUnit.UNIT_SECONDS, false); + return formatDurationString(duration, translator, TranslatableTimeUnit.UNIT_SECONDS, false); } } @@ -57,14 +59,16 @@ public final class TimeFormatter { * Formats a duration string * * @param duration

The duration to display

+ * @param translator

The translator to use for translation

* @param translatableMessage

The time unit to display

* @param castToInt

Whether to cast the duration to an int

* @return

The formatted duration string

*/ - private static String formatDurationString(double duration, TranslatableTimeUnit translatableMessage, boolean castToInt) { - String durationFormat = Translator.getTranslatedMessage(TranslatableTimeUnit.DURATION_FORMAT); + private static String formatDurationString(double duration, Translator translator, + TranslatableTimeUnit translatableMessage, boolean castToInt) { + String durationFormat = translator.getTranslatedMessage(TranslatableTimeUnit.DURATION_FORMAT); durationFormat = replacePlaceholder(durationFormat, "{unit}", - Translator.getTranslatedMessage(translatableMessage)); + translator.getTranslatedMessage(translatableMessage)); return replacePlaceholder(durationFormat, "{time}", castToInt ? String.valueOf((int) duration) : String.valueOf(duration)); } diff --git a/src/main/java/net/knarcraft/knarlib/formatting/Translator.java b/src/main/java/net/knarcraft/knarlib/formatting/Translator.java index 9015e91..28f1d6a 100644 --- a/src/main/java/net/knarcraft/knarlib/formatting/Translator.java +++ b/src/main/java/net/knarcraft/knarlib/formatting/Translator.java @@ -28,13 +28,9 @@ import java.util.logging.Level; */ public final class Translator { - private static final List messageCategories = new ArrayList<>(); - private static Map translatedMessages; - private static Map backupTranslatedMessages; - - private Translator() { - - } + private final List messageCategories = new ArrayList<>(); + private Map translatedMessages; + private Map backupTranslatedMessages; /** * Registers all translatable messages in the given message category @@ -44,14 +40,16 @@ public final class Translator { * * @param translatableMessage

A translatable message in the category to register

*/ - public static void registerMessageCategory(TranslatableMessage translatableMessage) { + public void registerMessageCategory(TranslatableMessage translatableMessage) { messageCategories.add(translatableMessage); } /** * Loads the languages used by this translator + * + * @param selectedLanguage

The currently selected language

*/ - public static void loadLanguages(String selectedLanguage) { + public void loadLanguages(String selectedLanguage) { backupTranslatedMessages = loadTranslatedMessages("en"); translatedMessages = loadCustomTranslatedMessages(selectedLanguage); if (translatedMessages == null) { @@ -65,7 +63,7 @@ public final class Translator { * @param translatableMessage

The message to translate

* @return

The translated message

*/ - public static String getTranslatedMessage(TranslatableMessage translatableMessage) { + public String getTranslatedMessage(TranslatableMessage translatableMessage) { if (translatedMessages == null) { return "Translated strings not loaded"; } @@ -86,7 +84,7 @@ public final class Translator { * @param language

The language chosen by the user

* @return

A mapping of all strings for the given language

*/ - public static Map loadTranslatedMessages(String language) { + public Map loadTranslatedMessages(String language) { try { BufferedReader reader = FileHelper.getBufferedReaderForInternalFile("/strings.yml"); return loadTranslatableMessages(language, reader); @@ -102,7 +100,7 @@ public final class Translator { * @param language

The selected language

* @return

The loaded translated strings, or null if no custom language file exists

*/ - public static Map loadCustomTranslatedMessages(String language) { + public Map loadCustomTranslatedMessages(String language) { JavaPlugin instance = KnarLib.getPlugin(); File strings = new File(instance.getDataFolder(), "strings.yml"); @@ -127,7 +125,7 @@ public final class Translator { * @param reader

The buffered reader to read from

* @return

The loaded translated strings

*/ - private static Map loadTranslatableMessages(String language, BufferedReader reader) { + private Map loadTranslatableMessages(String language, BufferedReader reader) { Map translatedMessages = new HashMap<>(); YamlConfiguration configuration = YamlConfiguration.loadConfiguration(reader); diff --git a/src/main/java/net/knarcraft/knarlib/property/ColorConversion.java b/src/main/java/net/knarcraft/knarlib/property/ColorConversion.java index 36b0a08..9dd0bbe 100644 --- a/src/main/java/net/knarcraft/knarlib/property/ColorConversion.java +++ b/src/main/java/net/knarcraft/knarlib/property/ColorConversion.java @@ -21,7 +21,7 @@ public enum ColorConversion { RGB, /** - * Only hexadecimal color codes are converted into colors, not &[a-f0-9] color codes. + * Only hexadecimal color codes are converted into colors, not &[a-f0-9] color codes. */ RGB_ONLY, diff --git a/src/main/java/net/knarcraft/knarlib/util/ColorHelper.java b/src/main/java/net/knarcraft/knarlib/util/ColorHelper.java index b1b747a..20f348d 100644 --- a/src/main/java/net/knarcraft/knarlib/util/ColorHelper.java +++ b/src/main/java/net/knarcraft/knarlib/util/ColorHelper.java @@ -41,7 +41,7 @@ public final class ColorHelper { /** * Sets whether to require ampersand in hex color * - *

If set to true, &#f35336 will be treated as a color code, but #f35336 won't. By default, this is set to false, + *

If set to true, &#f35336 will be treated as a color code, but #f35336 won't. By default, this is set to false, * meaning that both are treated as color codes.

* * @param requireAmpersandInHexColors

True if hex colors should require an ampersand

diff --git a/src/main/java/net/knarcraft/knarlib/util/FileHelper.java b/src/main/java/net/knarcraft/knarlib/util/FileHelper.java index aabf3c7..3b1c41f 100644 --- a/src/main/java/net/knarcraft/knarlib/util/FileHelper.java +++ b/src/main/java/net/knarcraft/knarlib/util/FileHelper.java @@ -25,8 +25,10 @@ public final class FileHelper { } /** - * Gets a buffered reader for + * Gets a buffered reader for an internal file * + * @param file

The name of the file to get a buffered reader for (start with a '/'). The file should reside in + * the resources directory.

* @return

A buffered read for reading the file

* @throws FileNotFoundException

If unable to get an input stream for the given file

*/