diff --git a/plugin.yml b/plugin.yml index 8591ddc..d20495a 100644 --- a/plugin.yml +++ b/plugin.yml @@ -4,6 +4,7 @@ description: ${project.description} authors: [cereal, Sleaker, mung3r] website: ${project.url} api-version: 1.13 +folia-supported: true main: ${mainClass} load: startup diff --git a/pom.xml b/pom.xml index f91cfd6..b3b3bca 100644 --- a/pom.xml +++ b/pom.xml @@ -5,6 +5,7 @@ UTF-8 1.13.1-R0.1-SNAPSHOT + 1.19.4-R0.1-SNAPSHOT ${project.groupId}.${project.artifactId} 1.7 @@ -59,6 +60,10 @@ spigot-repo https://hub.spigotmc.org/nexus/content/groups/public/ + + papermc + https://repo.papermc.io/repository/maven-public/ + escapecraft-repo http://dev.escapecraft.com/maven @@ -70,6 +75,12 @@ + + dev.folia + folia-api + ${foliaVersion} + provided + org.bukkit bukkit diff --git a/src/net/milkbowl/vault/Vault.java b/src/net/milkbowl/vault/Vault.java index f085f0e..ef66efa 100644 --- a/src/net/milkbowl/vault/Vault.java +++ b/src/net/milkbowl/vault/Vault.java @@ -15,14 +15,6 @@ */ package net.milkbowl.vault; -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.net.URL; -import java.net.URLConnection; -import java.util.Collection; -import java.util.concurrent.Callable; -import java.util.logging.Logger; - import net.milkbowl.vault.chat.Chat; import net.milkbowl.vault.chat.plugins.Chat_DroxPerms; import net.milkbowl.vault.chat.plugins.Chat_GroupManager; @@ -30,6 +22,7 @@ import net.milkbowl.vault.chat.plugins.Chat_OverPermissions; import net.milkbowl.vault.chat.plugins.Chat_Permissions3; import net.milkbowl.vault.chat.plugins.Chat_PermissionsEx; import net.milkbowl.vault.chat.plugins.Chat_Privileges; +import net.milkbowl.vault.chat.plugins.Chat_TotalPermissions; import net.milkbowl.vault.chat.plugins.Chat_bPermissions; import net.milkbowl.vault.chat.plugins.Chat_bPermissions2; import net.milkbowl.vault.chat.plugins.Chat_iChat; @@ -40,6 +33,7 @@ import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.permission.Permission; import net.milkbowl.vault.permission.plugins.Permission_DroxPerms; import net.milkbowl.vault.permission.plugins.Permission_GroupManager; +import net.milkbowl.vault.permission.plugins.Permission_KPerms; import net.milkbowl.vault.permission.plugins.Permission_OverPermissions; import net.milkbowl.vault.permission.plugins.Permission_Permissions3; import net.milkbowl.vault.permission.plugins.Permission_PermissionsBukkit; @@ -48,13 +42,11 @@ import net.milkbowl.vault.permission.plugins.Permission_Privileges; import net.milkbowl.vault.permission.plugins.Permission_SimplyPerms; import net.milkbowl.vault.permission.plugins.Permission_Starburst; import net.milkbowl.vault.permission.plugins.Permission_SuperPerms; +import net.milkbowl.vault.permission.plugins.Permission_TotalPermissions; import net.milkbowl.vault.permission.plugins.Permission_Xperms; import net.milkbowl.vault.permission.plugins.Permission_bPermissions; import net.milkbowl.vault.permission.plugins.Permission_bPermissions2; -import net.milkbowl.vault.permission.plugins.Permission_TotalPermissions; import net.milkbowl.vault.permission.plugins.Permission_rscPermissions; -import net.milkbowl.vault.permission.plugins.Permission_KPerms; - import org.bstats.bukkit.Metrics; import org.bstats.charts.SimplePie; import org.bukkit.Bukkit; @@ -76,7 +68,14 @@ import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.JSONValue; -import net.milkbowl.vault.chat.plugins.Chat_TotalPermissions; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.URL; +import java.net.URLConnection; +import java.util.Collection; +import java.util.concurrent.Callable; +import java.util.concurrent.TimeUnit; +import java.util.logging.Logger; public class Vault extends JavaPlugin { @@ -89,12 +88,13 @@ public class Vault extends JavaPlugin { private String currentVersionTitle = ""; private ServicesManager sm; private Vault plugin; + private boolean folia; @Override public void onDisable() { // Remove all Service Registrations getServer().getServicesManager().unregisterAll(this); - Bukkit.getScheduler().cancelTasks(this); + schedulerCancelTasks(this); } @Override @@ -104,6 +104,8 @@ public class Vault extends JavaPlugin { currentVersionTitle = getDescription().getVersion().split("-")[0]; currentVersion = Double.valueOf(currentVersionTitle.replaceFirst("\\.", "")); sm = getServer().getServicesManager(); + folia = packagesExists("io.papermc.paper.threadedregions.scheduler.AsyncScheduler"); + // set defaults getConfig().addDefault("update-check", true); getConfig().options().copyDefaults(true); @@ -117,7 +119,7 @@ public class Vault extends JavaPlugin { getServer().getPluginManager().registerEvents(new VaultListener(), this); // Schedule to check the version every 30 minutes for an update. This is to update the most recent // version so if an admin reconnects they will be warned about newer versions. - this.getServer().getScheduler().runTask(this, new Runnable() { + schedulerRunTask(this, new Runnable() { @Override public void run() { @@ -131,7 +133,7 @@ public class Vault extends JavaPlugin { } perm.setDescription("Allows a user or the console to check for vault updates"); - getServer().getScheduler().runTaskTimerAsynchronously(plugin, new Runnable() { + schedulerRunTaskTimerAsynchronously(plugin, new Runnable() { @Override public void run() { @@ -421,6 +423,31 @@ public class Vault extends JavaPlugin { sender.sendMessage(String.format("[%s] Chat: %s [%s]", getDescription().getName(), chat == null ? "None" : chat.getName(), registeredChats)); } + private void schedulerRunTask(Plugin plugin, Runnable runnable) { + if (folia) { + Bukkit.getGlobalRegionScheduler().execute(plugin, runnable); + } else { + Bukkit.getScheduler().runTask(plugin, runnable); + } + } + + private void schedulerRunTaskTimerAsynchronously(Plugin plugin, Runnable runnable, long delay, long period) { + if (folia) { + Bukkit.getAsyncScheduler().runAtFixedRate(plugin, st -> runnable.run(), delay, period * 50L, TimeUnit.MILLISECONDS); + } else { + Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, runnable, delay, period); + } + } + + private void schedulerCancelTasks(Plugin plugin) { + if (folia) { + Bukkit.getAsyncScheduler().cancelTasks(plugin); + Bukkit.getGlobalRegionScheduler().cancelTasks(plugin); + } else { + Bukkit.getScheduler().cancelTasks(plugin); + } + } + /** * Determines if all packages in a String array are within the Classpath * This is the best way to determine if a specific plugin exists and will be