diff --git a/src/main/java/net/minestom/server/timer/Scheduler.java b/src/main/java/net/minestom/server/timer/Scheduler.java index e6beefed7..bd5eee9e2 100644 --- a/src/main/java/net/minestom/server/timer/Scheduler.java +++ b/src/main/java/net/minestom/server/timer/Scheduler.java @@ -67,4 +67,12 @@ public sealed interface Scheduler permits SchedulerImpl, SchedulerManager { default @NotNull Task scheduleNextTick(@NotNull Runnable task) { return scheduleNextTick(task, ExecutionType.SYNC); } + + default @NotNull Task scheduleNextProcess(@NotNull Runnable task, @NotNull ExecutionType executionType) { + return buildTask(task).delay(TaskSchedule.immediate()).executionType(executionType).schedule(); + } + + default @NotNull Task scheduleNextProcess(@NotNull Runnable task) { + return scheduleNextProcess(task, ExecutionType.SYNC); + } } diff --git a/src/test/java/timer/TestScheduler.java b/src/test/java/timer/TestScheduler.java index 5601554c3..355716642 100644 --- a/src/test/java/timer/TestScheduler.java +++ b/src/test/java/timer/TestScheduler.java @@ -43,6 +43,20 @@ public class TestScheduler { assertTrue(result.get(), "Tick task must be executed after 1 second"); } + @Test + public void immediateTask() { + Scheduler scheduler = Scheduler.newScheduler(); + AtomicBoolean result = new AtomicBoolean(false); + scheduler.scheduleNextProcess(() -> result.set(true)); + assertFalse(result.get()); + scheduler.process(); + assertTrue(result.get()); + + result.set(false); + scheduler.process(); + assertFalse(result.get()); + } + @Test public void cancelTask() { Scheduler scheduler = Scheduler.newScheduler();