From dd226dfdcfa5d60dff4ad6afb713d89e01d96d99 Mon Sep 17 00:00:00 2001 From: Ryan Date: Sat, 20 Aug 2016 19:13:26 -0600 Subject: [PATCH] Implement MuteStatusChangeEvent. Fixes #819 (#832) --- .../src/com/earth2me/essentials/User.java | 14 ++-- .../essentials/commands/Commandmute.java | 72 ++++++++++--------- 2 files changed, 50 insertions(+), 36 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index 568ff19ce..fc1fedc9b 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -12,6 +12,7 @@ import net.ess3.api.IEssentials; import net.ess3.api.MaxMoneyException; import net.ess3.api.events.AfkStatusChangeEvent; import net.ess3.api.events.JailStatusChangeEvent; +import net.ess3.api.events.MuteStatusChangeEvent; import net.ess3.api.events.UserBalanceUpdateEvent; import net.ess3.nms.refl.ReflUtil; @@ -505,10 +506,15 @@ public class User extends UserData implements Comparable, IMessageRecipien //Returns true if status expired during this check public boolean checkMuteTimeout(final long currentTime) { if (getMuteTimeout() > 0 && getMuteTimeout() < currentTime && isMuted()) { - setMuteTimeout(0); - sendMessage(tl("canTalkAgain")); - setMuted(false); - return true; + final MuteStatusChangeEvent event = new MuteStatusChangeEvent(this, null, false); + ess.getServer().getPluginManager().callEvent(event); + + if (!event.isCancelled()) { + setMuteTimeout(0); + sendMessage(tl("canTalkAgain")); + setMuted(false); + return true; + } } return false; } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandmute.java b/Essentials/src/com/earth2me/essentials/commands/Commandmute.java index cbc6f2870..769f25748 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandmute.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandmute.java @@ -4,6 +4,7 @@ import com.earth2me.essentials.CommandSource; import com.earth2me.essentials.OfflinePlayer; import com.earth2me.essentials.User; import com.earth2me.essentials.utils.DateUtil; +import net.ess3.api.events.MuteStatusChangeEvent; import org.bukkit.Server; import java.util.logging.Level; @@ -38,43 +39,50 @@ public class Commandmute extends EssentialsCommand { throw new Exception(tl("muteExempt")); } } + + final boolean willMute = (args.length > 1) ? true : !user.getMuted(); + final User controller = sender.isPlayer() ? ess.getUser(sender.getPlayer()) : null; + final MuteStatusChangeEvent event = new MuteStatusChangeEvent(user, controller, willMute); + ess.getServer().getPluginManager().callEvent(event); + + if (!event.isCancelled()) { + long muteTimestamp = 0; - long muteTimestamp = 0; - - if (args.length > 1) { - final String time = getFinalArg(args, 1); - muteTimestamp = DateUtil.parseDateDiff(time, true); - user.setMuted(true); - } else { - user.setMuted(!user.getMuted()); - } - user.setMuteTimeout(muteTimestamp); - final boolean muted = user.getMuted(); - String muteTime = DateUtil.formatDateDiff(muteTimestamp); - - if (nomatch) { - sender.sendMessage(tl("userUnknown", user.getName())); - } - - if (muted) { - if (muteTimestamp > 0) { - sender.sendMessage(tl("mutedPlayerFor", user.getDisplayName(), muteTime)); - user.sendMessage(tl("playerMutedFor", muteTime)); + if (args.length > 1) { + final String time = getFinalArg(args, 1); + muteTimestamp = DateUtil.parseDateDiff(time, true); + user.setMuted(true); } else { - sender.sendMessage(tl("mutedPlayer", user.getDisplayName())); - user.sendMessage(tl("playerMuted")); + user.setMuted(!user.getMuted()); } - final String message; - if (muteTimestamp > 0) { - message = tl("muteNotifyFor", sender.getSender().getName(), user.getName(), muteTime); + user.setMuteTimeout(muteTimestamp); + final boolean muted = user.getMuted(); + String muteTime = DateUtil.formatDateDiff(muteTimestamp); + + if (nomatch) { + sender.sendMessage(tl("userUnknown", user.getName())); + } + + if (muted) { + if (muteTimestamp > 0) { + sender.sendMessage(tl("mutedPlayerFor", user.getDisplayName(), muteTime)); + user.sendMessage(tl("playerMutedFor", muteTime)); + } else { + sender.sendMessage(tl("mutedPlayer", user.getDisplayName())); + user.sendMessage(tl("playerMuted")); + } + final String message; + if (muteTimestamp > 0) { + message = tl("muteNotifyFor", sender.getSender().getName(), user.getName(), muteTime); + } else { + message = tl("muteNotify", sender.getSender().getName(), user.getName()); + } + server.getLogger().log(Level.INFO, message); + ess.broadcastMessage("essentials.mute.notify", message); } else { - message = tl("muteNotify", sender.getSender().getName(), user.getName()); + sender.sendMessage(tl("unmutedPlayer", user.getDisplayName())); + user.sendMessage(tl("playerUnmuted")); } - server.getLogger().log(Level.INFO, message); - ess.broadcastMessage("essentials.mute.notify", message); - } else { - sender.sendMessage(tl("unmutedPlayer", user.getDisplayName())); - user.sendMessage(tl("playerUnmuted")); } } }