feat: implemented scheduler

This commit is contained in:
Andrey Terentev 2024-09-27 00:44:50 +07:00
parent 761015b6a8
commit 9b575d73cc
4 changed files with 82 additions and 0 deletions

View File

@ -1,8 +1,10 @@
package ru.dragonestia.msb3.api; package ru.dragonestia.msb3.api;
import lombok.extern.log4j.Log4j2;
import net.minestom.server.entity.GameMode; import net.minestom.server.entity.GameMode;
import ru.dragonestia.msb3.api.module.FlatWorldModule; import ru.dragonestia.msb3.api.module.FlatWorldModule;
@Log4j2
public class Bootstrap { public class Bootstrap {
public static void main(String[] args) { public static void main(String[] args) {

View File

@ -0,0 +1,36 @@
package ru.dragonestia.msb3.api.scheduler;
import net.minestom.server.MinecraftServer;
import net.minestom.server.entity.Player;
import net.minestom.server.instance.Instance;
import net.minestom.server.timer.Task;
import ru.dragonestia.msb3.api.util.UncheckedRunnable;
import java.time.Duration;
public interface Scheduler {
static Scheduler ofPlayer(Player player) {
return new SchedulerImpl(player.scheduler());
}
static Scheduler ofInstance(Instance instance) {
return new SchedulerImpl(instance.scheduler());
}
static Scheduler global() {
return new SchedulerImpl(MinecraftServer.getSchedulerManager());
}
static Scheduler create() {
return new SchedulerImpl(net.minestom.server.timer.Scheduler.newScheduler());
}
Task delayedTask(UncheckedRunnable task, Duration delay);
Task repeatingTask(UncheckedRunnable task, Duration period, Duration delay);
default Task repeatingTask(UncheckedRunnable task, Duration period) {
return repeatingTask(task, period, Duration.ZERO);
}
}

View File

@ -0,0 +1,27 @@
package ru.dragonestia.msb3.api.scheduler;
import net.minestom.server.timer.Scheduler;
import net.minestom.server.timer.Task;
import net.minestom.server.timer.TaskSchedule;
import ru.dragonestia.msb3.api.util.UncheckedRunnable;
import java.time.Duration;
class SchedulerImpl implements ru.dragonestia.msb3.api.scheduler.Scheduler {
private final Scheduler scheduler;
SchedulerImpl(Scheduler scheduler) {
this.scheduler = scheduler;
}
@Override
public Task delayedTask(UncheckedRunnable task, Duration delay) {
return scheduler.buildTask(task).delay(delay).schedule();
}
@Override
public Task repeatingTask(UncheckedRunnable task, Duration period, Duration delay) {
return scheduler.scheduleTask(task, TaskSchedule.duration(delay), TaskSchedule.duration(period));
}
}

View File

@ -0,0 +1,17 @@
package ru.dragonestia.msb3.api.util;
import org.slf4j.LoggerFactory;
public interface UncheckedRunnable extends Runnable {
@Override
default void run() {
try {
runUnchecked();
} catch (Exception ex) {
LoggerFactory.getLogger(UncheckedRunnable.class).error(ex.getMessage(), ex);
}
}
void runUnchecked() throws Exception;
}