diff --git a/Core/src/main/java/com/intellectualcrafters/plot/PS.java b/Core/src/main/java/com/intellectualcrafters/plot/PS.java index 327ac5a04..945fc1e81 100644 --- a/Core/src/main/java/com/intellectualcrafters/plot/PS.java +++ b/Core/src/main/java/com/intellectualcrafters/plot/PS.java @@ -155,7 +155,8 @@ public class PS { } this.TASK = this.IMP.getTaskManager(); setupConfigs(); - this.translationFile = MainUtil.getFile(this.IMP.getDirectory(), Settings.Paths.TRANSLATIONS + File.separator + "PlotSquared.use_THIS.yml"); + this.translationFile = + MainUtil.getFile(this.IMP.getDirectory(), Settings.Paths.TRANSLATIONS + File.separator + "PlotSquared.use_THIS.yml"); C.load(this.translationFile); // Database @@ -340,9 +341,9 @@ public class PS { } /** - * Get the current logger + * Get the current logger. * - * @return + * @return The assigned logger */ public ILogger getLogger() { return logger; @@ -352,7 +353,7 @@ public class PS { * Set the Logger. * @see DelegateLogger * @see #getLogger() - * @param logger + * @param logger the logger the plugin should use */ public void setLogger(ILogger logger) { this.logger = logger; @@ -463,14 +464,15 @@ public class PS { } /** - * Get the relevant plot area for a location. + * Get the relevant plot area for a specified location. * * Note: An applicable plot area may not include the location i.e. clusters - * @param location + * @param location the location * @return */ public PlotArea getApplicablePlotArea(Location location) { @@ -559,46 +561,15 @@ public class PS { return null; } - public PlotArea getPlotAreaByString(String search) { - String[] split = search.split(";|,"); - PlotArea[] areas = this.plotAreaMap.get(split[0]); - if (areas == null) { - for (PlotArea area : this.plotAreas) { - if (area.worldname.equalsIgnoreCase(split[0])) { - if (area.id == null || split.length == 2 && area.id.equalsIgnoreCase(split[1])) { - return area; - } - } - } - return null; - } - if (areas.length == 1) { - return areas[0]; - } else if (split.length == 1) { - return null; - } else { - for (PlotArea area : areas) { - if (StringMan.isEqual(split[1], area.id)) { - return area; - } - } - return null; - } - } - - public Set getPlotAreas(String world, RegionWrapper region) { - QuadMap areas = this.plotAreaGrid.get(world); - return areas != null ? areas.get(region) : new HashSet(); - } - /** - * Get the plot area which contains a location. + * Get the {@code PlotArea} which contains a location. *
    - *
  • If the plot area does not contain a location, null will be returned.
  • + *
  • If the plot area does not contain a location, null + * will be returned. *
