From 267a37b4eb4fcc5bc1151881be6b9720b6221cf1 Mon Sep 17 00:00:00 2001 From: Tristan Vermeesch Date: Tue, 30 Dec 2025 21:52:59 +0100 Subject: [PATCH] fix: more bugs in execution engine --- build.gradle | 4 +-- java17-build.gradle | 4 +-- java21-build.gradle | 4 +-- .../playbosswar/com/tasks/TasksManager.java | 31 ++++++++++++++++--- src/main/resources/plugin.yml | 2 +- 5 files changed, 34 insertions(+), 11 deletions(-) diff --git a/build.gradle b/build.gradle index bfeda13..2cfda41 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ java { } group = 'me.playbosswar.com' -version = '8.16.2' +version = '8.16.3' description = 'CommandTimer' repositories { @@ -74,7 +74,7 @@ publishing { maven(MavenPublication) { groupId = 'me.playbosswar.com' artifactId = 'commandtimer' - version = '8.16.2' + version = '8.16.3' from components.java } diff --git a/java17-build.gradle b/java17-build.gradle index b54ac66..0a77a5c 100644 --- a/java17-build.gradle +++ b/java17-build.gradle @@ -10,7 +10,7 @@ java { group = 'me.playbosswar.com' -version = '8.16.2' +version = '8.16.3' description = 'CommandTimer' repositories { @@ -63,7 +63,7 @@ publishing { maven(MavenPublication) { groupId = 'me.playbosswar.com' artifactId = 'commandtimer-java17' - version = '8.16.2' + version = '8.16.3' from components.java } diff --git a/java21-build.gradle b/java21-build.gradle index 97b651f..6b020ba 100644 --- a/java21-build.gradle +++ b/java21-build.gradle @@ -10,7 +10,7 @@ java { group = 'me.playbosswar.com' -version = '8.16.2' +version = '8.16.3' description = 'CommandTimer' repositories { @@ -67,7 +67,7 @@ publishing { maven(MavenPublication) { groupId = 'me.playbosswar.com' artifactId = 'commandtimer-java21' - version = '8.16.2' + version = '8.16.3' from components.java } } diff --git a/src/main/java/me/playbosswar/com/tasks/TasksManager.java b/src/main/java/me/playbosswar/com/tasks/TasksManager.java index f84dff4..bfff338 100644 --- a/src/main/java/me/playbosswar/com/tasks/TasksManager.java +++ b/src/main/java/me/playbosswar/com/tasks/TasksManager.java @@ -210,10 +210,11 @@ public void populateScheduleForTask(Task task) { .filter(scheduledTask -> scheduledTask.getTask().getId().equals(task.getId())) .map(ScheduledTask::getDate).max(ZonedDateTime::compareTo).orElse(null); + boolean hadNoScheduledTasks = (latestScheduledDate == null); + ZonedDateTime lastExecuted = task.getLastExecuted().toInstant().atZone(ZoneId.systemDefault()); + ZonedDateTime now = ZonedDateTime.now(); if (latestScheduledDate == null) { - ZonedDateTime now = ZonedDateTime.now(); - ZonedDateTime lastExecuted = task.getLastExecuted().toInstant().atZone(ZoneId.systemDefault()); - latestScheduledDate = lastExecuted.isAfter(now) ? lastExecuted : now; + latestScheduledDate = lastExecuted; } if (maxToSchedule <= 0) { @@ -221,6 +222,9 @@ public void populateScheduleForTask(Task task) { } if (!task.getTimes().isEmpty()) { + if (latestScheduledDate.isBefore(now)) { + latestScheduledDate = now; + } List rangeTimes = new ArrayList<>(); List nonRangeTimes = new ArrayList<>(); @@ -383,14 +387,33 @@ public void populateScheduleForTask(Task task) { return; } + long intervalSeconds = task.getInterval().toSeconds(); + if (intervalSeconds <= 0) intervalSeconds = 1; + + ZonedDateTime nextExpectedExecution = lastExecuted.plusSeconds(intervalSeconds); + + if (hadNoScheduledTasks && nextExpectedExecution.isBefore(now)) { + if (task.getDays().contains(nextExpectedExecution.toLocalDate().getDayOfWeek())) { + scheduledTasks.add(new ScheduledTask(task, nextExpectedExecution)); + maxToSchedule--; + } + } + int i = 1; + ZonedDateTime startDate = latestScheduledDate; + while (maxToSchedule > 0) { - ZonedDateTime date = latestScheduledDate.plusSeconds(i * task.getInterval().toSeconds()); + ZonedDateTime date = startDate.plusSeconds(i * intervalSeconds); if (!task.getDays().contains(date.getDayOfWeek())) { i++; continue; } + if (date.isBefore(now)) { + i++; + continue; + } + scheduledTasks.add(new ScheduledTask(task, date)); maxToSchedule--; i++; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index c44eade..5120079 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ main: me.playbosswar.com.CommandTimerPlugin name: "CommandTimer" -version: "8.16.2" +version: "8.16.3" description: "Schedule commands like you want" author: PlayBossWar api-version: 1.13