Skip to content

Repository files navigation

Schedula

Compact scheduling framework for Paper and Folia.

Build Java Paper Folia Version JitPack License


Что это

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.


Подключение через JitPack

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)
);

Self-cancelling tasks

Когда нужен доступ к текущей задаче, используйте Consumer<Task>:

scheduler.schedule(
        task -> {
            update();

            if (finished) {
                task.cancel();
            }
        },
        TickSchedule.repeating(0, 20)
);

Task позволяет:

task.cancel();
task.isCancelled();
task.sync();

TickSchedule

Поддерживаются как 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.


Entity & Location

scheduler.scheduleEntity(
        entity,
        task -> {
            if (!entity.isValid()) {
                task.cancel();
            }
        },
        TickSchedule.repeating(0, 20)
);
scheduler.scheduleLocation(
        location,
        () -> doSomething(),
        TickSchedule.delayed(20)
);

На Folia эти методы используют соответствующие region/entity schedulers.


Factory

Реализации можно выбрать вручную:

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.

About

A lightweight scheduler for Bukkit and Folia plugins.

Topics

Resources

Code of conduct

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages