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