diff --git a/src/main/java/org/welcomemessage/PlayerListener.java b/src/main/java/org/welcomemessage/PlayerListener.java deleted file mode 100644 index f9aee11..0000000 --- a/src/main/java/org/welcomemessage/PlayerListener.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.welcomemessage; - -import org.bukkit.Bukkit; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -@Deprecated -public class PlayerListener implements Listener { - private final WelcomeMessage plugin; - - public PlayerListener(WelcomeMessage plugin) { - this.plugin = plugin; - } - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - event.setJoinMessage(null); - String joinmsg = plugin.getConfig().getString("join-message", "§a+ §6%player% §7joined the server"); - joinmsg = joinmsg.replace("%player%", event.getPlayer().getName()); - Bukkit.broadcastMessage(joinmsg); - if (plugin.getConfig().getBoolean("toggle-welcome-message", true)) { - if (!event.getPlayer().hasPlayedBefore()) { - if (plugin.getConfig().getBoolean("toggle-welcome-message", true)) { - String welcomemsg = plugin.getConfig().getString("welcome-message", "§eWelcome §6%player% §eto the server!"); - welcomemsg = welcomemsg.replace("%player%", event.getPlayer().getName()); - Bukkit.broadcastMessage(welcomemsg); - } - } - } - } - - @EventHandler - public void onPlayerQuit(PlayerQuitEvent event){ - event.setQuitMessage(null); - String quitmsg = plugin.getConfig().getString ("quit-message", "§c- §6%player% §7left the server"); - quitmsg = quitmsg.replace("%player%", event.getPlayer().getName()); - Bukkit.broadcastMessage(quitmsg); - } -} diff --git a/src/main/java/org/welcomemessage/WelcomeMessage.java b/src/main/java/org/welcomemessage/WelcomeMessage.java index 3f4fb5f..fc31792 100644 --- a/src/main/java/org/welcomemessage/WelcomeMessage.java +++ b/src/main/java/org/welcomemessage/WelcomeMessage.java @@ -3,44 +3,93 @@ import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; +import org.welcomemessage.listeners.PlayerListener; +import org.welcomemessage.manager.LangManager; public class WelcomeMessage extends JavaPlugin { private final String[] logo = { - " __ __ _ __ __ ", - " \\ \\ / / | | | \\/ | ", - " \\ \\ /\\ / /__| | ___ ___ _ __ ___ ___| \\ / |___ __ _ ", - " \\ \\/ \\/ / _ \\ |/ __/ _ \\| '_ ` _ \\ / _ \\ |\\/| / __|/ _` |", - " \\ /\\ / __/ | (_| (_) | | | | | | __/ | | \\__ \\ (_| |", - " \\/ \\/ \\___|_|\\___\\___/|_| |_| |_|\\___|_| |_|___/\\__, |", - " __/ |", - " |___/", - " Version 1.0.0 By Nenfal", - " https://github.com/MatthieuClaessens/WelcomeMessage" + " __ __ _ __ __ ", + " \\ \\ / / | | | \\/ | ", + " \\ \\ /\\ / /__| | ___ ___ _ __ ___ ___| \\ / |___ __ _ ", + " \\ \\/ \\/ / _ \\ |/ __/ _ \\| '_ ` _ \\ / _ \\ |\\/| / __|/ _` |", + " \\ /\\ / __/ | (_| (_) | | | | | | __/ | | \\__ \\ (_| |", + " \\/ \\/ \\___|_|\\___\\___/|_| |_| |_|\\___|_| |_|___/\\__, |", + " __/ |", + " |___/", + " Version 1.0.0 By Nenfal", + " https://github.com/MatthieuClaessens/WelcomeMessage" }; + private LangManager langManager; + @Override public void onEnable() { saveDefaultConfig(); + + this.langManager = new LangManager(this); + for (String line : logo) { getLogger().info(line); } - getLogger().info("WelcomeMessage plugin activated! Version 1.0"); + + getLogger().info(langManager.getMessage("plugin.enabled", "WelcomeMessage plugin activated! Version 1.0")); getServer().getPluginManager().registerEvents(new PlayerListener(this), this); - getConfig(); } public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (command.getName().equalsIgnoreCase("wmreload")) { if (!sender.hasPermission("welcomemessage.reload")) { - sender.sendMessage("§6§lᴡᴇʟᴄᴏᴍᴇᴍꜱɢ §8§l» §cYou don't have permission to use this command."); + sender.sendMessage(langManager.getMessage("commands.no-permission", + "§6§lWELCOMEMSG §8§l» §cYou don't have permission to use this command.")); return true; } + reloadConfig(); - sender.sendMessage("§6§lᴡᴇʟᴄᴏᴍᴇᴍꜱɢ §8§l» §aConfig reloaded!"); + langManager.reloadLanguages(); + sender.sendMessage(langManager.getMessage("commands.reload-success", + "§6§lWELCOMEMSG §8§l» §aConfig reloaded!")); getLogger().info("Config reloaded by " + sender.getName()); return true; } + + if (command.getName().equalsIgnoreCase("wmlang")) { + if (!sender.hasPermission("welcomemessage.lang")) { + sender.sendMessage(langManager.getMessage("commands.no-permission", + "§6§lWELCOMEMSG §8§l» §cYou don't have permission to use this command.")); + return true; + } + + if (args.length == 0) { + sender.sendMessage(langManager.getMessage("commands.usage-wmlang", + "§6§lWELCOMEMSG §8§l» §7Usage: §e/wmlang ")); + return true; + } + + if (args[0].equalsIgnoreCase("list")) { + String[] languages = langManager.getAvailableLanguages(); + String languageList = String.join(", ", languages); + String message = langManager.getMessage("commands.available-languages", + "§6§lWELCOMEMSG §8§l» §7Available languages: §e%languages%"); + sender.sendMessage(message.replace("%languages%", languageList)); + return true; + } + + String newLanguage = args[0]; + if (langManager.isLanguageAvailable(newLanguage)) { + langManager.setLanguage(newLanguage); + String message = langManager.getMessage("commands.language-changed", + "§6§lWELCOMEMSG §8§l» §aLanguage changed to §e%language%§a!"); + sender.sendMessage(message.replace("%language%", newLanguage)); + getLogger().info("Language changed to " + newLanguage + " by " + sender.getName()); + } else { + String message = langManager.getMessage("commands.language-not-found", + "§6§lWELCOMEMSG §8§l» §cLanguage §e%language% §cnot found!"); + sender.sendMessage(message.replace("%language%", newLanguage)); + } + return true; + } + return false; } @@ -49,6 +98,10 @@ public void onDisable() { for (String line : logo) { getLogger().info(line); } - getLogger().info("WelcomeMessage plugin disabled."); + getLogger().info(langManager.getMessage("plugin.disabled", "WelcomeMessage plugin disabled.")); + } + + public LangManager getLangManager() { + return langManager; } } \ No newline at end of file diff --git a/src/main/java/org/welcomemessage/listeners/PlayerListener.java b/src/main/java/org/welcomemessage/listeners/PlayerListener.java new file mode 100644 index 0000000..448e031 --- /dev/null +++ b/src/main/java/org/welcomemessage/listeners/PlayerListener.java @@ -0,0 +1,54 @@ +package org.welcomemessage.listeners; + +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.welcomemessage.WelcomeMessage; + +public class PlayerListener implements Listener { + private final WelcomeMessage plugin; + + public PlayerListener(WelcomeMessage plugin) { + this.plugin = plugin; + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + event.setJoinMessage(null); + + String playerName = event.getPlayer().getName(); + + String joinMessage = plugin.getLangManager().getMessage( + "messages.join", + playerName, + "§a+ §6%player% §7joined the server" + ); + Bukkit.broadcastMessage(joinMessage); + + if (plugin.getConfig().getBoolean("toggle-welcome-message", true)) { + if (!event.getPlayer().hasPlayedBefore()) { + String welcomeMessage = plugin.getLangManager().getMessage( + "messages.welcome", + playerName, + "§eWelcome §6%player% §eto the server!" + ); + Bukkit.broadcastMessage(welcomeMessage); + } + } + } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) { + event.setQuitMessage(null); + + String playerName = event.getPlayer().getName(); + String quitMessage = plugin.getLangManager().getMessage( + "messages.quit", + playerName, + "§c- §6%player% §7left the server" + ); + Bukkit.broadcastMessage(quitMessage); + } +} \ No newline at end of file diff --git a/src/main/java/org/welcomemessage/manager/LangManager.java b/src/main/java/org/welcomemessage/manager/LangManager.java new file mode 100644 index 0000000..bfd3552 --- /dev/null +++ b/src/main/java/org/welcomemessage/manager/LangManager.java @@ -0,0 +1,113 @@ +package org.welcomemessage.manager; + +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.welcomemessage.WelcomeMessage; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; + +public class LangManager { + private final WelcomeMessage plugin; + private final Map languages; + private String currentLanguage; + + public LangManager(WelcomeMessage plugin) { + this.plugin = plugin; + this.languages = new HashMap<>(); + this.currentLanguage = plugin.getConfig().getString("language", "en-US"); + + loadLanguages(); + } + + private void loadLanguages() { + String[] availableLanguages = {"en-US", "es-ES"}; + + for (String lang : availableLanguages) { + loadLanguage(lang); + } + } + + private void loadLanguage(String language) { + File langFolder = new File(plugin.getDataFolder(), "lang"); + if (!langFolder.exists()) { + langFolder.mkdirs(); + } + + File langFile = new File(langFolder, language + ".yml"); + + if (!langFile.exists()) { + plugin.saveResource("lang/" + language + ".yml", false); + } + + FileConfiguration langConfig = YamlConfiguration.loadConfiguration(langFile); + + InputStream defConfigStream = plugin.getResource("lang/" + language + ".yml"); + if (defConfigStream != null) { + YamlConfiguration defConfig = YamlConfiguration.loadConfiguration( + new InputStreamReader(defConfigStream, StandardCharsets.UTF_8) + ); + langConfig.setDefaults(defConfig); + } + + languages.put(language, langConfig); + } + + public String getMessage(String key) { + return getMessage(key, null); + } + + public String getMessage(String key, String defaultValue) { + FileConfiguration langConfig = languages.get(currentLanguage); + + if (langConfig == null) { + langConfig = languages.get("en-US"); + } + + if (langConfig == null) { + return defaultValue != null ? defaultValue : key; + } + + String message = langConfig.getString(key, defaultValue); + return message != null ? colorize(message) : (defaultValue != null ? defaultValue : key); + } + + public String getMessage(String key, String playerName, String defaultValue) { + String message = getMessage(key, defaultValue); + return message.replace("%player%", playerName); + } + + private String colorize(String message) { + return message.replace("&", "§"); + } + + public void setLanguage(String language) { + if (languages.containsKey(language)) { + this.currentLanguage = language; + plugin.getConfig().set("language", language); + plugin.saveConfig(); + } + } + + public String getCurrentLanguage() { + return currentLanguage; + } + + public boolean isLanguageAvailable(String language) { + return languages.containsKey(language); + } + + public String[] getAvailableLanguages() { + return languages.keySet().toArray(new String[0]); + } + + public void reloadLanguages() { + languages.clear(); + loadLanguages(); + } +} \ No newline at end of file diff --git a/src/main/resources/lang/en-US.yml b/src/main/resources/lang/en-US.yml new file mode 100644 index 0000000..6913b4f --- /dev/null +++ b/src/main/resources/lang/en-US.yml @@ -0,0 +1,40 @@ +# +# __ __ _ __ __ +# \ \ / / | | | \/ | +# \ \ /\ / /__| | ___ ___ _ __ ___ ___| \ / |___ __ _ +# \ \/ \/ / _ \ |/ __/ _ \| '_ ` _ \ / _ \ |\/| / __|/ _` | +# \ /\ / __/ | (_| (_) | | | | | | __/ | | \__ \ (_| | +# \/ \/ \___|_|\___\___/|_| |_| |_|\___|_| |_|___/\__, | +# 1.0.0 __/ | +# By Nenfal |___/ +# https://github.com/MatthieuClaessens/WelcomeMessage +# +# English (United States) Language File + +# Plugin Messages +plugin: + enabled: "&aWelcomeMessage plugin activated! Version 1.0" + disabled: "&cWelcomeMessage plugin disabled." + config-reloaded: "&6&lWELCOMEMSG &8&l» &aConfig reloaded!" + languages-reloaded: "&6&lWELCOMEMSG &8&l» &aLanguages reloaded!" + +# Player Messages +messages: + welcome: "&eWelcome &6%player% &eto the server!" + join: "&a+ &6%player% &7joined the server" + quit: "&c- &6%player% &7left the server" + +# Command Messages +commands: + no-permission: "&6&lWELCOMEMSG &8&l» &cYou don't have permission to use this command." + reload-success: "&6&lWELCOMEMSG &8&l» &aConfiguration reloaded successfully!" + language-changed: "&6&lWELCOMEMSG &8&l» &aLanguage changed to &e%language%&a!" + language-not-found: "&6&lWELCOMEMSG &8&l» &cLanguage &e%language% &cnot found!" + available-languages: "&6&lWELCOMEMSG &8&l» &7Available languages: &e%languages%" + usage-wmreload: "&6&lWELCOMEMSG &8&l» &7Usage: &e/wmreload" + usage-wmlang: "&6&lWELCOMEMSG &8&l» &7Usage: &e/wmlang " + +# Help Messages +help: + wmreload: "Reload the plugin configuration" + wmlang: "Change or list available languages" \ No newline at end of file diff --git a/src/main/resources/lang/es-ES.yml b/src/main/resources/lang/es-ES.yml new file mode 100644 index 0000000..ff05215 --- /dev/null +++ b/src/main/resources/lang/es-ES.yml @@ -0,0 +1,40 @@ +# +# __ __ _ __ __ +# \ \ / / | | | \/ | +# \ \ /\ / /__| | ___ ___ _ __ ___ ___| \ / |___ __ _ +# \ \/ \/ / _ \ |/ __/ _ \| '_ ` _ \ / _ \ |\/| / __|/ _` | +# \ /\ / __/ | (_| (_) | | | | | | __/ | | \__ \ (_| | +# \/ \/ \___|_|\___\___/|_| |_| |_|\___|_| |_|___/\__, | +# 1.0.0 __/ | +# By Nenfal |___/ +# https://github.com/MatthieuClaessens/WelcomeMessage +# +# Archivo de idioma Español (España) + +# Mensajes del Plugin +plugin: + enabled: "&a¡Plugin WelcomeMessage activado! Versión 1.0" + disabled: "&cPlugin WelcomeMessage desactivado." + config-reloaded: "&6&lWELCOMEMSG &8&l» &a¡Configuración recargada!" + languages-reloaded: "&6&lWELCOMEMSG &8&l» &a¡Idiomas recargados!" + +# Mensajes de Jugadores +messages: + welcome: "&e¡Bienvenido &6%player% &eal servidor!" + join: "&a+ &6%player% &7se unió al servidor" + quit: "&c- &6%player% &7salió del servidor" + +# Mensajes de Comandos +commands: + no-permission: "&6&lWELCOMEMSG &8&l» &cNo tienes permisos para usar este comando." + reload-success: "&6&lWELCOMEMSG &8&l» &a¡Configuración recargada exitosamente!" + language-changed: "&6&lWELCOMEMSG &8&l» &a¡Idioma cambiado a &e%language%&a!" + language-not-found: "&6&lWELCOMEMSG &8&l» &c¡Idioma &e%language% &cno encontrado!" + available-languages: "&6&lWELCOMEMSG &8&l» &7Idiomas disponibles: &e%languages%" + usage-wmreload: "&6&lWELCOMEMSG &8&l» &7Uso: &e/wmreload" + usage-wmlang: "&6&lWELCOMEMSG &8&l» &7Uso: &e/wmlang " + +# Mensajes de Ayuda +help: + wmreload: "Recarga la configuración del plugin" + wmlang: "Cambia o lista los idiomas disponibles" \ No newline at end of file