From c72a428bc06a0be65f513a9db94cf1f77b84d3eb Mon Sep 17 00:00:00 2001 From: nivcoo <36514752+nivcoo@users.noreply.github.com> Date: Mon, 15 Mar 2021 17:24:28 +0100 Subject: [PATCH 1/6] improv. fix issue with world change --- .../spazzinq/flightcontrol/EventListener.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/FlightControl/src/main/java/org/spazzinq/flightcontrol/EventListener.java b/FlightControl/src/main/java/org/spazzinq/flightcontrol/EventListener.java index ec8ded69..ad31765e 100644 --- a/FlightControl/src/main/java/org/spazzinq/flightcontrol/EventListener.java +++ b/FlightControl/src/main/java/org/spazzinq/flightcontrol/EventListener.java @@ -92,15 +92,30 @@ private void onMove(PlayerMoveEvent e) { } } + /** + * Checks a player's flight status when they world change, and disables the trail if necessary. + */ + @EventHandler + public void onPlayerChangedWorldEvent(PlayerChangedWorldEvent e) { + Player p = e.getPlayer(); + pl.getFlightManager().check(p); + if (!p.getAllowFlight()) { + pl.getTrailManager().disableTrail(p); + } + + } + /** * Checks a player's flight status when they teleport, and disables the trail if necessary. */ - @EventHandler private void onTP(PlayerTeleportEvent e) { + @EventHandler + private void onTP(PlayerTeleportEvent e) { // Prevent calling on login because another handler takes care of that if (e.getCause() != PlayerTeleportEvent.TeleportCause.UNKNOWN) { Player p = e.getPlayer(); - pl.getFlightManager().check(p); + if (e.getFrom().getWorld().equals(e.getTo().getWorld())) + pl.getFlightManager().check(p); // Fixes a bug where particles remain when not supposed so if (!p.getAllowFlight()) { @@ -233,4 +248,4 @@ public void run() { @EventHandler private void onWorldInit(WorldInitEvent e) { pl.getPermissionManager().registerDefaultFlyPerms(e.getWorld().getName()); } -} \ No newline at end of file +} From 74cceaa5d9da44adff6a6c83ed76c094d18624bc Mon Sep 17 00:00:00 2001 From: nivcoo <36514752+nivcoo@users.noreply.github.com> Date: Mon, 15 Mar 2021 17:54:32 +0100 Subject: [PATCH 2/6] improv. fix issue with world change --- .../flightcontrol/manager/FlightManager.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/FlightControl/src/main/java/org/spazzinq/flightcontrol/manager/FlightManager.java b/FlightControl/src/main/java/org/spazzinq/flightcontrol/manager/FlightManager.java index d4d9189e..94c343e1 100644 --- a/FlightControl/src/main/java/org/spazzinq/flightcontrol/manager/FlightManager.java +++ b/FlightControl/src/main/java/org/spazzinq/flightcontrol/manager/FlightManager.java @@ -69,22 +69,23 @@ public void check(Player p, boolean isCommand) { boolean disable = !disableChecks.isEmpty(); Cause enableCause = enable ? enableChecks.iterator().next().getCause() : null; Cause disableCause = disable ? disableChecks.iterator().next().getCause() : null; - if (p.getAllowFlight()) { // If override or not enabled if (disable || !enable) { disableFlight(p, disableCause,false); } // If all clear to enable + } else if (enable && !disable) { // If directly enabled or auto-enable is enabled + if (isCommand || (pl.getConfManager().isAutoEnable() && !disabledByPlayer.contains(p))) { enableFlight(p, enableCause, isCommand); } else { canEnable(p, enableCause); } // If denied - } else if (isCommand || alreadyCanMsg.contains(p)) { + } else if (isCommand || (alreadyCanMsg.contains(p) && !disabledByPlayer.contains(p))) { cannotEnable(p, disableCause); } // If bypassing checks @@ -124,6 +125,9 @@ private void cannotEnable(Player p, Cause cause) { APIManager.getInstance().callEvent(e); if (!e.isCancelled()) { + pl.getPlayerManager().getFlightPlayer(p).getTempflyTimer().pause(); + p.setAllowFlight(false); + p.setFlying(false); alreadyCanMsg.remove(p); Sound.play(p, e.getSound()); msg(p, e.getMessage(), e.isByActionbar()); @@ -140,6 +144,7 @@ private void enableFlight(Player p, Cause cause, boolean isCommand) { if (isCommand) { disabledByPlayer.remove(p); } + alreadyCanMsg.add(p); p.setAllowFlight(true); // Ignore if not double-tapped if (!Sound.playEveryEnable) { @@ -154,16 +159,14 @@ public void disableFlight(Player p, Cause cause, boolean isCommand) { Sound.disableSound, pl.getLangManager().useActionBar(), isCommand); APIManager.getInstance().callEvent(e); - if (!e.isCancelled()) { + pl.getPlayerManager().getFlightPlayer(p).getTempflyTimer().pause(); if (isCommand) { disabledByPlayer.add(p); - alreadyCanMsg.add(p); - } else { - alreadyCanMsg.remove(p); } + alreadyCanMsg.remove(p); if (pl.getConfManager().isCancelFall() && p.isFlying()) { noFallDmg.add(p); From c2b0372cf3fbbd3687c25b04595cb07c6c12039e Mon Sep 17 00:00:00 2001 From: George <26337405+Spazzinq@users.noreply.github.com> Date: Mon, 15 Mar 2021 14:26:45 -0400 Subject: [PATCH 3/6] Revert "improv. fix issue with world change" This reverts commit c72a428bc06a0be65f513a9db94cf1f77b84d3eb. --- .../spazzinq/flightcontrol/EventListener.java | 21 +++---------------- 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/FlightControl/src/main/java/org/spazzinq/flightcontrol/EventListener.java b/FlightControl/src/main/java/org/spazzinq/flightcontrol/EventListener.java index ad31765e..ec8ded69 100644 --- a/FlightControl/src/main/java/org/spazzinq/flightcontrol/EventListener.java +++ b/FlightControl/src/main/java/org/spazzinq/flightcontrol/EventListener.java @@ -92,30 +92,15 @@ private void onMove(PlayerMoveEvent e) { } } - /** - * Checks a player's flight status when they world change, and disables the trail if necessary. - */ - @EventHandler - public void onPlayerChangedWorldEvent(PlayerChangedWorldEvent e) { - Player p = e.getPlayer(); - pl.getFlightManager().check(p); - if (!p.getAllowFlight()) { - pl.getTrailManager().disableTrail(p); - } - - } - /** * Checks a player's flight status when they teleport, and disables the trail if necessary. */ - @EventHandler - private void onTP(PlayerTeleportEvent e) { + @EventHandler private void onTP(PlayerTeleportEvent e) { // Prevent calling on login because another handler takes care of that if (e.getCause() != PlayerTeleportEvent.TeleportCause.UNKNOWN) { Player p = e.getPlayer(); - if (e.getFrom().getWorld().equals(e.getTo().getWorld())) - pl.getFlightManager().check(p); + pl.getFlightManager().check(p); // Fixes a bug where particles remain when not supposed so if (!p.getAllowFlight()) { @@ -248,4 +233,4 @@ public void run() { @EventHandler private void onWorldInit(WorldInitEvent e) { pl.getPermissionManager().registerDefaultFlyPerms(e.getWorld().getName()); } -} +} \ No newline at end of file From dfc24221cc6651f922072790f12626fc6ca31bfc Mon Sep 17 00:00:00 2001 From: George <26337405+Spazzinq@users.noreply.github.com> Date: Mon, 15 Mar 2021 14:59:15 -0400 Subject: [PATCH 4/6] Revert "Revert "improv. fix issue with world change"" This reverts commit c2b0372cf3fbbd3687c25b04595cb07c6c12039e. --- .../spazzinq/flightcontrol/EventListener.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/FlightControl/src/main/java/org/spazzinq/flightcontrol/EventListener.java b/FlightControl/src/main/java/org/spazzinq/flightcontrol/EventListener.java index ec8ded69..ad31765e 100644 --- a/FlightControl/src/main/java/org/spazzinq/flightcontrol/EventListener.java +++ b/FlightControl/src/main/java/org/spazzinq/flightcontrol/EventListener.java @@ -92,15 +92,30 @@ private void onMove(PlayerMoveEvent e) { } } + /** + * Checks a player's flight status when they world change, and disables the trail if necessary. + */ + @EventHandler + public void onPlayerChangedWorldEvent(PlayerChangedWorldEvent e) { + Player p = e.getPlayer(); + pl.getFlightManager().check(p); + if (!p.getAllowFlight()) { + pl.getTrailManager().disableTrail(p); + } + + } + /** * Checks a player's flight status when they teleport, and disables the trail if necessary. */ - @EventHandler private void onTP(PlayerTeleportEvent e) { + @EventHandler + private void onTP(PlayerTeleportEvent e) { // Prevent calling on login because another handler takes care of that if (e.getCause() != PlayerTeleportEvent.TeleportCause.UNKNOWN) { Player p = e.getPlayer(); - pl.getFlightManager().check(p); + if (e.getFrom().getWorld().equals(e.getTo().getWorld())) + pl.getFlightManager().check(p); // Fixes a bug where particles remain when not supposed so if (!p.getAllowFlight()) { @@ -233,4 +248,4 @@ public void run() { @EventHandler private void onWorldInit(WorldInitEvent e) { pl.getPermissionManager().registerDefaultFlyPerms(e.getWorld().getName()); } -} \ No newline at end of file +} From 8629e6bb0d9eeb9a6964e9d45da7948efe342fcd Mon Sep 17 00:00:00 2001 From: nivcoo <36514752+nivcoo@users.noreply.github.com> Date: Mon, 15 Mar 2021 20:07:28 +0100 Subject: [PATCH 5/6] improv. fix issue with world change --- .../spazzinq/flightcontrol/EventListener.java | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/FlightControl/src/main/java/org/spazzinq/flightcontrol/EventListener.java b/FlightControl/src/main/java/org/spazzinq/flightcontrol/EventListener.java index ad31765e..bd992f49 100644 --- a/FlightControl/src/main/java/org/spazzinq/flightcontrol/EventListener.java +++ b/FlightControl/src/main/java/org/spazzinq/flightcontrol/EventListener.java @@ -93,16 +93,12 @@ private void onMove(PlayerMoveEvent e) { } /** - * Checks a player's flight status when they world change, and disables the trail if necessary. - */ + * Checks a player's flight status when they world change, and disables the trail if necessary. + */ @EventHandler public void onPlayerChangedWorldEvent(PlayerChangedWorldEvent e) { Player p = e.getPlayer(); - pl.getFlightManager().check(p); - if (!p.getAllowFlight()) { - pl.getTrailManager().disableTrail(p); - } - + checkPlayer(p); } /** @@ -115,12 +111,15 @@ private void onTP(PlayerTeleportEvent e) { Player p = e.getPlayer(); if (e.getFrom().getWorld().equals(e.getTo().getWorld())) - pl.getFlightManager().check(p); + checkPlayer(p); + } + } - // Fixes a bug where particles remain when not supposed so - if (!p.getAllowFlight()) { - pl.getTrailManager().disableTrail(p); - } + private void checkPlayer(Player p) { + pl.getFlightManager().check(p); + // Fixes a bug where particles remain when not supposed so + if (!p.getAllowFlight()) { + pl.getTrailManager().disableTrail(p); } } From fc7ccfe79c96e6315e6e6408459293a79f3f5c97 Mon Sep 17 00:00:00 2001 From: George <26337405+Spazzinq@users.noreply.github.com> Date: Mon, 15 Mar 2021 15:08:21 -0400 Subject: [PATCH 6/6] Update formatting --- .../spazzinq/flightcontrol/EventListener.java | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/FlightControl/src/main/java/org/spazzinq/flightcontrol/EventListener.java b/FlightControl/src/main/java/org/spazzinq/flightcontrol/EventListener.java index ad31765e..f7d30e90 100644 --- a/FlightControl/src/main/java/org/spazzinq/flightcontrol/EventListener.java +++ b/FlightControl/src/main/java/org/spazzinq/flightcontrol/EventListener.java @@ -92,30 +92,18 @@ private void onMove(PlayerMoveEvent e) { } } - /** - * Checks a player's flight status when they world change, and disables the trail if necessary. - */ - @EventHandler - public void onPlayerChangedWorldEvent(PlayerChangedWorldEvent e) { - Player p = e.getPlayer(); - pl.getFlightManager().check(p); - if (!p.getAllowFlight()) { - pl.getTrailManager().disableTrail(p); - } - - } - /** * Checks a player's flight status when they teleport, and disables the trail if necessary. */ - @EventHandler - private void onTP(PlayerTeleportEvent e) { - // Prevent calling on login because another handler takes care of that + @EventHandler private void onTP(PlayerTeleportEvent e) { + // Only check if not login because onJoin handles login if (e.getCause() != PlayerTeleportEvent.TeleportCause.UNKNOWN) { Player p = e.getPlayer(); - if (e.getFrom().getWorld().equals(e.getTo().getWorld())) + // Only check if same worlds because onWorldChange handles world changes + if (e.getFrom().getWorld().equals(e.getTo().getWorld())) { pl.getFlightManager().check(p); + } // Fixes a bug where particles remain when not supposed so if (!p.getAllowFlight()) { @@ -124,6 +112,23 @@ private void onTP(PlayerTeleportEvent e) { } } + /** + * Checks a player's flight status when they change worlds, and disables the trail if necessary. + * + * Note: Must use world change event because otherwise the manager checks from the previous + * world and enables flight incorrectly. + */ + @EventHandler private void onWorldChange(PlayerChangedWorldEvent e) { + Player p = e.getPlayer(); + + pl.getFlightManager().check(p); + + if (!p.getAllowFlight()) { + pl.getTrailManager().disableTrail(p); + } + + } + /** * Pauses temporary flight timer and removes trail on player disconnect. */ @@ -211,7 +216,8 @@ public void run() { * Checks tempfly timer when a player interacts * with a sign because signs may affect tempfly status. */ - @EventHandler(priority = EventPriority.MONITOR) private void onSignInteract(PlayerInteractEvent e) { + @EventHandler(priority = EventPriority.MONITOR) + private void onSignInteract(PlayerInteractEvent e) { if (e.hasBlock()) { // Workaround for multiple versions (I hope) if (e.getClickedBlock().getState() instanceof Sign) {