private boolean reloadAlts(CommandSender sender) {
   if (!(sender instanceof Player)) {
     plugin.loadAlts();
     plugin.checkBanAllAlts();
     return true;
   }
   return false;
 }
 public PrisonPearlStorage(PrisonPearlPlugin plugin) {
   isNameLayer = Bukkit.getPluginManager().isPluginEnabled("NameLayer");
   isMysql = plugin.getPPConfig().getMysqlEnabled();
   PrisonPearlMysqlStorage = plugin.getMysqlStorage();
   transferedPlayers = new ArrayList<UUID>();
   this.plugin = plugin;
   pearls_byimprisoned = new HashMap<UUID, PrisonPearl>();
 }
 private boolean returnCmd(CommandSender sender, String args[]) {
   if (args.length > 1) return false;
   if (!(sender instanceof Player)) {
     sender.sendMessage("Command cannot be used at console");
     return true;
   }
   Player player = (Player) sender;
   PrisonPearl pp = getCommandPearl(player, args, 0);
   if (pp == null) return true;
   // check if the pearled player is combat tagged
   if (plugin.isCombatTagged(pp.getImprisonedName())) {
     sender.sendMessage(
         ChatColor.RED
             + "[PrisonPearl]"
             + ChatColor.WHITE
             + " You cannot return a CombatTagged player.");
     return true;
   }
   if (pp.getImprisonedName().equals(player.getName())) {
     sender.sendMessage("You cannot return yourself!");
     return true;
   } else if (!summonman.isSummoned(pp)) {
     sender.sendMessage(pp.getImprisonedName() + " has not been summoned!");
     return true;
   } else if (damageman.hasDamageLog(player)) {
     sender.sendMessage(pp.getImprisonedName() + " is in combat and cannot be returned!");
     return true;
   }
   if (summonman.returnPearl(pp)) sender.sendMessage("You've returned " + pp.getImprisonedName());
   else sender.sendMessage("You failed to return " + pp.getImprisonedName());
   return true;
 }
 public void removePearlFromContainer(PrisonPearl pp) {
   Inventory inv[] = new Inventory[2];
   if (HolderStateToInventory(pp, inv) != HolderStateToInventory_SUCCESS) {
     return;
   }
   Inventory real_inv = null;
   int pearlslot = -1;
   for (int inv_idx = 0; inv_idx <= 1 && pearlslot == -1; ++inv_idx) {
     if (inv[inv_idx] == null) {
       continue;
     }
     HashMap<Integer, ? extends ItemStack> inv_contents = inv[inv_idx].all(Material.ENDER_PEARL);
     for (int inv_slot : inv_contents.keySet()) {
       ItemStack slot_item = inv_contents.get(inv_slot);
       if (PrisonPearlPlugin.getPrisonPearlManager().isItemStackPrisonPearl(pp, slot_item)) {
         real_inv = inv[inv_idx];
         pearlslot = inv_slot;
         break;
       }
     }
   }
   if (real_inv == null || pearlslot == -1) {
     return;
   }
   real_inv.setItem(pearlslot, new ItemStack(Material.ENDER_PEARL));
 }
 public void deletePearl(PrisonPearl pp, String reason) {
   removePearlFromContainer(pp);
   pearls_byimprisoned.remove(pp.getImprisonedId());
   dirty = true;
   plugin.getLogger().info(reason);
   if (isMysql) PrisonPearlMysqlStorage.deletePearl(pp);
 }
 private boolean check(CommandSender sender, String[] args) {
   if (args.length != 1) return false;
   if (!(sender instanceof Player)) {
     boolean isBanned = plugin.isTempBanned(args[0]);
     if (isBanned) {
       sender.sendMessage(
           args[0]
               + " is temp banned for having "
               + plugin.getImprisonedCount(args[0])
               + " imprisoned accounts: "
               + plugin.getImprisonedAltsString(args[0]));
     } else {
       sender.sendMessage(args[0] + " is not temp banned");
     }
     return true;
   }
   return false;
 }
