Use PaperLib and make command task return completable futures

This commit is contained in:
Sauilitired 2019-01-21 09:20:33 +01:00 committed by MattBDev
parent d6779d977a
commit 20dd98d3b9
21 changed files with 213 additions and 182 deletions

View File

@ -2,9 +2,11 @@ repositories {
maven { url "https://hub.spigotmc.org/nexus/content/repositories/snapshots/" } maven { url "https://hub.spigotmc.org/nexus/content/repositories/snapshots/" }
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
maven { url "http://nexus.hc.to/content/repositories/pub_releases" } maven { url "http://nexus.hc.to/content/repositories/pub_releases" }
maven { url "https://repo.codemc.org/repository/maven-public" } maven { url = "https://repo.codemc.org/repository/maven-public" }
//maven { url 'http://repo.onarandombox.com/content/groups/public'} maven {
maven { url 'https://papermc.io/repo/repository/maven-public/' } name 'papermc'
url 'https://papermc.io/repo/repository/maven-public/'
}
mavenLocal() mavenLocal()
} }
@ -15,6 +17,7 @@ dependencies {
//implementation 'com.onarandombox.multiversecore:Multiverse-Core:3.0.0-SNAPSHOT' //implementation 'com.onarandombox.multiversecore:Multiverse-Core:3.0.0-SNAPSHOT'
implementation 'org.spigotmc:spigot-api:1.14.3-R0.1-SNAPSHOT' implementation 'org.spigotmc:spigot-api:1.14.3-R0.1-SNAPSHOT'
compile(group: 'com.sk89q.worldedit', name: 'worldedit-bukkit', version: '7.0.0') compile(group: 'com.sk89q.worldedit', name: 'worldedit-bukkit', version: '7.0.0')
compile "io.papermc:paperlib:1.0.1"
compile("net.milkbowl.vault:VaultAPI:1.7") { compile("net.milkbowl.vault:VaultAPI:1.7") {
exclude module: 'bukkit' exclude module: 'bukkit'
} }
@ -44,7 +47,10 @@ shadowJar {
include(dependency('com.squareup.okhttp3:okhttp:3.14.0')) include(dependency('com.squareup.okhttp3:okhttp:3.14.0'))
include(dependency('com.squareup.okio:okio:2.2.2')) include(dependency('com.squareup.okio:okio:2.2.2'))
include(dependency('org.jetbrains.kotlin:kotlin-stdlib:1.3.30')) include(dependency('org.jetbrains.kotlin:kotlin-stdlib:1.3.30'))
include(dependency("io.papermc:paperlib:1.0.1"))
} }
relocate 'io.papermc.lib', 'com.github.intellectualsites.plotsquared.bukkit.paperlib'
// relocate('org.mcstats', 'com.plotsquared.stats')
archiveName = "${parent.name}-${project.name}-${parent.version}.jar" archiveName = "${parent.name}-${project.name}-${parent.version}.jar"
destinationDir = file '../target' destinationDir = file '../target'
} }

View File

