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