Makes the translator non-static to fix #1
This commit is contained in:
parent
f10e2caed2
commit
7299e86afc
@ -4,6 +4,8 @@ import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
/**
|
||||
* KnarLib's main class
|
||||
*
|
||||
* <p>Make sure you initialize KnarLib by running setPlugin() during onEnable! Some methods will not work without it.</p>
|
||||
*/
|
||||
public final class KnarLib {
|
||||
|
||||
|
@ -20,11 +20,12 @@ public final class StringFormatter {
|
||||
/**
|
||||
* Displays a message signifying a successful action
|
||||
*
|
||||
* @param sender <p>The command sender to display the message to</p>
|
||||
* @param message <p>The translatable message to display</p>
|
||||
* @param sender <p>The command sender to display the message to</p>
|
||||
* @param translator <p>The translator to use for the translation</p>
|
||||
* @param message <p>The translatable message to display</p>
|
||||
*/
|
||||
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 <p>The command sender to display the message to</p>
|
||||
* @param message <p>The translatable message to display</p>
|
||||
* @param sender <p>The command sender to display the message to</p>
|
||||
* @param translator <p>The translator to use for the translation</p>
|
||||
* @param message <p>The translatable message to display</p>
|
||||
*/
|
||||
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 <p>The command sender to display the message to</p>
|
||||
* @param message <p>The translatable message to display</p>
|
||||
* @param message <p>The raw message to display</p>
|
||||
*/
|
||||
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 <p>The translator to use for the translation</p>
|
||||
* @param translatableMessage <p>The translatable message to replace in</p>
|
||||
* @param placeholder <p>The placeholder to replace</p>
|
||||
* @param replacement <p>The replacement value</p>
|
||||
* @return <p>The input string with the placeholder replaced</p>
|
||||
*/
|
||||
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 <p>The translator to use for the translation</p>
|
||||
* @param translatableMessage <p>The translatable message to replace in</p>
|
||||
* @param placeholders <p>The placeholders to replace</p>
|
||||
* @param replacements <p>The replacement values</p>
|
||||
* @return <p>The input string with placeholders replaced</p>
|
||||
*/
|
||||
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
|
||||
*
|
||||
|
@ -23,11 +23,13 @@ public final class TimeFormatter {
|
||||
/**
|
||||
* Gets the string used for displaying this sign's duration
|
||||
*
|
||||
* @param translator <p>The translator to use for translation</p>
|
||||
* @param duration <p>The duration, in seconds, to display</p>
|
||||
* @return <p>The string used for displaying this sign's duration</p>
|
||||
*/
|
||||
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 <p>The duration to display</p>
|
||||
* @param translator <p>The translator to use for translation</p>
|
||||
* @param translatableMessage <p>The time unit to display</p>
|
||||
* @param castToInt <p>Whether to cast the duration to an int</p>
|
||||
* @return <p>The formatted duration string</p>
|
||||
*/
|
||||
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));
|
||||
}
|
||||
|
@ -28,13 +28,9 @@ import java.util.logging.Level;
|
||||
*/
|
||||
public final class Translator {
|
||||
|
||||
private static final List<TranslatableMessage> messageCategories = new ArrayList<>();
|
||||
private static Map<TranslatableMessage, String> translatedMessages;
|
||||
private static Map<TranslatableMessage, String> backupTranslatedMessages;
|
||||
|
||||
private Translator() {
|
||||
|
||||
}
|
||||
private final List<TranslatableMessage> messageCategories = new ArrayList<>();
|
||||
private Map<TranslatableMessage, String> translatedMessages;
|
||||
private Map<TranslatableMessage, String> backupTranslatedMessages;
|
||||
|
||||
/**
|
||||
* Registers all translatable messages in the given message category
|
||||
@ -44,14 +40,16 @@ public final class Translator {
|
||||
*
|
||||
* @param translatableMessage <p>A translatable message in the category to register</p>
|
||||
*/
|
||||
public static void registerMessageCategory(TranslatableMessage translatableMessage) {
|
||||
public void registerMessageCategory(TranslatableMessage translatableMessage) {
|
||||
messageCategories.add(translatableMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the languages used by this translator
|
||||
*
|
||||
* @param selectedLanguage <p>The currently selected language</p>
|
||||
*/
|
||||
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 <p>The message to translate</p>
|
||||
* @return <p>The translated message</p>
|
||||
*/
|
||||
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 <p>The language chosen by the user</p>
|
||||
* @return <p>A mapping of all strings for the given language</p>
|
||||
*/
|
||||
public static Map<TranslatableMessage, String> loadTranslatedMessages(String language) {
|
||||
public Map<TranslatableMessage, String> loadTranslatedMessages(String language) {
|
||||
try {
|
||||
BufferedReader reader = FileHelper.getBufferedReaderForInternalFile("/strings.yml");
|
||||
return loadTranslatableMessages(language, reader);
|
||||
@ -102,7 +100,7 @@ public final class Translator {
|
||||
* @param language <p>The selected language</p>
|
||||
* @return <p>The loaded translated strings, or null if no custom language file exists</p>
|
||||
*/
|
||||
public static Map<TranslatableMessage, String> loadCustomTranslatedMessages(String language) {
|
||||
public Map<TranslatableMessage, String> 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 <p>The buffered reader to read from</p>
|
||||
* @return <p>The loaded translated strings</p>
|
||||
*/
|
||||
private static Map<TranslatableMessage, String> loadTranslatableMessages(String language, BufferedReader reader) {
|
||||
private Map<TranslatableMessage, String> loadTranslatableMessages(String language, BufferedReader reader) {
|
||||
Map<TranslatableMessage, String> translatedMessages = new HashMap<>();
|
||||
YamlConfiguration configuration = YamlConfiguration.loadConfiguration(reader);
|
||||
|
||||
|
@ -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,
|
||||
|
||||
|
@ -41,7 +41,7 @@ public final class ColorHelper {
|
||||
/**
|
||||
* Sets whether to require ampersand in hex color
|
||||
*
|
||||
* <p>If set to true, &#f35336 will be treated as a color code, but #f35336 won't. By default, this is set to false,
|
||||
* <p>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.</p>
|
||||
*
|
||||
* @param requireAmpersandInHexColors <p>True if hex colors should require an ampersand</p>
|
||||
|
@ -25,8 +25,10 @@ public final class FileHelper {
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a buffered reader for
|
||||
* Gets a buffered reader for an internal file
|
||||
*
|
||||
* @param file <p>The name of the file to get a buffered reader for (start with a '/'). The file should reside in
|
||||
* the resources directory.</p>
|
||||
* @return <p>A buffered read for reading the file</p>
|
||||
* @throws FileNotFoundException <p>If unable to get an input stream for the given file</p>
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user