Fix merging

This commit is contained in:
NotMyFault 2019-09-08 20:02:45 +02:00
parent fe730574c9
commit 04f789d404
89 changed files with 854 additions and 823 deletions

View File

@ -3,15 +3,13 @@ __*NOTICE: Bukkit/Spigot versions 1.7.10 to 1.12.2 are considered legacy and wil
<!--- In order to create a valid issue report you have to follow this template. --> <!--- In order to create a valid issue report you have to follow this template. -->
<!--- Incomplete reports might be marked as invalid. --> <!--- Incomplete reports might be marked as invalid. -->
<!-- Feature requests and enhancements may be suggested at https://github.com/IntellectualSites/PlotSquaredSuggestions. --> <!-- Feature requests and enhancements may be suggested at https://github.com/IntellectualSites/PlotSquaredSuggestions. -->
**[REQUIRED] PlotSquared Version Number:** <!--- Enter /plot version in game or in your console and copy the output here --> **Debug paste link:**
<!--- Enter /plot debugpaste in game or in your console and copy the output here -->
**[REQUIRED] Spigot/Paper Version Number:** **[REQUIRED] Spigot/Paper Version Number:**
**[REQUIRED] Minecraft Version Number:** **[REQUIRED] Minecraft Version Number:**
**Links to worlds.yml file and settings.yml file:**
<!--- Copy and paste the information to the service of your choosing and provide the link here. -->
**[REQUIRED] Description of the problem:** **[REQUIRED] Description of the problem:**
**Any relevant console output or screenshots:** **Any relevant console output or screenshots:**

View File