@ -39,6 +39,7 @@ import com.github.intellectualsites.plotsquared.plot.util.*;
import com.github.intellectualsites.plotsquared.plot.util.block.QueueProvider; import com.github.intellectualsites.plotsquared.plot.util.block.QueueProvider;
import com.github.intellectualsites.plotsquared.plot.uuid.UUIDWrapper; import com.github.intellectualsites.plotsquared.plot.uuid.UUIDWrapper;
import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.WorldEdit;
import io.papermc.lib.PaperLib;
import lombok.Getter; import lombok.Getter;
import lombok.NonNull; import lombok.NonNull;
import org.bukkit.*; import org.bukkit.*;
@ -114,23 +115,7 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain
@Override public void onEnable() { @Override public void onEnable() {
this.pluginName = getDescription().getName(); this.pluginName = getDescription().getName();
PlotPlayer.registerConverter(Player.class, BukkitUtil::getPlayer); PlotPlayer.registerConverter(Player.class, BukkitUtil::getPlayer);
PaperLib.suggestPaper(this);
if (Bukkit.getVersion().contains("git-Spigot")) {
// Uses System.out.println because the logger isn't initialized yet
System.out
.println("[P2] ========================== USE PAPER ==========================");
System.out.println("[P2] Paper offers a more complete API for us to work with");
System.out.println("[P2] and we may come to rely on it in the future.");
System.out.println("[P2] It is also recommended out of a performance standpoint as");
System.out
.println("[P2] it contains many improvements missing from Spigot and Bukkit.");
System.out.println("[P2] DOWNLOAD: https://papermc.io/downloads");
System.out.println("[P2] GUIDE: https://www.spigotmc.org/threads/21726/");
System.out.println("[P2] NOTE: This is only a recommendation");
System.out.println("[P2] Spigot is still supported.");
System.out
.println("[P2] ===============================================================");
}
new PlotSquared(this, "Bukkit"); new PlotSquared(this, "Bukkit");

View File

@ -6,9 +6,6 @@ import org.bukkit.event.HandlerList;
import java.util.UUID; import java.util.UUID;
/**
*
*/
public class PlayerPlotTrustedEvent extends PlotEvent { public class PlayerPlotTrustedEvent extends PlotEvent {
private static final HandlerList handlers = new HandlerList(); private static final HandlerList handlers = new HandlerList();

View File

@ -6,12 +6,9 @@ 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.PlotBlock; import com.github.intellectualsites.plotsquared.plot.object.PlotBlock;
import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer; import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer;
import com.github.intellectualsites.plotsquared.plot.util.EconHandler; import com.github.intellectualsites.plotsquared.plot.util.*;
import com.github.intellectualsites.plotsquared.plot.util.MathMan; import com.google.common.base.Preconditions;
import com.github.intellectualsites.plotsquared.plot.util.PlotGameMode; import io.papermc.lib.PaperLib;
import com.github.intellectualsites.plotsquared.plot.util.PlotWeather;
import com.github.intellectualsites.plotsquared.plot.util.StringMan;
import com.github.intellectualsites.plotsquared.plot.util.UUIDHandler;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound; import org.bukkit.Sound;
@ -20,11 +17,11 @@ import org.bukkit.entity.Player;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.EventException; import org.bukkit.event.EventException;
import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import org.bukkit.permissions.PermissionAttachmentInfo; 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;
@ -42,21 +39,23 @@ public class BukkitPlayer extends PlotPlayer {
* <p>Please do not use this method. Instead use * <p>Please do not use this method. Instead use
* BukkitUtil.getPlayer(Player), as it caches player objects.</p> * BukkitUtil.getPlayer(Player), as it caches player objects.</p>
* *
* @param player * @param player Bukkit player instance
*/ */
public BukkitPlayer(Player player) { public BukkitPlayer(@Nonnull final Player player) {
Preconditions.checkNotNull(player, "Bukkit player instance cannot be null");
this.player = player; this.player = player;
super.populatePersistentMetaMap(); super.populatePersistentMetaMap();
} }
public BukkitPlayer(Player player, boolean offline) { public BukkitPlayer(@Nonnull final Player player, final boolean offline) {
Preconditions.checkNotNull(player, "Bukkit player instance cannot be null");
this.player = player; this.player = player;
this.offline = offline; this.offline = offline;
super.populatePersistentMetaMap(); super.populatePersistentMetaMap();
} }
@Override public Location getLocation() { @Override public Location getLocation() {
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;
} }
@ -71,9 +70,10 @@ public class BukkitPlayer extends PlotPlayer {
return this.player.getLastPlayed(); return this.player.getLastPlayed();
} }
@Override public boolean canTeleport(Location loc) { @Override public boolean canTeleport(@Nonnull final Location loc) {
org.bukkit.Location to = BukkitUtil.getLocation(loc); Preconditions.checkNotNull(loc, "Bukkit location cannot be null");
org.bukkit.Location from = player.getLocation(); final org.bukkit.Location to = BukkitUtil.getLocation(loc);
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);
if (event.isCancelled() || !event.getTo().equals(to)) { if (event.isCancelled() || !event.getTo().equals(to)) {
@ -90,32 +90,34 @@ public class BukkitPlayer extends PlotPlayer {
} }
private void callEvent(final Event event) { private void callEvent(final Event event) {
RegisteredListener[] listeners = event.getHandlers().getRegisteredListeners(); Preconditions.checkNotNull(event, "Event cannot be null");
for (RegisteredListener listener : listeners) {
final RegisteredListener[] listeners = event.getHandlers().getRegisteredListeners();
for (final RegisteredListener listener : listeners) {
if (listener.getPlugin().getName().equals(PlotSquared.imp().getPluginName())) { if (listener.getPlugin().getName().equals(PlotSquared.imp().getPluginName())) {
continue; continue;
} }
try { try {
listener.callEvent(event); listener.callEvent(event);
} catch (EventException e) { } catch (final EventException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
} }
@Override public boolean hasPermission(String permission) { @Override public boolean hasPermission(final String permission) {
if (this.offline && EconHandler.manager != null) { if (this.offline && EconHandler.manager != null) {
return EconHandler.manager.hasPermission(getName(), permission); return EconHandler.manager.hasPermission(getName(), permission);
} }
return this.player.hasPermission(permission); return this.player.hasPermission(permission);
} }
@Override public int hasPermissionRange(String stub, int range) { @Override public int hasPermissionRange(final String stub, final int range) {
if (hasPermission(Captions.PERMISSION_ADMIN.s())) { if (hasPermission(Captions.PERMISSION_ADMIN.s())) {
return Integer.MAX_VALUE; return Integer.MAX_VALUE;
} }
String[] nodes = stub.split("\\."); final String[] nodes = stub.split("\\.");
StringBuilder n = new StringBuilder(); final StringBuilder n = new StringBuilder();
for (int i = 0; i < (nodes.length - 1); i++) { for (int i = 0; i < (nodes.length - 1); i++) {
n.append(nodes[i]).append("."); n.append(nodes[i]).append(".");
if (!stub.equals(n + Captions.PERMISSION_STAR.s())) { if (!stub.equals(n + Captions.PERMISSION_STAR.s())) {
@ -131,7 +133,7 @@ public class BukkitPlayer extends PlotPlayer {
if (CHECK_EFFECTIVE) { if (CHECK_EFFECTIVE) {
boolean hasAny = false; boolean hasAny = false;
String stubPlus = stub + "."; String stubPlus = stub + ".";
Set<PermissionAttachmentInfo> effective = player.getEffectivePermissions(); final Set<PermissionAttachmentInfo> effective = player.getEffectivePermissions();
if (!effective.isEmpty()) { if (!effective.isEmpty()) {
for (PermissionAttachmentInfo attach : effective) { for (PermissionAttachmentInfo attach : effective) {
String permStr = attach.getPermission(); String permStr = attach.getPermission();
@ -170,11 +172,11 @@ public class BukkitPlayer extends PlotPlayer {
return max; return max;
} }
@Override public boolean isPermissionSet(String permission) { @Override public boolean isPermissionSet(final String permission) {
return this.player.isPermissionSet(permission); return this.player.isPermissionSet(permission);
} }
@Override public void sendMessage(String message) { @Override public void sendMessage(final String message) {
if (!StringMan.isEqual(this.getMeta("lastMessage"), message) || ( if (!StringMan.isEqual(this.getMeta("lastMessage"), message) || (
System.currentTimeMillis() - this.<Long>getMeta("lastMessageTime") > 5000)) { System.currentTimeMillis() - this.<Long>getMeta("lastMessageTime") > 5000)) {
setMeta("lastMessage", message); setMeta("lastMessage", message);
@ -183,14 +185,13 @@ public class BukkitPlayer extends PlotPlayer {
} }
} }
@Override public void teleport(Location location) { @Override public void teleport(@Nonnull 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;
} }
this.player.teleport( final org.bukkit.Location bukkitLocation = new org.bukkit.Location(BukkitUtil.getWorld(location.getWorld()), location.getX() + 0.5,
new org.bukkit.Location(BukkitUtil.getWorld(location.getWorld()), location.getX() + 0.5, location.getY(), location.getZ() + 0.5, location.getYaw(), location.getPitch());
location.getY(), location.getZ() + 0.5, location.getYaw(), location.getPitch()), PaperLib.teleportAsync(player, bukkitLocation);
TeleportCause.COMMAND);
} }
@Override public String getName() { @Override public String getName() {
@ -208,14 +209,14 @@ public class BukkitPlayer extends PlotPlayer {
this.player.setCompassTarget( this.player.setCompassTarget(
new org.bukkit.Location(BukkitUtil.getWorld(location.getWorld()), location.getX(), new org.bukkit.Location(BukkitUtil.getWorld(location.getWorld()), location.getX(),
location.getY(), location.getZ())); location.getY(), location.getZ()));
} }
@Override public Location getLocationFull() { @Override public Location getLocationFull() {
return BukkitUtil.getLocationFull(this.player); return BukkitUtil.getLocationFull(this.player);
} }
@Override public void setWeather(PlotWeather weather) { @Override public void setWeather(@Nonnull final PlotWeather weather) {
Preconditions.checkNotNull(weather, "Specified weather cannot be null");
switch (weather) { switch (weather) {
case CLEAR: case CLEAR:
this.player.setPlayerWeather(WeatherType.CLEAR); this.player.setPlayerWeather(WeatherType.CLEAR);
@ -230,7 +231,7 @@ public class BukkitPlayer extends PlotPlayer {
} }
} }
@Override public PlotGameMode getGameMode() { @Nonnull @Override public PlotGameMode getGameMode() {
switch (this.player.getGameMode()) { switch (this.player.getGameMode()) {
case ADVENTURE: case ADVENTURE:
return PlotGameMode.ADVENTURE; return PlotGameMode.ADVENTURE;
@ -245,7 +246,8 @@ public class BukkitPlayer extends PlotPlayer {
} }
} }
@Override public void setGameMode(PlotGameMode gameMode) { @Override public void setGameMode(@Nonnull final PlotGameMode gameMode) {
Preconditions.checkNotNull(gameMode, "Specified gamemode cannot be null");
switch (gameMode) { switch (gameMode) {
case ADVENTURE: case ADVENTURE:
this.player.setGameMode(GameMode.ADVENTURE); this.player.setGameMode(GameMode.ADVENTURE);
@ -263,7 +265,7 @@ public class BukkitPlayer extends PlotPlayer {
} }
} }
@Override public void setTime(long time) { @Override public void setTime(final long time) {
if (time != Long.MAX_VALUE) { if (time != Long.MAX_VALUE) {
this.player.setPlayerTime(time, false); this.player.setPlayerTime(time, false);
} else { } else {
@ -279,7 +281,9 @@ public class BukkitPlayer extends PlotPlayer {
this.player.setAllowFlight(fly); this.player.setAllowFlight(fly);
} }
@Override public void playMusic(Location location, PlotBlock id) { @Override public void playMusic(@Nonnull final Location location, @Nonnull final PlotBlock id) {
Preconditions.checkNotNull(location, "Specified location cannot be null");
Preconditions.checkNotNull(id, "Specified block cannot be null");
if (PlotBlock.isEverything(id) || id.isAir()) { if (PlotBlock.isEverything(id) || id.isAir()) {
// Let's just stop all the discs because why not? // Let's just stop all the discs because why not?
for (final Sound sound : Arrays.stream(Sound.values()) for (final Sound sound : Arrays.stream(Sound.values())
@ -294,7 +298,7 @@ public class BukkitPlayer extends PlotPlayer {
} }
} }
@Override public void kick(String message) { @Override public void kick(final String message) {
this.player.kickPlayer(message); this.player.kickPlayer(message);
} }

View File

@ -20,6 +20,7 @@ import java.io.IOException;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture;
public abstract class Command { public abstract class Command {
@ -72,14 +73,16 @@ public abstract class Command {
&& types[2] == String[].class && types[3] == RunnableVal3.class && types[2] == String[].class && types[3] == RunnableVal3.class
&& types[4] == RunnableVal2.class) { && types[4] == RunnableVal2.class) {
Command tmp = new Command(this, true) { Command tmp = new Command(this, true) {
@Override public void execute(PlotPlayer player, String[] args, @Override public CompletableFuture<Boolean> execute(PlotPlayer player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm, RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) { RunnableVal2<Command, CommandResult> whenDone) {
try { try {
method.invoke(Command.this, this, player, args, confirm, whenDone); method.invoke(Command.this, this, player, args, confirm, whenDone);
return CompletableFuture.completedFuture(true);
} catch (IllegalAccessException | InvocationTargetException e) { } catch (IllegalAccessException | InvocationTargetException e) {
e.printStackTrace(); e.printStackTrace();
} }
return CompletableFuture.completedFuture(false);
} }
}; };
tmp.init(method.getAnnotation(CommandDeclaration.class)); tmp.init(method.getAnnotation(CommandDeclaration.class));
@ -261,9 +264,10 @@ public abstract class Command {
* @param player Caller * @param player Caller
* @param args Arguments * @param args Arguments
* @param confirm Instance, Success, Failure * @param confirm Instance, Success, Failure
* @return * @return CompletableFuture true if the command executed fully, false in
* any other case
*/ */
public void execute(PlotPlayer player, String[] args, public CompletableFuture<Boolean> execute(PlotPlayer player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm, RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) throws CommandException { RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
if (args.length == 0 || args[0] == null) { if (args.length == 0 || args[0] == null) {
@ -272,18 +276,18 @@ public abstract class Command {
} else { } else {
Captions.COMMAND_SYNTAX.send(player, getUsage()); Captions.COMMAND_SYNTAX.send(player, getUsage());
} }
return; return CompletableFuture.completedFuture(false);
} }
if (this.allCommands.isEmpty()) { if (this.allCommands.isEmpty()) {
player.sendMessage( player.sendMessage(
"Not Implemented: https://github.com/IntellectualSites/PlotSquared/issues/new"); "Not Implemented: https://github.com/IntellectualSites/PlotSquared/issues/new");
return; return CompletableFuture.completedFuture(false);
} }
Command cmd = getCommand(args[0]); Command cmd = getCommand(args[0]);
if (cmd == null) { if (cmd == null) {
if (this.parent != null) { if (this.parent != null) {
Captions.COMMAND_SYNTAX.send(player, getUsage()); Captions.COMMAND_SYNTAX.send(player, getUsage());
return; return CompletableFuture.completedFuture(false);
} }
// Help command // Help command
try { try {
@ -293,7 +297,7 @@ public abstract class Command {
// This will default certain syntax to the help command // This will default certain syntax to the help command
// e.g. /plot, /plot 1, /plot claiming // e.g. /plot, /plot 1, /plot claiming
MainCommand.getInstance().help.execute(player, args, null, null); MainCommand.getInstance().help.execute(player, args, null, null);
return; return CompletableFuture.completedFuture(false);
} catch (IllegalArgumentException ignored) { } catch (IllegalArgumentException ignored) {
} }
// Command recommendation // Command recommendation
@ -302,13 +306,16 @@ public abstract class Command {
if (commands.isEmpty()) { if (commands.isEmpty()) {
MainUtil.sendMessage(player, Captions.DID_YOU_MEAN, MainUtil.sendMessage(player, Captions.DID_YOU_MEAN,
MainCommand.getInstance().help.getUsage()); MainCommand.getInstance().help.getUsage());
return; return CompletableFuture.completedFuture(false);
} }
String[] allargs = HashSet<String> setArgs = new HashSet<>(args.length);
Arrays.stream(args).map(String::toLowerCase).distinct().toArray(String[]::new); for (String arg : args) {
setArgs.add(arg.toLowerCase());
}
String[] allArgs = setArgs.toArray(new String[0]);
int best = 0; int best = 0;
for (Command current : commands) { for (Command current : commands) {
int match = getMatch(allargs, current); int match = getMatch(allArgs, current);
if (match > best) { if (match > best) {
cmd = current; cmd = current;
} }
@ -317,17 +324,18 @@ public abstract class Command {
cmd = new StringComparison<>(args[0], this.allCommands).getMatchObject(); cmd = new StringComparison<>(args[0], this.allCommands).getMatchObject();
} }
MainUtil.sendMessage(player, Captions.DID_YOU_MEAN, cmd.getUsage()); MainUtil.sendMessage(player, Captions.DID_YOU_MEAN, cmd.getUsage());
return; return CompletableFuture.completedFuture(false);
} }
String[] newArgs = Arrays.copyOfRange(args, 1, args.length); String[] newArgs = Arrays.copyOfRange(args, 1, args.length);
if (!cmd.checkArgs(player, newArgs) || !cmd.canExecute(player, true)) { if (!cmd.checkArgs(player, newArgs) || !cmd.canExecute(player, true)) {
return; return CompletableFuture.completedFuture(false);
} }
try { try {
cmd.execute(player, newArgs, confirm, whenDone); cmd.execute(player, newArgs, confirm, whenDone);
} catch (CommandException e) { } catch (CommandException e) {
e.perform(player); e.perform(player);
} }
return CompletableFuture.completedFuture(true);
} }
public boolean checkArgs(CommandCaller player, String[] args) { public boolean checkArgs(CommandCaller player, String[] args) {

View File

@ -15,6 +15,7 @@ import com.github.intellectualsites.plotsquared.plot.util.Permissions;
import java.util.Iterator; import java.util.Iterator;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@CommandDeclaration(command = "add", @CommandDeclaration(command = "add",
description = "Allow a user to build in a plot while you are online", description = "Allow a user to build in a plot while you are online",
@ -25,7 +26,7 @@ import java.util.UUID;
super(MainCommand.getInstance(), true); super(MainCommand.getInstance(), true);
} }
@Override public void execute(final PlotPlayer player, String[] args, @Override public CompletableFuture<Boolean> execute(final PlotPlayer player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm, RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) throws CommandException { RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
final Plot plot = check(player.getCurrentPlot(), Captions.NOT_IN_PLOT); final Plot plot = check(player.getCurrentPlot(), Captions.NOT_IN_PLOT);
@ -78,5 +79,7 @@ import java.util.UUID;
MainUtil.sendMessage(player, Captions.MEMBER_ADDED); MainUtil.sendMessage(player, Captions.MEMBER_ADDED);
} }
}, null); }, null);
return CompletableFuture.completedFuture(true);
} }
} }

View File

@ -14,6 +14,7 @@ import com.github.intellectualsites.plotsquared.plot.util.UUIDHandler;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.concurrent.CompletableFuture;
@CommandDeclaration(command = "buy", description = "Buy the plot you are standing on", @CommandDeclaration(command = "buy", description = "Buy the plot you are standing on",
usage = "/plot buy", permission = "plots.buy", category = CommandCategory.CLAIMING, usage = "/plot buy", permission = "plots.buy", category = CommandCategory.CLAIMING,
@ -23,7 +24,7 @@ import java.util.Set;
super(MainCommand.getInstance(), true); super(MainCommand.getInstance(), true);
} }
@Override public void execute(final PlotPlayer player, String[] args, @Override public CompletableFuture<Boolean> execute(final PlotPlayer player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm, RunnableVal3<Command, Runnable, Runnable> confirm,
final RunnableVal2<Command, CommandResult> whenDone) { final RunnableVal2<Command, CommandResult> whenDone) {
@ -65,5 +66,6 @@ import java.util.Set;
player.deposit(price); player.deposit(price);
whenDone.run(Buy.this, CommandResult.FAILURE); whenDone.run(Buy.this, CommandResult.FAILURE);
}); });
return CompletableFuture.completedFuture(true);
} }
} }

View File

@ -14,6 +14,8 @@ 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.block.GlobalBlockQueue; import com.github.intellectualsites.plotsquared.plot.util.block.GlobalBlockQueue;
import java.util.concurrent.CompletableFuture;
@CommandDeclaration(command = "clear", description = "Clear the plot you stand on", @CommandDeclaration(command = "clear", description = "Clear the plot you stand on",
permission = "plots.clear", category = CommandCategory.APPEARANCE, usage = "/plot clear", permission = "plots.clear", category = CommandCategory.APPEARANCE, usage = "/plot clear",
aliases = "reset", confirmation = true) public class Clear extends Command { aliases = "reset", confirmation = true) public class Clear extends Command {
@ -25,7 +27,7 @@ import com.github.intellectualsites.plotsquared.plot.util.block.GlobalBlockQueue
super(MainCommand.getInstance(), true); super(MainCommand.getInstance(), true);
} }
@Override public void execute(final PlotPlayer player, String[] args, @Override public CompletableFuture<Boolean> execute(final PlotPlayer player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm, RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) throws CommandException { RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
checkTrue(args.length == 0, Captions.COMMAND_SYNTAX, getUsage()); checkTrue(args.length == 0, Captions.COMMAND_SYNTAX, getUsage());
@ -59,5 +61,6 @@ import com.github.intellectualsites.plotsquared.plot.util.block.GlobalBlockQueue
plot.addRunning(); plot.addRunning();
} }
}, null); }, null);
return CompletableFuture.completedFuture(true);
} }
} }

View File

@ -32,6 +32,7 @@ import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@CommandDeclaration(command = "debugexec", permission = "plots.admin", @CommandDeclaration(command = "debugexec", permission = "plots.admin",
description = "Mutli-purpose debug command", aliases = {"exec", "$"}, description = "Mutli-purpose debug command", aliases = {"exec", "$"},
@ -284,7 +285,7 @@ import java.util.UUID;
System.getProperty("line.separator")); System.getProperty("line.separator"));
new Command(MainCommand.getInstance(), true, args[1].split("\\.")[0], null, new Command(MainCommand.getInstance(), true, args[1].split("\\.")[0], null,
RequiredType.NONE, CommandCategory.DEBUG) { RequiredType.NONE, CommandCategory.DEBUG) {
@Override public void execute(PlotPlayer player, String[] args, @Override public CompletableFuture<Boolean> execute(PlotPlayer player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm, RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) { RunnableVal2<Command, CommandResult> whenDone) {
try { try {
@ -295,6 +296,7 @@ import java.util.UUID;
e.printStackTrace(); e.printStackTrace();
MainUtil.sendMessage(player, Captions.COMMAND_WENT_WRONG); MainUtil.sendMessage(player, Captions.COMMAND_WENT_WRONG);
} }
return CompletableFuture.completedFuture(true);
} }
}; };
return true; return true;

View File

@ -16,6 +16,7 @@ import com.google.common.base.Charsets;
import java.io.File; import java.io.File;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@CommandDeclaration(command = "debugimportworlds", permission = "plots.admin", @CommandDeclaration(command = "debugimportworlds", permission = "plots.admin",
description = "Import worlds by player name", requiredType = RequiredType.CONSOLE, description = "Import worlds by player name", requiredType = RequiredType.CONSOLE,
@ -24,14 +25,14 @@ import java.util.UUID;
super(MainCommand.getInstance(), true); super(MainCommand.getInstance(), true);
} }
@Override public void execute(PlotPlayer player, String[] args, @Override public CompletableFuture<Boolean> execute(PlotPlayer player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm, RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) throws CommandException { RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
// UUID.nameUUIDFromBytes(("OfflinePlayer:" + player.getName()).getBytes(Charsets.UTF_8)) // UUID.nameUUIDFromBytes(("OfflinePlayer:" + player.getName()).getBytes(Charsets.UTF_8))
PlotAreaManager pam = PlotSquared.get().getPlotAreaManager(); PlotAreaManager pam = PlotSquared.get().getPlotAreaManager();
if (!(pam instanceof SinglePlotAreaManager)) { if (!(pam instanceof SinglePlotAreaManager)) {
player.sendMessage("Must be a single plot area!"); player.sendMessage("Must be a single plot area!");
return; return CompletableFuture.completedFuture(false);
} }
SinglePlotArea area = ((SinglePlotAreaManager) pam).getArea(); SinglePlotArea area = ((SinglePlotAreaManager) pam).getArea();
PlotId id = new PlotId(0, 0); PlotId id = new PlotId(0, 0);
@ -64,5 +65,6 @@ import java.util.UUID;
} }
} }
player.sendMessage("Done!"); player.sendMessage("Done!");
return CompletableFuture.completedFuture(true);
} }
} }

View File

@ -14,6 +14,7 @@ import com.github.intellectualsites.plotsquared.plot.util.Permissions;
import com.github.intellectualsites.plotsquared.plot.util.UUIDHandler; import com.github.intellectualsites.plotsquared.plot.util.UUIDHandler;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@CommandDeclaration(command = "grant", category = CommandCategory.CLAIMING, @CommandDeclaration(command = "grant", category = CommandCategory.CLAIMING,
usage = "/plot grant <check|add> [player]", permission = "plots.grant", usage = "/plot grant <check|add> [player]", permission = "plots.grant",
@ -23,7 +24,7 @@ import java.util.UUID;
super(MainCommand.getInstance(), true); super(MainCommand.getInstance(), true);
} }
@Override public void execute(final PlotPlayer player, String[] args, @Override public CompletableFuture<Boolean> execute(final PlotPlayer player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm, RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) throws CommandException { RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
checkTrue(args.length >= 1 && args.length <= 2, Captions.COMMAND_SYNTAX, getUsage()); checkTrue(args.length >= 1 && args.length <= 2, Captions.COMMAND_SYNTAX, getUsage());
@ -33,7 +34,7 @@ import java.util.UUID;
case "check": case "check":
if (!Permissions.hasPermission(player, Captions.PERMISSION_GRANT.f(arg0))) { if (!Permissions.hasPermission(player, Captions.PERMISSION_GRANT.f(arg0))) {
Captions.NO_PERMISSION.send(player, Captions.PERMISSION_GRANT.f(arg0)); Captions.NO_PERMISSION.send(player, Captions.PERMISSION_GRANT.f(arg0));
return; return CompletableFuture.completedFuture(false);
} }
if (args.length > 2) { if (args.length > 2) {
break; break;
@ -46,7 +47,7 @@ import java.util.UUID;
} }
if (uuid == null) { if (uuid == null) {
Captions.INVALID_PLAYER.send(player, args[1]); Captions.INVALID_PLAYER.send(player, args[1]);
return; return CompletableFuture.completedFuture(false);
} }
MainUtil.getPersistentMeta(uuid, "grantedPlots", new RunnableVal<byte[]>() { MainUtil.getPersistentMeta(uuid, "grantedPlots", new RunnableVal<byte[]>() {
@Override public void run(byte[] array) { @Override public void run(byte[] array) {
@ -77,7 +78,9 @@ import java.util.UUID;
} }
} }
}); });
return CompletableFuture.completedFuture(true);
} }
Captions.COMMAND_SYNTAX.send(player, getUsage()); Captions.COMMAND_SYNTAX.send(player, getUsage());
return CompletableFuture.completedFuture(true);
} }
} }

View File

@ -12,6 +12,8 @@ import com.github.intellectualsites.plotsquared.plot.util.MathMan;
import com.github.intellectualsites.plotsquared.plot.util.StringMan; import com.github.intellectualsites.plotsquared.plot.util.StringMan;
import com.github.intellectualsites.plotsquared.plot.util.helpmenu.HelpMenu; import com.github.intellectualsites.plotsquared.plot.util.helpmenu.HelpMenu;
import java.util.concurrent.CompletableFuture;
@CommandDeclaration(command = "help", description = "Get this help menu", aliases = {"he", "?"}, @CommandDeclaration(command = "help", description = "Get this help menu", aliases = {"he", "?"},
category = CommandCategory.INFO, usage = "help [category|#]", permission = "plots.use") category = CommandCategory.INFO, usage = "help [category|#]", permission = "plots.use")
public class Help extends Command { public class Help extends Command {
@ -23,72 +25,73 @@ public class Help extends Command {
return true; return true;
} }
@Override public void execute(PlotPlayer player, String[] args, @Override public CompletableFuture<Boolean> execute(PlotPlayer player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm, RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) { RunnableVal2<Command, CommandResult> whenDone) {
switch (args.length) { switch (args.length) {
case 0: case 0:
displayHelp(player, null, 0); return displayHelp(player, null, 0);
return;
case 1: case 1:
if (MathMan.isInteger(args[0])) { if (MathMan.isInteger(args[0])) {
try { try {
displayHelp(player, null, Integer.parseInt(args[0])); return displayHelp(player, null, Integer.parseInt(args[0]));
} catch (NumberFormatException ignored) { } catch (NumberFormatException ignored) {
displayHelp(player, null, 1); return displayHelp(player, null, 1);
} }
} else { } else {
displayHelp(player, args[0], 1); return displayHelp(player, args[0], 1);
} }
return;
case 2: case 2:
if (MathMan.isInteger(args[1])) { if (MathMan.isInteger(args[1])) {
try { try {
displayHelp(player, args[0], Integer.parseInt(args[1])); return displayHelp(player, args[0], Integer.parseInt(args[1]));
} catch (NumberFormatException ignored) { } catch (NumberFormatException ignored) {
displayHelp(player, args[0], 1); return displayHelp(player, args[0], 1);
} }
} }
return; return CompletableFuture.completedFuture(false);
default: default:
Captions.COMMAND_SYNTAX.send(player, getUsage()); Captions.COMMAND_SYNTAX.send(player, getUsage());
} }
return CompletableFuture.completedFuture(true);
} }
public void displayHelp(CommandCaller player, String cat, int page) { public CompletableFuture<Boolean> displayHelp(final CommandCaller player, final String catRaw, final int page) {
CommandCategory catEnum = null; return CompletableFuture.supplyAsync(() -> {
if (cat != null) { String cat = catRaw;
if (StringMan.isEqualIgnoreCase(cat, "all")) {
catEnum = null; CommandCategory catEnum = null;
} else { if (cat != null) {
for (CommandCategory c : CommandCategory.values()) { if (!StringMan.isEqualIgnoreCase(cat, "all")) {
if (StringMan.isEqualIgnoreCaseToAny(cat, c.name(), c.toString())) { for (CommandCategory c : CommandCategory.values()) {
catEnum = c; if (StringMan.isEqualIgnoreCaseToAny(cat, c.name(), c.toString())) {
cat = c.name(); catEnum = c;
break; cat = c.name();
break;
}
}
if (catEnum == null) {
cat = null;
} }
} }
if (catEnum == null) {
cat = null;
}
} }
} if (cat == null && page == 0) {
if (cat == null && page == 0) { StringBuilder builder = new StringBuilder();
StringBuilder builder = new StringBuilder();
builder.append(Captions.HELP_HEADER.s()); builder.append(Captions.HELP_HEADER.s());
for (CommandCategory c : CommandCategory.values()) { for (CommandCategory c : CommandCategory.values()) {
builder.append("\n" + StringMan builder.append("\n").append(StringMan
.replaceAll(Captions.HELP_INFO_ITEM.s(), "%category%", .replaceAll(Captions.HELP_INFO_ITEM.s(), "%category%", c.toString().toLowerCase(),
c.toString().toLowerCase(), "%category_desc%", c.toString())); "%category_desc%", c.toString()));
} }
builder.append("\n").append(Captions.HELP_INFO_ITEM.s().replaceAll("%category%", "all") builder.append("\n").append(Captions.HELP_INFO_ITEM.s().replaceAll("%category%", "all")
.replaceAll("%category_desc%", Captions.HELP_DISPLAY_ALL_COMMANDS.s())); .replaceAll("%category_desc%", Captions.HELP_DISPLAY_ALL_COMMANDS.s()));
builder.append("\n" + Captions.HELP_FOOTER.s()); builder.append("\n" + Captions.HELP_FOOTER.s());
MainUtil.sendMessage(player, builder.toString(), false); MainUtil.sendMessage(player, builder.toString(), false);
return; return true;
} }
page--; new HelpMenu(player).setCategory(catEnum).getCommands().generateMaxPages()
new HelpMenu(player).setCategory(catEnum).getCommands().generateMaxPages() .generatePage(page - 1, getParent().toString()).render();
.generatePage(page, getParent().toString()).render(); return true;
});
} }
} }

View File

@ -11,6 +11,7 @@ import com.github.intellectualsites.plotsquared.plot.util.EventUtil;
import com.github.intellectualsites.plotsquared.plot.util.MainUtil; import com.github.intellectualsites.plotsquared.plot.util.MainUtil;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@CommandDeclaration(command = "leave", @CommandDeclaration(command = "leave",
description = "Removes self from being trusted or a member of the plot", description = "Removes self from being trusted or a member of the plot",
@ -20,7 +21,7 @@ import java.util.UUID;
super(MainCommand.getInstance(), true); super(MainCommand.getInstance(), true);
} }
@Override public void execute(PlotPlayer player, String[] args, @Override public CompletableFuture<Boolean> execute(PlotPlayer player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm, RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) throws CommandException { RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
final Plot plot = check(player.getCurrentPlot(), Captions.NOT_IN_PLOT); final Plot plot = check(player.getCurrentPlot(), Captions.NOT_IN_PLOT);
@ -44,5 +45,6 @@ import java.util.UUID;
MainUtil.sendMessage(player, Captions.REMOVED_PLAYERS, 1); MainUtil.sendMessage(player, Captions.REMOVED_PLAYERS, 1);
} }
} }
return CompletableFuture.completedFuture(true);
} }
} }

