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; }
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; } }
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; }
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; }
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>(); }