diff --git a/src/main/java/de/myzelyam/supervanish/listeners/JoinListener.java b/src/main/java/de/myzelyam/supervanish/listeners/JoinListener.java index bf36edb..4de7651 100644 --- a/src/main/java/de/myzelyam/supervanish/listeners/JoinListener.java +++ b/src/main/java/de/myzelyam/supervanish/listeners/JoinListener.java @@ -71,6 +71,8 @@ public void execute(Listener l, Event event) { // not vanished: // metadata p.removeMetadata("vanished", plugin); + // clear vanish-granted flight that may persist in player data after relog + plugin.getVisibilityChanger().resetVanishFlight(p); } // not necessarily vanished: // recreate files msg @@ -94,4 +96,4 @@ public void run() { plugin.logException(er); } } -} \ No newline at end of file +} diff --git a/src/main/java/de/myzelyam/supervanish/listeners/QuitListener.java b/src/main/java/de/myzelyam/supervanish/listeners/QuitListener.java index 8076f04..6b11829 100644 --- a/src/main/java/de/myzelyam/supervanish/listeners/QuitListener.java +++ b/src/main/java/de/myzelyam/supervanish/listeners/QuitListener.java @@ -47,6 +47,7 @@ public void execute(Listener l, Event event) { || plugin.getSettings().getBoolean("VanishStateFeatures.CheckPermissionOnQuit") && !CommandAction.VANISH_SELF.checkPermission(p, plugin)) { plugin.getVanishStateMgr().setVanishedState(p.getUniqueId(), p.getName(), false, null); + plugin.getVisibilityChanger().resetVanishFlight(p); // check if it should handle the quit msg if (!config.getBoolean("MessageOptions.ReappearOnQuitHideLeaveMsg")) noMsg = true; @@ -64,4 +65,4 @@ public void execute(Listener l, Event event) { plugin.logException(er); } } -} \ No newline at end of file +} diff --git a/src/main/java/de/myzelyam/supervanish/visibility/VisibilityChanger.java b/src/main/java/de/myzelyam/supervanish/visibility/VisibilityChanger.java index 171d6e9..193e843 100644 --- a/src/main/java/de/myzelyam/supervanish/visibility/VisibilityChanger.java +++ b/src/main/java/de/myzelyam/supervanish/visibility/VisibilityChanger.java @@ -140,14 +140,7 @@ public void showPlayer(final Player player, final String showerName, boolean sil else plugin.sendMessage(player, "OnReappearCausedByOtherPlayer", player, showerName); // fly - // remove fly if not spectator or creative and no perm - if (config.getBoolean("InvisibilityFeatures.Fly.DisableOnReappear") - && !player.hasPermission("sv.keepfly") - && (player.getGameMode() == GameMode.SURVIVAL - || player.getGameMode() == GameMode.ADVENTURE) - && config.getBoolean("InvisibilityFeatures.Fly.Enable")) { - player.setAllowFlight(false); - } + resetVanishFlight(player); // call post event PostPlayerShowEvent e2 = new PostPlayerShowEvent(player, silent); plugin.getServer().getPluginManager().callEvent(e2); @@ -156,7 +149,21 @@ public void showPlayer(final Player player, final String showerName, boolean sil } } + /** + * Removes vanish-granted flight from a player who is no longer invisible. + */ + public void resetVanishFlight(Player player) { + if (config.getBoolean("InvisibilityFeatures.Fly.DisableOnReappear") + && !player.hasPermission("sv.keepfly") + && (player.getGameMode() == GameMode.SURVIVAL + || player.getGameMode() == GameMode.ADVENTURE) + && config.getBoolean("InvisibilityFeatures.Fly.Enable")) { + player.setAllowFlight(false); + player.setFlying(false); + } + } + public PlayerHider getHider() { return hider; } -} \ No newline at end of file +}