From f53506c75b6fd9dcfb81adfc33302a0634d519b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Staro=C5=84?= Date: Thu, 20 Feb 2020 15:23:07 +0100 Subject: [PATCH] Add events for ban, ipban and extend mute event --- .../src/com/earth2me/essentials/User.java | 2 +- .../essentials/commands/Commandban.java | 24 +++++--- .../essentials/commands/Commandbanip.java | 24 +++++--- .../essentials/commands/Commandmute.java | 37 +++++++---- .../essentials/commands/Commandtempban.java | 28 ++++++--- .../essentials/commands/Commandunban.java | 32 ++++++---- .../essentials/commands/Commandunbanip.java | 14 +++-- .../ess3/api/events/BanStatusChangeEvent.java | 9 +++ .../api/events/IpBanStatusChangeEvent.java | 61 +++++++++++++++++++ .../api/events/MuteStatusChangeEvent.java | 7 +-- .../api/events/ReasonedStatusChangeEvent.java | 20 ++++++ .../net/ess3/api/events/StateChangeEvent.java | 1 + .../api/events/TempBanStatusChangeEvent.java | 22 +++++++ .../api/events/TempMuteStatusChangeEvent.java | 22 +++++++ .../net/ess3/api/events/TimestampEvent.java | 6 ++ 15 files changed, 250 insertions(+), 59 deletions(-) create mode 100644 Essentials/src/net/ess3/api/events/BanStatusChangeEvent.java create mode 100644 Essentials/src/net/ess3/api/events/IpBanStatusChangeEvent.java create mode 100644 Essentials/src/net/ess3/api/events/ReasonedStatusChangeEvent.java create mode 100644 Essentials/src/net/ess3/api/events/TempBanStatusChangeEvent.java create mode 100644 Essentials/src/net/ess3/api/events/TempMuteStatusChangeEvent.java create mode 100644 Essentials/src/net/ess3/api/events/TimestampEvent.java diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index 95394d3b9f9..1c4c682df56 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -580,7 +580,7 @@ public boolean checkJailTimeout(final long currentTime) { //Returns true if status expired during this check public boolean checkMuteTimeout(final long currentTime) { if (getMuteTimeout() > 0 && getMuteTimeout() < currentTime && isMuted()) { - final MuteStatusChangeEvent event = new MuteStatusChangeEvent(this, null, false); + final MuteStatusChangeEvent event = new MuteStatusChangeEvent(this, null, false, null); ess.getServer().getPluginManager().callEvent(event); if (!event.isCancelled()) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandban.java b/Essentials/src/com/earth2me/essentials/commands/Commandban.java index e7ff69964db..ad284234029 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandban.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandban.java @@ -5,6 +5,7 @@ import com.earth2me.essentials.OfflinePlayer; import com.earth2me.essentials.User; import com.earth2me.essentials.utils.FormatUtil; +import net.ess3.api.events.BanStatusChangeEvent; import org.bukkit.BanList; import org.bukkit.Server; @@ -51,18 +52,25 @@ public void run(final Server server, final CommandSource sender, final String co banReason = tl("defaultBanReason"); } - ess.getServer().getBanList(BanList.Type.NAME).addBan(user.getName(), banReason, null, senderName); + final User controller = sender.isPlayer() ? ess.getUser(sender.getPlayer()) : null; + BanStatusChangeEvent event = new BanStatusChangeEvent(user, controller, true, banReason); + ess.getServer().getPluginManager().callEvent(event); - String banDisplay = tl("banFormat", banReason, senderName); + if(!event.isCancelled()) { + banReason = event.getReason(); + ess.getServer().getBanList(BanList.Type.NAME).addBan(user.getName(), banReason, null, senderName); - user.getBase().kickPlayer(banDisplay); - server.getLogger().log(Level.INFO, tl("playerBanned", senderName, user.getName(), banDisplay)); + String banDisplay = tl("banFormat", banReason, senderName); - if (nomatch) { - sender.sendMessage(tl("userUnknown", user.getName())); - } + user.getBase().kickPlayer(banDisplay); + server.getLogger().log(Level.INFO, tl("playerBanned", senderName, user.getName(), banDisplay)); + + if (nomatch) { + sender.sendMessage(tl("userUnknown", user.getName())); + } - ess.broadcastMessage("essentials.ban.notify", tl("playerBanned", senderName, user.getName(), banReason)); + ess.broadcastMessage("essentials.ban.notify", tl("playerBanned", senderName, user.getName(), banReason)); + } } @Override diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandbanip.java b/Essentials/src/com/earth2me/essentials/commands/Commandbanip.java index 1ba6bb56ee6..9194c7ddc34 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandbanip.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandbanip.java @@ -4,6 +4,7 @@ import com.earth2me.essentials.Console; import com.earth2me.essentials.User; import com.earth2me.essentials.utils.FormatUtil; +import net.ess3.api.events.IpBanStatusChangeEvent; import org.bukkit.BanList; import org.bukkit.Server; import org.bukkit.entity.Player; @@ -51,18 +52,25 @@ public void run(final Server server, final CommandSource sender, final String co banReason = tl("defaultBanReason"); } - String banDisplay = tl("banFormat", banReason, senderName); + final User controller = sender.isPlayer() ? ess.getUser(sender.getPlayer()) : null; + IpBanStatusChangeEvent event = new IpBanStatusChangeEvent(ipAddress, controller, true, banReason); + ess.getServer().getPluginManager().callEvent(event); - ess.getServer().getBanList(BanList.Type.IP).addBan(ipAddress, banReason, null, senderName); - server.getLogger().log(Level.INFO, tl("playerBanIpAddress", senderName, ipAddress, banReason)); + if (!event.isCancelled()) { + banReason = event.getReason(); + String banDisplay = tl("banFormat", banReason, senderName); - for (Player player : ess.getServer().getOnlinePlayers()) { - if (player.getAddress().getAddress().getHostAddress().equalsIgnoreCase(ipAddress)) { - player.kickPlayer(banDisplay); + ess.getServer().getBanList(BanList.Type.IP).addBan(ipAddress, banReason, null, senderName); + server.getLogger().log(Level.INFO, tl("playerBanIpAddress", senderName, ipAddress, banReason)); + + for (Player player : ess.getServer().getOnlinePlayers()) { + if (player.getAddress().getAddress().getHostAddress().equalsIgnoreCase(ipAddress)) { + player.kickPlayer(banDisplay); + } } - } - ess.broadcastMessage("essentials.banip.notify", tl("playerBanIpAddress", senderName, ipAddress, banReason)); + ess.broadcastMessage("essentials.banip.notify", tl("playerBanIpAddress", senderName, ipAddress, banReason)); + } } @Override diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandmute.java b/Essentials/src/com/earth2me/essentials/commands/Commandmute.java index 2fac8ce924e..bdf847ee4e4 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandmute.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandmute.java @@ -5,6 +5,7 @@ import com.earth2me.essentials.User; import com.earth2me.essentials.utils.DateUtil; import net.ess3.api.events.MuteStatusChangeEvent; +import net.ess3.api.events.TempMuteStatusChangeEvent; import org.bukkit.Server; import java.util.List; @@ -40,25 +41,37 @@ public void run(final Server server, final CommandSource sender, final String co throw new Exception(tl("muteExempt")); } } + + long muteTimestamp = 0; + String muteReason = null; + + if (args.length > 1) { + final String time = args[1]; + try { + muteTimestamp = DateUtil.parseDateDiff(time, true); + muteReason = getFinalArg(args, 2); + } catch (Exception e) { + muteReason = getFinalArg(args, 1); + } + } final boolean willMute = (args.length > 1) || !user.getMuted(); final User controller = sender.isPlayer() ? ess.getUser(sender.getPlayer()) : null; - final MuteStatusChangeEvent event = new MuteStatusChangeEvent(user, controller, willMute); + final MuteStatusChangeEvent event; + if(muteTimestamp == 0) { + event = new MuteStatusChangeEvent(user, controller, willMute, muteReason); + } else { + event = new TempMuteStatusChangeEvent(user, controller, muteReason, muteTimestamp); + } ess.getServer().getPluginManager().callEvent(event); if (!event.isCancelled()) { - long muteTimestamp = 0; + muteReason = event.getReason(); + if(event instanceof TempMuteStatusChangeEvent) { + muteTimestamp = ((TempMuteStatusChangeEvent) event).getTimestamp(); + } if (args.length > 1) { - final String time = args[1]; - String muteReason; - try { - muteTimestamp = DateUtil.parseDateDiff(time, true); - muteReason = getFinalArg(args, 2); - } catch (Exception e) { - muteReason = getFinalArg(args, 1); - } - user.setMuteReason(muteReason.isEmpty() ? null : muteReason); user.setMuted(true); } else { @@ -67,6 +80,8 @@ public void run(final Server server, final CommandSource sender, final String co user.setMuteReason(null); } } + + user.setMuteTimeout(muteTimestamp); final boolean muted = user.getMuted(); String muteTime = DateUtil.formatDateDiff(muteTimestamp); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtempban.java b/Essentials/src/com/earth2me/essentials/commands/Commandtempban.java index b0f03db29bf..ab8a38223ac 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtempban.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtempban.java @@ -4,10 +4,10 @@ import com.earth2me.essentials.Console; import com.earth2me.essentials.User; import com.earth2me.essentials.utils.DateUtil; +import net.ess3.api.events.TempBanStatusChangeEvent; import org.bukkit.BanList; import org.bukkit.Server; -import java.util.Collections; import java.util.Date; import java.util.GregorianCalendar; import java.util.List; @@ -39,7 +39,7 @@ public void run(final Server server, final CommandSource sender, final String co } } final String time = getFinalArg(args, 1); - final long banTimestamp = DateUtil.parseDateDiff(time, true); + long banTimestamp = DateUtil.parseDateDiff(time, true); String banReason = DateUtil.removeTimePattern(time); final long maxBanLength = ess.getSettings().getMaxTempban() * 1000; @@ -52,16 +52,24 @@ public void run(final Server server, final CommandSource sender, final String co banReason = tl("defaultBanReason"); } - final String senderName = sender.isPlayer() ? sender.getPlayer().getDisplayName() : Console.NAME; - ess.getServer().getBanList(BanList.Type.NAME).addBan(user.getName(), banReason, new Date(banTimestamp), senderName); - final String expiry = DateUtil.formatDateDiff(banTimestamp); + final User controller = sender.isPlayer() ? ess.getUser(sender.getPlayer()) : null; + TempBanStatusChangeEvent event = new TempBanStatusChangeEvent(user, controller, banReason, banTimestamp); + ess.getServer().getPluginManager().callEvent(event); - final String banDisplay = tl("tempBanned", expiry, senderName, banReason); - user.getBase().kickPlayer(banDisplay); + if(!event.isCancelled()) { + banReason = event.getReason(); + banTimestamp = event.getTimestamp(); + final String senderName = sender.isPlayer() ? sender.getPlayer().getDisplayName() : Console.NAME; + ess.getServer().getBanList(BanList.Type.NAME).addBan(user.getName(), banReason, new Date(banTimestamp), senderName); + final String expiry = DateUtil.formatDateDiff(banTimestamp); - final String message = tl("playerTempBanned", senderName, user.getName(), expiry, banReason); - server.getLogger().log(Level.INFO, message); - ess.broadcastMessage("essentials.ban.notify", message); + final String banDisplay = tl("tempBanned", expiry, senderName, banReason); + user.getBase().kickPlayer(banDisplay); + + final String message = tl("playerTempBanned", senderName, user.getName(), expiry, banReason); + server.getLogger().log(Level.INFO, message); + ess.broadcastMessage("essentials.ban.notify", message); + } } @Override diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandunban.java b/Essentials/src/com/earth2me/essentials/commands/Commandunban.java index ba763b44f2a..fb1356bd22b 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandunban.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandunban.java @@ -2,9 +2,10 @@ import com.earth2me.essentials.CommandSource; import com.earth2me.essentials.Console; +import com.earth2me.essentials.OfflinePlayer; import com.earth2me.essentials.User; +import net.ess3.api.events.BanStatusChangeEvent; import org.bukkit.BanList; -import org.bukkit.OfflinePlayer; import org.bukkit.Server; import java.util.logging.Level; @@ -22,23 +23,28 @@ public void run(final Server server, final CommandSource sender, final String co if (args.length < 1) { throw new NotEnoughArgumentsException(); } - String name; + + User user; try { - final User user = getPlayer(server, args, 0, true, true); - name = user.getName(); - ess.getServer().getBanList(BanList.Type.NAME).pardon(name); - } catch (NoSuchFieldException e) { - final OfflinePlayer player = server.getOfflinePlayer(args[0]); - name = player.getName(); - if (!player.isBanned()) { + user = getPlayer(server, args, 0, true, true); + } catch (PlayerNotFoundException e) { + user = ess.getUser(new OfflinePlayer(args[0], ess.getServer())); + if (!user.getBase().isBanned()) { throw new Exception(tl("playerNotFound"), e); } - ess.getServer().getBanList(BanList.Type.NAME).pardon(name); } - final String senderName = sender.isPlayer() ? sender.getPlayer().getDisplayName() : Console.NAME; - server.getLogger().log(Level.INFO, tl("playerUnbanned", senderName, name)); + final User controller = sender.isPlayer() ? ess.getUser(sender.getPlayer()) : null; + BanStatusChangeEvent event = new BanStatusChangeEvent(user, controller, false, null); + ess.getServer().getPluginManager().callEvent(event); + + if (!event.isCancelled()) { + ess.getServer().getBanList(BanList.Type.NAME).pardon(user.getName()); - ess.broadcastMessage("essentials.ban.notify", tl("playerUnbanned", senderName, name)); + final String senderName = sender.isPlayer() ? sender.getPlayer().getDisplayName() : Console.NAME; + server.getLogger().log(Level.INFO, tl("playerUnbanned", senderName, user.getName())); + + ess.broadcastMessage("essentials.ban.notify", tl("playerUnbanned", senderName, user.getName())); + } } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandunbanip.java b/Essentials/src/com/earth2me/essentials/commands/Commandunbanip.java index bae6b4bd8d1..ed01abfa2fd 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandunbanip.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandunbanip.java @@ -4,6 +4,7 @@ import com.earth2me.essentials.Console; import com.earth2me.essentials.User; import com.earth2me.essentials.utils.FormatUtil; +import net.ess3.api.events.IpBanStatusChangeEvent; import org.bukkit.BanList; import org.bukkit.Server; @@ -39,11 +40,16 @@ public void run(final Server server, final CommandSource sender, final String co throw new PlayerNotFoundException(); } + final User controller = sender.isPlayer() ? ess.getUser(sender.getPlayer()) : null; + IpBanStatusChangeEvent event = new IpBanStatusChangeEvent(ipAddress, controller, false, null); + ess.getServer().getPluginManager().callEvent(event); - ess.getServer().getBanList(BanList.Type.IP).pardon(ipAddress); - final String senderName = sender.isPlayer() ? sender.getPlayer().getDisplayName() : Console.NAME; - server.getLogger().log(Level.INFO, tl("playerUnbanIpAddress", senderName, ipAddress)); + if (!event.isCancelled()) { + ess.getServer().getBanList(BanList.Type.IP).pardon(ipAddress); + final String senderName = sender.isPlayer() ? sender.getPlayer().getDisplayName() : Console.NAME; + server.getLogger().log(Level.INFO, tl("playerUnbanIpAddress", senderName, ipAddress)); - ess.broadcastMessage("essentials.banip.notify", tl("playerUnbanIpAddress", senderName, ipAddress)); + ess.broadcastMessage("essentials.banip.notify", tl("playerUnbanIpAddress", senderName, ipAddress)); + } } } diff --git a/Essentials/src/net/ess3/api/events/BanStatusChangeEvent.java b/Essentials/src/net/ess3/api/events/BanStatusChangeEvent.java new file mode 100644 index 00000000000..0a970fd92c1 --- /dev/null +++ b/Essentials/src/net/ess3/api/events/BanStatusChangeEvent.java @@ -0,0 +1,9 @@ +package net.ess3.api.events; + +import net.ess3.api.IUser; + +public class BanStatusChangeEvent extends ReasonedStatusChangeEvent { + public BanStatusChangeEvent(IUser affected, IUser controller, boolean value, String reason) { + super(affected, controller, value, reason); + } +} diff --git a/Essentials/src/net/ess3/api/events/IpBanStatusChangeEvent.java b/Essentials/src/net/ess3/api/events/IpBanStatusChangeEvent.java new file mode 100644 index 00000000000..2f3e4e9f54a --- /dev/null +++ b/Essentials/src/net/ess3/api/events/IpBanStatusChangeEvent.java @@ -0,0 +1,61 @@ +package net.ess3.api.events; + +import net.ess3.api.IUser; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class IpBanStatusChangeEvent extends Event implements Cancellable { + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled = false; + String affectedIp; + IUser controller; + private String reason; + private boolean newValue; + + public IpBanStatusChangeEvent(String affectedIp, IUser controller, boolean newValue, String reason) { + this.affectedIp = affectedIp; + this.controller = controller; + this.newValue = newValue; + this.reason = reason; + } + + public String getAffectedIp() { + return affectedIp; + } + + public IUser getController() { + return controller; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } + + public boolean getValue() { + return newValue; + } + + public String getReason() { + return reason; + } + + public void setReason(String reason) { + this.reason = reason; + } +} diff --git a/Essentials/src/net/ess3/api/events/MuteStatusChangeEvent.java b/Essentials/src/net/ess3/api/events/MuteStatusChangeEvent.java index 4f67a1e12fc..7cd96f0e9b1 100644 --- a/Essentials/src/net/ess3/api/events/MuteStatusChangeEvent.java +++ b/Essentials/src/net/ess3/api/events/MuteStatusChangeEvent.java @@ -2,9 +2,8 @@ import net.ess3.api.IUser; - -public class MuteStatusChangeEvent extends StatusChangeEvent { - public MuteStatusChangeEvent(IUser affected, IUser controller, boolean value) { - super(affected, controller, value); +public class MuteStatusChangeEvent extends ReasonedStatusChangeEvent { + public MuteStatusChangeEvent(IUser affected, IUser controller, boolean value, String reason) { + super(affected, controller, value, reason); } } diff --git a/Essentials/src/net/ess3/api/events/ReasonedStatusChangeEvent.java b/Essentials/src/net/ess3/api/events/ReasonedStatusChangeEvent.java new file mode 100644 index 00000000000..cdae6a15657 --- /dev/null +++ b/Essentials/src/net/ess3/api/events/ReasonedStatusChangeEvent.java @@ -0,0 +1,20 @@ +package net.ess3.api.events; + +import net.ess3.api.IUser; + +public class ReasonedStatusChangeEvent extends StatusChangeEvent { + private String reason; + + public ReasonedStatusChangeEvent(IUser affected, IUser controller, boolean value, String reason) { + super(affected, controller, value); + this.reason = reason; + } + + public String getReason() { + return reason; + } + + public void setReason(String reason) { + this.reason = reason; + } +} \ No newline at end of file diff --git a/Essentials/src/net/ess3/api/events/StateChangeEvent.java b/Essentials/src/net/ess3/api/events/StateChangeEvent.java index 681db5410ab..3fec2751b25 100644 --- a/Essentials/src/net/ess3/api/events/StateChangeEvent.java +++ b/Essentials/src/net/ess3/api/events/StateChangeEvent.java @@ -14,6 +14,7 @@ public class StateChangeEvent extends Event implements Cancellable { private boolean cancelled = false; IUser affected; IUser controller; + private boolean newValue; public StateChangeEvent(IUser affected, IUser controller) { super(); diff --git a/Essentials/src/net/ess3/api/events/TempBanStatusChangeEvent.java b/Essentials/src/net/ess3/api/events/TempBanStatusChangeEvent.java new file mode 100644 index 00000000000..27ef845d365 --- /dev/null +++ b/Essentials/src/net/ess3/api/events/TempBanStatusChangeEvent.java @@ -0,0 +1,22 @@ +package net.ess3.api.events; + +import net.ess3.api.IUser; + +public class TempBanStatusChangeEvent extends BanStatusChangeEvent implements TimestampEvent { + private long timestamp; + + public TempBanStatusChangeEvent(IUser affected, IUser controller, String reason, long banTimestamp) { + super(affected, controller, true, reason); + this.timestamp = banTimestamp; + } + + @Override + public long getTimestamp() { + return timestamp; + } + + @Override + public void setTimestamp(long timestamp) { + this.timestamp = timestamp; + } +} diff --git a/Essentials/src/net/ess3/api/events/TempMuteStatusChangeEvent.java b/Essentials/src/net/ess3/api/events/TempMuteStatusChangeEvent.java new file mode 100644 index 00000000000..d007ee1eb82 --- /dev/null +++ b/Essentials/src/net/ess3/api/events/TempMuteStatusChangeEvent.java @@ -0,0 +1,22 @@ +package net.ess3.api.events; + +import net.ess3.api.IUser; + +public class TempMuteStatusChangeEvent extends MuteStatusChangeEvent implements TimestampEvent { + private long timestamp; + + public TempMuteStatusChangeEvent(IUser affected, IUser controller, String reason, long banTimestamp) { + super(affected, controller, true, reason); + this.timestamp = banTimestamp; + } + + @Override + public long getTimestamp() { + return timestamp; + } + + @Override + public void setTimestamp(long timestamp) { + this.timestamp = timestamp; + } +} diff --git a/Essentials/src/net/ess3/api/events/TimestampEvent.java b/Essentials/src/net/ess3/api/events/TimestampEvent.java new file mode 100644 index 00000000000..114a4d7f7ca --- /dev/null +++ b/Essentials/src/net/ess3/api/events/TimestampEvent.java @@ -0,0 +1,6 @@ +package net.ess3.api.events; + +public interface TimestampEvent { + long getTimestamp(); + void setTimestamp(long timestamp); +}