View File

@ -11,6 +11,7 @@ import com.github.intellectualsites.plotsquared.plot.util.EconHandler;
import com.github.intellectualsites.plotsquared.plot.util.Permissions; import com.github.intellectualsites.plotsquared.plot.util.Permissions;
import java.util.Arrays; import java.util.Arrays;
import java.util.concurrent.CompletableFuture;
/** /**
* PlotSquared command class. * PlotSquared command class.
@ -176,6 +177,8 @@ public class MainCommand extends Command {
@Override public void run(Command cmd, CommandResult result) { @Override public void run(Command cmd, CommandResult result) {
// Post command stuff!? // Post command stuff!?
} }
}).thenAccept(result -> {
// TODO: Something with the command result
}); });
} catch (CommandException e) { } catch (CommandException e) {
e.perform(player); e.perform(player);
@ -184,7 +187,7 @@ public class MainCommand extends Command {
return true; return true;
} }
@Override public void execute(final PlotPlayer player, String[] args, @Override public CompletableFuture<Boolean> execute(final PlotPlayer player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm, RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) { RunnableVal2<Command, CommandResult> whenDone) {
// Clear perm caching // // Clear perm caching //
@ -215,37 +218,32 @@ public class MainCommand extends Command {
args = Arrays.copyOfRange(args, 1, args.length); args = Arrays.copyOfRange(args, 1, args.length);
} }
if (args.length >= 2 && !args[0].isEmpty() && args[0].charAt(0) == '-') { if (args.length >= 2 && !args[0].isEmpty() && args[0].charAt(0) == '-') {
switch (args[0].substring(1)) { if ("f".equals(args[0].substring(1))) {
case "f": confirm = new RunnableVal3<Command, Runnable, Runnable>() {
confirm = new RunnableVal3<Command, Runnable, Runnable>() { @Override public void run(Command cmd, Runnable success, Runnable failure) {
@Override if (EconHandler.manager != null) {
public void run(Command cmd, Runnable success, Runnable failure) { PlotArea area = player.getApplicablePlotArea();
if (EconHandler.manager != null) { if (area != null) {
PlotArea area = player.getApplicablePlotArea(); Expression<Double> priceEval = area.PRICES.get(cmd.getFullId());
if (area != null) { Double price = priceEval != null ? priceEval.evaluate(0d) : 0d;
Expression<Double> priceEval = if (price != 0d
area.PRICES.get(cmd.getFullId()); && EconHandler.manager.getMoney(player) < price) {
Double price = if (failure != null) {
priceEval != null ? priceEval.evaluate(0d) : 0d; failure.run();
if (price != 0d
&& EconHandler.manager.getMoney(player) < price) {
if (failure != null) {
failure.run();
}
return;
} }
return;
} }
} }
if (success != null) {
success.run();
}
} }
}; if (success != null) {
args = Arrays.copyOfRange(args, 1, args.length); success.run();
break; }
default: }
Captions.INVALID_COMMAND_FLAG.send(player); };
return; args = Arrays.copyOfRange(args, 1, args.length);
} else {
Captions.INVALID_COMMAND_FLAG.send(player);
return CompletableFuture.completedFuture(false);
} }
} }
} }
@ -275,6 +273,7 @@ public class MainCommand extends Command {
player.setMeta(PlotPlayer.META_LAST_PLOT, plot); player.setMeta(PlotPlayer.META_LAST_PLOT, plot);
} }
} }
return CompletableFuture.completedFuture(true);
} }
@Override public boolean canExecute(CommandCaller player, boolean message) { @Override public boolean canExecute(CommandCaller player, boolean message) {

View File

@ -9,6 +9,8 @@ import com.github.intellectualsites.plotsquared.plot.object.RunnableVal2;
import com.github.intellectualsites.plotsquared.plot.object.RunnableVal3; import com.github.intellectualsites.plotsquared.plot.object.RunnableVal3;
import com.github.intellectualsites.plotsquared.plot.util.StringMan; import com.github.intellectualsites.plotsquared.plot.util.StringMan;
import java.util.concurrent.CompletableFuture;
@CommandDeclaration(command = "near", aliases = "n", description = "Display nearby players", @CommandDeclaration(command = "near", aliases = "n", description = "Display nearby players",
usage = "/plot near", category = CommandCategory.INFO, requiredType = RequiredType.PLAYER) usage = "/plot near", category = CommandCategory.INFO, requiredType = RequiredType.PLAYER)
public class Near extends Command { public class Near extends Command {
@ -16,10 +18,11 @@ public class Near extends Command {
super(MainCommand.getInstance(), true); super(MainCommand.getInstance(), true);
} }
@Override public void execute(PlotPlayer player, String[] args, @Override public CompletableFuture<Boolean> execute(PlotPlayer player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm, RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) throws CommandException { RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
final Plot plot = check(player.getCurrentPlot(), Captions.NOT_IN_PLOT); final Plot plot = check(player.getCurrentPlot(), Captions.NOT_IN_PLOT);
Captions.PLOT_NEAR.send(player, StringMan.join(plot.getPlayersInPlot(), ", ")); Captions.PLOT_NEAR.send(player, StringMan.join(plot.getPlayersInPlot(), ", "));
return CompletableFuture.completedFuture(true);
} }
} }

View File

@ -7,7 +7,7 @@ import com.github.intellectualsites.plotsquared.plot.object.*;
import com.github.intellectualsites.plotsquared.plot.util.ChunkManager; import com.github.intellectualsites.plotsquared.plot.util.ChunkManager;
import com.github.intellectualsites.plotsquared.plot.util.block.LocalBlockQueue; import com.github.intellectualsites.plotsquared.plot.util.block.LocalBlockQueue;
import java.util.HashSet; import java.util.concurrent.CompletableFuture;
@CommandDeclaration(command = "relight", description = "Relight your plot", usage = "/plot relight", @CommandDeclaration(command = "relight", description = "Relight your plot", usage = "/plot relight",
category = CommandCategory.DEBUG) public class Relight extends Command { category = CommandCategory.DEBUG) public class Relight extends Command {
@ -15,25 +15,24 @@ import java.util.HashSet;
super(MainCommand.getInstance(), true); super(MainCommand.getInstance(), true);
} }
@Override public void execute(final PlotPlayer player, String[] args, @Override public CompletableFuture<Boolean> execute(final PlotPlayer player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm, RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) { RunnableVal2<Command, CommandResult> whenDone) {
final Plot plot = player.getCurrentPlot(); final Plot plot = player.getCurrentPlot();
if (plot == null) { if (plot == null) {
Captions.NOT_IN_PLOT.send(player); Captions.NOT_IN_PLOT.send(player);
return; return CompletableFuture.completedFuture(false);
} }
HashSet<RegionWrapper> regions = plot.getRegions();
final LocalBlockQueue queue = plot.getArea().getQueue(false); final LocalBlockQueue queue = plot.getArea().getQueue(false);
ChunkManager.chunkTask(plot, new RunnableVal<int[]>() { ChunkManager.chunkTask(plot, new RunnableVal<int[]>() {
@Override public void run(int[] value) { @Override public void run(int[] value) {
queue.fixChunkLighting(value[0], value[1]); queue.fixChunkLighting(value[0], value[1]);
} }
}, new Runnable() { }, () -> {
@Override public void run() { plot.refreshChunks();
plot.refreshChunks(); Captions.SET_BLOCK_ACTION_FINISHED.send(player);
Captions.SET_BLOCK_ACTION_FINISHED.send(player);
}
}, 5); }, 5);
return CompletableFuture.completedFuture(true);
} }
} }

View File

@ -7,6 +7,8 @@ import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer;
import com.github.intellectualsites.plotsquared.plot.object.RunnableVal2; import com.github.intellectualsites.plotsquared.plot.object.RunnableVal2;
import com.github.intellectualsites.plotsquared.plot.object.RunnableVal3; import com.github.intellectualsites.plotsquared.plot.object.RunnableVal3;
import java.util.concurrent.CompletableFuture;
/** /**
* SubCommand class * SubCommand class
* *
@ -28,10 +30,10 @@ public abstract class SubCommand extends Command {
return true; return true;
} }
@Override public void execute(PlotPlayer player, String[] args, @Override public CompletableFuture<Boolean> execute(PlotPlayer player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm, RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) { RunnableVal2<Command, CommandResult> whenDone) {
onCommand(player, args); return CompletableFuture.completedFuture(onCommand(player, args));
} }
public abstract boolean onCommand(PlotPlayer player, String[] args); public abstract boolean onCommand(PlotPlayer player, String[] args);

View File

@ -15,6 +15,7 @@ import com.github.intellectualsites.plotsquared.plot.util.Permissions;
import java.util.Iterator; import java.util.Iterator;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@CommandDeclaration(command = "trust", aliases = {"t"}, requiredType = RequiredType.PLAYER, @CommandDeclaration(command = "trust", aliases = {"t"}, requiredType = RequiredType.PLAYER,
usage = "/plot trust <player>", usage = "/plot trust <player>",
@ -25,7 +26,7 @@ import java.util.UUID;
super(MainCommand.getInstance(), true); super(MainCommand.getInstance(), true);
} }
@Override public void execute(final PlotPlayer player, String[] args, @Override public CompletableFuture<Boolean> execute(final PlotPlayer player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm, RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) throws CommandException { RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
final Plot currentPlot = player.getCurrentPlot(); final Plot currentPlot = player.getCurrentPlot();
@ -81,5 +82,7 @@ import java.util.UUID;
MainUtil.sendMessage(player, Captions.TRUSTED_ADDED); MainUtil.sendMessage(player, Captions.TRUSTED_ADDED);
} }
}, null); }, null);
return CompletableFuture.completedFuture(true);
} }
} }

View File

@ -12,6 +12,7 @@ import com.github.intellectualsites.plotsquared.plot.util.Permissions;
import com.github.intellectualsites.plotsquared.plot.util.UUIDHandler; import com.github.intellectualsites.plotsquared.plot.util.UUIDHandler;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture;
@CommandDeclaration(command = "visit", permission = "plots.visit", @CommandDeclaration(command = "visit", permission = "plots.visit",
description = "Visit someones plot", usage = "/plot visit [<player>|<alias>|<world>|<id>] [#]", description = "Visit someones plot", usage = "/plot visit [<player>|<alias>|<world>|<id>] [#]",
@ -26,7 +27,7 @@ import java.util.*;
return tabOf(player, args, space, getUsage()); return tabOf(player, args, space, getUsage());
} }
@Override public void execute(final PlotPlayer player, String[] args, @Override public CompletableFuture<Boolean> execute(final PlotPlayer player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm, RunnableVal3<Command, Runnable, Runnable> confirm,
final RunnableVal2<Command, CommandResult> whenDone) throws CommandException { final RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
if (args.length == 1 && args[0].contains(":")) { if (args.length == 1 && args[0].contains(":")) {
@ -41,7 +42,7 @@ import java.util.*;
if (!MathMan.isInteger(args[1])) { if (!MathMan.isInteger(args[1])) {
Captions.NOT_VALID_NUMBER.send(player, "(1, ∞)"); Captions.NOT_VALID_NUMBER.send(player, "(1, ∞)");
Captions.COMMAND_SYNTAX.send(player, getUsage()); Captions.COMMAND_SYNTAX.send(player, getUsage());
return; return CompletableFuture.completedFuture(false);
} }
page = Integer.parseInt(args[2]); page = Integer.parseInt(args[2]);
case 2: case 2:
@ -50,12 +51,12 @@ import java.util.*;
if (sortByArea == null) { if (sortByArea == null) {
Captions.NOT_VALID_NUMBER.send(player, "(1, ∞)"); Captions.NOT_VALID_NUMBER.send(player, "(1, ∞)");
Captions.COMMAND_SYNTAX.send(player, getUsage()); Captions.COMMAND_SYNTAX.send(player, getUsage());
return; return CompletableFuture.completedFuture(false);
} }
UUID user = UUIDHandler.getUUIDFromString(args[0]); UUID user = UUIDHandler.getUUIDFromString(args[0]);
if (user == null) { if (user == null) {
Captions.COMMAND_SYNTAX.send(player, getUsage()); Captions.COMMAND_SYNTAX.send(player, getUsage());
return; return CompletableFuture.completedFuture(false);
} }
unsorted = PlotSquared.get().getBasePlots(user); unsorted = PlotSquared.get().getBasePlots(user);
shouldSortByArea = true; shouldSortByArea = true;
@ -93,7 +94,7 @@ import java.util.*;
} }
if (unsorted == null || unsorted.isEmpty()) { if (unsorted == null || unsorted.isEmpty()) {
Captions.FOUND_NO_PLOTS.send(player); Captions.FOUND_NO_PLOTS.send(player);
return; return CompletableFuture.completedFuture(false);
} }
unsorted = new ArrayList<>(unsorted); unsorted = new ArrayList<>(unsorted);
if (unsorted.size() > 1) { if (unsorted.size() > 1) {
@ -101,7 +102,7 @@ import java.util.*;
} }
if (page < 1 || page > unsorted.size()) { if (page < 1 || page > unsorted.size()) {
Captions.NOT_VALID_NUMBER.send(player, "(1, " + unsorted.size() + ")"); Captions.NOT_VALID_NUMBER.send(player, "(1, " + unsorted.size() + ")");
return; return CompletableFuture.completedFuture(false);
} }
List<Plot> plots; List<Plot> plots;
if (shouldSortByArea) { if (shouldSortByArea) {
@ -114,23 +115,23 @@ import java.util.*;
if (!plot.hasOwner()) { if (!plot.hasOwner()) {
if (!Permissions.hasPermission(player, Captions.PERMISSION_VISIT_UNOWNED)) { if (!Permissions.hasPermission(player, Captions.PERMISSION_VISIT_UNOWNED)) {
Captions.NO_PERMISSION.send(player, Captions.PERMISSION_VISIT_UNOWNED); Captions.NO_PERMISSION.send(player, Captions.PERMISSION_VISIT_UNOWNED);
return; return CompletableFuture.completedFuture(false);
} }
} else if (plot.isOwner(player.getUUID())) { } else if (plot.isOwner(player.getUUID())) {
if (!Permissions.hasPermission(player, Captions.PERMISSION_VISIT_OWNED) && !Permissions if (!Permissions.hasPermission(player, Captions.PERMISSION_VISIT_OWNED) && !Permissions
.hasPermission(player, Captions.PERMISSION_HOME)) { .hasPermission(player, Captions.PERMISSION_HOME)) {
Captions.NO_PERMISSION.send(player, Captions.PERMISSION_VISIT_OWNED); Captions.NO_PERMISSION.send(player, Captions.PERMISSION_VISIT_OWNED);
return; return CompletableFuture.completedFuture(false);
} }
} else if (plot.isAdded(player.getUUID())) { } else if (plot.isAdded(player.getUUID())) {
if (!Permissions.hasPermission(player, Captions.PERMISSION_SHARED)) { if (!Permissions.hasPermission(player, Captions.PERMISSION_SHARED)) {
Captions.NO_PERMISSION.send(player, Captions.PERMISSION_SHARED); Captions.NO_PERMISSION.send(player, Captions.PERMISSION_SHARED);
return; return CompletableFuture.completedFuture(false);
} }
} else { } else {
if (!Permissions.hasPermission(player, Captions.PERMISSION_VISIT_OTHER)) { if (!Permissions.hasPermission(player, Captions.PERMISSION_VISIT_OTHER)) {
Captions.NO_PERMISSION.send(player, Captions.PERMISSION_VISIT_OTHER); Captions.NO_PERMISSION.send(player, Captions.PERMISSION_VISIT_OTHER);
return; return CompletableFuture.completedFuture(false);
} }
} }
confirm.run(this, () -> { confirm.run(this, () -> {
@ -140,6 +141,8 @@ import java.util.*;
whenDone.run(Visit.this, CommandResult.FAILURE); whenDone.run(Visit.this, CommandResult.FAILURE);
} }
}, () -> whenDone.run(Visit.this, CommandResult.FAILURE)); }, () -> whenDone.run(Visit.this, CommandResult.FAILURE));
return CompletableFuture.completedFuture(true);
} }
} }

View File

@ -34,7 +34,7 @@ public class ConsolePlayer extends PlotPlayer {
return instance; return instance;
} }
@Override public boolean canTeleport(Location loc) { @Override public boolean canTeleport(@Nonnull Location loc) {
return true; return true;
} }
@ -100,14 +100,14 @@ public class ConsolePlayer extends PlotPlayer {
return RequiredType.CONSOLE; return RequiredType.CONSOLE;
} }
@Override public void setWeather(PlotWeather weather) { @Override public void setWeather(@Nonnull PlotWeather weather) {
} }
@Override public PlotGameMode getGameMode() { @Nonnull @Override public PlotGameMode getGameMode() {
return PlotGameMode.NOT_SET; return PlotGameMode.NOT_SET;
} }
@Override public void setGameMode(PlotGameMode gameMode) { @Override public void setGameMode(@Nonnull 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(Location location, PlotBlock id) { @Override public void playMusic(@Nonnull Location location, @Nonnull PlotBlock id) {
} }
@Override public void kick(String message) { @Override public void kick(String message) {

View File

@ -12,6 +12,7 @@ import com.github.intellectualsites.plotsquared.plot.object.worlds.SinglePlotAre
import com.github.intellectualsites.plotsquared.plot.object.worlds.SinglePlotAreaManager; import com.github.intellectualsites.plotsquared.plot.object.worlds.SinglePlotAreaManager;
import com.github.intellectualsites.plotsquared.plot.util.*; 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 lombok.NonNull; import lombok.NonNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
@ -333,8 +334,9 @@ public abstract class PlotPlayer implements CommandCaller, OfflinePlotPlayer {
*/ */
@Override @Nonnull public abstract UUID getUUID(); @Override @Nonnull public abstract UUID getUUID();
public boolean canTeleport(Location loc) { public boolean canTeleport(@Nonnull final Location loc) {
Location current = getLocationFull(); Preconditions.checkNotNull(loc, "Specified location cannot be null");
final Location current = getLocationFull();
teleport(loc); teleport(loc);
boolean result = true; boolean result = true;
if (!getLocation().equals(loc)) { if (!getLocation().equals(loc)) {
@ -416,21 +418,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(PlotWeather weather); public abstract void setWeather(@Nonnull PlotWeather weather);
/** /**
* Get this player's gamemode. * Get this player's gamemode.
* *
* @return the gamemode of the player. * @return the gamemode of the player.
*/ */
public abstract PlotGameMode getGameMode(); @Nonnull 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(PlotGameMode gameMode); public abstract void setGameMode(@Nonnull PlotGameMode gameMode);
/** /**
* Set this player's local time (ticks). * Set this player's local time (ticks).
@ -459,7 +461,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(Location location, PlotBlock id); public abstract void playMusic(@Nonnull Location location, @Nonnull PlotBlock id);
/** /**
* Check if this player is banned. * Check if this player is banned.