Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion buildSrc/src/main/kotlin/commons-publish.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ plugins {
}

group = "com.eternalcode"
version = "1.1.3"
version = "1.1.4-SNAPSHOT"

java {
withSourcesJar()
Expand Down
2 changes: 1 addition & 1 deletion buildSrc/src/main/kotlin/commons-repositories.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ plugins {
repositories {
mavenCentral()

maven("https://papermc.io/repo/repository/maven-public/") // paper, adventure, velocity
maven("https://repo.papermc.io/repository/maven-public/") // paper, adventure, velocity
maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") // spigot
}
19 changes: 19 additions & 0 deletions eternalcode-commons-folia/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
plugins {
`commons-java-17`
`commons-publish`
`commons-repositories`
`commons-java-unit-test`
}


dependencies {
api(project(":eternalcode-commons-shared"))

compileOnlyApi("dev.folia:folia-api:1.20.1-R0.1-SNAPSHOT")

api("org.jetbrains:annotations:24.1.0")
}

tasks.test {
useJUnitPlatform()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package com.eternalcode.commons.folia.scheduler;

import com.eternalcode.commons.scheduler.Scheduler;
import com.eternalcode.commons.scheduler.Task;
import io.papermc.paper.threadedregions.scheduler.AsyncScheduler;
import io.papermc.paper.threadedregions.scheduler.GlobalRegionScheduler;
import java.time.Duration;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;

public class FoliaSchedulerImpl implements Scheduler {

public final Plugin plugin;
private final GlobalRegionScheduler globalRegionScheduler = Bukkit.getServer().getGlobalRegionScheduler();
private final AsyncScheduler asyncScheduler = Bukkit.getServer().getAsyncScheduler();

public FoliaSchedulerImpl(Plugin plugin) {
this.plugin = plugin;
}

@Override
public Task sync(Runnable task) {
return new FoliaTaskImpl(this.globalRegionScheduler.run(plugin, runnable -> task.run()));
}

@Override
public Task async(Runnable task) {
return new FoliaTaskImpl(this.globalRegionScheduler.run(plugin, runnable -> task.run()));
}

@Override
public Task laterSync(Runnable task, Duration delay) {
return new FoliaTaskImpl(this.globalRegionScheduler.runDelayed(
plugin,
runnable -> task.run(),
delay.toMillis())
);
}

@Override
public Task laterAsync(Runnable task, Duration delay) {
return new FoliaTaskImpl(this.asyncScheduler.runDelayed(
plugin,
runnable -> task.run(),
delay.toMillis(),
TimeUnit.MILLISECONDS)
);
}

@Override
public Task timerSync(Runnable task, Duration delay, Duration period) {
return new FoliaTaskImpl(this.globalRegionScheduler.runAtFixedRate(
plugin,
runnable -> task.run(),
delay.toMillis(),
period.toMillis())
);
}

@Override
public Task timerAsync(Runnable task, Duration delay, Duration period) {
return new FoliaTaskImpl(this.asyncScheduler.runAtFixedRate(
plugin,
runnable -> task.run(),
delay.toMillis(),
period.toMillis(),
TimeUnit.MILLISECONDS)
);
}

@Override
public <T> CompletableFuture<T> completeSync(Supplier<T> task) {
CompletableFuture<T> completable = new CompletableFuture<>();
this.globalRegionScheduler.run(plugin, scheduledTask -> completable.complete(task.get()));
return completable;
}

@Override
public <T> CompletableFuture<T> completeAsync(Supplier<T> task) {
CompletableFuture<T> completable = new CompletableFuture<>();
this.asyncScheduler.runNow(plugin, scheduledTask -> completable.complete(task.get()));
return completable;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.eternalcode.commons.folia.scheduler;

import com.eternalcode.commons.scheduler.Task;
import io.papermc.paper.threadedregions.scheduler.ScheduledTask;

public class FoliaTaskImpl implements Task {

private final ScheduledTask rootTask;

public FoliaTaskImpl(ScheduledTask rootTask) {
this.rootTask = rootTask;
}

@Override
public void cancel() {
this.rootTask.cancel();
}

@Override
public boolean isCanceled() {
return this.rootTask.isCancelled();
}

@Override
public boolean isAsync() {
return true;
}
}
1 change: 1 addition & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ rootProject.name = "eternalcode-commons"
include(":eternalcode-commons-bukkit")
include(":eternalcode-commons-adventure")
include(":eternalcode-commons-shared")
include("eternalcode-commons-folia")