diff --git a/build.gradle.kts b/build.gradle.kts index 1810fa6..eca9b29 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,11 +20,13 @@ repositories { maven("https://repo.codemc.org/repository/maven-public/") maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") + maven("https://nexuslite.gcnt.net/repos/other/") } dependencies { implementation("org.bstats:bstats-bukkit:3.0.1") implementation("net.kyori:adventure-platform-bukkit:4.3.1") + implementation("com.tcoded:FoliaLib:0.3.1") compileOnly("org.spigotmc:spigot-api:1.20-R0.1-SNAPSHOT") compileOnlyApi("org.jetbrains:annotations:23.0.0") @@ -88,6 +90,7 @@ tasks { relocate("org.bstats", "me.clip.placeholderapi.metrics") relocate("net.kyori", "me.clip.placeholderapi.libs.kyori") + relocate("com.tcoded", "me.clip.placeholderapi.libs.tcoded") } test { diff --git a/src/main/java/me/clip/placeholderapi/PlaceholderAPIPlugin.java b/src/main/java/me/clip/placeholderapi/PlaceholderAPIPlugin.java index 1fc84bf..766cddc 100644 --- a/src/main/java/me/clip/placeholderapi/PlaceholderAPIPlugin.java +++ b/src/main/java/me/clip/placeholderapi/PlaceholderAPIPlugin.java @@ -20,6 +20,7 @@ package me.clip.placeholderapi; +import com.tcoded.folialib.FoliaLib; import java.text.SimpleDateFormat; import java.util.HashMap; import java.util.Map; @@ -53,6 +54,7 @@ public final class PlaceholderAPIPlugin extends JavaPlugin { @NotNull private static final Version VERSION; private static PlaceholderAPIPlugin instance; + private static FoliaLib foliaLib; static { final String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; @@ -90,6 +92,15 @@ public final class PlaceholderAPIPlugin extends JavaPlugin { return instance; } + /** + * Get the static instance of the FoliaLib class + * + * @return FoliaLib instance + */ + public static FoliaLib getFoliaLib() { + return foliaLib; + } + /** * Get the configurable {@linkplain String} value that should be returned when a boolean is true * @@ -134,6 +145,7 @@ public final class PlaceholderAPIPlugin extends JavaPlugin { @Override public void onLoad() { instance = this; + foliaLib = new FoliaLib(this); saveDefaultConfig(); } @@ -162,7 +174,7 @@ public final class PlaceholderAPIPlugin extends JavaPlugin { HandlerList.unregisterAll(this); - Bukkit.getScheduler().cancelTasks(this); + foliaLib.getImpl().cancelAllTasks(); adventure.close(); adventure = null; diff --git a/src/main/java/me/clip/placeholderapi/expansion/manager/CloudExpansionManager.java b/src/main/java/me/clip/placeholderapi/expansion/manager/CloudExpansionManager.java index 19dc77c..22ad8f2 100644 --- a/src/main/java/me/clip/placeholderapi/expansion/manager/CloudExpansionManager.java +++ b/src/main/java/me/clip/placeholderapi/expansion/manager/CloudExpansionManager.java @@ -200,40 +200,33 @@ public final class CloudExpansionManager { plugin.getLogger().log(Level.WARNING, "Failed to download expansion information", e); } - // loop through what's left on the main thread - plugin - .getServer() - .getScheduler() - .runTask( - plugin, - () -> { - try { - for (Map.Entry entry : values.entrySet()) { - String name = entry.getKey(); - CloudExpansion expansion = entry.getValue(); + //todo: Figure out why this was being scheduled back on the main thread + try { + for (Map.Entry entry : values.entrySet()) { + String name = entry.getKey(); + CloudExpansion expansion = entry.getValue(); - expansion.setName(name); + expansion.setName(name); - Optional localOpt = - plugin.getLocalExpansionManager().findExpansionByName(name); - if (localOpt.isPresent()) { - PlaceholderExpansion local = localOpt.get(); - if (local.isRegistered()) { - expansion.setHasExpansion(true); - expansion.setShouldUpdate( - !local.getVersion().equalsIgnoreCase(expansion.getLatestVersion())); - } - } + Optional localOpt = + plugin.getLocalExpansionManager().findExpansionByName(name); + if (localOpt.isPresent()) { + PlaceholderExpansion local = localOpt.get(); + if (local.isRegistered()) { + expansion.setHasExpansion(true); + expansion.setShouldUpdate( + !local.getVersion().equalsIgnoreCase(expansion.getLatestVersion())); + } + } - cache.put(toIndexName(expansion), expansion); - } - } catch (Throwable e) { - // ugly swallowing of every throwable, but we have to be defensive - plugin - .getLogger() - .log(Level.WARNING, "Failed to download expansion information", e); - } - }); + cache.put(toIndexName(expansion), expansion); + } + } catch (Throwable e) { + // ugly swallowing of every throwable, but we have to be defensive + plugin + .getLogger() + .log(Level.WARNING, "Failed to download expansion information", e); + } }); } diff --git a/src/main/java/me/clip/placeholderapi/updatechecker/UpdateChecker.java b/src/main/java/me/clip/placeholderapi/updatechecker/UpdateChecker.java index 8001d61..91367b5 100644 --- a/src/main/java/me/clip/placeholderapi/updatechecker/UpdateChecker.java +++ b/src/main/java/me/clip/placeholderapi/updatechecker/UpdateChecker.java @@ -55,7 +55,7 @@ public class UpdateChecker implements Listener { } public void fetch() { - Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + PlaceholderAPIPlugin.getFoliaLib().getImpl().runAsync(t -> { try { HttpsURLConnection con = (HttpsURLConnection) new URL( "https://api.spigotmc.org/legacy/update.php?resource=" + RESOURCE_ID).openConnection(); @@ -76,7 +76,7 @@ public class UpdateChecker implements Listener { return; } - Bukkit.getScheduler().runTask(plugin, () -> { + PlaceholderAPIPlugin.getFoliaLib().getImpl().runNextTick(t1 -> { plugin.getLogger() .info("An update for PlaceholderAPI (v" + getSpigotVersion() + ") is available at:"); plugin.getLogger() diff --git a/src/main/java/me/clip/placeholderapi/util/Futures.java b/src/main/java/me/clip/placeholderapi/util/Futures.java index c29892f..058868c 100644 --- a/src/main/java/me/clip/placeholderapi/util/Futures.java +++ b/src/main/java/me/clip/placeholderapi/util/Futures.java @@ -27,7 +27,7 @@ import java.util.function.BiConsumer; import java.util.stream.Collector; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.bukkit.Bukkit; +import me.clip.placeholderapi.PlaceholderAPIPlugin; import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; @@ -40,11 +40,7 @@ public final class Futures { @NotNull final CompletableFuture future, @NotNull final BiConsumer consumer) { future.whenComplete((value, exception) -> { - if (Bukkit.isPrimaryThread()) { - consumer.accept(value, exception); - } else { - Bukkit.getScheduler().runTask(plugin, () -> consumer.accept(value, exception)); - } + PlaceholderAPIPlugin.getFoliaLib().getImpl().runNextTick(t -> consumer.accept(value, exception)); }); } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 84c3f5f..4935dbf 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,6 +4,8 @@ main: "me.clip.placeholderapi.PlaceholderAPIPlugin" version: ${version} author: HelpChat +folia-supported: true + api-version: "1.13" description: "An awesome placeholder provider!"