* - * @param location - * @return + * @param location the location + * @return the {@link PlotArea} in the location, null if non existent */ public PlotArea getPlotAreaAbs(Location location) { switch (this.plotAreas.length) { @@ -657,6 +628,38 @@ public class PS { } } + public PlotArea getPlotAreaByString(String search) { + String[] split = search.split(";|,"); + PlotArea[] areas = this.plotAreaMap.get(split[0]); + if (areas == null) { + for (PlotArea area : this.plotAreas) { + if (area.worldname.equalsIgnoreCase(split[0])) { + if (area.id == null || split.length == 2 && area.id.equalsIgnoreCase(split[1])) { + return area; + } + } + } + return null; + } + if (areas.length == 1) { + return areas[0]; + } else if (split.length == 1) { + return null; + } else { + for (PlotArea area : areas) { + if (StringMan.isEqual(split[1], area.id)) { + return area; + } + } + return null; + } + } + + public Set getPlotAreas(String world, RegionWrapper region) { + QuadMap areas = this.plotAreaGrid.get(world); + return areas != null ? areas.get(region) : new HashSet(); + } + public PlotManager getPlotManager(Plot plot) { return plot.getArea().manager; } @@ -786,75 +789,8 @@ public class PS { } /** - * A more generic way to filter plots - make your own method if you need complex filters. - * @param filters - * @return - */ - public Set getPlots(final PlotFilter... filters) { - final HashSet set = new HashSet<>(); - foreachPlotArea(new RunnableVal() { - @Override - public void run(PlotArea value) { - for (PlotFilter filter : filters) { - if (!filter.allowsArea(value)) { - continue; - } - } - for (Entry entry2 : value.getPlotEntries()) { - Plot plot = entry2.getValue(); - for (PlotFilter filter : filters) { - if (!filter.allowsPlot(plot)) { - continue; - } - } - set.add(plot); - } - } - }); - return set; - } - - /** - * Get all the plots in a single set. - * @return Set of Plots - */ - public Set getPlots() { - int size = getPlotCount(); - final Set result = new HashSet<>(size); - foreachPlotArea(new RunnableVal() { - @Override - public void run(PlotArea value) { - result.addAll(value.getPlots()); - } - }); - return result; - } - - public void setPlots(HashMap> plots) { - if (this.plots_tmp == null) { - this.plots_tmp = new HashMap<>(); - } - for (Entry> entry : plots.entrySet()) { - String world = entry.getKey(); - PlotArea area = getPlotArea(world, null); - if (area == null) { - HashMap map = this.plots_tmp.get(world); - if (map == null) { - map = new HashMap<>(); - this.plots_tmp.put(world, map); - } - map.putAll(entry.getValue()); - } else { - for (Plot plot : entry.getValue().values()) { - plot.setArea(area); - area.addPlot(plot); - } - } - } - } - - /** - * Get all the base plots in a single set (for merged plots it just returns the bottom plot). + * Get all the base plots in a single set (for merged plots it just returns + * the bottom plot). * @return Set of base Plots */ public Set getBasePlots() { @@ -913,9 +849,11 @@ public class PS { /** * Sort plots by hashcode. - * @param plots - * @return - * @deprecated Unchecked, please use {@link #sortPlots(Collection, SortType, PlotArea)} which has additional checks before calling this + * @param plots the collection of plots to sort + * @return the sorted collection + * @deprecated Unchecked, please use + * {@link #sortPlots(Collection, SortType, PlotArea)} which has + * additional checks before calling this */ @Deprecated public ArrayList sortPlotsByHash(Collection plots) { @@ -965,6 +903,38 @@ public class PS { return result; } + /** + * Unchecked, use {@link #sortPlots(Collection, SortType, PlotArea)} instead which will in turn call this. + * @param input an array of plots to sort + */ + @Deprecated + public void sortPlotsByHash(Plot[] input) { + List[] bucket = new ArrayList[32]; + for (int i = 0; i < bucket.length; i++) { + bucket[i] = new ArrayList<>(); + } + boolean maxLength = false; + int placement = 1; + while (!maxLength) { + maxLength = true; + for (Plot i : input) { + int tmp = MathMan.getPositiveId(i.hashCode()) / placement; + bucket[tmp & 31].add(i); + if (maxLength && tmp > 0) { + maxLength = false; + } + } + int a = 0; + for (int b = 0; b < 32; b++) { + for (Plot i : bucket[b]) { + input[a++] = i; + } + bucket[b].clear(); + } + placement *= 32; + } + } + @Deprecated public ArrayList sortPlotsByTimestamp(Collection plots) { int hardMax = 256000; @@ -1037,50 +1007,20 @@ public class PS { } /** - * @deprecated Unchecked, use {@link #sortPlots(Collection, SortType, PlotArea)} instead which will in turn call this - * @param input - */ - @Deprecated - public void sortPlotsByHash(Plot[] input) { - List[] bucket = new ArrayList[32]; - for (int i = 0; i < bucket.length; i++) { - bucket[i] = new ArrayList<>(); - } - boolean maxLength = false; - int placement = 1; - while (!maxLength) { - maxLength = true; - for (Plot i : input) { - int tmp = MathMan.getPositiveId(i.hashCode()) / placement; - bucket[tmp & 31].add(i); - if (maxLength && tmp > 0) { - maxLength = false; - } - } - int a = 0; - for (int b = 0; b < 32; b++) { - for (Plot i : bucket[b]) { - input[a++] = i; - } - bucket[b].clear(); - } - placement *= 32; - } - } - - /** - * Sort a collection of plots by world (with a priority world), then by hashcode. - * @param myPlots + * Sort a collection of plots by world (with a priority world), then + * by hashcode. + * @param plots the plots to sort * @param type The sorting method to use for each world (timestamp, or hash) - * @param priorityArea Use null, "world", or "gibberish" if you want default world order + * @param priorityArea Use null, "world", or "gibberish" if you + * want default world order * @return ArrayList of plot */ - public ArrayList sortPlots(Collection myPlots, SortType type, final PlotArea priorityArea) { + public ArrayList sortPlots(Collection plots, SortType type, final PlotArea priorityArea) { // group by world // sort each HashMap> map = new HashMap<>(); int totalSize = getPlotCount(); - if (myPlots.size() == totalSize) { + if (plots.size() == totalSize) { for (PlotArea area : this.plotAreas) { map.put(area, area.getPlots()); } @@ -1090,7 +1030,7 @@ public class PS { } Collection lastList = null; PlotArea lastWorld = null; - for (Plot plot : myPlots) { + for (Plot plot : plots) { if (lastWorld == plot.getArea()) { lastList.add(plot); } else { @@ -1110,7 +1050,7 @@ public class PS { return a.hashCode() - b.hashCode(); } }); - ArrayList toReturn = new ArrayList<>(myPlots.size()); + ArrayList toReturn = new ArrayList<>(plots.size()); for (PlotArea area : areas) { switch (type) { case CREATION_DATE: @@ -1124,6 +1064,7 @@ public class PS { break; case LAST_MODIFIED: toReturn.addAll(sortPlotsByModified(map.get(area))); + break; default: break; } @@ -1131,10 +1072,79 @@ public class PS { return toReturn; } + /** + * A more generic way to filter plots - make your own method + * if you need complex filters. + * @param filters the filter + * @return a filtered set of plots + */ + public Set getPlots(final PlotFilter... filters) { + final HashSet set = new HashSet<>(); + foreachPlotArea(new RunnableVal() { + @Override + public void run(PlotArea value) { + for (PlotFilter filter : filters) { + if (!filter.allowsArea(value)) { + continue; + } + } + for (Entry entry2 : value.getPlotEntries()) { + Plot plot = entry2.getValue(); + for (PlotFilter filter : filters) { + if (!filter.allowsPlot(plot)) { + continue; + } + } + set.add(plot); + } + } + }); + return set; + } + + /** + * Get all the plots in a single set. + * @return Set of Plots + */ + public Set getPlots() { + int size = getPlotCount(); + final Set result = new HashSet<>(size); + foreachPlotArea(new RunnableVal() { + @Override + public void run(PlotArea value) { + result.addAll(value.getPlots()); + } + }); + return result; + } + + public void setPlots(HashMap> plots) { + if (this.plots_tmp == null) { + this.plots_tmp = new HashMap<>(); + } + for (Entry> entry : plots.entrySet()) { + String world = entry.getKey(); + PlotArea area = getPlotArea(world, null); + if (area == null) { + HashMap map = this.plots_tmp.get(world); + if (map == null) { + map = new HashMap<>(); + this.plots_tmp.put(world, map); + } + map.putAll(entry.getValue()); + } else { + for (Plot plot : entry.getValue().values()) { + plot.setArea(area); + area.addPlot(plot); + } + } + } + } + /** * Get all the plots owned by a player name. - * @param world - * @param player + * @param world the world + * @param player the plot owner * @return Set of Plot */ public Set getPlots(String world, String player) { @@ -1144,8 +1154,8 @@ public class PS { /** * Get all the plots owned by a player name. - * @param area - * @param player + * @param area the PlotArea + * @param player the plot owner * @return Set of Plot */ public Set getPlots(PlotArea area, String player) { @@ -1155,8 +1165,8 @@ public class PS { /** * Get all plots by a PlotPlayer. - * @param world - * @param player + * @param world the world + * @param player the plot owner * @return Set of plot */ public Set getPlots(String world, PlotPlayer player) { @@ -1165,8 +1175,8 @@ public class PS { /** * Get all plots by a PlotPlayer. - * @param area - * @param player + * @param area the PlotArea + * @param player the plot owner * @return Set of plot */ public Set getPlots(PlotArea area, PlotPlayer player) { @@ -1175,8 +1185,8 @@ public class PS { /** * Get all plots by a UUID in a world. - * @param world - * @param uuid + * @param world the world + * @param uuid the plot owner * @return Set of plot */ public Set getPlots(String world, UUID uuid) { @@ -1193,8 +1203,8 @@ public class PS { /** * Get all plots by a UUID in an area. - * @param area - * @param uuid + * @param area the {@code PlotArea} + * @param uuid the plot owner * @return Set of plot */ public Set getPlots(PlotArea area, UUID uuid) { @@ -1213,8 +1223,8 @@ public class PS { * Use {@link #hasPlotArea(String)}. * Note: Worlds may have more than one plot area * @deprecated - * @param world - * @return + * @param world the world + * @return if the world is a plotworld */ @Deprecated public boolean isPlotWorld(String world) { @@ -1223,7 +1233,7 @@ public class PS { /** * Check if a plot world. - * @param world + * @param world the world * @see #getPlotAreaByString(String) to get the PlotArea object * @return if a plot world is registered */ @@ -1264,6 +1274,15 @@ public class PS { return set; } + /** + * Get the plots for a PlotPlayer. + * @param player the player to retrieve the plots for + * @return Set of Plot + */ + public Set getPlots(PlotPlayer player) { + return getPlots(player.getUUID()); + } + public Collection getPlots(PlotArea area) { return area == null ? new HashSet() : area.getPlots(); } @@ -1272,23 +1291,14 @@ public class PS { return area == null ? null : id == null ? null : area.getPlot(id); } - /** - * Get the plots for a PlotPlayer. - * @param player - * @return Set of Plot - */ - public Set getPlots(PlotPlayer player) { - return getPlots(player.getUUID()); - } - public Set getBasePlots(PlotPlayer player) { return getBasePlots(player.getUUID()); } /** * Get the plots for a UUID. - * @param uuid - * @return Set of Plot + * @param uuid the plot owner + * @return Set of Plot's owned by the player */ public Set getPlots(final UUID uuid) { final ArrayList myPlots = new ArrayList<>(); @@ -1318,7 +1328,7 @@ public class PS { /** * Get the plots for a UUID. - * @param uuid The UUID of the owner + * @param uuid the UUID of the owner * @return Set of Plot */ public Set getPlotsAbs(final UUID uuid) { @@ -1335,8 +1345,8 @@ public class PS { } /** - * Unregister a plot from local memory (does not call DB) - * @param plot + * Unregister a plot from local memory (does not call DB). + * @param plot the plot to remove * @param callEvent If to call an event about the plot being removed * @return true if plot existed | false if it didn't */ @@ -1362,18 +1372,19 @@ public class PS { /** * This method is called by the PlotGenerator class normally. *
    - *
  • Initializes the PlotArea and PlotManager classes
  • - *
  • Registers the PlotArea and PlotManager classes
  • - *
  • Loads (and/or generates) the PlotArea configuration
  • - *
  • Sets up the world border if configured
  • + *
  • Initializes the PlotArea and PlotManager classes + *
  • Registers the PlotArea and PlotManager classes + *
  • Loads (and/or generates) the PlotArea configuration + *
  • Sets up the world border if configured *
- * If loading an augmented plot world: - *
    - *
  • Creates the AugmentedPopulator classes
  • - *
  • Injects the AugmentedPopulator classes if required
  • - *
- * @param world The world to load - * @param baseGenerator The generator for that world, or null if no generator + * + *

If loading an augmented plot world: + *

    + *
  • Creates the AugmentedPopulator classes + *
  • Injects the AugmentedPopulator classes if required + *
+ * @param world the world to load + * @param baseGenerator The generator for that world, or null */ public void loadWorld(String world, GeneratorWrapper baseGenerator) { if (world.equals("CheckingPlotSquaredGenerator")) { @@ -1594,11 +1605,13 @@ public class PS { /** * Setup the configuration for a plot world based on world arguments. + * *

- * e.g. /mv create normal -g PlotSquared: - *

+ * e.g. /mv create <world> normal -g PlotSquared:<args> + * * @param world The name of the world * @param args The arguments + * @param generator the plot generator * @return boolean | if valid arguments were provided */ public boolean setupPlotWorld(String world, String args, IndependentPlotGenerator generator) { @@ -1785,7 +1798,7 @@ public class PS { } /** - * Close the database connection + * Close the database connection. */ public void disable() { try { @@ -1810,13 +1823,14 @@ public class PS { } /** - * Setup the database connection + * Setup the database connection. */ public void setupDatabase() { try { if (DBFunc.dbManager == null) { if (Storage.MySQL.USE) { - this.database = new com.intellectualcrafters.plot.database.MySQL(Storage.MySQL.HOST, Storage.MySQL.PORT, Storage.MySQL.DATABASE, Storage.MySQL.USER, Storage.MySQL.PASSWORD); + this.database = new com.intellectualcrafters.plot.database.MySQL(Storage.MySQL.HOST, Storage.MySQL.PORT, Storage.MySQL.DATABASE, + Storage.MySQL.USER, Storage.MySQL.PASSWORD); } else if (Storage.SQLite.USE) { File file = MainUtil.getFile(IMP.getDirectory(), Storage.SQLite.DB + ".db"); this.database = new com.intellectualcrafters.plot.database.SQLite(file); @@ -1845,7 +1859,8 @@ public class PS { } /** - * Setup the default configuration (settings.yml) + * Setup the default configuration. + * @throws IOException if the config failed to save */ public void setupConfig() throws IOException { String lastVersionString = this.config.getString("version"); @@ -1853,7 +1868,7 @@ public class PS { String[] split = lastVersionString.split("\\."); this.lastVersion = new int[]{Integer.parseInt(split[0]), Integer.parseInt(split[1]), Integer.parseInt(split[2])}; } - if (lastVersion != null && checkVersion(new int[]{3,4,0}, lastVersion)) { + if (lastVersion != null && checkVersion(new int[]{3, 4, 0}, lastVersion)) { Settings.convertLegacy(configFile); if (config.contains("worlds")) { ConfigurationSection worldSection = config.getConfigurationSection("worlds"); @@ -1881,12 +1896,12 @@ public class PS { * - Translation: PlotSquared.use_THIS.yml, style.yml
*/ public void setupConfigs() { - File folder = new File(this.IMP.getDirectory(),"config"); + File folder = new File(this.IMP.getDirectory(), "config"); if (!folder.exists() && !folder.mkdirs()) { PS.log(C.PREFIX + "&cFailed to create the /plugins/config folder. Please create it manually."); } try { - this.worldsFile = new File(folder,"worlds.yml"); + this.worldsFile = new File(folder, "worlds.yml"); if (!this.worldsFile.exists() && !this.worldsFile.createNewFile()) { PS.log("Could not create the worlds file, please create \"worlds.yml\" manually."); } @@ -1895,7 +1910,7 @@ public class PS { PS.log("Failed to save settings.yml"); } try { - this.configFile = new File(folder,"settings.yml"); + this.configFile = new File(folder, "settings.yml"); if (!this.configFile.exists() && !this.configFile.createNewFile()) { PS.log("Could not create the settings file, please create \"settings.yml\" manually."); } @@ -1905,7 +1920,7 @@ public class PS { PS.log("Failed to save settings.yml"); } try { - this.styleFile = MainUtil.getFile(IMP.getDirectory(), Settings.Paths.TRANSLATIONS +File.separator + "style.yml" ); + this.styleFile = MainUtil.getFile(IMP.getDirectory(), Settings.Paths.TRANSLATIONS + File.separator + "style.yml"); if (!this.styleFile.exists()) { if (!this.styleFile.getParentFile().exists()) { this.styleFile.getParentFile().mkdirs(); @@ -1921,7 +1936,7 @@ public class PS { PS.log("failed to save style.yml"); } try { - this.storageFile = new File(folder,"storage.yml"); + this.storageFile = new File(folder, "storage.yml"); if (!this.storageFile.exists() && !this.storageFile.createNewFile()) { PS.log("Could not the storage settings file, please create \"storage.yml\" manually."); } @@ -1931,7 +1946,7 @@ public class PS { PS.log("Failed to save storage.yml"); } try { - this.commandsFile = new File(folder,"commands.yml"); + this.commandsFile = new File(folder, "commands.yml"); if (!this.commandsFile.exists() && !this.commandsFile.createNewFile()) { PS.log("Could not the storage settings file, please create \"commands.yml\" manually."); } @@ -1949,7 +1964,7 @@ public class PS { } /** - * Setup the storage file (load + save missing nodes) + * Setup the storage file (load + save missing nodes). */ private void setupStorage() { Storage.load(storageFile); @@ -2000,6 +2015,16 @@ public class PS { } } + public void foreachPlotArea(String world, RunnableVal runnable) { + PlotArea[] array = this.plotAreaMap.get(world); + if (array == null) { + return; + } + for (PlotArea area : array) { + runnable.run(area); + } + } + public void foreachPlot(RunnableVal runnable) { for (PlotArea area : this.plotAreas) { for (Plot plot : area.getPlots()) { @@ -2029,16 +2054,6 @@ public class PS { } } - public void foreachPlotArea(String world, RunnableVal runnable) { - PlotArea[] array = this.plotAreaMap.get(world); - if (array == null) { - return; - } - for (PlotArea area : array) { - runnable.run(area); - } - } - public PlotArea getFirstPlotArea() { return this.plotAreas.length > 0 ? this.plotAreas[0] : null; } @@ -2062,7 +2077,7 @@ public class PS { } /** - * @deprecated Since worlds can have multiple plot areas + * Not recommended for use since worlds can have multiple PlotAreas. * @return Set of world names */ @Deprecated @@ -2087,7 +2102,7 @@ public class PS { /** * Get a list of PlotArea objects. - * @param world + * @param world the world * @return Collection of PlotArea objects */ public Set getPlotAreas(String world) {