From bb43e8f7b64e6dbaf8bd36cac105b9bba1e3e4c1 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 9 Nov 2020 07:25:16 -0500 Subject: [PATCH] Add option to prevent replying from vanished players (#3703) Closes #2066 --- Essentials/src/com/earth2me/essentials/Console.java | 6 ++++++ Essentials/src/com/earth2me/essentials/ISettings.java | 2 ++ Essentials/src/com/earth2me/essentials/Settings.java | 5 +++++ Essentials/src/com/earth2me/essentials/User.java | 5 +++++ .../src/com/earth2me/essentials/commands/Commandr.java | 3 ++- .../earth2me/essentials/messaging/IMessageRecipient.java | 4 ++++ .../essentials/messaging/SimpleMessageRecipient.java | 6 ++++++ Essentials/src/config.yml | 5 +++++ 8 files changed, 35 insertions(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/Console.java b/Essentials/src/com/earth2me/essentials/Console.java index 7b2ba8056..fcc7fb2e8 100644 --- a/Essentials/src/com/earth2me/essentials/Console.java +++ b/Essentials/src/com/earth2me/essentials/Console.java @@ -4,6 +4,7 @@ import com.earth2me.essentials.messaging.IMessageRecipient; import com.earth2me.essentials.messaging.SimpleMessageRecipient; import org.bukkit.Server; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; public final class Console implements IMessageRecipient { public static final String NAME = "Console"; @@ -80,4 +81,9 @@ public final class Console implements IMessageRecipient { public void setReplyRecipient(final IMessageRecipient recipient) { this.messageRecipient.setReplyRecipient(recipient); } + + @Override + public boolean isHiddenFrom(Player player) { + return false; + } } diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index 6f429cf89..2a2c4ffb9 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -289,6 +289,8 @@ public interface ISettings extends IConf { boolean isLastMessageReplyRecipient(); + boolean isReplyToVanished(); + BigDecimal getMinimumPayAmount(); boolean isPayExcludesIgnoreList(); diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index 605b82f59..a78222edd 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -1293,6 +1293,11 @@ public class Settings implements net.ess3.api.ISettings { return config.getBoolean("last-message-reply-recipient", false); } + @Override + public boolean isReplyToVanished() { + return config.getBoolean("last-message-reply-vanished", true); + } + @Override public BigDecimal getMinimumPayAmount() { return new BigDecimal(config.getString("minimum-pay-amount", "0.001")); diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index 6fcd74b9a..8e601099c 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -567,6 +567,11 @@ public class User extends UserData implements Comparable, IMessageRecipien return isAfk(); } + @Override + public boolean isHiddenFrom(Player player) { + return !player.canSee(getBase()); + } + @Override public boolean isHidden() { return hidden; diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandr.java b/Essentials/src/com/earth2me/essentials/commands/Commandr.java index 4003c6d2e..ec83f4985 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandr.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandr.java @@ -42,7 +42,8 @@ public class Commandr extends EssentialsCommand { final IMessageRecipient target = messageSender.getReplyRecipient(); // Check to make sure the sender does have a quick-reply recipient - if (target == null) { + if (target == null || (!ess.getSettings().isReplyToVanished() && sender.isPlayer() && target.isHiddenFrom(sender.getPlayer()))) { + messageSender.setReplyRecipient(null); throw new Exception(tl("foreverAlone")); } messageSender.sendMessage(target, message); diff --git a/Essentials/src/com/earth2me/essentials/messaging/IMessageRecipient.java b/Essentials/src/com/earth2me/essentials/messaging/IMessageRecipient.java index 284c656b7..495a396af 100644 --- a/Essentials/src/com/earth2me/essentials/messaging/IMessageRecipient.java +++ b/Essentials/src/com/earth2me/essentials/messaging/IMessageRecipient.java @@ -1,5 +1,7 @@ package com.earth2me.essentials.messaging; +import org.bukkit.entity.Player; + /** * Represents an interface for message recipients. */ @@ -113,4 +115,6 @@ public interface IMessageRecipient { return this == SUCCESS || this == SUCCESS_BUT_AFK; } } + + boolean isHiddenFrom(Player player); } diff --git a/Essentials/src/com/earth2me/essentials/messaging/SimpleMessageRecipient.java b/Essentials/src/com/earth2me/essentials/messaging/SimpleMessageRecipient.java index 680572b11..7727143b3 100644 --- a/Essentials/src/com/earth2me/essentials/messaging/SimpleMessageRecipient.java +++ b/Essentials/src/com/earth2me/essentials/messaging/SimpleMessageRecipient.java @@ -5,6 +5,7 @@ import com.earth2me.essentials.IUser; import com.earth2me.essentials.User; import net.ess3.api.events.PrivateMessagePreSendEvent; import net.ess3.api.events.PrivateMessageSentEvent; +import org.bukkit.entity.Player; import java.lang.ref.WeakReference; @@ -190,4 +191,9 @@ public class SimpleMessageRecipient implements IMessageRecipient { public void setReplyRecipient(final IMessageRecipient replyRecipient) { this.replyRecipient = new WeakReference<>(replyRecipient); } + + @Override + public boolean isHiddenFrom(Player player) { + return parent.isHiddenFrom(player); + } } diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index 9606abd85..8582c94c9 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -563,6 +563,11 @@ last-message-reply-recipient: true # Default is 180 (3 minutes) last-message-reply-recipient-timeout: 180 +# Changes the default /reply functionality. +# If true, /reply will not check if the person you're replying to has vanished. +# If false, players will not be able to /reply to players who they can no longer see due to vanish. +last-message-reply-vanished: false + # Toggles whether or not left clicking mobs with a milk bucket turns them into a baby. milk-bucket-easter-egg: true