diff --git a/Vault-1.7.3.jar b/Vault-1.7.3.jar new file mode 100644 index 00000000..297cadd6 Binary files /dev/null and b/Vault-1.7.3.jar differ diff --git a/plugin.yml b/plugin.yml index 8591ddcc..d20495a4 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 f91cfd6a..dd09eefe 100644 --- a/pom.xml +++ b/pom.xml @@ -67,13 +67,25 @@ codemc-repo https://repo.codemc.org/repository/maven-public + + papermc + https://repo.papermc.io/repository/maven-public/ + + + + dev.folia + folia-api + 1.20.1-R0.1-SNAPSHOT + provided + org.bukkit bukkit ${bukkitVersion} + provided net.milkbowl.vault diff --git a/src/net/milkbowl/vault/FoliaUtil.java b/src/net/milkbowl/vault/FoliaUtil.java new file mode 100644 index 00000000..592e6780 --- /dev/null +++ b/src/net/milkbowl/vault/FoliaUtil.java @@ -0,0 +1,14 @@ +package net.milkbowl.vault; + +public final class FoliaUtil { + private FoliaUtil() {} + + public static boolean isFolia() { + try { + Class.forName("io.papermc.paper.threadedregions.RegionizedServer"); + return true; + } catch (ClassNotFoundException e) { + return false; + } + } +} diff --git a/src/net/milkbowl/vault/Vault.java b/src/net/milkbowl/vault/Vault.java index f085f0e5..3cf714e0 100644 --- a/src/net/milkbowl/vault/Vault.java +++ b/src/net/milkbowl/vault/Vault.java @@ -58,6 +58,7 @@ import org.bstats.bukkit.Metrics; import org.bstats.charts.SimplePie; import org.bukkit.Bukkit; +import java.util.concurrent.TimeUnit; import org.bukkit.OfflinePlayer; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -94,7 +95,12 @@ public class Vault extends JavaPlugin { public void onDisable() { // Remove all Service Registrations getServer().getServicesManager().unregisterAll(this); - Bukkit.getScheduler().cancelTasks(this); + if (FoliaUtil.isFolia()) { + Bukkit.getServer().getGlobalRegionScheduler().cancelTasks(this); + Bukkit.getServer().getAsyncScheduler().cancelTasks(this); + } else { + Bukkit.getScheduler().cancelTasks(this); + } } @Override @@ -115,45 +121,48 @@ public void onEnable() { getCommand("vault-info").setExecutor(this); getCommand("vault-convert").setExecutor(this); getServer().getPluginManager().registerEvents(new VaultListener(), this); - // Schedule to check the version every 30 minutes for an update. This is to update the most recent + // 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() { - - @Override - public void run() { - // Programmatically set the default permission value cause Bukkit doesn't handle plugin.yml properly for Load order STARTUP plugins - org.bukkit.permissions.Permission perm = getServer().getPluginManager().getPermission("vault.update"); - if (perm == null) - { - perm = new org.bukkit.permissions.Permission("vault.update"); - perm.setDefault(PermissionDefault.OP); - plugin.getServer().getPluginManager().addPermission(perm); - } - perm.setDescription("Allows a user or the console to check for vault updates"); - - getServer().getScheduler().runTaskTimerAsynchronously(plugin, new Runnable() { - - @Override - public void run() { - if (getServer().getConsoleSender().hasPermission("vault.update") && getConfig().getBoolean("update-check", true)) { - try { - log.info("Checking for Updates ... "); - newVersion = updateCheck(currentVersion); - if (newVersion > currentVersion) { - log.warning("Stable Version: " + newVersionTitle + " is out!" + " You are still running version: " + currentVersionTitle); - log.warning("Update at: https://dev.bukkit.org/projects/vault"); - } else if (currentVersion > newVersion) { - log.info("Stable Version: " + newVersionTitle + " | Current Version: " + currentVersionTitle); - } - } catch (Exception e) { - // ignore exceptions - } + Runnable updateCheckStarter = () -> { + // Programmatically set the default permission value cause Bukkit doesn't handle plugin.yml properly for Load order STARTUP plugins + org.bukkit.permissions.Permission perm = getServer().getPluginManager().getPermission("vault.update"); + if (perm == null) { + perm = new org.bukkit.permissions.Permission("vault.update"); + perm.setDefault(PermissionDefault.OP); + plugin.getServer().getPluginManager().addPermission(perm); + } + perm.setDescription("Allows a user or the console to check for vault updates"); + + Runnable updateTask = () -> { + if (getServer().getConsoleSender().hasPermission("vault.update") && getConfig().getBoolean("update-check", true)) { + try { + log.info("Checking for Updates ... "); + newVersion = updateCheck(currentVersion); + if (newVersion > currentVersion) { + log.warning("Stable Version: " + newVersionTitle + " is out!" + " You are still running version: " + currentVersionTitle); + log.warning("Update at: https://dev.bukkit.org/projects/vault"); + } else if (currentVersion > newVersion) { + log.info("Stable Version: " + newVersionTitle + " | Current Version: " + currentVersionTitle); } + } catch (Exception e) { + // ignore exceptions } - }, 0, 432000); + } + }; + if (FoliaUtil.isFolia()) { + // 432000 ticks * 50ms/tick = 21 600 000 ms (6 hours) + Bukkit.getServer().getAsyncScheduler().runAtFixedRate(plugin, t -> updateTask.run(), 0L, 21600000L, TimeUnit.MILLISECONDS); + } else { + getServer().getScheduler().runTaskTimerAsynchronously(plugin, updateTask, 0, 432000); } - }); + }; + + if (FoliaUtil.isFolia()) { + Bukkit.getServer().getGlobalRegionScheduler().run(plugin, t -> updateCheckStarter.run()); + } else { + this.getServer().getScheduler().runTask(this, updateCheckStarter); + } // Load up the Plugin metrics Metrics metrics = new Metrics(this, 887);