Continue cleaning up PlotSquared.java

This commit is contained in:
Alexander Söderberg 2020-07-08 15:09:25 +02:00
parent 51bd21a464
commit c36e311520
No known key found for this signature in database
GPG Key ID: C0207FF7EA146678
23 changed files with 108 additions and 314 deletions

View File

@ -623,7 +623,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
@Override @SuppressWarnings("deprecation") public void runEntityTask() { @Override @SuppressWarnings("deprecation") public void runEntityTask() {
PlotSquared.log(Captions.PREFIX + "KillAllEntities started."); PlotSquared.log(Captions.PREFIX + "KillAllEntities started.");
TaskManager.runTaskRepeat(() -> PlotSquared.get().forEachPlotArea(plotArea -> { TaskManager.runTaskRepeat(() -> PlotSquared.get().getPlotAreaManager().forEachPlotArea(plotArea -> {
final World world = Bukkit.getWorld(plotArea.getWorldName()); final World world = Bukkit.getWorld(plotArea.getWorldName());
try { try {
if (world == null) { if (world == null) {

View File

@ -49,14 +49,12 @@ import com.plotsquared.core.generator.IndependentPlotGenerator;
import com.plotsquared.core.listener.WESubscriber; import com.plotsquared.core.listener.WESubscriber;
import com.plotsquared.core.location.Location; import com.plotsquared.core.location.Location;
import com.plotsquared.core.player.ConsolePlayer; import com.plotsquared.core.player.ConsolePlayer;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.BlockBucket; import com.plotsquared.core.plot.BlockBucket;
import com.plotsquared.core.plot.Plot; import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.PlotAreaTerrainType; import com.plotsquared.core.plot.PlotAreaTerrainType;
import com.plotsquared.core.plot.PlotAreaType; import com.plotsquared.core.plot.PlotAreaType;
import com.plotsquared.core.plot.PlotCluster; import com.plotsquared.core.plot.PlotCluster;
import com.plotsquared.core.plot.PlotFilter;
import com.plotsquared.core.plot.PlotId; import com.plotsquared.core.plot.PlotId;
import com.plotsquared.core.plot.PlotManager; import com.plotsquared.core.plot.PlotManager;
import com.plotsquared.core.plot.comment.CommentManager; import com.plotsquared.core.plot.comment.CommentManager;
@ -88,7 +86,6 @@ import com.plotsquared.core.uuid.UUIDPipeline;
import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.math.BlockVector2; import com.sk89q.worldedit.math.BlockVector2;
import lombok.Getter; import lombok.Getter;
import lombok.NonNull;
import lombok.Setter; import lombok.Setter;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -117,25 +114,21 @@ import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.UUID;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream; import java.util.zip.ZipInputStream;
/** /**
* An implementation of the core, with a static getter for easy access. * An implementation of the core, with a static getter for easy access.
*/ */
@SuppressWarnings({"unused", "WeakerAccess"}) @SuppressWarnings({"WeakerAccess"})
public class PlotSquared<P> { public class PlotSquared<P> {
private static final Set<Plot> EMPTY_SET = Collections.unmodifiableSet(Collections.emptySet()); private static final Set<Plot> EMPTY_SET = Collections.unmodifiableSet(Collections.emptySet());
@ -481,18 +474,6 @@ public class PlotSquared<P> {
return Settings.PLATFORM; return Settings.PLATFORM;
} }
public PlotManager getPlotManager(Plot plot) {
return plot.getArea().getPlotManager();
}
@Nullable public PlotManager getPlotManager(@NotNull final Location location) {
final PlotArea plotArea = this.getPlotAreaManager().getPlotArea(location);
if (plotArea == null) {
return null;
}
return plotArea.getPlotManager();
}
/** /**
* Add a global reference to a plot world. * Add a global reference to a plot world.
* *
@ -826,7 +807,7 @@ public class PlotSquared<P> {
// group by world // group by world
// sort each // sort each
HashMap<PlotArea, Collection<Plot>> map = new HashMap<>(); HashMap<PlotArea, Collection<Plot>> map = new HashMap<>();
int totalSize = getPlotCount(); int totalSize = Arrays.stream(this.plotAreaManager.getAllPlotAreas()).mapToInt(PlotArea::getPlotCount).sum();
if (plots.size() == totalSize) { if (plots.size() == totalSize) {
for (PlotArea area : plotAreaManager.getAllPlotAreas()) { for (PlotArea area : plotAreaManager.getAllPlotAreas()) {
map.put(area, area.getPlots()); map.put(area, area.getPlots());
@ -880,45 +861,6 @@ public class PlotSquared<P> {
return toReturn; 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
* @deprecated Use {@link PlotQuery}
*/
@Deprecated public Set<Plot> getPlots(final PlotFilter... filters) {
final List<PlotArea> areas = new LinkedList<>();
for (final PlotArea plotArea : this.getPlotAreaManager().getAllPlotAreas()) {
for (final PlotFilter filter : filters) {
if (filter.allowsArea(plotArea)) {
areas.add(plotArea);
}
}
}
return PlotQuery.newQuery().inAreas(areas).thatPasses(plot -> {
for (final PlotFilter filter : filters) {
if (!filter.allowsPlot(plot)) {
return false;
}
}
return true;
}).asSet();
}
/**
* Gets all the plots across all plotworlds in one {@code Set}.
*
* @return all the plots on the server loaded by this plugin
*/
public Set<Plot> getPlots() {
int size = getPlotCount();
final Set<Plot> result = new HashSet<>(size);
forEachPlotArea(value -> result.addAll(value.getPlots()));
return result;
}
public void setPlots(@NotNull final Map<String, HashMap<PlotId, Plot>> plots) { public void setPlots(@NotNull final Map<String, HashMap<PlotId, Plot>> plots) {
if (this.plots_tmp == null) { if (this.plots_tmp == null) {
this.plots_tmp = new HashMap<>(); this.plots_tmp = new HashMap<>();
@ -938,129 +880,6 @@ public class PlotSquared<P> {
} }
} }
/**
* Gets all the plots owned by a player name.
*
* @param world the world
* @param player the plot owner
* @return Set of Plot
*/
public Set<Plot> getPlots(String world, String player) {
final UUID uuid = this.impromptuUUIDPipeline.getSingle(player, Settings.UUID.BLOCKING_TIMEOUT);
return getPlots(world, uuid);
}
/**
* Gets all the plots owned by a player name.
*
* @param area the PlotArea
* @param player the plot owner
* @return Set of Plot
*/
public Set<Plot> getPlots(PlotArea area, String player) {
final UUID uuid = this.impromptuUUIDPipeline.getSingle(player, Settings.UUID.BLOCKING_TIMEOUT);
return getPlots(area, uuid);
}
/**
* Gets all plots by a PlotPlayer.
*
* @param world the world
* @param player the plot owner
* @return Set of plot
*/
public Set<Plot> getPlots(String world, PlotPlayer<?> player) {
return PlotQuery.newQuery().inWorld(world).ownedBy(player).asSet();
}
/**
* Gets all plots by a PlotPlayer.
*
* @param area the PlotArea
* @param player the plot owner
* @return Set of plot
*/
public Set<Plot> getPlots(PlotArea area, PlotPlayer<?> player) {
return PlotQuery.newQuery().inArea(area).ownedBy(player).asSet();
}
/**
* Gets all plots by a UUID in a world.
*
* @param world the world
* @param uuid the plot owner
* @return Set of plot
*/
public Set<Plot> getPlots(String world, UUID uuid) {
return PlotQuery.newQuery().inWorld(world).ownedBy(uuid).asSet();
}
/**
* Gets all plots by a UUID in an area.
*
* @param area the {@code PlotArea}
* @param uuid the plot owner
* @return Set of plots
*/
public Set<Plot> getPlots(PlotArea area, UUID uuid) {
return PlotQuery.newQuery().inArea(area).ownedBy(uuid).asSet();
}
public Collection<Plot> getPlots(String world) {
return PlotQuery.newQuery().inWorld(world).asCollection();
}
/**
* Gets the plots for a PlotPlayer.
*
* @param player the player to retrieve the plots for
* @return Set of Plot
*/
public Set<Plot> getPlots(PlotPlayer<?> player) {
return PlotQuery.newQuery().ownedBy(player).asSet();
}
public Collection<Plot> getPlots(PlotArea area) {
return area == null ? EMPTY_SET : area.getPlots();
}
public Plot getPlot(PlotArea area, PlotId id) {
return area == null ? null : id == null ? null : area.getPlot(id);
}
public Set<Plot> getBasePlots(PlotPlayer<?> player) {
return getBasePlots(player.getUUID());
}
/**
* Gets the plots for a UUID.
*
* @param uuid the plot owner
* @return Set of Plot's owned by the player
*/
public Set<Plot> getPlots(final UUID uuid) {
return PlotQuery.newQuery().ownedBy(uuid).asSet();
}
public boolean hasPlot(final UUID uuid) {
return Arrays.stream(plotAreaManager.getAllPlotAreas())
.anyMatch(area -> area.hasPlot(uuid));
}
public Set<Plot> getBasePlots(final UUID uuid) {
return PlotQuery.newQuery().ownedBy(uuid).whereBasePlot().asSet();
}
/**
* Gets the plots for a UUID.
*
* @param uuid the UUID of the owner
* @return Set of Plot
*/
public Set<Plot> getPlotsAbs(final UUID uuid) {
return PlotQuery.newQuery().ownedBy(uuid).asSet();
}
/** /**
* Unregisters a plot from local memory without calling the database. * Unregisters a plot from local memory without calling the database.
* *
@ -1464,17 +1283,6 @@ public class PlotSquared<P> {
return true; return true;
} }
public boolean canUpdate(@NonNull final String current, @NonNull final String other) {
final String s1 = normalisedVersion(current);
final String s2 = normalisedVersion(other);
return s1.compareTo(s2) < 0;
}
public String normalisedVersion(@NonNull final String version) {
final String[] split = Pattern.compile(".", Pattern.LITERAL).split(version);
return Arrays.stream(split).map(s -> String.format("%4s", s)).collect(Collectors.joining());
}
/** /**
* Copies a file from inside the jar to a location * Copies a file from inside the jar to a location
* *
@ -1530,19 +1338,6 @@ public class PlotSquared<P> {
} }
} }
private Map<String, Map<PlotId, Plot>> getPlotsRaw() {
HashMap<String, Map<PlotId, Plot>> map = new HashMap<>();
for (PlotArea area : this.plotAreaManager.getAllPlotAreas()) {
Map<PlotId, Plot> map2 = map.get(area.toString());
if (map2 == null) {
map.put(area.toString(), area.getPlotsMap());
} else {
map2.putAll(area.getPlotsMap());
}
}
return map;
}
/** /**
* Safely closes the database connection. * Safely closes the database connection.
*/ */
@ -1885,37 +1680,6 @@ public class PlotSquared<P> {
} }
} }
/**
* Gets the Java version.
*
* @return the java version
*/
private double getJavaVersion() {
return Double.parseDouble(System.getProperty("java.specification.version"));
}
public void forEachPlotArea(Consumer<? super PlotArea> action) {
for (final PlotArea area : this.plotAreaManager.getAllPlotAreas()) {
action.accept(area);
}
}
public void forEachPlotArea(@NonNull final String world, Consumer<PlotArea> consumer) {
final PlotArea[] array = this.plotAreaManager.getPlotAreas(world, null);
if (array == null) {
return;
}
for (final PlotArea area : array) {
consumer.accept(area);
}
}
public void forEachPlot(Consumer<Plot> consumer) {
for (final PlotArea area : this.plotAreaManager.getAllPlotAreas()) {
area.getPlots().forEach(consumer);
}
}
public void forEachPlotRaw(Consumer<Plot> consumer) { public void forEachPlotRaw(Consumer<Plot> consumer) {
for (final PlotArea area : this.plotAreaManager.getAllPlotAreas()) { for (final PlotArea area : this.plotAreaManager.getAllPlotAreas()) {
area.getPlots().forEach(consumer); area.getPlots().forEach(consumer);
@ -1927,21 +1691,6 @@ public class PlotSquared<P> {
} }
} }
public void forEachBasePlot(Consumer<Plot> consumer) {
for (final PlotArea area : this.plotAreaManager.getAllPlotAreas()) {
area.forEachBasePlot(consumer);
}
}
public int getPlotAreaCount() {
return this.plotAreaManager.getAllPlotAreas().length;
}
public int getPlotCount() {
return Arrays.stream(this.plotAreaManager.getAllPlotAreas())
.mapToInt(PlotArea::getPlotCount).sum();
}
/** /**
* Check if the chunk uses vanilla/non-PlotSquared generation * Check if the chunk uses vanilla/non-PlotSquared generation
* *
@ -1959,23 +1708,6 @@ public class PlotSquared<P> {
return area.getTerrain() != PlotAreaTerrainType.NONE; return area.getTerrain() != PlotAreaTerrainType.NONE;
} }
public boolean isAugmented(@NonNull final String world) {
final PlotArea[] areas = plotAreaManager.getPlotAreas(world, null);
return areas != null && (areas.length > 1 || areas[0].getType() != PlotAreaType.NORMAL);
}
/**
* Gets Plots based on alias
*
* @param alias to search plots
* @param worldname to filter alias to a specific world [optional] null means all worlds
* @return Set&lt;{@link Plot }&gt; empty if nothing found
*/
public Set<Plot> getPlotsByAlias(@Nullable final String alias,
@NonNull final String worldname) {
return PlotQuery.newQuery().inWorld(worldname).withAlias(alias).asSet();
}
public YamlConfiguration getConfig() { public YamlConfiguration getConfig() {
return config; return config;
} }

View File

@ -38,6 +38,7 @@ import com.plotsquared.core.util.ChunkManager;
import com.plotsquared.core.util.EventDispatcher; import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.MainUtil; import com.plotsquared.core.util.MainUtil;
import com.plotsquared.core.util.SchematicHandler; import com.plotsquared.core.util.SchematicHandler;
import com.plotsquared.core.util.query.PlotQuery;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.Collections; import java.util.Collections;
@ -64,10 +65,9 @@ import java.util.UUID;
* Gets all plots. * Gets all plots.
* *
* @return all plots * @return all plots
* @see PlotSquared#getPlots()
*/ */
public Set<Plot> getAllPlots() { public Set<Plot> getAllPlots() {
return PlotSquared.get().getPlots(); return PlotQuery.newQuery().allPlots().asSet();
} }
/** /**
@ -76,8 +76,8 @@ import java.util.UUID;
* @param player Player, whose plots to search for * @param player Player, whose plots to search for
* @return all plots that a player owns * @return all plots that a player owns
*/ */
public Set<Plot> getPlayerPlots(PlotPlayer player) { public Set<Plot> getPlayerPlots(PlotPlayer<?> player) {
return PlotSquared.get().getPlots(player); return PlotQuery.newQuery().ownedBy(player).asSet();
} }
/** /**

View File

@ -39,8 +39,8 @@ import com.plotsquared.core.plot.PlotCluster;
import com.plotsquared.core.plot.PlotId; import com.plotsquared.core.plot.PlotId;
import com.plotsquared.core.util.MainUtil; import com.plotsquared.core.util.MainUtil;
import com.plotsquared.core.util.Permissions; import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.query.PlotQuery;
import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
@ -453,8 +453,8 @@ public class Cluster extends SubCommand {
MainUtil.sendMessage(player2, Captions.CLUSTER_REMOVED, MainUtil.sendMessage(player2, Captions.CLUSTER_REMOVED,
cluster.getName()); cluster.getName());
} }
for (Plot plot : new ArrayList<>(PlotSquared.get() for (final Plot plot : PlotQuery.newQuery().inWorld(player2.getLocation()
.getPlots(player2.getLocation().getWorld(), uuid))) { .getWorld()).ownedBy(uuid).asCollection()) {
PlotCluster current = plot.getCluster(); PlotCluster current = plot.getCluster();
if (current != null && current.equals(cluster)) { if (current != null && current.equals(cluster)) {
plot.unclaim(); plot.unclaim();
@ -512,8 +512,8 @@ public class Cluster extends SubCommand {
cluster.invited.remove(uuid); cluster.invited.remove(uuid);
DBFunc.removeInvited(cluster, uuid); DBFunc.removeInvited(cluster, uuid);
MainUtil.sendMessage(player, Captions.CLUSTER_REMOVED, cluster.getName()); MainUtil.sendMessage(player, Captions.CLUSTER_REMOVED, cluster.getName());
for (Plot plot : new ArrayList<>( for (final Plot plot : PlotQuery.newQuery().inWorld(player.getLocation().getWorld())
PlotSquared.get().getPlots(player.getLocation().getWorld(), uuid))) { .ownedBy(uuid).asCollection()) {
PlotCluster current = plot.getCluster(); PlotCluster current = plot.getCluster();
if (current != null && current.equals(cluster)) { if (current != null && current.equals(cluster)) {
plot.unclaim(); plot.unclaim();

View File

@ -80,7 +80,8 @@ public class Condense extends SubCommand {
return false; return false;
} }
int radius = Integer.parseInt(args[2]); int radius = Integer.parseInt(args[2]);
ArrayList<Plot> plots = new ArrayList<>(PlotSquared.get().getPlots(area));
final List<Plot> plots = new ArrayList<>(area.getPlots());
// remove non base plots // remove non base plots
Iterator<Plot> iterator = plots.iterator(); Iterator<Plot> iterator = plots.iterator();
int maxSize = 0; int maxSize = 0;

View File

@ -37,6 +37,7 @@ import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.PlotId; import com.plotsquared.core.plot.PlotId;
import com.plotsquared.core.plot.world.SinglePlotArea; import com.plotsquared.core.plot.world.SinglePlotArea;
import com.plotsquared.core.util.MainUtil; import com.plotsquared.core.util.MainUtil;
import com.plotsquared.core.util.query.PlotQuery;
import com.plotsquared.core.util.task.TaskManager; import com.plotsquared.core.util.task.TaskManager;
import java.io.File; import java.io.File;
@ -85,7 +86,7 @@ public class DatabaseCommand extends SubCommand {
plots = PlotSquared.get().sortPlotsByTemp(area.getPlots()); plots = PlotSquared.get().sortPlotsByTemp(area.getPlots());
args = Arrays.copyOfRange(args, 1, args.length); args = Arrays.copyOfRange(args, 1, args.length);
} else { } else {
plots = PlotSquared.get().sortPlotsByTemp(PlotSquared.get().getPlots()); plots = PlotSquared.get().sortPlotsByTemp(PlotQuery.newQuery().allPlots().asList());
} }
if (args.length < 1) { if (args.length < 1) {
MainUtil.sendMessage(player, getUsage()); MainUtil.sendMessage(player, getUsage());

View File

@ -33,6 +33,7 @@ import com.plotsquared.core.util.RegionManager;
import com.plotsquared.core.util.StringMan; import com.plotsquared.core.util.StringMan;
import com.plotsquared.core.util.entity.EntityCategories; import com.plotsquared.core.util.entity.EntityCategories;
import com.plotsquared.core.util.entity.EntityCategory; import com.plotsquared.core.util.entity.EntityCategory;
import com.plotsquared.core.util.query.PlotQuery;
import com.plotsquared.core.util.task.TaskManager; import com.plotsquared.core.util.task.TaskManager;
import com.plotsquared.core.uuid.UUIDMapping; import com.plotsquared.core.uuid.UUIDMapping;
import com.sk89q.worldedit.world.entity.EntityType; import com.sk89q.worldedit.world.entity.EntityType;
@ -119,7 +120,7 @@ public class Debug extends SubCommand {
information.append(getSection(section, "PlotArea")); information.append(getSection(section, "PlotArea"));
information.append( information.append(
getLine(line, "Plot Worlds", StringMan.join(PlotSquared.get().getPlotAreaManager().getAllPlotAreas(), ", "))); getLine(line, "Plot Worlds", StringMan.join(PlotSquared.get().getPlotAreaManager().getAllPlotAreas(), ", ")));
information.append(getLine(line, "Owned Plots", PlotSquared.get().getPlots().size())); information.append(getLine(line, "Owned Plots", PlotQuery.newQuery().allPlots().count()));
information.append(getSection(section, "Messages")); information.append(getSection(section, "Messages"));
information.append(getLine(line, "Total Messages", Captions.values().length)); information.append(getLine(line, "Total Messages", Captions.values().length));
information.append(getLine(line, "View all captions", "/plot debug msg")); information.append(getLine(line, "View all captions", "/plot debug msg"));

View File

@ -25,13 +25,13 @@
*/ */
package com.plotsquared.core.command; package com.plotsquared.core.command;
import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.database.DBFunc; import com.plotsquared.core.database.DBFunc;
import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot; import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.util.MainUtil; import com.plotsquared.core.util.MainUtil;
import com.plotsquared.core.util.query.PlotQuery;
import java.util.ArrayList; import java.util.List;
@CommandDeclaration(command = "debugsavetest", @CommandDeclaration(command = "debugsavetest",
permission = "plots.debugsavetest", permission = "plots.debugsavetest",
@ -42,7 +42,7 @@ import java.util.ArrayList;
public class DebugSaveTest extends SubCommand { public class DebugSaveTest extends SubCommand {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) { @Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
ArrayList<Plot> plots = new ArrayList<>(PlotSquared.get().getPlots()); final List<Plot> plots = PlotQuery.newQuery().allPlots().asList();
MainUtil.sendMessage(player, "&6Starting `DEBUGSAVETEST`"); MainUtil.sendMessage(player, "&6Starting `DEBUGSAVETEST`");
DBFunc.createPlotsAndData(plots, DBFunc.createPlotsAndData(plots,
() -> MainUtil.sendMessage(player, "&6Database sync finished!")); () -> MainUtil.sendMessage(player, "&6Database sync finished!"));

View File

@ -132,7 +132,7 @@ public class HomeCommand extends Command {
break; break;
case 2: case 2:
// we assume args[0] is a plot area and args[1] an identifier // we assume args[0] is a plot area and args[1] an identifier
PlotArea plotArea = PlotSquared.get().getPlotAreaByString(args[0]); PlotArea plotArea = PlotSquared.get().getPlotAreaManager().getPlotAreaByString(args[0]);
identifier = args[1]; identifier = args[1];
if (plotArea == null) { if (plotArea == null) {
// invalid command, therefore no plots // invalid command, therefore no plots

View File

@ -51,7 +51,7 @@ public class Reload extends SubCommand {
// loaded during startup unfortunately. // loaded during startup unfortunately.
PlotSquared.get().setupConfigs(); PlotSquared.get().setupConfigs();
Captions.load(PlotSquared.get().translationFile); Captions.load(PlotSquared.get().translationFile);
PlotSquared.get().forEachPlotArea(area -> { PlotSquared.get().getPlotAreaManager().forEachPlotArea(area -> {
ConfigurationSection worldSection = PlotSquared.get().worlds ConfigurationSection worldSection = PlotSquared.get().worlds
.getConfigurationSection("worlds." + area.getWorldName()); .getConfigurationSection("worlds." + area.getWorldName());
if (worldSection == null) { if (worldSection == null) {

View File

@ -25,13 +25,13 @@
*/ */
package com.plotsquared.core.command; package com.plotsquared.core.command;
import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.configuration.Captions; import com.plotsquared.core.configuration.Captions;
import com.plotsquared.core.location.Location; import com.plotsquared.core.location.Location;
import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot; import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.util.MainUtil; import com.plotsquared.core.util.MainUtil;
import com.plotsquared.core.util.StringMan; import com.plotsquared.core.util.StringMan;
import com.plotsquared.core.util.query.PlotQuery;
@CommandDeclaration(command = "target", @CommandDeclaration(command = "target",
usage = "/plot target <<plot>|nearest>", usage = "/plot target <<plot>|nearest>",
@ -54,7 +54,7 @@ public class Target extends SubCommand {
Plot target = null; Plot target = null;
if (StringMan.isEqualIgnoreCaseToAny(args[0], "near", "nearest")) { if (StringMan.isEqualIgnoreCaseToAny(args[0], "near", "nearest")) {
int distance = Integer.MAX_VALUE; int distance = Integer.MAX_VALUE;
for (Plot plot : PlotSquared.get().getPlots(location.getWorld())) { for (Plot plot : PlotQuery.newQuery().inWorld(location.getWorld()).asCollection()) {
double current = plot.getCenterSynchronous().getEuclideanDistanceSquared(location); double current = plot.getCenterSynchronous().getEuclideanDistanceSquared(location);
if (current < distance) { if (current < distance) {
distance = (int) current; distance = (int) current;

View File

@ -37,6 +37,7 @@ import com.plotsquared.core.util.MainUtil;
import com.plotsquared.core.util.RegionManager; import com.plotsquared.core.util.RegionManager;
import com.plotsquared.core.util.RegionUtil; import com.plotsquared.core.util.RegionUtil;
import com.plotsquared.core.util.WorldUtil; import com.plotsquared.core.util.WorldUtil;
import com.plotsquared.core.util.query.PlotQuery;
import com.plotsquared.core.util.task.RunnableVal; import com.plotsquared.core.util.task.RunnableVal;
import com.plotsquared.core.util.task.RunnableVal2; import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.TaskManager; import com.plotsquared.core.util.task.TaskManager;
@ -52,6 +53,7 @@ import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
import java.util.Set; import java.util.Set;
@CommandDeclaration(command = "trim", @CommandDeclaration(command = "trim",
@ -129,7 +131,7 @@ public class Trim extends SubCommand {
return false; return false;
} }
MainUtil.sendMessage(null, "Collecting region data..."); MainUtil.sendMessage(null, "Collecting region data...");
ArrayList<Plot> plots = new ArrayList<>(PlotSquared.get().getPlots(world)); final List<Plot> plots = PlotQuery.newQuery().inWorld(world).asList();
if (ExpireManager.IMP != null) { if (ExpireManager.IMP != null) {
plots.removeAll(ExpireManager.IMP.getPendingExpired()); plots.removeAll(ExpireManager.IMP.getPendingExpired());
} }
@ -206,7 +208,7 @@ public class Trim extends SubCommand {
int bz = cbz << 4; int bz = cbz << 4;
CuboidRegion region = CuboidRegion region =
RegionUtil.createRegion(bx, bx + 511, bz, bz + 511); RegionUtil.createRegion(bx, bx + 511, bz, bz + 511);
for (Plot plot : PlotSquared.get().getPlots(world)) { for (Plot plot : PlotQuery.newQuery().inWorld(world).asCollection()) {
Location bot = plot.getBottomAbs(); Location bot = plot.getBottomAbs();
Location top = plot.getExtendedTopAbs(); Location top = plot.getExtendedTopAbs();
CuboidRegion plotReg = RegionUtil CuboidRegion plotReg = RegionUtil

View File

@ -198,7 +198,7 @@ public class Visit extends Command {
if (throwable instanceof TimeoutException) { if (throwable instanceof TimeoutException) {
// The request timed out // The request timed out
MainUtil.sendMessage(player, Captions.FETCHING_PLAYERS_TIMEOUT); MainUtil.sendMessage(player, Captions.FETCHING_PLAYERS_TIMEOUT);
} else if (uuid != null && !PlotSquared.get().hasPlot(uuid)) { } else if (uuid != null && !PlotQuery.newQuery().ownedBy(uuid).anyMatch()) {
// It was a valid UUID but the player has no plots // It was a valid UUID but the player has no plots
MainUtil.sendMessage(player, Captions.PLAYER_NO_PLOTS); MainUtil.sendMessage(player, Captions.PLAYER_NO_PLOTS);
} else if (uuid == null) { } else if (uuid == null) {

View File

@ -47,6 +47,7 @@ import com.plotsquared.core.plot.world.SinglePlotArea;
import com.plotsquared.core.plot.world.SinglePlotAreaManager; import com.plotsquared.core.plot.world.SinglePlotAreaManager;
import com.plotsquared.core.util.EconHandler; import com.plotsquared.core.util.EconHandler;
import com.plotsquared.core.util.Permissions; import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.query.PlotQuery;
import com.plotsquared.core.util.task.RunnableVal; import com.plotsquared.core.util.task.RunnableVal;
import com.plotsquared.core.util.task.TaskManager; import com.plotsquared.core.util.task.TaskManager;
import com.sk89q.worldedit.extension.platform.Actor; import com.sk89q.worldedit.extension.platform.Actor;
@ -67,7 +68,6 @@ import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/** /**
* The abstract class supporting {@code BukkitPlayer} and {@code SpongePlayer}. * The abstract class supporting {@code BukkitPlayer} and {@code SpongePlayer}.
@ -270,7 +270,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer
} }
final AtomicInteger count = new AtomicInteger(0); final AtomicInteger count = new AtomicInteger(0);
final UUID uuid = getUUID(); final UUID uuid = getUUID();
PlotSquared.get().forEachPlotArea(value -> { PlotSquared.get().getPlotAreaManager().forEachPlotArea(value -> {
if (!Settings.Done.COUNTS_TOWARDS_LIMIT) { if (!Settings.Done.COUNTS_TOWARDS_LIMIT) {
for (Plot plot : value.getPlotsAbs(uuid)) { for (Plot plot : value.getPlotsAbs(uuid)) {
if (!DoneFlag.isDone(plot)) { if (!DoneFlag.isDone(plot)) {
@ -289,7 +289,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer
return getClusterCount(getLocation().getWorld()); return getClusterCount(getLocation().getWorld());
} }
final AtomicInteger count = new AtomicInteger(0); final AtomicInteger count = new AtomicInteger(0);
PlotSquared.get().forEachPlotArea(value -> { PlotSquared.get().getPlotAreaManager().forEachPlotArea(value -> {
for (PlotCluster cluster : value.getClusters()) { for (PlotCluster cluster : value.getClusters()) {
if (cluster.isOwner(getUUID())) { if (cluster.isOwner(getUUID())) {
count.incrementAndGet(); count.incrementAndGet();
@ -340,7 +340,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer
* @see #getPlotCount() for the number of plots * @see #getPlotCount() for the number of plots
*/ */
public Set<Plot> getPlots() { public Set<Plot> getPlots() {
return PlotSquared.get().getPlots(this); return PlotQuery.newQuery().ownedBy(this).asSet();
} }
/** /**
@ -614,7 +614,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer
*/ */
public int getPlayerClusterCount() { public int getPlayerClusterCount() {
final AtomicInteger count = new AtomicInteger(); final AtomicInteger count = new AtomicInteger();
PlotSquared.get().forEachPlotArea(value -> count.addAndGet(value.getClusters().size())); PlotSquared.get().getPlotAreaManager().forEachPlotArea(value -> count.addAndGet(value.getClusters().size()));
return count.get(); return count.get();
} }
@ -625,9 +625,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer
* @return a {@code Set} of plots this player owns in the provided world * @return a {@code Set} of plots this player owns in the provided world
*/ */
public Set<Plot> getPlots(String world) { public Set<Plot> getPlots(String world) {
UUID uuid = getUUID(); return PlotQuery.newQuery().inWorld(world).ownedBy(getUUID()).asSet();
return PlotSquared.get().getPlots(world).stream().filter(plot -> plot.isOwner(uuid))
.collect(Collectors.toCollection(HashSet::new));
} }
public void populatePersistentMetaMap() { public void populatePersistentMetaMap() {

View File

@ -44,6 +44,7 @@ import com.plotsquared.core.plot.flag.implementations.KeepFlag;
import com.plotsquared.core.plot.message.PlotMessage; import com.plotsquared.core.plot.message.PlotMessage;
import com.plotsquared.core.util.MainUtil; import com.plotsquared.core.util.MainUtil;
import com.plotsquared.core.util.StringMan; import com.plotsquared.core.util.StringMan;
import com.plotsquared.core.util.query.PlotQuery;
import com.plotsquared.core.util.task.RunnableVal; import com.plotsquared.core.util.task.RunnableVal;
import com.plotsquared.core.util.task.RunnableVal3; import com.plotsquared.core.util.task.RunnableVal3;
import com.plotsquared.core.util.task.TaskManager; import com.plotsquared.core.util.task.TaskManager;
@ -295,7 +296,7 @@ public class ExpireManager {
} }
this.running = 2; this.running = 2;
final ConcurrentLinkedDeque<Plot> plots = final ConcurrentLinkedDeque<Plot> plots =
new ConcurrentLinkedDeque<>(PlotSquared.get().getPlots()); new ConcurrentLinkedDeque<>(PlotQuery.newQuery().allPlots().asList());
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(new Runnable() {
@Override public void run() { @Override public void run() {
final Runnable task = this; final Runnable task = this;

View File

@ -29,10 +29,12 @@ import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.configuration.Settings; import com.plotsquared.core.configuration.Settings;
import com.plotsquared.core.plot.Plot; import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.PlotFilter; import com.plotsquared.core.util.query.PlotQuery;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -119,11 +121,13 @@ public class ExpiryTask {
} }
public Set<Plot> getPlotsToCheck() { public Set<Plot> getPlotsToCheck() {
return PlotSquared.get().getPlots(new PlotFilter() { final Collection<PlotArea> areas = new LinkedList<>();
@Override public boolean allowsArea(PlotArea area) { for (final PlotArea plotArea : PlotSquared.get().getPlotAreaManager().getAllPlotAreas()) {
return ExpiryTask.this.allowsArea(area); if (this.allowsArea(plotArea)) {
areas.add(plotArea);
} }
}); }
return PlotQuery.newQuery().inAreas(areas).asSet();
} }
public boolean applies(long diff) { public boolean applies(long diff) {

View File

@ -31,6 +31,7 @@ import com.plotsquared.core.generator.HybridUtils;
import com.plotsquared.core.plot.Plot; import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.flag.implementations.AnalysisFlag; import com.plotsquared.core.plot.flag.implementations.AnalysisFlag;
import com.plotsquared.core.util.MathMan; import com.plotsquared.core.util.MathMan;
import com.plotsquared.core.util.query.PlotQuery;
import com.plotsquared.core.util.task.RunnableVal; import com.plotsquared.core.util.task.RunnableVal;
import com.plotsquared.core.util.task.TaskManager; import com.plotsquared.core.util.task.TaskManager;
@ -101,7 +102,7 @@ public class PlotAnalysis {
} }
running = true; running = true;
PlotSquared.debug(" - Fetching all plots"); PlotSquared.debug(" - Fetching all plots");
final ArrayList<Plot> plots = new ArrayList<>(PlotSquared.get().getPlots()); final List<Plot> plots = PlotQuery.newQuery().allPlots().asList();
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(new Runnable() {
@Override public void run() { @Override public void run() {
Iterator<Plot> iterator = plots.iterator(); Iterator<Plot> iterator = plots.iterator();

View File

@ -27,14 +27,17 @@ package com.plotsquared.core.plot.world;
import com.plotsquared.core.location.Location; import com.plotsquared.core.location.Location;
import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.PlotAreaType;
import com.plotsquared.core.util.StringMan; import com.plotsquared.core.util.StringMan;
import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.CuboidRegion;
import lombok.NonNull;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.function.Consumer;
public interface PlotAreaManager { public interface PlotAreaManager {
@ -200,4 +203,26 @@ public interface PlotAreaManager {
return this.getPlotAreas(world, null).length != 0; return this.getPlotAreas(world, null).length != 0;
} }
/**
* Check if a given world is an augmented plot world
*
* @param world World name
* @return {@code true} if the world is augmented plot world, {@code false} if not
*/
default boolean isAugmented(@NonNull final String world) {
final PlotArea[] areas = this.getPlotAreas(world, null);
return areas != null && (areas.length > 1 || areas[0].getType() != PlotAreaType.NORMAL);
}
/**
* Perform an action on each recognized plot area
*
* @param action Action to perform
*/
default void forEachPlotArea(@NotNull final Consumer<? super PlotArea> action) {
for (final PlotArea area : this.getAllPlotAreas()) {
action.accept(area);
}
}
} }

View File

@ -52,7 +52,7 @@ public abstract class ChunkManager {
public static void setChunkInPlotArea(RunnableVal<ScopedLocalBlockQueue> force, public static void setChunkInPlotArea(RunnableVal<ScopedLocalBlockQueue> force,
RunnableVal<ScopedLocalBlockQueue> add, String world, BlockVector2 loc) { RunnableVal<ScopedLocalBlockQueue> add, String world, BlockVector2 loc) {
LocalBlockQueue queue = GlobalBlockQueue.IMP.getNewQueue(world, false); LocalBlockQueue queue = GlobalBlockQueue.IMP.getNewQueue(world, false);
if (PlotSquared.get().isAugmented(world) && PlotSquared.get().isNonStandardGeneration(world, loc)) { if (PlotSquared.get().getPlotAreaManager().isAugmented(world) && PlotSquared.get().isNonStandardGeneration(world, loc)) {
int blockX = loc.getX() << 4; int blockX = loc.getX() << 4;
int blockZ = loc.getZ() << 4; int blockZ = loc.getZ() << 4;
ScopedLocalBlockQueue scoped = ScopedLocalBlockQueue scoped =

View File

@ -47,6 +47,7 @@ import com.plotsquared.core.plot.flag.implementations.DescriptionFlag;
import com.plotsquared.core.plot.flag.implementations.ServerPlotFlag; import com.plotsquared.core.plot.flag.implementations.ServerPlotFlag;
import com.plotsquared.core.plot.flag.types.DoubleFlag; import com.plotsquared.core.plot.flag.types.DoubleFlag;
import com.plotsquared.core.util.net.AbstractDelegateOutputStream; import com.plotsquared.core.util.net.AbstractDelegateOutputStream;
import com.plotsquared.core.util.query.PlotQuery;
import com.plotsquared.core.util.task.RunnableVal; import com.plotsquared.core.util.task.RunnableVal;
import com.plotsquared.core.util.task.TaskManager; import com.plotsquared.core.util.task.TaskManager;
import com.plotsquared.core.uuid.UUIDMapping; import com.plotsquared.core.uuid.UUIDMapping;
@ -472,7 +473,7 @@ public class MainUtil {
PlotArea area = null; PlotArea area = null;
String alias = null; String alias = null;
for (Plot plot : PlotSquared.get().getPlots()) { for (Plot plot : PlotQuery.newQuery().allPlots().asList()) {
int count = 0; int count = 0;
if (!uuids.isEmpty()) { if (!uuids.isEmpty()) {
for (UUID uuid : uuids) { for (UUID uuid : uuids) {
@ -516,7 +517,7 @@ public class MainUtil {
* @param message If a message should be sent to the player if a plot cannot be found * @param message If a message should be sent to the player if a plot cannot be found
* @return The plot if only 1 result is found, or null * @return The plot if only 1 result is found, or null
*/ */
@Nullable public static Plot getPlotFromString(PlotPlayer player, String arg, boolean message) { @Nullable public static Plot getPlotFromString(PlotPlayer<?> player, String arg, boolean message) {
if (arg == null) { if (arg == null) {
if (player == null) { if (player == null) {
if (message) { if (message) {
@ -548,7 +549,7 @@ public class MainUtil {
} else { } else {
Collection<Plot> plots; Collection<Plot> plots;
if (area == null) { if (area == null) {
plots = PlotSquared.get().getPlots(); plots = PlotQuery.newQuery().allPlots().asList();
} else { } else {
plots = area.getPlots(); plots = area.getPlots();
} }

View File

@ -173,7 +173,7 @@ public class TabCompletions {
*/ */
@NotNull public List<Command> completeAreas(@NotNull final String input) { @NotNull public List<Command> completeAreas(@NotNull final String input) {
final List<Command> completions = new ArrayList<>(); final List<Command> completions = new ArrayList<>();
for (final PlotArea area : PlotSquared.get().getPlotAreas()) { for (final PlotArea area : PlotSquared.get().getPlotAreaManager().getAllPlotAreas()) {
String areaName = area.getWorldName(); String areaName = area.getWorldName();
if (area.getId() != null) { if (area.getId() != null) {
areaName += ";" + area.getId(); areaName += ";" + area.getId();

View File

@ -27,13 +27,20 @@ package com.plotsquared.core.util.query;
import com.plotsquared.core.PlotSquared; import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.plot.Plot; import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
class GlobalPlotProvider implements PlotProvider { class GlobalPlotProvider implements PlotProvider {
@Override public Collection<Plot> getPlots() { @Override public Collection<Plot> getPlots() {
return PlotSquared.get().getPlots(); final Set<Plot> plots = new HashSet<>();
for (final PlotArea plotArea : PlotSquared.get().getPlotAreaManager().getAllPlotAreas()) {
plots.addAll(plotArea.getPlots());
}
return plots;
} }
} }

View File

@ -45,6 +45,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.function.Consumer;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.stream.Stream; import java.util.stream.Stream;
@ -376,6 +377,25 @@ public final class PlotQuery {
return this.asList(); return this.asList();
} }
/**
* Perform an action on each plot returned by the query
*
* @param consumer Plot consumer
*/
public void forEach(@NotNull final Consumer<Plot> consumer) {
Preconditions.checkNotNull(consumer, "Consumer may not be null");
this.asCollection().forEach(consumer);
}
/**
* Get the amount of plots contained in the query result
*
* @return Result count
*/
public int count() {
return this.asList().size();
}
/** /**
* Get whether any provided plot matches the given filters. * Get whether any provided plot matches the given filters.
* If no plot was provided, false will be returned. * If no plot was provided, false will be returned.