From 16634980802ddd7bfb5a4a5c45818f9e8e7c418d Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Fri, 7 Jul 2023 23:42:08 +0200 Subject: [PATCH] Added xp calc command --- .../commands/PlayerUtilsCommand.java | 4 +- .../playerutils_subcommands/XPCalc.java | 73 +++++++++++++++++++ .../alttd/playerutils/config/Messages.java | 15 +++- 3 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/alttd/playerutils/commands/playerutils_subcommands/XPCalc.java diff --git a/src/main/java/com/alttd/playerutils/commands/PlayerUtilsCommand.java b/src/main/java/com/alttd/playerutils/commands/PlayerUtilsCommand.java index dfd7378..4a84e0d 100644 --- a/src/main/java/com/alttd/playerutils/commands/PlayerUtilsCommand.java +++ b/src/main/java/com/alttd/playerutils/commands/PlayerUtilsCommand.java @@ -2,6 +2,7 @@ package com.alttd.playerutils.commands; import com.alttd.playerutils.PlayerUtils; import com.alttd.playerutils.commands.playerutils_subcommands.Glow; +import com.alttd.playerutils.commands.playerutils_subcommands.XPCalc; import com.alttd.playerutils.commands.playerutils_subcommands.XPCheque; import com.alttd.playerutils.config.Messages; import com.alttd.playerutils.util.Logger; @@ -30,7 +31,8 @@ public class PlayerUtilsCommand implements CommandExecutor, TabExecutor { subCommands = Arrays.asList( new Glow(logger), - new XPCheque(playerUtils) + new XPCheque(playerUtils), + new XPCalc() ); } diff --git a/src/main/java/com/alttd/playerutils/commands/playerutils_subcommands/XPCalc.java b/src/main/java/com/alttd/playerutils/commands/playerutils_subcommands/XPCalc.java new file mode 100644 index 0000000..a973f89 --- /dev/null +++ b/src/main/java/com/alttd/playerutils/commands/playerutils_subcommands/XPCalc.java @@ -0,0 +1,73 @@ +package com.alttd.playerutils.commands.playerutils_subcommands; + +import com.alttd.playerutils.commands.SubCommand; +import com.alttd.playerutils.config.Messages; +import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; +import org.bukkit.command.CommandSender; + +import java.util.List; +import java.util.Optional; + +public class XPCalc extends SubCommand { + @Override + public boolean onCommand(CommandSender commandSender, String[] args) { + if (args.length != 3) { + return false; + } + Optional optionalFrom = getInt(args[1]); + Optional optionalTo = getInt(args[2]); + + if (optionalFrom.isEmpty() || optionalTo.isEmpty()) + return false; + + long totalXpNeeded = 0; + int startingLevel = optionalFrom.get(); + int endingLevel = optionalTo.get(); + if (endingLevel < startingLevel) { + int tmp = startingLevel; + startingLevel = endingLevel; + endingLevel = tmp; + } + + while (startingLevel < endingLevel) { + totalXpNeeded += getExpToNext(startingLevel); + startingLevel++; + } + + commandSender.sendMiniMessage(Messages.XP_CALC.XP_NEEDED, Placeholder.parsed("xp_needed", String.valueOf(totalXpNeeded))); + return true; + } + + @Override + public String getName() { + return "xpcalc"; + } + + @Override + public List getTabComplete(CommandSender commandSender, String[] args) { + return List.of(); + } + + @Override + public String getHelpMessage() { + return Messages.HELP.XP_CALC; + } + + private Optional getInt(String arg) { + try { + return Optional.of(Integer.parseInt(arg)); + } catch (NumberFormatException e) { + return Optional.empty(); + } + } + + public int getExpToNext(int level) { + if (level <= 15) { + return 2 * level + 7; + } else if (level <= 30) { + return 5 * level - 38; + } else { + return 9 * level - 158; + } + } +} diff --git a/src/main/java/com/alttd/playerutils/config/Messages.java b/src/main/java/com/alttd/playerutils/config/Messages.java index 1fa0cbd..da72cc4 100644 --- a/src/main/java/com/alttd/playerutils/config/Messages.java +++ b/src/main/java/com/alttd/playerutils/config/Messages.java @@ -10,7 +10,7 @@ public class Messages extends AbstractConfig { private final Logger logger; Messages(PlayerUtils playerUtils, Logger logger) { - super(playerUtils, "config.yml", logger); + super(playerUtils, "messages.yml", logger); this.logger = logger; } @@ -26,6 +26,7 @@ public class Messages extends AbstractConfig { public static String HELP_MESSAGE = "Show this menu: /pu help"; public static String GLOW = "Glow in a specified color: /pu glow "; public static String XP_CHEQUE = "Create an xp cheque: /pu xpcheque "; + public static String XP_CALC = "Calculate the amount of xp between levels: /pu xpcalc "; @SuppressWarnings("unused") private static void load() { @@ -33,6 +34,7 @@ public class Messages extends AbstractConfig { HELP_MESSAGE = config.getString(prefix, "help", HELP_MESSAGE); GLOW = config.getString(prefix, "glow", GLOW); XP_CHEQUE = config.getString(prefix, "xp-cheque", XP_CHEQUE); + XP_CALC = config.getString(prefix, "xp-calc", XP_CALC); } } @@ -84,4 +86,15 @@ public class Messages extends AbstractConfig { LORE = config.getStringList(prefix, "lore", LORE); } } + + public static class XP_CALC { + private static final String prefix = "pu-command.xp-cheque."; + + public static String XP_NEEDED = "Xp needed ."; + + @SuppressWarnings("unused") + private static void load() { + XP_NEEDED = config.getString(prefix, "xp-needed", XP_NEEDED); + } + } }