From c86e2714e643a030ac11ae3ab387bd8366b77447 Mon Sep 17 00:00:00 2001 From: ChomeNS <95471003+ChomeNS@users.noreply.github.com> Date: Sun, 16 Mar 2025 12:53:27 +0700 Subject: [PATCH] feat: cloop interval units (now we can loop at 1 chomeNS and crash the server :D) feat: show possible values of the enum in the command context's `getEnum` --- build-number.txt | 2 +- .../chomens_bot/command/CommandContext.java | 10 +++++++++- .../chomens_bot/commands/CloopCommand.java | 19 ++++++++++++------- .../chomens_bot/data/cloop/CommandLoop.java | 4 +++- .../chomens_bot/plugins/CloopPlugin.java | 11 +++++------ 5 files changed, 30 insertions(+), 16 deletions(-) diff --git a/build-number.txt b/build-number.txt index b514541d..9a8d31da 100644 --- a/build-number.txt +++ b/build-number.txt @@ -1 +1 @@ -1832 \ No newline at end of file +1846 \ No newline at end of file diff --git a/src/main/java/me/chayapak1/chomens_bot/command/CommandContext.java b/src/main/java/me/chayapak1/chomens_bot/command/CommandContext.java index 27f4b737..f3155feb 100644 --- a/src/main/java/me/chayapak1/chomens_bot/command/CommandContext.java +++ b/src/main/java/me/chayapak1/chomens_bot/command/CommandContext.java @@ -232,7 +232,15 @@ public class CommandContext { try { return Enum.valueOf(enumClass, string.toUpperCase()); } catch (IllegalArgumentException | NullPointerException e) { - throw new CommandException(Component.text("Invalid enum")); + final T[] values = enumClass.getEnumConstants(); + + throw new CommandException( + Component.translatable( + "Invalid %s. Possible values are: %s", + Component.text(enumClass.getSimpleName()), + Component.text(Arrays.toString(values)) + ) + ); } } diff --git a/src/main/java/me/chayapak1/chomens_bot/commands/CloopCommand.java b/src/main/java/me/chayapak1/chomens_bot/commands/CloopCommand.java index 56e524d5..c7617e7d 100644 --- a/src/main/java/me/chayapak1/chomens_bot/commands/CloopCommand.java +++ b/src/main/java/me/chayapak1/chomens_bot/commands/CloopCommand.java @@ -13,13 +13,14 @@ import net.kyori.adventure.text.format.NamedTextColor; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.TimeUnit; public class CloopCommand extends Command { public CloopCommand () { super( "cloop", - "Loop commands", - new String[] { "add ", "remove ", "clear", "list" }, + "Loops commands", + new String[] { "add ", "remove ", "clear", "list" }, new String[] { "commandloop" }, TrustLevel.TRUSTED, false @@ -37,14 +38,17 @@ public class CloopCommand extends Command { int interval = context.getInteger(true); if (interval < 1) interval = 1; + final TimeUnit unit = context.getEnum(TimeUnit.class); + final String command = context.getString(true, true); - bot.cloop.add(interval, command); + bot.cloop.add(unit, interval, command); return Component.translatable( - "Added %s with interval %s to the cloops", + "Added %s with interval %s %s to the cloops", Component.text(command).color(ColorUtilities.getColorByString(bot.config.colorPalette.string)), - Component.text(interval).color(ColorUtilities.getColorByString(bot.config.colorPalette.number)) + Component.text(interval).color(ColorUtilities.getColorByString(bot.config.colorPalette.number)), + Component.text(unit.toString()).color(ColorUtilities.getColorByString(bot.config.colorPalette.string)) ).color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor)); } case "remove" -> { @@ -78,10 +82,11 @@ public class CloopCommand extends Command { for (CommandLoop command : bot.cloop.loops) { cloopsComponent.add( Component.translatable( - "%s › %s (%s)", + "%s › %s (%s %s)", Component.text(index).color(ColorUtilities.getColorByString(bot.config.colorPalette.number)), Component.text(command.command()).color(ColorUtilities.getColorByString(bot.config.colorPalette.string)), - Component.text(command.interval()).color(ColorUtilities.getColorByString(bot.config.colorPalette.number)) + Component.text(command.interval()).color(ColorUtilities.getColorByString(bot.config.colorPalette.number)), + Component.text(command.unit().toString()).color(ColorUtilities.getColorByString(bot.config.colorPalette.string)) ).color(NamedTextColor.DARK_GRAY) ); index++; diff --git a/src/main/java/me/chayapak1/chomens_bot/data/cloop/CommandLoop.java b/src/main/java/me/chayapak1/chomens_bot/data/cloop/CommandLoop.java index 11d5bc18..68df4c84 100644 --- a/src/main/java/me/chayapak1/chomens_bot/data/cloop/CommandLoop.java +++ b/src/main/java/me/chayapak1/chomens_bot/data/cloop/CommandLoop.java @@ -1,8 +1,10 @@ package me.chayapak1.chomens_bot.data.cloop; +import java.util.concurrent.TimeUnit; public record CommandLoop ( String command, - int interval + int interval, + TimeUnit unit ) {} diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/CloopPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/CloopPlugin.java index cb1dda43..2d6070c5 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/CloopPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/CloopPlugin.java @@ -18,19 +18,18 @@ public class CloopPlugin { this.bot = bot; } - public void add (int interval, String command) { + public void add (TimeUnit unit, int interval, String command) { Runnable loopTask = () -> bot.core.run(command); - loops.add(new CommandLoop(command, interval)); // mabe,.,.. - // should i use 50 or 0? - loopTasks.add(bot.executor.scheduleAtFixedRate(loopTask, 0, interval, TimeUnit.MILLISECONDS)); + loops.add(new CommandLoop(command, interval, unit)); + loopTasks.add(bot.executor.scheduleAtFixedRate(loopTask, 0, interval, unit)); } public CommandLoop remove (int index) { ScheduledFuture loopTask = loopTasks.remove(index); if (loopTask != null) { - loopTask.cancel(true); + loopTask.cancel(false); } return loops.remove(index); @@ -38,7 +37,7 @@ public class CloopPlugin { public void clear () { for (ScheduledFuture loopTask : loopTasks) { - loopTask.cancel(true); + loopTask.cancel(false); } loopTasks.clear();