diff --git a/src/main/java/com/graywolf336/jail/PrisonerManager.java b/src/main/java/com/graywolf336/jail/PrisonerManager.java index cdfc2ab..a9dfd22 100644 --- a/src/main/java/com/graywolf336/jail/PrisonerManager.java +++ b/src/main/java/com/graywolf336/jail/PrisonerManager.java @@ -18,8 +18,11 @@ public class PrisonerManager { /** * Prepare the jailing of this player. * + * @param jail The jail instance we are sending this prisoner to + * @param cell The name of the cell we are sending this prisoner to * @param player The player we are preparing the jail for. * @param prisoner The prisoner file. + * @throws Exception if the jail or prisoner are null. */ public void prepareJail(Jail jail, Cell cell, Player player, Prisoner prisoner) throws Exception { //Do some checks of whether the passed params are null. @@ -42,10 +45,8 @@ public class PrisonerManager { //Save the jail after adding them to the jail pl.getJailIO().saveJail(jail); - //If they are offline, handle different..? - if(prisoner.isOfflinePending()) { - - }else { + //If they are NOT offline, jail them + if(!prisoner.isOfflinePending()) { } diff --git a/src/main/java/com/graywolf336/jail/command/commands/JailCommand.java b/src/main/java/com/graywolf336/jail/command/commands/JailCommand.java index 3b00c8a..1aa56ce 100644 --- a/src/main/java/com/graywolf336/jail/command/commands/JailCommand.java +++ b/src/main/java/com/graywolf336/jail/command/commands/JailCommand.java @@ -10,6 +10,7 @@ import com.beust.jcommander.JCommander; import com.beust.jcommander.ParameterException; import com.graywolf336.jail.JailManager; import com.graywolf336.jail.Util; +import com.graywolf336.jail.beans.Cell; import com.graywolf336.jail.beans.Jail; import com.graywolf336.jail.beans.Prisoner; import com.graywolf336.jail.command.Command; @@ -34,8 +35,9 @@ public class JailCommand implements Command { * * - If there are any jails. * - If the command can be parsed correctly. - * - If the specified jail is null (TODO: if no jail given then find one close to them) * - If the given time can be parsed correctly, defaults to what is defined in the config + * - If the jail is reasonable or not, else sets the one from the config + * - If the cell is not empty then checks to be sure that cell exists * - If the prisoner is online or not. */ public boolean execute(JailManager jm, CommandSender sender, String... args) { @@ -54,6 +56,22 @@ public class JailCommand implements Command { return true; } + //Try to parse the time, if they give us nothing in the time parameter then we get the default time + //from the config and if that isn't there then we default to thirty minutes. + Long time = 10L; + try { + if(params.time().isEmpty()) { + time = Util.getTime(jm.getPlugin().getConfig().getString(Settings.JAILDEFAULTTIME.getPath(), "30m")); + }else if(Integer.valueOf(params.time()) == -1) { + time = -1L; + }else { + time = Util.getTime(params.time()); + } + }catch(Exception e) { + sender.sendMessage(ChatColor.RED + "Number format is incorrect."); + return true; + } + //Check the jail params. If it is empty, let's get the default jail //from the config. If that is nearest, let's make a call to getting the nearest jail to //the sender but otherwise if it isn't nearest then let's set it to the default jail @@ -72,24 +90,17 @@ public class JailCommand implements Command { return true; } - //Try to parse the time, if they give us nothing in the time parameter then we get the default time - //from the config and if that isn't there then we default to thirty minutes. - Long time = 10L; - try { - if(params.time().isEmpty()) { - time = Util.getTime(jm.getPlugin().getConfig().getString(Settings.JAILDEFAULTTIME.getPath(), "30m")); - }else if(Integer.valueOf(params.time()) == -1) { - time = -1L; - }else { - time = Util.getTime(params.time()); + //Check if the cell is defined, and if so check to be sure it exists. + if(!params.cell().isEmpty()) { + if(jm.getJail(params.jail()).getCell(params.cell()) == null) { + sender.sendMessage(ChatColor.RED + "The cell provided does not exist."); + return true; } - }catch(Exception e) { - sender.sendMessage(ChatColor.RED + "Number format is incorrect."); - return true; } //Get the jail instance from the name of jail in the params. Jail j = jm.getJail(params.jail()); + Cell c = j.getCell(params.cell()); Prisoner pris = new Prisoner(params.player(), params.muted(), time); Player p = jm.getPlugin().getServer().getPlayer(params.player()); @@ -101,7 +112,7 @@ public class JailCommand implements Command { } //call the event - PrisonerJailedEvent event = new PrisonerJailedEvent(j, pris, p, p == null, sender.getName()); + PrisonerJailedEvent event = new PrisonerJailedEvent(j, c, pris, p, p == null, sender.getName()); jm.getPlugin().getServer().getPluginManager().callEvent(event); //check if the event is cancelled @@ -116,10 +127,18 @@ public class JailCommand implements Command { //recall data from the event j = event.getJail(); + c = event.getCell(); pris = event.getPrisoner(); p = event.getPlayer(); String jailer = event.getJailer(); + try { + jm.getPlugin().getPrisonerManager().prepareJail(j, c, p, pris); + } catch (Exception e) { + sender.sendMessage(ChatColor.RED + e.getMessage()); + return true; + } + //Player is not online if(p == null) { sender.sendMessage(pris.getName() + " is offline and will be jailed for " + pris.getRemainingTime() + " milliseconds in the jail " + params.jail() + " in the cell " + params.cell() + " and will be muted: " + pris.isMuted() + "."); diff --git a/src/main/java/com/graywolf336/jail/events/PrisonerJailedEvent.java b/src/main/java/com/graywolf336/jail/events/PrisonerJailedEvent.java index 2c74cdf..07b93e3 100644 --- a/src/main/java/com/graywolf336/jail/events/PrisonerJailedEvent.java +++ b/src/main/java/com/graywolf336/jail/events/PrisonerJailedEvent.java @@ -5,6 +5,7 @@ import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import com.graywolf336.jail.beans.Cell; import com.graywolf336.jail.beans.Jail; import com.graywolf336.jail.beans.Prisoner; @@ -22,6 +23,7 @@ public class PrisonerJailedEvent extends Event implements Cancellable { private boolean cancelled; private boolean online; private Jail jail; + private Cell cell; private Prisoner prisoner; private Player player; private String jailer, cancelMsg; @@ -30,13 +32,15 @@ public class PrisonerJailedEvent extends Event implements Cancellable { * Creates a new {@link PrisonerJailedEvent prisoner jailed event} for the given player. * * @param jail The jail the prisoner will be jailed at. + * @param cell The cell we're going to be sending the prisoner to, can be null. * @param prisoner The prisoner data. * @param player The player being jailed. * @param online Whether the player is online or not. * @param jailer The name of what jailed this prisoner. */ - public PrisonerJailedEvent(Jail jail, Prisoner prisoner, Player player, boolean online, String jailer) { + public PrisonerJailedEvent(Jail jail, Cell cell, Prisoner prisoner, Player player, boolean online, String jailer) { this.jail = jail; + this.cell = cell; this.prisoner = prisoner; this.player = player; this.online = online; @@ -49,6 +53,16 @@ public class PrisonerJailedEvent extends Event implements Cancellable { return this.jail; } + /** Gets the cell we're going to be sending the prisoner to. */ + public Cell getCell() { + return this.cell; + } + + /** Sets the cell we're going to be sending the prisoner to. */ + public void setCell(Cell cell) { + this.cell = cell; + } + /** Gets the {@link Prisoner} data for this prisoner. */ public Prisoner getPrisoner() { return this.prisoner;