feat: implemented scheduler
This commit is contained in:
parent
761015b6a8
commit
9b575d73cc
@ -1,8 +1,10 @@
|
||||
package ru.dragonestia.msb3.api;
|
||||
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import net.minestom.server.entity.GameMode;
|
||||
import ru.dragonestia.msb3.api.module.FlatWorldModule;
|
||||
|
||||
@Log4j2
|
||||
public class Bootstrap {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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));
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user