From f123c88016ab085d20934d45f127d79f8898435e Mon Sep 17 00:00:00 2001 From: Bierque Euphyllia Date: Thu, 5 Mar 2026 23:26:51 +0100 Subject: [PATCH 1/5] Basic Folia Support --- gradle/libs.versions.toml | 4 +- .../bukkit/BukkitRegionContainer.java | 6 ++- .../worldguard/bukkit/WorldGuardPlugin.java | 52 ++++++++++++++++--- .../listener/EventAbstractionListener.java | 10 +++- .../bukkit/listener/PlayerMoveListener.java | 15 ++++-- .../listener/WorldGuardVehicleListener.java | 5 +- .../bukkit/session/BukkitSessionManager.java | 29 ++++++++--- .../bukkit/util/report/SchedulerReport.java | 2 + .../src/main/resources/plugin.yml | 1 + 9 files changed, 100 insertions(+), 24 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 88d22880e..ba9c2fcab 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -worldedit = "7.3.18" +worldedit = "7.4.1-SNAPSHOT" # Minimum versions we apply to make dependencies support newer Java minimumAsm = "9.7" @@ -31,7 +31,7 @@ paperApi = "io.papermc.paper:paper-api:1.21.11-R0.1-SNAPSHOT" paperLib = "io.papermc:paperlib:1.0.8" dummypermscompat = "com.sk89q:dummypermscompat:1.10" -bstats-bukkit = "org.bstats:bstats-bukkit:2.2.1" +bstats-bukkit = "org.bstats:bstats-bukkit:3.2.1" prtree = "org.khelekore:prtree:1.5.0" diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitRegionContainer.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitRegionContainer.java index 79d7b3446..58ebec2b1 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitRegionContainer.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitRegionContainer.java @@ -94,7 +94,11 @@ public void onChunkUnload(ChunkUnloadEvent event) { } }, plugin); - Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, cache::invalidateAll, CACHE_INVALIDATION_INTERVAL, CACHE_INVALIDATION_INTERVAL); + if (WorldGuardPlugin.inst().isFolia()) { + Bukkit.getGlobalRegionScheduler().runAtFixedRate(plugin, scheduledTask -> cache.invalidateAll(), CACHE_INVALIDATION_INTERVAL, CACHE_INVALIDATION_INTERVAL); + } else { + Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, cache::invalidateAll, CACHE_INVALIDATION_INTERVAL, CACHE_INVALIDATION_INTERVAL); + } } public void shutdown() { diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardPlugin.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardPlugin.java index 86aefb550..31abda6af 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardPlugin.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardPlugin.java @@ -33,6 +33,8 @@ import com.sk89q.worldedit.bukkit.BukkitCommandSender; import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldedit.extension.platform.Actor; +import com.sk89q.worldedit.internal.util.LogManagerCompat; +import com.sk89q.worldedit.util.concurrency.LazyReference; import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.blacklist.Blacklist; @@ -74,6 +76,8 @@ import com.sk89q.worldguard.protection.managers.storage.sql.SQLDriver; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.util.logging.RecordMessagePrefixer; +import io.papermc.lib.PaperLib; +import io.papermc.paper.ServerBuildInfo; import org.bstats.bukkit.Metrics; import org.bstats.charts.DrilldownPie; import org.bstats.charts.SimplePie; @@ -103,6 +107,7 @@ */ public class WorldGuardPlugin extends JavaPlugin { + private static final org.apache.logging.log4j.Logger LOGGER = LogManagerCompat.getLogger(); private static WorldGuardPlugin inst; private static BukkitWorldGuardPlatform platform; private final CommandsManager commands; @@ -163,7 +168,11 @@ public void onEnable() { reg.register(GeneralCommands.class); } - getServer().getScheduler().scheduleSyncRepeatingTask(this, sessionManager, BukkitSessionManager.RUN_DELAY, BukkitSessionManager.RUN_DELAY); + if (this.isFolia()) { + getServer().getGlobalRegionScheduler().runAtFixedRate(this, scheduledTask -> sessionManager.run(), BukkitSessionManager.RUN_DELAY, BukkitSessionManager.RUN_DELAY); + } else { + getServer().getScheduler().scheduleSyncRepeatingTask(this, sessionManager, BukkitSessionManager.RUN_DELAY, BukkitSessionManager.RUN_DELAY); + } // Register events getServer().getPluginManager().registerEvents(sessionManager, this); @@ -204,12 +213,21 @@ public void onEnable() { } worldListener.registerEvents(); - Bukkit.getScheduler().runTask(this, () -> { + if (this.isFolia()) { for (Player player : Bukkit.getServer().getOnlinePlayers()) { - ProcessPlayerEvent event = new ProcessPlayerEvent(player); - Events.fire(event); + player.getScheduler().run(this, scheduledTask -> { + ProcessPlayerEvent event = new ProcessPlayerEvent(player); + Events.fire(event); + }, null); } - }); + } else { + Bukkit.getScheduler().runTask(this, () -> { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + ProcessPlayerEvent event = new ProcessPlayerEvent(player); + Events.fire(event); + } + }); + } ((SimpleFlagRegistry) WorldGuard.getInstance().getFlagRegistry()).setInitialized(true); @@ -264,7 +282,12 @@ private void setupCustomCharts(Metrics metrics) { @Override public void onDisable() { WorldGuard.getInstance().disable(); - this.getServer().getScheduler().cancelTasks(this); + if (this.isFolia()) { + this.getServer().getGlobalRegionScheduler().cancelTasks(this); + this.getServer().getAsyncScheduler().cancelTasks(this); + } else { + this.getServer().getScheduler().cancelTasks(this); + } } @Override @@ -523,5 +546,22 @@ private void copyDefaultConfig(InputStream input, File actual, String name) { public PlayerMoveListener getPlayerMoveListener() { return playerMoveListener; } + private final LazyReference folia = LazyReference.from(() -> { + try { + // Folia is Paper-based, so this is a good first check. + if (PaperLib.isPaper()) { + return ServerBuildInfo.buildInfo().isBrandCompatible(net.kyori.adventure.key.Key.key("papermc", "folia")); + } + } catch (Throwable t) { + // Ignore, this likely means an outdated version. + LOGGER.warn("Failed to check if server is running Folia", t); + } + + return false; + }); + + public boolean isFolia() { + return folia.getValue(); + } } diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java index 22e0aa270..0aa8a3c55 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java @@ -1045,8 +1045,14 @@ public void onInventoryMoveItem(InventoryMoveItemEvent event) { } if (event.isCancelled() && causeHolder instanceof Hopper && wcfg.breakDeniedHoppers) { - Bukkit.getScheduler().scheduleSyncDelayedTask(getPlugin(), - () -> ((Hopper) causeHolder).getBlock().breakNaturally()); + Hopper hopper = (Hopper) causeHolder; + if (WorldGuardPlugin.inst().isFolia()) { + Bukkit.getRegionScheduler().run(getPlugin(), hopper.getLocation(), + (scheduledTask) -> hopper.getBlock().breakNaturally()); + } else { + Bukkit.getScheduler().scheduleSyncDelayedTask(getPlugin(), + () -> hopper.getBlock().breakNaturally()); + } } else { entry.setCancelled(event.isCancelled()); } diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.java index 7b95a5743..a3457bcb0 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.java @@ -25,6 +25,7 @@ import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.session.MoveType; import com.sk89q.worldguard.session.Session; +import io.papermc.lib.PaperLib; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.AbstractHorse; @@ -118,16 +119,20 @@ public void onPlayerMove(PlayerMoveEvent event) { current.eject(); vehicle.setVelocity(new Vector()); if (vehicle instanceof LivingEntity) { - vehicle.teleport(override.clone()); + PaperLib.teleportAsync(vehicle, override.clone()); } else { - vehicle.teleport(override.clone().add(0, 1, 0)); + PaperLib.teleportAsync(vehicle, override.clone().add(0, 1, 0)); } current = current.getVehicle(); } - player.teleport(override.clone().add(0, 1, 0)); + PaperLib.teleportAsync(player, override.clone().add(0, 1, 0)); - Bukkit.getScheduler().runTaskLater(getPlugin(), () -> player.teleport(override.clone().add(0, 1, 0)), 1); + if (getPlugin().isFolia()) { + player.getScheduler().runDelayed(getPlugin(), scheduledTask -> PaperLib.teleportAsync(player, override.clone().add(0, 1, 0)), null, 1); + } else { + Bukkit.getScheduler().runTaskLater(getPlugin(), () -> player.teleport(override.clone().add(0, 1, 0)), 1); + } } } } @@ -141,7 +146,7 @@ public void onPlayerQuit(PlayerQuitEvent event) { com.sk89q.worldedit.util.Location loc = session.testMoveTo(localPlayer, BukkitAdapter.adapt(event.getPlayer().getLocation()), MoveType.OTHER_CANCELLABLE); // white lie if (loc != null) { - player.teleport(BukkitAdapter.adapt(loc)); + PaperLib.teleportAsync(player, BukkitAdapter.adapt(loc)); } session.uninitialize(localPlayer); diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardVehicleListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardVehicleListener.java index fe604dad3..00007c4cc 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardVehicleListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardVehicleListener.java @@ -28,6 +28,7 @@ import com.sk89q.worldguard.config.WorldConfiguration; import com.sk89q.worldguard.session.MoveType; import com.sk89q.worldguard.util.Locations; +import io.papermc.lib.PaperLib; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.entity.Vehicle; @@ -66,10 +67,10 @@ public void onVehicleMove(VehicleMoveEvent event) { if ((lastValid = WorldGuard.getInstance().getPlatform().getSessionManager().get(localPlayer) .testMoveTo(localPlayer, BukkitAdapter.adapt(event.getTo()), MoveType.RIDE)) != null) { vehicle.setVelocity(new Vector(0, 0, 0)); - vehicle.teleport(event.getFrom()); + PaperLib.teleportAsync(vehicle, event.getFrom()); if (Locations.isDifferentBlock(lastValid, BukkitAdapter.adapt(event.getFrom()))) { Vector dir = player.getLocation().getDirection(); - player.teleport(BukkitAdapter.adapt(lastValid).setDirection(dir)); + PaperLib.teleportAsync(player, BukkitAdapter.adapt(lastValid).setDirection(dir)); } return; } diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/session/BukkitSessionManager.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/session/BukkitSessionManager.java index df589cbc0..0fe6b252e 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/session/BukkitSessionManager.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/session/BukkitSessionManager.java @@ -49,10 +49,20 @@ public class BukkitSessionManager extends AbstractSessionManager implements Runn public void resetAllStates() { Collection players = Bukkit.getServer().getOnlinePlayers(); for (Player player : players) { - BukkitPlayer bukkitPlayer = new BukkitPlayer(WorldGuardPlugin.inst(), player); - Session session = getIfPresent(bukkitPlayer); - if (session != null) { - session.resetState(bukkitPlayer); + if (WorldGuardPlugin.inst().isFolia()) { + player.getScheduler().run(WorldGuardPlugin.inst(), scheduledTask -> { + BukkitPlayer bukkitPlayer = new BukkitPlayer(WorldGuardPlugin.inst(), player); + Session session = getIfPresent(bukkitPlayer); + if (session != null) { + session.resetState(bukkitPlayer); + } + }, null); + } else { + BukkitPlayer bukkitPlayer = new BukkitPlayer(WorldGuardPlugin.inst(), player); + Session session = getIfPresent(bukkitPlayer); + if (session != null) { + session.resetState(bukkitPlayer); + } } } } @@ -67,8 +77,15 @@ public void onPlayerProcess(ProcessPlayerEvent event) { @Override public void run() { for (Player player : Bukkit.getServer().getOnlinePlayers()) { - LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player); - get(localPlayer).tick(localPlayer); + if (WorldGuardPlugin.inst().isFolia()) { + player.getScheduler().run(WorldGuardPlugin.inst(), (scheduledTask) -> { + LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player); + get(localPlayer).tick(localPlayer); + }, null); + } else { + LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player); + get(localPlayer).tick(localPlayer); + } } } diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/report/SchedulerReport.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/report/SchedulerReport.java index d897162cf..39cb4769c 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/report/SchedulerReport.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/report/SchedulerReport.java @@ -24,6 +24,7 @@ import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.sk89q.worldedit.util.report.DataReport; +import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import org.bukkit.Bukkit; import org.bukkit.scheduler.BukkitTask; @@ -51,6 +52,7 @@ public Optional load(Class clazz) throws Exception { public SchedulerReport() { super("Scheduler"); + if (WorldGuardPlugin.inst().isFolia()) return; // Todo Add support Schedulers List tasks = Bukkit.getServer().getScheduler().getPendingTasks(); diff --git a/worldguard-bukkit/src/main/resources/plugin.yml b/worldguard-bukkit/src/main/resources/plugin.yml index b0352a641..ef913ee75 100644 --- a/worldguard-bukkit/src/main/resources/plugin.yml +++ b/worldguard-bukkit/src/main/resources/plugin.yml @@ -3,3 +3,4 @@ main: com.sk89q.worldguard.bukkit.WorldGuardPlugin version: "${internalVersion}" depend: [WorldEdit] api-version: "1.21.11" +folia-supported: true \ No newline at end of file From e636c993434a79a8f25a3abc1eb3165619bba148 Mon Sep 17 00:00:00 2001 From: Bierque Euphyllia Date: Fri, 6 Mar 2026 05:00:42 +0100 Subject: [PATCH 2/5] Teleport async only with Folia server --- .../bukkit/listener/PlayerMoveListener.java | 25 ++++++++++++++++--- .../listener/WorldGuardVehicleListener.java | 12 +++++++-- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.java index a3457bcb0..f65cc96af 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.java @@ -119,14 +119,27 @@ public void onPlayerMove(PlayerMoveEvent event) { current.eject(); vehicle.setVelocity(new Vector()); if (vehicle instanceof LivingEntity) { - PaperLib.teleportAsync(vehicle, override.clone()); + if (getPlugin().isFolia()) { + PaperLib.teleportAsync(vehicle, override.clone()); + } else { + vehicle.teleport(override.clone()); + } } else { - PaperLib.teleportAsync(vehicle, override.clone().add(0, 1, 0)); + if (getPlugin().isFolia()) { + PaperLib.teleportAsync(vehicle, override.clone().add(0, 1, 0)); + } else { + vehicle.teleport(override.clone()); + } } current = current.getVehicle(); } - PaperLib.teleportAsync(player, override.clone().add(0, 1, 0)); + if (getPlugin().isFolia()) { + PaperLib.teleportAsync(player, override.clone().add(0, 1, 0)); + } else { + player.teleport(override.clone().add(0, 1, 0)); + } + if (getPlugin().isFolia()) { player.getScheduler().runDelayed(getPlugin(), scheduledTask -> PaperLib.teleportAsync(player, override.clone().add(0, 1, 0)), null, 1); @@ -146,7 +159,11 @@ public void onPlayerQuit(PlayerQuitEvent event) { com.sk89q.worldedit.util.Location loc = session.testMoveTo(localPlayer, BukkitAdapter.adapt(event.getPlayer().getLocation()), MoveType.OTHER_CANCELLABLE); // white lie if (loc != null) { - PaperLib.teleportAsync(player, BukkitAdapter.adapt(loc)); + if (getPlugin().isFolia()) { + PaperLib.teleportAsync(player, BukkitAdapter.adapt(loc)); + } else { + player.teleport(BukkitAdapter.adapt(loc)); + } } session.uninitialize(localPlayer); diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardVehicleListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardVehicleListener.java index 00007c4cc..234c095df 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardVehicleListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardVehicleListener.java @@ -67,10 +67,18 @@ public void onVehicleMove(VehicleMoveEvent event) { if ((lastValid = WorldGuard.getInstance().getPlatform().getSessionManager().get(localPlayer) .testMoveTo(localPlayer, BukkitAdapter.adapt(event.getTo()), MoveType.RIDE)) != null) { vehicle.setVelocity(new Vector(0, 0, 0)); - PaperLib.teleportAsync(vehicle, event.getFrom()); + if (getPlugin().isFolia()) { + PaperLib.teleportAsync(vehicle, event.getFrom()); + } else { + vehicle.teleport(event.getFrom()); + } if (Locations.isDifferentBlock(lastValid, BukkitAdapter.adapt(event.getFrom()))) { Vector dir = player.getLocation().getDirection(); - PaperLib.teleportAsync(player, BukkitAdapter.adapt(lastValid).setDirection(dir)); + if (getPlugin().isFolia()) { + PaperLib.teleportAsync(player, BukkitAdapter.adapt(lastValid).setDirection(dir)); + } else { + player.teleport(BukkitAdapter.adapt(lastValid).setDirection(dir)); + } } return; } From c83654f74771a355fc07db072c9a2456521b4ab2 Mon Sep 17 00:00:00 2001 From: Bierque Euphyllia Date: Fri, 6 Mar 2026 05:01:49 +0100 Subject: [PATCH 3/5] restore --- .../sk89q/worldguard/bukkit/listener/PlayerMoveListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.java index f65cc96af..0b3b1e709 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.java @@ -128,7 +128,7 @@ public void onPlayerMove(PlayerMoveEvent event) { if (getPlugin().isFolia()) { PaperLib.teleportAsync(vehicle, override.clone().add(0, 1, 0)); } else { - vehicle.teleport(override.clone()); + vehicle.teleport(override.clone().add(0, 1, 0)); } } current = current.getVehicle(); From 4ad86edf7c538f4d4038cb657764bdfe2fb65174 Mon Sep 17 00:00:00 2001 From: Bierque Euphyllia Date: Sat, 7 Mar 2026 10:08:28 +0100 Subject: [PATCH 4/5] Extract the location for teleportation and add the {} --- .../bukkit/listener/PlayerMoveListener.java | 26 +++++++++++-------- .../bukkit/util/report/SchedulerReport.java | 4 ++- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.java index 0b3b1e709..7c7e0e259 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.java @@ -119,32 +119,36 @@ public void onPlayerMove(PlayerMoveEvent event) { current.eject(); vehicle.setVelocity(new Vector()); if (vehicle instanceof LivingEntity) { + Location vehicleTeleportLocation = override.clone(); if (getPlugin().isFolia()) { - PaperLib.teleportAsync(vehicle, override.clone()); + PaperLib.teleportAsync(vehicle, vehicleTeleportLocation); } else { - vehicle.teleport(override.clone()); + vehicle.teleport(vehicleTeleportLocation); } } else { - if (getPlugin().isFolia()) { - PaperLib.teleportAsync(vehicle, override.clone().add(0, 1, 0)); - } else { - vehicle.teleport(override.clone().add(0, 1, 0)); - } + Location dismountLocation = override.clone().add(0, 1, 0); + if (getPlugin().isFolia()) { + PaperLib.teleportAsync(vehicle, dismountLocation); + } else { + vehicle.teleport(dismountLocation); + } } current = current.getVehicle(); } + Location playerDismountLocation = override.clone().add(0, 1, 0); if (getPlugin().isFolia()) { - PaperLib.teleportAsync(player, override.clone().add(0, 1, 0)); + PaperLib.teleportAsync(player, playerDismountLocation); } else { - player.teleport(override.clone().add(0, 1, 0)); + player.teleport(playerDismountLocation); } + Location delayedDismountLocation = override.clone().add(0, 1, 0); if (getPlugin().isFolia()) { - player.getScheduler().runDelayed(getPlugin(), scheduledTask -> PaperLib.teleportAsync(player, override.clone().add(0, 1, 0)), null, 1); + player.getScheduler().runDelayed(getPlugin(), scheduledTask -> PaperLib.teleportAsync(player, delayedDismountLocation), null, 1); } else { - Bukkit.getScheduler().runTaskLater(getPlugin(), () -> player.teleport(override.clone().add(0, 1, 0)), 1); + Bukkit.getScheduler().runTaskLater(getPlugin(), () -> player.teleport(delayedDismountLocation), 1); } } } diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/report/SchedulerReport.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/report/SchedulerReport.java index 39cb4769c..ea0ec2076 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/report/SchedulerReport.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/report/SchedulerReport.java @@ -52,7 +52,9 @@ public Optional load(Class clazz) throws Exception { public SchedulerReport() { super("Scheduler"); - if (WorldGuardPlugin.inst().isFolia()) return; // Todo Add support Schedulers + if (WorldGuardPlugin.inst().isFolia()) { + return; // Todo Add support Schedulers + } List tasks = Bukkit.getServer().getScheduler().getPendingTasks(); From 8e001d309f5faf5673699e5706fed224913cffff Mon Sep 17 00:00:00 2001 From: Bierque Euphyllia Date: Sat, 7 Mar 2026 10:14:17 +0100 Subject: [PATCH 5/5] Extract the location for teleportation --- .../listener/WorldGuardVehicleListener.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardVehicleListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardVehicleListener.java index 234c095df..5f7ade69c 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardVehicleListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardVehicleListener.java @@ -56,28 +56,30 @@ public void onVehicleMove(VehicleMoveEvent event) { } World world = vehicle.getWorld(); WorldConfiguration wcfg = getWorldConfig(world); - + org.bukkit.Location from = event.getFrom(); + org.bukkit.Location to = event.getTo(); if (wcfg.useRegions) { // Did we move a block? - if (Locations.isDifferentBlock(BukkitAdapter.adapt(event.getFrom()), BukkitAdapter.adapt(event.getTo()))) { + if (Locations.isDifferentBlock(BukkitAdapter.adapt(from), BukkitAdapter.adapt(to))) { for (Player player : playerPassengers) { if (Entities.isNPC(player)) continue; LocalPlayer localPlayer = getPlugin().wrapPlayer(player); Location lastValid; if ((lastValid = WorldGuard.getInstance().getPlatform().getSessionManager().get(localPlayer) - .testMoveTo(localPlayer, BukkitAdapter.adapt(event.getTo()), MoveType.RIDE)) != null) { + .testMoveTo(localPlayer, BukkitAdapter.adapt(to), MoveType.RIDE)) != null) { vehicle.setVelocity(new Vector(0, 0, 0)); if (getPlugin().isFolia()) { - PaperLib.teleportAsync(vehicle, event.getFrom()); + PaperLib.teleportAsync(vehicle, from); } else { - vehicle.teleport(event.getFrom()); + vehicle.teleport(from); } - if (Locations.isDifferentBlock(lastValid, BukkitAdapter.adapt(event.getFrom()))) { + if (Locations.isDifferentBlock(lastValid, BukkitAdapter.adapt(from))) { Vector dir = player.getLocation().getDirection(); + org.bukkit.Location playerTeleportLocation = BukkitAdapter.adapt(lastValid).setDirection(dir); if (getPlugin().isFolia()) { - PaperLib.teleportAsync(player, BukkitAdapter.adapt(lastValid).setDirection(dir)); + PaperLib.teleportAsync(player, playerTeleportLocation); } else { - player.teleport(BukkitAdapter.adapt(lastValid).setDirection(dir)); + player.teleport(playerTeleportLocation); } } return;