/** * 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)); } }
@Override public void setSleepingIgnored(boolean isSleeping) { caller.setSleepingIgnored(isSleeping); }
/** * 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)); } }
@EventHandler(priority = EventPriority.MONITOR) public void onPermissionsUpdate(PermissionsUpdateEvent event) { Player player = event.getPlayer(); player.setSleepingIgnored(plugin.noInteract(player)); }