Removes possibility of plugin collision

Allows the string formatter to be instantiated, and makes most methods non-static.
Makes the translator plugin-independent.
This commit is contained in:
Kristian Knarvik 2022-11-07 21:31:43 +01:00
parent 7299e86afc
commit 7cd9ae087a
3 changed files with 52 additions and 62 deletions

View File

@ -1,33 +1,12 @@
package net.knarcraft.knarlib; package net.knarcraft.knarlib;
import org.bukkit.plugin.java.JavaPlugin;
/** /**
* KnarLib's main class * 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 { public final class KnarLib {
private static JavaPlugin plugin; private KnarLib() {
/**
* Gets a plugin instance for use with the bukkit scheduler or similar
*
* @return <p>A plugin instance</p>
*/
public static JavaPlugin getPlugin() {
return plugin;
} }
/**
* Sets an instance of the plugin used with KnarLib
*
* @param plugin <p>The plugin instance to use</p>
*/
public static void setPlugin(JavaPlugin plugin) {
KnarLib.plugin = plugin;
}
} }

View File

@ -1,6 +1,5 @@
package net.knarcraft.knarlib.formatting; package net.knarcraft.knarlib.formatting;
import net.knarcraft.knarlib.KnarLib;
import net.knarcraft.knarlib.property.ColorConversion; import net.knarcraft.knarlib.property.ColorConversion;
import net.knarcraft.knarlib.util.ColorHelper; import net.knarcraft.knarlib.util.ColorHelper;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
@ -11,21 +10,30 @@ import org.bukkit.command.CommandSender;
*/ */
public final class StringFormatter { public final class StringFormatter {
private final static String pluginName = KnarLib.getPlugin().getDescription().getName(); private final String pluginName;
private final Translator translator;
private StringFormatter() {
/**
* Instantiates a new string formatter
*
* <p>You may leave one of these as null if not in use, for example if you don't use translatable strings.</p>
*
* @param pluginName <p>The name of the using plugin (used for the message prefix)</p>
* @param translator <p>The translator to use for translating messages</p>
*/
public StringFormatter(String pluginName, Translator translator) {
this.pluginName = pluginName;
this.translator = translator;
} }
/** /**
* Displays a message signifying a successful action * Displays a message signifying a successful action
* *
* @param sender <p>The command sender to display the message to</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> * @param message <p>The translatable message to display</p>
*/ */
public static void displaySuccessMessage(CommandSender sender, Translator translator, TranslatableMessage message) { public void displaySuccessMessage(CommandSender sender, TranslatableMessage message) {
sender.sendMessage(ChatColor.GREEN + getFormattedMessage(translator.getTranslatedMessage(message))); sender.sendMessage(ChatColor.GREEN + getFormattedMessage(this.translator.getTranslatedMessage(message)));
} }
/** /**
@ -34,7 +42,7 @@ public final class StringFormatter {
* @param sender <p>The command sender to display the message to</p> * @param sender <p>The command sender to display the message to</p>
* @param message <p>The raw message to display</p> * @param message <p>The raw message to display</p>
*/ */
public static void displaySuccessMessage(CommandSender sender, String message) { public void displaySuccessMessage(CommandSender sender, String message) {
sender.sendMessage(ChatColor.GREEN + getFormattedMessage(message)); sender.sendMessage(ChatColor.GREEN + getFormattedMessage(message));
} }
@ -42,11 +50,10 @@ public final class StringFormatter {
* Displays a message signifying an unsuccessful action * Displays a message signifying an unsuccessful action
* *
* @param sender <p>The command sender to display the message to</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> * @param message <p>The translatable message to display</p>
*/ */
public static void displayErrorMessage(CommandSender sender, Translator translator, TranslatableMessage message) { public void displayErrorMessage(CommandSender sender, TranslatableMessage message) {
sender.sendMessage(ChatColor.DARK_RED + getFormattedMessage(translator.getTranslatedMessage(message))); sender.sendMessage(ChatColor.DARK_RED + getFormattedMessage(this.translator.getTranslatedMessage(message)));
} }
/** /**
@ -55,7 +62,7 @@ public final class StringFormatter {
* @param sender <p>The command sender to display the message to</p> * @param sender <p>The command sender to display the message to</p>
* @param message <p>The raw message to display</p> * @param message <p>The raw message to display</p>
*/ */
public static void displayErrorMessage(CommandSender sender, String message) { public void displayErrorMessage(CommandSender sender, String message) {
sender.sendMessage(ChatColor.DARK_RED + getFormattedMessage(message)); sender.sendMessage(ChatColor.DARK_RED + getFormattedMessage(message));
} }
@ -65,36 +72,38 @@ public final class StringFormatter {
* @param message <p>The message to format</p> * @param message <p>The message to format</p>
* @return <p>The formatted message</p> * @return <p>The formatted message</p>
*/ */
private static String getFormattedMessage(String message) { private String getFormattedMessage(String message) {
return "[" + pluginName + "] " + ChatColor.RESET + ColorHelper.translateColorCodes(message, ColorConversion.NORMAL); message = ColorHelper.translateColorCodes(message, ColorConversion.NORMAL);
if (this.pluginName == null) {
return message;
} else {
return "[" + this.pluginName + "] " + ChatColor.RESET + message;
}
} }
/** /**
* Replaces a placeholder in a string * 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 translatableMessage <p>The translatable message to replace in</p>
* @param placeholder <p>The placeholder to replace</p> * @param placeholder <p>The placeholder to replace</p>
* @param replacement <p>The replacement value</p> * @param replacement <p>The replacement value</p>
* @return <p>The input string with the placeholder replaced</p> * @return <p>The input string with the placeholder replaced</p>
*/ */
public static String replacePlaceholder(Translator translator, TranslatableMessage translatableMessage, String placeholder, public String replacePlaceholder(TranslatableMessage translatableMessage, String placeholder, String replacement) {
String replacement) { return replacePlaceholder(this.translator.getTranslatedMessage(translatableMessage), placeholder, replacement);
return replacePlaceholder(translator.getTranslatedMessage(translatableMessage), placeholder, replacement);
} }
/** /**
* Replaces placeholders in a string * 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 translatableMessage <p>The translatable message to replace in</p>
* @param placeholders <p>The placeholders to replace</p> * @param placeholders <p>The placeholders to replace</p>
* @param replacements <p>The replacement values</p> * @param replacements <p>The replacement values</p>
* @return <p>The input string with placeholders replaced</p> * @return <p>The input string with placeholders replaced</p>
*/ */
public static String replacePlaceholders(Translator translator, TranslatableMessage translatableMessage, String[] placeholders, public String replacePlaceholders(TranslatableMessage translatableMessage, String[] placeholders,
String[] replacements) { String[] replacements) {
return replacePlaceholders(translator.getTranslatedMessage(translatableMessage), placeholders, replacements); return replacePlaceholders(this.translator.getTranslatedMessage(translatableMessage), placeholders, replacements);
} }
/** /**

View File

@ -1,11 +1,10 @@
package net.knarcraft.knarlib.formatting; package net.knarcraft.knarlib.formatting;
import net.knarcraft.knarlib.KnarLib;
import net.knarcraft.knarlib.property.ColorConversion; import net.knarcraft.knarlib.property.ColorConversion;
import net.knarcraft.knarlib.util.ColorHelper; import net.knarcraft.knarlib.util.ColorHelper;
import net.knarcraft.knarlib.util.FileHelper; import net.knarcraft.knarlib.util.FileHelper;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.File; import java.io.File;
@ -47,11 +46,12 @@ public final class Translator {
/** /**
* Loads the languages used by this translator * Loads the languages used by this translator
* *
* @param dataFolder <p>The data folder to load custom strings from</p>
* @param selectedLanguage <p>The currently selected language</p> * @param selectedLanguage <p>The currently selected language</p>
*/ */
public void loadLanguages(String selectedLanguage) { public void loadLanguages(String dataFolder, String selectedLanguage) {
backupTranslatedMessages = loadTranslatedMessages("en"); backupTranslatedMessages = loadTranslatedMessages("en");
translatedMessages = loadCustomTranslatedMessages(selectedLanguage); translatedMessages = loadCustomTranslatedMessages(dataFolder, selectedLanguage);
if (translatedMessages == null) { if (translatedMessages == null) {
translatedMessages = loadTranslatedMessages(selectedLanguage); translatedMessages = loadTranslatedMessages(selectedLanguage);
} }
@ -89,7 +89,7 @@ public final class Translator {
BufferedReader reader = FileHelper.getBufferedReaderForInternalFile("/strings.yml"); BufferedReader reader = FileHelper.getBufferedReaderForInternalFile("/strings.yml");
return loadTranslatableMessages(language, reader); return loadTranslatableMessages(language, reader);
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
KnarLib.getPlugin().getLogger().log(Level.SEVERE, "Unable to load translated messages"); Bukkit.getLogger().log(Level.SEVERE, "Unable to load translated messages");
return null; return null;
} }
} }
@ -97,23 +97,25 @@ public final class Translator {
/** /**
* Tries to load translated messages from a custom strings.yml file * Tries to load translated messages from a custom strings.yml file
* *
* @param dataFolder <p>The data folder to load custom strings from</p>
* @param language <p>The selected language</p> * @param language <p>The selected language</p>
* @return <p>The loaded translated strings, or null if no custom language file exists</p> * @return <p>The loaded translated strings, or null if no custom language file exists</p>
*/ */
public Map<TranslatableMessage, String> loadCustomTranslatedMessages(String language) { public Map<TranslatableMessage, String> loadCustomTranslatedMessages(String dataFolder, String language) {
JavaPlugin instance = KnarLib.getPlugin(); if (dataFolder == null) {
return null;
File strings = new File(instance.getDataFolder(), "strings.yml"); }
File strings = new File(dataFolder, "strings.yml");
if (!strings.exists()) { if (!strings.exists()) {
instance.getLogger().log(Level.FINEST, "Strings file not found"); Bukkit.getLogger().log(Level.FINEST, "Strings file not found");
return null; return null;
} }
try { try {
instance.getLogger().log(Level.INFO, "Loading custom strings..."); Bukkit.getLogger().log(Level.INFO, "Loading custom strings...");
return loadTranslatableMessages(language, new BufferedReader(new InputStreamReader(new FileInputStream(strings)))); return loadTranslatableMessages(language, new BufferedReader(new InputStreamReader(new FileInputStream(strings))));
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
instance.getLogger().log(Level.WARNING, "Unable to load custom messages"); Bukkit.getLogger().log(Level.WARNING, "Unable to load custom messages");
return null; return null;
} }
} }