From 61e8e2de0500a304df31ccaa8b43fccec85a8151 Mon Sep 17 00:00:00 2001 From: Molzonas Date: Thu, 21 Aug 2025 07:21:00 +0200 Subject: [PATCH] Cleanup + put commands in class --- .../fr/molzonas/painfulloss/PainfulLoss.java | 62 +++---------- .../commands/PainfulLossCommand.java | 86 +++++++++++++++++++ .../molzonas/painfulloss/utils/Message.java | 31 ------- src/main/resources/plugin.yml | 12 ++- 4 files changed, 104 insertions(+), 87 deletions(-) create mode 100644 src/main/java/fr/molzonas/painfulloss/commands/PainfulLossCommand.java diff --git a/src/main/java/fr/molzonas/painfulloss/PainfulLoss.java b/src/main/java/fr/molzonas/painfulloss/PainfulLoss.java index 63d4d0c..f609eee 100644 --- a/src/main/java/fr/molzonas/painfulloss/PainfulLoss.java +++ b/src/main/java/fr/molzonas/painfulloss/PainfulLoss.java @@ -1,15 +1,13 @@ package fr.molzonas.painfulloss; +import fr.molzonas.painfulloss.commands.PainfulLossCommand; import fr.molzonas.painfulloss.enums.PropertiesEnum; import fr.molzonas.painfulloss.listeners.DeathListener; import fr.molzonas.painfulloss.utils.Message; import lombok.Getter; import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; +import org.bukkit.command.PluginCommand; import org.bukkit.plugin.java.JavaPlugin; -import org.jetbrains.annotations.NotNull; import java.util.Locale; @@ -24,6 +22,7 @@ public final class PainfulLoss extends JavaPlugin { Message.init(DEFAULT_LOCALE); configurationInit(); langInit(); + registerCommands(); registerListeners(); Bukkit.getLogger().info("[PainfulLoss] Plugin has been enabled!"); } @@ -44,57 +43,22 @@ public final class PainfulLoss extends JavaPlugin { Message.init(locale); } + private void registerCommands() { + PluginCommand command = getCommand("painfulloss"); + if (command != null) { + PainfulLossCommand exec = new PainfulLossCommand(); + command.setExecutor(exec); + command.setTabCompleter(exec); + } + } + private void registerListeners() { Bukkit.getPluginManager().registerEvents(new DeathListener(), this); } - @Override - public boolean onCommand(@NotNull CommandSender sender, Command command, @NotNull String label, String[] args) { - return switch (command.getName()) { - case "painfulloss" -> defaultCommand(sender, args); - case "itesten" -> commandLang(sender, Locale.ENGLISH); - case "itestfr" -> commandLang(sender, Locale.FRENCH); - default -> false; - }; - } - - private boolean commandLang(CommandSender sender, Locale locale) { - if (sender instanceof Player p) { - p.sendMessage(Message.of("death.summary", locale, p.getName(), 12345)); - p.sendMessage(Message.of("death.topitem", locale, "Netherite Chestplate", 7890)); - } else { - var text = Message.of("death.summary.first", locale, "Console", 42); - sender.sendMessage(text); - } - return true; - } - - private boolean defaultCommand(@NotNull CommandSender sender, String[] args) { - if (args.length > 0) { - return switch (args[0]) { - case "help" -> commandHelp(sender); - case "reload" -> commandReload(sender); - default -> commandUnknown(sender); - }; - } - return true; - } - - private boolean commandHelp(CommandSender sender) { - sender.sendMessage("&f&lGit gud"); - return true; - } - - private boolean commandReload(CommandSender sender) { + public void reload() { reloadConfig(); Message.clearCache(); langInit(); - sender.sendMessage(Message.of("plugin.reload")); - return true; - } - - private boolean commandUnknown(CommandSender sender) { - sender.sendMessage(Message.of("plugin.unknown")); - return true; } } diff --git a/src/main/java/fr/molzonas/painfulloss/commands/PainfulLossCommand.java b/src/main/java/fr/molzonas/painfulloss/commands/PainfulLossCommand.java new file mode 100644 index 0000000..5f679d9 --- /dev/null +++ b/src/main/java/fr/molzonas/painfulloss/commands/PainfulLossCommand.java @@ -0,0 +1,86 @@ +package fr.molzonas.painfulloss.commands; + +import fr.molzonas.painfulloss.PainfulLoss; +import fr.molzonas.painfulloss.utils.Message; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +public class PainfulLossCommand implements CommandExecutor, TabCompleter { + @Override + public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { + if (args.length == 0) { + commandSender.sendMessage(Message.of("plugin.help")); + return true; + } + String subcommand = args[0]; + return switch (subcommand) { + case "reload" -> commandReload(commandSender); + case "help" -> commandHelp(commandSender); + case "test" -> commandTest(commandSender, args); + default -> commandUnknown(commandSender); + }; + } + + private boolean commandReload(CommandSender commandSender) { + if (!commandSender.hasPermission("painfulloss.admin")) return commandNotAutorised(commandSender); + PainfulLoss.getInstance().reload(); + commandSender.sendMessage(Message.of("plugin.reload")); + return true; + } + + private boolean commandNotAutorised(CommandSender commandSender) { + commandSender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4You don't have the permission to execute this command !")); + return true; + } + + private boolean commandHelp(CommandSender commandSender) { + commandSender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4G&3i&et &ag&co&9o&dd")); + return true; + } + + private boolean commandTest(CommandSender commandSender, String[] args) { + Locale locale = PainfulLoss.DEFAULT_LOCALE; + if (args.length >= 2) { + locale = Locale.forLanguageTag(args[1].trim()); + } + if (commandSender instanceof Player p) { + p.sendMessage(Message.of("death.summary", locale, p.getName(), 12345)); + p.sendMessage(Message.of("death.topitem", locale, "Netherite Chestplate", 7890)); + } else { + var text = Message.of("death.summary.first", locale, "Console", 42); + commandSender.sendMessage(text); + } + return true; + } + + private boolean commandUnknown(CommandSender commandSender) { + commandSender.sendMessage(Message.of("plugin.unknown")); + return false; + } + + + @Override + public @Nullable List onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { + List completions = new ArrayList<>(); + if (args.length == 1) { + completions.add("test"); + completions.add("help"); + if (commandSender.hasPermission("painfulloss.admin")) completions.add("reload"); + } + if (args.length == 2 && "test".equalsIgnoreCase(args[0])) { + completions.add("fr-FR"); + completions.add("en-US"); + } + return completions; + } +} diff --git a/src/main/java/fr/molzonas/painfulloss/utils/Message.java b/src/main/java/fr/molzonas/painfulloss/utils/Message.java index 708858d..48d5632 100644 --- a/src/main/java/fr/molzonas/painfulloss/utils/Message.java +++ b/src/main/java/fr/molzonas/painfulloss/utils/Message.java @@ -1,10 +1,7 @@ package fr.molzonas.painfulloss.utils; import fr.molzonas.painfulloss.PainfulLoss; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import java.io.*; @@ -24,7 +21,6 @@ public class Message { public static void init(Locale locale) { if (locale == null) locale = PainfulLoss.DEFAULT_LOCALE; - Bukkit.getLogger().info("[Painfullost] Locale used : " + locale.getDisplayName()); Message.currentLocale = locale; clearCache(); } @@ -33,14 +29,6 @@ public class Message { return of(key, currentLocale, args); } - public static String of(CommandSender sender, String key, Object... args) { - return of(key, senderLocale(sender), args); - } - - public static void send(CommandSender sender, String key, Object... args) { - sender.sendMessage(of(sender, key, args)); - } - public static String of(String key, Locale locale, Object... args) { Locale loc = (locale != null) ? locale : currentLocale; ResourceBundle bundle = getBundle(loc); @@ -50,30 +38,11 @@ public class Message { return ChatColor.translateAlternateColorCodes('&', formatted); } - public static Locale senderLocale(CommandSender sender) { - if (sender instanceof Player p) { - String r = p.getLocale(); - if (!r.isEmpty()) { - return fromMinecraftLocale(r); - } - } - return PainfulLoss.DEFAULT_LOCALE; - } - public static void clearCache() { CACHE.clear(); ResourceBundle.clearCache(Message.class.getClassLoader()); } - private static Locale fromMinecraftLocale(String mc) { - String tag = mc.replace('_', '-'); - try { - return Locale.forLanguageTag(tag); - } catch (Exception ignored) { - return PainfulLoss.DEFAULT_LOCALE; - } - } - private static ResourceBundle getBundle(Locale loc) { return CACHE.computeIfAbsent(loc, l -> ResourceBundle.getBundle(BUNDLE_NAME, l, new Utf8Control())); diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 36eebd8..fe68653 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,12 +4,10 @@ main: fr.molzonas.painfulloss.PainfulLoss api-version: '1.20' author: Molzonas commands: - itestfr: - description: Test i18n - usage: /itestfr - itesten: - description: Test i18n - usage: /itesten painfulloss: description: Base command for Painfulloss - usage: /painfulloss \ No newline at end of file + usage: /painfulloss +permissions: + painfulloss.admin: + description: Access to PainfulLoss admin commands + default: op \ No newline at end of file