Esempio n. 7
0
  private void recordDamage(Player player, Player damager, double amt) {
    DamageLog log = logs.get(player.getName());
    if (log == null) {
      log = new DamageLog(player);
      logs.put(player.getName(), log);
    }

    long ticks = plugin.getConfig().getInt("damagelog_ticks");
    log.recordDamage(damager, (int) amt, getNowTick() + ticks);
    scheduleExpireTask(ticks);
  }
 private boolean saveCmd(CommandSender sender, String args[]) {
   if (args.length > 0) return false;
   try {
     plugin.saveAll(true);
     sender.sendMessage("PrisonPearl data saved!");
     return true;
   } catch (RuntimeException e) {
     if (!(sender instanceof ConsoleCommandSender))
       sender.sendMessage("PrisonPearl failed to save data! Check server logs!");
     throw e;
   }
 }
 public boolean upgradePearl(Inventory inv, PrisonPearl pp) {
   final UUID prisonerId = pp.getImprisonedId();
   final String prisoner;
   if (plugin.isNameLayerLoaded()) prisoner = NameAPI.getCurrentName(pp.getImprisonedId());
   else prisoner = Bukkit.getOfflinePlayer(prisonerId).getName();
   ItemStack is = new ItemStack(Material.ENDER_PEARL, 1);
   for (ItemStack existing_is : inv.getContents()) {
     if (existing_is == null || existing_is.getType() != Material.ENDER_PEARL) continue;
     int pearlslot = inv.first(existing_is);
     if (existing_is != null) {
       existing_is.setDurability((short) 0);
       ItemMeta existing_meta = existing_is.getItemMeta();
       if (existing_meta != null) {
         String existing_name = existing_meta.getDisplayName();
         List<String> lore = existing_meta.getLore();
         if (existing_name != null
             && prisoner != null
             && existing_name.compareTo(prisoner) == 0
             && lore != null
             && lore.size() == 3) {
           // This check says all existing stuff is there so return true.
           return true;
         } else if (existing_name != null
             && prisoner != null
             && existing_name.compareTo(prisoner) != 0)
           // If we don't have the right pearl keep looking.
           continue;
         else if (existing_name == null)
           // This pearl can't even be right so just return.
           return true;
       }
     }
     ItemMeta im = is.getItemMeta();
     // Rename pearl to that of imprisoned player
     im.setDisplayName(prisoner);
     List<String> lore = new ArrayList<String>();
     lore.add(prisoner + " is held within this pearl");
     lore.add("UUID: " + pp.getImprisonedId().toString());
     lore.add("Unique: " + pp.getUniqueIdentifier());
     // Given enchantment effect
     // Durability used because it doesn't affect pearl behaviour
     im.addEnchant(Enchantment.DURABILITY, 1, true);
     im.setLore(lore);
     is.setItemMeta(im);
     inv.clear(pearlslot);
     inv.setItem(pearlslot, is);
     return true;
   }
   return false;
 }
 private boolean setAlts(CommandSender sender, String[] args) {
   if (args.length < 1) {
     return false;
   }
   String[] confirmedAlts = new String[args.length - 1];
   System.arraycopy(args, 1, confirmedAlts, 0, confirmedAlts.length);
   try {
     plugin.setAlts(args[0], confirmedAlts);
     return true;
   } catch (IOException e) {
     sender.sendMessage("IOException accured when trying to write to excluded_alts.txt");
     e.printStackTrace();
     return false;
   }
 }
 private boolean getAlts(CommandSender sender, String[] args) {
   if (args.length != 1) {
     return false;
   }
   String[] alts = plugin.getAltsList().getAltsArray(args[0]);
   if (alts.length == 0) {
     sender.sendMessage("No information about " + args[0]);
     return false;
   } else {
     String message = "";
     for (int x = 0; x < alts.length; x++) {
       message = message + alts[x] + ", ";
     }
     sender.sendMessage(message);
     return true;
   }
 }
