From ceaff7fde2e0817a2d51498a2d2bcbdf6e766a4d Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 3 Mar 2025 11:29:28 -0500 Subject: [PATCH 1/2] Fix flight ability preservation between worlds Fixes #6041 --- .../essentials/EssentialsPlayerListener.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index 753b3b9a0fc..d5c1de7e8a0 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -595,8 +595,12 @@ public void onPlayerTeleport(final PlayerTeleportEvent event) { if (tickCountProvider != null && ess.getSettings().isWorldChangePreserveFlying() && VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_17_R01)) { if (user.isAuthorized("essentials.fly")) { //noinspection DataFlowIssue - not real - if (event.getFrom().getWorld() != event.getTo().getWorld() && player.isFlying()) { - user.setFlightTick(tickCountProvider.getTickCount()); + if (event.getFrom().getWorld() != event.getTo().getWorld() && player.getAllowFlight()) { + // If the player is not flying but has the ability to fly, we set the sign of the tick count to -1 + // Later on in the PlayerChangedWorldEvent, we will set the player's flying state to true if the tick count is positive. + // If the tick count is negative, we simply just set the player's flight ability to true. + final int tick = player.isFlying() ? tickCountProvider.getTickCount() : -tickCountProvider.getTickCount(); + user.setFlightTick(tick); } } } @@ -778,9 +782,12 @@ public void onPlayerChangedWorldFlyReset(final PlayerChangedWorldEvent event) { } final TickCountProvider tickCountProvider = ess.provider(TickCountProvider.class); - if (tickCountProvider != null && user.getFlightTick() == tickCountProvider.getTickCount() && user.isAuthorized("essentials.fly")) { + final int flightTick = user.getFlightTick(); + if (tickCountProvider != null && Math.abs(flightTick) == tickCountProvider.getTickCount() && user.isAuthorized("essentials.fly")) { user.getBase().setAllowFlight(true); - user.getBase().setFlying(true); + if (Integer.signum(flightTick) == 1) { + user.getBase().setFlying(true); + } } user.setFlightTick(-1); } From 768b82be6b9388869415a3fa85dbd52c0d16d05a Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sun, 9 Mar 2025 10:20:11 -0400 Subject: [PATCH 2/2] Update Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java --- .../java/com/earth2me/essentials/EssentialsPlayerListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index d5c1de7e8a0..8b6b2d51f16 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -785,7 +785,7 @@ public void onPlayerChangedWorldFlyReset(final PlayerChangedWorldEvent event) { final int flightTick = user.getFlightTick(); if (tickCountProvider != null && Math.abs(flightTick) == tickCountProvider.getTickCount() && user.isAuthorized("essentials.fly")) { user.getBase().setAllowFlight(true); - if (Integer.signum(flightTick) == 1) { + if (flightTick > 0) { user.getBase().setFlying(true); } }