/** * Performs transfer of specified JailPrisoner. If you just want to transfer someone, I recommend * using prisoner.transfer, because it supports offline transfer and it's easier to do. * * @param prisoner Prisoner that will be transfered * @param player Player that will be teleported */ public static void Transfer(JailPrisoner prisoner, Player player) { if (prisoner.getTransferDestination() == "find nearest") prisoner.setTransferDestination( JailZoneManager.findNearestJail(player.getLocation(), prisoner.getJail().getName()) .getName()); if (prisoner.getCell() != null) { Inventory inventory = player.getInventory(); JailCell cell = prisoner.getCell(); cell.setPlayerName(""); for (Sign sign : cell.getSigns()) { sign.setLine(0, ""); sign.setLine(1, ""); sign.setLine(2, ""); sign.setLine(3, ""); sign.update(); } if (cell.getChest() != null) { for (ItemStack i : cell.getChest().getInventory().getContents()) { if (i == null || i.getType() == Material.AIR) continue; inventory.addItem(i); } cell.getChest().getInventory().clear(); } if (cell.getSecondChest() != null) { for (ItemStack i : cell.getSecondChest().getInventory().getContents()) { if (i == null || i.getType() == Material.AIR) continue; inventory.addItem(i); } cell.getSecondChest().getInventory().clear(); } prisoner.setCell(null); } prisoner.SetBeingReleased(true); String targetJail = prisoner.getTransferDestination(); if (targetJail.contains(":")) { prisoner.setRequestedCell(targetJail.split(":")[1]); targetJail = targetJail.split(":")[0]; } JailZone jail = Jail.zones.get(targetJail); prisoner.setJail(jail); prisoner.setTransferDestination(""); prisoner.setOfflinePending(false); Util.Message(jail.getSettings().getString(Setting.MessageTransfer), player); Jail.prisoners.put(prisoner.getName(), prisoner); JailCell cell = jail.getRequestedCell(prisoner); if (cell == null || (cell.getPlayerName() != null && !cell.getPlayerName().equals("") && !cell.getPlayerName().equals(prisoner.getName()))) { cell = null; cell = jail.getEmptyCell(); } if (cell != null) { cell.setPlayerName(player.getName()); prisoner.setCell(cell); player.teleport(prisoner.getTeleportLocation()); prisoner.updateSign(); if (jail.getSettings().getBoolean(Setting.StoreInventory) && cell.getChest() != null) { Chest chest = cell.getChest(); chest.getInventory().clear(); for (int i = 0; i < 40; i++) { if (chest.getInventory().getSize() <= Util.getNumberOfOccupiedItemSlots(chest.getInventory().getContents())) break; if (player.getInventory().getItem(i) == null || player.getInventory().getItem(i).getType() == Material.AIR) continue; chest.getInventory().addItem(player.getInventory().getItem(i)); player.getInventory().clear(i); } if (cell.getSecondChest() != null) { chest = cell.getSecondChest(); chest.getInventory().clear(); for (int i = 0; i < 40; i++) { if (chest.getInventory().getSize() <= Util.getNumberOfOccupiedItemSlots(chest.getInventory().getContents())) break; if (player.getInventory().getItem(i) == null || player.getInventory().getItem(i).getType() == Material.AIR) continue; chest.getInventory().addItem(player.getInventory().getItem(i)); player.getInventory().clear(i); } } } cell.update(); } else { player.teleport(prisoner.getTeleportLocation()); } if (jail.getSettings().getBoolean(Setting.StoreInventory)) { prisoner.storeInventory(player.getInventory()); player.getInventory().clear(); } prisoner.SetBeingReleased(false); InputOutput.UpdatePrisoner(prisoner); }
/** * Performs releasing of specified JailPrisoner. If you just want to release someone, I recommend * using prisoner.release, because it supports offline release and it's easier to do. * * @param prisoner prisoner that will be released * @param player Player that will be teleported */ public static void UnJail(JailPrisoner prisoner, Player player) { prisoner.SetBeingReleased(true); JailZone jail = prisoner.getJail(); Util.Message(jail.getSettings().getString(Setting.MessageUnJail), player); Util.changeSkin(player, ""); if (jail.getSettings().getBoolean(Setting.EnableChangingPermissions) && !jail.getSettings().getBoolean(Setting.RestorePermissionsToEscapedPrisoners)) { Util.setPermissionsGroups( player.getName(), prisoner.getOldPermissions(), jail.getTeleportLocation().getWorld().getName()); } player.setSleepingIgnored(false); JailCell cell = prisoner.getCell(); if (cell != null) { if (cell.getChest() != null) { Chest chest = cell.getChest(); for (int i = 0; i < chest.getInventory().getSize(); i++) { if (chest.getInventory().getItem(i) == null || chest.getInventory().getItem(i).getType() == Material.AIR) continue; if (player.getInventory().firstEmpty() == -1) player.getWorld().dropItem(player.getLocation(), chest.getInventory().getItem(i)); else player.getInventory().addItem(chest.getInventory().getItem(i)); } chest.getInventory().clear(); if (cell.getSecondChest() != null) { chest = cell.getSecondChest(); for (int i = 0; i < chest.getInventory().getSize(); i++) { if (chest.getInventory().getItem(i) == null || chest.getInventory().getItem(i).getType() == Material.AIR) continue; if (player.getInventory().firstEmpty() == -1) player.getWorld().dropItem(player.getLocation(), chest.getInventory().getItem(i)); else player.getInventory().addItem(chest.getInventory().getItem(i)); } chest.getInventory().clear(); } } for (Sign sign : cell.getSigns()) { sign.setLine(0, ""); sign.setLine(1, ""); sign.setLine(2, ""); sign.setLine(3, ""); sign.update(); } cell.setPlayerName(""); cell.update(); } if (jail.getSettings().getBoolean(Setting.TeleportPrisonerOnRelease)) player.teleport(prisoner.getReleaseTeleportLocation()); prisoner.restoreInventory(player); InputOutput.LogJail(prisoner, "unjail"); prisoner.delete(); for (Object o : jail.getSettings().getList(Setting.ExecutedCommandsOnRelease)) { String s = (String) o; CraftServer cs = (CraftServer) Jail.instance.getServer(); CommandSender coms = Jail.instance.getServer().getConsoleSender(); cs.dispatchCommand(coms, prisoner.parseTags(s)); } }
public static void PrepareJail(CommandSender sender, String args[]) { String playername; int time = InputOutput.global.getInt(Setting.DefaultJailTime.getString()); String jailname = ""; if (args.length < 1 || (args.length > 1 && (!Util.isInteger(args[1]))) || args[0].trim().equals("?")) { if (sender != null) Util.Message("Usage: /jail [Name] (Time) (Jail Name:Cell Name) (Reason)", sender); return; } if (Jail.zones.size() < 1) { if (sender != null) Util.Message("There is no jail available. Build one, before you can jail anyone!", sender); return; } if (Jail.prisoners.containsKey(args[0].toLowerCase())) { JailPrisoner prisoner = Jail.prisoners.get(args[0].toLowerCase()); Player player = Jail.instance.getServer().getPlayer(prisoner.getName()); if (player != null) { player.teleport(prisoner.getTeleportLocation()); if (sender != null) Util.Message("Player was teleported back to his jail!", sender); } else { if (sender != null) Util.Message("That player is already jailed!", sender); } return; } playername = args[0]; Player player = Jail.instance.getServer().getPlayerExact(playername); if (player == null) player = Jail.instance.getServer().getPlayer(playername); if (player != null) playername = player.getName().toLowerCase(); else if (sender != null) { Boolean exist = false; for (OfflinePlayer p : Bukkit.getServer().getOfflinePlayers()) if (p.getName().toLowerCase().equals(playername.toLowerCase())) { exist = true; break; } if (!exist) { Util.Message("Player " + playername + " was never on this server!", sender); return; } } if (args.length > 2) time = (int) PrisonerManager.parseTimeSpec(args[1], args[2]); String reason = ""; if (args.length > 3) { for (int i = 3; i < args.length; i++) { reason += " " + args[i]; } if (reason.length() > 250) { if (sender != null) Util.Message("Reason is too long!", sender); return; } } if (jailname.equals(InputOutput.global.getString(Setting.NearestJailCode.getString()))) jailname = ""; Util.debug("[Jailing " + playername + "] Requested jail: " + jailname); String cellname = null; if (jailname.contains(":")) { cellname = jailname.split(":")[1]; jailname = jailname.split(":")[0]; Util.debug("[Jailing " + playername + "] Requested cell: " + cellname); } String jailer; if (sender instanceof Player) jailer = ((Player) sender).getName(); else if (sender == null) jailer = "other plugin"; else jailer = "console"; if (player == null) { JailPrisoner prisoner = new JailPrisoner( playername, time * 6, jailname, cellname, true, "", reason, InputOutput.global.getBoolean(Setting.AutomaticMute.getString(), false), "", jailer, ""); if (prisoner.getJail() != null) { Util.debug("[Jailing " + playername + "] Searching for requested cell"); JailCell cell = prisoner.getJail().getRequestedCell(prisoner); if (cell != null && (cell.getPlayerName() == null || cell.getPlayerName().trim().equals(""))) { Util.debug("[Jailing " + playername + "] Found requested cell"); cell.setPlayerName(prisoner.getName()); cell.update(); } } InputOutput.InsertPrisoner(prisoner); Jail.prisoners.put(prisoner.getName(), prisoner); Util.Message( ChatColor.YELLOW + "Player is offline. He will be automatically jailed when he connnects.", sender); Jail.instance .getServer() .broadcastMessage( ChatColor.YELLOW + "Player " + ChatColor.GOLD + playername + ChatColor.YELLOW + " was jailed by " + ChatColor.GOLD + jailer + ChatColor.YELLOW + ", Reason:" + ChatColor.GOLD + reason); } else { playername = player.getName().toLowerCase(); JailPrisoner prisoner = new JailPrisoner( playername, time * 6, jailname, cellname, false, "", reason, InputOutput.global.getBoolean(Setting.AutomaticMute.getString(), false), "", jailer, ""); Jail(prisoner, player); Util.Message("Player jailed.", sender); Jail.instance .getServer() .broadcastMessage( ChatColor.YELLOW + "Player " + ChatColor.GOLD + playername + ChatColor.YELLOW + " was jailed by " + ChatColor.GOLD + jailer + ChatColor.YELLOW + ", Reason:" + ChatColor.GOLD + reason); } // Log jailing into console if (InputOutput.global.getBoolean(Setting.LogJailingIntoConsole.getString(), false)) { String times; if (time < 0) times = "forever"; else times = "for " + String.valueOf(time) + "minutes"; Jail.log.info("Player " + playername + " was jailed by " + jailer + " " + times); } }
/** * Performs jailing of specified JailPrisoner. If you just want to jail someone, I recommend using * JailAPI.jailPlayer, because it supports offline jail and it's easier to do. * * @param prisoner JailPrisoner class of the new prisoner. Must be already inserted into database * @param player Player that will be teleported */ public static void Jail(JailPrisoner prisoner, Player player) { if (!prisoner.getName().equals(player.getName().toLowerCase())) return; prisoner.SetBeingReleased(true); JailZone jail = prisoner.getJail(); if (jail == null) { Util.debug(prisoner, "searching for nearest jail"); jail = JailZoneManager.findNearestJail(player.getLocation()); prisoner.setJail(jail); } if (jail == null) { Util.Message("You are lucky! Server admin was too lazy to set up jail. Go now!", player); Jail.log.info( "[Jail] There is no jail to pick! Make sure, you have build at least one jail and at least one jail is set to automatic!"); return; } prisoner.setOfflinePending(false); if (prisoner.getReason().isEmpty()) Util.Message(jail.getSettings().getString(Setting.MessageJail), player); else Util.Message( jail.getSettings() .getString(Setting.MessageJailReason) .replace("<Reason>", prisoner.getReason()), player); if (jail.getSettings().getBoolean(Setting.DeleteInventoryOnJail)) player.getInventory().clear(); prisoner.setPreviousPosition(player.getLocation()); JailCell cell = jail.getRequestedCell(prisoner); if (cell == null || (cell.getPlayerName() != null && !cell.getPlayerName().equals("") && !cell.getPlayerName().equals(prisoner.getName()))) { Util.debug(prisoner, "No requested cell. searching for empty cell"); cell = null; cell = jail.getEmptyCell(); } if (cell != null) { Util.debug(prisoner, "Found cell!"); cell.setPlayerName(player.getName()); prisoner.setCell(cell); player.teleport(prisoner.getTeleportLocation()); prisoner.updateSign(); if (jail.getSettings().getBoolean(Setting.StoreInventory) && cell.getChest() != null) { Chest chest = cell.getChest(); chest.getInventory().clear(); for (int i = 0; i < 40; i++) { if (chest.getInventory().getSize() <= Util.getNumberOfOccupiedItemSlots(chest.getInventory().getContents())) break; if (player.getInventory().getItem(i) == null || player.getInventory().getItem(i).getType() == Material.AIR) continue; chest.getInventory().addItem(player.getInventory().getItem(i)); player.getInventory().clear(i); } if (cell.getSecondChest() != null) { chest = cell.getSecondChest(); chest.getInventory().clear(); for (int i = 0; i < 40; i++) { if (chest.getInventory().getSize() <= Util.getNumberOfOccupiedItemSlots(chest.getInventory().getContents())) break; if (player.getInventory().getItem(i) == null || player.getInventory().getItem(i).getType() == Material.AIR) continue; chest.getInventory().addItem(player.getInventory().getItem(i)); player.getInventory().clear(i); } } } cell.update(); } else { player.teleport(prisoner.getTeleportLocation()); } if (jail.getSettings().getBoolean(Setting.StoreInventory)) { prisoner.storeInventory(player.getInventory()); for (int i = 0; i < 40; i++) { player.getInventory().clear(i); } } if (jail.getSettings().getBoolean(Setting.SpoutChangeSkin)) Util.changeSkin(player, jail.getSettings().getString(Setting.SpoutSkinChangeURL)); if (jail.getSettings().getBoolean(Setting.EnableChangingPermissions)) { prisoner.setOldPermissions( Util.getPermissionsGroups( player.getName(), jail.getTeleportLocation().getWorld().getName())); Util.setPermissionsGroups( player.getName(), (ArrayList<String>) jail.getSettings().getList(Setting.PrisonersPermissionsGroups), jail.getTeleportLocation().getWorld().getName()); } if (prisoner.getJail().getSettings().getBoolean(Setting.IgnorePrisonersSleepingState)) player.setSleepingIgnored(true); if (Jail.prisoners.containsKey(prisoner.getName())) InputOutput.UpdatePrisoner(prisoner); else InputOutput.InsertPrisoner(prisoner); InputOutput.LogJail(prisoner, "jail"); Jail.prisoners.put(prisoner.getName(), prisoner); prisoner.SetBeingReleased(false); for (Object o : jail.getSettings().getList(Setting.ExecutedCommandsOnJail)) { String s = (String) o; CraftServer cs = (CraftServer) Jail.instance.getServer(); CommandSender coms = Jail.instance.getServer().getConsoleSender(); cs.dispatchCommand(coms, prisoner.parseTags(s)); } }