Esempio n. 12
0
  public Summon(final UUID uuid, Location returnLoc, PrisonPearl prison) {
    this.uuid = uuid;
    this.returnLoc = returnLoc;
    this.pp = prison;
    distance = PrisonPearlConfig.getSummonDamageRadius();
    amountDamage = PrisonPearlConfig.getSummonDamageAmount();
    if (pp == null)
      Bukkit.getScheduler()
          .runTaskLater(
              PrisonPearlPlugin.getInstance(),
              new Runnable() {

                @Override
                public void run() {
                  pp = PrisonPearlPlugin.getPrisonPearlManager().getByImprisoned(uuid);
                }
              },
              1);
  }
 private boolean locateCmd(CommandSender sender, String args[], boolean any) {
   String name_is;
   String name_possesive;
   PrisonPearl pp;
   if (!any) {
     if (args.length != 0) return false;
     if (!(sender instanceof Player)) {
       sender.sendMessage("Must use pplocateany at the console");
       return true;
     }
     name_is = "You are";
     name_possesive = "Your";
     pp = pearls.getByImprisoned((Player) sender);
   } else {
     if (args.length != 1) return false;
     name_is = args[0] + " is";
     name_possesive = args[0] + "'s";
     pp = pearls.getByImprisoned(args[0]);
   }
   if (pp != null) {
     if (!pp.verifyLocation()) {
       System.err.println(
           "PrisonPearl for " + pp.getImprisonedName() + " didn't validate, so is now set free");
       pearlman.freePearl(pp);
       plugin
           .getLogger()
           .info(
               pp.getImprisonedName()
                   + " is being freed. Reason: Locate command returned a invalid pearl.");
     } else {
       sender.sendMessage(
           ChatColor.GREEN + name_possesive + " prison pearl is " + pp.describeLocation());
       if (sender instanceof Player && !any)
         broadcastman.broadcast(
             (Player) sender,
             ChatColor.GREEN + pp.getImprisonedName() + ": " + pp.describeLocation());
     }
   } else {
     sender.sendMessage(name_is + " not imprisoned");
   }
   return true;
 }
 private boolean summonCmd(CommandSender sender, String args[]) {
   if (args.length > 1) return false;
   if (!(sender instanceof Player)) {
     sender.sendMessage("Command cannot be used at console");
     return true;
   }
   Player player = (Player) sender;
   PrisonPearl pp;
   if (args.length == 1) {
     try {
       pp = getCommandPearl(player, args, 0);
     } catch (NumberFormatException e) {
       pp = getCommandPearl(player, args, 1);
     }
   } else {
     pp = getCommandPearl(player, args, 0);
   }
   if (pp == null) return true;
   // check if the pearled player is combat tagged
   if (plugin.isCombatTagged(pp.getImprisonedName())) {
     sender.sendMessage(
         ChatColor.RED
             + "[PrisonPearl]"
             + ChatColor.WHITE
             + " You cannot summon a CombatTagged player.");
     return true;
   }
   if (pp.getImprisonedPlayer() == null || pp.getImprisonedPlayer().isDead()) {
     sender.sendMessage(pp.getImprisonedName() + " cannot be summoned");
     return true;
   } else if (pp.getImprisonedPlayer() == player) {
     sender.sendMessage("You cannot summon yourself!");
     return true;
   } else if (summonman.isSummoned(pp)) {
     sender.sendMessage(pp.getImprisonedName() + " is already summoned");
     return true;
   }
   if (summonman.summonPearl(pp)) sender.sendMessage("You've summoned " + pp.getImprisonedName());
   else sender.sendMessage("You failed to summon " + pp.getImprisonedName());
   return true;
 }
