From 77a2f3bfae84619e6f82903f0cfbfe03d70da206 Mon Sep 17 00:00:00 2001 From: Tristan Vermeesch Date: Tue, 18 Nov 2025 22:10:16 +0100 Subject: [PATCH] feat: new scheduling engine --- build.gradle | 4 +- docs/docs/configuration/adhoc-commands.md | 139 ++++++ docs/docs/configuration/conditions.md | 4 +- docs/docs/configuration/index.md | 1 + docs/docs/developers/index.md | 5 +- docs/docs/extensions/index.md | 2 +- docs/docs/faq.md | 2 +- docs/docs/intro.md | 22 +- docs/docs/jargon.md | 21 +- docs/docs/jsonschema.md | 26 +- docs/docs/miscellaneous.md | 4 + docs/docs/placeholders.md | 2 +- docs/docs/storage/index.md | 4 +- java17-build.gradle | 4 +- java21-build.gradle | 4 +- .../playbosswar/com/CommandTimerPlugin.java | 20 +- .../playbosswar/com/commands/MainCommand.java | 66 +++ .../java/me/playbosswar/com/gui/MainMenu.java | 8 + .../com/gui/tasks/EditTaskMenu.java | 15 +- .../gui/tasks/ScheduledExecutionsMenu.java | 199 +++++++++ .../gui/tasks/general/GeneralLimitsMenu.java | 1 + .../general/TextInputConversationPrompt.java | 46 -- .../com/gui/tasks/scheduler/EditHourMenu.java | 2 + .../gui/tasks/scheduler/EditIntervalMenu.java | 11 + .../tasks/scheduler/EditSpecificTimeMenu.java | 3 + .../gui/tasks/scheduler/EditTimesMenu.java | 2 - .../com/hooks/PAPIPlaceholders.java | 105 +---- .../playbosswar/com/language/LanguageKey.java | 13 +- .../com/permissions/PermissionUtils.java | 1 + .../BukkitSchedulerAdapter.java | 2 +- .../FoliaSchedulerAdapter.java | 48 +- .../SchedulerAdapter.java | 2 +- .../playbosswar/com/tasks/AdHocCommand.java | 66 +++ .../com/tasks/AdHocCommandRunner.java | 35 ++ .../com/tasks/AdHocCommandsManager.java | 143 ++++++ .../com/tasks/PopulateScheduleRunner.java | 31 ++ .../playbosswar/com/tasks/ScheduledTask.java | 21 + .../java/me/playbosswar/com/tasks/Task.java | 10 + .../me/playbosswar/com/tasks/TaskRunner.java | 156 ++----- .../com/tasks/TaskValidationHelpers.java | 1 - .../playbosswar/com/tasks/TasksManager.java | 419 ++++++++---------- .../com/utils/CommandExecutor.java | 374 ++++++++++++++++ .../java/me/playbosswar/com/utils/Files.java | 10 + .../me/playbosswar/com/utils/Messages.java | 2 + .../me/playbosswar/com/utils/TaskUtils.java | 42 -- .../java/me/playbosswar/com/utils/Tools.java | 97 ++++ .../com/utils/gson/GsonConverter.java | 2 + .../com/utils/gson/GsonZonedDateTime.java | 22 + src/main/resources/languages/default.json | 13 +- src/main/resources/languages/en.json | 13 +- src/main/resources/plugin.yml | 2 +- 51 files changed, 1668 insertions(+), 579 deletions(-) create mode 100644 docs/docs/configuration/adhoc-commands.md create mode 100644 src/main/java/me/playbosswar/com/gui/tasks/ScheduledExecutionsMenu.java delete mode 100644 src/main/java/me/playbosswar/com/gui/tasks/general/TextInputConversationPrompt.java rename src/main/java/me/playbosswar/com/{scheduler => reflections}/BukkitSchedulerAdapter.java (95%) rename src/main/java/me/playbosswar/com/{scheduler => reflections}/FoliaSchedulerAdapter.java (73%) rename src/main/java/me/playbosswar/com/{scheduler => reflections}/SchedulerAdapter.java (88%) create mode 100644 src/main/java/me/playbosswar/com/tasks/AdHocCommand.java create mode 100644 src/main/java/me/playbosswar/com/tasks/AdHocCommandRunner.java create mode 100644 src/main/java/me/playbosswar/com/tasks/AdHocCommandsManager.java create mode 100644 src/main/java/me/playbosswar/com/tasks/PopulateScheduleRunner.java create mode 100644 src/main/java/me/playbosswar/com/tasks/ScheduledTask.java create mode 100644 src/main/java/me/playbosswar/com/utils/CommandExecutor.java delete mode 100644 src/main/java/me/playbosswar/com/utils/TaskUtils.java create mode 100644 src/main/java/me/playbosswar/com/utils/gson/GsonZonedDateTime.java diff --git a/build.gradle b/build.gradle index f0526e8d..41365944 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ java { } group = 'me.playbosswar.com' -version = '8.14.1' +version = '8.15.0' description = 'CommandTimer' repositories { @@ -74,7 +74,7 @@ publishing { maven(MavenPublication) { groupId = 'me.playbosswar.com' artifactId = 'commandtimer' - version = '8.14.1' + version = '8.15.0' from components.java } diff --git a/docs/docs/configuration/adhoc-commands.md b/docs/docs/configuration/adhoc-commands.md new file mode 100644 index 00000000..6e7b8bb3 --- /dev/null +++ b/docs/docs/configuration/adhoc-commands.md @@ -0,0 +1,139 @@ +--- +sidebar_position: 3 +--- + +# Ad-Hoc Commands + +Ad-hoc commands allow you to schedule one-time command executions at a specific time in the future without creating a full [task](../jargon#task). This is perfect for temporary commands, delayed actions, or one-off scheduled executions. + +## Overview + +Ad-hoc commands are single-use scheduled commands that execute once at a specified time. Unlike regular tasks, they don't have intervals, conditions, or multiple commands - they're designed for simple, one-time executions. + +### Key Features + +- **One-time execution**: Commands execute once at the scheduled time +- **Flexible scheduling**: Schedule commands to run at any future time +- **All gender types supported**: Use any [gender](commands.md#genders) for command execution +- **Persistent storage**: Commands are saved to disk and survive server restarts +- **GUI management**: View and manage scheduled ad-hoc commands through the GUI + +## Command Syntax + +Schedule an ad-hoc command using the `/cmt schedule` command: + +``` +/cmt schedule [-after