Compact scheduling framework for Paper and Folia.
Schedula предоставляет единый API для планирования задач, скрывая различия между Bukkit и Folia scheduler'ами.
Поддерживаются:
- sync и async выполнение;
- задержка и повторение;
- entity и location scheduling;
- отмена через
Task; - автоматический выбор платформы.
Note
Schedula — библиотека, а не самостоятельный плагин.
| Модуль | Назначение |
|---|---|
common |
Основной API |
bukkit |
Paper/Bukkit implementation |
folia |
Folia implementation |
multi |
Paper/Folia API с auto-detection |
Для multiplatform-плагинов используйте multi.
repositories {
mavenCentral()
maven("https://jitpack.io")
}
dependencies {
implementation("com.github.g4vrk.Schedula:multi:1.1.0")
}Для отдельных платформ:
implementation("com.github.g4vrk.Schedula:bukkit:1.1.0")
implementation("com.github.g4vrk.Schedula:folia:1.1.0")Maven
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependency>
<groupId>com.github.g4vrk.Schedula</groupId>
<artifactId>multi</artifactId>
<version>1.1.0</version>
</dependency>Создание scheduler:
MultiplatformSchedulaAPI api = MultiplatformSchedulaAPI.builder()
.autoDetectFactoryFor(plugin)
.build();
Scheduler scheduler = api.createScheduler();Обычная задача:
scheduler.schedule(
() -> doSomething(),
TickSchedule.instant()
);Повторение:
scheduler.schedule(
() -> doSomething(),
TickSchedule.repeating(0, 20)
);Async:
scheduler.scheduleAsync(
() -> loadData(),
TickSchedule.delayed(20)
);Когда нужен доступ к текущей задаче, используйте Consumer<Task>:
scheduler.schedule(
task -> {
update();
if (finished) {
task.cancel();
}
},
TickSchedule.repeating(0, 20)
);Task позволяет:
task.cancel();
task.isCancelled();
task.sync();Поддерживаются как ticks, так и Duration:
TickSchedule.instant();
TickSchedule.delayed(20);
TickSchedule.repeating(20, 20);
TickSchedule.fixedRate(20);TickSchedule.delayed(Duration.ofSeconds(2));
TickSchedule.repeating(
Duration.ofSeconds(1),
Duration.ofSeconds(5)
);
TickSchedule.fixedRate(
Duration.ofMillis(500)
);Duration преобразуется в Minecraft ticks.
scheduler.scheduleEntity(
entity,
task -> {
if (!entity.isValid()) {
task.cancel();
}
},
TickSchedule.repeating(0, 20)
);scheduler.scheduleLocation(
location,
() -> doSomething(),
TickSchedule.delayed(20)
);На Folia эти методы используют соответствующие region/entity schedulers.
Реализации можно выбрать вручную:
SchedulaAPI api = SchedulaAPI.builder()
.factory(new PaperSchedulerFactory(plugin))
.build();SchedulaAPI api = SchedulaAPI.builder()
.factory(new FoliaSchedulerFactory(plugin))
.build();Или автоматически через multi:
MultiplatformSchedulaAPI api = MultiplatformSchedulaAPI.builder()
.autoDetectFactoryFor(plugin)
.build();Требуется Java 21+.
./gradlew buildГотовые JAR-файлы находятся в:
common/build/libs
bukkit/build/libs
folia/build/libs
multi/build/libs
Schedula распространяется под MIT — см. LICENSE.