Esempio n. 15
0
  public void run() {
    scheduled = false;

    long nowtick = getNowTick();

    Iterator<DamageLog> i = logs.values().iterator();
    long minremaining = Long.MAX_VALUE;
    while (i.hasNext()) {
      DamageLog log = i.next();
      long remaining = nowtick - log.getExpiresTick();

      if (remaining <= plugin.getConfig().getInt("damagelog_ticks") / 20) {
        i.remove();
        continue;
      }

      minremaining = Math.min(minremaining, remaining);
    }

    if (minremaining < Long.MAX_VALUE) scheduleExpireTask(minremaining);
  }
 private boolean freeCmd(CommandSender sender, String args[], boolean any) {
   PrisonPearl pp;
   if (!any) {
     if (args.length > 1) return false;
     if (!(sender instanceof Player)) {
       sender.sendMessage("Must use freeany at console");
       return true;
     }
     Player player = (Player) sender;
     int slot = getCommandPearlSlot(player, args, 0);
     if (slot == -1) return true;
     pp = pearls.getByItemStack(player.getInventory().getItem(slot));
     player.getInventory().setItem(slot, null);
   } else {
     if (args.length != 1) return false;
     pp = pearls.getByImprisoned(args[0]);
     if (pp == null) {
       sender.sendMessage(args[0] + " is not imprisoned");
       return true;
     }
   }
   if (pearlman.freePearl(pp)) {
     plugin
         .getLogger()
         .info(
             pp.getImprisonedName()
                 + " is being freed. Reason: Freed via command by "
                 + sender.getName());
     if (pp.getImprisonedPlayer()
         != sender) // when freeing yourself, you're already going to get a message
     sender.sendMessage("You've freed " + pp.getImprisonedName());
   } else {
     sender.sendMessage("You failed to free " + pp.getImprisonedName());
   }
   return true;
 }
 private Configuration getConfig() {
   return plugin.getConfig();
 }
  public String feedPearls(PrisonPearlManager pearlman) {
    String message = "";
    String log = "";
    ConcurrentHashMap<UUID, PrisonPearl> map =
        new ConcurrentHashMap<UUID, PrisonPearl>(pearls_byimprisoned);

    long inactive_seconds = this.getConfig().getLong("ignore_feed.seconds", 0);
    long inactive_hours = this.getConfig().getLong("ignore_feed.hours", 0);
    long inactive_days = this.getConfig().getLong("ignore_feed.days", 0);

    long feedDelay =
        getConfig()
            .getLong(
                "feed_delay",
                72000000); // if pearls have been fed in the last x millis it wont feed, defaults to
                           // 20 hours
    if (lastFeed >= System.currentTimeMillis() - feedDelay) {
      return "Pearls have already been fed, not gonna do it again just yet";
    } else {
      log += "\nSetting last feed time";
      lastFeed = System.currentTimeMillis();
    }

    int pearlsfed = 0;
    int coalfed = 0;
    int freedpearls = 0;
    for (PrisonPearl pp : map.values()) {

      final UUID prisonerId = pp.getImprisonedId();
      // final String prisoner = Bukkit.getPlayer(prisonerId).getName();
      Inventory inv[] = new Inventory[2];
      int retval = HolderStateToInventory(pp, inv);
      Location loc = pp.getLocation();
      if (loc instanceof FakeLocation) { // Not on server
        continue; // Other server will handle feeding
      }
      if (!upgradePearl(inv[0], pp) && inv[1] != null) {
        upgradePearl(inv[1], pp);
      }
      if (retval == HolderStateToInventory_BADCONTAINER) {
        String reason =
            prisonerId + " is being freed. Reason: Freed during coal feed, container was corrupt.";
        pearlman.freePearl(pp, reason);
        log += "\n freed:" + prisonerId + ",reason:" + "badcontainer";
        freedpearls++;
        continue;
      } else if (retval != HolderStateToInventory_SUCCESS) {
        continue;
      } else if (plugin.getWBManager().isMaxFeed(loc)) {
        String reason =
            prisonerId
                + " is being freed. Reason: Freed during coal feed, was outside max distance.";
        pearlman.freePearl(pp, reason);
        log += "\n freed:" + prisonerId + ",reason:" + "maxDistance";
        freedpearls++;
        continue;
      }
      if (inactive_seconds != 0 || inactive_hours != 0 || inactive_days != 0) {
        long inactive_time = pp.getImprisonedOfflinePlayer().getLastPlayed();
        long inactive_millis =
            inactive_seconds * 1000 + inactive_hours * 3600000 + inactive_days * 86400000;
        inactive_time += inactive_millis;
        if (inactive_time <= System.currentTimeMillis()) {
          // if player has not logged on in the set amount of time than ignore feeding
          log += "\nnot fed inactive: " + prisonerId;
          continue;
        }
      }
      message = message + "Pearl Id: " + prisonerId + " in a " + pp.getHolderBlockState().getType();
      ItemStack requirement = plugin.getPPConfig().getUpkeepResource();
      int requirementSize = requirement.getAmount();

      if (inv[0].containsAtLeast(requirement, requirementSize)) {
        int pearlnum;
        pearlnum = inv.length;
        message = message + "\n Chest contains enough purestrain coal.";
        inv[0].removeItem(requirement);
        pearlsfed++;
        coalfed += requirementSize;
        log += "\n fed:" + prisonerId + ",location:" + pp.describeLocation();
      } else if (inv[1] != null && inv[1].containsAtLeast(requirement, requirementSize)) {
        message = message + "\n Chest contains enough purestrain coal.";
        inv[1].removeItem(requirement);
        pearlsfed++;
        coalfed += requirementSize;
        log += "\n fed:" + prisonerId + ",location:" + pp.describeLocation();
      } else {
        message = message + "\n Chest does not contain enough purestrain coal.";
        String reason =
            prisonerId
                + " is being freed. Reason: Freed during coal feed, container did not have enough coal.";
        pearlman.freePearl(pp, reason);
        log +=
            "\n freed:" + prisonerId + ",reason:" + "nocoal" + ",location:" + pp.describeLocation();
        freedpearls++;
      }
    }
    message =
        message
            + "\n Feeding Complete. "
            + pearlsfed
            + " were fed "
            + coalfed
            + " coal. "
            + freedpearls
            + " players were freed.";
    return message;
  }
  public String feedPearls(PrisonPearlManager pearlman) {
    String message = "";
    String log = "";
    ConcurrentHashMap<Short, PrisonPearl> map =
        new ConcurrentHashMap<Short, PrisonPearl>(pearls_byid);

    long inactive_seconds = this.getConfig().getLong("ignore_feed.seconds", 0);
    long inactive_hours = this.getConfig().getLong("ignore_feed.hours", 0);
    long inactive_days = this.getConfig().getLong("ignore_feed.days", 0);

    int pearlsfed = 0;
    int coalfed = 0;
    int freedpearls = 0;
    for (PrisonPearl pp : map.values()) {
      Inventory inv[] = new Inventory[2];
      int retval = HolderStateToInventory(pp, inv);
      if (retval == HolderStateToInventory_BADCONTAINER) {
        pearlman.freePearl(pp);
        plugin
            .getLogger()
            .info(
                pp.getImprisonedName()
                    + " is being freed. Reason: Freed during coal feed, container was corrupt.");
        log += "\n freed:" + pp.getImprisonedName() + ",reason:" + "badcontainer";
        freedpearls++;
        continue;
      } else if (retval != HolderStateToInventory_SUCCESS) {
        continue;
      }
      if (!upgradePearl(inv[0], pp) && inv[1] != null) {
        upgradePearl(inv[1], pp);
      }
      if (inactive_seconds != 0 || inactive_hours != 0 || inactive_days != 0) {
        long inactive_time = pp.getImprisonedOfflinePlayer().getLastPlayed();
        long inactive_millis =
            inactive_seconds * 1000 + inactive_hours * 3600000 + inactive_days * 86400000;
        inactive_time += inactive_millis;
        if (inactive_time <= System.currentTimeMillis()) {
          // if player has not logged on in the set amount of time than ignore feeding
          log += "\nnot fed inactive: " + pp.getImprisonedName();
          continue;
        }
      }
      message =
          message
              + "Pearl #"
              + pp.getID()
              + ",Name: "
              + pp.getImprisonedName()
              + " in a "
              + pp.getHolderBlockState().getType();
      ItemStack requirement = plugin.getPPConfig().getUpkeepResource();
      int requirementSize = requirement.getAmount();

      if (inv[0].containsAtLeast(requirement, requirementSize)) {
        int pearlnum;
        pearlnum = inv.length;
        message = message + "\n Chest contains enough purestrain coal.";
        inv[0].removeItem(requirement);
        pearlsfed++;
        coalfed += requirementSize;
        log += "\n fed:" + pp.getImprisonedName() + ",location:" + pp.describeLocation();
      } else if (inv[1] != null && inv[1].containsAtLeast(requirement, requirementSize)) {
        message = message + "\n Chest contains enough purestrain coal.";
        inv[1].removeItem(requirement);
        pearlsfed++;
        coalfed += requirementSize;
        log += "\n fed:" + pp.getImprisonedName() + ",location:" + pp.describeLocation();
      } else {
        message = message + "\n Chest does not contain enough purestrain coal.";
        plugin
            .getLogger()
            .info(
                pp.getImprisonedName()
                    + " is being freed. Reason: Freed during coal feed, container did not have enough coal.");
        pearlman.freePearl(pp);
        log +=
            "\n freed:"
                + pp.getImprisonedName()
                + ",reason:"
                + "nocoal"
                + ",location:"
                + pp.describeLocation();
        freedpearls++;
      }
    }
    message =
        message
            + "\n Feeding Complete. "
            + pearlsfed
            + " were fed "
            + coalfed
            + " coal. "
            + freedpearls
            + " players were freed.";
    return message;
  }
Esempio n. 20
0
 public List<Player> getDamagers(Player player) {
   DamageLog log = logs.get(player.getName());
   if (log != null) return log.getDamagers(plugin.getConfig().getInt("damagelog_min"));
   else return new ArrayList<Player>();
 }