Cleanup + put commands in class

This commit is contained in:
Molzonas 2025-08-21 07:21:00 +02:00
parent 66e8fb46cb
commit 61e8e2de05
4 changed files with 104 additions and 87 deletions

View File

@ -1,15 +1,13 @@
package fr.molzonas.painfulloss; package fr.molzonas.painfulloss;
import fr.molzonas.painfulloss.commands.PainfulLossCommand;
import fr.molzonas.painfulloss.enums.PropertiesEnum; import fr.molzonas.painfulloss.enums.PropertiesEnum;
import fr.molzonas.painfulloss.listeners.DeathListener; import fr.molzonas.painfulloss.listeners.DeathListener;
import fr.molzonas.painfulloss.utils.Message; import fr.molzonas.painfulloss.utils.Message;
import lombok.Getter; import lombok.Getter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.command.Command; import org.bukkit.command.PluginCommand;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import java.util.Locale; import java.util.Locale;
@ -24,6 +22,7 @@ public final class PainfulLoss extends JavaPlugin {
Message.init(DEFAULT_LOCALE); Message.init(DEFAULT_LOCALE);
configurationInit(); configurationInit();
langInit(); langInit();
registerCommands();
registerListeners(); registerListeners();
Bukkit.getLogger().info("[PainfulLoss] Plugin has been enabled!"); Bukkit.getLogger().info("[PainfulLoss] Plugin has been enabled!");
} }
@ -44,57 +43,22 @@ public final class PainfulLoss extends JavaPlugin {
Message.init(locale); 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() { private void registerListeners() {
Bukkit.getPluginManager().registerEvents(new DeathListener(), this); Bukkit.getPluginManager().registerEvents(new DeathListener(), this);
} }
@Override public void reload() {
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) {
reloadConfig(); reloadConfig();
Message.clearCache(); Message.clearCache();
langInit(); langInit();
sender.sendMessage(Message.of("plugin.reload"));
return true;
}
private boolean commandUnknown(CommandSender sender) {
sender.sendMessage(Message.of("plugin.unknown"));
return true;
} }
} }

View File

@ -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<String> onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] args) {
List<String> 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;
}
}

View File

@ -1,10 +1,7 @@
package fr.molzonas.painfulloss.utils; package fr.molzonas.painfulloss.utils;
import fr.molzonas.painfulloss.PainfulLoss; import fr.molzonas.painfulloss.PainfulLoss;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.io.*; import java.io.*;
@ -24,7 +21,6 @@ public class Message {
public static void init(Locale locale) { public static void init(Locale locale) {
if (locale == null) locale = PainfulLoss.DEFAULT_LOCALE; if (locale == null) locale = PainfulLoss.DEFAULT_LOCALE;
Bukkit.getLogger().info("[Painfullost] Locale used : " + locale.getDisplayName());
Message.currentLocale = locale; Message.currentLocale = locale;
clearCache(); clearCache();
} }
@ -33,14 +29,6 @@ public class Message {
return of(key, currentLocale, args); 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) { public static String of(String key, Locale locale, Object... args) {
Locale loc = (locale != null) ? locale : currentLocale; Locale loc = (locale != null) ? locale : currentLocale;
ResourceBundle bundle = getBundle(loc); ResourceBundle bundle = getBundle(loc);
@ -50,30 +38,11 @@ public class Message {
return ChatColor.translateAlternateColorCodes('&', formatted); 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() { public static void clearCache() {
CACHE.clear(); CACHE.clear();
ResourceBundle.clearCache(Message.class.getClassLoader()); 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) { private static ResourceBundle getBundle(Locale loc) {
return CACHE.computeIfAbsent(loc, l -> return CACHE.computeIfAbsent(loc, l ->
ResourceBundle.getBundle(BUNDLE_NAME, l, new Utf8Control())); ResourceBundle.getBundle(BUNDLE_NAME, l, new Utf8Control()));

View File

@ -4,12 +4,10 @@ main: fr.molzonas.painfulloss.PainfulLoss
api-version: '1.20' api-version: '1.20'
author: Molzonas author: Molzonas
commands: commands:
itestfr:
description: Test i18n
usage: /itestfr
itesten:
description: Test i18n
usage: /itesten
painfulloss: painfulloss:
description: Base command for Painfulloss description: Base command for Painfulloss
usage: /painfulloss usage: /painfulloss
permissions:
painfulloss.admin:
description: Access to PainfulLoss admin commands
default: op