diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index 8e444c6c7..53f661f80 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -260,6 +260,7 @@ public class EssentialsPlayerListener implements Listener, FakeAccessor { user.setGodModeEnabled(false); } if (user.isVanished()) { + user.setLeavingHidden(true); user.setVanished(false); } user.setLogoutLocation(); @@ -334,6 +335,7 @@ public class EssentialsPlayerListener implements Listener, FakeAccessor { user.setLastLogin(currentTime); user.setDisplayNick(); updateCompass(user); + user.setLeavingHidden(false); // Check for new username. If they don't want the message, let's just say it's false. final boolean newUsername = ess.getSettings().isCustomNewUsernameMessage() && lastAccountName != null && !lastAccountName.equals(user.getBase().getName()); diff --git a/Essentials/src/main/java/com/earth2me/essentials/IUser.java b/Essentials/src/main/java/com/earth2me/essentials/IUser.java index b8784add5..f74c7bd03 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/IUser.java +++ b/Essentials/src/main/java/com/earth2me/essentials/IUser.java @@ -94,6 +94,15 @@ public interface IUser { */ boolean isHidden(); + /** + * Whether the user was hidden before leaving the server. + * + * @return true if the user was hidden. + */ + boolean isLeavingHidden(); + + void setLeavingHidden(boolean leavingHidden); + void setHidden(boolean vanish); boolean isGodModeEnabled(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/User.java b/Essentials/src/main/java/com/earth2me/essentials/User.java index 9f13cde5b..96ea5a0e6 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/User.java +++ b/Essentials/src/main/java/com/earth2me/essentials/User.java @@ -68,6 +68,7 @@ public class User extends UserData implements Comparable, IMessageRecipien // User properties private transient boolean vanished; private boolean hidden = false; + private boolean leavingHidden = false; private boolean rightClickJump = false; private boolean invSee = false; private boolean recipeSee = false; @@ -681,6 +682,16 @@ public class User extends UserData implements Comparable, IMessageRecipien return hidden; } + @Override + public boolean isLeavingHidden() { + return leavingHidden; + } + + @Override + public void setLeavingHidden(boolean leavingHidden) { + this.leavingHidden = leavingHidden; + } + @Override public void setHidden(final boolean hidden) { this.hidden = hidden; diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java index 338f9e25b..07d60ba20 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java @@ -120,7 +120,7 @@ public class BukkitListener implements Listener { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onVanishStatusChange(VanishStatusChangeEvent event) { - if (!jda.getSettings().isVanishFakeJoinLeave()) { + if (!jda.getSettings().isVanishFakeJoinLeave() || event.getAffected().isLeavingHidden()) { return; } if (event.getValue()) { @@ -235,7 +235,7 @@ public class BukkitListener implements Listener { } private boolean isVanishHide(final IUser user) { - return jda.getSettings().isVanishHideMessages() && user.isHidden(); + return jda.getSettings().isVanishHideMessages() && (user.isHidden() || user.isLeavingHidden()); } private void sendDiscordMessage(final MessageType messageType, final String message) {