diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsEntityListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsEntityListener.java index 1d1fbff1eec..1e4bd1fd08f 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsEntityListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsEntityListener.java @@ -171,11 +171,15 @@ public void onPlayerDeathEvent(final PlayerDeathEvent event) { user.setLastLocation(); user.sendTl("backAfterDeath"); } - if (!ess.getSettings().areDeathMessagesEnabled()) { + if (!ess.getSettings().areDeathMessagesEnabled() || isVanishHide(user)) { event.setDeathMessage(""); } } + private boolean isVanishHide(final User user) { + return ess.getSettings().isVanishHideMessages() && user.isHidden(); + } + @EventHandler(priority = EventPriority.LOW) public void onPlayerDeathExpEvent(final PlayerDeathEvent event) { final User user = ess.getUser(event.getEntity()); diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index 3b8c2f6e3f4..618469d68ba 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -294,7 +294,7 @@ public void onPlayerQuit(final PlayerQuitEvent event) { ess.getScheduler().cancelTask(pendingId); } - if (hideJoinQuitMessages() || ess.getSettings().allowSilentJoinQuit() && user.isAuthorized("essentials.silentquit")) { + if (hideJoinQuitMessages() || ess.getSettings().allowSilentJoinQuit() && user.isAuthorized("essentials.silentquit") || isVanishHide(user)) { event.setQuitMessage(null); } else if (ess.getSettings().isCustomQuitMessage() && event.getQuitMessage() != null) { final Player player = event.getPlayer(); @@ -341,6 +341,10 @@ public void onPlayerQuit(final PlayerQuitEvent event) { user.dispose(); } + private boolean isVanishHide(final User user) { + return ess.getSettings().isVanishHideMessages() && (user.isHidden() || user.isLeavingHidden()); + } + @SuppressWarnings("UnstableApiUsage") private final class JoinListener1_21 implements Listener { private final Map newUserLocales = new ConcurrentHashMap<>(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java index 11566ca0459..bb05bc302f4 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java @@ -229,6 +229,8 @@ public interface ISettings extends IConf { boolean sleepIgnoresVanishedPlayers(); + boolean isVanishHideMessages(); + boolean isAfkListName(); String getAfkListName(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index fbec7ea904a..a2e491f7b61 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -1350,6 +1350,11 @@ public boolean sleepIgnoresVanishedPlayers() { return config.getBoolean("sleep-ignores-vanished-player", true); } + @Override + public boolean isVanishHideMessages() { + return config.getBoolean("vanish-hide-messages", false); + } + public String _getAfkListName() { return FormatUtil.replaceFormat(config.getString("afk-list-name", "none")); } diff --git a/Essentials/src/main/resources/config.yml b/Essentials/src/main/resources/config.yml index eb441235b6b..281aa84d0ca 100644 --- a/Essentials/src/main/resources/config.yml +++ b/Essentials/src/main/resources/config.yml @@ -544,6 +544,9 @@ sleep-ignores-afk-players: true # Players with the permission 'essentials.sleepingignored' will always be ignored. sleep-ignores-vanished-player: true +# Whether quit and death messages from vanished players should be hidden from ingame-chat. +vanish-hide-messages: false + # Change the player's /list name when they are AFK. This is none by default, which specifies that Essentials # should not interfere with the AFK player's /list name. # You may use color codes, {USERNAME} for the player's name, or {PLAYER} for the player's display name.