[Fix] Call JailStatusChangeEvent when jailing and unjailing players. Fixes #161

This commit is contained in:
Matthew Steglinski 2015-10-28 11:27:10 -04:00 committed by vemacs
parent a134e99c8c
commit 23f3d69d38
2 changed files with 52 additions and 33 deletions

View File

@ -11,6 +11,7 @@ import com.earth2me.essentials.utils.NumberUtil;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.MaxMoneyException; import net.ess3.api.MaxMoneyException;
import net.ess3.api.events.AfkStatusChangeEvent; import net.ess3.api.events.AfkStatusChangeEvent;
import net.ess3.api.events.JailStatusChangeEvent;
import net.ess3.api.events.UserBalanceUpdateEvent; import net.ess3.api.events.UserBalanceUpdateEvent;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Location; import org.bukkit.Location;
@ -445,19 +446,24 @@ public class User extends UserData implements Comparable<User>, IMessageRecipien
//Returns true if status expired during this check //Returns true if status expired during this check
public boolean checkJailTimeout(final long currentTime) { public boolean checkJailTimeout(final long currentTime) {
if (getJailTimeout() > 0 && getJailTimeout() < currentTime && isJailed()) { if (getJailTimeout() > 0 && getJailTimeout() < currentTime && isJailed()) {
setJailTimeout(0); final JailStatusChangeEvent event = new JailStatusChangeEvent(this, null, false);
setJailed(false); ess.getServer().getPluginManager().callEvent(event);
sendMessage(tl("haveBeenReleased"));
setJail(null); if (!event.isCancelled()) {
try { setJailTimeout(0);
getTeleport().back(); setJailed(false);
} catch (Exception ex) { sendMessage(tl("haveBeenReleased"));
setJail(null);
try { try {
getTeleport().respawn(null, TeleportCause.PLUGIN); getTeleport().back();
} catch (Exception ex1) { } catch (Exception ex) {
try {
getTeleport().respawn(null, TeleportCause.PLUGIN);
} catch (Exception ex1) {
}
} }
return true;
} }
return true;
} }
return false; return false;
} }

View File

@ -3,6 +3,7 @@ package com.earth2me.essentials.commands;
import com.earth2me.essentials.CommandSource; import com.earth2me.essentials.CommandSource;
import com.earth2me.essentials.User; import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.DateUtil; import com.earth2me.essentials.utils.DateUtil;
import net.ess3.api.events.JailStatusChangeEvent;
import org.bukkit.Server; import org.bukkit.Server;
import static com.earth2me.essentials.I18n.tl; import static com.earth2me.essentials.I18n.tl;
@ -33,23 +34,29 @@ public class Commandtogglejail extends EssentialsCommand {
return; return;
} }
} }
if (player.getBase().isOnline()) { final User controller = sender.isPlayer() ? ess.getUser(sender.getPlayer()) : null;
ess.getJails().sendToJail(player, args[1]); final JailStatusChangeEvent event = new JailStatusChangeEvent(player, controller, true);
} else { ess.getServer().getPluginManager().callEvent(event);
// Check if jail exists
ess.getJails().getJail(args[1]); 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; return;
} }
@ -70,14 +77,20 @@ public class Commandtogglejail extends EssentialsCommand {
if (!player.isJailed()) { if (!player.isJailed()) {
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
player.setJailed(false); final User controller = sender.isPlayer() ? ess.getUser(sender.getPlayer()) : null;
player.setJailTimeout(0); final JailStatusChangeEvent event = new JailStatusChangeEvent(player, controller, false);
player.sendMessage(tl("jailReleasedPlayerNotify")); ess.getServer().getPluginManager().callEvent(event);
player.setJail(null);
if (player.getBase().isOnline()) { if (!event.isCancelled()) {
player.getTeleport().back(); 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()));
} }
} }
} }