List of usage examples for com.google.common.collect Multiset elementSet
Set<E> elementSet();
From source file:org.dllearner.algorithms.qtl.experiments.QTLEvaluation.java
private RDFResourceTree applyBaseLine(ExamplesWrapper examples, Baseline baselineApproach) { Collection<RDFResourceTree> posExamples = examples.posExamplesMapping.values(); Collection<RDFResourceTree> negExamples = examples.negExamplesMapping.values(); switch (baselineApproach) { case RANDOM:// 1. String query = "SELECT ?cls WHERE {?cls a owl:Class .} ORDER BY RAND() LIMIT 1"; QueryExecution qe = qef.createQueryExecution(query); ResultSet rs = qe.execSelect(); if (rs.hasNext()) { QuerySolution qs = rs.next(); Resource cls = qs.getResource("cls"); RDFResourceTree solution = new RDFResourceTree(); solution.addChild(new RDFResourceTree(cls.asNode()), RDF.type.asNode()); return solution; }/*from w w w . j av a2 s. c o m*/ case MOST_POPULAR_TYPE_IN_KB:// 2. query = "SELECT ?cls WHERE {?cls a owl:Class . ?s a ?cls .} ORDER BY DESC(COUNT(?s)) LIMIT 1"; qe = qef.createQueryExecution(query); rs = qe.execSelect(); if (rs.hasNext()) { QuerySolution qs = rs.next(); Resource cls = qs.getResource("cls"); RDFResourceTree solution = new RDFResourceTree(); solution.addChild(new RDFResourceTree(cls.asNode()), RDF.type.asNode()); return solution; } case MOST_FREQUENT_TYPE_IN_EXAMPLES:// 3. Multiset<Node> types = HashMultiset.create(); for (RDFResourceTree ex : posExamples) { List<RDFResourceTree> children = ex.getChildren(RDF.type.asNode()); for (RDFResourceTree child : children) { types.add(child.getData()); } } Node mostFrequentType = Ordering.natural().onResultOf(new Function<Multiset.Entry<Node>, Integer>() { @Override public Integer apply(Multiset.Entry<Node> entry) { return entry.getCount(); } }).max(types.entrySet()).getElement(); RDFResourceTree solution = new RDFResourceTree(); solution.addChild(new RDFResourceTree(mostFrequentType), RDF.type.asNode()); return solution; case MOST_FREQUENT_EDGE_IN_EXAMPLES:// 4. { Multiset<Pair<Node, Node>> pairs = HashMultiset.create(); for (RDFResourceTree ex : posExamples) { SortedSet<Node> edges = ex.getEdges(); for (Node edge : edges) { List<RDFResourceTree> children = ex.getChildren(edge); for (RDFResourceTree child : children) { pairs.add(new Pair<>(edge, child.getData())); } } } Pair<Node, Node> mostFrequentPair = Ordering.natural() .onResultOf(new Function<Multiset.Entry<Pair<Node, Node>>, Integer>() { @Override public Integer apply(Multiset.Entry<Pair<Node, Node>> entry) { return entry.getCount(); } }).max(pairs.entrySet()).getElement(); solution = new RDFResourceTree(); solution.addChild(new RDFResourceTree(mostFrequentPair.getValue()), mostFrequentPair.getKey()); return solution; } case MOST_INFORMATIVE_EDGE_IN_EXAMPLES: // get all p-o in pos examples Multiset<Pair<Node, Node>> edgeObjectPairs = HashMultiset.create(); for (RDFResourceTree ex : posExamples) { SortedSet<Node> edges = ex.getEdges(); for (Node edge : edges) { List<RDFResourceTree> children = ex.getChildren(edge); for (RDFResourceTree child : children) { edgeObjectPairs.add(new Pair<>(edge, child.getData())); } } } double bestAccuracy = -1; solution = new RDFResourceTree(); for (Pair<Node, Node> pair : edgeObjectPairs.elementSet()) { Node edge = pair.getKey(); Node childValue = pair.getValue(); // compute accuracy int tp = edgeObjectPairs.count(pair); int fn = posExamples.size() - tp; int fp = 0; for (RDFResourceTree ex : negExamples) { // compute false positives List<RDFResourceTree> children = ex.getChildren(edge); if (children != null) { for (RDFResourceTree child : children) { if (child.getData().equals(childValue)) { fp++; break; } } } } int tn = negExamples.size() - fp; double accuracy = Heuristics.getPredictiveAccuracy(posExamples.size(), negExamples.size(), tp, tn, 1.0); // update best solution if (accuracy >= bestAccuracy) { solution = new RDFResourceTree(); solution.addChild(new RDFResourceTree(childValue), edge); bestAccuracy = accuracy; } } return solution; case LGG: LGGGenerator lggGenerator = new LGGGeneratorSimple(); RDFResourceTree lgg = lggGenerator.getLGG(Lists.newArrayList(posExamples)); return lgg; default: break; } return null; }
From source file:edu.umd.cs.submitServer.servlets.AnalyzeArchives.java
@Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Connection conn = null;/* w ww .ja v a 2s . c om*/ response.setContentType("text/plain"); PrintWriter writer = response.getWriter(); Project project = (Project) request.getAttribute("project"); Course course = (Course) request.getAttribute("course"); long totalArchiveSpace = 0; long totalDistinctArchiveSpace = 0; HashSet<Integer> seen = new HashSet<Integer>(); HashMap<String, FileContents> archiveContents = new HashMap<String, FileContents>(); Multiset<String> files = HashMultiset.create(); Multiset<String> checksums = HashMultiset.create(); try { conn = getConnection(); List<Integer> archives = Submission.getAllArchivesForProject(project.getProjectPK(), conn); writer.printf("Analyzing %d submissions for %s project %s%n", archives.size(), course.getCourseName(), project.getProjectNumber()); for (Integer archivePK : archives) { byte[] bytes = Archive.downloadBytesFromArchive((String) Submission.SUBMISSION_ARCHIVES, (Integer) archivePK, (Connection) conn); totalArchiveSpace += bytes.length; if (!seen.add(archivePK)) continue; totalDistinctArchiveSpace += bytes.length; TreeMap<String, byte[]> contents = Archive.unzip(new ByteArrayInputStream(bytes)); for (Map.Entry<String, byte[]> e : contents.entrySet()) { byte[] archiveBytes = e.getValue(); String checksum = Checksums.getChecksum(archiveBytes); String name = e.getKey(); files.add(name); checksums.add(checksum); FileContents info = archiveContents.get(checksum); if (info == null) { info = new FileContents(name, TextUtilities.isText(TextUtilities.simpleName(name)), archiveBytes.length, checksum, null); archiveContents.put(checksum, info); } } } } catch (SQLException e) { throw new ServletException(e); } finally { releaseConnection(conn); } long totalSize = 0; TreeSet<FileContents> ordered = new TreeSet<FileContents>(archiveContents.values()); writer.printf("%5s %9s %s%n", "#", "size", "name"); String prevName = null; for (FileContents info : ordered) { if (prevName == null || !prevName.equals(info.name)) { if (prevName != null) writer.println(); writer.printf("%5d %9s %s%n", files.count(info.name), " ", info.name); prevName = info.name; } int count = checksums.count(info.checksum); writer.printf("%5d %9d %s%n", count, info.size, info.name); totalSize += info.size; } writer.printf("%n"); writer.printf("%d distinct archives%n", seen.size()); writer.printf("%d distinct files%n", files.elementSet().size()); writer.printf("%d total files%n", files.size()); writer.printf("%d bytes in distinct archives%n", totalDistinctArchiveSpace); writer.printf("%d bytes in repeated archives%n", totalArchiveSpace); writer.printf("%d bytes as files%n", totalSize); }
From source file:org.apache.mahout.classifier.sgd.TrainASFEmail.java
@Override public int run(String[] args) throws Exception { addInputOption();/*from w w w .j a v a 2 s . c o m*/ addOutputOption(); addOption("categories", "nc", "The number of categories to train on", true); addOption("cardinality", "c", "The size of the vectors to use", "100000"); addOption("threads", "t", "The number of threads to use in the learner", "20"); addOption("poolSize", "p", "The number of CrossFoldLearners to use in the AdaptiveLogisticRegression. " + "Higher values require more memory.", "5"); if (parseArguments(args) == null) { return -1; } File base = new File(getInputPath().toString()); Multiset<String> overallCounts = HashMultiset.create(); File output = new File(getOutputPath().toString()); output.mkdirs(); int numCats = Integer.parseInt(getOption("categories")); int cardinality = Integer.parseInt(getOption("cardinality", "100000")); int threadCount = Integer.parseInt(getOption("threads", "20")); int poolSize = Integer.parseInt(getOption("poolSize", "5")); Dictionary asfDictionary = new Dictionary(); AdaptiveLogisticRegression learningAlgorithm = new AdaptiveLogisticRegression(numCats, cardinality, new L1(), threadCount, poolSize); learningAlgorithm.setInterval(800); learningAlgorithm.setAveragingWindow(500); //We ran seq2encoded and split input already, so let's just build up the dictionary Configuration conf = new Configuration(); PathFilter trainFilter = new PathFilter() { @Override public boolean accept(Path path) { return path.getName().contains("training"); } }; SequenceFileDirIterator<Text, VectorWritable> iter = new SequenceFileDirIterator<Text, VectorWritable>( new Path(base.toString()), PathType.LIST, trainFilter, null, true, conf); long numItems = 0; while (iter.hasNext()) { Pair<Text, VectorWritable> next = iter.next(); asfDictionary.intern(next.getFirst().toString()); numItems++; } System.out.println(numItems + " training files"); SGDInfo info = new SGDInfo(); iter = new SequenceFileDirIterator<Text, VectorWritable>(new Path(base.toString()), PathType.LIST, trainFilter, null, true, conf); int k = 0; while (iter.hasNext()) { Pair<Text, VectorWritable> next = iter.next(); String ng = next.getFirst().toString(); int actual = asfDictionary.intern(ng); //we already have encoded learningAlgorithm.train(actual, next.getSecond().get()); k++; State<AdaptiveLogisticRegression.Wrapper, CrossFoldLearner> best = learningAlgorithm.getBest(); SGDHelper.analyzeState(info, 0, k, best); } learningAlgorithm.close(); //TODO: how to dissection since we aren't processing the files here //SGDHelper.dissect(leakType, asfDictionary, learningAlgorithm, files, overallCounts); System.out.println("exiting main, writing model to " + output); ModelSerializer.writeBinary(output + "/asf.model", learningAlgorithm.getBest().getPayload().getLearner().getModels().get(0)); List<Integer> counts = Lists.newArrayList(); System.out.println("Word counts"); for (String count : overallCounts.elementSet()) { counts.add(overallCounts.count(count)); } Collections.sort(counts, Ordering.natural().reverse()); k = 0; for (Integer count : counts) { System.out.println(k + "\t" + count); k++; if (k > 1000) { break; } } return 0; }
From source file:de.andreasschoknecht.LS3.DocumentCollection.java
/** * Insert a model to a model collection. This means that the underlying Term-Document Matrix has to be updated. * * @param modelPath the path to the model to be inserted. *//*from w w w .j a v a2 s. c o m*/ public void insertModel(String modelPath) { // Make sure file name is correct if (!modelPath.endsWith(".pnml")) modelPath = modelPath + ".pnml"; // Create new LS3Document object and add it to the document collection list of documents System.out.println("------------------------"); System.out.println("Model to insert:"); System.out.println("------------------------"); System.out.println(modelPath.substring(modelPath.lastIndexOf(File.separator) + 1)); System.out.println("------------------------"); System.out.println("Models in list:"); System.out.println("------------------------"); String[] updatedFileList = new String[fileList.length + 1]; for (int i = 0; i <= fileList.length; i++) { if (i != fileList.length) updatedFileList[i] = fileList[i]; else updatedFileList[i] = modelPath.substring(modelPath.lastIndexOf(File.separator) + 1); System.out.println(updatedFileList[i]); } documentNumber++; LS3Document newDocument = new LS3Document(modelPath); PNMLReader pnmlReader = new PNMLReader(); try { pnmlReader.processDocument(newDocument); } catch (JDOMException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("------------------------"); System.out.println("New LS3Document data:"); System.out.println("------------------------"); System.out.println(newDocument.getPNMLPath()); System.out.println("Amount of terms = " + newDocument.getAmountTerms()); for (String term : newDocument.getTermCollection()) { System.out.println(term); } // Add new column to the Term-Document Matrix int t = tdMatrix.getRowNumber(); double[] termFrequencies = new double[t]; String[] termCollectionArray = new String[termCollection.size()]; termCollection.toArray(termCollectionArray); Multiset<String> termsM = newDocument.getTermCollection(); for (int i = 0; i < t; i++) { termFrequencies[i] = termsM.count(termCollectionArray[i]); termsM.remove(termCollectionArray[i]); } System.out.println("------------------------"); System.out.println("Term frequencies:"); System.out.println("------------------------"); System.out.println(Arrays.toString(termFrequencies)); System.out.println("------------------------"); System.out.println("Old TD Matrix:"); System.out.println("------------------------"); for (int i = 0, k = tdMatrix.getRowNumber(); i < k; i++) { System.out.print(tdMatrix.getTermArray()[i] + " "); for (int j = 0, l = tdMatrix.getColumnNumber(); j < l; j++) { System.out.print(" " + tdMatrix.getMatrix()[i][j] + " "); } System.out.println(""); } System.out.println("---------------------\r\n\r\n"); tdMatrix.addColumn(termFrequencies); System.out.println("------------------------"); System.out.println("New TD Matrix:"); System.out.println("------------------------"); for (int i = 0, k = tdMatrix.getRowNumber(); i < k; i++) { System.out.print(tdMatrix.getTermArray()[i] + " "); for (int j = 0, l = tdMatrix.getColumnNumber(); j < l; j++) { System.out.print(" " + tdMatrix.getMatrix()[i][j] + " "); } System.out.println(""); } System.out.println("---------------------\r\n\r\n"); // Add new terms of the new model to the term list of the document collection System.out.println("------------------------"); System.out.println("Old term collection:"); System.out.println("------------------------"); for (String term : termCollection) { System.out.println(term); } System.out.println("------------------------"); System.out.println("Terms remaining in insertion model:"); System.out.println("------------------------"); System.out.println(Arrays.toString(termsM.toArray(new String[termsM.size()]))); Set<String> termSet = termsM.elementSet(); String[] newTerms = termSet.toArray(new String[termSet.size()]); for (String term : newTerms) { termCollection.add(term); } System.out.println("------------------------"); System.out.println("New term collection:"); System.out.println("------------------------"); for (String term : termCollection) { System.out.println(term); } System.out.println("------------------------"); System.out.println("New term collection TD Matrix:"); System.out.println("------------------------"); for (String term : tdMatrix.getTermArray()) { System.out.println(term); } // Add one row for each new term and add the corresponding Term-Document Matrix entries double[] newTermsFrequencies = new double[newTerms.length]; for (int i = 0; i < newTerms.length; i++) { newTermsFrequencies[i] = termsM.count(newTerms[i]); } System.out.println("------------------------"); System.out.println("New term frequencies:"); System.out.println("------------------------"); System.out.println(Arrays.toString(newTermsFrequencies)); int n = tdMatrix.getColumnNumber(); for (int i = 0; i < newTermsFrequencies.length; i++) { double[] newRow = new double[n]; for (int j = 0; j < n - 2; j++) newRow[j] = 0; newRow[n - 1] = newTermsFrequencies[i]; tdMatrix.addRow(newRow); } // Update term list of TDMatrix object tdMatrix.setTermArray(termCollection.toArray(new String[0])); System.out.println("------------------------"); System.out.println("Final TD Matrix:"); System.out.println("------------------------"); for (int i = 0, k = tdMatrix.getRowNumber(); i < k; i++) { System.out.print(tdMatrix.getTermArray()[i] + " "); for (int j = 0, l = tdMatrix.getColumnNumber(); j < l; j++) { System.out.print(" " + tdMatrix.getMatrix()[i][j] + " "); } System.out.println(""); } System.out.println("---------------------\r\n\r\n"); }
From source file:fr.obeo.releng.targetplatform.validation.TargetPlatformValidator.java
private void reportDuplicatedEnvironmentOptions(final TargetPlatform targetPlatform, final Multiset<String> valuesInFile, final String msg) { if (((valuesInFile.size() > 1) || IterableExtensions.<Multiset.Entry<String>>exists(valuesInFile.entrySet(), new Function1<Multiset.Entry<String>, Boolean>() { @Override/*from w ww . ja v a 2 s . c om*/ public Boolean apply(final Multiset.Entry<String> it) { int _count = it.getCount(); return Boolean.valueOf((_count > 1)); } }))) { final Consumer<String> _function = new Consumer<String>() { @Override public void accept(final String e) { final Consumer<Environment> _function = new Consumer<Environment>() { @Override public void accept(final Environment env) { for (int i = 0; (i < env.getEnv().size()); i++) { { final String it = env.getEnv().get(i); boolean _equals = e.equals(it); if (_equals) { TargetPlatformValidator.this.error(msg, env, TargetPlatformPackage.Literals.ENVIRONMENT__ENV, i, TargetPlatformValidator.CHECK__NO_DUPLICATE_ENVIRONMENT_OPTIONS); } } } } }; Iterables.<Environment>filter(targetPlatform.getContents(), Environment.class) .forEach(_function); } }; valuesInFile.elementSet().forEach(_function); } }
From source file:com.wasteofplastic.acidisland.commands.AdminCmd.java
public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] split) { // Console commands Player player;/*w w w .ja v a 2s . c om*/ if (sender instanceof Player) { player = (Player) sender; if (split.length > 0) { // Admin-only commands : reload, register, delete and purge if (split[0].equalsIgnoreCase("reload") || split[0].equalsIgnoreCase("register") || split[0].equalsIgnoreCase("delete") || split[0].equalsIgnoreCase("purge") || split[0].equalsIgnoreCase("confirm") || split[0].equalsIgnoreCase("setspawn") || split[0].equalsIgnoreCase("deleteisland") || split[0].equalsIgnoreCase("setrange") || split[0].equalsIgnoreCase("unregister")) { if (!checkAdminPerms(player, split)) { player.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).errorNoPermission); return true; } } else { // Mod commands if (!checkModPerms(player, split)) { player.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).errorNoPermission); return true; } } } } // Check for zero parameters e.g., /asadmin switch (split.length) { case 0: help(sender, label); return true; case 1: if (Settings.teamChat && split[0].equalsIgnoreCase("spy")) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminLockerrorInGame); return true; } player = (Player) sender; if (VaultHelper.checkPerm(player, Settings.PERMPREFIX + "mod.spy") || player.isOp()) { if (plugin.getChatListener().toggleSpy(player.getUniqueId())) { sender.sendMessage(ChatColor.GREEN + plugin.myLocale().teamChatStatusOn); } else { sender.sendMessage(ChatColor.GREEN + plugin.myLocale().teamChatStatusOff); } return true; } } else if (split[0].equalsIgnoreCase("lock")) { // Just /asadmin lock if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminLockerrorInGame); return true; } player = (Player) sender; Island island = plugin.getGrid().getIslandAt(player.getLocation()); // Check if island exists if (island == null) { player.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).errorNotOnIsland); return true; } else { Player owner = plugin.getServer().getPlayer(island.getOwner()); if (island.isLocked()) { sender.sendMessage(ChatColor.RED + plugin.myLocale().lockUnlocking); island.setLocked(false); if (owner != null) { owner.sendMessage(plugin.myLocale(owner.getUniqueId()).adminLockadminUnlockedIsland); } else { plugin.getMessages().setMessage(island.getOwner(), plugin.myLocale(island.getOwner()).adminLockadminUnlockedIsland); } } else { sender.sendMessage(ChatColor.RED + plugin.myLocale().lockLocking); island.setLocked(true); if (owner != null) { owner.sendMessage(plugin.myLocale(owner.getUniqueId()).adminLockadminLockedIsland); } else { plugin.getMessages().setMessage(island.getOwner(), plugin.myLocale(island.getOwner()).adminLockadminLockedIsland); } } return true; } } else // Find farms if (split[0].equalsIgnoreCase("topbreeders")) { // Go through each island and find how many farms there are sender.sendMessage(plugin.myLocale().adminTopBreedersFinding); //TreeMap<Integer, List<UUID>> topEntityIslands = new TreeMap<Integer, List<UUID>>(); // Generate the stats sender.sendMessage(plugin.myLocale().adminTopBreedersChecking.replace("[number]", String.valueOf(plugin.getGrid().getOwnershipMap().size()))); // Try just finding every entity final List<Entity> allEntities = ASkyBlock.getIslandWorld().getEntities(); final World islandWorld = ASkyBlock.getIslandWorld(); final World netherWorld = ASkyBlock.getNetherWorld(); plugin.getServer().getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { Map<UUID, Multiset<EntityType>> result = new HashMap<UUID, Multiset<EntityType>>(); // Find out where the entities are for (Entity entity : allEntities) { //System.out.println("DEBUG " + entity.getType().toString()); if (entity.getLocation().getWorld().equals(islandWorld) || entity.getLocation().getWorld().equals(netherWorld)) { //System.out.println("DEBUG in world"); if (entity instanceof Creature && !(entity instanceof Player)) { //System.out.println("DEBUG creature"); // Find out where it is Island island = plugin.getGrid().getIslandAt(entity.getLocation()); if (island != null && !island.isSpawn()) { //System.out.println("DEBUG on island"); // Add to result UUID owner = island.getOwner(); Multiset<EntityType> count = result.get(owner); if (count == null) { // New entry for owner //System.out.println("DEBUG new entry for owner"); count = HashMultiset.create(); } count.add(entity.getType()); result.put(owner, count); } } } } // Sort by the number of entities on each island TreeMap<Integer, List<UUID>> topEntityIslands = new TreeMap<Integer, List<UUID>>(); for (Entry<UUID, Multiset<EntityType>> entry : result.entrySet()) { int numOfEntities = entry.getValue().size(); List<UUID> players = topEntityIslands.get(numOfEntities); if (players == null) { players = new ArrayList<UUID>(); } players.add(entry.getKey()); topEntityIslands.put(numOfEntities, players); } final TreeMap<Integer, List<UUID>> topBreeders = topEntityIslands; final Map<UUID, Multiset<EntityType>> finalResult = result; // Now display results in sync thread plugin.getServer().getScheduler().runTask(plugin, new Runnable() { @Override public void run() { if (topBreeders.isEmpty()) { sender.sendMessage(plugin.myLocale().adminTopBreedersNothing); return; } int rank = 1; // Display, largest first for (int numOfEntities : topBreeders.descendingKeySet()) { // Only bother if there's more that 5 animals if (numOfEntities > 5) { // There can be multiple owners in the same position List<UUID> owners = topBreeders.get(numOfEntities); // Go through the owners one by one for (UUID owner : owners) { sender.sendMessage("#" + rank + " " + plugin.getPlayers().getName(owner) + " = " + numOfEntities); String content = ""; Multiset<EntityType> entityCount = finalResult.get(owner); for (EntityType entity : entityCount.elementSet()) { int num = entityCount.count(entity); String color = ChatColor.GREEN.toString(); if (num > 10 && num <= 20) { color = ChatColor.YELLOW.toString(); } else if (num > 20 && num <= 40) { color = ChatColor.GOLD.toString(); } else if (num > 40) { color = ChatColor.RED.toString(); } content += Util.prettifyText(entity.toString()) + " x " + color + num + ChatColor.WHITE + ", "; } int lastComma = content.lastIndexOf(","); // plugin.getLogger().info("DEBUG: last comma " + // lastComma); if (lastComma > 0) { content = content.substring(0, lastComma); } sender.sendMessage(" " + content); } rank++; if (rank > 10) { break; } } } // If we didn't show anything say so if (rank == 1) { sender.sendMessage(plugin.myLocale().adminTopBreedersNothing); } } }); } }); return true; } // Delete island if (split[0].equalsIgnoreCase("deleteisland")) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminDeleteIslandError); return true; } // Set spawn if (split[0].equalsIgnoreCase("setspawn")) { // Find the closest island if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUseInGame); return true; } player = (Player) sender; // Island spawn must be in the island world if (!player.getLocation().getWorld().getName().equals(Settings.worldName)) { player.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).errorWrongWorld); return true; } // The island location is calculated based on the grid Location closestIsland = getClosestIsland(player.getLocation()); Island oldSpawn = plugin.getGrid().getSpawn(); Island newSpawn = plugin.getGrid().getIslandAt(closestIsland); if (newSpawn != null && newSpawn.isSpawn()) { // Already spawn, so just set the world spawn coords plugin.getGrid().setSpawnPoint(player.getLocation()); //ASkyBlock.getIslandWorld().setSpawnLocation(player.getLocation().getBlockX(), player.getLocation().getBlockY(), player.getLocation().getBlockZ()); sender.sendMessage(ChatColor.GREEN + plugin.myLocale().adminSetSpawnset); return true; } // Space otherwise occupied - find if anyone owns it if (newSpawn != null && newSpawn.getOwner() != null) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminSetSpawnownedBy.replace("[name]", plugin.getPlayers().getName(newSpawn.getOwner()))); sender.sendMessage(ChatColor.RED + plugin.myLocale().adminSetSpawnmove); return true; } if (oldSpawn != null) { sender.sendMessage(ChatColor.GOLD + "Changing spawn island location. Warning: old spawn island location at " + oldSpawn.getCenter().getBlockX() + "," + oldSpawn.getCenter().getBlockZ() + " will be at risk of being overwritten with new islands. Recommend to clear that old area."); plugin.getGrid().deleteSpawn(); } // New spawn site is free, so make it official if (newSpawn == null) { // Make the new spawn newSpawn = plugin.getGrid().addIsland(closestIsland.getBlockX(), closestIsland.getBlockZ()); } plugin.getGrid().setSpawn(newSpawn); plugin.getGrid().setSpawnPoint(player.getLocation()); //ASkyBlock.getIslandWorld().setSpawnLocation(player.getLocation().getBlockX(), player.getLocation().getBlockY(), player.getLocation().getBlockZ()); player.sendMessage(ChatColor.GREEN + plugin.myLocale().adminSetSpawnsetting.replace("[location]", player.getLocation().getBlockX() + "," + player.getLocation().getBlockZ())); player.sendMessage(ChatColor.YELLOW + plugin.myLocale().adminSetSpawncenter.replace("[location]", newSpawn.getCenter().getBlockX() + "," + newSpawn.getCenter().getBlockZ())); player.sendMessage(ChatColor.YELLOW + (plugin.myLocale().adminSetSpawnlimits.replace("[min]", newSpawn.getMinX() + "," + newSpawn.getMinZ())).replace("[max]", (newSpawn.getMinX() + newSpawn.getIslandDistance() - 1) + "," + (newSpawn.getMinZ() + newSpawn.getIslandDistance() - 1))); player.sendMessage(ChatColor.YELLOW + plugin.myLocale().adminSetSpawnrange.replace("[number]", String.valueOf(newSpawn.getProtectionSize()))); player.sendMessage(ChatColor.YELLOW + (plugin.myLocale().adminSetSpawncoords.replace("[min]", newSpawn.getMinProtectedX() + ", " + newSpawn.getMinProtectedZ())).replace("[max]", +(newSpawn.getMinProtectedX() + newSpawn.getProtectionSize() - 1) + ", " + (newSpawn.getMinProtectedZ() + newSpawn.getProtectionSize() - 1))); if (newSpawn.isLocked()) { player.sendMessage(ChatColor.RED + plugin.myLocale().adminSetSpawnlocked); } return true; } else if (split[0].equalsIgnoreCase("info") || split[0].equalsIgnoreCase("setrange")) { // Find the closest island if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUseInGame); return true; } Location closestIsland = getClosestIsland(((Player) sender).getLocation()); if (closestIsland == null) { sender.sendMessage(ChatColor.RED + "Sorry, could not find an island. Move closer?"); return true; } Island island = plugin.getGrid().getIslandAt(closestIsland); if (island != null && island.isSpawn()) { sender.sendMessage(ChatColor.GREEN + plugin.myLocale().adminInfotitle); sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().adminSetSpawncenter.replace( "[location]", island.getCenter().getBlockX() + "," + island.getCenter().getBlockZ())); sender.sendMessage(ChatColor.YELLOW + (plugin.myLocale().adminSetSpawnlimits.replace("[min]", island.getMinX() + "," + island.getMinZ())).replace("[max]", (island.getMinX() + island.getIslandDistance() - 1) + "," + (island.getMinZ() + island.getIslandDistance() - 1))); sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().adminSetSpawnrange.replace("[number]", String.valueOf(island.getProtectionSize()))); sender.sendMessage(ChatColor.YELLOW + (plugin.myLocale().adminSetSpawncoords.replace("[min]", island.getMinProtectedX() + ", " + island.getMinProtectedZ())).replace("[max]", +(island.getMinProtectedX() + island.getProtectionSize() - 1) + ", " + (island.getMinProtectedZ() + island.getProtectionSize() - 1))); if (island.isLocked()) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminSetSpawnlocked); } return true; } if (island == null) { plugin.getLogger().info("Get island at was null" + closestIsland); } UUID target = plugin.getPlayers().getPlayerFromIslandLocation(closestIsland); if (target == null) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminInfounowned); return true; } showInfo(target, sender); return true; } else if (split[0].equalsIgnoreCase("resetsign")) { // Find the closest island if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUseInGame); return true; } player = (Player) sender; if (!VaultHelper.checkPerm(player, Settings.PERMPREFIX + "mod.signadmin") && !player.isOp()) { player.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).errorNoPermission); return true; } // Find out whether the player is looking at a warp sign // Look at what the player was looking at BlockIterator iter = new BlockIterator(player, 10); Block lastBlock = iter.next(); while (iter.hasNext()) { lastBlock = iter.next(); if (lastBlock.getType() == Material.AIR) continue; break; } if (!lastBlock.getType().equals(Material.SIGN_POST)) { sender.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).adminResetSignNoSign); return true; } // Check if it is a warp sign Sign sign = (Sign) lastBlock.getState(); sender.sendMessage(ChatColor.GREEN + plugin.myLocale(player.getUniqueId()).adminResetSignFound); // Find out whose island this is // plugin.getLogger().info("DEBUG: closest bedrock: " + // closestBedRock.toString()); UUID target = plugin.getPlayers().getPlayerFromIslandLocation(player.getLocation()); if (target == null) { sender.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).adminInfounowned); return true; } if (plugin.getWarpSignsListener().addWarp(target, lastBlock.getLocation())) { // Change sign color to green sign.setLine(0, ChatColor.GREEN + plugin.myLocale().warpswelcomeLine); sign.update(); sender.sendMessage(ChatColor.GREEN + plugin.myLocale(player.getUniqueId()).adminResetSignRescued .replace("[name]", plugin.getPlayers().getName(target))); return true; } // Warp already exists sender.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).adminResetSignErrorExists .replace("[name]", plugin.getWarpSignsListener().getWarpOwner(lastBlock.getLocation()))); return true; } else if (split[0].equalsIgnoreCase("reload")) { plugin.reloadConfig(); plugin.loadPluginConfig(); plugin.getChallenges().reloadChallengeConfig(); if (Settings.useEconomy && VaultHelper.setupEconomy()) { ControlPanel.loadShop(); } else { Settings.useEconomy = false; } ControlPanel.loadControlPanel(); if (Settings.updateCheck) { plugin.checkUpdates(); } else { plugin.setUpdateCheck(null); } plugin.getIslandCmd().loadSchematics(); sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().reloadconfigReloaded); return true; } else if (split[0].equalsIgnoreCase("topten")) { sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().adminTopTengenerating); TopTen.topTenCreate(sender); return true; } else if (split[0].equalsIgnoreCase("purge")) { if (purgeFlag) { sender.sendMessage(ChatColor.RED + plugin.myLocale().purgealreadyRunning); return true; } sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().purgeusage.replace("[label]", label)); return true; } else if (split[0].equalsIgnoreCase("confirm")) { if (!confirmReq) { sender.sendMessage(ChatColor.RED + plugin.myLocale().confirmerrorTimeLimitExpired); return true; } else { // Tell purge routine to go confirmOK = true; confirmReq = false; } return true; } else { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownCommand); return false; } case 2: // Resetsign <player> - makes a warp sign for player if (split[0].equalsIgnoreCase("resetsign")) { // Find the closest island if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUseInGame); return true; } Player p = (Player) sender; if (!VaultHelper.checkPerm(p, Settings.PERMPREFIX + "mod.signadmin") && !p.isOp()) { p.sendMessage(ChatColor.RED + plugin.myLocale(p.getUniqueId()).errorNoPermission); return true; } // Convert target name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1]); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); } else { // Check if this player has an island if (!plugin.getPlayers().hasIsland(playerUUID) && !plugin.getPlayers().inTeam(playerUUID)) { // No island sender.sendMessage(ChatColor.RED + plugin.myLocale().errorNoIslandOther); return true; } // Has an island // Find out whether the player is looking at a warp sign // Look at what the player was looking at BlockIterator iter = new BlockIterator(p, 10); Block lastBlock = iter.next(); while (iter.hasNext()) { lastBlock = iter.next(); if (lastBlock.getType() == Material.AIR) continue; break; } // Check if it is a sign if (!lastBlock.getType().equals(Material.SIGN_POST)) { sender.sendMessage(ChatColor.RED + plugin.myLocale(p.getUniqueId()).adminResetSignNoSign); return true; } Sign sign = (Sign) lastBlock.getState(); // Check if the sign is within the right island boundary Location islandLoc = plugin.getPlayers().getIslandLocation(playerUUID); if (!plugin.getGrid().getIslandAt(islandLoc).inIslandSpace(sign.getLocation())) { p.sendMessage( ChatColor.RED + plugin.myLocale(p.getUniqueId()).adminSetHomeNotOnPlayersIsland); } else { sender.sendMessage(ChatColor.GREEN + plugin.myLocale(p.getUniqueId()).adminResetSignFound); // Find out if this player is allowed to have a sign on this island if (plugin.getWarpSignsListener().addWarp(playerUUID, lastBlock.getLocation())) { // Change sign color to green sign.setLine(0, ChatColor.GREEN + plugin.myLocale().warpswelcomeLine); sign.update(); p.sendMessage(ChatColor.GREEN + plugin.myLocale(p.getUniqueId()).adminResetSignRescued .replace("[name]", plugin.getPlayers().getName(playerUUID))); return true; } // Warp already exists sender.sendMessage(ChatColor.RED + plugin.myLocale(p.getUniqueId()).adminResetSignErrorExists.replace("[name]", plugin.getWarpSignsListener().getWarpOwner(lastBlock.getLocation()))); } } return true; } // Delete the island you are on else if (split[0].equalsIgnoreCase("deleteisland")) { if (!split[1].equalsIgnoreCase("confirm")) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminDeleteIslandError); return true; } // Get the island I am on Island island = plugin.getGrid().getIslandAt(((Player) sender).getLocation()); if (island == null) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminDeleteIslandnoid); return true; } // Try to get the owner of this island UUID owner = island.getOwner(); String name = "unknown"; if (owner != null) { name = plugin.getPlayers().getName(owner); sender.sendMessage( ChatColor.RED + plugin.myLocale().adminSetSpawnownedBy.replace("[name]", name)); sender.sendMessage( ChatColor.RED + plugin.myLocale().adminDeleteIslanduse.replace("[name]", name)); return true; } else { sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().deleteremoving.replace("[name]", name)); deleteIslands(island, sender); return true; } } else if (split[0].equalsIgnoreCase("resethome")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1]); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); } else { // Check if this player has an island if (!plugin.getPlayers().hasIsland(playerUUID) && !plugin.getPlayers().inTeam(playerUUID)) { // No island sender.sendMessage(ChatColor.RED + plugin.myLocale().errorNoIslandOther); return true; } // Has an island Location safeHome = plugin.getGrid().getSafeHomeLocation(playerUUID, 1); if (safeHome == null) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminSetHomeNoneFound); } else { plugin.getPlayers().setHomeLocation(playerUUID, safeHome); sender.sendMessage(ChatColor.GREEN + plugin.myLocale().adminSetHomeHomeSet.replace( "[location]", safeHome.getBlockX() + ", " + safeHome.getBlockY() + "," + safeHome.getBlockZ())); } } return true; } else if (split[0].equalsIgnoreCase("sethome")) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminLockerrorInGame); return true; } player = (Player) sender; // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1]); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); } else { // Check if this player has an island if (!plugin.getPlayers().hasIsland(playerUUID) && !plugin.getPlayers().inTeam(playerUUID)) { // No island player.sendMessage( ChatColor.RED + plugin.myLocale(player.getUniqueId()).errorNoIslandOther); return true; } // Has an island Location islandLoc = plugin.getPlayers().getIslandLocation(playerUUID); // Check the player is within the island boundaries if (!plugin.getGrid().getIslandAt(islandLoc).inIslandSpace(player.getLocation())) { player.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).adminSetHomeNotOnPlayersIsland); } else { // Check that the location is safe if (!GridManager.isSafeLocation(player.getLocation())) { // Not safe player.sendMessage( ChatColor.RED + plugin.myLocale(player.getUniqueId()).adminSetHomeNoneFound); } else { // Success plugin.getPlayers().setHomeLocation(playerUUID, player.getLocation()); player.sendMessage( ChatColor.GREEN + plugin.myLocale(player.getUniqueId()).adminSetHomeHomeSet .replace("[location]", player.getLocation().getBlockX() + ", " + player.getLocation().getBlockY() + "," + player.getLocation().getBlockZ())); } } } return true; } else // Set protection for the island the player is on if (split[0].equalsIgnoreCase("setrange")) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminLockerrorInGame); return true; } player = (Player) sender; UUID playerUUID = player.getUniqueId(); Island island = plugin.getGrid().getIslandAt(player.getLocation()); // Check if island exists if (island == null) { player.sendMessage(ChatColor.RED + plugin.myLocale().errorNotOnIsland); return true; } else { int newRange = 10; int maxRange = Settings.islandDistance; // If spawn do something different if (island.isSpawn()) { try { newRange = Integer.valueOf(split[1]); } catch (Exception e) { player.sendMessage(ChatColor.RED + plugin.myLocale(playerUUID).adminSetRangeInvalid); return true; } player.sendMessage(ChatColor.GREEN + plugin.myLocale(playerUUID).adminSetRangeSet .replace("[number]", String.valueOf(newRange))); if (newRange > maxRange) { player.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + plugin.myLocale(playerUUID).adminSetRangeWarning.replace("[max]", String.valueOf(maxRange))); player.sendMessage(ChatColor.RED + plugin.myLocale(playerUUID).adminSetRangeWarning2); } island.setProtectionSize(newRange); player.sendMessage( ChatColor.YELLOW + plugin.myLocale().adminSetSpawncenter.replace("[location]", island.getCenter().getBlockX() + "," + island.getCenter().getBlockZ())); player.sendMessage(ChatColor.YELLOW + plugin.myLocale().adminSetSpawnlimits .replace("[min]", island.getMinX() + "," + island.getMinZ()) .replace("[max]", (island.getMinX() + island.getIslandDistance() - 1) + "," + (island.getMinZ() + island.getIslandDistance() - 1))); player.sendMessage(ChatColor.YELLOW + plugin.myLocale().adminSetSpawnrange .replace("[number]", String.valueOf(island.getProtectionSize()))); player.sendMessage(ChatColor.YELLOW + plugin.myLocale().adminSetSpawncoords .replace("[min]", island.getMinProtectedX() + ", " + island.getMinProtectedZ()) .replace("[max]", +(island.getMinProtectedX() + island.getProtectionSize() - 1) + ", " + (island.getMinProtectedZ() + island.getProtectionSize() - 1))); if (island.isLocked()) { player.sendMessage(ChatColor.RED + plugin.myLocale().adminSetSpawnlocked); } } else { if (!plugin.getConfig().getBoolean("island.overridelimit")) { maxRange -= 16; } try { newRange = Integer.valueOf(split[1]); } catch (Exception e) { player.sendMessage(ChatColor.RED + plugin.myLocale(playerUUID).adminSetRangeInvalid + " " + plugin.myLocale(playerUUID).adminSetRangeTip.replace("[max]", String.valueOf(maxRange))); return true; } if (newRange < 10 || newRange > maxRange) { player.sendMessage(ChatColor.RED + plugin.myLocale(playerUUID).adminSetRangeInvalid + " " + plugin.myLocale(playerUUID).adminSetRangeTip.replace("[max]", String.valueOf(maxRange))); return true; } island.setProtectionSize(newRange); player.sendMessage(ChatColor.GREEN + plugin.myLocale(playerUUID).adminSetRangeSet .replace("[number]", String.valueOf(newRange))); showInfo(island.getOwner(), sender); } return true; } } if (split[0].equalsIgnoreCase("purge")) { // PURGE Command // Check for "allow" or "disallow" flags // Protect island from purging if (split[1].equalsIgnoreCase("allow") || split[1].equalsIgnoreCase("disallow")) { // Find the closest island if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminLockerrorInGame); return true; } Player p = (Player) sender; // Island spawn must be in the island world if (!p.getLocation().getWorld().equals(ASkyBlock.getIslandWorld()) && !p.getLocation().getWorld().equals(ASkyBlock.getNetherWorld())) { p.sendMessage(ChatColor.RED + plugin.myLocale(p.getUniqueId()).errorWrongWorld); return true; } Island island = plugin.getGrid().getIslandAt(p.getLocation()); if (island == null) { p.sendMessage(ChatColor.RED + plugin.myLocale(p.getUniqueId()).errorNoIslandOther); return true; } if (split[1].equalsIgnoreCase("allow")) { island.setPurgeProtected(true); } else { island.setPurgeProtected(false); } if (island.isPurgeProtected()) { p.sendMessage(ChatColor.GREEN + plugin.myLocale(p.getUniqueId()).adminAllowPurge); } else { p.sendMessage(ChatColor.GREEN + plugin.myLocale(p.getUniqueId()).adminPreventPurge); } return true; } // Purge runs in the background so if one is already running // this flag stops a repeat if (purgeFlag) { sender.sendMessage(ChatColor.RED + plugin.myLocale().purgealreadyRunning); return true; } if (split[1].equalsIgnoreCase("unowned")) { countUnowned(sender); return true; } // Set the flag purgeFlag = true; // See if this purge unowned // Convert days to hours - no other limit checking? final int time; try { time = Integer.parseInt(split[1]) * 24; } catch (Exception e) { sender.sendMessage(ChatColor.RED + plugin.myLocale().purgeusage.replace("[label]", label)); purgeFlag = false; return true; } sender.sendMessage( ChatColor.YELLOW + plugin.myLocale().purgecalculating.replace("[time]", split[1])); // Check who has not been online since the time for (Entry<UUID, Island> entry : plugin.getGrid().getOwnershipMap().entrySet()) { //plugin.getLogger().info("UUID = " + entry.getKey()); // Only do this if it isn't protected if (entry.getKey() != null && !entry.getValue().isPurgeProtected()) { if (Bukkit.getOfflinePlayer(entry.getKey()).hasPlayedBefore()) { long offlineTime = Bukkit.getOfflinePlayer(entry.getKey()).getLastPlayed(); offlineTime = (System.currentTimeMillis() - offlineTime) / 3600000L; if (offlineTime > time) { //if (plugin.getPlayers().getIslandLevel(entry.getKey()) < Settings.abandonedIslandLevel) { // Check level later removeList.add(entry.getKey()); //} } } else { removeList.add(entry.getKey()); } } } if (removeList.isEmpty()) { sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().purgenoneFound); purgeFlag = false; return true; } sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().purgethisWillRemove .replace("[number]", String.valueOf(removeList.size())) .replace("[level]", String.valueOf(Settings.abandonedIslandLevel))); sender.sendMessage(ChatColor.RED + plugin.myLocale().purgewarning); sender.sendMessage(ChatColor.RED + plugin.myLocale().purgetypeConfirm.replace("[label]", label)); confirmReq = true; confirmOK = false; confirmTimer = 0; new BukkitRunnable() { @Override public void run() { // This waits for 10 seconds and if no // confirmation received, then it // cancels if (confirmTimer++ > 10) { // Ten seconds is up! confirmReq = false; confirmOK = false; purgeFlag = false; removeList.clear(); sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().purgepurgeCancelled); this.cancel(); } else if (confirmOK) { // Set up a repeating task to run every 2 // seconds to remove // islands one by one and then cancel when // done final int total = removeList.size(); new BukkitRunnable() { @Override public void run() { if (removeList.isEmpty() && purgeFlag) { purgeFlag = false; sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().purgefinished); this.cancel(); } if (removeList.size() > 0 && purgeFlag) { // Check the level if (plugin.getPlayers().getIslandLevel( removeList.get(0)) < Settings.abandonedIslandLevel) { sender.sendMessage(ChatColor.YELLOW + "[" + (total - removeList.size() + 1) + "/" + total + "] " + plugin.myLocale().purgeremovingName.replace("[name]", plugin.getPlayers().getName(removeList.get(0)))); plugin.deletePlayerIsland(removeList.get(0), true); } removeList.remove(0); } //sender.sendMessage("Now waiting..."); } }.runTaskTimer(plugin, 0L, 20L); confirmReq = false; confirmOK = false; this.cancel(); } } }.runTaskTimer(plugin, 0L, 40L); return true; } else if (split[0].equalsIgnoreCase("lock")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1]); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } else { Island island = plugin.getGrid().getIsland(playerUUID); if (island != null) { Player owner = plugin.getServer().getPlayer(island.getOwner()); if (island.isLocked()) { sender.sendMessage(ChatColor.RED + plugin.myLocale().lockUnlocking); island.setLocked(false); if (owner != null) { owner.sendMessage( plugin.myLocale(owner.getUniqueId()).adminLockadminUnlockedIsland); } else { plugin.getMessages().setMessage(island.getOwner(), plugin.myLocale(island.getOwner()).adminLockadminUnlockedIsland); } } else { sender.sendMessage(ChatColor.RED + plugin.myLocale().lockLocking); island.setLocked(true); if (owner != null) { owner.sendMessage(plugin.myLocale(owner.getUniqueId()).adminLockadminLockedIsland); } else { plugin.getMessages().setMessage(island.getOwner(), plugin.myLocale(island.getOwner()).adminLockadminLockedIsland); } } } else { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorNoIslandOther); } return true; } } else if (split[0].equalsIgnoreCase("clearreset")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1]); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } else { plugin.getPlayers().setResetsLeft(playerUUID, Settings.resetLimit); sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().clearedResetLimit + " [" + Settings.resetLimit + "]"); return true; } } else if (split[0].equalsIgnoreCase("tp")) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownCommand); return true; } player = (Player) sender; // Convert name to a UUID final UUID targetUUID = plugin.getPlayers().getUUID(split[1]); if (!plugin.getPlayers().isAKnownPlayer(targetUUID)) { player.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).errorUnknownPlayer); return true; } else { if (plugin.getPlayers().hasIsland(targetUUID) || plugin.getPlayers().inTeam(targetUUID)) { // Teleport to the over world Location warpSpot = plugin.getPlayers().getIslandLocation(targetUUID).toVector() .toLocation(ASkyBlock.getIslandWorld()); String failureMessage = ChatColor.RED + plugin.myLocale(player.getUniqueId()).adminTpManualWarp.replace("[location]", warpSpot.getBlockX() + " " + warpSpot.getBlockY() + " " + warpSpot.getBlockZ()); // Try the player's home first Location home = plugin.getPlayers().getHomeLocation(targetUUID); plugin.getGrid(); if (home.getWorld().equals(ASkyBlock.getIslandWorld()) && GridManager.isSafeLocation(home)) { player.teleport(home); return true; } // Other wise, go to a safe spot new SafeSpotTeleport(plugin, player, warpSpot, failureMessage); return true; } sender.sendMessage(plugin.myLocale().errorNoIslandOther); return true; } } else if (split[0].equalsIgnoreCase("tpnether")) { if (!Settings.createNether || !Settings.newNether) { return false; } if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownCommand); return true; } player = (Player) sender; // Convert name to a UUID final UUID targetUUID = plugin.getPlayers().getUUID(split[1]); if (!plugin.getPlayers().isAKnownPlayer(targetUUID)) { player.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).errorUnknownPlayer); return true; } else { if (plugin.getPlayers().hasIsland(targetUUID) || plugin.getPlayers().inTeam(targetUUID)) { // Teleport to the nether Location warpSpot = plugin.getPlayers().getIslandLocation(targetUUID).toVector() .toLocation(ASkyBlock.getNetherWorld()); String failureMessage = ChatColor.RED + plugin.myLocale(player.getUniqueId()).adminTpManualWarp.replace("[location]", warpSpot.getBlockX() + " " + warpSpot.getBlockY() + " " + warpSpot.getBlockZ()); // Try the player's home first Location home = plugin.getPlayers().getHomeLocation(targetUUID); plugin.getGrid(); if (home.getWorld().equals(ASkyBlock.getNetherWorld()) && GridManager.isSafeLocation(home)) { player.teleport(home); return true; } new SafeSpotTeleport(plugin, player, warpSpot, failureMessage); return true; } sender.sendMessage(plugin.myLocale().errorNoIslandOther); return true; } } else if (split[0].equalsIgnoreCase("delete")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1]); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } else { // This now deletes the player and cleans them up even if // they don't have an island sender.sendMessage( ChatColor.YELLOW + plugin.myLocale().deleteremoving.replace("[name]", split[1])); // If they are online and in ASkyBlock then delete their // stuff too Player target = plugin.getServer().getPlayer(playerUUID); if (target != null) { // Clear any coop inventories // CoopPlay.getInstance().returnAllInventories(target); // Remove any of the target's coop invitees and grab // their stuff CoopPlay.getInstance().clearMyInvitedCoops(target); CoopPlay.getInstance().clearMyCoops(target); plugin.resetPlayer(target); } // plugin.getLogger().info("DEBUG: deleting player"); plugin.deletePlayerIsland(playerUUID, true); return true; } } else if (split[0].equalsIgnoreCase("register")) { if (sender instanceof Player) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1]); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } else { if (adminSetPlayerIsland(sender, ((Player) sender).getLocation(), playerUUID)) { sender.sendMessage(ChatColor.GREEN + plugin.myLocale().registersettingIsland.replace("[name]", split[1])); plugin.getGrid().saveGrid(); } else { sender.sendMessage(ChatColor.RED + plugin.myLocale().registererrorBedrockNotFound); } return true; } } else { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownCommand); } return true; } else if (split[0].equalsIgnoreCase("unregister")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1]); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } else { if (plugin.getPlayers().inTeam(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminUnregisterOnTeam); return true; } Location island = plugin.getPlayers().getIslandLocation(playerUUID); if (island == null) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorNoIslandOther); return true; } // Delete player, but keep blocks sender.sendMessage(ChatColor.GREEN + plugin.myLocale().adminUnregisterKeepBlocks .replace("[location]", +plugin.getPlayers().getIslandLocation(playerUUID).getBlockX() + "," + plugin.getPlayers().getIslandLocation(playerUUID).getBlockZ())); plugin.deletePlayerIsland(playerUUID, false); plugin.getGrid().saveGrid(); return true; } } else if (split[0].equalsIgnoreCase("info")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1]); // plugin.getLogger().info("DEBUG: console player info UUID = " // + playerUUID); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } else { showInfo(playerUUID, sender); return true; } } else if (split[0].equalsIgnoreCase("resetallchallenges")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1]); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } plugin.getPlayers().resetAllChallenges(playerUUID); sender.sendMessage( ChatColor.YELLOW + plugin.myLocale().resetChallengessuccess.replace("[name]", split[1])); return true; } else { return false; } case 3: // Confirm purge unowned if (split[0].equalsIgnoreCase("purge")) { if (purgeFlag) { sender.sendMessage(ChatColor.RED + plugin.myLocale().purgealreadyRunning); return true; } // Check if this is purge unowned if (split[1].equalsIgnoreCase("unowned") && split[2].equalsIgnoreCase("confirm")) { if (!purgeUnownedConfirm) { sender.sendMessage(ChatColor.RED + plugin.myLocale().confirmerrorTimeLimitExpired); return true; } else { purgeUnownedConfirm = false; // Purge the unowned islands purgeUnownedIslands(sender); return true; } } } // Set protection if (split[0].equalsIgnoreCase("setrange")) { // Convert name to a UUID UUID playerUUID = plugin.getPlayers().getUUID(split[1]); // Check if player exists if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } // Check if the target is in a team and if so, the leader needs to be adjusted if (plugin.getPlayers().inTeam(playerUUID)) { playerUUID = plugin.getPlayers().getTeamLeader(playerUUID); } // Get the range that this player has now Island island = plugin.getGrid().getIsland(playerUUID); if (island == null) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorNoIslandOther); return true; } else { int newRange = 0; int maxRange = Settings.islandDistance; if (!plugin.getConfig().getBoolean("island.overridelimit")) { maxRange -= 16; } try { newRange = Integer.valueOf(split[2]); } catch (Exception e) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminSetRangeInvalid + " " + plugin.myLocale().adminSetRangeTip.replace("[max]", String.valueOf(maxRange))); return true; } if (newRange < 10 || newRange > maxRange) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminSetRangeInvalid + " " + plugin.myLocale().adminSetRangeTip.replace("[max]", String.valueOf(maxRange))); return true; } island.setProtectionSize(newRange); sender.sendMessage(ChatColor.GREEN + plugin.myLocale().adminSetRangeSet.replace("[number]", String.valueOf(newRange))); showInfo(playerUUID, sender); plugin.getGrid().saveGrid(); return true; } } // Change biomes if (split[0].equalsIgnoreCase("setbiome")) { // Convert name to a UUID UUID playerUUID = plugin.getPlayers().getUUID(split[1]); // Check if player exists if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } // Check if the target is in a team and if so, the leader if (plugin.getPlayers().inTeam(playerUUID)) { playerUUID = plugin.getPlayers().getTeamLeader(playerUUID); } // Check if biome is valid Biome biome = null; String biomeName = split[2].toUpperCase(); try { biome = Biome.valueOf(biomeName); biomeName = biome.name(); if (!plugin.getConfig().contains("biomes." + biomeName)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().biomeUnknown); // Doing it this way ensures that only valid biomes are // shown for (Biome b : Biome.values()) { if (plugin.getConfig().contains("biomes." + b.name())) { sender.sendMessage(b.name()); } } return true; } // Get friendly name biomeName = plugin.getConfig().getString("biomes." + biomeName + ".friendlyname", Util.prettifyText(biomeName)); } catch (Exception e) { sender.sendMessage(ChatColor.RED + plugin.myLocale().biomeUnknown); for (Biome b : Biome.values()) { if (plugin.getConfig().contains("biomes." + b.name())) { sender.sendMessage(b.name()); } } return true; } // Okay clear to set biome // Actually set the biome if (plugin.getPlayers().inTeam(playerUUID) && plugin.getPlayers().getTeamIslandLocation(playerUUID) != null) { plugin.getBiomes().setIslandBiome(plugin.getPlayers().getTeamIslandLocation(playerUUID), biome); } else { plugin.getBiomes().setIslandBiome(plugin.getPlayers().getIslandLocation(playerUUID), biome); } sender.sendMessage(ChatColor.GREEN + plugin.myLocale().biomeSet.replace("[biome]", biomeName)); Player targetPlayer = plugin.getServer().getPlayer(playerUUID); if (targetPlayer != null) { // Online targetPlayer.sendMessage("[Admin] " + ChatColor.GREEN + plugin.myLocale(playerUUID).biomeSet.replace("[biome]", biomeName)); } else { plugin.getMessages().setMessage(playerUUID, "[Admin] " + ChatColor.GREEN + plugin.myLocale(playerUUID).biomeSet.replace("[biome]", biomeName)); } return true; } else // team kick <player> and team delete <leader> if (split[0].equalsIgnoreCase("team")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[2]); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } if (split[1].equalsIgnoreCase("kick")) { // Remove player from team if (!plugin.getPlayers().inTeam(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorNoTeam); return true; } UUID teamLeader = plugin.getPlayers().getTeamLeader(playerUUID); if (teamLeader == null) { // Player is apparently in a team, but there is no team leader // Remove their team status // Clear the player of all team-related items plugin.getPlayers().setLeaveTeam(playerUUID); plugin.getPlayers().setHomeLocation(playerUUID, null); plugin.getPlayers().setIslandLocation(playerUUID, null); // Remove any warps plugin.getWarpSignsListener().removeWarp(playerUUID); sender.sendMessage( ChatColor.RED + plugin.myLocale().kicknameRemoved.replace("[name]", split[2])); return true; } // Payer is not a team leader if (!teamLeader.equals(playerUUID)) { // Clear the player of all team-related items plugin.getPlayers().setLeaveTeam(playerUUID); plugin.getPlayers().setHomeLocation(playerUUID, null); plugin.getPlayers().setIslandLocation(playerUUID, null); // Clear the leader of this player and if they now have // no team, remove the team plugin.getPlayers().removeMember(teamLeader, playerUUID); if (plugin.getPlayers().getMembers(teamLeader).size() < 2) { plugin.getPlayers().setLeaveTeam(teamLeader); } // Remove any warps plugin.getWarpSignsListener().removeWarp(playerUUID); sender.sendMessage( ChatColor.RED + plugin.myLocale().kicknameRemoved.replace("[name]", split[2])); return true; } else { sender.sendMessage( ChatColor.RED + (plugin.myLocale().adminTeamKickLeader.replace("[label]", label)) .replace("[name]", split[2])); return true; } } else { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownCommand); return false; } } else if (split[0].equalsIgnoreCase("completechallenge")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[2]); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } if (plugin.getPlayers().checkChallenge(playerUUID, split[1].toLowerCase()) || !plugin.getPlayers().get(playerUUID).challengeExists(split[1].toLowerCase())) { sender.sendMessage( ChatColor.RED + plugin.myLocale().completeChallengeerrorChallengeDoesNotExist); return true; } plugin.getPlayers().get(playerUUID).completeChallenge(split[1].toLowerCase()); sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().completeChallengechallangeCompleted .replace("[challengename]", split[1].toLowerCase()).replace("[name]", split[2])); return true; } else if (split[0].equalsIgnoreCase("resetchallenge")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[2]); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } if (!plugin.getPlayers().checkChallenge(playerUUID, split[1].toLowerCase()) || !plugin.getPlayers().get(playerUUID).challengeExists(split[1].toLowerCase())) { sender.sendMessage(ChatColor.RED + plugin.myLocale().resetChallengeerrorChallengeDoesNotExist); return true; } plugin.getPlayers().resetChallenge(playerUUID, split[1].toLowerCase()); sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().resetChallengechallengeReset .replace("[challengename]", split[1].toLowerCase()).replace("[name]", split[2])); return true; } else if (split[0].equalsIgnoreCase("info") && split[1].equalsIgnoreCase("challenges")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[2]); // plugin.getLogger().info("DEBUG: console player info UUID = " // + playerUUID); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } else { showInfoChallenges(playerUUID, sender); return true; } } return false; case 4: // Team add <player> <leader> if (split[0].equalsIgnoreCase("team") && split[1].equalsIgnoreCase("add")) { // Convert names to UUIDs final UUID playerUUID = plugin.getPlayers().getUUID(split[2]); final Player targetPlayer = plugin.getServer().getPlayer(playerUUID); final UUID teamLeader = plugin.getPlayers().getUUID(split[3]); if (!plugin.getPlayers().isAKnownPlayer(playerUUID) || !plugin.getPlayers().isAKnownPlayer(teamLeader)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } if (playerUUID.equals(teamLeader)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminTeamAddLeaderToOwn); return true; } // See if leader has an island if (!plugin.getPlayers().hasIsland(teamLeader)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminTeamAddLeaderNoIsland); return true; } // Check to see if this player is already in a team if (plugin.getPlayers().inTeam(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().inviteerrorThatPlayerIsAlreadyInATeam); return true; } // If the leader's member list does not contain their own name // then // add it if (!plugin.getPlayers().getMembers(teamLeader).contains(teamLeader)) { // Set up the team leader plugin.getPlayers().setJoinTeam(teamLeader, teamLeader, plugin.getPlayers().getIslandLocation(teamLeader)); plugin.getPlayers().addTeamMember(teamLeader, teamLeader); sender.sendMessage(ChatColor.GOLD + plugin.myLocale().adminTeamAddedLeader); } // This is a hack to clear any pending invitations if (targetPlayer != null) { targetPlayer.performCommand(Settings.ISLANDCOMMAND + " decline"); } // If the invitee has an island of their own if (plugin.getPlayers().hasIsland(playerUUID)) { Location islandLoc = plugin.getPlayers().getIslandLocation(playerUUID); if (islandLoc != null) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminTeamNowUnowned .replace("[name]", plugin.getPlayers().getName(playerUUID)) .replace("[location]", islandLoc.getBlockX() + " " + islandLoc.getBlockZ())); } } // Remove their old island affiliation - do not delete the // island just in case plugin.deletePlayerIsland(playerUUID, false); // Join the team and set the team island location and leader plugin.getPlayers().setJoinTeam(playerUUID, teamLeader, plugin.getPlayers().getIslandLocation(teamLeader)); // Configure the best home location for this player if (plugin.getPlayers().getHomeLocation(teamLeader) != null) { plugin.getPlayers().setHomeLocation(playerUUID, plugin.getPlayers().getHomeLocation(teamLeader)); sender.sendMessage(ChatColor.GREEN + plugin.myLocale().adminTeamSettingHome); } else { plugin.getPlayers().setHomeLocation(playerUUID, plugin.getPlayers().getIslandLocation(teamLeader)); sender.sendMessage(ChatColor.GREEN + plugin.myLocale().adminTeamSettingHome); } // If the leader's member list does not contain player then add // it if (!plugin.getPlayers().getMembers(teamLeader).contains(playerUUID)) { plugin.getPlayers().addTeamMember(teamLeader, playerUUID); sender.sendMessage(ChatColor.GREEN + plugin.myLocale().adminTeamAddingPlayer); } else { sender.sendMessage(ChatColor.GOLD + plugin.myLocale().adminTeamAlreadyOnTeam); } // Teleport the player if they are online if (targetPlayer != null) { plugin.getGrid().homeTeleport(targetPlayer); } plugin.getGrid().saveGrid(); return true; } else { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownCommand); return false; } default: return false; } }
From source file:com.wasteofplastic.askyblock.commands.AdminCmd.java
@Override public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] split) { // Console commands Player player;/*from ww w. j av a 2 s . c o m*/ if (sender instanceof Player) { player = (Player) sender; if (split.length > 0) { // Admin-only commands : reload, register, delete and purge if (split[0].equalsIgnoreCase("reload") || split[0].equalsIgnoreCase("register") || split[0].equalsIgnoreCase("delete") || split[0].equalsIgnoreCase("purge") || split[0].equalsIgnoreCase("confirm") || split[0].equalsIgnoreCase("setspawn") || split[0].equalsIgnoreCase("deleteisland") || split[0].equalsIgnoreCase("setrange") || split[0].equalsIgnoreCase("reserve") || split[0].equalsIgnoreCase("unregister") || split[0].equalsIgnoreCase("clearresetall") || split[0].equalsIgnoreCase("settingsreset")) { if (!checkAdminPerms(player, split)) { player.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).errorNoPermission); return true; } } else { // Mod commands if (!checkModPerms(player, split)) { player.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).errorNoPermission); return true; } } } } // Island name (can have spaces) if (split.length > 1 && split[0].equalsIgnoreCase("name")) { final UUID playerUUID = plugin.getPlayers().getUUID(split[1], true); // plugin.getLogger().info("DEBUG: console player info UUID = " // + playerUUID); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } else { if (split.length == 2) { // Say the island name sender.sendMessage(plugin.getGrid().getIslandName(playerUUID)); } else { String name = split[2]; for (int i = 3; i < split.length; i++) { name = name + " " + split[i]; } if (name.length() < Settings.minNameLength) { sender.sendMessage(ChatColor.RED + (plugin.myLocale().errorTooShort).replace("[length]", String.valueOf(Settings.minNameLength))); return true; } if (name.length() > Settings.maxNameLength) { sender.sendMessage(ChatColor.RED + (plugin.myLocale().errorTooLong).replace("[length]", String.valueOf(Settings.maxNameLength))); return true; } plugin.getGrid().setIslandName(playerUUID, ChatColor.translateAlternateColorCodes('&', name)); sender.sendMessage(ChatColor.GREEN + plugin.myLocale().generalSuccess); } return true; } } // Check for zero parameters e.g., /asadmin switch (split.length) { case 0: help(sender, label); return true; case 1: if (split[0].equalsIgnoreCase("setdeaths")) { sender.sendMessage(ChatColor.YELLOW + label + " setdeaths <player> <number>:" + ChatColor.WHITE + " " + plugin.myLocale().adminHelpsetDeaths); return true; } else if (split[0].equalsIgnoreCase("settingsreset")) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminHelpSettingsReset); return true; } else if (Settings.teamChat && split[0].equalsIgnoreCase("spy")) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminLockerrorInGame); return true; } player = (Player) sender; if (VaultHelper.checkPerm(player, Settings.PERMPREFIX + "mod.spy") || player.isOp()) { if (plugin.getChatListener().toggleSpy(player.getUniqueId())) { sender.sendMessage(ChatColor.GREEN + plugin.myLocale().teamChatStatusOn); } else { sender.sendMessage(ChatColor.GREEN + plugin.myLocale().teamChatStatusOff); } return true; } } else if (split[0].equalsIgnoreCase("lock")) { // Just /asadmin lock if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminLockerrorInGame); return true; } player = (Player) sender; Island island = plugin.getGrid().getIslandAt(player.getLocation()); // Check if island exists if (island == null) { player.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).errorNotOnIsland); return true; } else { Player owner = plugin.getServer().getPlayer(island.getOwner()); if (island.isLocked()) { sender.sendMessage(ChatColor.RED + plugin.myLocale().lockUnlocking); island.setLocked(false); if (owner != null) { owner.sendMessage(plugin.myLocale(owner.getUniqueId()).adminLockadminUnlockedIsland); } else { plugin.getMessages().setMessage(island.getOwner(), plugin.myLocale(island.getOwner()).adminLockadminUnlockedIsland); } } else { sender.sendMessage(ChatColor.RED + plugin.myLocale().lockLocking); island.setLocked(true); if (owner != null) { owner.sendMessage(plugin.myLocale(owner.getUniqueId()).adminLockadminLockedIsland); } else { plugin.getMessages().setMessage(island.getOwner(), plugin.myLocale(island.getOwner()).adminLockadminLockedIsland); } } return true; } } else // Find farms if (split[0].equalsIgnoreCase("topbreeders")) { // Go through each island and find how many farms there are sender.sendMessage(plugin.myLocale().adminTopBreedersFinding); //TreeMap<Integer, List<UUID>> topEntityIslands = new TreeMap<Integer, List<UUID>>(); // Generate the stats sender.sendMessage(plugin.myLocale().adminTopBreedersChecking.replace("[number]", String.valueOf(plugin.getGrid().getOwnershipMap().size()))); // Try just finding every entity final List<Entity> allEntities = ASkyBlock.getIslandWorld().getEntities(); final World islandWorld = ASkyBlock.getIslandWorld(); final World netherWorld = ASkyBlock.getNetherWorld(); plugin.getServer().getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { Map<UUID, Multiset<EntityType>> result = new HashMap<UUID, Multiset<EntityType>>(); // Find out where the entities are for (Entity entity : allEntities) { //System.out.println("DEBUG " + entity.getType().toString()); if (entity.getLocation().getWorld().equals(islandWorld) || entity.getLocation().getWorld().equals(netherWorld)) { //System.out.println("DEBUG in world"); if (entity instanceof Creature && !(entity instanceof Player)) { //System.out.println("DEBUG creature"); // Find out where it is Island island = plugin.getGrid().getIslandAt(entity.getLocation()); if (island != null && !island.isSpawn()) { //System.out.println("DEBUG on island"); // Add to result UUID owner = island.getOwner(); Multiset<EntityType> count = result.get(owner); if (count == null) { // New entry for owner //System.out.println("DEBUG new entry for owner"); count = HashMultiset.create(); } count.add(entity.getType()); result.put(owner, count); } } } } // Sort by the number of entities on each island TreeMap<Integer, List<UUID>> topEntityIslands = new TreeMap<Integer, List<UUID>>(); for (Entry<UUID, Multiset<EntityType>> entry : result.entrySet()) { int numOfEntities = entry.getValue().size(); List<UUID> players = topEntityIslands.get(numOfEntities); if (players == null) { players = new ArrayList<UUID>(); } players.add(entry.getKey()); topEntityIslands.put(numOfEntities, players); } final TreeMap<Integer, List<UUID>> topBreeders = topEntityIslands; final Map<UUID, Multiset<EntityType>> finalResult = result; // Now display results in sync thread plugin.getServer().getScheduler().runTask(plugin, new Runnable() { @Override public void run() { if (topBreeders.isEmpty()) { sender.sendMessage(plugin.myLocale().adminTopBreedersNothing); return; } int rank = 1; // Display, largest first for (int numOfEntities : topBreeders.descendingKeySet()) { // Only bother if there's more that 5 animals if (numOfEntities > 5) { // There can be multiple owners in the same position List<UUID> owners = topBreeders.get(numOfEntities); // Go through the owners one by one for (UUID owner : owners) { sender.sendMessage("#" + rank + " " + plugin.getPlayers().getName(owner) + " = " + numOfEntities); String content = ""; Multiset<EntityType> entityCount = finalResult.get(owner); for (EntityType entity : entityCount.elementSet()) { int num = entityCount.count(entity); String color = ChatColor.GREEN.toString(); if (num > 10 && num <= 20) { color = ChatColor.YELLOW.toString(); } else if (num > 20 && num <= 40) { color = ChatColor.GOLD.toString(); } else if (num > 40) { color = ChatColor.RED.toString(); } content += Util.prettifyText(entity.toString()) + " x " + color + num + ChatColor.WHITE + ", "; } int lastComma = content.lastIndexOf(","); // plugin.getLogger().info("DEBUG: last comma " + // lastComma); if (lastComma > 0) { content = content.substring(0, lastComma); } sender.sendMessage(" " + content); } rank++; if (rank > 10) { break; } } } // If we didn't show anything say so if (rank == 1) { sender.sendMessage(plugin.myLocale().adminTopBreedersNothing); } } }); } }); return true; } // Delete island if (split[0].equalsIgnoreCase("deleteisland")) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminDeleteIslandError); return true; } // Set spawn if (split[0].equalsIgnoreCase("setspawn")) { // Find the closest island if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUseInGame); return true; } player = (Player) sender; // Island spawn must be in the island world if (!player.getLocation().getWorld().getName().equals(Settings.worldName)) { player.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).errorWrongWorld); return true; } // The island location is calculated based on the grid Location closestIsland = getClosestIsland(player.getLocation()); Island oldSpawn = plugin.getGrid().getSpawn(); Island newSpawn = plugin.getGrid().getIslandAt(closestIsland); if (newSpawn != null && newSpawn.isSpawn()) { // Already spawn, so just set the world spawn coords plugin.getGrid().setSpawnPoint(player.getLocation()); //ASkyBlock.getIslandWorld().setSpawnLocation(player.getLocation().getBlockX(), player.getLocation().getBlockY(), player.getLocation().getBlockZ()); sender.sendMessage(ChatColor.GREEN + plugin.myLocale().adminSetSpawnset); return true; } // Space otherwise occupied - find if anyone owns it if (newSpawn != null && newSpawn.getOwner() != null) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminSetSpawnownedBy.replace("[name]", plugin.getPlayers().getName(newSpawn.getOwner()))); sender.sendMessage(ChatColor.RED + plugin.myLocale().adminSetSpawnmove); return true; } if (oldSpawn != null) { sender.sendMessage(ChatColor.GOLD + "Changing spawn island location. Warning: old spawn island location at " + oldSpawn.getCenter().getBlockX() + "," + oldSpawn.getCenter().getBlockZ() + " will be at risk of being overwritten with new islands. Recommend to clear that old area."); plugin.getGrid().deleteSpawn(); } // New spawn site is free, so make it official if (newSpawn == null) { // Make the new spawn newSpawn = plugin.getGrid().addIsland(closestIsland.getBlockX(), closestIsland.getBlockZ(), Environment.NORMAL); } plugin.getGrid().setSpawn(newSpawn); plugin.getGrid().setSpawnPoint(player.getLocation()); //ASkyBlock.getIslandWorld().setSpawnLocation(player.getLocation().getBlockX(), player.getLocation().getBlockY(), player.getLocation().getBlockZ()); player.sendMessage(ChatColor.GREEN + plugin.myLocale().adminSetSpawnsetting.replace("[location]", player.getLocation().getBlockX() + "," + player.getLocation().getBlockZ())); player.sendMessage(ChatColor.YELLOW + plugin.myLocale().adminSetSpawncenter.replace("[location]", newSpawn.getCenter().getBlockX() + "," + newSpawn.getCenter().getBlockZ())); player.sendMessage(ChatColor.YELLOW + (plugin.myLocale().adminSetSpawnlimits.replace("[min]", newSpawn.getMinX() + "," + newSpawn.getMinZ())).replace("[max]", (newSpawn.getMinX() + newSpawn.getIslandDistance() - 1) + "," + (newSpawn.getMinZ() + newSpawn.getIslandDistance() - 1))); player.sendMessage(ChatColor.YELLOW + plugin.myLocale().adminSetSpawnrange.replace("[number]", String.valueOf(newSpawn.getProtectionSize()))); player.sendMessage(ChatColor.YELLOW + (plugin.myLocale().adminSetSpawncoords.replace("[min]", newSpawn.getMinProtectedX() + ", " + newSpawn.getMinProtectedZ())).replace("[max]", +(newSpawn.getMinProtectedX() + newSpawn.getProtectionSize() - 1) + ", " + (newSpawn.getMinProtectedZ() + newSpawn.getProtectionSize() - 1))); if (newSpawn.isLocked()) { player.sendMessage(ChatColor.RED + plugin.myLocale().adminSetSpawnlocked); } return true; } else if (split[0].equalsIgnoreCase("info") || split[0].equalsIgnoreCase("setrange")) { // Find the closest island if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUseInGame); return true; } Location closestIsland = getClosestIsland(((Player) sender).getLocation()); if (closestIsland == null) { sender.sendMessage(ChatColor.RED + "Sorry, could not find an island. Move closer?"); return true; } Island island = plugin.getGrid().getIslandAt(closestIsland); if (island != null && island.isSpawn()) { sender.sendMessage(ChatColor.GREEN + plugin.myLocale().adminInfotitle); sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().adminSetSpawncenter.replace( "[location]", island.getCenter().getBlockX() + "," + island.getCenter().getBlockZ())); sender.sendMessage(ChatColor.YELLOW + (plugin.myLocale().adminSetSpawnlimits.replace("[min]", island.getMinX() + "," + island.getMinZ())).replace("[max]", (island.getMinX() + island.getIslandDistance() - 1) + "," + (island.getMinZ() + island.getIslandDistance() - 1))); sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().adminSetSpawnrange.replace("[number]", String.valueOf(island.getProtectionSize()))); sender.sendMessage(ChatColor.YELLOW + (plugin.myLocale().adminSetSpawncoords.replace("[min]", island.getMinProtectedX() + ", " + island.getMinProtectedZ())).replace("[max]", +(island.getMinProtectedX() + island.getProtectionSize() - 1) + ", " + (island.getMinProtectedZ() + island.getProtectionSize() - 1))); if (island.isLocked()) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminSetSpawnlocked); } return true; } if (island == null) { plugin.getLogger().info("Get island at was null" + closestIsland); } UUID target = plugin.getPlayers().getPlayerFromIslandLocation(closestIsland); if (target == null) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminInfounowned); return true; } showInfo(target, sender); return true; } else if (split[0].equalsIgnoreCase("resetsign")) { // Find the closest island if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUseInGame); return true; } player = (Player) sender; if (!VaultHelper.checkPerm(player, Settings.PERMPREFIX + "mod.signadmin") && !player.isOp()) { player.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).errorNoPermission); return true; } // Find out whether the player is looking at a warp sign // Look at what the player was looking at BlockIterator iter = new BlockIterator(player, 10); Block lastBlock = iter.next(); while (iter.hasNext()) { lastBlock = iter.next(); if (lastBlock.getType() == Material.AIR) continue; break; } if (!lastBlock.getType().equals(Material.SIGN_POST)) { sender.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).adminResetSignNoSign); return true; } // Check if it is a warp sign Sign sign = (Sign) lastBlock.getState(); sender.sendMessage(ChatColor.GREEN + plugin.myLocale(player.getUniqueId()).adminResetSignFound); // Find out whose island this is // plugin.getLogger().info("DEBUG: closest bedrock: " + // closestBedRock.toString()); UUID target = plugin.getPlayers().getPlayerFromIslandLocation(player.getLocation()); if (target == null) { sender.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).adminInfounowned); return true; } if (plugin.getWarpSignsListener().addWarp(target, lastBlock.getLocation())) { // Change sign color to green sign.setLine(0, ChatColor.GREEN + plugin.myLocale().warpswelcomeLine); sign.update(); sender.sendMessage(ChatColor.GREEN + plugin.myLocale(player.getUniqueId()).adminResetSignRescued .replace("[name]", plugin.getPlayers().getName(target))); return true; } // Warp already exists sender.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).adminResetSignErrorExists .replace("[name]", plugin.getWarpSignsListener().getWarpOwner(lastBlock.getLocation()))); return true; } else if (split[0].equalsIgnoreCase("reload")) { plugin.reloadConfig(); plugin.loadPluginConfig(); plugin.getChallenges().reloadChallengeConfig(); if (Settings.useEconomy && VaultHelper.setupEconomy()) { ControlPanel.loadShop(); } else { Settings.useEconomy = false; } ControlPanel.loadControlPanel(); if (Settings.updateCheck) { plugin.checkUpdates(); } else { plugin.setUpdateCheck(null); } plugin.getIslandCmd().loadSchematics(); sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().reloadconfigReloaded); return true; } else if (split[0].equalsIgnoreCase("topten")) { sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().adminTopTengenerating); TopTen.topTenCreate(sender); return true; } else if (split[0].equalsIgnoreCase("purge")) { if (purgeFlag) { sender.sendMessage(ChatColor.RED + plugin.myLocale().purgealreadyRunning); return true; } sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().purgeusage.replace("[label]", label)); return true; } else if (split[0].equalsIgnoreCase("confirm")) { if (!confirmReq) { sender.sendMessage(ChatColor.RED + plugin.myLocale().confirmerrorTimeLimitExpired); return true; } else { // Tell purge routine to go confirmOK = true; confirmReq = false; } return true; } else // clearesetall - clears all player resets if (split[0].equalsIgnoreCase("clearresetall")) { if (asyncPending) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorCommandNotReady); return true; } // Do online players first plugin.getPlayers().clearResets(Settings.resetLimit); // Do offline players final File playerFolder = plugin.getPlayersFolder(); // Set the pending flag asyncPending = true; // Check against player files plugin.getServer().getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { //System.out.println("DEBUG: Running async task"); int done = 0; // Check files against potentialUnowned FilenameFilter ymlFilter = new FilenameFilter() { @Override public boolean accept(File dir, String name) { String lowercaseName = name.toLowerCase(); if (lowercaseName.endsWith(".yml")) { return true; } else { return false; } } }; for (File file : playerFolder.listFiles(ymlFilter)) { List<String> playerFileContents = new ArrayList<String>(); done++; try { Scanner scanner = new Scanner(file); while (scanner.hasNextLine()) { final String lineFromFile = scanner.nextLine(); if (lineFromFile.contains("resetsLeft:")) { playerFileContents.add("resetsLeft: " + Settings.resetLimit); } else { playerFileContents.add(lineFromFile); } } scanner.close(); // Write file FileWriter writer = new FileWriter(file); for (String str : playerFileContents) { writer.write(str + "\n"); } writer.close(); if (done % 500 == 0) { final int update = done; plugin.getServer().getScheduler().runTask(plugin, new Runnable() { @Override public void run() { // Tell player sender.sendMessage(ChatColor.GREEN + plugin.myLocale().clearedResetLimit + " [" + update + " players]..."); } }); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //System.out.println("DEBUG: scanning done"); asyncPending = false; sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().clearedResetLimit + " [" + done + " players] completed."); } }); return true; } else { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownCommand); return false; } case 2: if (!plugin.getServer().getVersion().contains("(MC: 1.7")) { if (split[0].equalsIgnoreCase("level")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1], true); // plugin.getLogger().info("DEBUG: console player info UUID = " // + playerUUID); if (playerUUID == null) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } else { if (sender instanceof Player) { plugin.getIslandCmd().calculateIslandLevel(sender, playerUUID, false); } else { plugin.getIslandCmd().calculateIslandLevel(sender, playerUUID, true); } return true; } } } if (split[0].equalsIgnoreCase("settingsreset")) { if (split[1].equalsIgnoreCase("confirm")) { sender.sendMessage(ChatColor.GREEN + plugin.myLocale().settingsResetInProgress); plugin.getServer().getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { for (Collection<Island> islands : plugin.getGrid().getOwnedIslands().values()) { for (Island island : islands) { island.setDefaults(); } } for (Island island : plugin.getGrid().getUnownedIslands().values()) { island.setDefaults(); } sender.sendMessage(ChatColor.GREEN + plugin.myLocale().settingsResetDone); plugin.getGrid().saveGrid(); } }); return true; } else { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminHelpSettingsReset); return true; } } // Resetsign <player> - makes a warp sign for player if (split[0].equalsIgnoreCase("resetsign")) { // Find the closest island if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUseInGame); return true; } Player p = (Player) sender; if (!VaultHelper.checkPerm(p, Settings.PERMPREFIX + "mod.signadmin") && !p.isOp()) { p.sendMessage(ChatColor.RED + plugin.myLocale(p.getUniqueId()).errorNoPermission); return true; } // Convert target name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1], true); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); } else { // Check if this player has an island if (!plugin.getPlayers().hasIsland(playerUUID, ((Player) sender).getWorld().getEnvironment()) && !plugin.getPlayers().inTeam(playerUUID)) { // No island sender.sendMessage(ChatColor.RED + plugin.myLocale().errorNoIslandOther); return true; } // Has an island // Find out whether the player is looking at a warp sign // Look at what the player was looking at BlockIterator iter = new BlockIterator(p, 10); Block lastBlock = iter.next(); while (iter.hasNext()) { lastBlock = iter.next(); if (lastBlock.getType() == Material.AIR) continue; break; } // Check if it is a sign if (!lastBlock.getType().equals(Material.SIGN_POST)) { sender.sendMessage(ChatColor.RED + plugin.myLocale(p.getUniqueId()).adminResetSignNoSign); return true; } Sign sign = (Sign) lastBlock.getState(); // Check if the sign is within the right island boundary Location islandLoc = plugin.getPlayers().getIslandLocation(playerUUID); if (!plugin.getGrid().getIslandAt(islandLoc).inIslandSpace(sign.getLocation())) { p.sendMessage( ChatColor.RED + plugin.myLocale(p.getUniqueId()).adminSetHomeNotOnPlayersIsland); } else { sender.sendMessage(ChatColor.GREEN + plugin.myLocale(p.getUniqueId()).adminResetSignFound); // Find out if this player is allowed to have a sign on this island if (plugin.getWarpSignsListener().addWarp(playerUUID, lastBlock.getLocation())) { // Change sign color to green sign.setLine(0, ChatColor.GREEN + plugin.myLocale().warpswelcomeLine); sign.update(); p.sendMessage(ChatColor.GREEN + plugin.myLocale(p.getUniqueId()).adminResetSignRescued .replace("[name]", plugin.getPlayers().getName(playerUUID))); return true; } // Warp already exists sender.sendMessage(ChatColor.RED + plugin.myLocale(p.getUniqueId()).adminResetSignErrorExists.replace("[name]", plugin.getWarpSignsListener().getWarpOwner(lastBlock.getLocation()))); } } return true; } // Delete the island you are on else if (split[0].equalsIgnoreCase("deleteisland")) { if (!split[1].equalsIgnoreCase("confirm")) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminDeleteIslandError); return true; } // Get the island I am on Island island = plugin.getGrid().getIslandAt(((Player) sender).getLocation()); if (island == null) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminDeleteIslandnoid); return true; } // Try to get the owner of this island UUID owner = island.getOwner(); String name = "unknown"; if (owner != null) { name = plugin.getPlayers().getName(owner); sender.sendMessage( ChatColor.RED + plugin.myLocale().adminSetSpawnownedBy.replace("[name]", name)); sender.sendMessage( ChatColor.RED + plugin.myLocale().adminDeleteIslanduse.replace("[name]", name)); return true; } else { sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().deleteremoving.replace("[name]", name)); deleteIslands(island, sender); return true; } } else if (split[0].equalsIgnoreCase("resetname")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1], true); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); } else { // Check if this player has an island if (!plugin.getPlayers().hasIsland(playerUUID, ((Player) sender).getWorld().getEnvironment()) && !plugin.getPlayers().inTeam(playerUUID)) { // No island sender.sendMessage(ChatColor.RED + plugin.myLocale().errorNoIslandOther); return true; } // Has an island plugin.getGrid().setIslandName(playerUUID, null); sender.sendMessage(plugin.myLocale().generalSuccess); } return true; } else if (split[0].equalsIgnoreCase("resethome")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1], true); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); } else { // Check if this player has an island if (!plugin.getPlayers().hasIsland(playerUUID, ((Player) sender).getWorld().getEnvironment()) && !plugin.getPlayers().inTeam(playerUUID)) { // No island sender.sendMessage(ChatColor.RED + plugin.myLocale().errorNoIslandOther); return true; } // Has an island Location safeHome = plugin.getGrid().getSafeHomeLocation(playerUUID, 1); if (safeHome == null) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminSetHomeNoneFound); } else { plugin.getPlayers().setHomeLocation(playerUUID, safeHome); sender.sendMessage(ChatColor.GREEN + plugin.myLocale().adminSetHomeHomeSet.replace( "[location]", safeHome.getBlockX() + ", " + safeHome.getBlockY() + "," + safeHome.getBlockZ())); } } return true; } else if (split[0].equalsIgnoreCase("sethome")) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminLockerrorInGame); return true; } player = (Player) sender; // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1], true); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); } else { // Check if this player has an island if (!plugin.getPlayers().hasIsland(playerUUID, player.getWorld().getEnvironment()) && !plugin.getPlayers().inTeam(playerUUID)) { // No island player.sendMessage( ChatColor.RED + plugin.myLocale(player.getUniqueId()).errorNoIslandOther); return true; } // Has an island Location islandLoc = plugin.getPlayers().getIslandLocation(playerUUID); // Check the player is within the island boundaries if (!plugin.getGrid().getIslandAt(islandLoc).inIslandSpace(player.getLocation())) { player.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).adminSetHomeNotOnPlayersIsland); } else { // Check that the location is safe if (!GridManager.isSafeLocation(player.getLocation())) { // Not safe player.sendMessage( ChatColor.RED + plugin.myLocale(player.getUniqueId()).adminSetHomeNoneFound); } else { // Success plugin.getPlayers().setHomeLocation(playerUUID, player.getLocation()); player.sendMessage( ChatColor.GREEN + plugin.myLocale(player.getUniqueId()).adminSetHomeHomeSet .replace("[location]", player.getLocation().getBlockX() + ", " + player.getLocation().getBlockY() + "," + player.getLocation().getBlockZ())); } } } return true; } else // Set protection for the island the player is on if (split[0].equalsIgnoreCase("setrange")) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminLockerrorInGame); return true; } player = (Player) sender; UUID playerUUID = player.getUniqueId(); Island island = plugin.getGrid().getIslandAt(player.getLocation()); // Check if island exists if (island == null) { player.sendMessage(ChatColor.RED + plugin.myLocale().errorNotOnIsland); return true; } else { int newRange = 10; int maxRange = Settings.islandDistance; // If spawn do something different if (island.isSpawn()) { try { newRange = Integer.valueOf(split[1]); } catch (Exception e) { player.sendMessage(ChatColor.RED + plugin.myLocale(playerUUID).adminSetRangeInvalid); return true; } player.sendMessage(ChatColor.GREEN + plugin.myLocale(playerUUID).adminSetRangeSet .replace("[number]", String.valueOf(newRange))); if (newRange > maxRange) { player.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + plugin.myLocale(playerUUID).adminSetRangeWarning.replace("[max]", String.valueOf(maxRange))); player.sendMessage(ChatColor.RED + plugin.myLocale(playerUUID).adminSetRangeWarning2); } island.setProtectionSize(newRange); player.sendMessage( ChatColor.YELLOW + plugin.myLocale().adminSetSpawncenter.replace("[location]", island.getCenter().getBlockX() + "," + island.getCenter().getBlockZ())); player.sendMessage(ChatColor.YELLOW + plugin.myLocale().adminSetSpawnlimits .replace("[min]", island.getMinX() + "," + island.getMinZ()) .replace("[max]", (island.getMinX() + island.getIslandDistance() - 1) + "," + (island.getMinZ() + island.getIslandDistance() - 1))); player.sendMessage(ChatColor.YELLOW + plugin.myLocale().adminSetSpawnrange .replace("[number]", String.valueOf(island.getProtectionSize()))); player.sendMessage(ChatColor.YELLOW + plugin.myLocale().adminSetSpawncoords .replace("[min]", island.getMinProtectedX() + ", " + island.getMinProtectedZ()) .replace("[max]", +(island.getMinProtectedX() + island.getProtectionSize() - 1) + ", " + (island.getMinProtectedZ() + island.getProtectionSize() - 1))); if (island.isLocked()) { player.sendMessage(ChatColor.RED + plugin.myLocale().adminSetSpawnlocked); } } else { if (!plugin.getConfig().getBoolean("island.overridelimit")) { maxRange -= 16; } try { newRange = Integer.valueOf(split[1]); } catch (Exception e) { player.sendMessage(ChatColor.RED + plugin.myLocale(playerUUID).adminSetRangeInvalid + " " + plugin.myLocale(playerUUID).adminSetRangeTip.replace("[max]", String.valueOf(maxRange))); return true; } if (newRange < 10 || newRange > maxRange) { player.sendMessage(ChatColor.RED + plugin.myLocale(playerUUID).adminSetRangeInvalid + " " + plugin.myLocale(playerUUID).adminSetRangeTip.replace("[max]", String.valueOf(maxRange))); return true; } island.setProtectionSize(newRange); player.sendMessage(ChatColor.GREEN + plugin.myLocale(playerUUID).adminSetRangeSet .replace("[number]", String.valueOf(newRange))); showInfo(island.getOwner(), sender); } return true; } } if (split[0].equalsIgnoreCase("purge")) { // PURGE Command // Check for "allow" or "disallow" flags // Protect island from purging if (split[1].equalsIgnoreCase("allow") || split[1].equalsIgnoreCase("disallow")) { // Find the closest island if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminLockerrorInGame); return true; } Player p = (Player) sender; // Island spawn must be in the island world if (!p.getLocation().getWorld().equals(ASkyBlock.getIslandWorld()) && !p.getLocation().getWorld().equals(ASkyBlock.getNetherWorld())) { p.sendMessage(ChatColor.RED + plugin.myLocale(p.getUniqueId()).errorWrongWorld); return true; } Island island = plugin.getGrid().getIslandAt(p.getLocation()); if (island == null) { p.sendMessage(ChatColor.RED + plugin.myLocale(p.getUniqueId()).errorNoIslandOther); return true; } if (split[1].equalsIgnoreCase("allow")) { island.setPurgeProtected(true); } else { island.setPurgeProtected(false); } if (island.isPurgeProtected()) { p.sendMessage(ChatColor.GREEN + plugin.myLocale(p.getUniqueId()).adminAllowPurge); } else { p.sendMessage(ChatColor.GREEN + plugin.myLocale(p.getUniqueId()).adminPreventPurge); } return true; } // Purge runs in the background so if one is already running // this flag stops a repeat if (purgeFlag) { sender.sendMessage(ChatColor.RED + plugin.myLocale().purgealreadyRunning); return true; } if (split[1].equalsIgnoreCase("unowned")) { countUnowned(sender); return true; } // Set the flag purgeFlag = true; // See if this purge unowned // Convert days to hours - no other limit checking? final int time; try { time = Integer.parseInt(split[1]) * 24; } catch (Exception e) { sender.sendMessage(ChatColor.RED + plugin.myLocale().purgeusage.replace("[label]", label)); purgeFlag = false; return true; } sender.sendMessage( ChatColor.YELLOW + plugin.myLocale().purgecalculating.replace("[time]", split[1])); // Check who has not been online since the time for (Entry<UUID, Collection<Island>> entry : plugin.getGrid().getOwnershipMap().asMap() .entrySet()) { for (Island island : entry.getValue()) { if (entry.getKey() != null && !island.isPurgeProtected()) { if (Bukkit.getOfflinePlayer(entry.getKey()).hasPlayedBefore()) { long offlineTime = Bukkit.getOfflinePlayer(entry.getKey()).getLastPlayed(); offlineTime = (System.currentTimeMillis() - offlineTime) / 3600000L; if (offlineTime > time) { //if (plugin.getPlayers().getIslandLevel(entry.getKey()) < Settings.abandonedIslandLevel) { // Check level later removeList.add(entry.getKey()); //} } } else { removeList.add(entry.getKey()); } } } //plugin.getLogger().info("UUID = " + entry.getKey()); // Only do this if it isn't protected } if (removeList.isEmpty()) { sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().purgenoneFound); purgeFlag = false; return true; } sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().purgethisWillRemove .replace("[number]", String.valueOf(removeList.size())) .replace("[level]", String.valueOf(Settings.abandonedIslandLevel))); sender.sendMessage(ChatColor.RED + plugin.myLocale().purgewarning); sender.sendMessage(ChatColor.RED + plugin.myLocale().purgetypeConfirm.replace("[label]", label)); confirmReq = true; confirmOK = false; confirmTimer = 0; new BukkitRunnable() { @Override public void run() { // This waits for 10 seconds and if no // confirmation received, then it // cancels if (confirmTimer++ > 10) { // Ten seconds is up! confirmReq = false; confirmOK = false; purgeFlag = false; removeList.clear(); sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().purgepurgeCancelled); this.cancel(); } else if (confirmOK) { // Set up a repeating task to run every 2 // seconds to remove // islands one by one and then cancel when // done final int total = removeList.size(); new BukkitRunnable() { @Override public void run() { if (removeList.isEmpty() && purgeFlag) { purgeFlag = false; sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().purgefinished); this.cancel(); } if (removeList.size() > 0 && purgeFlag) { // Check if the player is online if (plugin.getServer().getPlayer(removeList.get(0)) == null) { //plugin.getLogger().info("DEBUG: player is offline"); // Check the level if (plugin.getPlayers().getIslandLevel( removeList.get(0)) < Settings.abandonedIslandLevel) { sender.sendMessage(ChatColor.YELLOW + "[" + (total - removeList.size() + 1) + "/" + total + "] " + plugin.myLocale().purgeremovingName.replace("[name]", plugin.getPlayers().getName(removeList.get(0)))); plugin.deletePlayerIsland(removeList.get(0), true, plugin.getServer().getPlayer(removeList.get(0)).getWorld() .getEnvironment()); } } else { sender.sendMessage( ChatColor.YELLOW + "[" + (total - removeList.size() + 1) + "/" + total + "] " + "Skipping online player..."); } removeList.remove(0); } //sender.sendMessage("Now waiting..."); } }.runTaskTimer(plugin, 0L, 20L); confirmReq = false; confirmOK = false; this.cancel(); } } }.runTaskTimer(plugin, 0L, 40L); return true; } else if (split[0].equalsIgnoreCase("lock")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1], true); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } else { Island island = plugin.getGrid().getIsland(playerUUID, plugin.getServer().getPlayer(playerUUID).getWorld().getEnvironment()); if (island != null) { Player owner = plugin.getServer().getPlayer(island.getOwner()); if (island.isLocked()) { sender.sendMessage(ChatColor.RED + plugin.myLocale().lockUnlocking); island.setLocked(false); if (owner != null) { owner.sendMessage( plugin.myLocale(owner.getUniqueId()).adminLockadminUnlockedIsland); } else { plugin.getMessages().setMessage(island.getOwner(), plugin.myLocale(island.getOwner()).adminLockadminUnlockedIsland); } } else { sender.sendMessage(ChatColor.RED + plugin.myLocale().lockLocking); island.setLocked(true); if (owner != null) { owner.sendMessage(plugin.myLocale(owner.getUniqueId()).adminLockadminLockedIsland); } else { plugin.getMessages().setMessage(island.getOwner(), plugin.myLocale(island.getOwner()).adminLockadminLockedIsland); } } } else { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorNoIslandOther); } return true; } } else if (split[0].equalsIgnoreCase("setdeaths")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1], true); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } else { sender.sendMessage(ChatColor.GREEN + plugin.getPlayers().getName(playerUUID) + " " + plugin.getPlayers().getDeaths(playerUUID) + " " + plugin.myLocale().deaths); sender.sendMessage(ChatColor.YELLOW + label + " setdeaths <player> <number>:" + ChatColor.WHITE + " " + plugin.myLocale().adminHelpsetDeaths); return true; } } else if (split[0].equalsIgnoreCase("clearreset")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1], true); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } else { plugin.getPlayers().setResetsLeft(playerUUID, Settings.resetLimit); sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().clearedResetLimit + " [" + Settings.resetLimit + "]"); return true; } } else if (split[0].equalsIgnoreCase("tp")) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownCommand); return true; } player = (Player) sender; // Convert name to a UUID final UUID targetUUID = plugin.getPlayers().getUUID(split[1], true); if (!plugin.getPlayers().isAKnownPlayer(targetUUID)) { player.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).errorUnknownPlayer); return true; } else { if (plugin.getPlayers().hasIsland(targetUUID, player.getWorld().getEnvironment()) || plugin.getPlayers().inTeam(targetUUID)) { // Teleport to the over world Location warpSpot = plugin.getPlayers().getIslandLocation(targetUUID).toVector() .toLocation(ASkyBlock.getIslandWorld()); String failureMessage = ChatColor.RED + plugin.myLocale(player.getUniqueId()).adminTpManualWarp.replace("[location]", warpSpot.getBlockX() + " " + warpSpot.getBlockY() + " " + warpSpot.getBlockZ()); // Try the player's home first Location home = plugin.getPlayers().getHomeLocation(targetUUID); plugin.getGrid(); if (home != null && home.getWorld().equals(ASkyBlock.getIslandWorld()) && GridManager.isSafeLocation(home)) { player.teleport(home); return true; } // Other wise, go to a safe spot new SafeSpotTeleport(plugin, player, warpSpot, failureMessage); return true; } sender.sendMessage(plugin.myLocale().errorNoIslandOther); return true; } } else if (split[0].equalsIgnoreCase("tpnether")) { if (!Settings.createNether || !Settings.newNether || ASkyBlock.getNetherWorld() == null) { return false; } if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownCommand); return true; } player = (Player) sender; // Convert name to a UUID final UUID targetUUID = plugin.getPlayers().getUUID(split[1], true); if (!plugin.getPlayers().isAKnownPlayer(targetUUID)) { player.sendMessage(ChatColor.RED + plugin.myLocale(player.getUniqueId()).errorUnknownPlayer); return true; } else { if (plugin.getPlayers().hasIsland(targetUUID, player.getWorld().getEnvironment()) || plugin.getPlayers().inTeam(targetUUID)) { // Teleport to the nether Location warpSpot = plugin.getPlayers().getIslandLocation(targetUUID).toVector() .toLocation(ASkyBlock.getNetherWorld()); String failureMessage = ChatColor.RED + plugin.myLocale(player.getUniqueId()).adminTpManualWarp.replace("[location]", warpSpot.getBlockX() + " " + warpSpot.getBlockY() + " " + warpSpot.getBlockZ()); // Try the player's home first Location home = plugin.getPlayers().getHomeLocation(targetUUID); plugin.getGrid(); if (home != null && home.getWorld().equals(ASkyBlock.getNetherWorld()) && GridManager.isSafeLocation(home)) { player.teleport(home); return true; } new SafeSpotTeleport(plugin, player, warpSpot, failureMessage); return true; } sender.sendMessage(plugin.myLocale().errorNoIslandOther); return true; } } else if (split[0].equalsIgnoreCase("delete")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1], true); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } else { // This now deletes the player and cleans them up even if // they don't have an island sender.sendMessage( ChatColor.YELLOW + plugin.myLocale().deleteremoving.replace("[name]", split[1])); // If they are online and in ASkyBlock then delete their // stuff too Player target = plugin.getServer().getPlayer(playerUUID); if (target != null) { // Clear any coop inventories // CoopPlay.getInstance().returnAllInventories(target); // Remove any of the target's coop invitees and grab // their stuff CoopPlay.getInstance().clearMyInvitedCoops(target); CoopPlay.getInstance().clearMyCoops(target); plugin.resetPlayer(target); } // plugin.getLogger().info("DEBUG: deleting player"); plugin.deletePlayerIsland(playerUUID, true, Environment.NETHER); plugin.deletePlayerIsland(playerUUID, true, Environment.NORMAL); return true; } } else if (split[0].equalsIgnoreCase("reserve")) { // Reserves a spot for the player's next island if (sender instanceof Player) { player = (Player) sender; // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1], true); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } else { // Check the spot Location islandLoc = plugin.getGrid().getClosestIsland(player.getLocation()); Island island = plugin.getGrid().getIslandAt(islandLoc); if (island == null) { // Empty spot, reserve it! plugin.getIslandCmd().reserveLocation(playerUUID, islandLoc); sender.sendMessage(ChatColor.GREEN + " [" + islandLoc.getBlockX() + ", " + islandLoc.getBlockZ() + "] " + plugin.myLocale().generalSuccess); } else { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminReserveIslandExists); } return true; } } else { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownCommand); } return true; } else if (split[0].equalsIgnoreCase("register")) { if (sender instanceof Player) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1], true); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } else { if (adminSetPlayerIsland(sender, ((Player) sender).getLocation(), playerUUID)) { sender.sendMessage(ChatColor.GREEN + plugin.myLocale().registersettingIsland.replace("[name]", split[1])); plugin.getGrid().saveGrid(); } else { sender.sendMessage(ChatColor.RED + plugin.myLocale().registererrorBedrockNotFound); } return true; } } else { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownCommand); } return true; } else if (split[0].equalsIgnoreCase("unregister")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1], true); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } else { if (plugin.getPlayers().inTeam(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminUnregisterOnTeam); return true; } Location island = plugin.getPlayers().getIslandLocation(playerUUID); if (island == null) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorNoIslandOther); return true; } // Delete player, but keep blocks sender.sendMessage(ChatColor.GREEN + plugin.myLocale().adminUnregisterKeepBlocks .replace("[location]", +plugin.getPlayers().getIslandLocation(playerUUID).getBlockX() + "," + plugin.getPlayers().getIslandLocation(playerUUID).getBlockZ())); plugin.deletePlayerIsland(playerUUID, false, Environment.NORMAL); plugin.deletePlayerIsland(playerUUID, false, Environment.NETHER); plugin.getGrid().saveGrid(); return true; } } else if (split[0].equalsIgnoreCase("info")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1], true); // plugin.getLogger().info("DEBUG: console player info UUID = " // + playerUUID); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } else { showInfo(playerUUID, sender); return true; } } else if (split[0].equalsIgnoreCase("resetallchallenges")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1], true); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } plugin.getPlayers().resetAllChallenges(playerUUID, true); sender.sendMessage( ChatColor.YELLOW + plugin.myLocale().resetChallengessuccess.replace("[name]", split[1])); return true; } else { return false; } case 3: // Confirm purge unowned if (split[0].equalsIgnoreCase("purge")) { if (purgeFlag) { sender.sendMessage(ChatColor.RED + plugin.myLocale().purgealreadyRunning); return true; } // Check if this is purge unowned if (split[1].equalsIgnoreCase("unowned") && split[2].equalsIgnoreCase("confirm")) { if (!purgeUnownedConfirm) { sender.sendMessage(ChatColor.RED + plugin.myLocale().confirmerrorTimeLimitExpired); return true; } else { purgeUnownedConfirm = false; // Purge the unowned islands purgeUnownedIslands(sender); return true; } } } // Set protection if (split[0].equalsIgnoreCase("setrange")) { // Convert name to a UUID UUID playerUUID = plugin.getPlayers().getUUID(split[1], true); // Check if player exists if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } // Check if the target is in a team and if so, the leader needs to be adjusted if (plugin.getPlayers().inTeam(playerUUID)) { playerUUID = plugin.getPlayers().getTeamLeader(playerUUID); } // Get the range that this player has now Island island = plugin.getGrid().getIsland(playerUUID, ((Player) sender).getWorld().getEnvironment()); if (island == null) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorNoIslandOther); return true; } else { int newRange = 0; int maxRange = Settings.islandDistance; if (!plugin.getConfig().getBoolean("island.overridelimit")) { maxRange -= 16; } try { newRange = Integer.valueOf(split[2]); } catch (Exception e) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminSetRangeInvalid + " " + plugin.myLocale().adminSetRangeTip.replace("[max]", String.valueOf(maxRange))); return true; } if (newRange < 10 || newRange > maxRange) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminSetRangeInvalid + " " + plugin.myLocale().adminSetRangeTip.replace("[max]", String.valueOf(maxRange))); return true; } island.setProtectionSize(newRange); sender.sendMessage(ChatColor.GREEN + plugin.myLocale().adminSetRangeSet.replace("[number]", String.valueOf(newRange))); showInfo(playerUUID, sender); plugin.getGrid().saveGrid(); return true; } } else if (split[0].equalsIgnoreCase("setdeaths")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1], true); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } else { try { int newDeaths = Integer.valueOf(split[2]); int oldDeaths = plugin.getPlayers().getDeaths(playerUUID); plugin.getPlayers().setDeaths(playerUUID, newDeaths); sender.sendMessage(ChatColor.GREEN + plugin.getPlayers().getName(playerUUID) + " " + oldDeaths + " >>> " + newDeaths + " " + plugin.myLocale().deaths); } catch (Exception e) { sender.sendMessage(ChatColor.GREEN + plugin.getPlayers().getName(playerUUID) + " " + plugin.getPlayers().getDeaths(playerUUID) + " " + plugin.myLocale().deaths); sender.sendMessage(ChatColor.YELLOW + label + " setdeaths <player> <number>:" + ChatColor.WHITE + " " + plugin.myLocale().adminHelpsetDeaths); return true; } return true; } } // Change biomes if (split[0].equalsIgnoreCase("setbiome")) { // Convert name to a UUID UUID playerUUID = plugin.getPlayers().getUUID(split[1], true); // Check if player exists if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } // Check if the target is in a team and if so, the leader if (plugin.getPlayers().inTeam(playerUUID)) { playerUUID = plugin.getPlayers().getTeamLeader(playerUUID); } Island island = plugin.getGrid().getIsland(playerUUID, ((Player) sender).getLocation().getWorld().getEnvironment()); if (island == null) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorNoIsland); return true; } // Check if biome is valid Biome biome = null; String biomeName = split[2].toUpperCase(); try { biome = Biome.valueOf(biomeName); biomeName = biome.name(); if (!plugin.getConfig().contains("biomes." + biomeName)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().biomeUnknown); // Doing it this way ensures that only valid biomes are // shown for (Biome b : Biome.values()) { if (plugin.getConfig().contains("biomes." + b.name())) { sender.sendMessage(b.name()); } } return true; } // Get friendly name biomeName = plugin.getConfig().getString("biomes." + biomeName + ".friendlyname", Util.prettifyText(biomeName)); } catch (Exception e) { sender.sendMessage(ChatColor.RED + plugin.myLocale().biomeUnknown); for (Biome b : Biome.values()) { if (plugin.getConfig().contains("biomes." + b.name())) { sender.sendMessage(b.name()); } } return true; } // Okay clear to set biome // Actually set the biome plugin.getBiomes().setIslandBiome(island, biome); sender.sendMessage(ChatColor.GREEN + plugin.myLocale().biomeSet.replace("[biome]", biomeName)); Player targetPlayer = plugin.getServer().getPlayer(playerUUID); if (targetPlayer != null) { // Online targetPlayer.sendMessage("[Admin] " + ChatColor.GREEN + plugin.myLocale(playerUUID).biomeSet.replace("[biome]", biomeName)); } else { plugin.getMessages().setMessage(playerUUID, "[Admin] " + ChatColor.GREEN + plugin.myLocale(playerUUID).biomeSet.replace("[biome]", biomeName)); } return true; } else // team kick <player> and team delete <leader> if (split[0].equalsIgnoreCase("team")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[2], true); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } if (split[1].equalsIgnoreCase("kick")) { // Remove player from team if (!plugin.getPlayers().inTeam(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorNoTeam); return true; } UUID teamLeader = plugin.getPlayers().getTeamLeader(playerUUID); if (teamLeader == null) { // Player is apparently in a team, but there is no team leader // Remove their team status // Clear the player of all team-related items plugin.getPlayers().setLeaveTeam(playerUUID); plugin.getPlayers().setHomeLocation(playerUUID, null); plugin.getPlayers().setIslandLocation(playerUUID, null); // Remove any warps plugin.getWarpSignsListener().removeWarp(playerUUID); sender.sendMessage( ChatColor.RED + plugin.myLocale().kicknameRemoved.replace("[name]", split[2])); return true; } // Payer is not a team leader if (!teamLeader.equals(playerUUID)) { // Clear the player of all team-related items plugin.getPlayers().setLeaveTeam(playerUUID); plugin.getPlayers().setHomeLocation(playerUUID, null); plugin.getPlayers().setIslandLocation(playerUUID, null); // Clear the leader of this player and if they now have // no team, remove the team plugin.getPlayers().removeMember(teamLeader, playerUUID); if (plugin.getPlayers().getMembers(teamLeader).size() < 2) { plugin.getPlayers().setLeaveTeam(teamLeader); } // Remove any warps plugin.getWarpSignsListener().removeWarp(playerUUID); sender.sendMessage( ChatColor.RED + plugin.myLocale().kicknameRemoved.replace("[name]", split[2])); return true; } else { sender.sendMessage( ChatColor.RED + (plugin.myLocale().adminTeamKickLeader.replace("[label]", label)) .replace("[name]", split[2])); return true; } } else { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownCommand); return false; } } else if (split[0].equalsIgnoreCase("completechallenge")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1], true); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } if (plugin.getPlayers().checkChallenge(playerUUID, split[2].toLowerCase()) || !plugin.getPlayers().get(playerUUID).challengeExists(split[2].toLowerCase())) { sender.sendMessage( ChatColor.RED + plugin.myLocale().completeChallengeerrorChallengeDoesNotExist); return true; } plugin.getPlayers().get(playerUUID).completeChallenge(split[2].toLowerCase()); sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().completeChallengechallangeCompleted .replace("[challengename]", split[2].toLowerCase()).replace("[name]", split[1])); return true; } else if (split[0].equalsIgnoreCase("resetchallenge")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[1], true); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } if (!plugin.getPlayers().checkChallenge(playerUUID, split[2].toLowerCase()) || !plugin.getPlayers().get(playerUUID).challengeExists(split[2].toLowerCase())) { sender.sendMessage(ChatColor.RED + plugin.myLocale().resetChallengeerrorChallengeDoesNotExist); return true; } plugin.getPlayers().resetChallenge(playerUUID, split[2].toLowerCase()); sender.sendMessage(ChatColor.YELLOW + plugin.myLocale().resetChallengechallengeReset .replace("[challengename]", split[2].toLowerCase()).replace("[name]", split[1])); return true; } else if (split[0].equalsIgnoreCase("info") && split[1].equalsIgnoreCase("challenges")) { // Convert name to a UUID final UUID playerUUID = plugin.getPlayers().getUUID(split[2], true); // plugin.getLogger().info("DEBUG: console player info UUID = " // + playerUUID); if (!plugin.getPlayers().isAKnownPlayer(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } else { showInfoChallenges(playerUUID, sender); return true; } } return false; case 4: // Team add <player> <leader> if (split[0].equalsIgnoreCase("team") && split[1].equalsIgnoreCase("add")) { // Convert names to UUIDs final UUID playerUUID = plugin.getPlayers().getUUID(split[2], true); final Player targetPlayer = plugin.getServer().getPlayer(playerUUID); final UUID teamLeader = plugin.getPlayers().getUUID(split[3], true); if (!plugin.getPlayers().isAKnownPlayer(playerUUID) || !plugin.getPlayers().isAKnownPlayer(teamLeader)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownPlayer); return true; } if (playerUUID.equals(teamLeader)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminTeamAddLeaderToOwn); return true; } // See if leader has an island if (!plugin.getPlayers().hasIsland(teamLeader, ((Player) sender).getWorld().getEnvironment())) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminTeamAddLeaderNoIsland); return true; } // Check to see if this player is already in a team if (plugin.getPlayers().inTeam(playerUUID)) { sender.sendMessage(ChatColor.RED + plugin.myLocale().inviteerrorThatPlayerIsAlreadyInATeam); return true; } // If the leader's member list does not contain their own name // then // add it if (!plugin.getPlayers().getMembers(teamLeader).contains(teamLeader)) { // Set up the team leader plugin.getPlayers().setJoinTeam(teamLeader, teamLeader, plugin.getPlayers().getIslandLocation(teamLeader)); plugin.getPlayers().addTeamMember(teamLeader, teamLeader); sender.sendMessage(ChatColor.GOLD + plugin.myLocale().adminTeamAddedLeader); } // This is a hack to clear any pending invitations if (targetPlayer != null) { targetPlayer.performCommand(Settings.ISLANDCOMMAND + " decline"); } // If the invitee has an island of their own if (plugin.getPlayers().hasIsland(playerUUID, ((Player) sender).getWorld().getEnvironment())) { Location islandLoc = plugin.getPlayers().getIslandLocation(playerUUID); if (islandLoc != null) { sender.sendMessage(ChatColor.RED + plugin.myLocale().adminTeamNowUnowned .replace("[name]", plugin.getPlayers().getName(playerUUID)) .replace("[location]", islandLoc.getBlockX() + " " + islandLoc.getBlockZ())); } } // Remove their old island affiliation - do not delete the // island just in case plugin.deletePlayerIsland(playerUUID, false, Environment.NETHER); plugin.deletePlayerIsland(playerUUID, false, Environment.NORMAL); // Join the team and set the team island location and leader plugin.getPlayers().setJoinTeam(playerUUID, teamLeader, plugin.getPlayers().getIslandLocation(teamLeader)); // Configure the best home location for this player if (plugin.getPlayers().getHomeLocation(teamLeader) != null) { plugin.getPlayers().setHomeLocation(playerUUID, plugin.getPlayers().getHomeLocation(teamLeader)); sender.sendMessage(ChatColor.GREEN + plugin.myLocale().adminTeamSettingHome); } else { plugin.getPlayers().setHomeLocation(playerUUID, plugin.getPlayers().getIslandLocation(teamLeader)); sender.sendMessage(ChatColor.GREEN + plugin.myLocale().adminTeamSettingHome); } // If the leader's member list does not contain player then add // it if (!plugin.getPlayers().getMembers(teamLeader).contains(playerUUID)) { plugin.getPlayers().addTeamMember(teamLeader, playerUUID); sender.sendMessage(ChatColor.GREEN + plugin.myLocale().adminTeamAddingPlayer); } else { sender.sendMessage(ChatColor.GOLD + plugin.myLocale().adminTeamAlreadyOnTeam); } // Teleport the player if they are online if (targetPlayer != null) { plugin.getGrid().homeTeleport(targetPlayer, targetPlayer.getWorld().getEnvironment()); } plugin.getGrid().saveGrid(); return true; } else { sender.sendMessage(ChatColor.RED + plugin.myLocale().errorUnknownCommand); return false; } default: return false; } }
From source file:edu.uci.ics.sourcerer.tools.java.component.identifier.stats.CoverageCalculator.java
public static void calculateJarCoverage() { TaskProgressLogger task = TaskProgressLogger.get(); task.start("Calculating coverage by " + JAR_REPO.getValue().getPath() + " of external imports from " + EXTERNAL_REPO.getValue() + " and missing imports from " + MISSING_REPO.getValue()); // Load the jar repo JavaRepository jarRepo = JavaRepositoryFactory.INSTANCE.loadJavaRepository(JAR_REPO); task.start("Populating the prefix tree"); SourcedFqnNode root = SourcedFqnNode.createRoot(); boolean loaded = false; if (SOURCED_CACHE.getValue().exists()) { task.start("Loading cache"); try (BufferedReader reader = IOUtils.createBufferedReader(SOURCED_CACHE.getValue())) { root.createLoader().load(reader); loaded = true;/* w w w.java 2 s . com*/ } catch (IOException | NoSuchElementException e) { logger.log(Level.SEVERE, "Error loading cache", e); root = SourcedFqnNode.createRoot(); } task.finish(); } if (!loaded) { int nonEmptyMaven = 0; task.start("Processing maven jars", "jars processed", 10_000); for (JarFile jar : jarRepo.getMavenJarFiles()) { boolean go = true; for (String fqn : FileUtils.getClassFilesFromJar(jar.getFile().toFile())) { if (go) { nonEmptyMaven++; go = false; } root.getChild(fqn.replace('$', '/'), '/').addSource(Source.MAVEN, jar.getProperties().HASH.getValue()); } task.progress(); } task.finish(); int nonEmptyProject = 0; task.start("Processing project jars", "jars processed", 10_000); for (JarFile jar : jarRepo.getProjectJarFiles()) { boolean go = true; for (String fqn : FileUtils.getClassFilesFromJar(jar.getFile().toFile())) { if (go) { nonEmptyProject++; go = false; } root.getChild(fqn.replace('$', '/'), '/').addSource(Source.PROJECT, jar.getProperties().HASH.getValue()); } task.progress(); } task.finish(); // Save the prefix tree task.start("Saving prefix tree cache"); try (BufferedWriter writer = IOUtils .makeBufferedWriter(FileUtils.ensureWriteable(SOURCED_CACHE.getValue()))) { root.createSaver().save(writer); } catch (IOException e) { logger.log(Level.SEVERE, "Error writing log", e); FileUtils.delete(SOURCED_CACHE.getValue()); } task.finish(); int mavenClassFiles = 0; int projectClassFiles = 0; int mavenUnique = 0; int projectUnique = 0; Set<SourcedFqnNode> mavenPackages = new HashSet<>(); Set<SourcedFqnNode> projectPackages = new HashSet<>(); for (SourcedFqnNode node : root.getPostOrderIterable()) { if (node.has(Source.MAVEN)) { mavenClassFiles += node.getCount(Source.MAVEN); mavenUnique++; mavenPackages.add(node.getParent()); } if (node.has(Source.PROJECT)) { projectClassFiles += node.getCount(Source.PROJECT); projectUnique++; projectPackages.add(node.getParent()); } } task.start("Reporting statistics on jars"); task.start("Maven"); task.report(nonEmptyMaven + " non-empty jars"); task.report(mavenClassFiles + " class files"); task.report(mavenUnique + " unique types"); task.report(mavenPackages.size() + " packages"); task.finish(); task.start("Project"); task.report(nonEmptyProject + " non-empty jars"); task.report(projectClassFiles + " class files"); task.report(projectUnique + " unique types"); task.report(projectPackages.size() + " packages"); task.finish(); task.finish(); } task.finish(); // Load the external repo ExtractedJavaRepository externalRepo = JavaRepositoryFactory.INSTANCE .loadExtractedJavaRepository(EXTERNAL_REPO); // load the missing repo ExtractedJavaRepository missingRepo = JavaRepositoryFactory.INSTANCE .loadExtractedJavaRepository(MISSING_REPO); NumberFormat format = NumberFormat.getNumberInstance(); format.setMaximumFractionDigits(2); { task.start("Processing extracted projects for missing and external types", "projects processed", 10_000); // Averager for external FQNs per project Averager<Integer> externalFqns = Averager.create(); // Averager for missing FQNs per project Averager<Integer> missingFqns = Averager.create(); for (ExtractedJavaProject externalProject : externalRepo.getProjects()) { String loc = externalProject.getLocation().toString(); ExtractedJavaProject missingProject = missingRepo.getProject(externalProject.getLocation()); ReaderBundle externalBundle = ReaderBundle.create(externalProject.getExtractionDir().toFile(), externalProject.getCompressedFile().toFile()); ReaderBundle missingBundle = ReaderBundle.create(missingProject.getExtractionDir().toFile(), missingProject.getCompressedFile().toFile()); int externalCount = 0; int missingCount = 0; // Add all the imports for this project for (ImportEX imp : externalBundle.getTransientImports()) { root.getChild(imp.getImported(), '.').addSource(Source.IMPORTED, loc); } Set<String> validMissing = new HashSet<>(); // Add the external types for (MissingTypeEX missing : externalBundle.getTransientMissingTypes()) { validMissing.add(missing.getFqn()); root.getChild(missing.getFqn(), '.').addSource(Source.EXTERNAL, loc); externalCount++; } // Add the missing types for (MissingTypeEX missing : missingBundle.getTransientMissingTypes()) { if (validMissing.contains(missing.getFqn())) { root.getChild(missing.getFqn(), '.').addSource(Source.MISSING, loc); missingCount++; } } externalFqns.addValue(externalCount); missingFqns.addValue(missingCount); task.progress(); } task.finish(); // Averager<Integer> projectsPerFQN = Averager.create(); // for (SourcedFqnNode fqn : root.getPreOrderIterable()) { // if (fqn.getCount(Source.MISSING) > 0) { // projectsPerFQN.addValue(fqn.getCount(Source.MISSING)); // } // } Percenterator percent = Percenterator.create(externalRepo.getProjectCount()); task.start("Reporting missing type information"); task.report(percent.format(externalFqns.getNonZeroCount()) + " projects with external types"); task.report(percent.format(missingFqns.getNonZeroCount()) + " projects with missing types"); task.report(format.format(externalFqns.getMean()) + " (" + format.format(externalFqns.getStandardDeviation()) + ") imported external types per project, on average"); task.report(format.format(externalFqns.getNonZeroMean()) + " (" + format.format(externalFqns.getNonZeroStandardDeviation()) + ") imported external types per project containing at least one external type, on average"); task.report( format.format(missingFqns.getMean()) + " (" + format.format(missingFqns.getStandardDeviation()) + ") imported missing types per project, on average"); task.report(format.format(missingFqns.getNonZeroMean()) + " (" + format.format(missingFqns.getNonZeroStandardDeviation()) + ") missing FQNs per project containing at least one missing FQN, on average"); task.finish(); // missingFqns.writeValueMap(MISSING_FQNS_PER_PROJECT.getValue()); // projectsPerFQN.writeValueMap(PROJECTS_PER_MISSING_FQN.getValue()); } // Report general statistics { int uniqueTotal = 0; Multiset<Source> uniqueByType = EnumMultiset.create(Source.class); Multiset<Source> totalByType = EnumMultiset.create(Source.class); for (SourcedFqnNode node : root.getPostOrderIterable()) { if (node.hasSource()) { uniqueTotal++; } for (Source source : Source.values()) { int count = node.getCount(source); if (count > 0) { uniqueByType.add(source); totalByType.add(source, count); } } } Percenterator uniqueP = Percenterator.create(uniqueTotal); task.start("Reporting FQN counts broken down by source"); for (Source source : Source.values()) { task.report(source.name() + ":"); task.report(" Unique: " + uniqueP.format(uniqueByType.count(source))); task.report(" Total: " + totalByType.count(source)); } task.report("Sum:"); task.report(" Unique: " + uniqueTotal); task.finish(); } // Identify the most popular imported types and packages { for (final Source source : EnumSet.of(Source.IMPORTED, Source.EXTERNAL, Source.MISSING)) { { TreeSet<SourcedFqnNode> popularTypes = new TreeSet<>(new Comparator<SourcedFqnNode>() { @Override public int compare(SourcedFqnNode o1, SourcedFqnNode o2) { int cmp = Integer.compare(o1.getCount(source), o2.getCount(source)); if (cmp == 0) { return o1.compareTo(o2); } else { return cmp; } } }); for (SourcedFqnNode fqn : root.getPostOrderIterable()) { if (fqn.has(source)) { popularTypes.add(fqn); } } task.start("Logging popular types listing for " + source.name()); try (LogFileWriter writer = IOUtils.createLogFileWriter( new File(Arguments.OUTPUT.getValue(), source.name() + "-popular-types.txt"))) { for (SourcedFqnNode fqn : popularTypes.descendingSet()) { writer.write(fqn.getCount(source) + "\t" + fqn.getFqn()); } } catch (IOException e) { logger.log(Level.SEVERE, "Error writing file", e); } task.finish(); } { final Multimap<SourcedFqnNode, String> packages = HashMultimap.create(); for (SourcedFqnNode fqn : root.getPostOrderIterable()) { if (fqn.has(source)) { packages.putAll(fqn.getParent(), fqn.getSourceIDs(source)); } } List<SourcedFqnNode> sorted = new ArrayList<>(packages.keySet()); Collections.sort(sorted, new Comparator<SourcedFqnNode>() { @Override public int compare(SourcedFqnNode o1, SourcedFqnNode o2) { int cmp = -Integer.compare(packages.get(o1).size(), packages.get(o2).size()); if (cmp == 0) { return o1.compareTo(o2); } else { return cmp; } } }); task.start("Logging popular packages listing for " + source.name()); try (LogFileWriter writer = IOUtils.createLogFileWriter( new File(Arguments.OUTPUT.getValue(), source.name() + "-popular-packages.txt"))) { for (SourcedFqnNode fqn : sorted) { writer.write(packages.get(fqn).size() + "\t" + fqn.getFqn()); } } catch (IOException e) { logger.log(Level.SEVERE, "Error writing file", e); } task.finish(); } } } // Identify the most popular external types found in only maven, project and nothing { { TreeSet<SourcedFqnNode> popularJoint = new TreeSet<>( SourcedFqnNode.createComparator(Source.EXTERNAL)); TreeSet<SourcedFqnNode> popularMaven = new TreeSet<>( SourcedFqnNode.createComparator(Source.EXTERNAL)); TreeSet<SourcedFqnNode> popularProject = new TreeSet<>( SourcedFqnNode.createComparator(Source.EXTERNAL)); TreeSet<SourcedFqnNode> popularMissing = new TreeSet<>( SourcedFqnNode.createComparator(Source.EXTERNAL)); for (SourcedFqnNode fqn : root.getPostOrderIterable()) { if (fqn.has(Source.EXTERNAL)) { boolean maven = fqn.has(Source.MAVEN); boolean project = fqn.has(Source.PROJECT); if (maven && project) { popularJoint.add(fqn); } else { if (maven) { popularMaven.add(fqn); } else if (project) { popularProject.add(fqn); } else { popularMissing.add(fqn); } } } } task.start("Logging popular external joint types"); try (LogFileWriter writer = IOUtils .createLogFileWriter(new File(Arguments.OUTPUT.getValue(), "joint-popular-types.txt"))) { for (SourcedFqnNode fqn : popularJoint.descendingSet()) { writer.write(fqn.getCount(Source.EXTERNAL) + "\t" + fqn.getFqn()); } } catch (IOException e) { logger.log(Level.SEVERE, "Error writing file", e); } task.finish(); task.start("Logging popular external types unique to maven"); try (LogFileWriter writer = IOUtils.createLogFileWriter( new File(Arguments.OUTPUT.getValue(), "maven-unique-popular-types.txt"))) { for (SourcedFqnNode fqn : popularMaven.descendingSet()) { writer.write(fqn.getCount(Source.EXTERNAL) + "\t" + fqn.getFqn()); } } catch (IOException e) { logger.log(Level.SEVERE, "Error writing file", e); } task.finish(); task.start("Logging popular external types unique to project"); try (LogFileWriter writer = IOUtils.createLogFileWriter( new File(Arguments.OUTPUT.getValue(), "project-unique-popular-types.txt"))) { for (SourcedFqnNode fqn : popularProject.descendingSet()) { writer.write(fqn.getCount(Source.EXTERNAL) + "\t" + fqn.getFqn()); } } catch (IOException e) { logger.log(Level.SEVERE, "Error writing file", e); } task.finish(); task.start("Logging popular missing external types"); try (LogFileWriter writer = IOUtils.createLogFileWriter( new File(Arguments.OUTPUT.getValue(), "missing-unique-popular-types.txt"))) { for (SourcedFqnNode fqn : popularMissing.descendingSet()) { writer.write(fqn.getCount(Source.EXTERNAL) + "\t" + fqn.getFqn()); } } catch (IOException e) { logger.log(Level.SEVERE, "Error writing file", e); } task.finish(); } { final Multimap<SourcedFqnNode, String> jointPackages = HashMultimap.create(); final Multimap<SourcedFqnNode, String> mavenPackages = HashMultimap.create(); final Multimap<SourcedFqnNode, String> projectPackages = HashMultimap.create(); final Multimap<SourcedFqnNode, String> missingPackages = HashMultimap.create(); for (SourcedFqnNode fqn : root.getPostOrderIterable()) { if (fqn.has(Source.EXTERNAL)) { boolean maven = fqn.has(Source.MAVEN); boolean project = fqn.has(Source.PROJECT); if (maven && project) { jointPackages.putAll(fqn.getParent(), fqn.getSourceIDs(Source.EXTERNAL)); } else { if (maven) { mavenPackages.putAll(fqn.getParent(), fqn.getSourceIDs(Source.EXTERNAL)); } else if (project) { projectPackages.putAll(fqn.getParent(), fqn.getSourceIDs(Source.EXTERNAL)); } else { missingPackages.putAll(fqn.getParent(), fqn.getSourceIDs(Source.EXTERNAL)); } } } } { List<SourcedFqnNode> sorted = new ArrayList<>(jointPackages.keySet()); Collections.sort(sorted, new Comparator<SourcedFqnNode>() { @Override public int compare(SourcedFqnNode o1, SourcedFqnNode o2) { int cmp = -Integer.compare(jointPackages.get(o1).size(), jointPackages.get(o2).size()); if (cmp == 0) { return o1.compareTo(o2); } else { return cmp; } } }); task.start("Logging popular external joint packages"); try (LogFileWriter writer = IOUtils.createLogFileWriter( new File(Arguments.OUTPUT.getValue(), "joint-popular-packages.txt"))) { for (SourcedFqnNode fqn : sorted) { writer.write(jointPackages.get(fqn).size() + "\t" + fqn.getFqn()); } } catch (IOException e) { logger.log(Level.SEVERE, "Error writing file", e); } task.finish(); } { List<SourcedFqnNode> sorted = new ArrayList<>(mavenPackages.keySet()); Collections.sort(sorted, new Comparator<SourcedFqnNode>() { @Override public int compare(SourcedFqnNode o1, SourcedFqnNode o2) { int cmp = -Integer.compare(mavenPackages.get(o1).size(), mavenPackages.get(o2).size()); if (cmp == 0) { return o1.compareTo(o2); } else { return cmp; } } }); task.start("Logging popular packages unique to maven"); try (LogFileWriter writer = IOUtils.createLogFileWriter( new File(Arguments.OUTPUT.getValue(), "maven-unique-popular-packages.txt"))) { for (SourcedFqnNode fqn : sorted) { writer.write(mavenPackages.get(fqn).size() + "\t" + fqn.getFqn()); } } catch (IOException e) { logger.log(Level.SEVERE, "Error writing file", e); } task.finish(); } { List<SourcedFqnNode> sorted = new ArrayList<>(projectPackages.keySet()); Collections.sort(sorted, new Comparator<SourcedFqnNode>() { @Override public int compare(SourcedFqnNode o1, SourcedFqnNode o2) { int cmp = -Integer.compare(projectPackages.get(o1).size(), projectPackages.get(o2).size()); if (cmp == 0) { return o1.compareTo(o2); } else { return cmp; } } }); task.start("Logging popular packages unique to project"); try (LogFileWriter writer = IOUtils.createLogFileWriter( new File(Arguments.OUTPUT.getValue(), "project-unique-popular-packages.txt"))) { for (SourcedFqnNode fqn : sorted) { writer.write(projectPackages.get(fqn).size() + "\t" + fqn.getFqn()); } } catch (IOException e) { logger.log(Level.SEVERE, "Error writing file", e); } task.finish(); } { List<SourcedFqnNode> sorted = new ArrayList<>(missingPackages.keySet()); Collections.sort(sorted, new Comparator<SourcedFqnNode>() { @Override public int compare(SourcedFqnNode o1, SourcedFqnNode o2) { int cmp = -Integer.compare(missingPackages.get(o1).size(), missingPackages.get(o2).size()); if (cmp == 0) { return o1.compareTo(o2); } else { return cmp; } } }); task.start("Logging popular packages unique to missing"); try (LogFileWriter writer = IOUtils.createLogFileWriter( new File(Arguments.OUTPUT.getValue(), "missing-unique-popular-packages.txt"))) { for (SourcedFqnNode fqn : sorted) { writer.write(missingPackages.get(fqn).size() + "\t" + fqn.getFqn()); } } catch (IOException e) { logger.log(Level.SEVERE, "Error writing file", e); } task.finish(); } } } for (int threshold : new int[] { 1, 2, 10, 50, 100 }) { Multiset<String> externalUniqueByString = HashMultiset.create(6); Multiset<String> externalTotalByString = HashMultiset.create(6); Multiset<String> missingUniqueByString = HashMultiset.create(6); Multiset<String> missingTotalByString = HashMultiset.create(6); int externalUniqueTotal = 0; int externalTotalTotal = 0; int missingUniqueTotal = 0; int missingTotalTotal = 0; for (SourcedFqnNode node : root.getPostOrderIterable()) { int externalCount = node.getCount(Source.EXTERNAL); if (externalCount >= threshold) { externalUniqueTotal++; externalTotalTotal += externalCount; boolean maven = node.has(Source.MAVEN); boolean project = node.has(Source.PROJECT); if (maven) { externalUniqueByString.add("Maven"); externalTotalByString.add("Maven", externalCount); if (!project) { externalUniqueByString.add("Maven only"); externalTotalByString.add("Maven only", externalCount); } else { externalUniqueByString.add("Project"); externalTotalByString.add("Project", externalCount); externalUniqueByString.add("Maven and Project"); externalTotalByString.add("Maven and Project", externalCount); } } else if (project) { externalUniqueByString.add("Project"); externalTotalByString.add("Project", externalCount); externalUniqueByString.add("Project only"); externalTotalByString.add("Project only", externalCount); } else { externalUniqueByString.add("Nothing"); externalTotalByString.add("Nothing", externalCount); } } int missingCount = node.getCount(Source.MISSING); if (missingCount >= threshold) { missingUniqueTotal++; missingTotalTotal += missingCount; boolean maven = node.has(Source.MAVEN); boolean project = node.has(Source.PROJECT); if (maven) { missingUniqueByString.add("Maven"); missingTotalByString.add("Maven", missingCount); if (!project) { missingUniqueByString.add("Maven only"); missingTotalByString.add("Maven only", missingCount); } else { missingUniqueByString.add("Project"); missingTotalByString.add("Project", missingCount); missingUniqueByString.add("Maven and Project"); missingTotalByString.add("Maven and Project", missingCount); } } else if (project) { missingUniqueByString.add("Project"); missingTotalByString.add("Project", missingCount); missingUniqueByString.add("Project only"); missingTotalByString.add("Project only", missingCount); } else { missingUniqueByString.add("Nothing"); missingTotalByString.add("Nothing", missingCount); } } } Percenterator externalUniqueP = Percenterator.create(externalUniqueTotal); Percenterator missingUniqueP = Percenterator.create(missingUniqueTotal); Percenterator externalTotalP = Percenterator.create(externalTotalTotal); Percenterator missingTotalP = Percenterator.create(externalTotalTotal); task.start("Reporting external import coverage for threshold " + threshold); for (String condition : externalUniqueByString.elementSet()) { task.report(condition + ":"); task.report(" Unique: " + externalUniqueP.format(externalUniqueByString.count(condition))); task.report(" Total: " + externalTotalP.format(externalTotalByString.count(condition))); } task.report("Sum:"); task.report(" Unique: " + externalUniqueTotal); task.report(" Total: " + externalTotalTotal); task.finish(); task.start("Reporting missing import coverage for threshold " + threshold); for (String condition : missingUniqueByString.elementSet()) { task.report(condition + ":"); task.report(" Unique: " + missingUniqueP.format(missingUniqueByString.count(condition))); task.report(" Total: " + missingTotalP.format(missingTotalByString.count(condition))); } task.report("Sum:"); task.report(" Unique: " + missingUniqueTotal); task.report(" Total: " + missingTotalTotal); task.finish(); } { Set<String> maven = new HashSet<>(); Set<String> mavenImported = new HashSet<>(); Set<String> project = new HashSet<>(); Set<String> projectImported = new HashSet<>(); // Find the coverage of the maven and project jars for (SourcedFqnNode fqn : root.getPostOrderIterable()) { maven.addAll(fqn.getSourceIDs(Source.MAVEN)); project.addAll(fqn.getSourceIDs(Source.PROJECT)); if (fqn.has(Source.IMPORTED)) { mavenImported.addAll(fqn.getSourceIDs(Source.MAVEN)); projectImported.addAll(fqn.getSourceIDs(Source.PROJECT)); } } Percenterator mavenP = Percenterator.create(maven.size()); Percenterator projectP = Percenterator.create(project.size()); task.start("Reporting coverage of jars"); task.report(mavenP.format(mavenImported.size()) + " maven jars had at least one type imported"); task.report(projectP.format(projectImported.size()) + " project jars had at least one type imported"); task.finish(); } // { // // Find all the most popular fqns per source // for (final Source source : Source.values()) { // TreeSet<SourcedFqnNode> sorted = new TreeSet<>(new Comparator<SourcedFqnNode>() { // @Override // public int compare(SourcedFqnNode o1, SourcedFqnNode o2) { // int cmp = Integer.compare(o1.getCount(source), o2.getCount(source)); // if (cmp == 0) { // return o1.compareTo(o2); // } else { // return cmp; // } // } // }); // // for (SourcedFqnNode node : root.getPostOrderIterable()) { // if (node.has(source)) { // sorted.add(node); // } // } // // task.start("Logging popular types listing for " + source.name()); // try (LogFileWriter writer = IOUtils.createLogFileWriter(new File(Arguments.OUTPUT.getValue(), source.name() + "-popular.txt"))) { // for (SourcedFqnNode fqn : sorted.descendingSet()) { // writer.write(fqn.getCount(source) + "\t" + fqn.getFqn()); // } // } catch (IOException e) { // logger.log(Level.SEVERE, "Error writing file", e); // } // task.finish(); // } // } // // { // // Find all the fqns unique to that source // for (final Source source : Source.values()) { // TreeSet<SourcedFqnNode> sorted = new TreeSet<>(new Comparator<SourcedFqnNode>() { // @Override // public int compare(SourcedFqnNode o1, SourcedFqnNode o2) { // int cmp = Integer.compare(o1.getCount(source), o2.getCount(source)); // if (cmp == 0) { // return o1.compareTo(o2); // } else { // return cmp; // } // } // }); // // Set<Source> expected = EnumSet.of(Source.MISSING, source); // for (SourcedFqnNode node : root.getPostOrderIterable()) { // Set<Source> sources = node.getSources(); // if (sources.containsAll(expected) && expected.containsAll(sources)) { // sorted.add(node); // } // } // // task.start("Logging missing types listing"); // try (LogFileWriter writer = IOUtils.createLogFileWriter(new File(Arguments.OUTPUT.getValue(), source.name() + "-missing.txt"))) { // for (SourcedFqnNode fqn : sorted.descendingSet()) { // writer.write(fqn.getCount(Source.MISSING) + "\t" + fqn.getFqn()); // } // } catch (IOException e) { // logger.log(Level.SEVERE, "Error writing file", e); // } // task.finish(); // } // } // // { // final Multiset<SourcedFqnNode> maven = HashMultiset.create(); // final Multiset<SourcedFqnNode> project = HashMultiset.create(); // final Multiset<SourcedFqnNode> mavenProject= HashMultiset.create(); // final Multiset<SourcedFqnNode> missing = HashMultiset.create(); // // // // Find the package specific info // for (SourcedFqnNode node : root.getPostOrderIterable()) { // int missingCount = node.getCount(Source.MISSING); // if (missingCount > 0) { // int mavenCount = node.getCount(Source.MAVEN); // int projectCount = node.getCount(Source.PROJECT); // if (mavenCount > 0) { // if (projectCount == 0) { // maven.add(node.getParent()); // } else { // mavenProject.add(node.getParent()); // } // } else if (projectCount > 0) { // project.add(node.getParent()); // } else { // missing.add(node.getParent()); // } // } // } // // task.start("Reporting package breakdown"); // task.report("Maven only: " + maven.elementSet().size()); // task.report("Project only: " + project.elementSet().size()); // task.report("Maven and Project: " + mavenProject.elementSet().size()); // task.report("Missing: " + missing.elementSet().size()); // task.finish(); // // task.start("Logging package popularity"); // // Maven // SourcedFqnNode[] nodes = maven.elementSet().toArray(new SourcedFqnNode[maven.elementSet().size()]); // Arrays.sort(nodes, new Comparator<SourcedFqnNode>() { // @Override // public int compare(SourcedFqnNode o1, SourcedFqnNode o2) { // int cmp = Integer.compare(maven.count(o2), maven.count(o1)); // if (cmp == 0) { // return o1.compareTo(o2); // } else { // return cmp; // } // } // }); // try (LogFileWriter writer = IOUtils.createLogFileWriter(new File(Arguments.OUTPUT.getValue(), "maven-pkgs.txt"))) { // for (SourcedFqnNode pkg : nodes) { // writer.write(maven.count(pkg) + "\t" + pkg.getFqn()); // } // } catch (IOException e) { // logger.log(Level.SEVERE, "Error writing file", e); // } // // // Project // nodes = project.elementSet().toArray(new SourcedFqnNode[project.elementSet().size()]); // Arrays.sort(nodes, new Comparator<SourcedFqnNode>() { // @Override // public int compare(SourcedFqnNode o1, SourcedFqnNode o2) { // int cmp = Integer.compare(project.count(o2), project.count(o1)); // if (cmp == 0) { // return o1.compareTo(o2); // } else { // return cmp; // } // } // }); // try (LogFileWriter writer = IOUtils.createLogFileWriter(new File(Arguments.OUTPUT.getValue(), "project-pkgs.txt"))) { // for (SourcedFqnNode pkg : nodes) { // writer.write(project.count(pkg) + "\t" + pkg.getFqn()); // } // } catch (IOException e) { // logger.log(Level.SEVERE, "Error writing file", e); // } // // // Maven/Project // nodes = mavenProject.elementSet().toArray(new SourcedFqnNode[mavenProject.elementSet().size()]); // Arrays.sort(nodes, new Comparator<SourcedFqnNode>() { // @Override // public int compare(SourcedFqnNode o1, SourcedFqnNode o2) { // int cmp = Integer.compare(mavenProject.count(o2), mavenProject.count(o1)); // if (cmp == 0) { // return o1.compareTo(o2); // } else { // return cmp; // } // } // }); // try (LogFileWriter writer = IOUtils.createLogFileWriter(new File(Arguments.OUTPUT.getValue(), "maven-project-pkgs.txt"))) { // for (SourcedFqnNode pkg : nodes) { // writer.write(mavenProject.count(pkg) + "\t" + pkg.getFqn()); // } // } catch (IOException e) { // logger.log(Level.SEVERE, "Error writing file", e); // } // // nodes = missing.elementSet().toArray(new SourcedFqnNode[missing.elementSet().size()]); // Arrays.sort(nodes, new Comparator<SourcedFqnNode>() { // @Override // public int compare(SourcedFqnNode o1, SourcedFqnNode o2) { // int cmp = Integer.compare(missing.count(o2), missing.count(o1)); // if (cmp == 0) { // return o1.compareTo(o2); // } else { // return cmp; // } // } // }); // try (LogFileWriter writer = IOUtils.createLogFileWriter(new File(Arguments.OUTPUT.getValue(), "missing-pkgs.txt"))) { // for (SourcedFqnNode pkg : nodes) { // writer.write(missing.count(pkg) + "\t" + pkg.getFqn()); // } // } catch (IOException e) { // logger.log(Level.SEVERE, "Error writing file", e); // } // task.finish(); // } task.finish(); }