From ca387687a500a50bb704508518bdbe18f5ba2601 Mon Sep 17 00:00:00 2001 From: Ali Moghnieh Date: Tue, 24 Nov 2015 22:09:59 +0000 Subject: [PATCH] Add last-message-reply-recipient-timeout setting for timing out reply-recipient in private messaging. --- Essentials/src/com/earth2me/essentials/ISettings.java | 2 ++ Essentials/src/com/earth2me/essentials/Settings.java | 4 ++++ .../essentials/messaging/SimpleMessageRecipient.java | 6 +++++- Essentials/src/config.yml | 5 +++++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index 9470e09a3..f5484715e 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -231,4 +231,6 @@ public interface ISettings extends IConf { boolean isLastMessageReplyRecipient(); BigDecimal getMinimumPayAmount(); + + long getLastMessageReplyRecipientTimeout(); } diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index 6a3dad769..a2d4fa284 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -1125,4 +1125,8 @@ public class Settings implements net.ess3.api.ISettings { @Override public BigDecimal getMinimumPayAmount() { return new BigDecimal(config.getString("minimum-pay-amount", "0.001")); } + + @Override public long getLastMessageReplyRecipientTimeout() { + return config.getLong("last-message-reply-recipient-timeout", 180); + } } diff --git a/Essentials/src/com/earth2me/essentials/messaging/SimpleMessageRecipient.java b/Essentials/src/com/earth2me/essentials/messaging/SimpleMessageRecipient.java index f89c1eb57..2ceeb7e3b 100644 --- a/Essentials/src/com/earth2me/essentials/messaging/SimpleMessageRecipient.java +++ b/Essentials/src/com/earth2me/essentials/messaging/SimpleMessageRecipient.java @@ -33,6 +33,7 @@ public class SimpleMessageRecipient implements IMessageRecipient { private final IEssentials ess; private final IMessageRecipient parent; + private long lastMessageMs; private WeakReference replyRecipient; public SimpleMessageRecipient(IEssentials ess, IMessageRecipient parent) { @@ -103,12 +104,15 @@ public class SimpleMessageRecipient implements IMessageRecipient { if (ess.getSettings().isLastMessageReplyRecipient()) { // If this recipient doesn't have a reply recipient, initiate by setting the first // message sender to this recipient's replyRecipient. - if (getReplyRecipient() == null || !getReplyRecipient().isReachable()) { + long timeout = ess.getSettings().getLastMessageReplyRecipientTimeout() * 1000; + if (getReplyRecipient() == null || !getReplyRecipient().isReachable() + || System.currentTimeMillis() - this.lastMessageMs > timeout) { setReplyRecipient(sender); } } else { // Old message functionality, always set the reply recipient to the last person who sent us a message. setReplyRecipient(sender); } + this.lastMessageMs = System.currentTimeMillis(); return afk ? MessageResponse.SUCCESS_BUT_AFK : MessageResponse.SUCCESS; } diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index e3c98972b..1ab875f39 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -539,6 +539,11 @@ use-bukkit-permissions: false # Minimum acceptable amount to be used in /pay. minimum-pay-amount: 0.001 +# If last-message-reply-recipient is true, this specifies the duration, in seconds, that would need to elapse for the +# reply-recipient to update when receiving a message. +# Default is 180 (3 minutes) +last-message-reply-recipient-timeout: 180 + ############################################################ # +------------------------------------------------------+ # # | EssentialsHelp | #