diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index 7987e4e3c..ce4ecb309 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -462,10 +462,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { // New mail notification if (user != null && !getSettings().isCommandDisabled("mail") && !command.getName().equals("mail") && user.isAuthorized("essentials.mail")) { - final List mail = user.getMails(); - if (mail != null && !mail.isEmpty()) { - user.sendMessage(tl("youHaveNewMail", mail.size())); - } + user.notifyOfMail(); } //Print version even if admin command is not available #easteregg diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index 1e30eddb0..a135086b1 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -275,7 +275,7 @@ public class EssentialsPlayerListener implements Listener { user.sendMessage(tl("noNewMail")); // Only notify if they want us to. } } else { - user.sendMessage(tl("youHaveNewMail", mail.size())); + user.notifyOfMail(); } } diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index 05aba3b66..57f45ea02 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -277,4 +277,6 @@ public interface ISettings extends IConf { boolean isAddingPrefixInPlayerlist(); boolean isAddingSuffixInPlayerlist(); + + int getNotifyPlayerOfMailCooldown(); } diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index 7aafd7ed8..bfe4c7bd0 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -1409,4 +1409,9 @@ public class Settings implements net.ess3.api.ISettings { public boolean isAddingSuffixInPlayerlist() { return config.getBoolean("add-suffix-in-playerlist", false); } + + @Override + public int getNotifyPlayerOfMailCooldown() { + return config.getInt("notify-player-of-mail-cooldown", 0); + } } diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index 85fd77d1d..e9035a8ef 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -28,6 +28,7 @@ import org.bukkit.potion.PotionEffectType; import java.math.BigDecimal; import java.util.Calendar; import java.util.GregorianCalendar; +import java.util.List; import java.util.Map; import java.util.UUID; import java.util.WeakHashMap; @@ -60,6 +61,7 @@ public class User extends UserData implements Comparable, IMessageRecipien private String afkMessage; private long afkSince; private Map confirmingPayments = new WeakHashMap<>(); + private long lastNotifiedAboutMailsMs; public User(final Player base, final IEssentials ess) { super(base, ess); @@ -855,4 +857,15 @@ public class User extends UserData implements Comparable, IMessageRecipien return inventory.getItemInMainHand() != null ? inventory.getItemInMainHand() : inventory.getItemInOffHand(); } } + + public void notifyOfMail() { + List mails = getMails(); + if (mails != null && !mails.isEmpty()) { + int notifyPlayerOfMailCooldown = ess.getSettings().getNotifyPlayerOfMailCooldown() * 1000; + if (System.currentTimeMillis() - lastNotifiedAboutMailsMs >= notifyPlayerOfMailCooldown) { + sendMessage(tl("youHaveNewMail", mails.size())); + lastNotifiedAboutMailsMs = System.currentTimeMillis(); + } + } + } } diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index cda7fe440..03d625419 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -119,6 +119,10 @@ drop-items-if-full: false # Should we notify players if they have no new mail? notify-no-new-mail: true +# Specifies the duration (in seconds) between each time a player is notified of mail they have. +# Useful for servers with a lot of mail traffic. +notify-player-of-mail-cooldown: 60 + # The motd and rules are now configured in the files motd.txt and rules.txt. # When a command conflicts with another plugin, by default, Essentials will try to force the OTHER plugin to take priority.