package fr.molzonas.painfulloss.commands; import fr.molzonas.painfulloss.PainfulLoss; import fr.molzonas.painfulloss.utils.PropertiesEnum; import fr.molzonas.painfulloss.utils.Message; import fr.molzonas.painfulloss.utils.PriceCalculator; 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); case "worth" -> commandWorth(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.count", 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; } private boolean commandWorth(CommandSender commandSender, String[] args) { if (args.length == 1 && commandSender instanceof Player p && commandSender.hasPermission("painfulloss.worth")) { double t1 = System.currentTimeMillis(); PainfulLoss.debug("Starting clock for worth..."); commandSender.sendMessage(Message.of("command.worth", PriceCalculator.estimate(p) + (PropertiesEnum.ENCHANT_ENABLED.getBoolean() ? PriceCalculator.enchantEstimate(p) : 0))); double t2 = System.currentTimeMillis(); PainfulLoss.debug("It took " + (t2-t1) + "ms to get the job done !"); } else if (args.length == 2 && commandSender.hasPermission("painfulloss.worth.other")) { Player p = PainfulLoss.getInstance().getServer().getPlayer(args[1]); if (p == null) { commandSender.sendMessage(Message.of("command.worth.unknownplayer", args[1])); return true; } commandSender.sendMessage(Message.of("command.worth.other", p.getName(), PriceCalculator.estimate(p) + (PropertiesEnum.ENCHANT_ENABLED.getBoolean() ? PriceCalculator.enchantEstimate(p) : 0))); } else { return commandNotAutorised(commandSender); } return true; } @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"); completions.add("worth"); if (commandSender.hasPermission("painfulloss.admin")) completions.add("reload"); } if (args.length == 2) { if ("test".equalsIgnoreCase(args[0])) { completions.add("fr-FR"); completions.add("en-US"); } if ("worth".equalsIgnoreCase(args[0]) && commandSender.hasPermission("painfulloss.worth.other")) { completions = PainfulLoss.getInstance().getServer().getOnlinePlayers().stream().map(Player::getName).toList(); } } return completions; } }