@ -54,8 +54,8 @@ import org.bukkit.metadata.MetadataValue;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.annotation.Nullable;
import java.io.File; import java.io.File;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.ArrayList; import java.util.ArrayList;
@ -132,8 +132,8 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain
// Check for updates // Check for updates
if (PlotSquared.get().getUpdateUtility() != null) { if (PlotSquared.get().getUpdateUtility() != null) {
final UpdateUtility updateUtility = PlotSquared.get().getUpdateUtility(); final UpdateUtility updateUtility = PlotSquared.get().getUpdateUtility();
updateUtility updateUtility.checkForUpdate(PlotSquared.get().getVersion().versionString(),
.checkForUpdate(this.getPluginVersionString(), ((updateDescription, throwable) -> { ((updateDescription, throwable) -> {
Bukkit.getScheduler().runTask(BukkitMain.this, () -> { Bukkit.getScheduler().runTask(BukkitMain.this, () -> {
getLogger().info("-------- PlotSquared Update Check --------"); getLogger().info("-------- PlotSquared Update Check --------");
if (throwable != null) { if (throwable != null) {
@ -289,10 +289,12 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain
@Override public void registerCommands() { @Override public void registerCommands() {
final BukkitCommand bukkitCommand = new BukkitCommand(); final BukkitCommand bukkitCommand = new BukkitCommand();
final PluginCommand plotCommand = getCommand("plots"); final PluginCommand plotCommand = getCommand("plots");
if (plotCommand != null) {
plotCommand.setExecutor(bukkitCommand); plotCommand.setExecutor(bukkitCommand);
plotCommand.setAliases(Arrays.asList("p", "ps", "plotme", "plot")); plotCommand.setAliases(Arrays.asList("p", "ps", "plotme", "plot"));
plotCommand.setTabCompleter(bukkitCommand); plotCommand.setTabCompleter(bukkitCommand);
} }
}
@Override public File getDirectory() { @Override public File getDirectory() {
return getDataFolder(); return getDataFolder();
@ -598,14 +600,15 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain
} }
@Override public QueueProvider initBlockQueue() { @Override public QueueProvider initBlockQueue() {
try { //TODO Figure out why this code is still here yet isn't being called anywhere.
new SendChunk(); // try {
MainUtil.canSendChunk = true; // new SendChunk();
} catch (ClassNotFoundException | NoSuchFieldException | NoSuchMethodException e) { // MainUtil.canSendChunk = true;
PlotSquared.debug( // } catch (ClassNotFoundException | NoSuchFieldException | NoSuchMethodException e) {
SendChunk.class + " does not support " + StringMan.getString(getServerVersion())); // PlotSquared.debug(
MainUtil.canSendChunk = false; // SendChunk.class + " does not support " + StringMan.getString(getServerVersion()));
} // MainUtil.canSendChunk = false;
// }
return QueueProvider.of(BukkitLocalQueue.class, BukkitLocalQueue.class); return QueueProvider.of(BukkitLocalQueue.class, BukkitLocalQueue.class);
} }
@ -800,4 +803,5 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain
@Override public LegacyMappings getLegacyMappings() { @Override public LegacyMappings getLegacyMappings() {
return this.legacyMappings; return this.legacyMappings;
} }
} }

View File

@ -7,8 +7,8 @@ import lombok.Setter;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nonnull;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -30,8 +30,8 @@ public final class PlotAutoMergeEvent extends PlotEvent implements Cancellable {
* @param plot Plot that was merged * @param plot Plot that was merged
* @param plots A list of plots involved in the event * @param plots A list of plots involved in the event
*/ */
public PlotAutoMergeEvent(@Nonnull final World world, @Nonnull final Plot plot, public PlotAutoMergeEvent(@NotNull final World world, @NotNull final Plot plot,
@Nonnull final List<PlotId> plots) { @NotNull final List<PlotId> plots) {
super(plot); super(plot);
this.world = world; this.world = world;
this.plots = plots; this.plots = plots;

View File

@ -6,8 +6,7 @@ import lombok.Setter;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nonnull;
/** /**
* Event called when several plots are merged * Event called when several plots are merged
@ -29,8 +28,8 @@ public final class PlotMergeEvent extends PlotEvent implements Cancellable {
* @param dir The direction of the merge * @param dir The direction of the merge
* @param max Max merge size * @param max Max merge size
*/ */
public PlotMergeEvent(@Nonnull final World world, @Nonnull final Plot plot, public PlotMergeEvent(@NotNull final World world, @NotNull final Plot plot,
@Nonnull final int dir, @Nonnull final int max) { @NotNull final int dir, @NotNull final int max) {
super(plot); super(plot);
this.world = world; this.world = world;
this.dir = dir; this.dir = dir;

View File

@ -8,8 +8,8 @@ import org.bukkit.World;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nonnull;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -31,8 +31,8 @@ public final class PlotUnlinkEvent extends Event implements Cancellable {
* @param world World in which the event occurred * @param world World in which the event occurred
* @param plots Plots that are involved in the event * @param plots Plots that are involved in the event
*/ */
public PlotUnlinkEvent(@Nonnull final World world, @Nonnull final PlotArea area, public PlotUnlinkEvent(@NotNull final World world, @NotNull final PlotArea area,
@Nonnull final List<PlotId> plots) { @NotNull final List<PlotId> plots) {
this.plots = plots; this.plots = plots;
this.world = world; this.world = world;
this.area = area; this.area = area;

View File

@ -85,10 +85,10 @@ import java.util.regex.Pattern;
int distance = Bukkit.getViewDistance() * 16; int distance = Bukkit.getViewDistance() * 16;
for (Entry<String, PlotPlayer> entry : UUIDHandler.getPlayers().entrySet()) { for (Entry<String, PlotPlayer> entry : UUIDHandler.getPlayers().entrySet()) {
PlotPlayer player = entry.getValue(); PlotPlayer player = entry.getValue();
Location loc = player.getLocation(); Location location = player.getLocation();
if (loc.getWorld().equals(world)) { if (location.getWorld().equals(world)) {
if (16 * Math.abs(loc.getX() - x) / 16 > distance if (16 * Math.abs(location.getX() - x) / 16 > distance
|| 16 * Math.abs(loc.getZ() - z) / 16 > distance) { || 16 * Math.abs(location.getZ() - z) / 16 > distance) {
continue; continue;
} }
((BukkitPlayer) player).player.sendBlockChange(bloc, data); ((BukkitPlayer) player).player.sendBlockChange(bloc, data);
@ -314,12 +314,12 @@ import java.util.regex.Pattern;
case POWERED_RAIL: case POWERED_RAIL:
return; return;
default:*/ default:*/
Location loc = BukkitUtil.getLocation(block.getLocation()); Location location = BukkitUtil.getLocation(block.getLocation());
PlotArea area = loc.getPlotArea(); PlotArea area = location.getPlotArea();
if (area == null) { if (area == null) {
return; return;
} }
Plot plot = loc.getOwnedPlot(); Plot plot = location.getOwnedPlot();
if (plot == null) { if (plot == null) {
return; return;
} }
@ -369,12 +369,11 @@ import java.util.regex.Pattern;
switch (event.getChangedType()) { switch (event.getChangedType()) {
case COMPARATOR: { case COMPARATOR: {
Block block = event.getBlock(); Block block = event.getBlock();
Location loc = BukkitUtil.getLocation(block.getLocation()); Location location = BukkitUtil.getLocation(block.getLocation());
PlotArea area = loc.getPlotArea(); if (location.isPlotArea()) {
if (area == null) {
return; return;
} }
Plot plot = area.getOwnedPlotAbs(loc); Plot plot = location.getOwnedPlotAbs();
if (plot == null) { if (plot == null) {
return; return;
} }
@ -391,12 +390,12 @@ import java.util.regex.Pattern;
case TURTLE_HELMET: case TURTLE_HELMET:
case TURTLE_SPAWN_EGG: { case TURTLE_SPAWN_EGG: {
Block block = event.getBlock(); Block block = event.getBlock();
Location loc = BukkitUtil.getLocation(block.getLocation()); Location location = BukkitUtil.getLocation(block.getLocation());
PlotArea area = loc.getPlotArea(); PlotArea area = location.getPlotArea();
if (area == null) { if (area == null) {
return; return;
} }
Plot plot = area.getOwnedPlotAbs(loc); Plot plot = area.getOwnedPlotAbs(location);
if (plot == null) { if (plot == null) {
return; return;
} }
@ -413,30 +412,30 @@ import java.util.regex.Pattern;
case STICKY_PISTON: case STICKY_PISTON:
org.bukkit.block.data.Directional piston = org.bukkit.block.data.Directional piston =
(org.bukkit.block.data.Directional) block.getBlockData(); (org.bukkit.block.data.Directional) block.getBlockData();
Location loc = BukkitUtil.getLocation(block.getLocation()); Location location = BukkitUtil.getLocation(block.getLocation());
PlotArea area = loc.getPlotArea(); PlotArea area = location.getPlotArea();
if (area == null) { if (area == null) {
return; return;
} }
Plot plot = area.getOwnedPlotAbs(loc); Plot plot = area.getOwnedPlotAbs(location);
if (plot == null) { if (plot == null) {
return; return;
} }
switch (piston.getFacing()) { switch (piston.getFacing()) {
case EAST: case EAST:
loc.setX(loc.getX() + 1); location.setX(location.getX() + 1);
break; break;
case SOUTH: case SOUTH:
loc.setX(loc.getX() - 1); location.setX(location.getX() - 1);
break; break;
case WEST: case WEST:
loc.setZ(loc.getZ() + 1); location.setZ(location.getZ() + 1);
break; break;
case NORTH: case NORTH:
loc.setZ(loc.getZ() - 1); location.setZ(location.getZ() - 1);
break; break;
} }
Plot newPlot = area.getOwnedPlotAbs(loc); Plot newPlot = area.getOwnedPlotAbs(location);
if (!plot.equals(newPlot)) { if (!plot.equals(newPlot)) {
event.setCancelled(true); event.setCancelled(true);
return; return;
@ -470,15 +469,15 @@ import java.util.regex.Pattern;
@EventHandler public boolean onProjectileHit(ProjectileHitEvent event) { @EventHandler public boolean onProjectileHit(ProjectileHitEvent event) {
Projectile entity = event.getEntity(); Projectile entity = event.getEntity();
Location loc = BukkitUtil.getLocation(entity); Location location = BukkitUtil.getLocation(entity);
if (!PlotSquared.get().hasPlotArea(loc.getWorld())) { if (!PlotSquared.get().hasPlotArea(location.getWorld())) {
return true; return true;
} }
PlotArea area = loc.getPlotArea(); PlotArea area = location.getPlotArea();
if (area == null) { if (area == null) {
return true; return true;
} }
Plot plot = area.getPlot(loc); Plot plot = area.getPlot(location);
ProjectileSource shooter = entity.getShooter(); ProjectileSource shooter = entity.getShooter();
if (shooter instanceof Player) { if (shooter instanceof Player) {
PlotPlayer pp = BukkitUtil.getPlayer((Player) shooter); PlotPlayer pp = BukkitUtil.getPlayer((Player) shooter);
@ -523,22 +522,22 @@ import java.util.regex.Pattern;
return; return;
} }
Player player = event.getPlayer(); Player player = event.getPlayer();
PlotPlayer pp = BukkitUtil.getPlayer(player); PlotPlayer plotPlayer = BukkitUtil.getPlayer(player);
Location loc = pp.getLocation(); Location location = plotPlayer.getLocation();
PlotArea area = loc.getPlotArea(); PlotArea area = location.getPlotArea();
if (area == null) { if (area == null) {
return; return;
} }
String[] parts = msg.split(" "); String[] parts = msg.split(" ");
Plot plot = pp.getCurrentPlot(); Plot plot = plotPlayer.getCurrentPlot();
// Check WorldEdit // Check WorldEdit
switch (parts[0].toLowerCase()) { switch (parts[0].toLowerCase()) {
case "up": case "up":
case "/up": case "/up":
case "worldedit:up": case "worldedit:up":
case "worldedit:/up": case "worldedit:/up":
if (plot == null || (!plot.isAdded(pp.getUUID()) && !Permissions if (plot == null || (!plot.isAdded(plotPlayer.getUUID()) && !Permissions
.hasPermission(pp, Captions.PERMISSION_ADMIN_BUILD_OTHER, true))) { .hasPermission(plotPlayer, Captions.PERMISSION_ADMIN_BUILD_OTHER, true))) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@ -548,7 +547,7 @@ import java.util.regex.Pattern;
} }
Optional<List<String>> flag = plot.getFlag(Flags.BLOCKED_CMDS); Optional<List<String>> flag = plot.getFlag(Flags.BLOCKED_CMDS);
if (flag.isPresent() && !Permissions if (flag.isPresent() && !Permissions
.hasPermission(pp, Captions.PERMISSION_ADMIN_INTERACT_BLOCKED_CMDS)) { .hasPermission(plotPlayer, Captions.PERMISSION_ADMIN_INTERACT_BLOCKED_CMDS)) {
List<String> blocked_cmds = flag.get(); List<String> blocked_cmds = flag.get();
String part = parts[0]; String part = parts[0];
if (parts[0].contains(":")) { if (parts[0].contains(":")) {
@ -592,13 +591,13 @@ import java.util.regex.Pattern;
} }
if (pattern.matcher(msg).matches()) { if (pattern.matcher(msg).matches()) {
String perm; String perm;
if (plot.isAdded(pp.getUUID())) { if (plot.isAdded(plotPlayer.getUUID())) {
perm = "plots.admin.command.blocked-cmds.shared"; perm = "plots.admin.command.blocked-cmds.shared";
} else { } else {
perm = "plots.admin.command.blocked-cmds.other"; perm = "plots.admin.command.blocked-cmds.other";
} }
if (!Permissions.hasPermission(pp, perm)) { if (!Permissions.hasPermission(plotPlayer, perm)) {
MainUtil.sendMessage(pp, Captions.COMMAND_BLOCKED); MainUtil.sendMessage(plotPlayer, Captions.COMMAND_BLOCKED);
event.setCancelled(true); event.setCancelled(true);
} }
return; return;
@ -619,10 +618,10 @@ import java.util.regex.Pattern;
UUID uuid = pp.getUUID(); UUID uuid = pp.getUUID();
UUIDHandler.add(sw, uuid); UUIDHandler.add(sw, uuid);
Location loc = pp.getLocation(); Location location = pp.getLocation();
PlotArea area = loc.getPlotArea(); PlotArea area = location.getPlotArea();
if (area != null) { if (area != null) {
Plot plot = area.getPlot(loc); Plot plot = area.getPlot(location);
if (plot != null) { if (plot != null) {
plotEntry(pp, plot); plotEntry(pp, plot);
} }
@ -641,7 +640,7 @@ import java.util.regex.Pattern;
&& PlotSquared.get().getUpdateUtility() != null) { && PlotSquared.get().getUpdateUtility() != null) {
final UpdateUtility updateUtility = PlotSquared.get().getUpdateUtility(); final UpdateUtility updateUtility = PlotSquared.get().getUpdateUtility();
final BukkitMain bukkitMain = BukkitMain.getPlugin(BukkitMain.class); final BukkitMain bukkitMain = BukkitMain.getPlugin(BukkitMain.class);
updateUtility.checkForUpdate(bukkitMain.getPluginVersionString(), updateUtility.checkForUpdate(PlotSquared.get().getVersion().versionString(),
((updateDescription, throwable) -> { ((updateDescription, throwable) -> {
if (throwable != null) { if (throwable != null) {
bukkitMain.getLogger().severe(String bukkitMain.getLogger().severe(String
@ -688,27 +687,27 @@ import java.util.regex.Pattern;
org.bukkit.Location to = event.getTo(); org.bukkit.Location to = event.getTo();
if (to != null) { if (to != null) {
Player player = event.getPlayer(); Player player = event.getPlayer();
PlotPlayer pp = PlotPlayer.wrap(player); PlotPlayer plotPlayer = PlotPlayer.wrap(player);
Location loc = BukkitUtil.getLocation(to); Location location = BukkitUtil.getLocation(to);
PlotArea area = loc.getPlotArea(); PlotArea area = location.getPlotArea();
if (area == null) { if (area == null) {
return; return;
} }
Plot plot = area.getPlot(loc); Plot plot = area.getPlot(location);
if (plot != null) { if (plot != null) {
final boolean result = Flags.DENY_TELEPORT.allowsTeleport(pp, plot); final boolean result = Flags.DENY_TELEPORT.allowsTeleport(plotPlayer, plot);
if (!result) { if (!result) {
MainUtil.sendMessage(pp, Captions.NO_PERMISSION_EVENT, MainUtil.sendMessage(plotPlayer, Captions.NO_PERMISSION_EVENT,
Captions.PERMISSION_ADMIN_ENTRY_DENIED); Captions.PERMISSION_ADMIN_ENTRY_DENIED);
event.setCancelled(true); event.setCancelled(true);
if (lastLoc != null) { if (lastLoc != null) {
pp.setMeta(PlotPlayer.META_LOCATION, lastLoc); plotPlayer.setMeta(PlotPlayer.META_LOCATION, lastLoc);
} }
if (lastPlot != null) { if (lastPlot != null) {
pp.setMeta(PlotPlayer.META_LAST_PLOT, lastPlot); plotPlayer.setMeta(PlotPlayer.META_LAST_PLOT, lastPlot);
} }
} else { } else {
plotEntry(pp, plot); plotEntry(plotPlayer, plot);
} }
} }
} }
@ -809,14 +808,14 @@ import java.util.regex.Pattern;
// Cancel teleport // Cancel teleport
TaskManager.TELEPORT_QUEUE.remove(pp.getName()); TaskManager.TELEPORT_QUEUE.remove(pp.getName());
// Set last location // Set last location
Location loc = BukkitUtil.getLocation(to); Location location = BukkitUtil.getLocation(to);
pp.setMeta(PlotPlayer.META_LOCATION, loc); pp.setMeta(PlotPlayer.META_LOCATION, location);
PlotArea area = loc.getPlotArea(); PlotArea area = location.getPlotArea();
if (area == null) { if (area == null) {
pp.deleteMeta(PlotPlayer.META_LAST_PLOT); pp.deleteMeta(PlotPlayer.META_LAST_PLOT);
return; return;
} }
Plot now = area.getPlot(loc); Plot now = area.getPlot(location);
Plot lastPlot = pp.getMeta(PlotPlayer.META_LAST_PLOT); Plot lastPlot = pp.getMeta(PlotPlayer.META_LAST_PLOT);
if (now == null) { if (now == null) {
if (lastPlot != null && !plotExit(pp, lastPlot) && this.tmpTeleport && !pp if (lastPlot != null && !plotExit(pp, lastPlot) && this.tmpTeleport && !pp
@ -869,14 +868,14 @@ import java.util.regex.Pattern;
// Cancel teleport // Cancel teleport
TaskManager.TELEPORT_QUEUE.remove(pp.getName()); TaskManager.TELEPORT_QUEUE.remove(pp.getName());
// Set last location // Set last location
Location loc = BukkitUtil.getLocation(to); Location location = BukkitUtil.getLocation(to);
pp.setMeta(PlotPlayer.META_LOCATION, loc); pp.setMeta(PlotPlayer.META_LOCATION, location);
PlotArea area = loc.getPlotArea(); PlotArea area = location.getPlotArea();
if (area == null) { if (area == null) {
pp.deleteMeta(PlotPlayer.META_LAST_PLOT); pp.deleteMeta(PlotPlayer.META_LAST_PLOT);
return; return;
} }
Plot now = area.getPlot(loc); Plot now = area.getPlot(location);
Plot lastPlot = pp.getMeta(PlotPlayer.META_LAST_PLOT); Plot lastPlot = pp.getMeta(PlotPlayer.META_LAST_PLOT);
if (now == null) { if (now == null) {
if (lastPlot != null && !plotExit(pp, lastPlot) && this.tmpTeleport && !pp if (lastPlot != null && !plotExit(pp, lastPlot) && this.tmpTeleport && !pp
@ -1123,10 +1122,10 @@ import java.util.regex.Pattern;
if (Settings.Enabled_Components.PERMISSION_CACHE) { if (Settings.Enabled_Components.PERMISSION_CACHE) {
pp.deleteMeta("perm"); pp.deleteMeta("perm");
} }
Location loc = pp.getLocation(); Location location = pp.getLocation();
PlotArea area = loc.getPlotArea(); PlotArea area = location.getPlotArea();
if (loc.isPlotArea()) { if (location.isPlotArea()) {
plot = loc.getPlot(); plot = location.getPlot();
if (plot != null) { if (plot != null) {
plotEntry(pp, plot); plotEntry(pp, plot);
} }
@ -2269,17 +2268,17 @@ import java.util.regex.Pattern;
Entity ignitingEntity = event.getIgnitingEntity(); Entity ignitingEntity = event.getIgnitingEntity();
Block block = event.getBlock(); Block block = event.getBlock();
BlockIgniteEvent.IgniteCause igniteCause = event.getCause(); BlockIgniteEvent.IgniteCause igniteCause = event.getCause();
Location loc; Location location1;
if (block != null) { if (block != null) {
loc = BukkitUtil.getLocation(block.getLocation()); location1 = BukkitUtil.getLocation(block.getLocation());
} else if (ignitingEntity != null) { } else if (ignitingEntity != null) {
loc = BukkitUtil.getLocation(ignitingEntity); location1 = BukkitUtil.getLocation(ignitingEntity);
} else if (player != null) { } else if (player != null) {
loc = BukkitUtil.getLocation(player); location1 = BukkitUtil.getLocation(player);
} else { } else {
return; return;
} }
PlotArea area = loc.getPlotArea(); PlotArea area = location1.getPlotArea();
if (area == null) { if (area == null) {
return; return;
} }
@ -2288,7 +2287,7 @@ import java.util.regex.Pattern;
return; return;
} }
Plot plot = area.getOwnedPlotAbs(loc); Plot plot = area.getOwnedPlotAbs(location1);
if (player != null) { if (player != null) {
PlotPlayer pp = BukkitUtil.getPlayer(player); PlotPlayer pp = BukkitUtil.getPlayer(player);
if (plot == null) { if (plot == null) {

View File

@ -30,8 +30,8 @@ import static com.github.intellectualsites.plotsquared.plot.util.ReflectionUtils
this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle").getRealMethod(); this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle").getRealMethod();
try { try {
this.mustSave = classChunk.getField("mustSave").getRealField(); this.mustSave = classChunk.getField("mustSave").getRealField();
} catch (Throwable ignore) { } catch (NoSuchFieldException e) {
ignore.printStackTrace(); e.printStackTrace();
} }
Bukkit.getPluginManager().registerEvents(this, plugin); Bukkit.getPluginManager().registerEvents(this, plugin);
} }

View File

@ -25,7 +25,6 @@ import org.bukkit.permissions.PermissionAttachmentInfo;
import org.bukkit.plugin.RegisteredListener; import org.bukkit.plugin.RegisteredListener;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import javax.annotation.Nonnull;
import java.util.Arrays; import java.util.Arrays;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
@ -56,7 +55,7 @@ public class BukkitPlayer extends PlotPlayer {
super.populatePersistentMetaMap(); super.populatePersistentMetaMap();
} }
@Override public Location getLocation() { @NotNull @Override public Location getLocation() {
final Location location = super.getLocation(); final Location location = super.getLocation();
return location == null ? BukkitUtil.getLocation(this.player) : location; return location == null ? BukkitUtil.getLocation(this.player) : location;
} }
@ -72,8 +71,8 @@ public class BukkitPlayer extends PlotPlayer {
return this.player.getLastPlayed(); return this.player.getLastPlayed();
} }
@Override public boolean canTeleport(@NotNull final Location loc) { @Override public boolean canTeleport(@NotNull final Location location) {
final org.bukkit.Location to = BukkitUtil.getLocation(loc); final org.bukkit.Location to = BukkitUtil.getLocation(location);
final org.bukkit.Location from = player.getLocation(); final org.bukkit.Location from = player.getLocation();
PlayerTeleportEvent event = new PlayerTeleportEvent(player, from, to); PlayerTeleportEvent event = new PlayerTeleportEvent(player, from, to);
callEvent(event); callEvent(event);
@ -184,7 +183,7 @@ public class BukkitPlayer extends PlotPlayer {
} }
} }
@Override public void teleport(@Nonnull final Location location) { @Override public void teleport(@NotNull final Location location) {
if (Math.abs(location.getX()) >= 30000000 || Math.abs(location.getZ()) >= 30000000) { if (Math.abs(location.getX()) >= 30000000 || Math.abs(location.getZ()) >= 30000000) {
return; return;
} }
@ -229,7 +228,7 @@ public class BukkitPlayer extends PlotPlayer {
} }
} }
@Nonnull @Override public PlotGameMode getGameMode() { @NotNull @Override public PlotGameMode getGameMode() {
switch (this.player.getGameMode()) { switch (this.player.getGameMode()) {
case ADVENTURE: case ADVENTURE:
return PlotGameMode.ADVENTURE; return PlotGameMode.ADVENTURE;

View File

@ -351,8 +351,8 @@ public class BukkitChunkManager extends ChunkManager {
int bz = min.getZ(); int bz = min.getZ();
for (int x1 = 0; x1 < 16; x1++) { for (int x1 = 0; x1 < 16; x1++) {
for (int z1 = 0; z1 < 16; z1++) { for (int z1 = 0; z1 < 16; z1++) {
PlotLoc loc = new PlotLoc(bx + x1, bz + z1); PlotLoc plotLoc = new PlotLoc(bx + x1, bz + z1);
BaseBlock[] ids = map.allBlocks.get(loc); BaseBlock[] ids = map.allBlocks.get(plotLoc);
if (ids != null) { if (ids != null) {
for (int y = 0; y < Math.min(128, ids.length); y++) { for (int y = 0; y < Math.min(128, ids.length); y++) {
BaseBlock id = ids[y]; BaseBlock id = ids[y];
@ -387,17 +387,18 @@ public class BukkitChunkManager extends ChunkManager {
return true; return true;
} }
@Override public boolean loadChunk(String world, ChunkLoc loc, boolean force) { @Override public boolean loadChunk(String world, ChunkLoc chunkLoc, boolean force) {
return BukkitUtil.getWorld(world).getChunkAt(loc.x, loc.z).load(force); return BukkitUtil.getWorld(world).getChunkAt(chunkLoc.x, chunkLoc.z).load(force);
} }
@SuppressWarnings("deprecation") @Override @Override
public void unloadChunk(final String world, final ChunkLoc loc, final boolean save, public void unloadChunk(final String world, final ChunkLoc chunkLoc, final boolean save,
final boolean safe) { final boolean safe) {
if (!PlotSquared.get().isMainThread(Thread.currentThread())) { if (!PlotSquared.get().isMainThread(Thread.currentThread())) {
TaskManager.runTask(() -> BukkitUtil.getWorld(world).unloadChunk(loc.x, loc.z, save)); TaskManager.runTask(
() -> BukkitUtil.getWorld(world).unloadChunk(chunkLoc.x, chunkLoc.z, save));
} else { } else {
BukkitUtil.getWorld(world).unloadChunk(loc.x, loc.z, save); BukkitUtil.getWorld(world).unloadChunk(chunkLoc.x, chunkLoc.z, save);
} }
} }
@ -614,9 +615,9 @@ public class BukkitChunkManager extends ChunkManager {
void saveEntitiesOut(Chunk chunk, RegionWrapper region) { void saveEntitiesOut(Chunk chunk, RegionWrapper region) {
for (Entity entity : chunk.getEntities()) { for (Entity entity : chunk.getEntities()) {
Location loc = BukkitUtil.getLocation(entity); Location location = BukkitUtil.getLocation(entity);
int x = loc.getX(); int x = location.getX();
int z = loc.getZ(); int z = location.getZ();
if (isIn(region, x, z)) { if (isIn(region, x, z)) {
continue; continue;
} }
@ -636,9 +637,9 @@ public class BukkitChunkManager extends ChunkManager {
void saveEntitiesIn(Chunk chunk, RegionWrapper region, int offsetX, int offsetZ, void saveEntitiesIn(Chunk chunk, RegionWrapper region, int offsetX, int offsetZ,
boolean delete) { boolean delete) {
for (Entity entity : chunk.getEntities()) { for (Entity entity : chunk.getEntities()) {
Location loc = BukkitUtil.getLocation(entity); Location location = BukkitUtil.getLocation(entity);
int x = loc.getX(); int x = location.getX();
int z = loc.getZ(); int z = location.getZ();
if (!isIn(region, x, z)) { if (!isIn(region, x, z)) {
continue; continue;
} }

View File

@ -1,22 +1,6 @@
package com.github.intellectualsites.plotsquared.bukkit.util; package com.github.intellectualsites.plotsquared.bukkit.util;
import com.github.intellectualsites.plotsquared.bukkit.events.PlayerClaimPlotEvent; import com.github.intellectualsites.plotsquared.bukkit.events.*;
import com.github.intellectualsites.plotsquared.bukkit.events.PlayerEnterPlotEvent;
import com.github.intellectualsites.plotsquared.bukkit.events.PlayerLeavePlotEvent;
import com.github.intellectualsites.plotsquared.bukkit.events.PlayerPlotDeniedEvent;
import com.github.intellectualsites.plotsquared.bukkit.events.PlayerPlotHelperEvent;
import com.github.intellectualsites.plotsquared.bukkit.events.PlayerPlotTrustedEvent;
import com.github.intellectualsites.plotsquared.bukkit.events.PlayerTeleportToPlotEvent;
import com.github.intellectualsites.plotsquared.bukkit.events.PlotAutoMergeEvent;
import com.github.intellectualsites.plotsquared.bukkit.events.PlotChangeOwnerEvent;
import com.github.intellectualsites.plotsquared.bukkit.events.PlotClearEvent;
import com.github.intellectualsites.plotsquared.bukkit.events.PlotComponentSetEvent;
import com.github.intellectualsites.plotsquared.bukkit.events.PlotDeleteEvent;
import com.github.intellectualsites.plotsquared.bukkit.events.PlotFlagAddEvent;
import com.github.intellectualsites.plotsquared.bukkit.events.PlotFlagRemoveEvent;
import com.github.intellectualsites.plotsquared.bukkit.events.PlotMergeEvent;
import com.github.intellectualsites.plotsquared.bukkit.events.PlotRateEvent;
import com.github.intellectualsites.plotsquared.bukkit.events.PlotUnlinkEvent;
import com.github.intellectualsites.plotsquared.bukkit.object.BukkitPlayer; import com.github.intellectualsites.plotsquared.bukkit.object.BukkitPlayer;
import com.github.intellectualsites.plotsquared.plot.flag.Flag; import com.github.intellectualsites.plotsquared.plot.flag.Flag;
import com.github.intellectualsites.plotsquared.plot.object.Location; import com.github.intellectualsites.plotsquared.plot.object.Location;
@ -30,9 +14,9 @@ import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
@ -48,7 +32,7 @@ public final class BukkitEventUtil extends EventUtil {
return null; return null;
} }
private boolean callEvent(@Nonnull final Event event) { private boolean callEvent(@NotNull final Event event) {
Bukkit.getServer().getPluginManager().callEvent(event); Bukkit.getServer().getPluginManager().callEvent(event);
return !(event instanceof Cancellable) || !((Cancellable) event).isCancelled(); return !(event instanceof Cancellable) || !((Cancellable) event).isCancelled();
} }
@ -82,11 +66,13 @@ public final class BukkitEventUtil extends EventUtil {
} }
@Override public boolean callMerge(Plot plot, int dir, int max) { @Override public boolean callMerge(Plot plot, int dir, int max) {
return callEvent(new PlotMergeEvent(BukkitUtil.getWorld(plot.getWorldName()), plot, dir, max)); return callEvent(
new PlotMergeEvent(BukkitUtil.getWorld(plot.getWorldName()), plot, dir, max));
} }
@Override public boolean callAutoMerge(Plot plot, List<PlotId> plots) { @Override public boolean callAutoMerge(Plot plot, List<PlotId> plots) {
return callEvent(new PlotAutoMergeEvent(BukkitUtil.getWorld(plot.getWorldName()), plot, plots)); return callEvent(
new PlotAutoMergeEvent(BukkitUtil.getWorld(plot.getWorldName()), plot, plots));
} }
@Override public boolean callUnlink(PlotArea area, List<PlotId> plots) { @Override public boolean callUnlink(PlotArea area, List<PlotId> plots) {

View File

@ -27,8 +27,9 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.annotation.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
@ -242,7 +243,7 @@ import java.util.Set;
location.getBlockZ()); location.getBlockZ());
} }
public static Location getLocationFull(@NonNull final Entity entity) { @NotNull public static Location getLocationFull(@NonNull final Entity entity) {
final org.bukkit.Location location = entity.getLocation(); final org.bukkit.Location location = entity.getLocation();
return new Location(location.getWorld().getName(), MathMan.roundInt(location.getX()), return new Location(location.getWorld().getName(), MathMan.roundInt(location.getX()),
MathMan.roundInt(location.getY()), MathMan.roundInt(location.getZ()), location.getYaw(), MathMan.roundInt(location.getY()), MathMan.roundInt(location.getZ()), location.getYaw(),

View File

@ -42,7 +42,6 @@ public class SendChunk {
* Constructor. * Constructor.
*/ */
public SendChunk() throws ClassNotFoundException, NoSuchMethodException, NoSuchFieldException { public SendChunk() throws ClassNotFoundException, NoSuchMethodException, NoSuchFieldException {
RefConstructor tempMapChunk;
RefClass classCraftPlayer = getRefClass("{cb}.entity.CraftPlayer"); RefClass classCraftPlayer = getRefClass("{cb}.entity.CraftPlayer");
this.methodGetHandlePlayer = classCraftPlayer.getMethod("getHandle"); this.methodGetHandlePlayer = classCraftPlayer.getMethod("getHandle");
RefClass classCraftChunk = getRefClass("{cb}.CraftChunk"); RefClass classCraftChunk = getRefClass("{cb}.CraftChunk");
@ -50,8 +49,7 @@ public class SendChunk {
RefClass classChunk = getRefClass("{nms}.Chunk"); RefClass classChunk = getRefClass("{nms}.Chunk");
this.methodInitLighting = classChunk.getMethod("initLighting"); this.methodInitLighting = classChunk.getMethod("initLighting");
RefClass classMapChunk = getRefClass("{nms}.PacketPlayOutMapChunk"); RefClass classMapChunk = getRefClass("{nms}.PacketPlayOutMapChunk");
tempMapChunk = classMapChunk.getConstructor(classChunk.getRealClass(), int.class); this.mapChunk = classMapChunk.getConstructor(classChunk.getRealClass(), int.class);
this.mapChunk = tempMapChunk;
RefClass classEntityPlayer = getRefClass("{nms}.EntityPlayer"); RefClass classEntityPlayer = getRefClass("{nms}.EntityPlayer");
this.connection = classEntityPlayer.getField("playerConnection"); this.connection = classEntityPlayer.getField("playerConnection");
RefClass classPacket = getRefClass("{nms}.Packet"); RefClass classPacket = getRefClass("{nms}.Packet");

View File

@ -31,13 +31,13 @@ import java.util.ArrayDeque;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.TimeUnit;
public class SQLUUIDHandler extends UUIDHandlerImplementation { public class SQLUUIDHandler extends UUIDHandlerImplementation {
final int MAX_REQUESTS = 500; final int MAX_REQUESTS = 500;
private final String PROFILE_URL = private final String PROFILE_URL =
"https://sessionserver.mojang.com/session/minecraft/profile/"; "https://sessionserver.mojang.com/session/minecraft/profile/";
private final int INTERVAL = 12000;
private final JSONParser jsonParser = new JSONParser(); private final JSONParser jsonParser = new JSONParser();
private final SQLite sqlite; private final SQLite sqlite;
@ -133,7 +133,10 @@ public class SQLUUIDHandler extends UUIDHandlerImplementation {
"Invalid response from Mojang: Some UUIDs will be cached later. (`unknown` until then or player joins)"); "Invalid response from Mojang: Some UUIDs will be cached later. (`unknown` until then or player joins)");
} }
try { try {
Thread.sleep(INTERVAL * 50); //Mojang allows requests every 10 minutes according to https://wiki.vg/Mojang_API
//15 Minutes is chosen here since system timers are not always precise
//and it should provide enough time where Mojang won't block requests.
TimeUnit.MINUTES.sleep(15);
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
break; break;
@ -142,7 +145,6 @@ public class SQLUUIDHandler extends UUIDHandlerImplementation {
if (whenDone != null) { if (whenDone != null) {
whenDone.run(); whenDone.run();
} }
return;
}); });
}); });
} catch (SQLException e) { } catch (SQLException e) {

View File

@ -1,6 +1,6 @@
name: ${name} name: ${name}
main: com.github.intellectualsites.plotsquared.bukkit.BukkitMain main: com.github.intellectualsites.plotsquared.bukkit.BukkitMain
api-version: 1.13 api-version: "1.13"
version: "${version}" version: "${version}"
load: STARTUP load: STARTUP
description: > description: >
@ -126,6 +126,7 @@ permissions:
plots.toggle: true plots.toggle: true
plots.toggle.titles: true plots.toggle.titles: true
plots.toggle.chat: true plots.toggle.chat: true
plots.toggle.time: true
plots.set.biome: true plots.set.biome: true
plots.set.home: true plots.set.home: true
plots.set.alias: true plots.set.alias: true

View File

@ -6,7 +6,6 @@ package com.github.intellectualsites.plotsquared.configuration;
*/ */
class ConfigurationOptions { class ConfigurationOptions {
private final Configuration configuration; private final Configuration configuration;
private char pathSeparator = '.';
private boolean copyDefaults = false; private boolean copyDefaults = false;
protected ConfigurationOptions(Configuration configuration) { protected ConfigurationOptions(Configuration configuration) {
@ -26,28 +25,12 @@ class ConfigurationOptions {
* Gets the char that will be used to separate {@link * Gets the char that will be used to separate {@link
* ConfigurationSection}s. * ConfigurationSection}s.
* *
* <p>This value does not affect how the {@link Configuration} is stored, * <p> This value is always '.'.
* only in how you access the data. The default value is '.'.
* *
* @return Path separator * @return Path separator
*/ */
public char pathSeparator() { char pathSeparator() {
return pathSeparator; return '.';
}
/**
* Sets the char that will be used to separate {@link
* ConfigurationSection}s.
*
* <p>This value does not affect how the {@link Configuration} is stored,
* only in how you access the data. The default value is '.'.
*
* @param value Path separator
* @return This object, for chaining
*/
public ConfigurationOptions pathSeparator(char value) {
pathSeparator = value;
return this;
} }
/** /**

View File

@ -18,8 +18,4 @@ public class MemoryConfigurationOptions extends ConfigurationOptions {
return this; return this;
} }
@Override public MemoryConfigurationOptions pathSeparator(char value) {
super.pathSeparator(value);
return this;
}
} }

View File

@ -25,11 +25,6 @@ public class FileConfigurationOptions extends MemoryConfigurationOptions {
return this; return this;
} }
@Override public FileConfigurationOptions pathSeparator(char value) {
super.pathSeparator(value);
return this;
}
/** /**
* Gets the header that will be applied to the top of the saved output. * Gets the header that will be applied to the top of the saved output.
* *

View File

@ -5,7 +5,6 @@ package com.github.intellectualsites.plotsquared.configuration.file;
* YamlConfiguration}. * YamlConfiguration}.
*/ */
public class YamlConfigurationOptions extends FileConfigurationOptions { public class YamlConfigurationOptions extends FileConfigurationOptions {
private int indent = 2;
YamlConfigurationOptions(YamlConfiguration configuration) { YamlConfigurationOptions(YamlConfiguration configuration) {
super(configuration); super(configuration);
@ -20,11 +19,6 @@ public class YamlConfigurationOptions extends FileConfigurationOptions {
return this; return this;
} }
@Override public YamlConfigurationOptions pathSeparator(char value) {
super.pathSeparator(value);
return this;
}
@Override public YamlConfigurationOptions header(String value) { @Override public YamlConfigurationOptions header(String value) {
super.header(value); super.header(value);
return this; return this;
@ -42,27 +36,8 @@ public class YamlConfigurationOptions extends FileConfigurationOptions {
* *
* @return How much to indent by * @return How much to indent by
*/ */
public int indent() { int indent() {
return indent; return 2;
} }
/**
* Sets how much spaces should be used to indent each line.
*
* <p>The minimum value this may be is 2, and the maximum is 9.
*
* @param value New indent
* @return This object, for chaining
*/
public YamlConfigurationOptions indent(int value) {
if (value < 2) {
throw new IllegalArgumentException("Indent must be at least 2 characters");
}
if (value > 9) {
throw new IllegalArgumentException("Indent cannot be greater than 9 characters");
}
indent = value;
return this;
}
} }

View File

@ -63,12 +63,12 @@ public interface IPlotMain extends ILogger {
*/ */
String getPluginVersionString(); String getPluginVersionString();
String getPluginName(); default String getPluginName() {
return "PlotSquared";
}
/** /**
* Gets the version of Minecraft that is running. * Gets the version of Minecraft that is running.
*
* @return
*/ */
int[] getServerVersion(); int[] getServerVersion();
@ -101,7 +101,7 @@ public interface IPlotMain extends ILogger {
/** /**
* The task manager will run and manage Minecraft tasks. * The task manager will run and manage Minecraft tasks.
* *
* @return * @return the PlotSquared task manager
*/ */
TaskManager getTaskManager(); TaskManager getTaskManager();
@ -138,49 +138,39 @@ public interface IPlotMain extends ILogger {
/** /**
* Gets the economy provider. * Gets the economy provider.
* *
* @return * @return the PlotSquared economy manager
*/ */
EconHandler getEconomyHandler(); EconHandler getEconomyHandler();
/** /**
* Gets the {@link QueueProvider} class. * Gets the {@link QueueProvider} class.
*
* @return
*/ */
QueueProvider initBlockQueue(); QueueProvider initBlockQueue();
/** /**
* Gets the {@link WorldUtil} class. * Gets the {@link WorldUtil} class.
*
* @return
*/ */
WorldUtil initWorldUtil(); WorldUtil initWorldUtil();
/** /**
* Gets the EventUtil class. * Gets the EventUtil class.
*
* @return
*/ */
EventUtil initEventUtil(); EventUtil initEventUtil();
/** /**
* Gets the chunk manager. * Gets the chunk manager.
* *
* @return * @return the PlotSquared chunk manager
*/ */
ChunkManager initChunkManager(); ChunkManager initChunkManager();
/** /**
* Gets the {@link SetupUtils} class. * Gets the {@link SetupUtils} class.
*
* @return
*/ */
SetupUtils initSetupUtils(); SetupUtils initSetupUtils();
/** /**
* Gets {@link HybridUtils} class. * Gets {@link HybridUtils} class.
*
* @return
*/ */
HybridUtils initHybridUtils(); HybridUtils initHybridUtils();
@ -199,32 +189,28 @@ public interface IPlotMain extends ILogger {
/** /**
* Gets the {@link UUIDHandlerImplementation} which will cache and * Gets the {@link UUIDHandlerImplementation} which will cache and
* provide UUIDs. * provide UUIDs.
*
* @return
*/ */
UUIDHandlerImplementation initUUIDHandler(); UUIDHandlerImplementation initUUIDHandler();
/** /**
* Gets the {@link InventoryUtil} class (used for implementation specific * Gets the {@link InventoryUtil} class (used for implementation specific
* inventory guis). * inventory guis).
*
* @return
*/ */
InventoryUtil initInventoryUtil(); InventoryUtil initInventoryUtil();
/** /**
* Unregisters a {@link PlotPlayer} from cache e.g. if they have logged off. * Unregisters a {@link PlotPlayer} from cache e.g. if they have logged off.
* *
* @param player * @param player the player to remove
*/ */
void unregister(PlotPlayer player); void unregister(PlotPlayer player);
/** /**
* Gets the generator wrapper for a world (world) and generator (name). * Gets the generator wrapper for a world (world) and generator (name).
* *
* @param world * @param world the world to get the generator from
* @param name * @param name the name of the generator
* @return * @return the generator being used for the provided world
*/ */
GeneratorWrapper<?> getGenerator(String world, String name); GeneratorWrapper<?> getGenerator(String world, String name);

View File

@ -33,8 +33,8 @@ import com.sk89q.worldedit.WorldEdit;
import lombok.Getter; import lombok.Getter;
import lombok.NonNull; import lombok.NonNull;
import lombok.Setter; import lombok.Setter;
import org.jetbrains.annotations.Nullable;
import javax.annotation.Nullable;
import java.io.*; import java.io.*;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URISyntaxException; import java.net.URISyntaxException;
@ -1623,7 +1623,7 @@ import java.util.zip.ZipInputStream;
final Properties properties = new Properties(); final Properties properties = new Properties();
properties.load(bufferedReader); properties.load(bufferedReader);
final boolean enabled = final boolean enabled =
Boolean.valueOf(properties.getOrDefault("enabled", true).toString()); Boolean.parseBoolean(properties.getOrDefault("enabled", true).toString());
if (enabled) { if (enabled) {
this.updateUtility = new UpdateUtility(properties.getProperty("path"), this.updateUtility = new UpdateUtility(properties.getProperty("path"),
properties.getProperty("job"), properties.getProperty("artifact")); properties.getProperty("job"), properties.getProperty("artifact"));

View File

@ -24,12 +24,19 @@ public class PlotVersion {
public static PlotVersion tryParse(String version, String commit, String date) { public static PlotVersion tryParse(String version, String commit, String date) {
try { try {
return new PlotVersion(version, commit, date); return new PlotVersion(version, commit, date);
} catch (Exception ignore) { } catch (Exception e) {
ignore.printStackTrace(); e.printStackTrace();
return new PlotVersion(0, 0, 0, 0, 0); return new PlotVersion(0, 0, 0, 0, 0);
} }
} }
public String versionString() {
if (hash == 0 && build == 0) {
return "NoVer-SNAPSHOT";
} else {
return "4." + build;
}
}
@Override public String toString() { @Override public String toString() {
if (hash == 0 && build == 0) { if (hash == 0 && build == 0) {
return "PlotSquared-NoVer-SNAPSHOT"; return "PlotSquared-NoVer-SNAPSHOT";

View File

@ -25,8 +25,8 @@ import com.github.intellectualsites.plotsquared.plot.util.UUIDHandler;
return false; return false;
} }
Location loc = player.getLocation(); Location location = player.getLocation();
Plot plot = loc.getPlotAbs(); Plot plot = location.getPlotAbs();
if (plot == null) { if (plot == null) {
return !sendMessage(player, Captions.NOT_IN_PLOT); return !sendMessage(player, Captions.NOT_IN_PLOT);
} }

View File

@ -5,19 +5,14 @@ import com.github.intellectualsites.plotsquared.plot.PlotSquared;
import com.github.intellectualsites.plotsquared.plot.config.Captions; import com.github.intellectualsites.plotsquared.plot.config.Captions;
import com.github.intellectualsites.plotsquared.plot.config.Settings; import com.github.intellectualsites.plotsquared.plot.config.Settings;
import com.github.intellectualsites.plotsquared.plot.database.DBFunc; import com.github.intellectualsites.plotsquared.plot.database.DBFunc;
import com.github.intellectualsites.plotsquared.plot.object.Expression; import com.github.intellectualsites.plotsquared.plot.object.*;
import com.github.intellectualsites.plotsquared.plot.object.Plot;
import com.github.intellectualsites.plotsquared.plot.object.PlotArea;
import com.github.intellectualsites.plotsquared.plot.object.PlotId;
import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer;
import com.github.intellectualsites.plotsquared.plot.object.RunnableVal;
import com.github.intellectualsites.plotsquared.plot.util.ByteArrayUtilities; import com.github.intellectualsites.plotsquared.plot.util.ByteArrayUtilities;
import com.github.intellectualsites.plotsquared.plot.util.EconHandler; import com.github.intellectualsites.plotsquared.plot.util.EconHandler;
import com.github.intellectualsites.plotsquared.plot.util.MainUtil; import com.github.intellectualsites.plotsquared.plot.util.MainUtil;
import com.github.intellectualsites.plotsquared.plot.util.Permissions; import com.github.intellectualsites.plotsquared.plot.util.Permissions;
import com.github.intellectualsites.plotsquared.plot.util.TaskManager; import com.github.intellectualsites.plotsquared.plot.util.TaskManager;
import javax.annotation.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.Set; import java.util.Set;
@CommandDeclaration(command = "auto", permission = "plots.auto", @CommandDeclaration(command = "auto", permission = "plots.auto",
@ -123,7 +118,8 @@ public class Auto extends SubCommand {
} else if (checkAllowedPlots(player, area, allowedPlots, 1, 1)) { } else if (checkAllowedPlots(player, area, allowedPlots, 1, 1)) {
plot.claim(player, true, schematic, false); plot.claim(player, true, schematic, false);
if (area.AUTO_MERGE) { if (area.AUTO_MERGE) {
plot.autoMerge(-1, Integer.MAX_VALUE, player.getUUID(), true); plot.autoMerge(Direction.ALL, Integer.MAX_VALUE, player.getUUID(),
true);
} }
} else { } else {
DBFunc.delete(plot); DBFunc.delete(plot);
@ -253,6 +249,9 @@ public class Auto extends SubCommand {
for (int j = start.y; j <= end.y; j++) { for (int j = start.y; j <= end.y; j++) {
Plot plot = plotarea.getPlotAbs(new PlotId(i, j)); Plot plot = plotarea.getPlotAbs(new PlotId(i, j));
boolean teleport = i == end.x && j == end.y; boolean teleport = i == end.x && j == end.y;
if (plot == null) {
return false;
}
plot.claim(player, teleport, null); plot.claim(player, teleport, null);
} }
} }

View File

@ -20,13 +20,14 @@ public class Claim extends SubCommand {
if (args.length >= 1) { if (args.length >= 1) {
schematic = args[0]; schematic = args[0];
} }
Location loc = player.getLocation(); Location location = player.getLocation();
final Plot plot = loc.getPlotAbs(); final Plot plot = location.getPlotAbs();
if (plot == null) { if (plot == null) {
return sendMessage(player, Captions.NOT_IN_PLOT); return sendMessage(player, Captions.NOT_IN_PLOT);
} }
int currentPlots = int currentPlots = Settings.Limit.GLOBAL ?
Settings.Limit.GLOBAL ? player.getPlotCount() : player.getPlotCount(loc.getWorld()); player.getPlotCount() :
player.getPlotCount(location.getWorld());
int grants = 0; int grants = 0;
if (currentPlots >= player.getAllowedPlots()) { if (currentPlots >= player.getAllowedPlots()) {
if (player.hasPersistentMeta("grantedPlots")) { if (player.hasPersistentMeta("grantedPlots")) {
@ -89,7 +90,7 @@ public class Claim extends SubCommand {
@Override public void run(Object value) { @Override public void run(Object value) {
plot.claim(player, true, finalSchematic, false); plot.claim(player, true, finalSchematic, false);
if (area.AUTO_MERGE) { if (area.AUTO_MERGE) {
plot.autoMerge(-1, Integer.MAX_VALUE, player.getUUID(), true); plot.autoMerge(Direction.ALL, Integer.MAX_VALUE, player.getUUID(), true);
} }
} }
}), () -> sendMessage(player, Captions.PLOT_NOT_CLAIMED)); }), () -> sendMessage(player, Captions.PLOT_NOT_CLAIMED));

View File

@ -32,7 +32,7 @@ public class Comment extends SubCommand {
StringMan.join(CommentManager.inboxes.keySet(), "|")); StringMan.join(CommentManager.inboxes.keySet(), "|"));
return false; return false;
} }
Location loc = player.getLocation(); Location location = player.getLocation();
PlotId id; PlotId id;
try { try {
id = PlotId.fromString(args[1]); id = PlotId.fromString(args[1]);
@ -44,7 +44,7 @@ public class Comment extends SubCommand {
int index; int index;
if (plot == null) { if (plot == null) {
index = 1; index = 1;
plot = loc.getPlotAbs(); plot = location.getPlotAbs();
} else { } else {
if (args.length < 4) { if (args.length < 4) {
sendMessage(player, Captions.COMMENT_SYNTAX, sendMessage(player, Captions.COMMENT_SYNTAX,
@ -59,7 +59,7 @@ public class Comment extends SubCommand {
} }
String message = StringMan.join(Arrays.copyOfRange(args, index, args.length), " "); String message = StringMan.join(Arrays.copyOfRange(args, index, args.length), " ");
PlotComment comment = PlotComment comment =
new PlotComment(loc.getWorld(), id, message, player.getName(), inbox.toString(), new PlotComment(location.getWorld(), id, message, player.getName(), inbox.toString(),
System.currentTimeMillis()); System.currentTimeMillis());
boolean result = inbox.addComment(plot, comment); boolean result = inbox.addComment(plot, comment);
if (!result) { if (!result) {

View File

@ -13,8 +13,8 @@ import com.github.intellectualsites.plotsquared.plot.util.Permissions;
requiredType = RequiredType.NONE) public class Copy extends SubCommand { requiredType = RequiredType.NONE) public class Copy extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, String[] args) { @Override public boolean onCommand(final PlotPlayer player, String[] args) {
Location loc = player.getLocation(); Location location = player.getLocation();
Plot plot1 = loc.getPlotAbs(); Plot plot1 = location.getPlotAbs();
if (plot1 == null) { if (plot1 == null) {
return !MainUtil.sendMessage(player, Captions.NOT_IN_PLOT); return !MainUtil.sendMessage(player, Captions.NOT_IN_PLOT);
} }

View File

@ -16,12 +16,12 @@ import com.github.intellectualsites.plotsquared.plot.util.MainUtil;
usage = "/plot createroadschematic") public class CreateRoadSchematic extends SubCommand { usage = "/plot createroadschematic") public class CreateRoadSchematic extends SubCommand {
@Override public boolean onCommand(PlotPlayer player, String[] args) { @Override public boolean onCommand(PlotPlayer player, String[] args) {
Location loc = player.getLocation(); Location location = player.getLocation();
Plot plot = loc.getPlotAbs(); Plot plot = location.getPlotAbs();
if (plot == null) { if (plot == null) {
return sendMessage(player, Captions.NOT_IN_PLOT); return sendMessage(player, Captions.NOT_IN_PLOT);
} }
if (!(loc.getPlotArea() instanceof HybridPlotWorld)) { if (!(location.getPlotArea() instanceof HybridPlotWorld)) {
return sendMessage(player, Captions.NOT_IN_PLOT_WORLD); return sendMessage(player, Captions.NOT_IN_PLOT_WORLD);
} }
HybridUtils.manager.setupRoadSchematic(plot); HybridUtils.manager.setupRoadSchematic(plot);

View File

@ -55,13 +55,13 @@ public class DebugClaimTest extends SubCommand {
MainUtil.sendMessage(player, " - &cDB Already contains: " + plot.getId()); MainUtil.sendMessage(player, " - &cDB Already contains: " + plot.getId());
continue; continue;
} }
Location loc = manager.getSignLoc(plot); Location location = manager.getSignLoc(plot);
ChunkLoc chunk = new ChunkLoc(loc.getX() >> 4, loc.getZ() >> 4); ChunkLoc chunk = new ChunkLoc(location.getX() >> 4, location.getZ() >> 4);
boolean result = ChunkManager.manager.loadChunk(area.worldname, chunk, false); boolean result = ChunkManager.manager.loadChunk(area.worldname, chunk, false);
if (!result) { if (!result) {
continue; continue;
} }
String[] lines = WorldUtil.IMP.getSign(loc); String[] lines = WorldUtil.IMP.getSign(location);
if (lines != null) { if (lines != null) {
String line = lines[2]; String line = lines[2];
if (line != null && line.length() > 2) { if (line != null && line.length() > 2) {

View File

@ -369,17 +369,17 @@ import java.util.concurrent.CompletableFuture;
Command cmd = MainCommand.getInstance().getCommand(args[3]); Command cmd = MainCommand.getInstance().getCommand(args[3]);
String[] params = Arrays.copyOfRange(args, 4, args.length); String[] params = Arrays.copyOfRange(args, 4, args.length);
if ("true".equals(args[1])) { if ("true".equals(args[1])) {
Location loc = player.getMeta(PlotPlayer.META_LOCATION); Location location = player.getMeta(PlotPlayer.META_LOCATION);
Plot plot = player.getMeta(PlotPlayer.META_LAST_PLOT); Plot plot = player.getMeta(PlotPlayer.META_LAST_PLOT);
for (Plot current : PlotSquared.get().getBasePlots()) { for (Plot current : PlotSquared.get().getBasePlots()) {
player.setMeta(PlotPlayer.META_LOCATION, current.getBottomAbs()); player.setMeta(PlotPlayer.META_LOCATION, current.getBottomAbs());
player.setMeta(PlotPlayer.META_LAST_PLOT, current); player.setMeta(PlotPlayer.META_LAST_PLOT, current);
cmd.execute(player, params, null, null); cmd.execute(player, params, null, null);
} }
if (loc == null) { if (location == null) {
player.deleteMeta(PlotPlayer.META_LOCATION); player.deleteMeta(PlotPlayer.META_LOCATION);
} else { } else {
player.setMeta(PlotPlayer.META_LOCATION, loc); player.setMeta(PlotPlayer.META_LOCATION, location);
} }
if (plot == null) { if (plot == null) {
player.deleteMeta(PlotPlayer.META_LAST_PLOT); player.deleteMeta(PlotPlayer.META_LAST_PLOT);

View File

@ -3,7 +3,6 @@ package com.github.intellectualsites.plotsquared.plot.commands;
import com.github.intellectualsites.plotsquared.commands.CommandDeclaration; import com.github.intellectualsites.plotsquared.commands.CommandDeclaration;
import com.github.intellectualsites.plotsquared.plot.config.Captions; import com.github.intellectualsites.plotsquared.plot.config.Captions;
import com.github.intellectualsites.plotsquared.plot.generator.HybridPlotManager; import com.github.intellectualsites.plotsquared.plot.generator.HybridPlotManager;
import com.github.intellectualsites.plotsquared.plot.generator.HybridPlotWorld;
import com.github.intellectualsites.plotsquared.plot.generator.HybridUtils; import com.github.intellectualsites.plotsquared.plot.generator.HybridUtils;
import com.github.intellectualsites.plotsquared.plot.object.Location; import com.github.intellectualsites.plotsquared.plot.object.Location;
import com.github.intellectualsites.plotsquared.plot.object.Plot; import com.github.intellectualsites.plotsquared.plot.object.Plot;
@ -23,28 +22,24 @@ public class DebugRoadRegen extends SubCommand {
@Override public boolean onCommand(PlotPlayer player, String[] args) { @Override public boolean onCommand(PlotPlayer player, String[] args) {
if (args.length < 1) { if (args.length < 1) {
MainUtil.sendMessage(player, Captions.COMMAND_SYNTAX, MainUtil.sendMessage(player, Captions.COMMAND_SYNTAX, DebugRoadRegen.USAGE);
DebugRoadRegen.USAGE);
return false; return false;
} }
String kind = args[0].toLowerCase(); String kind = args[0].toLowerCase();
switch (kind) { switch (kind) {
case "plot": case "plot":
return regenPlot(player); return regenPlot(player);
case "region": case "region":
return regenRegion(player, Arrays.copyOfRange(args, 1, args.length)); return regenRegion(player, Arrays.copyOfRange(args, 1, args.length));
default: default:
MainUtil.sendMessage(player, Captions.COMMAND_SYNTAX, MainUtil.sendMessage(player, Captions.COMMAND_SYNTAX, DebugRoadRegen.USAGE);
DebugRoadRegen.USAGE);
return false; return false;
} }
} }
public boolean regenPlot(PlotPlayer player) { public boolean regenPlot(PlotPlayer player) {
Location loc = player.getLocation(); Location location = player.getLocation();
PlotArea area = loc.getPlotArea(); PlotArea area = location.getPlotArea();
if (area == null) { if (area == null) {
return sendMessage(player, Captions.NOT_IN_PLOT_WORLD); return sendMessage(player, Captions.NOT_IN_PLOT_WORLD);
} }
@ -82,8 +77,8 @@ public class DebugRoadRegen extends SubCommand {
return false; return false;
} }
Location loc = player.getLocation(); Location location = player.getLocation();
PlotArea area = loc.getPlotArea(); PlotArea area = location.getPlotArea();
if (area == null) { if (area == null) {
return sendMessage(player, Captions.NOT_IN_PLOT_WORLD); return sendMessage(player, Captions.NOT_IN_PLOT_WORLD);
} }

View File

@ -3,8 +3,16 @@ package com.github.intellectualsites.plotsquared.plot.commands;
import com.github.intellectualsites.plotsquared.commands.CommandDeclaration; import com.github.intellectualsites.plotsquared.commands.CommandDeclaration;
import com.github.intellectualsites.plotsquared.plot.config.Captions; import com.github.intellectualsites.plotsquared.plot.config.Captions;
import com.github.intellectualsites.plotsquared.plot.config.Settings; import com.github.intellectualsites.plotsquared.plot.config.Settings;
import com.github.intellectualsites.plotsquared.plot.object.*; import com.github.intellectualsites.plotsquared.plot.object.Expression;
import com.github.intellectualsites.plotsquared.plot.util.*; import com.github.intellectualsites.plotsquared.plot.object.Location;
import com.github.intellectualsites.plotsquared.plot.object.Plot;
import com.github.intellectualsites.plotsquared.plot.object.PlotArea;
import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer;
import com.github.intellectualsites.plotsquared.plot.util.CmdConfirm;
import com.github.intellectualsites.plotsquared.plot.util.EconHandler;
import com.github.intellectualsites.plotsquared.plot.util.MainUtil;
import com.github.intellectualsites.plotsquared.plot.util.Permissions;
import com.github.intellectualsites.plotsquared.plot.util.TaskManager;
@CommandDeclaration(command = "delete", permission = "plots.delete", @CommandDeclaration(command = "delete", permission = "plots.delete",
@ -16,8 +24,8 @@ import com.github.intellectualsites.plotsquared.plot.util.*;
// The syntax also works with any command: /plot <plot> <command> // The syntax also works with any command: /plot <plot> <command>
@Override public boolean onCommand(final PlotPlayer player, String[] args) { @Override public boolean onCommand(final PlotPlayer player, String[] args) {
Location loc = player.getLocation(); Location location = player.getLocation();
final Plot plot = loc.getPlotAbs(); final Plot plot = location.getPlotAbs();
if (plot == null) { if (plot == null) {
return !sendMessage(player, Captions.NOT_IN_PLOT); return !sendMessage(player, Captions.NOT_IN_PLOT);
} }
@ -30,8 +38,9 @@ import com.github.intellectualsites.plotsquared.plot.util.*;
} }
final PlotArea plotArea = plot.getArea(); final PlotArea plotArea = plot.getArea();
final java.util.Set<Plot> plots = plot.getConnectedPlots(); final java.util.Set<Plot> plots = plot.getConnectedPlots();
final int currentPlots = final int currentPlots = Settings.Limit.GLOBAL ?
Settings.Limit.GLOBAL ? player.getPlotCount() : player.getPlotCount(loc.getWorld()); player.getPlotCount() :
player.getPlotCount(location.getWorld());
Runnable run = new Runnable() { Runnable run = new Runnable() {
@Override public void run() { @Override public void run() {
if (plot.getRunning() > 0) { if (plot.getRunning() > 0) {

View File

@ -97,8 +97,8 @@ import java.util.UUID;
if (player.getGameMode() == PlotGameMode.SPECTATOR) { if (player.getGameMode() == PlotGameMode.SPECTATOR) {
player.stopSpectating(); player.stopSpectating();
} }
Location loc = player.getLocation(); Location location = player.getLocation();
Location spawn = WorldUtil.IMP.getSpawn(loc.getWorld()); Location spawn = WorldUtil.IMP.getSpawn(location.getWorld());
MainUtil.sendMessage(player, Captions.YOU_GOT_DENIED); MainUtil.sendMessage(player, Captions.YOU_GOT_DENIED);
if (plot.equals(spawn.getPlot())) { if (plot.equals(spawn.getPlot())) {
Location newSpawn = Location newSpawn =

View File

@ -19,8 +19,8 @@ import com.github.intellectualsites.plotsquared.plot.util.expiry.PlotAnalysis;
requiredType = RequiredType.NONE) public class Done extends SubCommand { requiredType = RequiredType.NONE) public class Done extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, String[] args) { @Override public boolean onCommand(final PlotPlayer player, String[] args) {
Location loc = player.getLocation(); Location location = player.getLocation();
final Plot plot = loc.getPlotAbs(); final Plot plot = location.getPlotAbs();
if ((plot == null) || !plot.hasOwner()) { if ((plot == null) || !plot.hasOwner()) {
return !sendMessage(player, Captions.NOT_IN_PLOT); return !sendMessage(player, Captions.NOT_IN_PLOT);
} }

View File

@ -24,10 +24,9 @@ import com.github.intellectualsites.plotsquared.plot.util.StringMan;
import java.util.*; import java.util.*;
@CommandDeclaration(command = "setflag", aliases = {"f", "flag", "setf", "setflag"}, @CommandDeclaration(command = "setflag", aliases = {"f", "flag",
usage = "/plot flag <set|remove|add|list|info> <flag> <value>", description = "Set plot flags", "setflag"}, usage = "/plot flag <set|remove|add|list|info> <flag> <value>", description = "Set plot flags", category = CommandCategory.SETTINGS, requiredType = RequiredType.NONE, permission = "plots.flag")
category = CommandCategory.SETTINGS, requiredType = RequiredType.NONE, public class FlagCmd extends SubCommand {
permission = "plots.flag") public class FlagCmd extends SubCommand {
private boolean checkPermValue(PlotPlayer player, Flag flag, String key, String value) { private boolean checkPermValue(PlotPlayer player, Flag flag, String key, String value) {
key = key.toLowerCase(); key = key.toLowerCase();
@ -90,8 +89,8 @@ import java.util.*;
MainUtil.sendMessage(player, Captions.COMMAND_SYNTAX, getUsage()); MainUtil.sendMessage(player, Captions.COMMAND_SYNTAX, getUsage());
return false; return false;
} }
Location loc = player.getLocation(); Location location = player.getLocation();
Plot plot = loc.getPlotAbs(); Plot plot = location.getPlotAbs();
if (plot == null) { if (plot == null) {
MainUtil.sendMessage(player, Captions.NOT_IN_PLOT); MainUtil.sendMessage(player, Captions.NOT_IN_PLOT);
return false; return false;

View File

@ -14,9 +14,8 @@ import com.github.intellectualsites.plotsquared.plot.util.StringMan;
import java.util.List; import java.util.List;
@CommandDeclaration(command = "inbox", description = "Review the comments for a plot", @CommandDeclaration(command = "inbox", description = "Review the comments for a plot",
usage = "/plot inbox [inbox] [delete <index>|clear|page]", permission = "plots.inbox", usage = "/plot inbox [inbox] [delete <index>|clear|page]", permission = "plots.inbox", category = CommandCategory.CHAT, requiredType = RequiredType.PLAYER)
category = CommandCategory.CHAT, requiredType = RequiredType.PLAYER) public class Inbox public class Inbox extends SubCommand {
extends SubCommand {
public void displayComments(PlotPlayer player, List<PlotComment> oldComments, int page) { public void displayComments(PlotPlayer player, List<PlotComment> oldComments, int page) {
if (oldComments == null || oldComments.isEmpty()) { if (oldComments == null || oldComments.isEmpty()) {
@ -178,8 +177,7 @@ import java.util.List;
try { try {
page = Integer.parseInt(args[1]); page = Integer.parseInt(args[1]);
} catch (NumberFormatException ignored) { } catch (NumberFormatException ignored) {
sendMessage(player, Captions.COMMAND_SYNTAX, sendMessage(player, Captions.COMMAND_SYNTAX, getUsage());
"/plot inbox [inbox] [delete <index>|clear|page]");
return false; return false;
} }
} }

View File

@ -193,19 +193,19 @@ public class MainCommand extends Command {
// Clear perm caching // // Clear perm caching //
player.deleteMeta("perm"); player.deleteMeta("perm");
// Optional command scope // // Optional command scope //
Location loc = null; Location location = null;
Plot plot = null; Plot plot = null;
boolean tp = false; boolean tp = false;
if (args.length >= 2) { if (args.length >= 2) {
PlotArea area = player.getApplicablePlotArea(); PlotArea area = player.getApplicablePlotArea();
Plot newPlot = Plot.fromString(area, args[0]); Plot newPlot = Plot.fromString(area, args[0]);
if (newPlot != null && (player instanceof ConsolePlayer || newPlot.getArea() if (newPlot != null && (player instanceof ConsolePlayer || newPlot.getArea()
.equals(area) || Permissions.hasPermission(player, Captions.PERMISSION_ADMIN)) .equals(area) || Permissions.hasPermission(player, Captions.PERMISSION_ADMIN) || Permissions.hasPermission(player, Captions.PERMISSION_ADMIN_SUDO_AREA))
&& !newPlot.isDenied(player.getUUID())) { && !newPlot.isDenied(player.getUUID())) {
Location newLoc = newPlot.getCenter(); Location newLoc = newPlot.getCenter();
if (player.canTeleport(newLoc)) { if (player.canTeleport(newLoc)) {
// Save meta // Save meta
loc = player.getMeta(PlotPlayer.META_LOCATION); location = player.getMeta(PlotPlayer.META_LOCATION);
plot = player.getMeta(PlotPlayer.META_LAST_PLOT); plot = player.getMeta(PlotPlayer.META_LAST_PLOT);
tp = true; tp = true;
// Set loc // Set loc
@ -262,10 +262,10 @@ public class MainCommand extends Command {
} }
// Reset command scope // // Reset command scope //
if (tp && !(player instanceof ConsolePlayer)) { if (tp && !(player instanceof ConsolePlayer)) {
if (loc == null) { if (location == null) {
player.deleteMeta(PlotPlayer.META_LOCATION); player.deleteMeta(PlotPlayer.META_LOCATION);
} else { } else {
player.setMeta(PlotPlayer.META_LOCATION, loc); player.setMeta(PlotPlayer.META_LOCATION, location);
} }
if (plot == null) { if (plot == null) {
player.deleteMeta(PlotPlayer.META_LAST_PLOT); player.deleteMeta(PlotPlayer.META_LAST_PLOT);

View File

@ -3,6 +3,7 @@ package com.github.intellectualsites.plotsquared.plot.commands;
import com.github.intellectualsites.plotsquared.commands.CommandDeclaration; import com.github.intellectualsites.plotsquared.commands.CommandDeclaration;
import com.github.intellectualsites.plotsquared.plot.config.Captions; import com.github.intellectualsites.plotsquared.plot.config.Captions;
import com.github.intellectualsites.plotsquared.plot.config.Settings; import com.github.intellectualsites.plotsquared.plot.config.Settings;
import com.github.intellectualsites.plotsquared.plot.object.Direction;
import com.github.intellectualsites.plotsquared.plot.object.Expression; import com.github.intellectualsites.plotsquared.plot.object.Expression;
import com.github.intellectualsites.plotsquared.plot.object.Location; import com.github.intellectualsites.plotsquared.plot.object.Location;
import com.github.intellectualsites.plotsquared.plot.object.Plot; import com.github.intellectualsites.plotsquared.plot.object.Plot;
@ -17,6 +18,8 @@ import com.github.intellectualsites.plotsquared.plot.util.UUIDHandler;
import java.util.UUID; import java.util.UUID;
import static com.github.intellectualsites.plotsquared.plot.object.Direction.getFromIndex;
@CommandDeclaration(command = "merge", aliases = "m", @CommandDeclaration(command = "merge", aliases = "m",
description = "Merge the plot you are standing on with another plot", description = "Merge the plot you are standing on with another plot",
permission = "plots.merge", usage = "/plot merge <all|n|e|s|w> [removeroads]", permission = "plots.merge", usage = "/plot merge <all|n|e|s|w> [removeroads]",
@ -49,8 +52,8 @@ public class Merge extends SubCommand {
} }
@Override public boolean onCommand(final PlotPlayer player, String[] args) { @Override public boolean onCommand(final PlotPlayer player, String[] args) {
Location loc = player.getLocationFull(); Location location = player.getLocationFull();
final Plot plot = loc.getPlotAbs(); final Plot plot = location.getPlotAbs();
if (plot == null) { if (plot == null) {
return !sendMessage(player, Captions.NOT_IN_PLOT); return !sendMessage(player, Captions.NOT_IN_PLOT);
} }
@ -82,20 +85,20 @@ public class Merge extends SubCommand {
MainUtil.sendMessage(player, Captions.NO_PERMISSION, "plots.merge." + (size + 1)); MainUtil.sendMessage(player, Captions.NO_PERMISSION, "plots.merge." + (size + 1));
return false; return false;
} }
int direction = -1; Direction direction = Direction.ALL;
if (args.length == 0) { if (args.length == 0) {
switch (direction(player.getLocationFull().getYaw())) { switch (direction(player.getLocationFull().getYaw())) {
case "NORTH": case "NORTH":
direction = 0; direction = Direction.NORTH;
break; break;
case "EAST": case "EAST":
direction = 1; direction = Direction.EAST;
break; break;
case "SOUTH": case "SOUTH":
direction = 2; direction = Direction.SOUTH;
break; break;
case "WEST": case "WEST":
direction = 3; direction = Direction.WEST;
break; break;
} }
} else { } else {
@ -110,7 +113,7 @@ public class Merge extends SubCommand {
Captions.PERMISSION_MERGE_KEEP_ROAD.getTranslated()); Captions.PERMISSION_MERGE_KEEP_ROAD.getTranslated());
return true; return true;
} }
if (plot.autoMerge(-1, maxSize, uuid, terrain)) { if (plot.autoMerge(Direction.ALL, maxSize, uuid, terrain)) {
if (EconHandler.manager != null && plotArea.USE_ECONOMY && price > 0d) { if (EconHandler.manager != null && plotArea.USE_ECONOMY && price > 0d) {
EconHandler.manager.withdrawMoney(player, price); EconHandler.manager.withdrawMoney(player, price);
sendMessage(player, Captions.REMOVED_BALANCE, String.valueOf(price)); sendMessage(player, Captions.REMOVED_BALANCE, String.valueOf(price));
@ -124,16 +127,16 @@ public class Merge extends SubCommand {
} }
for (int i = 0; i < values.length; i++) { for (int i = 0; i < values.length; i++) {
if (args[0].equalsIgnoreCase(values[i]) || args[0].equalsIgnoreCase(aliases[i])) { if (args[0].equalsIgnoreCase(values[i]) || args[0].equalsIgnoreCase(aliases[i])) {
direction = i; direction = getFromIndex(i);
break; break;
} }
} }
} }
if (direction == -1) { if (direction == Direction.ALL) {
MainUtil.sendMessage(player, Captions.COMMAND_SYNTAX, MainUtil.sendMessage(player, Captions.COMMAND_SYNTAX,
"/plot merge <" + StringMan.join(values, "|") + "> [removeroads]"); "/plot merge <" + StringMan.join(values, "|") + "> [removeroads]");
MainUtil.sendMessage(player, MainUtil.sendMessage(player, Captions.DIRECTION.getTranslated()
Captions.DIRECTION.getTranslated().replaceAll("%dir%", direction(loc.getYaw()))); .replaceAll("%dir%", direction(location.getYaw())));
return false; return false;
} }
final boolean terrain; final boolean terrain;
@ -156,7 +159,8 @@ public class Merge extends SubCommand {
return true; return true;
} }
Plot adjacent = plot.getRelative(direction); Plot adjacent = plot.getRelative(direction);
if (adjacent == null || !adjacent.hasOwner() || adjacent.getMerged((direction + 2) % 4) if (adjacent == null || !adjacent.hasOwner() || adjacent
.getMerged((direction.getIndex() + 2) % 4)
|| adjacent.isOwner(uuid)) { || adjacent.isOwner(uuid)) {
MainUtil.sendMessage(player, Captions.NO_AVAILABLE_AUTOMERGE); MainUtil.sendMessage(player, Captions.NO_AVAILABLE_AUTOMERGE);
return false; return false;
@ -173,7 +177,7 @@ public class Merge extends SubCommand {
continue; continue;
} }
isOnline = true; isOnline = true;
final int dir = direction; final Direction dir = direction;
Runnable run = () -> { Runnable run = () -> {
MainUtil.sendMessage(accepter, Captions.MERGE_ACCEPTED); MainUtil.sendMessage(accepter, Captions.MERGE_ACCEPTED);
plot.autoMerge(dir, maxSize - size, owner, terrain); plot.autoMerge(dir, maxSize - size, owner, terrain);

View File

@ -15,8 +15,8 @@ import com.github.intellectualsites.plotsquared.plot.util.Permissions;
requiredType = RequiredType.PLAYER) public class Move extends SubCommand { requiredType = RequiredType.PLAYER) public class Move extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, String[] args) { @Override public boolean onCommand(final PlotPlayer player, String[] args) {
Location loc = player.getLocation(); Location location = player.getLocation();
Plot plot1 = loc.getPlotAbs(); Plot plot1 = location.getPlotAbs();
if (plot1 == null) { if (plot1 == null) {
return !MainUtil.sendMessage(player, Captions.NOT_IN_PLOT); return !MainUtil.sendMessage(player, Captions.NOT_IN_PLOT);
} }

View File

@ -3,7 +3,11 @@ package com.github.intellectualsites.plotsquared.plot.commands;
import com.github.intellectualsites.plotsquared.commands.CommandDeclaration; import com.github.intellectualsites.plotsquared.commands.CommandDeclaration;
import com.github.intellectualsites.plotsquared.plot.config.Captions; import com.github.intellectualsites.plotsquared.plot.config.Captions;
import com.github.intellectualsites.plotsquared.plot.flag.Flags; import com.github.intellectualsites.plotsquared.plot.flag.Flags;
import com.github.intellectualsites.plotsquared.plot.object.*; import com.github.intellectualsites.plotsquared.plot.object.Location;
import com.github.intellectualsites.plotsquared.plot.object.Plot;
import com.github.intellectualsites.plotsquared.plot.object.PlotInventory;
import com.github.intellectualsites.plotsquared.plot.object.PlotItemStack;
import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
@ -20,8 +24,8 @@ import java.util.Locale;
"music_disc_strad", "music_disc_ward", "music_disc_11", "music_disc_wait"); "music_disc_strad", "music_disc_ward", "music_disc_11", "music_disc_wait");
@Override public boolean onCommand(PlotPlayer player, String[] args) { @Override public boolean onCommand(PlotPlayer player, String[] args) {
Location loc = player.getLocation(); Location location = player.getLocation();
final Plot plot = loc.getPlotAbs(); final Plot plot = location.getPlotAbs();
if (plot == null) { if (plot == null) {
return !sendMessage(player, Captions.NOT_IN_PLOT); return !sendMessage(player, Captions.NOT_IN_PLOT);
} }

View File

@ -17,7 +17,7 @@ import java.util.UUID;
@CommandDeclaration(command = "setowner", permission = "plots.set.owner", @CommandDeclaration(command = "setowner", permission = "plots.set.owner",
description = "Set the plot owner", usage = "/plot setowner <player>", description = "Set the plot owner", usage = "/plot setowner <player>",
aliases = {"owner", "so", "seto"}, category = CommandCategory.CLAIMING, aliases = {"owner", "so", "seto"}, category = CommandCategory.CLAIMING,
requiredType = RequiredType.PLAYER, confirmation = true) public class Owner extends SetCommand { requiredType = RequiredType.NONE, confirmation = true) public class Owner extends SetCommand {
@Override public boolean set(final PlotPlayer player, final Plot plot, String value) { @Override public boolean set(final PlotPlayer player, final Plot plot, String value) {
Set<Plot> plots = plot.getConnectedPlots(); Set<Plot> plots = plot.getConnectedPlots();

View File

@ -22,8 +22,8 @@ import com.github.intellectualsites.plotsquared.plot.util.TaskManager;
"$2>> $1&lAuthors$2: $1Citymonstret $2& $1Empire92 $2& $1MattBDev $2& $1dordsor21"); "$2>> $1&lAuthors$2: $1Citymonstret $2& $1Empire92 $2& $1MattBDev $2& $1dordsor21");
MainUtil.sendMessage(player, MainUtil.sendMessage(player,
"$2>> $1&lWiki$2: $1https://github.com/IntellectualSites/PlotSquared/wiki"); "$2>> $1&lWiki$2: $1https://github.com/IntellectualSites/PlotSquared/wiki");
MainUtil.sendMessage(player, // MainUtil.sendMessage(player,
"$2>> $1&lNewest Version$2: $1" + getNewestVersionString()); // "$2>> $1&lNewest Version$2: $1" + getNewestVersionString());
} }
}); });
return true; return true;

View File

@ -19,7 +19,7 @@ import java.util.UUID;
@CommandDeclaration(command = "remove", aliases = {"r", "untrust", "ut", "undeny", "unban", "ud"}, @CommandDeclaration(command = "remove", aliases = {"r", "untrust", "ut", "undeny", "unban", "ud"},
description = "Remove a player from a plot", usage = "/plot remove <player>", description = "Remove a player from a plot", usage = "/plot remove <player>",
category = CommandCategory.SETTINGS, requiredType = RequiredType.PLAYER, category = CommandCategory.SETTINGS, requiredType = RequiredType.NONE,
permission = "plots.remove") public class Remove extends SubCommand { permission = "plots.remove") public class Remove extends SubCommand {
public Remove() { public Remove() {

View File

@ -158,8 +158,7 @@ public class SchematicCmd extends SubCommand {
} }
Collection<Plot> plots = area.getPlots(); Collection<Plot> plots = area.getPlots();
if (plots.isEmpty()) { if (plots.isEmpty()) {
MainUtil MainUtil.sendMessage(player, Captions.SCHEMATIC_EXPORTALL_WORLD);
.sendMessage(player, Captions.SCHEMATIC_EXPORTALL_WORLD);
return false; return false;
} }
boolean result = SchematicHandler.manager.exportAll(plots, null, null, boolean result = SchematicHandler.manager.exportAll(plots, null, null,
@ -169,7 +168,7 @@ public class SchematicCmd extends SubCommand {
return false; return false;
} else { } else {
MainUtil.sendMessage(player, Captions.SCHEMATIC_EXPORTALL_STARTED); MainUtil.sendMessage(player, Captions.SCHEMATIC_EXPORTALL_STARTED);
MainUtil.sendMessage(player, Captions.SCHEMATIC_EXPORTALL_COUNT, plots.size()); MainUtil.sendMessage(player, "&3Plot&8->&3Schematic&8: &7Found &c" + plots.size() + "&7 plots...");
} }
break; break;
} }

View File

@ -10,7 +10,6 @@ import com.github.intellectualsites.plotsquared.plot.flag.FlagManager;
import com.github.intellectualsites.plotsquared.plot.flag.Flags; import com.github.intellectualsites.plotsquared.plot.flag.Flags;
import com.github.intellectualsites.plotsquared.plot.object.BlockBucket; import com.github.intellectualsites.plotsquared.plot.object.BlockBucket;
import com.github.intellectualsites.plotsquared.plot.object.Plot; import com.github.intellectualsites.plotsquared.plot.object.Plot;
import com.github.intellectualsites.plotsquared.plot.object.PlotArea;
import com.github.intellectualsites.plotsquared.plot.object.PlotBlock; import com.github.intellectualsites.plotsquared.plot.object.PlotBlock;
import com.github.intellectualsites.plotsquared.plot.object.PlotManager; import com.github.intellectualsites.plotsquared.plot.object.PlotManager;
import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer; import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer;
@ -45,7 +44,6 @@ import java.util.stream.IntStream;
} }
@Override public boolean set(PlotPlayer player, final Plot plot, String value) { @Override public boolean set(PlotPlayer player, final Plot plot, String value) {
PlotArea plotArea = player.getLocation().getPlotArea();
PlotManager manager = player.getLocation().getPlotManager(); PlotManager manager = player.getLocation().getPlotManager();
String[] components = manager.getPlotComponents(plot.getId()); String[] components = manager.getPlotComponents(plot.getId());
boolean allowUnsafe = DebugAllowUnsafe.unsafeAllowed.contains(player.getUUID()); boolean allowUnsafe = DebugAllowUnsafe.unsafeAllowed.contains(player.getUUID());

View File

@ -11,8 +11,8 @@ import com.github.intellectualsites.plotsquared.plot.util.StringMan;
public abstract class SetCommand extends SubCommand { public abstract class SetCommand extends SubCommand {
@Override public boolean onCommand(PlotPlayer player, String[] args) { @Override public boolean onCommand(PlotPlayer player, String[] args) {
Location loc = player.getLocation(); Location location = player.getLocation();
Plot plot = loc.getPlotAbs(); Plot plot = location.getPlotAbs();
if (plot == null) { if (plot == null) {
return !sendMessage(player, Captions.NOT_IN_PLOT); return !sendMessage(player, Captions.NOT_IN_PLOT);
} }

View File

@ -25,11 +25,10 @@ public class SetHome extends SetCommand {
} }
case "": case "":
Plot base = plot.getBasePlot(false); Plot base = plot.getBasePlot(false);
Location bot = base.getBottomAbs(); Location bottom = base.getBottomAbs();
Location loc = player.getLocationFull(); Location location = player.getLocationFull();
BlockLoc rel = BlockLoc rel = new BlockLoc(location.getX() - bottom.getX(), location.getY(),
new BlockLoc(loc.getX() - bot.getX(), loc.getY(), loc.getZ() - bot.getZ(), location.getZ() - bottom.getZ(), location.getYaw(), location.getPitch());
loc.getYaw(), loc.getPitch());
base.setHome(rel); base.setHome(rel);
return MainUtil.sendMessage(player, Captions.POSITION_SET); return MainUtil.sendMessage(player, Captions.POSITION_SET);
default: default:

View File

@ -16,8 +16,8 @@ import com.github.intellectualsites.plotsquared.plot.util.SetupUtils;
import com.github.intellectualsites.plotsquared.plot.util.StringMan; import com.github.intellectualsites.plotsquared.plot.util.StringMan;
import com.github.intellectualsites.plotsquared.plot.util.WorldUtil; import com.github.intellectualsites.plotsquared.plot.util.WorldUtil;
import lombok.*; import lombok.*;
import org.jetbrains.annotations.Nullable;
import javax.annotation.Nullable;
import java.util.*; import java.util.*;
import java.util.Map.Entry; import java.util.Map.Entry;
@ -288,6 +288,11 @@ import java.util.Map.Entry;
MainUtil.sendMessage(player, "&cYou need to choose a world name!"); MainUtil.sendMessage(player, "&cYou need to choose a world name!");
return false; return false;
} }
if (!d(args[0])) {
MainUtil.sendMessage(player,
"Non [a-z0-9_.-] character in the world name: " + args[0]);
return false;
}
if (WorldUtil.IMP.isWorld(args[0])) { if (WorldUtil.IMP.isWorld(args[0])) {
if (PlotSquared.get().hasPlotArea(args[0])) { if (PlotSquared.get().hasPlotArea(args[0])) {
MainUtil.sendMessage(player, "&cThat world name is already taken!"); MainUtil.sendMessage(player, "&cThat world name is already taken!");
@ -317,6 +322,11 @@ import java.util.Map.Entry;
return false; return false;
} }
private static boolean d(String s) {
return s.chars().allMatch((i) -> {
return i == 95 || i == 45 || i >= 97 && i <= 122 || i >= 48 && i <= 57 || i == 46;
});
}
private static final class StepPickGenerator extends SetupStep { private static final class StepPickGenerator extends SetupStep {
@Getter private String generator; @Getter private String generator;

View File

@ -13,8 +13,8 @@ import com.github.intellectualsites.plotsquared.plot.util.Permissions;
public class Swap extends SubCommand { public class Swap extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, String[] args) { @Override public boolean onCommand(final PlotPlayer player, String[] args) {
Location loc = player.getLocation(); Location location = player.getLocation();
Plot plot1 = loc.getPlotAbs(); Plot plot1 = location.getPlotAbs();
if (plot1 == null) { if (plot1 == null) {
return !MainUtil.sendMessage(player, Captions.NOT_IN_PLOT); return !MainUtil.sendMessage(player, Captions.NOT_IN_PLOT);
} }

View File

@ -9,10 +9,9 @@ import com.github.intellectualsites.plotsquared.plot.object.RunnableVal3;
import com.github.intellectualsites.plotsquared.plot.util.MainUtil; import com.github.intellectualsites.plotsquared.plot.util.MainUtil;
@CommandDeclaration(command = "toggle", aliases = {"attribute"}, permission = "plots.use", @CommandDeclaration(command = "toggle", aliases = {"attribute"}, permission = "plots.use",
usage = "/plot toggle <chat|chatspy|clear-confirmation|titles|worldedit>", usage = "/plot toggle <chat|chatspy|clear-confirmation|time|titles|worldedit>",
description = "Toggle per user settings", requiredType = RequiredType.NONE, description = "Toggle per user settings", requiredType = RequiredType.NONE,
category = CommandCategory.SETTINGS) public class Toggle extends Command { category = CommandCategory.SETTINGS) public class Toggle extends Command {
public Toggle() { public Toggle() {
super(MainCommand.getInstance(), true); super(MainCommand.getInstance(), true);
} }
@ -77,6 +76,18 @@ import com.github.intellectualsites.plotsquared.plot.util.MainUtil;
} }
} }
@CommandDeclaration(command = "time", permission = "plots.toggle.time",
description = "Toggle plot time settings")
public void time(Command command, PlotPlayer player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) {
if (toggle(player, "disabletime")) {
MainUtil.sendMessage(player, Captions.TOGGLE_ENABLED, command.toString());
} else {
MainUtil.sendMessage(player, Captions.TOGGLE_DISABLED, command.toString());
}
}
public boolean toggle(PlotPlayer player, String key) { public boolean toggle(PlotPlayer player, String key) {
if (player.getAttribute(key)) { if (player.getAttribute(key)) {
player.removeAttribute(key); player.removeAttribute(key);

View File

@ -5,7 +5,11 @@ import com.github.intellectualsites.plotsquared.plot.config.Captions;
import com.github.intellectualsites.plotsquared.plot.object.Location; import com.github.intellectualsites.plotsquared.plot.object.Location;
import com.github.intellectualsites.plotsquared.plot.object.Plot; import com.github.intellectualsites.plotsquared.plot.object.Plot;
import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer; import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer;
import com.github.intellectualsites.plotsquared.plot.util.*; import com.github.intellectualsites.plotsquared.plot.util.CmdConfirm;
import com.github.intellectualsites.plotsquared.plot.util.MainUtil;
import com.github.intellectualsites.plotsquared.plot.util.Permissions;
import com.github.intellectualsites.plotsquared.plot.util.StringMan;
import com.github.intellectualsites.plotsquared.plot.util.TaskManager;
@CommandDeclaration(command = "unlink", aliases = {"u", "unmerge"}, @CommandDeclaration(command = "unlink", aliases = {"u", "unmerge"},
description = "Unlink a mega-plot", usage = "/plot unlink [createroads]", description = "Unlink a mega-plot", usage = "/plot unlink [createroads]",
@ -13,9 +17,8 @@ import com.github.intellectualsites.plotsquared.plot.util.*;
public class Unlink extends SubCommand { public class Unlink extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, String[] args) { @Override public boolean onCommand(final PlotPlayer player, String[] args) {
Location location = player.getLocation();
Location loc = player.getLocation(); final Plot plot = location.getPlotAbs();
final Plot plot = loc.getPlotAbs();
if (plot == null) { if (plot == null) {
return !sendMessage(player, Captions.NOT_IN_PLOT); return !sendMessage(player, Captions.NOT_IN_PLOT);
} }

View File

@ -5,7 +5,8 @@ import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer;
@CommandDeclaration(command = "weanywhere", permission = "plots.worldedit.bypass", @CommandDeclaration(command = "weanywhere", permission = "plots.worldedit.bypass",
description = "Force bypass of WorldEdit restrictions", aliases = {"wea"}, usage = "/plot weanywhere", description = "Force bypass of WorldEdit restrictions", aliases = {"wea"}, usage = "/plot weanywhere",
requiredType = RequiredType.NONE, category = CommandCategory.ADMINISTRATION) @Deprecated requiredType = RequiredType.NONE, category = CommandCategory.ADMINISTRATION)
@Deprecated
public class WE_Anywhere extends SubCommand { public class WE_Anywhere extends SubCommand {
@Override public boolean onCommand(PlotPlayer player, String[] arguments) { @Override public boolean onCommand(PlotPlayer player, String[] arguments) {

View File

@ -59,8 +59,8 @@ public enum Captions {
PERMISSION_ADMIN_ENTRY_DENIED("plots.admin.entry.denied", "static.permissions"), PERMISSION_ADMIN_ENTRY_DENIED("plots.admin.entry.denied", "static.permissions"),
PERMISSION_ADMIN_ENTRY_FORCEFIELD("plots.admin.entry.forcefield", "static.permissions"), PERMISSION_ADMIN_ENTRY_FORCEFIELD("plots.admin.entry.forcefield", "static.permissions"),
PERMISSION_COMMANDS_CHAT("plots.admin.command.chat", "static.permissions"), PERMISSION_COMMANDS_CHAT("plots.admin.command.chat", "static.permissions"),
PERMISSION_MERGE_OTHER("plots.merge.other", "static.permissions"), PERMISSION_MERGE_OTHER("plots.merge.other", "static.permissions"), PERMISSION_MERGE_KEEP_ROAD(
PERMISSION_MERGE_KEEP_ROAD("plots.merge.keeproad", "static.permissions"), "plots.merge.keeproad", "static.permissions"),
PERMISSION_ADMIN_DESTROY_UNOWNED("plots.admin.destroy.unowned", "static.permissions"), PERMISSION_ADMIN_DESTROY_UNOWNED("plots.admin.destroy.unowned", "static.permissions"),
PERMISSION_ADMIN_DESTROY_GROUNDLEVEL("plots.admin.destroy.groundlevel", "static.permissions"), PERMISSION_ADMIN_DESTROY_GROUNDLEVEL("plots.admin.destroy.groundlevel", "static.permissions"),
PERMISSION_ADMIN_DESTROY_OTHER("plots.admin.destroy.other", "static.permissions"), PERMISSION_ADMIN_DESTROY_OTHER("plots.admin.destroy.other", "static.permissions"),
@ -70,8 +70,8 @@ public enum Captions {
PERMISSION_ADMIN_BUILD_OTHER("plots.admin.build.other", "static.permissions"), PERMISSION_ADMIN_BUILD_OTHER("plots.admin.build.other", "static.permissions"),
PERMISSION_ADMIN_INTERACT_ROAD("plots.admin.interact.road", "static.permissions"), PERMISSION_ADMIN_INTERACT_ROAD("plots.admin.interact.road", "static.permissions"),
PERMISSION_ADMIN_INTERACT_UNOWNED("plots.admin.interact.unowned", "static.permissions"), PERMISSION_ADMIN_INTERACT_UNOWNED("plots.admin.interact.unowned", "static.permissions"),
PERMISSION_ADMIN_INTERACT_OTHER("plots.admin.interact.other", "static.permissions"), PERMISSION_ADMIN_INTERACT_OTHER("plots.admin.interact.other", "static.permissions"), PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT(
PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT("plots.admin.build.heightlimit", "static.permissions"), "plots.admin.build.heightlimit", "static.permissions"),
PERMISSION_ADMIN_UPDATE("plots.admin.command.update", "static.permissions"), PERMISSION_ADMIN_UPDATE("plots.admin.command.update", "static.permissions"),
PERMISSION_ADMIN_COMMAND_RATE("plots.admin.command.rate", "static.permissions"), PERMISSION_ADMIN_COMMAND_RATE("plots.admin.command.rate", "static.permissions"),
PERMISSION_ADMIN_COMMAND_TRUST("plots.admin.command.trust", "static.permissions"), PERMISSION_ADMIN_COMMAND_TRUST("plots.admin.command.trust", "static.permissions"),
@ -124,8 +124,8 @@ public enum Captions {
PERMISSION_FLAG_ADD("plots.flag.add", "static.permissions"), PERMISSION_FLAG_ADD("plots.flag.add", "static.permissions"),
PERMISSION_FLAG_LIST("plots.flag.list", "static.permissions"), PERMISSION_FLAG_LIST("plots.flag.list", "static.permissions"),
PERMISSION_ADMIN_COMMAND_KICK("plots.admin.command.kick", "static.permissions"), PERMISSION_ADMIN_COMMAND_KICK("plots.admin.command.kick", "static.permissions"),
PERMISSION_GRANT("plots.grant.%s0", "static.permissions"), PERMISSION_GRANT("plots.grant.%s0", "static.permissions"), PERMISSION_LIST_FOR_SALE(
PERMISSION_LIST_FOR_SALE("plots.list.forsale", "static.permissions"), "plots.list.forsale", "static.permissions"),
PERMISSION_LIST_MINE("plots.list.mine", "static.permissions"), PERMISSION_LIST_MINE("plots.list.mine", "static.permissions"),
PERMISSION_LIST_SHARED("plots.list.shared", "static.permissions"), PERMISSION_LIST_SHARED("plots.list.shared", "static.permissions"),
PERMISSION_LIST_WORLD("plots.list.world", "static.permissions"), PERMISSION_LIST_WORLD("plots.list.world", "static.permissions"),
@ -140,8 +140,8 @@ public enum Captions {
PERMISSION_LIST_FUZZY("plots.list.fuzzy", "static.permissions"), PERMISSION_LIST_FUZZY("plots.list.fuzzy", "static.permissions"),
PERMISSION_LIST_AREA("plots.list.area", "static.permissions"), PERMISSION_LIST_AREA("plots.list.area", "static.permissions"),
PERMISSION_ADMIN_COMMAND_LOAD("plots.admin.command.load", "static.permissions"), PERMISSION_ADMIN_COMMAND_LOAD("plots.admin.command.load", "static.permissions"),
PERMISSION_ADMIN_COMMAND_MERGE("plots.admin.command.merge", "static.permissions"), PERMISSION_ADMIN_COMMAND_MERGE("plots.admin.command.merge", "static.permissions"), PERMISSION_ADMIN_COMMAND_SET_OWNER(
PERMISSION_ADMIN_COMMAND_SET_OWNER("plots.admin.command.setowner", "static.permissions"), "plots.admin.command.setowner", "static.permissions"),
PERMISSION_COMMENT("plots.comment", "static.permissions"), PERMISSION_COMMENT("plots.comment", "static.permissions"),
PERMISSION_ADMIN_COMMAND_REMOVE("plots.admin.command.remove", "static.permissions"), PERMISSION_ADMIN_COMMAND_REMOVE("plots.admin.command.remove", "static.permissions"),
PERMISSION_ADMIN_COMMAND_SAVE("plots.admin.command.save", "static.permissions"), PERMISSION_ADMIN_COMMAND_SAVE("plots.admin.command.save", "static.permissions"),
@ -224,15 +224,9 @@ public enum Captions {
//</editor-fold> //</editor-fold>
//<editor-fold desc="Border"> //<editor-fold desc="Border">
BORDER("$2You are outside the current map border", "Border"), BORDER("$2You are outside the current map border", "Border"),
//</editor-fold>
//<editor-fold desc="WorldEdit Masks">
WORLDEDIT_BYPASS("$2&oTo bypass your restrictions use $4/plot wea", "WorldEdit Masks"), WORLDEDIT_BYPASS("$2&oTo bypass your restrictions use $4/plot wea", "WorldEdit Masks"),
WORLDEDIT_BYPASSED("$2Currently bypassing WorldEdit restriction.", "WorldEdit Masks"), WORLDEDIT_BYPASSED("$2Currently bypassing WorldEdit restriction.", "WorldEdit Masks"),
//</editor-fold> GAMEMODE_WAS_BYPASSED("$1You bypassed the GameMode ($2{gamemode}$1) $1set for $2{plot}", "GameMode"),
//<editor-fold desc="GameMode">
GAMEMODE_WAS_BYPASSED("$1You bypassed the gamemode ($2{gamemode}$1) $1set for $2{plot}", "GameMode"),
//</editor-fold>
//<editor-fold desc="Height Limit">
HEIGHT_LIMIT("$1This plot area has a height limit of $2{limit}", "Height Limit"), HEIGHT_LIMIT("$1This plot area has a height limit of $2{limit}", "Height Limit"),
//</editor-fold> //</editor-fold>
//<editor-fold desc="Records"> //<editor-fold desc="Records">
@ -244,9 +238,8 @@ public enum Captions {
SWAP_DIMENSIONS("$2The proposed areas must have comparable dimensions", "Swap"), SWAP_DIMENSIONS("$2The proposed areas must have comparable dimensions", "Swap"),
SWAP_SYNTAX("$2/plot swap <id>", "Swap"), SWAP_SYNTAX("$2/plot swap <id>", "Swap"),
SWAP_SUCCESS("$4Successfully swapped plots", "Swap"), SWAP_SUCCESS("$4Successfully swapped plots", "Swap"),
STARTED_SWAP("$2Started plot swap task. You will be notified when it finishes", "Swap"),
//</editor-fold> //</editor-fold>
//<editor-fold desc="Comment"> //<editor-fold desc="Comments">
INBOX_NOTIFICATION("%s unread messages. Use /plot inbox", "Comment"), INBOX_NOTIFICATION("%s unread messages. Use /plot inbox", "Comment"),
NOT_VALID_INBOX_INDEX("$2No comment at index %s", "Comment"), NOT_VALID_INBOX_INDEX("$2No comment at index %s", "Comment"),
INBOX_ITEM("$2 - $4%s", "Comment"), INBOX_ITEM("$2 - $4%s", "Comment"),
@ -271,8 +264,6 @@ public enum Captions {
//<editor-fold desc="Toggle"> //<editor-fold desc="Toggle">
TOGGLE_ENABLED("$2Enabled setting: %s", "Toggle"), TOGGLE_ENABLED("$2Enabled setting: %s", "Toggle"),
TOGGLE_DISABLED("$2Disabled setting: %s", "Toggle"), TOGGLE_DISABLED("$2Disabled setting: %s", "Toggle"),
//</editor-fold>
//<editor-fold desc="Blocked Command">
COMMAND_BLOCKED("$2That command is not allowed in this plot", "Blocked Command"), COMMAND_BLOCKED("$2That command is not allowed in this plot", "Blocked Command"),
//</editor-fold> //</editor-fold>
//<editor-fold desc="Done"> //<editor-fold desc="Done">
@ -317,17 +308,21 @@ public enum Captions {
"$4You should have been teleported to the created world. Otherwise you will need to set the generator manually using the bukkit.yml or " "$4You should have been teleported to the created world. Otherwise you will need to set the generator manually using the bukkit.yml or "
+ "your chosen world management plugin.", "Setup"), + "your chosen world management plugin.", "Setup"),
SETUP_WORLD_TAKEN("$2%s is already a world", "Setup"), SETUP_WORLD_TAKEN("$2%s is already a world", "Setup"),
SETUP_MISSING_WORLD( SETUP_MISSING_WORLD(
"$2You need to specify a world name ($1/plot setup &l<world>$1 <generator>$2)&-$1Additional commands:&-$2 - $1/plot setup <value>&-$2 -" "$2You need to specify a world name ($1/plot setup &l<world>$1 <generator>$2)&-$1Additional commands:&-$2 - $1/plot setup <value>&-$2 -"
+ " $1/plot setup back&-$2 - $1/plot setup cancel", "Setup"), + " $1/plot setup back&-$2 - $1/plot setup cancel", "Setup"),
SETUP_MISSING_GENERATOR( SETUP_MISSING_GENERATOR(
"$2You need to specify a generator ($1/plot setup <world> &l<generator>&r$2)&-$1Additional commands:&-$2 - $1/plot setup <value>&-$2 - " "$2You need to specify a generator ($1/plot setup <world> &l<generator>&r$2)&-$1Additional commands:&-$2 - $1/plot setup <value>&-$2 - "
+ "$1/plot setup back&-$2 - $1/plot setup cancel", "Setup"), + "$1/plot setup back&-$2 - $1/plot setup cancel", "Setup"),
SETUP_INVALID_GENERATOR("$2Invalid generator. Possible options: %s", "Setup"), SETUP_INVALID_GENERATOR("$2Invalid generator. Possible options: %s", "Setup"),
//</editor-fold> //</editor-fold>
//<editor-fold desc="Schematics"> //<editor-fold desc="Schematic">
SCHEMATIC_TOO_LARGE("$2The plot is too large for this action!", "Schematics"), SCHEMATIC_TOO_LARGE("$2The plot is too large for this action!",
"Schematics"),
SCHEMATIC_MISSING_ARG("$2You need to specify an argument. Possible values: $1test <name>$2 , $1save$2 , $1paste $2, $1exportall$2, $1list", "Schematics"), SCHEMATIC_MISSING_ARG("$2You need to specify an argument. Possible values: $1test <name>$2 , $1save$2 , $1paste $2, $1exportall$2, $1list", "Schematics"),
SCHEMATIC_INVALID("$2That is not a valid schematic. Reason: $2%s", "Schematics"), SCHEMATIC_INVALID("$2That is not a valid schematic. Reason: $2%s", "Schematics"),
SCHEMATIC_VALID("$2That is a valid schematic", "Schematics"), SCHEMATIC_VALID("$2That is a valid schematic", "Schematics"),
SCHEMATIC_PASTE_FAILED("$2Failed to paste the schematic", "Schematics"), SCHEMATIC_PASTE_FAILED("$2Failed to paste the schematic", "Schematics"),
@ -336,12 +331,13 @@ public enum Captions {
SCHEMATIC_ROAD_CREATED("$1Saved new road schematic. To test the schematic, fly to a few other plots and run /plot debugroadregen", "Schematics"), SCHEMATIC_ROAD_CREATED("$1Saved new road schematic. To test the schematic, fly to a few other plots and run /plot debugroadregen", "Schematics"),
MCA_FILE_SIZE("$1Note: The `.mca` files are 512x512", "Schematics"), MCA_FILE_SIZE("$1Note: The `.mca` files are 512x512", "Schematics"),
SCHEMATIC_EXPORTALL_STARTED("$1Starting export...", "Schematics"), SCHEMATIC_EXPORTALL_STARTED("$1Starting export...", "Schematics"),
SCHEMATIC_EXPORTALL_WORLD_ARGS("$1Need world argument. Use $3/plot schem exportall <area>", "Schematics"), SCHEMATIC_EXPORTALL_WORLD_ARGS("$1Need world argument. Use $3/plot sch exportall <area>", "Schematics"),
SCHEMATIC_EXPORTALL_WORLD("$1Invalid world. Use &3/plot sch exportall <area>", "Schematics"), SCHEMATIC_EXPORTALL_WORLD("$1Invalid world. Use &3/plot sch exportall <area>", "Schematic"),
SCHEMATIC_EXPORTALL_MASS_STARTED("$1Schematic mass export has been started. This may take a while", "Schematicss"), SCHEMATIC_EXPORTALL_MASS_STARTED("$1Schematic mass export has been started. This may take a while", "Schematics"),
SCHEMATIC_EXPORTALL_COUNT("$1Found $3%s $1plots...", "Schematics"), SCHEMATIC_EXPORTALL_COUNT("$1Found $3%s $1plots...", "Schematics"),
SCHEMATIC_EXPORTALL_FINISHED("$1Finished mass export", "Schematics"), SCHEMATIC_EXPORTALL_FINISHED("$1Finished mass export", "Schematics"),
SCHEMATIC_EXPORTALL_SINGLE_FINISHED("$1Finished export", "Schematics"), SCHEMATIC_EXPORTALL_SINGLE_FINISHED("$1Finished export", "Schematics"),
TASK_IN_PROCESS("$1Task is already running.", "Error"),
//</editor-fold> //</editor-fold>
//<editor-fold desc="Titles"> //<editor-fold desc="Titles">
TITLE_ENTERED_PLOT("$1Plot: %world%;%x%;%z%", "Titles"), TITLE_ENTERED_PLOT("$1Plot: %world%;%x%;%z%", "Titles"),
@ -357,13 +353,14 @@ public enum Captions {
RELOADED_CONFIGS("$1Translations and world settings have been reloaded", "Reload"), RELOADED_CONFIGS("$1Translations and world settings have been reloaded", "Reload"),
RELOAD_FAILED("$2Failed to reload file configurations", "Reload"), RELOAD_FAILED("$2Failed to reload file configurations", "Reload"),
//</editor-fold> //</editor-fold>
//<editor-fold desc="Desc"> //<editor-fold desc="Description">
DESC_SET("$2Plot description set", "Desc"), DESC_SET("$2Plot description set", "Desc"),
DESC_UNSET("$2Plot description unset", "Desc"), DESC_UNSET("$2Plot description unset", "Desc"),
//</editor-fold> //</editor-fold>
//<editor-fold desc="Alias"> //<editor-fold desc="Alias">
ALIAS_SET_TO("$2Plot alias set to $1%alias%", "Alias"), ALIAS_SET_TO("$2Plot alias set to $1%alias%", "Alias"),
ALIAS_REMOVED("$2Plot alias removed", "Alias"), ALIAS_REMOVED("$2Plot alias removed", "Alias"),
ALIAS_TOO_LONG("$2The alias must be < 50 characters in length", "Alias"), ALIAS_TOO_LONG("$2The alias must be < 50 characters in length", "Alias"),
ALIAS_IS_TAKEN("$2That alias is already taken", "Alias"), ALIAS_IS_TAKEN("$2That alias is already taken", "Alias"),
//</editor-fold> //</editor-fold>
@ -379,6 +376,7 @@ public enum Captions {
NO_PLOT_PERMS("$2You must be the plot owner to perform this action", "Permission"), NO_PLOT_PERMS("$2You must be the plot owner to perform this action", "Permission"),
CANT_CLAIM_MORE_PLOTS("$2You can't claim more plots.", "Permission"), CANT_CLAIM_MORE_PLOTS("$2You can't claim more plots.", "Permission"),
CANT_CLAIM_MORE_CLUSTERS("$2You can't claim more clusters.", "Permission"), CANT_CLAIM_MORE_CLUSTERS("$2You can't claim more clusters.", "Permission"),
CANT_TRANSFER_MORE_PLOTS("$2You can't send more plots to that user", "Permission"), CANT_TRANSFER_MORE_PLOTS("$2You can't send more plots to that user", "Permission"),
CANT_CLAIM_MORE_PLOTS_NUM("$2You can't claim more than $1%s $2plots at once", "Permission"), CANT_CLAIM_MORE_PLOTS_NUM("$2You can't claim more than $1%s $2plots at once", "Permission"),
//</editor-fold> //</editor-fold>
@ -390,8 +388,8 @@ public enum Captions {
MERGE_REQUEST_CONFIRM("Merge request from %s", "Permission"), MERGE_REQUEST_CONFIRM("Merge request from %s", "Permission"),
NO_PERM_MERGE("$2You are not the owner of the plot: $1%plot%", "Merge"), NO_PERM_MERGE("$2You are not the owner of the plot: $1%plot%", "Merge"),
NO_AVAILABLE_AUTOMERGE("$2You do not own any adjacent plots in the specified direction or are not allowed to merge to the required size.", "Merge"), NO_AVAILABLE_AUTOMERGE("$2You do not own any adjacent plots in the specified direction or are not allowed to merge to the required size.", "Merge"),
UNMERGE_CANCELLED("$1Unlink has been cancelled", "Merge"),
UNLINK_IMPOSSIBLE("$2You can only unlink a mega-plot", "Merge"), UNLINK_IMPOSSIBLE("$2You can only unlink a mega-plot", "Merge"),
UNMERGE_CANCELLED("$1Unlink has been cancelled", "Merge"),
UNLINK_SUCCESS("$2Successfully unlinked plots.", "Merge"), UNLINK_SUCCESS("$2Successfully unlinked plots.", "Merge"),
//</editor-fold> //</editor-fold>
//<editor-fold desc="CommandConfig"> //<editor-fold desc="CommandConfig">
@ -416,14 +414,9 @@ public enum Captions {
NOT_VALID_PLOT_WORLD("$2That is not a valid plot area (case sensitive)", "Errors"), NOT_VALID_PLOT_WORLD("$2That is not a valid plot area (case sensitive)", "Errors"),
NO_PLOTS("$2You don't have any plots", "Errors"), NO_PLOTS("$2You don't have any plots", "Errors"),
WAIT_FOR_TIMER("$2A set block timer is bound to either the current plot or you. Please wait for it to finish", "Errors"), WAIT_FOR_TIMER("$2A set block timer is bound to either the current plot or you. Please wait for it to finish", "Errors"),
TASK_IN_PROCESS("$1Task is already running.", "Error"),
//</editor-fold> //</editor-fold>
//<editor-fold desc="Paste">
DEBUG_REPORT_CREATED("$1Uploaded a full debug to: $1%url%", "Paste"), DEBUG_REPORT_CREATED("$1Uploaded a full debug to: $1%url%", "Paste"),
//</editor-fold>
//<editor-fold desc="Purge">
PURGE_SUCCESS("$4Successfully purged %s plots", "Purge"), PURGE_SUCCESS("$4Successfully purged %s plots", "Purge"),
//</editor-fold>
//<editor-fold desc="Trim"> //<editor-fold desc="Trim">
TRIM_IN_PROGRESS("A world trim task is already in progress!", "Trim"), TRIM_IN_PROGRESS("A world trim task is already in progress!", "Trim"),
//</editor-fold> //</editor-fold>
@ -443,7 +436,7 @@ public enum Captions {
//<editor-fold desc="Set Block"> //<editor-fold desc="Set Block">
SET_BLOCK_ACTION_FINISHED("$1The last setblock action is now finished.", "Set Block"), SET_BLOCK_ACTION_FINISHED("$1The last setblock action is now finished.", "Set Block"),
//</editor-fold> //</editor-fold>
//<editor-fold desc="unsafe"> //<editor-fold desc="AllowUnsafe">
DEBUGALLOWUNSAFE_ON("$2Unsafe actions allowed", "unsafe"), DEBUGALLOWUNSAFE_ON("$2Unsafe actions allowed", "unsafe"),
DEBUGALLOWUNSAFE_OFF("$2Unsafe actions disabled", "unsafe"), DEBUGALLOWUNSAFE_OFF("$2Unsafe actions disabled", "unsafe"),
//</editor-fold> //</editor-fold>
@ -529,9 +522,7 @@ public enum Captions {
YOU_GOT_DENIED("$4You are denied from the plot you were previously on, and got teleported to spawn", "Deny"), YOU_GOT_DENIED("$4You are denied from the plot you were previously on, and got teleported to spawn", "Deny"),
CANT_REMOVE_OWNER("$2You can't remove the plot owner", "Deny"), CANT_REMOVE_OWNER("$2You can't remove the plot owner", "Deny"),
//</editor-fold> //</editor-fold>
//<editor-fold desc="Kick">
YOU_GOT_KICKED("$4You got kicked!", "Kick"), YOU_GOT_KICKED("$4You got kicked!", "Kick"),
//</editor-fold>
//<editor-fold desc="Flag"> //<editor-fold desc="Flag">
FLAG_KEY("$2Key: %s", "Flag"), FLAG_KEY("$2Key: %s", "Flag"),
FLAG_TYPE("$2Type: %s", "Flag"), FLAG_TYPE("$2Type: %s", "Flag"),
@ -547,6 +538,7 @@ public enum Captions {
//</editor-fold> //</editor-fold>
//<editor-fold desc="Trusted"> //<editor-fold desc="Trusted">
TRUSTED_ADDED("$4You successfully trusted a user to the plot", "Trusted"), TRUSTED_ADDED("$4You successfully trusted a user to the plot", "Trusted"),
WAS_NOT_ADDED("$2That player was not trusted on this plot", "Trusted"),
PLOT_REMOVED_USER("$1Plot %s of which you were added to has been deleted due to owner inactivity", "Trusted"), PLOT_REMOVED_USER("$1Plot %s of which you were added to has been deleted due to owner inactivity", "Trusted"),
//</editor-fold> //</editor-fold>
//<editor-fold desc="Member"> //<editor-fold desc="Member">
@ -554,10 +546,9 @@ public enum Captions {
ALREADY_OWNER("$2That user is already the plot owner: %s0", "Member"), ALREADY_OWNER("$2That user is already the plot owner: %s0", "Member"),
ALREADY_ADDED("$2That user is already added to that category: %s0", "Member"), ALREADY_ADDED("$2That user is already added to that category: %s0", "Member"),
MEMBER_ADDED("$4That user can now build while the plot owner is online", "Member"), MEMBER_ADDED("$4That user can now build while the plot owner is online", "Member"),
MEMBER_WAS_NOT_ADDED("$2That player was not added as a user on this plot", "Member"),
PLOT_MAX_MEMBERS("$2You are not allowed to add any more players to this plot", "Member"), PLOT_MAX_MEMBERS("$2You are not allowed to add any more players to this plot", "Member"),
//</editor-fold> //</editor-fold>
//<editor-fold desc="Owner"> //<editor-fold desc="Set Owner">
SET_OWNER("$4You successfully set the plot owner", "Owner"), SET_OWNER("$4You successfully set the plot owner", "Owner"),
SET_OWNER_CANCELLED("$2The set owner action was cancelled", "Owner"), SET_OWNER_CANCELLED("$2The set owner action was cancelled", "Owner"),
NOW_OWNER("$4You are now owner of plot %s", "Owner"), NOW_OWNER("$4You are now owner of plot %s", "Owner"),
@ -577,7 +568,6 @@ public enum Captions {
HELP_DISPLAY_ALL_COMMANDS("Display all commands", "Help"), HELP_DISPLAY_ALL_COMMANDS("Display all commands", "Help"),
DIRECTION("$1Current direction: %dir%", "Help"), DIRECTION("$1Current direction: %dir%", "Help"),
//</editor-fold> //</editor-fold>
//<editor-fold desc="Generator_Bucket">
BUCKET_ENTRIES_IGNORED("$2Total bucket values add up to 1 or more. Blocks without a specified chance will be ignored","Generator_Bucket"), BUCKET_ENTRIES_IGNORED("$2Total bucket values add up to 1 or more. Blocks without a specified chance will be ignored","Generator_Bucket"),
/** /**
@ -593,6 +583,7 @@ public enum Captions {
COMMAND_CATEGORY_DEBUG("Debug", "Category"), COMMAND_CATEGORY_DEBUG("Debug", "Category"),
COMMAND_CATEGORY_ADMINISTRATION("Admin", "Category"), COMMAND_CATEGORY_ADMINISTRATION("Admin", "Category"),
//<editor-fold desc="Grants"> //<editor-fold desc="Grants">
GRANTED_PLOTS("$1Result: $2%s $1grants left", "Grants"), GRANTED_PLOTS("$1Result: $2%s $1grants left", "Grants"),
GRANTED_PLOT("$1You granted %s0 plot to $2%s1", "Grants"), GRANTED_PLOT("$1You granted %s0 plot to $2%s1", "Grants"),
@ -602,16 +593,18 @@ public enum Captions {
/** /**
* Legacy Configuration Conversion * Legacy Configuration Conversion
*/ */
LEGACY_CONFIG_FOUND("A legacy configuration file was detected. Conversion will be attempted.", "LegacyConfig"), LEGACY_CONFIG_FOUND("A legacy configuration file was detected. Conversion will be attempted.",
LEGACY_CONFIG_BACKUP("A copy of worlds.yml $1have been saved in the file worlds.yml.old$1.", "LegacyConfig"), "LegacyConfig"), LEGACY_CONFIG_BACKUP(
LEGACY_CONFIG_REPLACED("> %s has been replaced with %s", "LegacyConfig"), "A copy of worlds.yml $1have been saved in the file worlds.yml.old$1.",
LEGACY_CONFIG_DONE( "LegacyConfig"), LEGACY_CONFIG_REPLACED("> %s has been replaced with %s",
"LegacyConfig"), LEGACY_CONFIG_DONE(
"The conversion has finished. PlotSquared will now be disabled and the new configuration file will" "The conversion has finished. PlotSquared will now be disabled and the new configuration file will"
+ " be used at next startup. Please review the new worlds.yml file. " + " be used at next startup. Please review the new worlds.yml file. "
+ "Please note that schematics will not be converted, as we are now using WorldEdit to handle schematics. " + "Please note that schematics will not be converted, as we are now using WorldEdit to handle schematics. "
+ "You need to re-generate the schematics.", + "You need to re-generate the schematics.",
"LegacyConfig"), LEGACY_CONFIG_CONVERSION_FAILED(
"Failed to convert the legacy configuration file. See stack trace for information.",
"LegacyConfig"), "LegacyConfig"),
LEGACY_CONFIG_CONVERSION_FAILED("Failed to convert the legacy configuration file. See stack trace for information.", "LegacyConfig"),
CUSTOM_STRING("-", "-"); CUSTOM_STRING("-", "-");
//@formatter:on //@formatter:on

View File

@ -1,11 +1,19 @@
package com.github.intellectualsites.plotsquared.plot.database; package com.github.intellectualsites.plotsquared.plot.database;
import com.github.intellectualsites.plotsquared.plot.flag.Flag; import com.github.intellectualsites.plotsquared.plot.flag.Flag;
import com.github.intellectualsites.plotsquared.plot.object.*; import com.github.intellectualsites.plotsquared.plot.object.Plot;
import com.github.intellectualsites.plotsquared.plot.object.PlotArea;
import com.github.intellectualsites.plotsquared.plot.object.PlotCluster;
import com.github.intellectualsites.plotsquared.plot.object.PlotId;
import com.github.intellectualsites.plotsquared.plot.object.RunnableVal;
import com.github.intellectualsites.plotsquared.plot.object.comment.PlotComment; import com.github.intellectualsites.plotsquared.plot.object.comment.PlotComment;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nonnull; import java.util.HashMap;
import java.util.*; import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
public interface AbstractDB { public interface AbstractDB {
@ -297,11 +305,11 @@ public interface AbstractDB {
void setComment(Plot plot, PlotComment comment); void setComment(Plot plot, PlotComment comment);
/** /**
* Gets Plot Comments. * Gets Plot comments.
* *
* @param plot The Plot to get comments from * @param plot The Plot to get comments from
*/ */
void getComments(@Nonnull Plot plot, String inbox, RunnableVal<List<PlotComment>> whenDone); void getComments(@NotNull Plot plot, String inbox, RunnableVal<List<PlotComment>> whenDone);
void createPlotAndSettings(Plot plot, Runnable whenDone); void createPlotAndSettings(Plot plot, Runnable whenDone);

View File

@ -1,13 +1,21 @@
package com.github.intellectualsites.plotsquared.plot.database; package com.github.intellectualsites.plotsquared.plot.database;
import com.github.intellectualsites.plotsquared.plot.flag.Flag; import com.github.intellectualsites.plotsquared.plot.flag.Flag;
import com.github.intellectualsites.plotsquared.plot.object.*; import com.github.intellectualsites.plotsquared.plot.object.Plot;
import com.github.intellectualsites.plotsquared.plot.object.PlotArea;
import com.github.intellectualsites.plotsquared.plot.object.PlotCluster;
import com.github.intellectualsites.plotsquared.plot.object.PlotId;
import com.github.intellectualsites.plotsquared.plot.object.RunnableVal;
import com.github.intellectualsites.plotsquared.plot.object.comment.PlotComment; import com.github.intellectualsites.plotsquared.plot.object.comment.PlotComment;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.ResultSetMetaData; import java.sql.ResultSetMetaData;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.*; import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
/** /**
* Database Functions * Database Functions
@ -74,6 +82,8 @@ public class DBFunc {
DBFunc.dbManager.validateAllPlots(plots); DBFunc.dbManager.validateAllPlots(plots);
} }
//TODO Consider Removal
/** /**
* Check if a {@link ResultSet} contains a column. * Check if a {@link ResultSet} contains a column.
* *
@ -81,7 +91,7 @@ public class DBFunc {
* @param name * @param name
* @return * @return
*/ */
public static boolean hasColumn(ResultSet resultSet, String name) { @Deprecated public static boolean hasColumn(ResultSet resultSet, String name) {
try { try {
ResultSetMetaData meta = resultSet.getMetaData(); ResultSetMetaData meta = resultSet.getMetaData();
int count = meta.getColumnCount(); int count = meta.getColumnCount();

View File

@ -12,8 +12,8 @@ import com.github.intellectualsites.plotsquared.plot.util.MainUtil;
import com.github.intellectualsites.plotsquared.plot.util.StringMan; import com.github.intellectualsites.plotsquared.plot.util.StringMan;
import com.github.intellectualsites.plotsquared.plot.util.TaskManager; import com.github.intellectualsites.plotsquared.plot.util.TaskManager;
import com.google.common.base.Charsets; import com.google.common.base.Charsets;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nonnull;
import java.sql.*; import java.sql.*;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
@ -2170,7 +2170,7 @@ import java.util.concurrent.atomic.AtomicInteger;
}); });
} }
@Override public void getComments(@Nonnull Plot plot, final String inbox, @Override public void getComments(@NotNull Plot plot, final String inbox,
final RunnableVal<List<PlotComment>> whenDone) { final RunnableVal<List<PlotComment>> whenDone) {
addPlotTask(plot, new UniqueStatement("getComments_" + plot) { addPlotTask(plot, new UniqueStatement("getComments_" + plot) {
@Override public void set(PreparedStatement statement) throws SQLException { @Override public void set(PreparedStatement statement) throws SQLException {
@ -2942,7 +2942,7 @@ import java.util.concurrent.atomic.AtomicInteger;
boolean[] pm = plot.getMerged(); boolean[] pm = plot.getMerged();
boolean[] dm = dataPlot.getMerged(); boolean[] dm = dataPlot.getMerged();
if (pm[0] != dm[0] || pm[1] != dm[1]) { if (pm[0] != dm[0] || pm[1] != dm[1]) {
PlotSquared.debug("&8 - &7Correcting merge for: " + plot); PlotSquared.debug(" - Correcting merge for: " + plot);
setMerged(dataPlot, plot.getMerged()); setMerged(dataPlot, plot.getMerged());
} }
HashMap<Flag<?>, Object> pf = plot.getFlags(); HashMap<Flag<?>, Object> pf = plot.getFlags();
@ -2951,7 +2951,7 @@ import java.util.concurrent.atomic.AtomicInteger;
if (pf.size() != df.size() || !StringMan if (pf.size() != df.size() || !StringMan
.isEqual(StringMan.joinOrdered(pf.values(), ","), .isEqual(StringMan.joinOrdered(pf.values(), ","),
StringMan.joinOrdered(df.values(), ","))) { StringMan.joinOrdered(df.values(), ","))) {
PlotSquared.debug("&8 - &7Correcting flags for: " + plot); PlotSquared.debug(" - Correcting flags for: " + plot);
setFlags(plot, pf); setFlags(plot, pf);
} }
} }

View File

@ -47,9 +47,6 @@ public class AugmentedUtils {
continue; continue;
} }
IndependentPlotGenerator generator = area.getGenerator(); IndependentPlotGenerator generator = area.getGenerator();
if (generator == null) {
continue;
}
// Mask // Mask
if (queue == null) { if (queue == null) {
queue = GlobalBlockQueue.IMP.getNewQueue(world, false); queue = GlobalBlockQueue.IMP.getNewQueue(world, false);

View File

@ -24,29 +24,21 @@ public class ClassicPlotManager extends SquarePlotManager {
BlockBucket blocks) { BlockBucket blocks) {
switch (component) { switch (component) {
case "floor": case "floor":
setFloor(plotId, blocks); return setFloor(plotId, blocks);
return true;
case "wall": case "wall":
setWallFilling(plotId, blocks); return setWallFilling(plotId, blocks);
return true;
case "all": case "all":
setAll(plotId, blocks); return setAll(plotId, blocks);
return true;
case "air": case "air":
setAir(plotId, blocks); return setAir(plotId, blocks);
return true;
case "main": case "main":
setMain(plotId, blocks); return setMain(plotId, blocks);
return true;
case "middle": case "middle":
setMiddle(plotId, blocks); return setMiddle(plotId, blocks);
return true;
case "outline": case "outline":
setOutline(plotId, blocks); return setOutline(plotId, blocks);
return true;
case "border": case "border":
setWall(plotId, blocks); return setWall(plotId, blocks);
return true;
} }
return false; return false;
} }
@ -54,8 +46,7 @@ public class ClassicPlotManager extends SquarePlotManager {
@Override public boolean unClaimPlot(Plot plot, Runnable whenDone) { @Override public boolean unClaimPlot(Plot plot, Runnable whenDone) {
setWallFilling(plot.getId(), classicPlotWorld.WALL_FILLING); setWallFilling(plot.getId(), classicPlotWorld.WALL_FILLING);
setWall(plot.getId(), classicPlotWorld.WALL_BLOCK); setWall(plot.getId(), classicPlotWorld.WALL_BLOCK);
GlobalBlockQueue.IMP.addTask(whenDone); return GlobalBlockQueue.IMP.addTask(whenDone);
return true;
} }
public boolean setFloor(PlotId plotId, BlockBucket blocks) { public boolean setFloor(PlotId plotId, BlockBucket blocks) {
@ -70,8 +61,7 @@ public class ClassicPlotManager extends SquarePlotManager {
queue.setCuboid(pos1, pos2, blocks); queue.setCuboid(pos1, pos2, blocks);
} }
} }
queue.enqueue(); return queue.enqueue();
return true;
} }
public boolean setAll(PlotId plotId, BlockBucket blocks) { public boolean setAll(PlotId plotId, BlockBucket blocks) {
@ -86,8 +76,7 @@ public class ClassicPlotManager extends SquarePlotManager {
Location pos2 = new Location(classicPlotWorld.worldname, region.maxX, maxY, region.maxZ); Location pos2 = new Location(classicPlotWorld.worldname, region.maxX, maxY, region.maxZ);
queue.setCuboid(pos1, pos2, blocks); queue.setCuboid(pos1, pos2, blocks);
} }
queue.enqueue(); return queue.enqueue();
return true;
} }
public boolean setAir(PlotId plotId, BlockBucket blocks) { public boolean setAir(PlotId plotId, BlockBucket blocks) {
@ -103,8 +92,7 @@ public class ClassicPlotManager extends SquarePlotManager {
Location pos2 = new Location(classicPlotWorld.worldname, region.maxX, maxY, region.maxZ); Location pos2 = new Location(classicPlotWorld.worldname, region.maxX, maxY, region.maxZ);
queue.setCuboid(pos1, pos2, blocks); queue.setCuboid(pos1, pos2, blocks);
} }
queue.enqueue(); return queue.enqueue();
return true;
} }
public boolean setMain(PlotId plotId, BlockBucket blocks) { public boolean setMain(PlotId plotId, BlockBucket blocks) {
@ -119,8 +107,7 @@ public class ClassicPlotManager extends SquarePlotManager {
new Location(classicPlotWorld.worldname, region.maxX, classicPlotWorld.PLOT_HEIGHT - 1, region.maxZ); new Location(classicPlotWorld.worldname, region.maxX, classicPlotWorld.PLOT_HEIGHT - 1, region.maxZ);
queue.setCuboid(pos1, pos2, blocks); queue.setCuboid(pos1, pos2, blocks);
} }
queue.enqueue(); return queue.enqueue();
return true;
} }
public boolean setMiddle(PlotId plotId, BlockBucket blocks) { public boolean setMiddle(PlotId plotId, BlockBucket blocks) {
@ -134,8 +121,7 @@ public class ClassicPlotManager extends SquarePlotManager {
int x = MathMan.average(corners[0].getX(), corners[1].getX()); int x = MathMan.average(corners[0].getX(), corners[1].getX());
int z = MathMan.average(corners[0].getZ(), corners[1].getZ()); int z = MathMan.average(corners[0].getZ(), corners[1].getZ());
queue.setBlock(x, classicPlotWorld.PLOT_HEIGHT, z, blocks.getBlock()); queue.setBlock(x, classicPlotWorld.PLOT_HEIGHT, z, blocks.getBlock());
queue.enqueue(); return queue.enqueue();
return true;
} }
public boolean setOutline(PlotId plotId, BlockBucket blocks) { public boolean setOutline(PlotId plotId, BlockBucket blocks) {
@ -187,8 +173,7 @@ public class ClassicPlotManager extends SquarePlotManager {
queue.setCuboid(pos1, pos2, blocks); queue.setCuboid(pos1, pos2, blocks);
} }
} }
queue.enqueue(); return queue.enqueue();
return true;
} }
public boolean setWallFilling(PlotId plotId, BlockBucket blocks) { public boolean setWallFilling(PlotId plotId, BlockBucket blocks) {
@ -235,8 +220,7 @@ public class ClassicPlotManager extends SquarePlotManager {
} }
} }
} }
queue.enqueue(); return queue.enqueue();
return true;
} }
public boolean setWall(PlotId plotId, BlockBucket blocks) { public boolean setWall(PlotId plotId, BlockBucket blocks) {
@ -276,8 +260,7 @@ public class ClassicPlotManager extends SquarePlotManager {
queue.setBlock(x, y, z, blocks.getBlock()); queue.setBlock(x, y, z, blocks.getBlock());
} }
} }
queue.enqueue(); return queue.enqueue();
return true;
} }
/** /**
@ -308,8 +291,7 @@ public class ClassicPlotManager extends SquarePlotManager {
new Location(classicPlotWorld.worldname, ex, classicPlotWorld.WALL_HEIGHT + 1, ez - 1), classicPlotWorld.WALL_BLOCK); new Location(classicPlotWorld.worldname, ex, classicPlotWorld.WALL_HEIGHT + 1, ez - 1), classicPlotWorld.WALL_BLOCK);
queue.setCuboid(new Location(classicPlotWorld.worldname, sx + 1, 1, sz + 1), queue.setCuboid(new Location(classicPlotWorld.worldname, sx + 1, 1, sz + 1),
new Location(classicPlotWorld.worldname, ex - 1, classicPlotWorld.ROAD_HEIGHT, ez - 1), classicPlotWorld.ROAD_BLOCK); new Location(classicPlotWorld.worldname, ex - 1, classicPlotWorld.ROAD_HEIGHT, ez - 1), classicPlotWorld.ROAD_BLOCK);
queue.enqueue(); return queue.enqueue();
return true;
} }
@Override public boolean createRoadSouth(Plot plot) { @Override public boolean createRoadSouth(Plot plot) {
@ -337,8 +319,7 @@ public class ClassicPlotManager extends SquarePlotManager {
new Location(classicPlotWorld.worldname, ex - 1, classicPlotWorld.WALL_HEIGHT + 1, ez), classicPlotWorld.WALL_BLOCK); new Location(classicPlotWorld.worldname, ex - 1, classicPlotWorld.WALL_HEIGHT + 1, ez), classicPlotWorld.WALL_BLOCK);
queue.setCuboid(new Location(classicPlotWorld.worldname, sx + 1, 1, sz + 1), queue.setCuboid(new Location(classicPlotWorld.worldname, sx + 1, 1, sz + 1),
new Location(classicPlotWorld.worldname, ex - 1, classicPlotWorld.ROAD_HEIGHT, ez - 1), classicPlotWorld.ROAD_BLOCK); new Location(classicPlotWorld.worldname, ex - 1, classicPlotWorld.ROAD_HEIGHT, ez - 1), classicPlotWorld.ROAD_BLOCK);
queue.enqueue(); return queue.enqueue();
return true;
} }
@Override public boolean createRoadSouthEast(Plot plot) { @Override public boolean createRoadSouthEast(Plot plot) {
@ -356,8 +337,7 @@ public class ClassicPlotManager extends SquarePlotManager {
PlotBlock.get((short) 7, (byte) 0)); PlotBlock.get((short) 7, (byte) 0));
queue.setCuboid(new Location(classicPlotWorld.worldname, sx + 1, 1, sz + 1), queue.setCuboid(new Location(classicPlotWorld.worldname, sx + 1, 1, sz + 1),
new Location(classicPlotWorld.worldname, ex - 1, classicPlotWorld.ROAD_HEIGHT, ez - 1), classicPlotWorld.ROAD_BLOCK); new Location(classicPlotWorld.worldname, ex - 1, classicPlotWorld.ROAD_HEIGHT, ez - 1), classicPlotWorld.ROAD_BLOCK);
queue.enqueue(); return queue.enqueue();
return true;
} }
@Override public boolean removeRoadEast(Plot plot) { @Override public boolean removeRoadEast(Plot plot) {
@ -377,8 +357,7 @@ public class ClassicPlotManager extends SquarePlotManager {
new Location(classicPlotWorld.worldname, ex, classicPlotWorld.PLOT_HEIGHT - 1, ez - 1), classicPlotWorld.MAIN_BLOCK); new Location(classicPlotWorld.worldname, ex, classicPlotWorld.PLOT_HEIGHT - 1, ez - 1), classicPlotWorld.MAIN_BLOCK);
queue.setCuboid(new Location(classicPlotWorld.worldname, sx, classicPlotWorld.PLOT_HEIGHT, sz + 1), queue.setCuboid(new Location(classicPlotWorld.worldname, sx, classicPlotWorld.PLOT_HEIGHT, sz + 1),
new Location(classicPlotWorld.worldname, ex, classicPlotWorld.PLOT_HEIGHT, ez - 1), classicPlotWorld.TOP_BLOCK); new Location(classicPlotWorld.worldname, ex, classicPlotWorld.PLOT_HEIGHT, ez - 1), classicPlotWorld.TOP_BLOCK);
queue.enqueue(); return queue.enqueue();
return true;
} }
@Override public boolean removeRoadSouth(Plot plot) { @Override public boolean removeRoadSouth(Plot plot) {
@ -398,8 +377,7 @@ public class ClassicPlotManager extends SquarePlotManager {
new Location(classicPlotWorld.worldname, ex - 1, classicPlotWorld.PLOT_HEIGHT - 1, ez), classicPlotWorld.MAIN_BLOCK); new Location(classicPlotWorld.worldname, ex - 1, classicPlotWorld.PLOT_HEIGHT - 1, ez), classicPlotWorld.MAIN_BLOCK);
queue.setCuboid(new Location(classicPlotWorld.worldname, sx + 1, classicPlotWorld.PLOT_HEIGHT, sz), queue.setCuboid(new Location(classicPlotWorld.worldname, sx + 1, classicPlotWorld.PLOT_HEIGHT, sz),
new Location(classicPlotWorld.worldname, ex - 1, classicPlotWorld.PLOT_HEIGHT, ez), classicPlotWorld.TOP_BLOCK); new Location(classicPlotWorld.worldname, ex - 1, classicPlotWorld.PLOT_HEIGHT, ez), classicPlotWorld.TOP_BLOCK);
queue.enqueue(); return queue.enqueue();
return true;
} }
@Override public boolean removeRoadSouthEast(Plot plot) { @Override public boolean removeRoadSouthEast(Plot plot) {
@ -416,38 +394,53 @@ public class ClassicPlotManager extends SquarePlotManager {
new Location(classicPlotWorld.worldname, ex, classicPlotWorld.ROAD_HEIGHT - 1, ez), classicPlotWorld.MAIN_BLOCK); new Location(classicPlotWorld.worldname, ex, classicPlotWorld.ROAD_HEIGHT - 1, ez), classicPlotWorld.MAIN_BLOCK);
queue.setCuboid(new Location(classicPlotWorld.worldname, sx, classicPlotWorld.ROAD_HEIGHT, sz), queue.setCuboid(new Location(classicPlotWorld.worldname, sx, classicPlotWorld.ROAD_HEIGHT, sz),
new Location(classicPlotWorld.worldname, ex, classicPlotWorld.ROAD_HEIGHT, ez), classicPlotWorld.TOP_BLOCK); new Location(classicPlotWorld.worldname, ex, classicPlotWorld.ROAD_HEIGHT, ez), classicPlotWorld.TOP_BLOCK);
queue.enqueue(); return queue.enqueue();
return true;
} }
/** /**
* Finishing off plot merging by adding in the walls surrounding the plot (OPTIONAL)(UNFINISHED). * Finishing off plot merging by adding in the walls surrounding the plot (OPTIONAL)(UNFINISHED).
*
* @return false if part of the merge failed, otherwise true if successful.
*/ */
@Override public boolean finishPlotMerge(List<PlotId> plotIds) { @Override public boolean finishPlotMerge(List<PlotId> plotIds) {
final BlockBucket block = classicPlotWorld.CLAIMED_WALL_BLOCK; final BlockBucket block = classicPlotWorld.CLAIMED_WALL_BLOCK;
plotIds.forEach(id -> setWall(id, block)); boolean success = true;
for (PlotId plotId : plotIds) {
success &= setWall(plotId, block);
}
if (Settings.General.MERGE_REPLACE_WALL) { if (Settings.General.MERGE_REPLACE_WALL) {
final BlockBucket wallBlock = classicPlotWorld.WALL_FILLING; final BlockBucket wallBlock = classicPlotWorld.WALL_FILLING;
plotIds.forEach(id -> setWallFilling(id, wallBlock)); for (PlotId id : plotIds) {
success &= setWallFilling(id, wallBlock);
} }
return true; }
return success;
} }
@Override public boolean finishPlotUnlink(List<PlotId> plotIds) { @Override public boolean finishPlotUnlink(List<PlotId> plotIds) {
final BlockBucket block = classicPlotWorld.CLAIMED_WALL_BLOCK; final BlockBucket block = classicPlotWorld.CLAIMED_WALL_BLOCK;
plotIds.forEach(id -> setWall(id, block)); boolean success = true;
return true; for (PlotId id : plotIds) {
success &= setWall(id, block);
}
return success;
} }
/**
* Sets all the blocks along all the plot walls to their correct state (claimed or unclaimed).
*
* @return true if the wall blocks were successfully set
*/
@Override public boolean regenerateAllPlotWalls() { @Override public boolean regenerateAllPlotWalls() {
boolean success = true;
for (Plot plot : classicPlotWorld.getPlots()) { for (Plot plot : classicPlotWorld.getPlots()) {
if (plot.hasOwner()) { if (plot.hasOwner()) {
setWall(plot.getId(), classicPlotWorld.CLAIMED_WALL_BLOCK); success &= setWall(plot.getId(), classicPlotWorld.CLAIMED_WALL_BLOCK);
} else { } else {
setWall(plot.getId(), classicPlotWorld.WALL_BLOCK); success &= setWall(plot.getId(), classicPlotWorld.WALL_BLOCK);
} }
} }
return true; return success;
} }
@Override public boolean startPlotMerge(List<PlotId> plotIds) { @Override public boolean startPlotMerge(List<PlotId> plotIds) {
@ -460,8 +453,7 @@ public class ClassicPlotManager extends SquarePlotManager {
@Override public boolean claimPlot(Plot plot) { @Override public boolean claimPlot(Plot plot) {
final BlockBucket claim = classicPlotWorld.CLAIMED_WALL_BLOCK; final BlockBucket claim = classicPlotWorld.CLAIMED_WALL_BLOCK;
setWall(plot.getId(), claim); return setWall(plot.getId(), claim);
return true;
} }
@Override public String[] getPlotComponents(PlotId plotId) { @Override public String[] getPlotComponents(PlotId plotId) {
@ -469,7 +461,9 @@ public class ClassicPlotManager extends SquarePlotManager {
} }
/** /**
* Remove sign for a plot. * Retrieves the location of where a sign should be for a plot.
* @param plot The plot
* @return The location where a sign should be
*/ */
@Override public Location getSignLoc(Plot plot) { @Override public Location getSignLoc(Plot plot) {
plot = plot.getBasePlot(false); plot = plot.getBasePlot(false);

View File

@ -46,7 +46,7 @@ import java.util.Locale;
* command - this may be useful if a config value can be changed at a later date, and has no impact on the actual * command - this may be useful if a config value can be changed at a later date, and has no impact on the actual
* world generation</p> * world generation</p>
*/ */
@Nonnull @Override public ConfigurationNode[] getSettingNodes() { @NotNull @Override public ConfigurationNode[] getSettingNodes() {
return new ConfigurationNode[] { return new ConfigurationNode[] {
new ConfigurationNode("plot.height", this.PLOT_HEIGHT, "Plot height", new ConfigurationNode("plot.height", this.PLOT_HEIGHT, "Plot height",
Configuration.INTEGER), Configuration.INTEGER),

View File

@ -12,6 +12,7 @@ import com.github.intellectualsites.plotsquared.plot.util.block.LocalBlockQueue;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.sk89q.worldedit.world.block.BaseBlock; import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockTypes; import com.sk89q.worldedit.world.block.BlockTypes;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
@ -34,13 +35,13 @@ public class HybridPlotManager extends ClassicPlotManager {
String dir = "schematics" + File.separator + "GEN_ROAD_SCHEMATIC" + File.separator String dir = "schematics" + File.separator + "GEN_ROAD_SCHEMATIC" + File.separator
+ hybridPlotWorld.worldname + File.separator; + hybridPlotWorld.worldname + File.separator;
try { try {
File sideroad = File sideRoad =
MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), dir + "sideroad.schem"); MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), dir + "sideroad.schem");
String newDir = "schematics" + File.separator + "GEN_ROAD_SCHEMATIC" + File.separator String newDir = "schematics" + File.separator + "GEN_ROAD_SCHEMATIC" + File.separator
+ "__TEMP_DIR__" + File.separator; + "__TEMP_DIR__" + File.separator;
if (sideroad.exists()) { if (sideRoad.exists()) {
files.add(new FileBytes(newDir + "sideroad.schem", files.add(new FileBytes(newDir + "sideroad.schem",
Files.readAllBytes(sideroad.toPath()))); Files.readAllBytes(sideRoad.toPath())));
} }
File intersection = File intersection =
MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), dir + "intersection.schem"); MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), dir + "intersection.schem");
@ -146,8 +147,7 @@ public class HybridPlotManager extends ClassicPlotManager {
if (hybridPlotWorld.ROAD_SCHEMATIC_ENABLED) { if (hybridPlotWorld.ROAD_SCHEMATIC_ENABLED) {
createSchemAbs(queue, pos1, pos2); createSchemAbs(queue, pos1, pos2);
} }
queue.enqueue(); return queue.enqueue();
return true;
} }
/** /**
@ -221,7 +221,9 @@ public class HybridPlotManager extends ClassicPlotManager {
} }
/** /**
* Remove sign for a plot. * Retrieves the location of where a sign should be for a plot.
* @param plot The plot
* @return The location where a sign should be
*/ */
@Override public Location getSignLoc(Plot plot) { @Override public Location getSignLoc(Plot plot) {
return hybridPlotWorld.getSignLocation(plot); return hybridPlotWorld.getSignLocation(plot);

View File

@ -44,7 +44,7 @@ public class HybridPlotWorld extends ClassicPlotWorld {
super(worldName, id, generator, min, max); super(worldName, id, generator, min, max);
} }
@Override @NotNull @Override
protected PlotManager createManager() { protected PlotManager createManager() {
return new HybridPlotManager(this); return new HybridPlotManager(this);
} }

View File

@ -140,7 +140,7 @@ public abstract class HybridUtils {
} }
HybridUtils.UPDATE = true; HybridUtils.UPDATE = true;
Set<ChunkLoc> regions = new HashSet<>(); Set<ChunkLoc> regions = new HashSet<>();
regions.add(ChunkManager.manager.getChunkChunk(plot.getCenter())); regions.add(ChunkManager.getChunkChunk(plot.getCenter()));
return scheduleRoadUpdate(plot.getArea(), regions, extend); return scheduleRoadUpdate(plot.getArea(), regions, extend);
} }

View File

@ -122,7 +122,7 @@ public class PlotListener {
} }
} }
Optional<Long> timeFlag = plot.getFlag(Flags.TIME); Optional<Long> timeFlag = plot.getFlag(Flags.TIME);
if (timeFlag.isPresent()) { if (timeFlag.isPresent() && !player.getAttribute("disabletime")) {
try { try {
long time = timeFlag.get(); long time = timeFlag.get();
player.setTime(time); player.setTime(time);
@ -138,18 +138,18 @@ public class PlotListener {
final PlotBlock block = PlotBlock.get(id); final PlotBlock block = PlotBlock.get(id);
final String rawId = block.getRawId().toString(); final String rawId = block.getRawId().toString();
if (rawId.contains("disc") || PlotBlock.isEverything(block) || block.isAir()) { if (rawId.contains("disc") || PlotBlock.isEverything(block) || block.isAir()) {
Location loc = player.getLocation(); Location location = player.getLocation();
Location lastLoc = player.getMeta("music"); Location lastLocation = player.getMeta("music");
if (lastLoc != null) { if (lastLocation != null) {
player.playMusic(lastLoc, PlotBlock.get("air")); player.playMusic(lastLocation, PlotBlock.get("air"));
if (PlotBlock.isEverything(block) || block.isAir()) { if (PlotBlock.isEverything(block) || block.isAir()) {
player.deleteMeta("music"); player.deleteMeta("music");
} }
} }
if (!(PlotBlock.isEverything(block) || block.isAir())) { if (!(PlotBlock.isEverything(block) || block.isAir())) {
try { try {
player.setMeta("music", loc); player.setMeta("music", location);
player.playMusic(loc, block); player.playMusic(location, block);
} catch (Exception ignored) { } catch (Exception ignored) {
} }
} }

View File

@ -5,8 +5,8 @@ import com.github.intellectualsites.plotsquared.plot.commands.RequiredType;
import com.github.intellectualsites.plotsquared.plot.database.DBFunc; import com.github.intellectualsites.plotsquared.plot.database.DBFunc;
import com.github.intellectualsites.plotsquared.plot.util.PlotGameMode; import com.github.intellectualsites.plotsquared.plot.util.PlotGameMode;
import com.github.intellectualsites.plotsquared.plot.util.PlotWeather; import com.github.intellectualsites.plotsquared.plot.util.PlotWeather;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nonnull;
import java.util.UUID; import java.util.UUID;
public class ConsolePlayer extends PlotPlayer { public class ConsolePlayer extends PlotPlayer {
@ -15,15 +15,15 @@ public class ConsolePlayer extends PlotPlayer {
private ConsolePlayer() { private ConsolePlayer() {
PlotArea area = PlotSquared.get().getFirstPlotArea(); PlotArea area = PlotSquared.get().getFirstPlotArea();
Location loc; Location location;
if (area != null) { if (area != null) {
RegionWrapper region = area.getRegion(); RegionWrapper region = area.getRegion();
loc = new Location(area.worldname, region.minX + region.maxX / 2, 0, location = new Location(area.worldname, region.minX + region.maxX / 2, 0,
region.minZ + region.maxZ / 2); region.minZ + region.maxZ / 2);
} else { } else {
loc = new Location("world", 0, 0, 0); location = new Location("world", 0, 0, 0);
} }
setMeta("location", loc); setMeta("location", location);
} }
public static ConsolePlayer getConsole() { public static ConsolePlayer getConsole() {
@ -34,7 +34,7 @@ public class ConsolePlayer extends PlotPlayer {
return instance; return instance;
} }
@Override public boolean canTeleport(@Nonnull Location loc) { @Override public boolean canTeleport(@NotNull Location location) {
return true; return true;
} }
@ -42,7 +42,7 @@ public class ConsolePlayer extends PlotPlayer {
public void sendTitle(String title, String subtitle, int fadeIn, int stay, int fadeOut) { public void sendTitle(String title, String subtitle, int fadeIn, int stay, int fadeOut) {
} }
@Override public Location getLocation() { @NotNull @Override public Location getLocation() {
return this.getMeta("location"); return this.getMeta("location");
} }
@ -50,7 +50,7 @@ public class ConsolePlayer extends PlotPlayer {
return getLocation(); return getLocation();
} }
@Nonnull @Override public UUID getUUID() { @NotNull @Override public UUID getUUID() {
return DBFunc.EVERYONE; return DBFunc.EVERYONE;
} }
@ -100,14 +100,14 @@ public class ConsolePlayer extends PlotPlayer {
return RequiredType.CONSOLE; return RequiredType.CONSOLE;
} }
@Override public void setWeather(@Nonnull PlotWeather weather) { @Override public void setWeather(@NotNull PlotWeather weather) {
} }
@Nonnull @Override public PlotGameMode getGameMode() { @NotNull @Override public PlotGameMode getGameMode() {
return PlotGameMode.NOT_SET; return PlotGameMode.NOT_SET;
} }
@Override public void setGameMode(@Nonnull PlotGameMode gameMode) { @Override public void setGameMode(@NotNull PlotGameMode gameMode) {
} }
@Override public void setTime(long time) { @Override public void setTime(long time) {
@ -120,7 +120,7 @@ public class ConsolePlayer extends PlotPlayer {
@Override public void setFlight(boolean fly) { @Override public void setFlight(boolean fly) {
} }
@Override public void playMusic(@Nonnull Location location, @Nonnull PlotBlock id) { @Override public void playMusic(@NotNull Location location, @NotNull PlotBlock id) {
} }
@Override public void kick(String message) { @Override public void kick(String message) {

View File

@ -1,9 +1,9 @@
package com.github.intellectualsites.plotsquared.plot.object; package com.github.intellectualsites.plotsquared.plot.object;
public enum Direction { public enum Direction {
NORTH(0, "north"), EAST(1, "east"), SOUTH(2, "south"), WEST(3, "west"), NORTHEAST(4, ALL(-1, "all"), NORTH(0, "north"), EAST(1, "east"), SOUTH(2, "south"), WEST(3,
"northeast"), SOUTHEAST(5, "southeast"), SOUTHWEST(6, "southwest"), NORTHWEST(7, "west"), NORTHEAST(4, "northeast"), SOUTHEAST(5, "southeast"), SOUTHWEST(6,
"northwest"), "southwest"), NORTHWEST(7, "northwest"),
; ;
@ -16,6 +16,15 @@ public enum Direction {
this.name = name; this.name = name;
} }
public static Direction getFromIndex(int index) {
for (Direction value : values()) {
if (value.getIndex() == index) {
return value;
}
}
return NORTH;
}
public int getIndex() { public int getIndex() {
return index; return index;
} }

View File

@ -21,9 +21,9 @@ import com.google.common.collect.BiMap;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.sk89q.jnbt.CompoundTag; import com.sk89q.jnbt.CompoundTag;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.awt.geom.Area; import java.awt.geom.Area;
import java.awt.geom.PathIterator; import java.awt.geom.PathIterator;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
@ -46,13 +46,14 @@ import java.util.stream.Collectors;
public class Plot { public class Plot {
private static final int MAX_HEIGHT = 256; private static final int MAX_HEIGHT = 256;
/** /**
* @deprecated raw access is deprecated * @deprecated raw access is deprecated
*/ */
@Deprecated private static HashSet<Plot> connected_cache; @Deprecated private static HashSet<Plot> connected_cache;
private static HashSet<RegionWrapper> regions_cache; private static HashSet<RegionWrapper> regions_cache;
private final PlotId id; @NotNull private final PlotId id;
/** /**
* plot owner * plot owner
@ -62,10 +63,12 @@ public class Plot {
* @deprecated * @deprecated
*/ */
@Deprecated public UUID owner; @Deprecated public UUID owner;
/** /**
* Has the plot changed since the last save cycle? * Has the plot changed since the last save cycle?
*/ */
public boolean countsTowardsMax = true; public boolean countsTowardsMax = true;
/** /**
* Represents whatever the database manager needs it to: <br> * Represents whatever the database manager needs it to: <br>
* - A value of -1 usually indicates the plot will not be stored in the DB<br> * - A value of -1 usually indicates the plot will not be stored in the DB<br>
@ -74,23 +77,28 @@ public class Plot {
* @deprecated magical * @deprecated magical
*/ */
@Deprecated public int temp; @Deprecated public int temp;
/** /**
* Plot creation timestamp (not accurate if the plot was created before this was implemented)<br> * Plot creation timestamp (not accurate if the plot was created before this was implemented)<br>
* - Milliseconds since the epoch<br> * - Milliseconds since the epoch<br>
*/ */
private long timestamp; private long timestamp;
/** /**
* List of trusted (with plot permissions). * List of trusted (with plot permissions).
*/ */
private HashSet<UUID> trusted; private HashSet<UUID> trusted;
/** /**
* List of members users (with plot permissions). * List of members users (with plot permissions).
*/ */
private HashSet<UUID> members; private HashSet<UUID> members;
/** /**
* List of denied players. * List of denied players.
*/ */
private HashSet<UUID> denied; private HashSet<UUID> denied;
/** /**
* External settings class. * External settings class.
* - Please favor the methods over direct access to this class<br> * - Please favor the methods over direct access to this class<br>
@ -99,6 +107,7 @@ public class Plot {
private PlotSettings settings; private PlotSettings settings;
private PlotArea area; private PlotArea area;
/** /**
* Session only plot metadata (session is until the server stops)<br> * Session only plot metadata (session is until the server stops)<br>
* <br> * <br>
@ -107,6 +116,7 @@ public class Plot {
* @see FlagManager * @see FlagManager
*/ */
private ConcurrentHashMap<String, Object> meta; private ConcurrentHashMap<String, Object> meta;
/** /**
* The cached origin plot. * The cached origin plot.
* - The origin plot is used for plot grouping and relational data * - The origin plot is used for plot grouping and relational data
@ -122,7 +132,7 @@ public class Plot {
* @param owner the plot owner * @param owner the plot owner
* @see Plot#getPlot(Location) for existing plots * @see Plot#getPlot(Location) for existing plots
*/ */
public Plot(PlotArea area, PlotId id, UUID owner) { public Plot(PlotArea area, @NotNull PlotId id, UUID owner) {
this.area = area; this.area = area;
this.id = id; this.id = id;
this.owner = owner; this.owner = owner;
@ -136,7 +146,7 @@ public class Plot {
* @param id the plot id * @param id the plot id
* @see Plot#getPlot(Location) for existing plots * @see Plot#getPlot(Location) for existing plots
*/ */
public Plot(PlotArea area, PlotId id) { public Plot(PlotArea area, @NotNull PlotId id) {
this.area = area; this.area = area;
this.id = id; this.id = id;
} }
@ -152,7 +162,7 @@ public class Plot {
* @param temp Represents whatever the database manager needs it to * @param temp Represents whatever the database manager needs it to
* @see Plot#getPlot(Location) for existing plots * @see Plot#getPlot(Location) for existing plots
*/ */
public Plot(PlotArea area, PlotId id, UUID owner, int temp) { public Plot(PlotArea area, @NotNull PlotId id, UUID owner, int temp) {
this.area = area; this.area = area;
this.id = id; this.id = id;
this.owner = owner; this.owner = owner;
@ -166,10 +176,10 @@ public class Plot {
* @param owner the plot owner * @param owner the plot owner
* @param trusted the plot trusted players * @param trusted the plot trusted players
* @param denied the plot denied players * @param denied the plot denied players
* @param merged array giving merged plots * @param merged an array giving merged plots
* @see Plot#getPlot(Location) for existing plots * @see Plot#getPlot(Location) for existing plots
*/ */
public Plot(PlotId id, UUID owner, HashSet<UUID> trusted, HashSet<UUID> members, public Plot(@NotNull PlotId id, UUID owner, HashSet<UUID> trusted, HashSet<UUID> members,
HashSet<UUID> denied, String alias, BlockLoc position, Collection<Flag> flags, HashSet<UUID> denied, String alias, BlockLoc position, Collection<Flag> flags,
PlotArea area, boolean[] merged, long timestamp, int temp) { PlotArea area, boolean[] merged, long timestamp, int temp) {
this.id = id; this.id = id;
@ -194,7 +204,7 @@ public class Plot {
/** /**
* Gets a plot from a string e.g. [area];[id] * Gets a plot from a string e.g. [area];[id]
* *
* @param defaultArea If no area is specified * @param defaultArea if no area is specified
* @param string plot id/area + id * @param string plot id/area + id
* @return New or existing plot object * @return New or existing plot object
*/ */
@ -326,7 +336,7 @@ public class Plot {
* @param uuid the player uuid * @param uuid the player uuid
* @return if the provided uuid is the owner of the plot * @return if the provided uuid is the owner of the plot
*/ */
public boolean isOwner(@Nonnull UUID uuid) { public boolean isOwner(@NotNull UUID uuid) {
if (uuid.equals(this.getOwner())) { if (uuid.equals(this.getOwner())) {
return true; return true;
} }
@ -452,7 +462,7 @@ public class Plot {
* *
* @return the PlotId for this plot * @return the PlotId for this plot
*/ */
public PlotId getId() { @NotNull public PlotId getId() {
return this.id; return this.id;
} }
@ -864,8 +874,15 @@ public class Plot {
} }
Plot current = queue.poll(); Plot current = queue.poll();
if (Plot.this.area.TERRAIN != 0) { if (Plot.this.area.TERRAIN != 0) {
try {
ChunkManager.manager ChunkManager.manager
.regenerateRegion(current.getBottomAbs(), current.getTopAbs(), false, this); .regenerateRegion(current.getBottomAbs(), current.getTopAbs(), false,
this);
} catch (UnsupportedOperationException exception) {
MainUtil.sendMessage(null,
"Please ask md_5 to fix regenerateChunk() because it breaks plugins. We apologize for the inconvenience");
return;
}
return; return;
} }
manager.clearPlot(current, this); manager.clearPlot(current, this);
@ -919,8 +936,8 @@ public class Plot {
/** /**
* Unlink the plot and all connected plots. * Unlink the plot and all connected plots.
* *
* @param createSign whether to recreate signs
* @param createRoad whether to recreate road * @param createRoad whether to recreate road
* @param createSign whether to recreate signs
* @return success/!cancelled * @return success/!cancelled
*/ */
public boolean unlinkPlot(boolean createRoad, boolean createSign) { public boolean unlinkPlot(boolean createRoad, boolean createSign) {
@ -982,7 +999,7 @@ public class Plot {
* *
* @param name name * @param name name
*/ */
public void setSign(@Nonnull String name) { public void setSign(@NotNull String name) {
if (!isLoaded()) { if (!isLoaded()) {
return; return;
} }
@ -992,7 +1009,7 @@ public class Plot {
} }
PlotManager manager = this.area.getPlotManager(); PlotManager manager = this.area.getPlotManager();
if (this.area.ALLOW_SIGNS) { if (this.area.ALLOW_SIGNS) {
Location loc = manager.getSignLoc(this); Location location = manager.getSignLoc(this);
String id = this.id.x + ";" + this.id.y; String id = this.id.x + ";" + this.id.y;
String[] lines = String[] lines =
new String[] {Captions.OWNER_SIGN_LINE_1.formatted().replaceAll("%id%", id), new String[] {Captions.OWNER_SIGN_LINE_1.formatted().replaceAll("%id%", id),
@ -1002,7 +1019,9 @@ public class Plot {
"%plr%", name), "%plr%", name),
Captions.OWNER_SIGN_LINE_4.formatted().replaceAll("%id%", id).replaceAll( Captions.OWNER_SIGN_LINE_4.formatted().replaceAll("%id%", id).replaceAll(
"%plr%", name)}; "%plr%", name)};
WorldUtil.IMP.setSign(this.getWorldName(), loc.getX(), loc.getY(), loc.getZ(), lines); WorldUtil.IMP
.setSign(this.getWorldName(), location.getX(), location.getY(), location.getZ(),
lines);
} }
} }
@ -1199,18 +1218,18 @@ public class Plot {
Location[] corners = getCorners(); Location[] corners = getCorners();
Location top = corners[0]; Location top = corners[0];
Location bot = corners[1]; Location bot = corners[1];
Location loc = new Location(this.getWorldName(), MathMan.average(bot.getX(), top.getX()), Location location =
new Location(this.getWorldName(), MathMan.average(bot.getX(), top.getX()),
MathMan.average(bot.getY(), top.getY()), MathMan.average(bot.getZ(), top.getZ())); MathMan.average(bot.getY(), top.getY()), MathMan.average(bot.getZ(), top.getZ()));
if (!isLoaded()) { if (!isLoaded()) {
return loc; return location;
} }
int y = int y = WorldUtil.IMP.getHighestBlock(getWorldName(), location.getX(), location.getZ());
isLoaded() ? WorldUtil.IMP.getHighestBlock(getWorldName(), loc.getX(), loc.getZ()) : 62;
if (area.ALLOW_SIGNS) { if (area.ALLOW_SIGNS) {
y = Math.max(y, getManager().getSignLoc(this).getY()); y = Math.max(y, getManager().getSignLoc(this).getY());
} }
loc.setY(1 + y); location.setY(1 + y);
return loc; return location;
} }
public Location getSide() { public Location getSide() {
@ -1235,18 +1254,19 @@ public class Plot {
if (home == null || home.x == 0 && home.z == 0) { if (home == null || home.x == 0 && home.z == 0) {
return this.getDefaultHome(true); return this.getDefaultHome(true);
} else { } else {
Location bot = this.getBottomAbs(); Location bottom = this.getBottomAbs();
Location loc = new Location(bot.getWorld(), bot.getX() + home.x, bot.getY() + home.y, Location location =
bot.getZ() + home.z, home.yaw, home.pitch); new Location(bottom.getWorld(), bottom.getX() + home.x, bottom.getY() + home.y,
bottom.getZ() + home.z, home.yaw, home.pitch);
if (!isLoaded()) { if (!isLoaded()) {
return loc; return location;
} }
if (!WorldUtil.IMP.getBlock(loc).isAir()) { if (!WorldUtil.IMP.getBlock(location).isAir()) {
loc.setY(Math.max( location.setY(Math.max(1 + WorldUtil.IMP
1 + WorldUtil.IMP.getHighestBlock(this.getWorldName(), loc.getX(), loc.getZ()), .getHighestBlock(this.getWorldName(), location.getX(), location.getZ()),
bot.getY())); bottom.getY()));
} }
return loc; return location;
} }
} }
@ -1413,9 +1433,9 @@ public class Plot {
if (!this.area.ALLOW_SIGNS) { if (!this.area.ALLOW_SIGNS) {
return; return;
} }
Location loc = manager.getSignLoc(this); Location location = manager.getSignLoc(this);
LocalBlockQueue queue = GlobalBlockQueue.IMP.getNewQueue(getWorldName(), false); LocalBlockQueue queue = GlobalBlockQueue.IMP.getNewQueue(getWorldName(), false);
queue.setBlock(loc.getX(), loc.getY(), loc.getZ(), PlotBlock.get("air")); queue.setBlock(location.getX(), location.getY(), location.getZ(), PlotBlock.get("air"));
queue.flush(); queue.flush();
} }
@ -1510,7 +1530,7 @@ public class Plot {
* @param notify notify * @param notify notify
* @return true if plot was created successfully * @return true if plot was created successfully
*/ */
public boolean create(@Nonnull UUID uuid, final boolean notify) { public boolean create(@NotNull UUID uuid, final boolean notify) {
this.owner = uuid; this.owner = uuid;
Plot existing = this.area.getOwnedPlotAbs(this.id); Plot existing = this.area.getOwnedPlotAbs(this.id);
if (existing != null) { if (existing != null) {
@ -1532,7 +1552,7 @@ public class Plot {
DBFunc.createPlotAndSettings(this, () -> { DBFunc.createPlotAndSettings(this, () -> {
PlotArea plotworld = Plot.this.area; PlotArea plotworld = Plot.this.area;
if (notify && plotworld.AUTO_MERGE) { if (notify && plotworld.AUTO_MERGE) {
Plot.this.autoMerge(-1, Integer.MAX_VALUE, uuid, true); Plot.this.autoMerge(Direction.ALL, Integer.MAX_VALUE, uuid, true);
} }
}); });
return true; return true;
@ -1555,8 +1575,8 @@ public class Plot {
* @return the name of the biome * @return the name of the biome
*/ */
public String getBiome() { public String getBiome() {
Location loc = this.getCenter(); Location location = this.getCenter();
return WorldUtil.IMP.getBiome(loc.getWorld(), loc.getX(), loc.getZ()); return WorldUtil.IMP.getBiome(location.getWorld(), location.getX(), location.getZ());
} }
//TODO Better documentation needed. //TODO Better documentation needed.
@ -1576,9 +1596,9 @@ public class Plot {
* Returns the bottom location for the plot. * Returns the bottom location for the plot.
*/ */
public Location getBottomAbs() { public Location getBottomAbs() {
Location loc = getManager().getPlotBottomLocAbs(this.id); Location location = getManager().getPlotBottomLocAbs(this.id);
loc.setWorld(getWorldName()); location.setWorld(getWorldName());
return loc; return location;
} }
/** /**
@ -2009,17 +2029,11 @@ public class Plot {
* Sets the raw merge data<br> * Sets the raw merge data<br>
* - Updates DB<br> * - Updates DB<br>
* - Does not modify terrain<br> * - Does not modify terrain<br>
* ----------<br>
* 0 = north<br>
* 1 = east<br>
* 2 = south<br>
* 3 = west<br>
* ----------<br>
* *
* @param direction * @param direction
* @param value * @param value
*/ */
public void setMerged(int direction, boolean value) { public void setMerged(Direction direction, boolean value) {
if (this.getSettings().setMerged(direction, value)) { if (this.getSettings().setMerged(direction, value)) {
if (value) { if (value) {
Plot other = this.getRelative(direction).getBasePlot(false); Plot other = this.getRelative(direction).getBasePlot(false);
@ -2124,11 +2138,12 @@ public class Plot {
return null; return null;
} }
try { try {
final Location loc = this.getManager().getSignLoc(this); final Location location = this.getManager().getSignLoc(this);
String[] lines = TaskManager.IMP.sync(new RunnableVal<String[]>() { String[] lines = TaskManager.IMP.sync(new RunnableVal<String[]>() {
@Override public void run(String[] value) { @Override public void run(String[] value) {
ChunkManager.manager.loadChunk(loc.getWorld(), loc.getChunkLoc(), false); ChunkManager.manager
this.value = WorldUtil.IMP.getSign(loc); .loadChunk(location.getWorld(), location.getChunkLoc(), false);
this.value = WorldUtil.IMP.getSign(location);
} }
}); });
if (lines == null) { if (lines == null) {
@ -2198,24 +2213,21 @@ public class Plot {
} }
/** /**
* Auto merge a plot in a specific direction<br> * Auto merge a plot in a specific direction.
* *
* @param dir The direction to merge<br> * @param dir the direction to merge
* -1 = All directions<br> * @param max the max number of merges to do
* 0 = north<br> * @param uuid the UUID it is allowed to merge with
* 1 = east<br> * @param removeRoads whether to remove roads
* 2 = south<br>
* 3 = west<br>
* @param max The max number of merges to do
* @param uuid The UUID it is allowed to merge with
* @param removeRoads Whether to remove roads
* @return true if a merge takes place * @return true if a merge takes place
*/ */
public boolean autoMerge(int dir, int max, UUID uuid, boolean removeRoads) { public boolean autoMerge(Direction dir, int max, UUID uuid, boolean removeRoads) {
//Ignore merging if there is no owner for the plot
if (this.owner == null) { if (this.owner == null) {
return false; return false;
} }
if (!EventUtil.manager.callMerge(this, dir, max)) { //Call the merge event
if (!EventUtil.manager.callMerge(this, dir.getIndex(), max)) {
return false; return false;
} }
Set<Plot> connected = this.getConnectedPlots(); Set<Plot> connected = this.getConnectedPlots();
@ -2231,7 +2243,7 @@ public class Plot {
} }
visited.add(current); visited.add(current);
Set<Plot> plots; Set<Plot> plots;
if ((dir == -1 || dir == 0) && !getMerged(Direction.NORTH)) { if ((dir == Direction.ALL || dir == Direction.NORTH) && !getMerged(Direction.NORTH)) {
Plot other = current.getRelative(Direction.NORTH); Plot other = current.getRelative(Direction.NORTH);
if (other != null && other.isOwner(uuid) && ( if (other != null && other.isOwner(uuid) && (
other.getBasePlot(false).equals(current.getBasePlot(false)) other.getBasePlot(false).equals(current.getBasePlot(false))
@ -2250,7 +2262,8 @@ public class Plot {
} }
} }
} }
if (max >= 0 && (dir == -1 || dir == 1) && !current.getMerged(Direction.EAST)) { if (max >= 0 && (dir == Direction.ALL || dir == Direction.EAST) && !current
.getMerged(Direction.EAST)) {
Plot other = current.getRelative(Direction.EAST); Plot other = current.getRelative(Direction.EAST);
if (other != null && other.isOwner(uuid) && ( if (other != null && other.isOwner(uuid) && (
other.getBasePlot(false).equals(current.getBasePlot(false)) other.getBasePlot(false).equals(current.getBasePlot(false))
@ -2269,7 +2282,8 @@ public class Plot {
} }
} }
} }
if (max >= 0 && (dir == -1 || dir == 2) && !getMerged(Direction.SOUTH)) { if (max >= 0 && (dir == Direction.ALL || dir == Direction.SOUTH) && !getMerged(
Direction.SOUTH)) {
Plot other = current.getRelative(Direction.SOUTH); Plot other = current.getRelative(Direction.SOUTH);
if (other != null && other.isOwner(uuid) && ( if (other != null && other.isOwner(uuid) && (
other.getBasePlot(false).equals(current.getBasePlot(false)) other.getBasePlot(false).equals(current.getBasePlot(false))
@ -2288,7 +2302,8 @@ public class Plot {
} }
} }
} }
if (max >= 0 && (dir == -1 || dir == 3) && !getMerged(Direction.WEST)) { if (max >= 0 && (dir == Direction.ALL || dir == Direction.WEST) && !getMerged(
Direction.WEST)) {
Plot other = current.getRelative(Direction.WEST); Plot other = current.getRelative(Direction.WEST);
if (other != null && other.isOwner(uuid) && ( if (other != null && other.isOwner(uuid) && (
other.getBasePlot(false).equals(current.getBasePlot(false)) other.getBasePlot(false).equals(current.getBasePlot(false))
@ -2403,20 +2418,16 @@ public class Plot {
* @param direction * @param direction
* @return * @return
*/ */
public Plot getRelative(int direction) { @Deprecated public Plot getRelative(int direction) {
return this.area.getPlotAbs(this.id.getRelative(direction)); return this.area.getPlotAbs(this.id.getRelative(direction));
} }
/** /**
* Gets the plot in a relative direction<br> * Gets the plot in a relative direction
* 0 = north<br>
* 1 = east<br>
* 2 = south<br>
* 3 = west<br>
* Note: May be null if the partial plot area does not include the relative location * Note: May be null if the partial plot area does not include the relative location
* *
* @param direction * @param direction
* @return * @return the plot relative to this one
*/ */
public Plot getRelative(Direction direction) { public Plot getRelative(Direction direction) {
return this.area.getPlotAbs(this.id.getRelative(direction)); return this.area.getPlotAbs(this.id.getRelative(direction));
@ -2426,7 +2437,7 @@ public class Plot {
* Gets a set of plots connected (and including) this plot<br> * Gets a set of plots connected (and including) this plot<br>
* - This result is cached globally * - This result is cached globally
* *
* @return * @return a Set of Plots connected to this Plot
*/ */
public Set<Plot> getConnectedPlots() { public Set<Plot> getConnectedPlots() {
if (this.settings == null) { if (this.settings == null) {
@ -2451,10 +2462,10 @@ public class Plot {
// invalid merge // invalid merge
PlotSquared.debug("Fixing invalid merge: " + this); PlotSquared.debug("Fixing invalid merge: " + this);
if (tmp.isOwnerAbs(this.owner)) { if (tmp.isOwnerAbs(this.owner)) {
tmp.getSettings().setMerged(2, true); tmp.getSettings().setMerged(Direction.SOUTH, true);
DBFunc.setMerged(tmp, tmp.getSettings().getMerged()); DBFunc.setMerged(tmp, tmp.getSettings().getMerged());
} else { } else {
this.getSettings().setMerged(0, false); this.getSettings().setMerged(Direction.NORTH, false);
DBFunc.setMerged(this, this.getSettings().getMerged()); DBFunc.setMerged(this, this.getSettings().getMerged());
} }
} }
@ -2467,10 +2478,10 @@ public class Plot {
// invalid merge // invalid merge
PlotSquared.debug("Fixing invalid merge: " + this); PlotSquared.debug("Fixing invalid merge: " + this);
if (tmp.isOwnerAbs(this.owner)) { if (tmp.isOwnerAbs(this.owner)) {
tmp.getSettings().setMerged(3, true); tmp.getSettings().setMerged(Direction.WEST, true);
DBFunc.setMerged(tmp, tmp.getSettings().getMerged()); DBFunc.setMerged(tmp, tmp.getSettings().getMerged());
} else { } else {
this.getSettings().setMerged(1, false); this.getSettings().setMerged(Direction.EAST, false);
DBFunc.setMerged(this, this.getSettings().getMerged()); DBFunc.setMerged(this, this.getSettings().getMerged());
} }
} }
@ -2483,10 +2494,10 @@ public class Plot {
// invalid merge // invalid merge
PlotSquared.debug("Fixing invalid merge: " + this); PlotSquared.debug("Fixing invalid merge: " + this);
if (tmp.isOwnerAbs(this.owner)) { if (tmp.isOwnerAbs(this.owner)) {
tmp.getSettings().setMerged(0, true); tmp.getSettings().setMerged(Direction.NORTH, true);
DBFunc.setMerged(tmp, tmp.getSettings().getMerged()); DBFunc.setMerged(tmp, tmp.getSettings().getMerged());
} else { } else {
this.getSettings().setMerged(2, false); this.getSettings().setMerged(Direction.SOUTH, false);
DBFunc.setMerged(this, this.getSettings().getMerged()); DBFunc.setMerged(this, this.getSettings().getMerged());
} }
} }
@ -2499,10 +2510,10 @@ public class Plot {
// invalid merge // invalid merge
PlotSquared.debug("Fixing invalid merge: " + this); PlotSquared.debug("Fixing invalid merge: " + this);
if (tmp.isOwnerAbs(this.owner)) { if (tmp.isOwnerAbs(this.owner)) {
tmp.getSettings().setMerged(1, true); tmp.getSettings().setMerged(Direction.EAST, true);
DBFunc.setMerged(tmp, tmp.getSettings().getMerged()); DBFunc.setMerged(tmp, tmp.getSettings().getMerged());
} else { } else {
this.getSettings().setMerged(3, false); this.getSettings().setMerged(Direction.WEST, false);
DBFunc.setMerged(this, this.getSettings().getMerged()); DBFunc.setMerged(this, this.getSettings().getMerged());
} }
} }
@ -2560,7 +2571,7 @@ public class Plot {
* *
* @return * @return
*/ */
@Nonnull public HashSet<RegionWrapper> getRegions() { @NotNull public HashSet<RegionWrapper> getRegions() {
if (regions_cache != null && connected_cache != null && connected_cache.contains(this)) { if (regions_cache != null && connected_cache != null && connected_cache.contains(this)) {
return regions_cache; return regions_cache;
} }
@ -2787,6 +2798,11 @@ public class Plot {
return false; return false;
} }
/**
* Checks if the owner of this Plot is online.
*
* @return true if the owner of the Plot is online
*/
public boolean isOnline() { public boolean isOnline() {
if (this.owner == null) { if (this.owner == null) {
return false; return false;
@ -2841,13 +2857,14 @@ public class Plot {
} }
/** /**
* Merges 2 plots Removes the road in-between <br>- Assumes plots are directly next to each other <br> - saves to DB * Merges two plots. <br>- Assumes plots are directly next to each other <br> - saves to DB
* *
* @param lesserPlot * @param lesserPlot
* @param removeRoads * @param removeRoads
*/ */
public void mergePlot(Plot lesserPlot, boolean removeRoads) { public void mergePlot(Plot lesserPlot, boolean removeRoads) {
Plot greaterPlot = this; Plot greaterPlot = this;
lesserPlot.removeSign();
if (lesserPlot.getId().x == greaterPlot.getId().x) { if (lesserPlot.getId().x == greaterPlot.getId().x) {
if (lesserPlot.getId().y > greaterPlot.getId().y) { if (lesserPlot.getId().y > greaterPlot.getId().y) {
Plot tmp = lesserPlot; Plot tmp = lesserPlot;
@ -2857,10 +2874,11 @@ public class Plot {
if (!lesserPlot.getMerged(Direction.SOUTH)) { if (!lesserPlot.getMerged(Direction.SOUTH)) {
lesserPlot.clearRatings(); lesserPlot.clearRatings();
greaterPlot.clearRatings(); greaterPlot.clearRatings();
lesserPlot.setMerged(2, true); lesserPlot.setMerged(Direction.SOUTH, true);
greaterPlot.setMerged(0, true); greaterPlot.setMerged(Direction.NORTH, true);
lesserPlot.mergeData(greaterPlot); lesserPlot.mergeData(greaterPlot);
if (removeRoads) { if (removeRoads) {
//lesserPlot.removeSign();
lesserPlot.removeRoadSouth(); lesserPlot.removeRoadSouth();
Plot diagonal = greaterPlot.getRelative(Direction.EAST); Plot diagonal = greaterPlot.getRelative(Direction.EAST);
if (diagonal.getMerged(Direction.NORTHWEST)) { if (diagonal.getMerged(Direction.NORTHWEST)) {
@ -2881,10 +2899,11 @@ public class Plot {
if (!lesserPlot.getMerged(Direction.EAST)) { if (!lesserPlot.getMerged(Direction.EAST)) {
lesserPlot.clearRatings(); lesserPlot.clearRatings();
greaterPlot.clearRatings(); greaterPlot.clearRatings();
lesserPlot.setMerged(1, true); lesserPlot.setMerged(Direction.EAST, true);
greaterPlot.setMerged(3, true); greaterPlot.setMerged(Direction.WEST, true);
lesserPlot.mergeData(greaterPlot); lesserPlot.mergeData(greaterPlot);
if (removeRoads) { if (removeRoads) {
//lesserPlot.removeSign();
Plot diagonal = greaterPlot.getRelative(Direction.SOUTH); Plot diagonal = greaterPlot.getRelative(Direction.SOUTH);
if (diagonal.getMerged(Direction.NORTHWEST)) { if (diagonal.getMerged(Direction.NORTHWEST)) {
lesserPlot.removeRoadSouthEast(); lesserPlot.removeRoadSouthEast();
@ -2897,6 +2916,7 @@ public class Plot {
} }
} }
} }
} }
/** /**
@ -3079,23 +3099,23 @@ public class Plot {
return getFlags().containsKey(flag); return getFlags().containsKey(flag);
} }
@SuppressWarnings("deprecation") public boolean removeComment(PlotComment comment) { public boolean removeComment(PlotComment comment) {
return getSettings().removeComment(comment); return getSettings().removeComment(comment);
} }
@SuppressWarnings("deprecation") public void removeComments(List<PlotComment> comments) { public void removeComments(List<PlotComment> comments) {
getSettings().removeComments(comments); getSettings().removeComments(comments);
} }
@SuppressWarnings("deprecation") public List<PlotComment> getComments(String inbox) { public List<PlotComment> getComments(String inbox) {
return getSettings().getComments(inbox); return getSettings().getComments(inbox);
} }
@SuppressWarnings("deprecation") public void addComment(PlotComment comment) { public void addComment(PlotComment comment) {
getSettings().addComment(comment); getSettings().addComment(comment);
} }
@SuppressWarnings("deprecation") public void setComments(List<PlotComment> list) { public void setComments(List<PlotComment> list) {
getSettings().setComments(list); getSettings().setComments(list);
} }

View File

@ -22,9 +22,8 @@ import com.github.intellectualsites.plotsquared.plot.util.block.LocalBlockQueue;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.*; import java.util.*;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@ -37,12 +36,12 @@ public abstract class PlotArea {
public final String worldname; public final String worldname;
public final String id; public final String id;
public final PlotManager manager; @NotNull public final PlotManager manager;
public final int worldhash; public final int worldhash;
protected final ConcurrentHashMap<PlotId, Plot> plots = new ConcurrentHashMap<>(); protected final ConcurrentHashMap<PlotId, Plot> plots = new ConcurrentHashMap<>();
private final PlotId min; private final PlotId min;
private final PlotId max; private final PlotId max;
private final IndependentPlotGenerator generator; @NotNull private final IndependentPlotGenerator generator;
private final BlockBucket[][] blockBucketChunk; private final BlockBucket[][] blockBucketChunk;
public int MAX_PLOT_MEMBERS = 128; public int MAX_PLOT_MEMBERS = 128;
public boolean AUTO_MERGE = false; public boolean AUTO_MERGE = false;
@ -76,7 +75,7 @@ public abstract class PlotArea {
private ConcurrentHashMap<String, Object> meta; private ConcurrentHashMap<String, Object> meta;
private QuadMap<PlotCluster> clusters; private QuadMap<PlotCluster> clusters;
public PlotArea(@Nonnull final String worldName, @Nullable final String id, public PlotArea(@NotNull final String worldName, @Nullable final String id,
@NotNull IndependentPlotGenerator generator, @Nullable final PlotId min, @NotNull IndependentPlotGenerator generator, @Nullable final PlotId min,
@Nullable final PlotId max) { @Nullable final PlotId max) {
this.worldname = worldName; this.worldname = worldName;
@ -102,7 +101,7 @@ public abstract class PlotArea {
} }
} }
protected abstract PlotManager createManager(); @NotNull protected abstract PlotManager createManager();
public LocalBlockQueue getQueue(final boolean autoQueue) { public LocalBlockQueue getQueue(final boolean autoQueue) {
return GlobalBlockQueue.IMP.getNewQueue(worldname, autoQueue); return GlobalBlockQueue.IMP.getNewQueue(worldname, autoQueue);
@ -117,11 +116,8 @@ public abstract class PlotArea {
if (blockBucketChunk != null) { if (blockBucketChunk != null) {
return blockBucketChunk; return blockBucketChunk;
} }
if (generator != null) {
return generator.generateBlockBucketChunk(this); return generator.generateBlockBucketChunk(this);
} }
return null;
}
/** /**
* Returns the region for this PlotArea or a RegionWrapper encompassing * Returns the region for this PlotArea or a RegionWrapper encompassing
@ -178,7 +174,7 @@ public abstract class PlotArea {
* *
* @return the {@link IndependentPlotGenerator} * @return the {@link IndependentPlotGenerator}
*/ */
public IndependentPlotGenerator getGenerator() { @NotNull public IndependentPlotGenerator getGenerator() {
return this.generator; return this.generator;
} }
@ -394,7 +390,7 @@ public abstract class PlotArea {
} }
} }
@Nonnull @Override public String toString() { @NotNull @Override public String toString() {
if (this.id == null) { if (this.id == null) {
return this.worldname; return this.worldname;
} else { } else {
@ -422,7 +418,7 @@ public abstract class PlotArea {
* @param location the location * @param location the location
* @return the {@code Plot} or null if none exists * @return the {@code Plot} or null if none exists
*/ */
@Nullable public Plot getPlotAbs(@Nonnull final Location location) { @Nullable public Plot getPlotAbs(@NotNull final Location location) {
final PlotId pid = final PlotId pid =
this.manager.getPlotId(location.getX(), location.getY(), location.getZ()); this.manager.getPlotId(location.getX(), location.getY(), location.getZ());
if (pid == null) { if (pid == null) {
@ -437,7 +433,7 @@ public abstract class PlotArea {
* @param location the location * @param location the location
* @return base Plot * @return base Plot
*/ */
@Nullable public Plot getPlot(@Nonnull final Location location) { @Nullable public Plot getPlot(@NotNull final Location location) {
final PlotId pid = final PlotId pid =
this.manager.getPlotId(location.getX(), location.getY(), location.getZ()); this.manager.getPlotId(location.getX(), location.getY(), location.getZ());
if (pid == null) { if (pid == null) {
@ -452,7 +448,7 @@ public abstract class PlotArea {
* @param location the location * @param location the location
* @return the base plot or null * @return the base plot or null
*/ */
@Nullable public Plot getOwnedPlot(@Nonnull final Location location) { @Nullable public Plot getOwnedPlot(@NotNull final Location location) {
final PlotId pid = final PlotId pid =
this.manager.getPlotId(location.getX(), location.getY(), location.getZ()); this.manager.getPlotId(location.getX(), location.getY(), location.getZ());
if (pid == null) { if (pid == null) {
@ -468,7 +464,7 @@ public abstract class PlotArea {
* @param location the location * @param location the location
* @return Plot or null * @return Plot or null
*/ */
@Nullable public Plot getOwnedPlotAbs(@Nonnull final Location location) { @Nullable public Plot getOwnedPlotAbs(@NotNull final Location location) {
final PlotId pid = final PlotId pid =
this.manager.getPlotId(location.getX(), location.getY(), location.getZ()); this.manager.getPlotId(location.getX(), location.getY(), location.getZ());
if (pid == null) { if (pid == null) {
@ -483,11 +479,11 @@ public abstract class PlotArea {
* @param id the {@code PlotId} * @param id the {@code PlotId}
* @return the plot or null * @return the plot or null
*/ */
@Nullable public Plot getOwnedPlotAbs(@Nonnull final PlotId id) { @Nullable public Plot getOwnedPlotAbs(@NotNull final PlotId id) {
return this.plots.get(id); return this.plots.get(id);
} }
@Nullable public Plot getOwnedPlot(@Nonnull final PlotId id) { @Nullable public Plot getOwnedPlot(@NotNull final PlotId id) {
Plot plot = this.plots.get(id); Plot plot = this.plots.get(id);
return plot == null ? null : plot.getBasePlot(false); return plot == null ? null : plot.getBasePlot(false);
} }
@ -496,17 +492,17 @@ public abstract class PlotArea {
return this.TYPE != 2 || getRegionAbs().isIn(x, z); return this.TYPE != 2 || getRegionAbs().isIn(x, z);
} }
public boolean contains(@Nonnull final PlotId id) { public boolean contains(@NotNull final PlotId id) {
return this.min == null || (id.x >= this.min.x && id.x <= this.max.x && id.y >= this.min.y return this.min == null || (id.x >= this.min.x && id.x <= this.max.x && id.y >= this.min.y
&& id.y <= this.max.y); && id.y <= this.max.y);
} }
public boolean contains(@Nonnull final Location location) { public boolean contains(@NotNull final Location location) {
return StringMan.isEqual(location.getWorld(), this.worldname) && (getRegionAbs() == null return StringMan.isEqual(location.getWorld(), this.worldname) && (getRegionAbs() == null
|| this.region.isIn(location.getX(), location.getZ())); || this.region.isIn(location.getX(), location.getZ()));
} }
@Nonnull Set<Plot> getPlotsAbs(final UUID uuid) { @NotNull Set<Plot> getPlotsAbs(final UUID uuid) {
if (uuid == null) { if (uuid == null) {
return Collections.emptySet(); return Collections.emptySet();
} }
@ -519,7 +515,7 @@ public abstract class PlotArea {
return myPlots; return myPlots;
} }
@Nonnull public Set<Plot> getPlots(@Nonnull final UUID uuid) { @NotNull public Set<Plot> getPlots(@NotNull final UUID uuid) {
return getPlots().stream().filter(plot -> plot.isBasePlot() && plot.isOwner(uuid)) return getPlots().stream().filter(plot -> plot.isBasePlot() && plot.isOwner(uuid))
.collect(ImmutableSet.toImmutableSet()); .collect(ImmutableSet.toImmutableSet());
} }
@ -533,7 +529,7 @@ public abstract class PlotArea {
return this.plots.values(); return this.plots.values();
} }
public int getPlotCount(@Nonnull final UUID uuid) { public int getPlotCount(@NotNull final UUID uuid) {
if (!Settings.Done.COUNTS_TOWARDS_LIMIT) { if (!Settings.Done.COUNTS_TOWARDS_LIMIT) {
return (int) getPlotsAbs(uuid).stream().filter(plot -> !plot.hasFlag(Flags.DONE)) return (int) getPlotsAbs(uuid).stream().filter(plot -> !plot.hasFlag(Flags.DONE))
.count(); .count();
@ -546,11 +542,11 @@ public abstract class PlotArea {
* *
* @deprecated Use {@link #getPlots(UUID)} * @deprecated Use {@link #getPlots(UUID)}
*/ */
@Deprecated public Set<Plot> getPlots(@Nonnull final PlotPlayer player) { @Deprecated public Set<Plot> getPlots(@NotNull final PlotPlayer player) {
return getPlots(player.getUUID()); return getPlots(player.getUUID());
} }
public boolean hasPlot(@Nonnull final UUID uuid) { public boolean hasPlot(@NotNull final UUID uuid) {
return this.plots.entrySet().stream().anyMatch(entry -> entry.getValue().isOwner(uuid)); return this.plots.entrySet().stream().anyMatch(entry -> entry.getValue().isOwner(uuid));
} }
@ -559,7 +555,7 @@ public abstract class PlotArea {
return player != null ? getPlotCount(player.getUUID()) : 0; return player != null ? getPlotCount(player.getUUID()) : 0;
} }
@Nullable public Plot getPlotAbs(@Nonnull final PlotId id) { @Nullable public Plot getPlotAbs(@NotNull final PlotId id) {
Plot plot = getOwnedPlotAbs(id); Plot plot = getOwnedPlotAbs(id);
if (plot == null) { if (plot == null) {
if (this.min != null && (id.x < this.min.x || id.x > this.max.x || id.y < this.min.y if (this.min != null && (id.x < this.min.x || id.x > this.max.x || id.y < this.min.y
@ -571,7 +567,7 @@ public abstract class PlotArea {
return plot; return plot;
} }
@Nullable public Plot getPlot(@Nonnull final PlotId id) { @Nullable public Plot getPlot(@NotNull final PlotId id) {
final Plot plot = getOwnedPlotAbs(id); final Plot plot = getOwnedPlotAbs(id);
if (plot == null) { if (plot == null) {
if (this.min != null && (id.x < this.min.x || id.x > this.max.x || id.y < this.min.y if (this.min != null && (id.x < this.min.x || id.x > this.max.x || id.y < this.min.y
@ -592,7 +588,7 @@ public abstract class PlotArea {
return this.plots.size(); return this.plots.size();
} }
@Nullable public PlotCluster getCluster(@Nonnull final Location location) { @Nullable public PlotCluster getCluster(@NotNull final Location location) {
final Plot plot = getPlot(location); final Plot plot = getPlot(location);
if (plot == null) { if (plot == null) {
return null; return null;
@ -600,8 +596,8 @@ public abstract class PlotArea {
return this.clusters != null ? this.clusters.get(plot.getId().x, plot.getId().y) : null; return this.clusters != null ? this.clusters.get(plot.getId().x, plot.getId().y) : null;
} }
@Nullable public PlotCluster getFirstIntersectingCluster(@Nonnull final PlotId pos1, @Nullable public PlotCluster getFirstIntersectingCluster(@NotNull final PlotId pos1,
@Nonnull final PlotId pos2) { @NotNull final PlotId pos2) {
if (this.clusters == null) { if (this.clusters == null) {
return null; return null;
} }
@ -613,11 +609,11 @@ public abstract class PlotArea {
return null; return null;
} }
@Nullable PlotCluster getCluster(@Nonnull final PlotId id) { @Nullable PlotCluster getCluster(@NotNull final PlotId id) {
return this.clusters != null ? this.clusters.get(id.x, id.y) : null; return this.clusters != null ? this.clusters.get(id.x, id.y) : null;
} }
public PlotManager getPlotManager() { @NotNull public PlotManager getPlotManager() {
return this.manager; return this.manager;
} }
@ -628,14 +624,14 @@ public abstract class PlotArea {
* *
* @see FlagManager * @see FlagManager
*/ */
public void setMeta(@Nonnull final String key, @Nullable final Object value) { public void setMeta(@NotNull final String key, @Nullable final Object value) {
if (this.meta == null) { if (this.meta == null) {
this.meta = new ConcurrentHashMap<>(); this.meta = new ConcurrentHashMap<>();
} }
this.meta.put(key, value); this.meta.put(key, value);
} }
@Nullable public <T> T getMeta(@Nullable final String key, @Nullable final T def) { @NotNull public <T> T getMeta(@Nullable final String key, @NotNull final T def) {
final Object v = getMeta(key); final Object v = getMeta(key);
return v == null ? def : (T) v; return v == null ? def : (T) v;
} }
@ -645,14 +641,14 @@ public abstract class PlotArea {
* <br> * <br>
* For persistent metadata use the flag system * For persistent metadata use the flag system
*/ */
@Nullable public Object getMeta(@Nonnull final String key) { @Nullable public Object getMeta(@NotNull final String key) {
if (this.meta != null) { if (this.meta != null) {
return this.meta.get(key); return this.meta.get(key);
} }
return null; return null;
} }
@SuppressWarnings("unused") @Nonnull public Set<Plot> getBasePlots() { @SuppressWarnings("unused") @NotNull public Set<Plot> getBasePlots() {
final HashSet<Plot> myPlots = new HashSet<>(getPlots()); final HashSet<Plot> myPlots = new HashSet<>(getPlots());
myPlots.removeIf(plot -> !plot.isBasePlot()); myPlots.removeIf(plot -> !plot.isBasePlot());
return myPlots; return myPlots;
@ -685,15 +681,15 @@ public abstract class PlotArea {
* @deprecated Use {@link #getPlotsMap()} * @deprecated Use {@link #getPlotsMap()}
*/ */
//todo eventually remove //todo eventually remove
@Deprecated @Nonnull public Map<PlotId, Plot> getPlotsRaw() { @Deprecated @NotNull public Map<PlotId, Plot> getPlotsRaw() {
return ImmutableMap.copyOf(plots); return ImmutableMap.copyOf(plots);
} }
@Nonnull public Set<Entry<PlotId, Plot>> getPlotEntries() { @NotNull public Set<Entry<PlotId, Plot>> getPlotEntries() {
return this.plots.entrySet(); return this.plots.entrySet();
} }
public boolean addPlot(@Nonnull final Plot plot) { public boolean addPlot(@NotNull final Plot plot) {
for (PlotPlayer pp : plot.getPlayersInPlot()) { for (PlotPlayer pp : plot.getPlayersInPlot()) {
pp.setMeta(PlotPlayer.META_LAST_PLOT, plot); pp.setMeta(PlotPlayer.META_LAST_PLOT, plot);
} }
@ -731,7 +727,7 @@ public abstract class PlotArea {
return null; return null;
} }
public boolean addPlotIfAbsent(@Nonnull final Plot plot) { public boolean addPlotIfAbsent(@NotNull final Plot plot) {
if (this.plots.putIfAbsent(plot.getId(), plot) == null) { if (this.plots.putIfAbsent(plot.getId(), plot) == null) {
for (PlotPlayer pp : plot.getPlayersInPlot()) { for (PlotPlayer pp : plot.getPlayersInPlot()) {
pp.setMeta(PlotPlayer.META_LAST_PLOT, plot); pp.setMeta(PlotPlayer.META_LAST_PLOT, plot);
@ -741,7 +737,7 @@ public abstract class PlotArea {
return false; return false;
} }
public boolean addPlotAbs(@Nonnull final Plot plot) { public boolean addPlotAbs(@NotNull final Plot plot) {
return this.plots.put(plot.getId(), plot) == null; return this.plots.put(plot.getId(), plot) == null;
} }
@ -786,14 +782,14 @@ public abstract class PlotArea {
* *
* @param key Meta data key * @param key Meta data key
*/ */
public void deleteMeta(@Nonnull final String key) { public void deleteMeta(@NotNull final String key) {
if (this.meta != null) { if (this.meta != null) {
this.meta.remove(key); this.meta.remove(key);
} }
} }
public boolean canClaim(@Nullable final PlotPlayer player, @Nonnull final PlotId pos1, public boolean canClaim(@Nullable final PlotPlayer player, @NotNull final PlotId pos1,
@Nonnull final PlotId pos2) { @NotNull final PlotId pos2) {
if (pos1.x == pos2.x && pos1.y == pos2.y) { if (pos1.x == pos2.x && pos1.y == pos2.y) {
if (getOwnedPlot(pos1) != null) { if (getOwnedPlot(pos1) != null) {
return false; return false;
@ -819,11 +815,11 @@ public abstract class PlotArea {
return true; return true;
} }
public boolean removePlot(@Nonnull final PlotId id) { public boolean removePlot(@NotNull final PlotId id) {
return this.plots.remove(id) != null; return this.plots.remove(id) != null;
} }
public boolean mergePlots(@Nonnull final List<PlotId> plotIds, final boolean removeRoads) { public boolean mergePlots(@NotNull final List<PlotId> plotIds, final boolean removeRoads) {
if (plotIds.size() < 2) { if (plotIds.size() < 2) {
return false; return false;
} }
@ -901,7 +897,7 @@ public abstract class PlotArea {
* @param pos2 second corner of selection * @param pos2 second corner of selection
* @return the plots in the selection which are owned * @return the plots in the selection which are owned
*/ */
public Set<Plot> getPlotSelectionOwned(@Nonnull final PlotId pos1, @Nonnull final PlotId pos2) { public Set<Plot> getPlotSelectionOwned(@NotNull final PlotId pos1, @NotNull final PlotId pos2) {
final int size = (1 + pos2.x - pos1.x) * (1 + pos2.y - pos1.y); final int size = (1 + pos2.x - pos1.x) * (1 + pos2.y - pos1.y);
final Set<Plot> result = new HashSet<>(); final Set<Plot> result = new HashSet<>();
if (size < 16 || size < getPlotCount()) { if (size < 16 || size < getPlotCount()) {

View File

@ -132,8 +132,8 @@ public class PlotCluster {
toReturn = center.getHome(); toReturn = center.getHome();
if (toReturn.getY() == 0) { if (toReturn.getY() == 0) {
PlotManager manager = this.area.getPlotManager(); PlotManager manager = this.area.getPlotManager();
Location loc = manager.getSignLoc(center); Location location = manager.getSignLoc(center);
toReturn.setY(loc.getY()); toReturn.setY(location.getY());
} }
} else { } else {
toReturn = getClusterBottom().add(home.x, home.y, home.z); toReturn = getClusterBottom().add(home.x, home.y, home.z);

View File

@ -1,7 +1,7 @@
package com.github.intellectualsites.plotsquared.plot.object; package com.github.intellectualsites.plotsquared.plot.object;
import javax.annotation.Nonnull; import org.jetbrains.annotations.NotNull;
import javax.annotation.Nullable; import org.jetbrains.annotations.Nullable;
public class PlotId { public class PlotId {
/** /**
@ -32,14 +32,14 @@ public class PlotId {
* @return the PlotId representation of the arguement * @return the PlotId representation of the arguement
* @throws IllegalArgumentException if the string does not contain a valid PlotId * @throws IllegalArgumentException if the string does not contain a valid PlotId
*/ */
@Nonnull public static PlotId fromString(@Nonnull String string) { @NotNull public static PlotId fromString(@NotNull String string) {
PlotId plot = fromStringOrNull(string); PlotId plot = fromStringOrNull(string);
if (plot == null) if (plot == null)
throw new IllegalArgumentException("Cannot create PlotID. String invalid."); throw new IllegalArgumentException("Cannot create PlotID. String invalid.");
return plot; return plot;
} }
@Nullable public static PlotId fromStringOrNull(@Nonnull String string) { @Nullable public static PlotId fromStringOrNull(@NotNull String string) {
String[] parts = string.split("[;|,]"); String[] parts = string.split("[;|,]");
if (parts.length < 2) { if (parts.length < 2) {
return null; return null;

View File

@ -39,6 +39,12 @@ public abstract class PlotManager {
public abstract boolean unClaimPlot(Plot plot, Runnable whenDone); public abstract boolean unClaimPlot(Plot plot, Runnable whenDone);
/**
* Retrieves the location of where a sign should be for a plot.
*
* @param plot The plot
* @return The location where a sign should be
*/
public abstract Location getSignLoc(Plot plot); public abstract Location getSignLoc(Plot plot);
/* /*
@ -47,8 +53,7 @@ public abstract class PlotManager {
*/ */
public abstract String[] getPlotComponents(PlotId plotId); public abstract String[] getPlotComponents(PlotId plotId);
public abstract boolean setComponent(PlotId plotId, String component, public abstract boolean setComponent(PlotId plotId, String component, BlockBucket blocks);
BlockBucket blocks);
/* /*
* PLOT MERGING (return false if your generator does not support plot * PLOT MERGING (return false if your generator does not support plot

View File

@ -14,8 +14,8 @@ import com.github.intellectualsites.plotsquared.plot.util.*;
import com.github.intellectualsites.plotsquared.plot.util.expiry.ExpireManager; import com.github.intellectualsites.plotsquared.plot.util.expiry.ExpireManager;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import lombok.NonNull; import lombok.NonNull;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nonnull;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
@ -306,7 +306,7 @@ public abstract class PlotPlayer implements CommandCaller, OfflinePlotPlayer {
* *
* @return The location * @return The location
*/ */
public Location getLocation() { @NotNull public Location getLocation() {
Location location = getMeta("location"); Location location = getMeta("location");
if (location != null) { if (location != null) {
return location; return location;
@ -335,14 +335,14 @@ public abstract class PlotPlayer implements CommandCaller, OfflinePlotPlayer {
* *
* @return UUID * @return UUID
*/ */
@Override @Nonnull public abstract UUID getUUID(); @Override @NotNull public abstract UUID getUUID();
public boolean canTeleport(@Nonnull final Location loc) { public boolean canTeleport(@NotNull final Location location) {
Preconditions.checkNotNull(loc, "Specified location cannot be null"); Preconditions.checkNotNull(location, "Specified location cannot be null");
final Location current = getLocationFull(); final Location current = getLocationFull();
teleport(loc); teleport(location);
boolean result = true; boolean result = true;
if (!getLocation().equals(loc)) { if (!getLocation().equals(location)) {
result = false; result = false;
} }
teleport(current); teleport(current);
@ -421,21 +421,21 @@ public abstract class PlotPlayer implements CommandCaller, OfflinePlotPlayer {
* *
* @param weather the weather visible to the player * @param weather the weather visible to the player
*/ */
public abstract void setWeather(@Nonnull PlotWeather weather); public abstract void setWeather(@NotNull PlotWeather weather);
/** /**
* Get this player's gamemode. * Get this player's gamemode.
* *
* @return the gamemode of the player. * @return the gamemode of the player.
*/ */
@Nonnull public abstract PlotGameMode getGameMode(); @NotNull public abstract PlotGameMode getGameMode();
/** /**
* Set this player's gameMode. * Set this player's gameMode.
* *
* @param gameMode the gamemode to set * @param gameMode the gamemode to set
*/ */
public abstract void setGameMode(@Nonnull PlotGameMode gameMode); public abstract void setGameMode(@NotNull PlotGameMode gameMode);
/** /**
* Set this player's local time (ticks). * Set this player's local time (ticks).
@ -464,7 +464,7 @@ public abstract class PlotPlayer implements CommandCaller, OfflinePlotPlayer {
* @param location where to play the music * @param location where to play the music
* @param id the record item id * @param id the record item id
*/ */
public abstract void playMusic(@Nonnull Location location, @Nonnull PlotBlock id); public abstract void playMusic(@NotNull Location location, @NotNull PlotBlock id);
/** /**
* Check if this player is banned. * Check if this player is banned.
@ -493,10 +493,10 @@ public abstract class PlotPlayer implements CommandCaller, OfflinePlotPlayer {
ByteBuffer buffer = ByteBuffer.allocate(13); ByteBuffer buffer = ByteBuffer.allocate(13);
buffer.putShort((short) x); buffer.putShort((short) x);
buffer.putShort((short) z); buffer.putShort((short) z);
Location loc = getLocation(); Location location = getLocation();
buffer.putInt(loc.getX()); buffer.putInt(location.getX());
buffer.put((byte) loc.getY()); buffer.put((byte) location.getY());
buffer.putInt(loc.getZ()); buffer.putInt(location.getZ());
setPersistentMeta("quitLoc", buffer.array()); setPersistentMeta("quitLoc", buffer.array());
} else if (hasPersistentMeta("quitLoc")) { } else if (hasPersistentMeta("quitLoc")) {
removePersistentMeta("quitLoc"); removePersistentMeta("quitLoc");
@ -596,11 +596,11 @@ public abstract class PlotPlayer implements CommandCaller, OfflinePlotPlayer {
return; return;
} }
final Location loc = new Location(plot.getWorldName(), x, y, z); final Location location = new Location(plot.getWorldName(), x, y, z);
if (plot.isLoaded()) { if (plot.isLoaded()) {
TaskManager.runTask(() -> { TaskManager.runTask(() -> {
if (getMeta("teleportOnLogin", true)) { if (getMeta("teleportOnLogin", true)) {
teleport(loc); teleport(location);
sendMessage( sendMessage(
Captions.TELEPORTED_TO_PLOT.f() + " (quitLoc) (" + plotX Captions.TELEPORTED_TO_PLOT.f() + " (quitLoc) (" + plotX
+ "," + plotZ + ")"); + "," + plotZ + ")");
@ -612,7 +612,7 @@ public abstract class PlotPlayer implements CommandCaller, OfflinePlotPlayer {
TaskManager.runTask(() -> { TaskManager.runTask(() -> {
if (getMeta("teleportOnLogin", true)) { if (getMeta("teleportOnLogin", true)) {
if (plot.isLoaded()) { if (plot.isLoaded()) {
teleport(loc); teleport(location);
sendMessage(Captions.TELEPORTED_TO_PLOT.f() sendMessage(Captions.TELEPORTED_TO_PLOT.f()
+ " (quitLoc-unloaded) (" + plotX + "," + plotZ + " (quitLoc-unloaded) (" + plotX + "," + plotZ
+ ")"); + ")");

View File

@ -5,7 +5,12 @@ import com.github.intellectualsites.plotsquared.plot.flag.Flags;
import com.github.intellectualsites.plotsquared.plot.object.comment.PlotComment; import com.github.intellectualsites.plotsquared.plot.object.comment.PlotComment;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import java.util.*; import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/** /**
* Generic settings class. * Generic settings class.
@ -80,6 +85,17 @@ public class PlotSettings {
return false; return false;
} }
public boolean setMerged(Direction direction, boolean merged) {
if (Direction.ALL == direction) {
throw new IllegalArgumentException("You cannot use Direction.ALL in this method!");
}
if (this.merged[direction.getIndex()] != merged) {
this.merged[direction.getIndex()] = merged;
return true;
}
return false;
}
public BlockLoc getPosition() { public BlockLoc getPosition() {
if (this.position == null) { if (this.position == null) {
return new BlockLoc(0, 0, 0); return new BlockLoc(0, 0, 0);

View File

@ -30,8 +30,8 @@ public class Schematic {
public boolean setBlock(BlockVector3 position, BaseBlock block) throws WorldEditException { public boolean setBlock(BlockVector3 position, BaseBlock block) throws WorldEditException {
if (clipboard.getRegion().contains(position)) { if (clipboard.getRegion().contains(position)) {
BlockVector3 v = position.subtract(clipboard.getRegion().getMinimumPoint()); BlockVector3 vector3 = position.subtract(clipboard.getRegion().getMinimumPoint());
clipboard.setBlock(v, block); clipboard.setBlock(vector3, block);
return true; return true;
} else { } else {
return false; return false;
@ -39,9 +39,9 @@ public class Schematic {
} }
public void save(File file) throws IOException { public void save(File file) throws IOException {
try (SpongeSchematicWriter ssw = new SpongeSchematicWriter( try (SpongeSchematicWriter schematicWriter = new SpongeSchematicWriter(
new NBTOutputStream(new FileOutputStream(file)))) { new NBTOutputStream(new FileOutputStream(file)))) {
ssw.write(clipboard); schematicWriter.write(clipboard);
} }
} }
} }

View File

@ -4,8 +4,8 @@ import com.github.intellectualsites.plotsquared.plot.config.Captions;
import com.github.intellectualsites.plotsquared.plot.flag.Flag; import com.github.intellectualsites.plotsquared.plot.flag.Flag;
import com.github.intellectualsites.plotsquared.plot.object.*; import com.github.intellectualsites.plotsquared.plot.object.*;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nonnull;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.UUID; import java.util.UUID;
@ -60,7 +60,7 @@ public class SinglePlot extends Plot {
return super.isLoaded(); return super.isLoaded();
} }
@Nonnull @Override public HashSet<RegionWrapper> getRegions() { @NotNull @Override public HashSet<RegionWrapper> getRegions() {
return regions; return regions;
} }

View File

@ -9,9 +9,9 @@ import com.github.intellectualsites.plotsquared.plot.object.*;
import com.github.intellectualsites.plotsquared.plot.util.SetupUtils; import com.github.intellectualsites.plotsquared.plot.util.SetupUtils;
import com.github.intellectualsites.plotsquared.plot.util.TaskManager; import com.github.intellectualsites.plotsquared.plot.util.TaskManager;
import com.github.intellectualsites.plotsquared.plot.util.WorldUtil; import com.github.intellectualsites.plotsquared.plot.util.WorldUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
@ -26,7 +26,7 @@ public class SinglePlotArea extends GridPlotWorld {
this.DEFAULT_HOME = new PlotLoc(Integer.MAX_VALUE, Integer.MAX_VALUE); this.DEFAULT_HOME = new PlotLoc(Integer.MAX_VALUE, Integer.MAX_VALUE);
} }
@Override @NotNull @Override
protected PlotManager createManager() { protected PlotManager createManager() {
return new SinglePlotManager(this); return new SinglePlotManager(this);
} }
@ -76,8 +76,8 @@ public class SinglePlotArea extends GridPlotWorld {
new File(dataDest, file.getName()).toPath()); new File(dataDest, file.getName()).toPath());
} }
} }
} catch (IOException ignore) { } catch (IOException exception) {
ignore.printStackTrace(); exception.printStackTrace();
} }
} }
} }
@ -113,38 +113,38 @@ public class SinglePlotArea extends GridPlotWorld {
new ConfigurationNode("void", this.VOID, "Void world", Configuration.BOOLEAN)}; new ConfigurationNode("void", this.VOID, "Void world", Configuration.BOOLEAN)};
} }
@Nullable @Override public Plot getOwnedPlot(@Nonnull final Location location) { @Nullable @Override public Plot getOwnedPlot(@NotNull final Location location) {
PlotId pid = PlotId.fromStringOrNull(location.getWorld()); PlotId pid = PlotId.fromStringOrNull(location.getWorld());
Plot plot = pid == null ? null : this.plots.get(pid); Plot plot = pid == null ? null : this.plots.get(pid);
return plot == null ? null : plot.getBasePlot(false); return plot == null ? null : plot.getBasePlot(false);
} }
@Nullable @Override public Plot getOwnedPlotAbs(@Nonnull Location location) { @Nullable @Override public Plot getOwnedPlotAbs(@NotNull Location location) {
PlotId pid = PlotId.fromStringOrNull(location.getWorld()); PlotId pid = PlotId.fromStringOrNull(location.getWorld());
return pid == null ? null : plots.get(pid); return pid == null ? null : plots.get(pid);
} }
@Nullable @Override public Plot getPlot(@Nonnull final Location location) { @Nullable @Override public Plot getPlot(@NotNull final Location location) {
PlotId pid = PlotId.fromStringOrNull(location.getWorld()); PlotId pid = PlotId.fromStringOrNull(location.getWorld());
return pid == null ? null : getPlot(pid); return pid == null ? null : getPlot(pid);
} }
@Nullable @Override public Plot getPlotAbs(@Nonnull final Location location) { @Nullable @Override public Plot getPlotAbs(@NotNull final Location location) {
final PlotId pid = PlotId.fromStringOrNull(location.getWorld()); final PlotId pid = PlotId.fromStringOrNull(location.getWorld());
return pid == null ? null : getPlotAbs(pid); return pid == null ? null : getPlotAbs(pid);
} }
public boolean addPlot(@Nonnull Plot plot) { public boolean addPlot(@NotNull Plot plot) {
plot = adapt(plot); plot = adapt(plot);
return super.addPlot(plot); return super.addPlot(plot);
} }
@Override public boolean addPlotAbs(@Nonnull Plot plot) { @Override public boolean addPlotAbs(@NotNull Plot plot) {
plot = adapt(plot); plot = adapt(plot);
return super.addPlotAbs(plot); return super.addPlotAbs(plot);
} }
@Override public boolean addPlotIfAbsent(@Nonnull Plot plot) { @Override public boolean addPlotIfAbsent(@NotNull Plot plot) {
plot = adapt(plot); plot = adapt(plot);
return super.addPlotIfAbsent(plot); return super.addPlotIfAbsent(plot);
} }
@ -160,7 +160,7 @@ public class SinglePlotArea extends GridPlotWorld {
return p; return p;
} }
@Nullable public Plot getPlotAbs(@Nonnull final PlotId id) { @Nullable public Plot getPlotAbs(@NotNull final PlotId id) {
Plot plot = getOwnedPlotAbs(id); Plot plot = getOwnedPlotAbs(id);
if (plot == null) { if (plot == null) {
return new SinglePlot(this, id); return new SinglePlot(this, id);
@ -168,7 +168,7 @@ public class SinglePlotArea extends GridPlotWorld {
return plot; return plot;
} }
@Nullable public Plot getPlot(@Nonnull PlotId id) { @Nullable public Plot getPlot(@NotNull PlotId id) {
// TODO // TODO
Plot plot = getOwnedPlotAbs(id); Plot plot = getOwnedPlotAbs(id);
if (plot == null) { if (plot == null) {

View File

@ -10,7 +10,7 @@ import com.github.intellectualsites.plotsquared.plot.object.*;
import com.github.intellectualsites.plotsquared.plot.object.worlds.SinglePlotArea; import com.github.intellectualsites.plotsquared.plot.object.worlds.SinglePlotArea;
import com.github.intellectualsites.plotsquared.plot.util.expiry.ExpireManager; import com.github.intellectualsites.plotsquared.plot.util.expiry.ExpireManager;
import javax.annotation.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;

View File

@ -13,8 +13,8 @@ import com.github.intellectualsites.plotsquared.plot.flag.Flags;
import com.github.intellectualsites.plotsquared.plot.object.*; import com.github.intellectualsites.plotsquared.plot.object.*;
import com.github.intellectualsites.plotsquared.plot.object.stream.AbstractDelegateOutputStream; import com.github.intellectualsites.plotsquared.plot.object.stream.AbstractDelegateOutputStream;
import com.github.intellectualsites.plotsquared.plot.util.expiry.ExpireManager; import com.github.intellectualsites.plotsquared.plot.util.expiry.ExpireManager;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nonnull;
import java.io.*; import java.io.*;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.MalformedURLException; import java.net.MalformedURLException;
@ -329,7 +329,7 @@ public class MainUtil {
* @param owner * @param owner
* @return The player's name, None, Everyone or Unknown * @return The player's name, None, Everyone or Unknown
*/ */
@Nonnull public static String getName(UUID owner) { @NotNull public static String getName(UUID owner) {
if (owner == null) { if (owner == null) {
return Captions.NONE.getTranslated(); return Captions.NONE.getTranslated();
} }
@ -358,7 +358,7 @@ public class MainUtil {
* @return * @return
* @see Plot#getCorners() * @see Plot#getCorners()
*/ */
@Nonnull public static Location[] getCorners(String world, Collection<RegionWrapper> regions) { @NotNull public static Location[] getCorners(String world, Collection<RegionWrapper> regions) {
Location min = null; Location min = null;
Location max = null; Location max = null;
for (RegionWrapper region : regions) { for (RegionWrapper region : regions) {
@ -560,11 +560,11 @@ public class MainUtil {
* Send a message to the player. * Send a message to the player.
* *
* @param player Player to receive message * @param player Player to receive message
* @param msg Message to send * @param message Message to send
* @return true Can be used in things such as commands (return PlayerFunctions.sendMessage(...)) * @return true Can be used in things such as commands (return PlayerFunctions.sendMessage(...))
*/ */
public static boolean sendMessage(PlotPlayer player, String msg) { public static boolean sendMessage(PlotPlayer player, String message) {
return sendMessage(player, msg, true); return sendMessage(player, message, true);
} }
/** /**
@ -585,7 +585,7 @@ public class MainUtil {
* @param prefix If the message should be prefixed with the configured prefix * @param prefix If the message should be prefixed with the configured prefix
* @return * @return
*/ */
public static boolean sendMessage(CommandCaller player, String msg, boolean prefix) { public static boolean sendMessage(CommandCaller player, @NotNull String msg, boolean prefix) {
if (!msg.isEmpty()) { if (!msg.isEmpty()) {
if (player == null) { if (player == null) {
String message = (prefix ? Captions.PREFIX.getTranslated() : "") + msg; String message = (prefix ? Captions.PREFIX.getTranslated() : "") + msg;

View File

@ -327,9 +327,9 @@ public abstract class SchematicHandler {
public Schematic getSchematic(@NotNull URL url) { public Schematic getSchematic(@NotNull URL url) {
try { try {
ReadableByteChannel rbc = Channels.newChannel(url.openStream()); ReadableByteChannel readableByteChannel = Channels.newChannel(url.openStream());
InputStream is = Channels.newInputStream(rbc); InputStream inputStream = Channels.newInputStream(readableByteChannel);
return getSchematic(is); return getSchematic(inputStream);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -338,15 +338,15 @@ public abstract class SchematicHandler {
public Schematic getSchematic(@NotNull InputStream is) { public Schematic getSchematic(@NotNull InputStream is) {
try { try {
SpongeSchematicReader ssr = SpongeSchematicReader schematicReader =
new SpongeSchematicReader(new NBTInputStream(new GZIPInputStream(is))); new SpongeSchematicReader(new NBTInputStream(new GZIPInputStream(is)));
BlockArrayClipboard clip = (BlockArrayClipboard) ssr.read(); BlockArrayClipboard clip = (BlockArrayClipboard) schematicReader.read();
return new Schematic(clip); return new Schematic(clip);
} catch (IOException ignored) { } catch (IOException ignored) {
try { try {
MCEditSchematicReader msr = MCEditSchematicReader schematicReader =
new MCEditSchematicReader(new NBTInputStream(new GZIPInputStream(is))); new MCEditSchematicReader(new NBTInputStream(new GZIPInputStream(is)));
BlockArrayClipboard clip = (BlockArrayClipboard) msr.read(); BlockArrayClipboard clip = (BlockArrayClipboard) schematicReader.read();
return new Schematic(clip); return new Schematic(clip);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();

View File

@ -11,7 +11,7 @@ import com.github.intellectualsites.plotsquared.plot.uuid.UUIDWrapper;
import com.google.common.collect.BiMap; import com.google.common.collect.BiMap;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import javax.annotation.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map; import java.util.Map;

View File

@ -15,7 +15,7 @@ import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap; import com.google.common.collect.HashBiMap;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import javax.annotation.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map; import java.util.Map;

View File

@ -102,8 +102,7 @@ public abstract class BasicLocalBlockQueue extends LocalBlockQueue {
lastWrappedChunk.setBlock(x & 15, y, z & 15, id); lastWrappedChunk.setBlock(x & 15, y, z & 15, id);
LocalChunk previous = this.blockChunks.put(pair, lastWrappedChunk); LocalChunk previous = this.blockChunks.put(pair, lastWrappedChunk);
if (previous == null) { if (previous == null) {
chunks.add(lastWrappedChunk); return chunks.add(lastWrappedChunk);
return true;
} }
this.blockChunks.put(pair, previous); this.blockChunks.put(pair, previous);
lastWrappedChunk = previous; lastWrappedChunk = previous;

View File

@ -102,9 +102,10 @@ public class DelegateLocalBlockQueue extends LocalBlockQueue {
} }
} }
@Override public void enqueue() { @Override public boolean enqueue() {
if (parent != null) { if (parent != null) {
parent.enqueue(); return parent.enqueue();
} }
return false;
} }
} }

View File

@ -45,10 +45,10 @@ public class GlobalBlockQueue {
public GlobalBlockQueue(QueueProvider provider, int threads) { public GlobalBlockQueue(QueueProvider provider, int threads) {
this.provider = provider; this.provider = provider;
activeQueues = new ConcurrentLinkedDeque<>(); this.activeQueues = new ConcurrentLinkedDeque<>();
inactiveQueues = new ConcurrentLinkedDeque<>(); this.inactiveQueues = new ConcurrentLinkedDeque<>();
runnables = new ConcurrentLinkedDeque<>(); this.runnables = new ConcurrentLinkedDeque<>();
running = new AtomicBoolean(); this.running = new AtomicBoolean();
this.PARALLEL_THREADS = threads; this.PARALLEL_THREADS = threads;
} }
@ -151,12 +151,20 @@ public class GlobalBlockQueue {
return false; return false;
} }
public void enqueue(LocalBlockQueue queue) { /**
inactiveQueues.remove(queue); * TODO Documentation needed.
*
* @param queue todo
* @return true if added to queue, false otherwise
*/
public boolean enqueue(LocalBlockQueue queue) {
boolean success = false;
success = inactiveQueues.remove(queue);
if (queue.size() > 0 && !activeQueues.contains(queue)) { if (queue.size() > 0 && !activeQueues.contains(queue)) {
queue.optimize(); queue.optimize();
activeQueues.add(queue); success = activeQueues.add(queue);
} }
return success;
} }
public void dequeue(LocalBlockQueue queue) { public void dequeue(LocalBlockQueue queue) {

View File

@ -16,8 +16,12 @@ import java.util.Map;
public abstract class LocalBlockQueue { public abstract class LocalBlockQueue {
public LocalBlockQueue(String world) { /**
// Implement this elsewhere * Needed for compatibility with FAWE.
*
* @param world unused
*/
@Deprecated public LocalBlockQueue(String world) {
} }
public ScopedLocalBlockQueue getForChunk(int x, int z) { public ScopedLocalBlockQueue getForChunk(int x, int z) {
@ -92,8 +96,8 @@ public abstract class LocalBlockQueue {
} }
} }
public void enqueue() { public boolean enqueue() {
GlobalBlockQueue.IMP.enqueue(this); return GlobalBlockQueue.IMP.enqueue(this);
} }
public void setCuboid(Location pos1, Location pos2, PlotBlock block) { public void setCuboid(Location pos1, Location pos2, PlotBlock block) {

View File

@ -80,22 +80,22 @@ public class ScopedLocalBlockQueue extends DelegateLocalBlockQueue {
int bx = minX; int bx = minX;
int bz = minZ; int bz = minZ;
PlotArea area = PlotSquared.get().getPlotArea(getWorld(), null); PlotArea area = PlotSquared.get().getPlotArea(getWorld(), null);
Location loc = new Location(getWorld(), bx, 0, bz); Location location = new Location(getWorld(), bx, 0, bz);
if (area != null) { if (area != null) {
PlotManager manager = area.getPlotManager(); PlotManager manager = area.getPlotManager();
for (int x = 0; x < 16; x++) { for (int x = 0; x < 16; x++) {
loc.setX(bx + x); location.setX(bx + x);
for (int z = 0; z < 16; z++) { for (int z = 0; z < 16; z++) {
loc.setZ(bz + z); location.setZ(bz + z);
task.run(area.getPlotAbs(loc), x, z); task.run(area.getPlotAbs(location), x, z);
} }
} }
} else { } else {
for (int x = 0; x < 16; x++) { for (int x = 0; x < 16; x++) {
loc.setX(bx + x); location.setX(bx + x);
for (int z = 0; z < 16; z++) { for (int z = 0; z < 16; z++) {
loc.setZ(bz + z); location.setZ(bz + z);
task.run(loc.getPlotAbs(), x, z); task.run(location.getPlotAbs(), x, z);
} }
} }
} }

View File

@ -1,11 +1,19 @@
package com.github.intellectualsites.plotsquared.plot.database; package com.github.intellectualsites.plotsquared.plot.database;
import com.github.intellectualsites.plotsquared.plot.flag.Flag; import com.github.intellectualsites.plotsquared.plot.flag.Flag;
import com.github.intellectualsites.plotsquared.plot.object.*; import com.github.intellectualsites.plotsquared.plot.object.Plot;
import com.github.intellectualsites.plotsquared.plot.object.PlotArea;
import com.github.intellectualsites.plotsquared.plot.object.PlotCluster;
import com.github.intellectualsites.plotsquared.plot.object.PlotId;
import com.github.intellectualsites.plotsquared.plot.object.RunnableVal;
import com.github.intellectualsites.plotsquared.plot.object.comment.PlotComment; import com.github.intellectualsites.plotsquared.plot.object.comment.PlotComment;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nonnull; import java.util.HashMap;
import java.util.*; import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
public class AbstractDBTest implements AbstractDB { public class AbstractDBTest implements AbstractDB {
@ -149,7 +157,7 @@ public class AbstractDBTest implements AbstractDB {
@Override public void setComment(Plot plot, PlotComment comment) { @Override public void setComment(Plot plot, PlotComment comment) {
} }
@Override public void getComments(@Nonnull Plot plot, String inbox, @Override public void getComments(@NotNull Plot plot, String inbox,
RunnableVal<List<PlotComment>> whenDone) { RunnableVal<List<PlotComment>> whenDone) {
} }

View File

@ -119,6 +119,7 @@ permissions:
plots.toggle: true plots.toggle: true
plots.toggle.titles: true plots.toggle.titles: true
plots.toggle.chat: true plots.toggle.chat: true
plots.toggle.time: true
plots.set.biome: true plots.set.biome: true
plots.set.home: true plots.set.home: true
plots.set.alias: true plots.set.alias: true

2
gradlew vendored
View File

@ -7,7 +7,7 @@
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
# You may obtain a copy of the License at # You may obtain a copy of the License at
# #
# https://www.apache.org/licenses/LICENSE-2.0 # http://www.apache.org/licenses/LICENSE-2.0
# #
# Unless required by applicable law or agreed to in writing, software # Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, # distributed under the License is distributed on an "AS IS" BASIS,

2
gradlew.bat vendored
View File

@ -5,7 +5,7 @@
@rem you may not use this file except in compliance with the License. @rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at @rem You may obtain a copy of the License at
@rem @rem
@rem https://www.apache.org/licenses/LICENSE-2.0 @rem http://www.apache.org/licenses/LICENSE-2.0
@rem @rem
@rem Unless required by applicable law or agreed to in writing, software @rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS, @rem distributed under the License is distributed on an "AS IS" BASIS,