diff --git a/api/src/main/java/net/momirealms/customcrops/api/scheduler/Scheduler.java b/api/src/main/java/net/momirealms/customcrops/api/scheduler/Scheduler.java index 2e72170..01ba2f4 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/scheduler/Scheduler.java +++ b/api/src/main/java/net/momirealms/customcrops/api/scheduler/Scheduler.java @@ -18,6 +18,7 @@ package net.momirealms.customcrops.api.scheduler; import org.bukkit.Location; +import org.bukkit.World; import java.util.concurrent.TimeUnit; @@ -31,6 +32,16 @@ public interface Scheduler { */ void runTaskSync(Runnable runnable, Location location); + /** + * Runs a task synchronously on the main server thread or region thread. + * + * @param runnable The task to run. + * @param world world + * @param x chunk X + * @param z chunk Z + */ + void runTaskSync(Runnable runnable, World world, int x, int z); + /** * Runs a task synchronously with a specified delay and period. * diff --git a/build.gradle.kts b/build.gradle.kts index 599279b..047e8fa 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ plugins { allprojects { project.group = "net.momirealms" - project.version = "3.4.3.2" + project.version = "3.4.3.3" apply() apply(plugin = "java") diff --git a/plugin/src/main/java/net/momirealms/customcrops/manager/VersionManagerImpl.java b/plugin/src/main/java/net/momirealms/customcrops/manager/VersionManagerImpl.java index 37907d1..15e2318 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/manager/VersionManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customcrops/manager/VersionManagerImpl.java @@ -33,7 +33,7 @@ public class VersionManagerImpl extends VersionManager { private final CustomCropsPlugin plugin; private final String pluginVersion; private final String serverVersion; - private boolean hasRegionScheduler; + private boolean foliaScheduler; private final boolean isSpigot; private final boolean isNewerThan1_19_R2; private final boolean isNewerThan1_19_R3; @@ -83,10 +83,10 @@ public class VersionManagerImpl extends VersionManager { } try { - Class.forName("io.papermc.paper.threadedregions.scheduler.AsyncScheduler"); - this.hasRegionScheduler = true; + Class.forName("io.papermc.paper.threadedregions.RegionizedServer"); + this.foliaScheduler = true; } catch (ClassNotFoundException ignored) { - this.hasRegionScheduler = false; + this.foliaScheduler = false; } // Check if the server is Mojmap @@ -105,7 +105,7 @@ public class VersionManagerImpl extends VersionManager { @Override public boolean hasRegionScheduler() { - return hasRegionScheduler; + return foliaScheduler; } @Override diff --git a/plugin/src/main/java/net/momirealms/customcrops/mechanic/world/CWorld.java b/plugin/src/main/java/net/momirealms/customcrops/mechanic/world/CWorld.java index d693fa0..6ce3304 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/mechanic/world/CWorld.java +++ b/plugin/src/main/java/net/momirealms/customcrops/mechanic/world/CWorld.java @@ -21,6 +21,7 @@ import net.momirealms.customcrops.api.CustomCropsPlugin; import net.momirealms.customcrops.api.common.Pair; import net.momirealms.customcrops.api.event.SeasonChangeEvent; import net.momirealms.customcrops.api.manager.ConfigManager; +import net.momirealms.customcrops.api.manager.VersionManager; import net.momirealms.customcrops.api.manager.WorldManager; import net.momirealms.customcrops.api.mechanic.item.Crop; import net.momirealms.customcrops.api.mechanic.item.Fertilizer; @@ -33,6 +34,7 @@ import net.momirealms.customcrops.api.mechanic.world.SimpleLocation; import net.momirealms.customcrops.api.mechanic.world.level.*; import net.momirealms.customcrops.api.mechanic.world.season.Season; import net.momirealms.customcrops.api.scheduler.CancellableTask; +import net.momirealms.customcrops.api.scheduler.Scheduler; import net.momirealms.customcrops.api.util.LogUtils; import net.momirealms.customcrops.utils.EventUtils; import org.bukkit.World; @@ -119,8 +121,15 @@ public class CWorld implements CustomCropsWorld { this.updateSeasonAndDate(); } if (setting.isSchedulerEnabled()) { - for (CChunk chunk : loadedChunks.values()) { - chunk.secondTimer(); + if (VersionManager.folia()) { + Scheduler scheduler = CustomCropsPlugin.get().getScheduler(); + for (CChunk chunk : loadedChunks.values()) { + scheduler.runTaskSync(chunk::secondTimer,world.get(), chunk.getChunkPos().x(), chunk.getChunkPos().z()); + } + } else { + for (CChunk chunk : loadedChunks.values()) { + chunk.secondTimer(); + } } } diff --git a/plugin/src/main/java/net/momirealms/customcrops/scheduler/BukkitSchedulerImpl.java b/plugin/src/main/java/net/momirealms/customcrops/scheduler/BukkitSchedulerImpl.java index ea59af1..76774f3 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/scheduler/BukkitSchedulerImpl.java +++ b/plugin/src/main/java/net/momirealms/customcrops/scheduler/BukkitSchedulerImpl.java @@ -21,6 +21,7 @@ import net.momirealms.customcrops.api.CustomCropsPlugin; import net.momirealms.customcrops.api.scheduler.CancellableTask; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.World; import org.bukkit.scheduler.BukkitTask; public class BukkitSchedulerImpl implements SyncScheduler { @@ -39,6 +40,11 @@ public class BukkitSchedulerImpl implements SyncScheduler { Bukkit.getScheduler().runTask(plugin, runnable); } + @Override + public void runSyncTask(Runnable runnable, World world, int x, int z) { + runSyncTask(runnable, null); + } + @Override public CancellableTask runTaskSyncTimer(Runnable runnable, Location location, long delay, long period) { return new BukkitCancellableTask(Bukkit.getScheduler().runTaskTimer(plugin, runnable, delay, period)); diff --git a/plugin/src/main/java/net/momirealms/customcrops/scheduler/FoliaSchedulerImpl.java b/plugin/src/main/java/net/momirealms/customcrops/scheduler/FoliaSchedulerImpl.java index 931eb31..9b6ce82 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/scheduler/FoliaSchedulerImpl.java +++ b/plugin/src/main/java/net/momirealms/customcrops/scheduler/FoliaSchedulerImpl.java @@ -22,6 +22,7 @@ import net.momirealms.customcrops.api.CustomCropsPlugin; import net.momirealms.customcrops.api.scheduler.CancellableTask; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.World; public class FoliaSchedulerImpl implements SyncScheduler { @@ -40,6 +41,11 @@ public class FoliaSchedulerImpl implements SyncScheduler { } } + @Override + public void runSyncTask(Runnable runnable, World world, int x, int z) { + Bukkit.getRegionScheduler().execute(plugin, world, x, z, runnable); + } + @Override public CancellableTask runTaskSyncTimer(Runnable runnable, Location location, long delay, long period) { if (location == null) { diff --git a/plugin/src/main/java/net/momirealms/customcrops/scheduler/SchedulerImpl.java b/plugin/src/main/java/net/momirealms/customcrops/scheduler/SchedulerImpl.java index b493db4..a2022f5 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/scheduler/SchedulerImpl.java +++ b/plugin/src/main/java/net/momirealms/customcrops/scheduler/SchedulerImpl.java @@ -23,6 +23,7 @@ import net.momirealms.customcrops.api.scheduler.CancellableTask; import net.momirealms.customcrops.api.scheduler.Scheduler; import net.momirealms.customcrops.api.util.LogUtils; import org.bukkit.Location; +import org.bukkit.World; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -68,6 +69,11 @@ public class SchedulerImpl implements Scheduler { this.syncScheduler.runSyncTask(runnable, location); } + @Override + public void runTaskSync(Runnable runnable, World world, int x, int z) { + this.syncScheduler.runSyncTask(runnable, world, x, z); + } + @Override public void runTaskAsync(Runnable runnable) { try { diff --git a/plugin/src/main/java/net/momirealms/customcrops/scheduler/SyncScheduler.java b/plugin/src/main/java/net/momirealms/customcrops/scheduler/SyncScheduler.java index b8c3a65..f08621c 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/scheduler/SyncScheduler.java +++ b/plugin/src/main/java/net/momirealms/customcrops/scheduler/SyncScheduler.java @@ -19,11 +19,14 @@ package net.momirealms.customcrops.scheduler; import net.momirealms.customcrops.api.scheduler.CancellableTask; import org.bukkit.Location; +import org.bukkit.World; public interface SyncScheduler { void runSyncTask(Runnable runnable, Location location); + void runSyncTask(Runnable runnable, World world, int x, int z); + CancellableTask runTaskSyncTimer(Runnable runnable, Location location, long delayTicks, long periodTicks); CancellableTask runTaskSyncLater(Runnable runnable, Location location, long delayTicks);