Molzonas 796aaae5a9 PriceProvider changed to abstract & cache price
Needs refinement, but works kinda well

Took 3 hours 46 minutes
2025-08-26 20:48:08 +02:00

122 lines
5.2 KiB
Java

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<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");
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;
}
}