From 23f3d69d38ef0cb48545373df5da856480cecfb5 Mon Sep 17 00:00:00 2001 From: Matthew Steglinski Date: Wed, 28 Oct 2015 11:27:10 -0400 Subject: [PATCH] [Fix] Call JailStatusChangeEvent when jailing and unjailing players. Fixes #161 --- .../src/com/earth2me/essentials/User.java | 26 ++++---- .../commands/Commandtogglejail.java | 59 +++++++++++-------- 2 files changed, 52 insertions(+), 33 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index 825650ce4..18917fa02 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -11,6 +11,7 @@ import com.earth2me.essentials.utils.NumberUtil; 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.UserBalanceUpdateEvent; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -445,19 +446,24 @@ public class User extends UserData implements Comparable, IMessageRecipien //Returns true if status expired during this check public boolean checkJailTimeout(final long currentTime) { if (getJailTimeout() > 0 && getJailTimeout() < currentTime && isJailed()) { - setJailTimeout(0); - setJailed(false); - sendMessage(tl("haveBeenReleased")); - setJail(null); - try { - getTeleport().back(); - } catch (Exception ex) { + final JailStatusChangeEvent event = new JailStatusChangeEvent(this, null, false); + ess.getServer().getPluginManager().callEvent(event); + + if (!event.isCancelled()) { + setJailTimeout(0); + setJailed(false); + sendMessage(tl("haveBeenReleased")); + setJail(null); try { - getTeleport().respawn(null, TeleportCause.PLUGIN); - } catch (Exception ex1) { + getTeleport().back(); + } catch (Exception ex) { + try { + getTeleport().respawn(null, TeleportCause.PLUGIN); + } catch (Exception ex1) { + } } + return true; } - return true; } return false; } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtogglejail.java b/Essentials/src/com/earth2me/essentials/commands/Commandtogglejail.java index 481744348..f4acaab40 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtogglejail.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtogglejail.java @@ -3,6 +3,7 @@ package com.earth2me.essentials.commands; import com.earth2me.essentials.CommandSource; import com.earth2me.essentials.User; import com.earth2me.essentials.utils.DateUtil; +import net.ess3.api.events.JailStatusChangeEvent; import org.bukkit.Server; import static com.earth2me.essentials.I18n.tl; @@ -33,23 +34,29 @@ public class Commandtogglejail extends EssentialsCommand { return; } } - if (player.getBase().isOnline()) { - ess.getJails().sendToJail(player, args[1]); - } else { - // Check if jail exists - ess.getJails().getJail(args[1]); + final User controller = sender.isPlayer() ? ess.getUser(sender.getPlayer()) : null; + final JailStatusChangeEvent event = new JailStatusChangeEvent(player, controller, true); + ess.getServer().getPluginManager().callEvent(event); + + if (!event.isCancelled()) { + if (player.getBase().isOnline()) { + ess.getJails().sendToJail(player, args[1]); + } else { + // Check if jail exists + ess.getJails().getJail(args[1]); + } + player.setJailed(true); + player.sendMessage(tl("userJailed")); + player.setJail(null); + player.setJail(args[1]); + long timeDiff = 0; + if (args.length > 2) { + final String time = getFinalArg(args, 2); + timeDiff = DateUtil.parseDateDiff(time, true); + player.setJailTimeout(timeDiff); + } + sender.sendMessage((timeDiff > 0 ? tl("playerJailedFor", player.getName(), DateUtil.formatDateDiff(timeDiff)) : tl("playerJailed", player.getName()))); } - player.setJailed(true); - player.sendMessage(tl("userJailed")); - player.setJail(null); - player.setJail(args[1]); - long timeDiff = 0; - if (args.length > 2) { - final String time = getFinalArg(args, 2); - timeDiff = DateUtil.parseDateDiff(time, true); - player.setJailTimeout(timeDiff); - } - sender.sendMessage((timeDiff > 0 ? tl("playerJailedFor", player.getName(), DateUtil.formatDateDiff(timeDiff)) : tl("playerJailed", player.getName()))); return; } @@ -70,14 +77,20 @@ public class Commandtogglejail extends EssentialsCommand { if (!player.isJailed()) { throw new NotEnoughArgumentsException(); } - player.setJailed(false); - player.setJailTimeout(0); - player.sendMessage(tl("jailReleasedPlayerNotify")); - player.setJail(null); - if (player.getBase().isOnline()) { - player.getTeleport().back(); + final User controller = sender.isPlayer() ? ess.getUser(sender.getPlayer()) : null; + final JailStatusChangeEvent event = new JailStatusChangeEvent(player, controller, false); + ess.getServer().getPluginManager().callEvent(event); + + if (!event.isCancelled()) { + player.setJailed(false); + player.setJailTimeout(0); + player.sendMessage(tl("jailReleasedPlayerNotify")); + player.setJail(null); + if (player.getBase().isOnline()) { + player.getTeleport().back(); + } + sender.sendMessage(tl("jailReleased", player.getName())); } - sender.sendMessage(tl("jailReleased", player.getName())); } } }