Implement some more generic types to make the player objects easier to work with and also create wrapper objects for fake players (NPCs). Potentially fixes PS-27

This commit is contained in:
Alexander Söderberg
2020-05-27 14:08:48 +02:00
parent edbacb8e47
commit 6442922d86
88 changed files with 203 additions and 155 deletions

View File

@ -50,7 +50,12 @@ import java.io.File;
import java.util.List;
import java.util.Map;
public interface IPlotMain extends ILogger {
/**
* PlotSquared main utility class
*
* @param <P> Player type
*/
public interface IPlotMain<P> extends ILogger {
/**
* Logs a message to console.
@ -286,6 +291,6 @@ public interface IPlotMain extends ILogger {
*
* @return Player manager
*/
@NotNull PlayerManager<?, ?> getPlayerManager();
@NotNull PlayerManager<? extends PlotPlayer<P>, ? extends P> getPlayerManager();
}

View File

@ -141,7 +141,7 @@ public class PlotSquared {
private static final Set<Plot> EMPTY_SET = Collections.unmodifiableSet(Collections.emptySet());
private static PlotSquared instance;
// Implementation
public final IPlotMain IMP;
public final IPlotMain<?> IMP;
// Current thread
private final Thread thread;
// UUID pipelines
@ -386,7 +386,7 @@ public class PlotSquared {
return PlotSquared.instance;
}
@NotNull public static IPlotMain imp() {
@NotNull public static IPlotMain<?> imp() {
if (instance != null && instance.IMP != null) {
return instance.IMP;
}

View File

@ -56,7 +56,7 @@ public class Add extends Command {
}
@Override
public CompletableFuture<Boolean> execute(final PlotPlayer player, String[] args,
public CompletableFuture<Boolean> execute(final PlotPlayer<?> player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
final Plot plot = check(player.getCurrentPlot(), Captions.NOT_IN_PLOT);

View File

@ -45,7 +45,7 @@ import java.util.concurrent.TimeoutException;
requiredType = RequiredType.PLAYER)
public class Alias extends SubCommand {
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
if (args.length == 0) {
Captions.COMMAND_SYNTAX.send(player, getUsage());

View File

@ -83,7 +83,7 @@ import java.util.Set;
confirmation = true)
public class Area extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
if (args.length == 0) {
Captions.COMMAND_SYNTAX.send(player, getUsage());
return false;

View File

@ -154,7 +154,7 @@ public class Auto extends SubCommand {
() -> autoClaimFromDatabase(player, area, plot.getId(), whenDone));
}
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
PlotArea plotarea = player.getApplicablePlotArea();
if (plotarea == null) {
if (EconHandler.manager != null) {

View File

@ -70,7 +70,7 @@ public final class Backup extends Command {
}
@Override
public CompletableFuture<Boolean> execute(PlotPlayer player, String[] args,
public CompletableFuture<Boolean> execute(PlotPlayer<?> player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
if (args.length == 0 || !Arrays.asList("save", "list", "load")

View File

@ -54,7 +54,7 @@ public class Buy extends Command {
}
@Override
public CompletableFuture<Boolean> execute(final PlotPlayer player, String[] args,
public CompletableFuture<Boolean> execute(final PlotPlayer<?> player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm,
final RunnableVal2<Command, CommandResult> whenDone) {

View File

@ -50,7 +50,7 @@ import static com.plotsquared.core.util.entity.EntityCategories.CAP_VEHICLE;
usage = "/plot caps")
public class Caps extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, final String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, final String[] args) {
final Plot plot = player.getCurrentPlot();
if (plot == null) {
return Captions.NOT_IN_PLOT.send(player);

View File

@ -37,7 +37,7 @@ import com.plotsquared.core.util.MainUtil;
requiredType = RequiredType.PLAYER)
public class Chat extends SubCommand {
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
if (player.getPlotAreaAbs().isForcingPlotChat()) {
MainUtil.sendMessage(player, Captions.PLOT_CHAT_FORCED);
return true;

View File

@ -54,7 +54,7 @@ import com.plotsquared.core.util.task.TaskManager;
usage = "/plot claim")
public class Claim extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
String schematic = null;
if (args.length >= 1) {
schematic = args[0];

View File

@ -64,7 +64,7 @@ public class Clear extends Command {
}
@Override
public CompletableFuture<Boolean> execute(final PlotPlayer player, String[] args,
public CompletableFuture<Boolean> execute(final PlotPlayer<?> player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
checkTrue(args.length == 0, Captions.COMMAND_SYNTAX, getUsage());

View File

@ -54,7 +54,7 @@ import java.util.concurrent.TimeoutException;
description = "Manage a plot cluster")
public class Cluster extends SubCommand {
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
// list, create, delete, resize, invite, kick, leave, helpers, tp, sethome
if (args.length == 0) {

View File

@ -32,15 +32,15 @@ import com.plotsquared.core.util.task.TaskManager;
public class CmdConfirm {
public static CmdInstance getPending(PlotPlayer player) {
public static CmdInstance getPending(PlotPlayer<?> player) {
return player.getMeta("cmdConfirm");
}
public static void removePending(PlotPlayer player) {
public static void removePending(PlotPlayer<?> player) {
player.deleteMeta("cmdConfirm");
}
public static void addPending(final PlotPlayer player, String commandStr,
public static void addPending(final PlotPlayer<?> player, String commandStr,
final Runnable runnable) {
removePending(player);
if (commandStr != null) {

View File

@ -106,7 +106,7 @@ public abstract class Command {
&& types[4] == RunnableVal2.class) {
Command tmp = new Command(this, true) {
@Override
public CompletableFuture<Boolean> execute(PlotPlayer player, String[] args,
public CompletableFuture<Boolean> execute(PlotPlayer<?> player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) {
try {
@ -300,7 +300,7 @@ public abstract class Command {
* @return CompletableFuture true if the command executed fully, false in
* any other case
*/
public CompletableFuture<Boolean> execute(PlotPlayer player, String[] args,
public CompletableFuture<Boolean> execute(PlotPlayer<?> player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
if (args.length == 0 || args[0] == null) {

View File

@ -46,7 +46,7 @@ import java.util.Locale;
permission = "plots.comment")
public class Comment extends SubCommand {
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
if (args.length < 2) {
sendMessage(player, Captions.COMMENT_SYNTAX,
StringMan.join(CommentManager.inboxes.keySet(), "|"));

View File

@ -54,7 +54,7 @@ public class Condense extends SubCommand {
public static boolean TASK = false;
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
if (args.length != 2 && args.length != 3) {
MainUtil.sendMessage(player, getUsage());
return false;

View File

@ -37,7 +37,7 @@ import com.plotsquared.core.util.task.TaskManager;
category = CommandCategory.INFO)
public class Confirm extends SubCommand {
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
CmdInstance command = CmdConfirm.getPending(player);
if (command == null) {
MainUtil.sendMessage(player, Captions.FAILED_CONFIRM);

View File

@ -44,7 +44,7 @@ import com.plotsquared.core.util.Permissions;
requiredType = RequiredType.PLAYER)
public class Continue extends SubCommand {
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
Plot plot = player.getCurrentPlot();
if ((plot == null) || !plot.hasOwner()) {
return !sendMessage(player, Captions.NOT_IN_PLOT);

View File

@ -41,7 +41,7 @@ import com.plotsquared.core.util.Permissions;
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 location = player.getLocation();
Plot plot1 = location.getPlotAbs();
if (plot1 == null) {

View File

@ -42,7 +42,7 @@ import com.plotsquared.core.util.MainUtil;
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 location = player.getLocation();
Plot plot = location.getPlotAbs();
if (plot == null) {

View File

@ -74,7 +74,7 @@ public class DatabaseCommand extends SubCommand {
});
}
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
if (args.length < 1) {
MainUtil.sendMessage(player, getUsage());
return false;

View File

@ -48,7 +48,7 @@ import java.util.Map;
permission = "plots.admin")
public class Debug extends SubCommand {
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
if (args.length > 0) {
if ("player".equalsIgnoreCase(args[0])) {
for (Map.Entry<String, Object> meta : player.getMeta().entrySet()) {

View File

@ -42,7 +42,7 @@ public class DebugAllowUnsafe extends SubCommand {
public static final List<UUID> unsafeAllowed = new ArrayList<>();
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
if (unsafeAllowed.contains(player.getUUID())) {
unsafeAllowed.remove(player.getUUID());

View File

@ -178,7 +178,7 @@ public class DebugExec extends SubCommand {
}
}
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
List<String> allowed_params = Arrays
.asList("analyze", "calibrate-analysis", "remove-flag", "stop-expire", "start-expire",
"seen", "list-scripts", "start-rgar", "stop-rgar", "help", "addcmd", "runasync",
@ -312,7 +312,7 @@ public class DebugExec extends SubCommand {
new Command(MainCommand.getInstance(), true, args[1].split("\\.")[0], null,
RequiredType.NONE, CommandCategory.DEBUG) {
@Override
public CompletableFuture<Boolean> execute(PlotPlayer player,
public CompletableFuture<Boolean> execute(PlotPlayer<?> player,
String[] args, RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) {
try {

View File

@ -52,7 +52,7 @@ public class DebugImportWorlds extends Command {
}
@Override
public CompletableFuture<Boolean> execute(PlotPlayer player, String[] args,
public CompletableFuture<Boolean> execute(PlotPlayer<?> player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
// UUID.nameUUIDFromBytes(("OfflinePlayer:" + player.getName()).getBytes(Charsets.UTF_8))

View File

@ -37,7 +37,7 @@ import com.plotsquared.core.player.PlotPlayer;
requiredType = RequiredType.CONSOLE)
public class DebugLoadTest extends SubCommand {
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
PlotSquared.get().plots_tmp = DBFunc.getPlots();
return true;
}

View File

@ -71,7 +71,7 @@ public class DebugPaste extends SubCommand {
return content.toString();
}
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
TaskManager.runTaskAsync(() -> {
try {

View File

@ -46,7 +46,7 @@ import java.util.Arrays;
public class DebugRoadRegen extends SubCommand {
public static final String USAGE = "/plot debugroadregen <plot|region [height]>";
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
if (args.length < 1) {
MainUtil.sendMessage(player, Captions.COMMAND_SYNTAX, DebugRoadRegen.USAGE);
return false;

View File

@ -41,7 +41,7 @@ import java.util.ArrayList;
description = "This command will force the recreation of all plots in the DB")
public class DebugSaveTest extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
ArrayList<Plot> plots = new ArrayList<>(PlotSquared.get().getPlots());
MainUtil.sendMessage(player, "&6Starting `DEBUGSAVETEST`");
DBFunc.createPlotsAndData(plots,

View File

@ -53,7 +53,7 @@ public class Delete extends SubCommand {
// Note: To delete a specific plot use /plot <plot> delete
// 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 location = player.getLocation();
final Plot plot = location.getPlotAbs();
if (plot == null) {

View File

@ -51,7 +51,7 @@ public class Deny extends SubCommand {
super(Argument.PlayerName);
}
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
Location location = player.getLocation();
Plot plot = location.getPlotAbs();

View File

@ -35,7 +35,7 @@ import com.plotsquared.core.player.PlotPlayer;
requiredType = RequiredType.PLAYER)
public class Dislike extends SubCommand {
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
return Like.handleLike(player, args, false);
}

View File

@ -51,7 +51,7 @@ import com.plotsquared.core.util.task.RunnableVal;
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 location = player.getLocation();
final Plot plot = location.getPlotAbs();
if ((plot == null) || !plot.hasOwner()) {

View File

@ -50,7 +50,7 @@ import java.net.URL;
permission = "plots.download")
public class Download extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
String world = player.getLocation().getWorld();
if (!PlotSquared.get().hasPlotArea(world)) {
return !sendMessage(player, Captions.NOT_IN_PLOT_WORLD);

View File

@ -207,7 +207,7 @@ public final class FlagCommand extends Command {
}
@Override
public CompletableFuture<Boolean> execute(PlotPlayer player, String[] args,
public CompletableFuture<Boolean> execute(PlotPlayer<?> player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
if (args.length == 0 || !Arrays

View File

@ -53,7 +53,7 @@ public class Grant extends Command {
}
@Override
public CompletableFuture<Boolean> execute(final PlotPlayer player, String[] args,
public CompletableFuture<Boolean> execute(final PlotPlayer<?> player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
checkTrue(args.length >= 1 && args.length <= 2, Captions.COMMAND_SYNTAX, getUsage());

View File

@ -52,7 +52,7 @@ public class Help extends Command {
}
@Override
public CompletableFuture<Boolean> execute(PlotPlayer player, String[] args,
public CompletableFuture<Boolean> execute(PlotPlayer<?> player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) {
switch (args.length) {

View File

@ -86,7 +86,7 @@ public class Inbox extends SubCommand {
MainUtil.sendMessage(player, string.toString());
}
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
final Plot plot = player.getCurrentPlot();
if (plot == null) {
sendMessage(player, Captions.NOT_IN_PLOT);

View File

@ -41,7 +41,7 @@ import com.plotsquared.core.util.task.RunnableVal;
category = CommandCategory.INFO)
public class Info extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
Plot plot;
String arg;
if (args.length > 0) {

View File

@ -53,7 +53,7 @@ public class Kick extends SubCommand {
super(Argument.PlayerName);
}
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
Location location = player.getLocation();
Plot plot = location.getPlot();
if (plot == null) {

View File

@ -48,7 +48,7 @@ public class Leave extends Command {
}
@Override
public CompletableFuture<Boolean> execute(PlotPlayer player, String[] args,
public CompletableFuture<Boolean> execute(PlotPlayer<?> player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
final Plot plot = check(player.getCurrentPlot(), Captions.NOT_IN_PLOT);

View File

@ -175,7 +175,7 @@ public class Like extends SubCommand {
return numLikes / (numLikes + numDislikes);
}
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
return handleLike(player, args, true);
}

View File

@ -116,7 +116,7 @@ public class ListCmd extends SubCommand {
.toString(getArgumentList(player)));
}
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
if (args.length < 1) {
noArgs(player);
return false;

View File

@ -52,7 +52,7 @@ import java.util.List;
usage = "/plot load")
public class Load extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
String world = player.getLocation().getWorld();
if (!PlotSquared.get().hasPlotArea(world)) {
return !sendMessage(player, Captions.NOT_IN_PLOT_WORLD);
@ -152,7 +152,7 @@ public class Load extends SubCommand {
return true;
}
public void displaySaves(PlotPlayer player) {
public void displaySaves(PlotPlayer<?> player) {
List<String> schematics = player.getMeta("plot_schematics");
for (int i = 0; i < Math.min(schematics.size(), 32); i++) {
try {

View File

@ -217,7 +217,7 @@ public class MainCommand extends Command {
}
@Override
public CompletableFuture<Boolean> execute(final PlotPlayer player, String[] args,
public CompletableFuture<Boolean> execute(final PlotPlayer<?> player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) {
// Clear perm caching //

View File

@ -78,7 +78,7 @@ public class Merge extends SubCommand {
}
}
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
Location location = player.getLocationFull();
final Plot plot = location.getPlotAbs();
if (plot == null) {

View File

@ -42,7 +42,7 @@ import com.plotsquared.core.plot.Plot;
requiredType = RequiredType.PLAYER)
public class Middle extends SubCommand {
@Override public boolean onCommand(PlotPlayer player, String[] arguments) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] arguments) {
Location location = player.getLocation();
Plot plot = location.getPlot();
if (plot == null) {

View File

@ -47,7 +47,7 @@ import java.util.concurrent.CompletableFuture;
public class Move extends SubCommand {
@Override
public CompletableFuture<Boolean> execute(PlotPlayer player, String[] args,
public CompletableFuture<Boolean> execute(PlotPlayer<?> player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) {
Location location = player.getLocation();
@ -107,7 +107,7 @@ public class Move extends SubCommand {
});
}
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
return true;
}

View File

@ -55,7 +55,7 @@ public class Music extends SubCommand {
"music_disc_far", "music_disc_mall", "music_disc_mellohi", "music_disc_stal",
"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 location = player.getLocation();
final Plot plot = location.getPlotAbs();
if (plot == null) {

View File

@ -46,7 +46,7 @@ public class Near extends Command {
}
@Override
public CompletableFuture<Boolean> execute(PlotPlayer player, String[] args,
public CompletableFuture<Boolean> execute(PlotPlayer<?> player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
final Plot plot = check(player.getCurrentPlot(), Captions.NOT_IN_PLOT);

View File

@ -39,7 +39,7 @@ import com.plotsquared.core.util.task.TaskManager;
category = CommandCategory.INFO)
public class PluginCmd extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
TaskManager.IMP.taskAsync(() -> {
MainUtil.sendMessage(player, String.format(
"$2>> $1&l" + PlotSquared.imp().getPluginName() + " $2($1Version$2: $1%s$2)",

View File

@ -53,7 +53,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
confirmation = true)
public class Purge extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
if (args.length == 0) {
Captions.COMMAND_SYNTAX.send(player, getUsage());
return false;

View File

@ -56,7 +56,7 @@ import java.util.UUID;
requiredType = RequiredType.PLAYER)
public class Rate extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
if (args.length == 1) {
switch (args[0].toLowerCase()) {
case "next": {

View File

@ -43,7 +43,7 @@ import com.plotsquared.core.util.MainUtil;
permission = "plots.regenallroads")
public class RegenAllRoads extends SubCommand {
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
int height = 0;
if (args.length == 2) {
try {

View File

@ -47,7 +47,7 @@ public class Relight extends Command {
}
@Override
public CompletableFuture<Boolean> execute(final PlotPlayer player, String[] args,
public CompletableFuture<Boolean> execute(final PlotPlayer<?> player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) {
final Plot plot = player.getCurrentPlot();

View File

@ -45,7 +45,7 @@ import java.util.Objects;
category = CommandCategory.ADMINISTRATION)
public class Reload extends SubCommand {
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
try {
// The following won't affect world generation, as that has to be
// loaded during startup unfortunately.

View File

@ -50,7 +50,7 @@ public class Remove extends SubCommand {
super(Argument.PlayerName);
}
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
Location location = player.getLocation();
Plot plot = location.getPlotAbs();
if (plot == null) {

View File

@ -49,7 +49,7 @@ import java.util.UUID;
permission = "plots.save")
public class Save extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
String world = player.getLocation().getWorld();
if (!PlotSquared.get().hasPlotArea(world)) {
return !sendMessage(player, Captions.NOT_IN_PLOT_WORLD);

View File

@ -57,7 +57,7 @@ public class SchematicCmd extends SubCommand {
private boolean running = false;
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
if (args.length < 1) {
sendMessage(player, Captions.SCHEMATIC_MISSING_ARG);
return true;

View File

@ -176,7 +176,7 @@ public class Set extends SubCommand {
return false;
}
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
if (args.length == 0) {
return noArgs(player);
}

View File

@ -36,7 +36,7 @@ import com.plotsquared.core.util.StringMan;
public abstract class SetCommand extends SubCommand {
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
Location location = player.getLocation();
Plot plot = location.getPlotAbs();
if (plot == null) {

View File

@ -90,7 +90,7 @@ public class Setup extends SubCommand {
MainUtil.sendMessage(player, message.toString());
}
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
// going through setup
SetupObject object = player.getMeta("setup");
if (object == null) {

View File

@ -54,11 +54,11 @@ public abstract class SubCommand extends Command {
}
@Override
public CompletableFuture<Boolean> execute(PlotPlayer player, String[] args,
public CompletableFuture<Boolean> execute(PlotPlayer<?> player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) {
return CompletableFuture.completedFuture(onCommand(player, args));
}
public abstract boolean onCommand(PlotPlayer player, String[] args);
public abstract boolean onCommand(PlotPlayer<?> player, String[] args);
}

View File

@ -45,7 +45,7 @@ import java.util.concurrent.CompletableFuture;
public class Swap extends SubCommand {
@Override
public CompletableFuture<Boolean> execute(PlotPlayer player, String[] args,
public CompletableFuture<Boolean> execute(PlotPlayer<?> player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) {
Location location = player.getLocation();
@ -93,7 +93,7 @@ public class Swap extends SubCommand {
});
}
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
return true;
}
}

View File

@ -45,7 +45,7 @@ public class Target extends SubCommand {
super(Argument.PlotID);
}
@Override public boolean onCommand(PlotPlayer player, String[] args) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] args) {
Location location = player.getLocation();
if (!location.isPlotArea()) {
MainUtil.sendMessage(player, Captions.NOT_IN_PLOT_WORLD);

View File

@ -134,7 +134,7 @@ public class Template extends SubCommand {
}
}
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
if (args.length != 2 && args.length != 3) {
if (args.length == 1) {
if (args[0].equalsIgnoreCase("export")) {

View File

@ -159,7 +159,7 @@ public class Trim extends SubCommand {
return true;
}
@Override public boolean onCommand(final PlotPlayer player, String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, String[] args) {
if (args.length == 0) {
Captions.COMMAND_SYNTAX.send(player, getUsage());
return false;

View File

@ -56,7 +56,7 @@ public class Trust extends Command {
}
@Override
public CompletableFuture<Boolean> execute(final PlotPlayer player, String[] args,
public CompletableFuture<Boolean> execute(final PlotPlayer<?> player, String[] args,
RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) throws CommandException {
final Plot currentPlot = player.getCurrentPlot();

View File

@ -46,7 +46,7 @@ import com.plotsquared.core.util.task.TaskManager;
confirmation = true)
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();
final Plot plot = location.getPlotAbs();
if (plot == null) {

View File

@ -139,7 +139,7 @@ public class Visit extends Command {
}
@Override
public CompletableFuture<Boolean> execute(final PlotPlayer player,
public CompletableFuture<Boolean> execute(final PlotPlayer<?> player,
String[] args,
final RunnableVal3<Command, Runnable, Runnable> confirm,
final RunnableVal2<Command, CommandResult> whenDone) throws CommandException {

View File

@ -37,7 +37,7 @@ import com.plotsquared.core.player.PlotPlayer;
@Deprecated
public class WE_Anywhere extends SubCommand {
@Override public boolean onCommand(PlotPlayer player, String[] arguments) {
@Override public boolean onCommand(PlotPlayer<?> player, String[] arguments) {
MainCommand.getInstance().toggle.worldedit(this, player, new String[0], null, null);
return true;
}

View File

@ -46,7 +46,7 @@ public class ComponentCommand extends SubCommand {
this.componentPresetManager = componentPresetManager;
}
@Override public boolean onCommand(final PlotPlayer player, final String[] args) {
@Override public boolean onCommand(final PlotPlayer<?> player, final String[] args) {
final PlotInventory inventory = componentPresetManager.buildInventory(player);
if (inventory != null) {
inventory.openInventory();

View File

@ -123,7 +123,7 @@ public class PlotListener {
}, 20);
}
public static boolean plotEntry(final PlotPlayer player, final Plot plot) {
public static boolean plotEntry(final PlotPlayer<?> player, final Plot plot) {
if (plot.isDenied(player.getUUID()) && !Permissions
.hasPermission(player, "plots.admin.entry.denied")) {
return false;
@ -293,7 +293,7 @@ public class PlotListener {
return true;
}
public static boolean plotExit(final PlotPlayer player, Plot plot) {
public static boolean plotExit(final PlotPlayer<?> player, Plot plot) {
Object previous = player.deleteMeta(PlotPlayer.META_LAST_PLOT);
PlotSquared.get().getEventDispatcher().callLeave(player, plot);
if (plot.hasOwner()) {

View File

@ -41,7 +41,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.UUID;
public class ConsolePlayer extends PlotPlayer {
public class ConsolePlayer extends PlotPlayer<Actor> {
private static ConsolePlayer instance;
@ -71,6 +71,10 @@ public class ConsolePlayer extends PlotPlayer {
return PlotSquared.get().IMP.getConsole();
}
@Override public Actor getPlatformPlayer() {
return this.toActor();
}
@Override public boolean canTeleport(@NotNull Location location) {
return true;
}

View File

@ -68,7 +68,7 @@ import java.util.stream.Collectors;
/**
* The abstract class supporting {@code BukkitPlayer} and {@code SpongePlayer}.
*/
public abstract class PlotPlayer implements CommandCaller, OfflinePlotPlayer {
public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer {
public static final String META_LAST_PLOT = "lastplot";
public static final String META_LOCATION = "location";
@ -103,12 +103,14 @@ public abstract class PlotPlayer implements CommandCaller, OfflinePlotPlayer {
* @param player
* @return
*/
public static PlotPlayer wrap(Object player) {
public static PlotPlayer<?> wrap(Object player) {
return PlotSquared.get().IMP.wrapPlayer(player);
}
public abstract Actor toActor();
public abstract P getPlatformPlayer();
/**
* Set some session only metadata for this player.
*

View File

@ -399,9 +399,9 @@ public class Plot {
*
* @return list of PlotPlayer(s) or an empty list
*/
public List<PlotPlayer> getPlayersInPlot() {
final List<PlotPlayer> players = new ArrayList<>();
for (final PlotPlayer player : PlotSquared.imp().getPlayerManager().getPlayers()) {
public List<PlotPlayer<?>> getPlayersInPlot() {
final List<PlotPlayer<?>> players = new ArrayList<>();
for (final PlotPlayer<?> player : PlotSquared.imp().getPlayerManager().getPlayers()) {
if (this.equals(player.getCurrentPlot())) {
players.add(player);
}
@ -1323,8 +1323,8 @@ public class Plot {
return false;
}
for (Plot current : getConnectedPlots()) {
List<PlotPlayer> players = current.getPlayersInPlot();
for (PlotPlayer pp : players) {
List<PlotPlayer<?>> players = current.getPlayersInPlot();
for (PlotPlayer<?> pp : players) {
PlotListener.plotExit(pp, current);
}

View File

@ -33,40 +33,40 @@ import lombok.NonNull;
public class PlotInventory {
private static final String META_KEY = "inventory";
public final PlotPlayer player;
public final PlotPlayer<?> player;
public final int size;
private final PlotItemStack[] items;
private String title;
private boolean open = false;
public PlotInventory(PlotPlayer player) {
public PlotInventory(PlotPlayer<?> player) {
this.size = 4;
this.title = null;
this.player = player;
this.items = InventoryUtil.manager.getItems(player);
}
public PlotInventory(PlotPlayer player, int size, String name) {
public PlotInventory(PlotPlayer<?> player, int size, String name) {
this.size = size;
this.title = name == null ? "" : name;
this.player = player;
this.items = new PlotItemStack[size * 9];
}
public static boolean hasPlotInventoryOpen(@NonNull final PlotPlayer plotPlayer) {
public static boolean hasPlotInventoryOpen(@NonNull final PlotPlayer<?> plotPlayer) {
return getOpenPlotInventory(plotPlayer) != null;
}
public static PlotInventory getOpenPlotInventory(@NonNull final PlotPlayer plotPlayer) {
public static PlotInventory getOpenPlotInventory(@NonNull final PlotPlayer<?> plotPlayer) {
return plotPlayer.getMeta(META_KEY, null);
}
public static void setPlotInventoryOpen(@NonNull final PlotPlayer plotPlayer,
public static void setPlotInventoryOpen(@NonNull final PlotPlayer<?> plotPlayer,
@NonNull final PlotInventory plotInventory) {
plotPlayer.setMeta(META_KEY, plotInventory);
}
public static void removePlotInventoryOpen(@NonNull final PlotPlayer plotPlayer) {
public static void removePlotInventoryOpen(@NonNull final PlotPlayer<?>plotPlayer) {
plotPlayer.deleteMeta(META_KEY);
}

View File

@ -75,7 +75,7 @@ import java.util.concurrent.atomic.AtomicInteger;
}, 20);
}
public static long getTimestamp(PlotPlayer player, String inbox) {
public static long getTimestamp(PlotPlayer<?> player, String inbox) {
return player.getMeta("inbox:" + inbox, player.getLastPlayed());
}

View File

@ -83,7 +83,7 @@ public class ExpireManager {
this.tasks.add(task);
}
public void handleJoin(PlotPlayer pp) {
public void handleJoin(PlotPlayer<?> pp) {
storeDate(pp.getUUID(), System.currentTimeMillis());
if (plotsToDelete != null && !plotsToDelete.isEmpty()) {
for (Plot plot : pp.getPlots()) {

View File

@ -61,7 +61,7 @@ public class Permissions {
* @param permission
* @return
*/
public static boolean hasPermission(PlotPlayer player, String permission) {
public static boolean hasPermission(PlotPlayer<?> player, String permission) {
if (!Settings.Enabled_Components.PERMISSION_CACHE) {
return hasPermission((CommandCaller) player, permission);
}

View File

@ -39,7 +39,7 @@ import java.util.UUID;
/**
* Manages player instances
*/
public abstract class PlayerManager<P extends PlotPlayer, O extends OfflinePlotPlayer> {
public abstract class PlayerManager<P extends PlotPlayer<? extends T>, T> {
private final Map<UUID, P> playerMap = new HashMap<>();
private final Object playerLock = new Object();
@ -77,6 +77,18 @@ public abstract class PlayerManager<P extends PlotPlayer, O extends OfflinePlotP
return null;
}
/**
* Get a plot player from a platform player object. This method requires
* that the caller actually knows that the player exists.
* <p>
* The method will throw an exception if there is no such
* player online.
*
* @param object Platform player object
* @return Player object
*/
@NotNull public abstract P getPlayer(@NotNull final T object);
/**
* Get a plot player from a UUID. This method requires
* that the caller actually knows that the player exists.
@ -106,7 +118,7 @@ public abstract class PlayerManager<P extends PlotPlayer, O extends OfflinePlotP
* @param uuid Player UUID
* @return Offline player object
*/
@Nullable public abstract O getOfflinePlayer(@Nullable final UUID uuid);
@Nullable public abstract OfflinePlotPlayer getOfflinePlayer(@Nullable final UUID uuid);
/**
* Get an offline player object from the player's username
@ -114,7 +126,7 @@ public abstract class PlayerManager<P extends PlotPlayer, O extends OfflinePlotP
* @param username Player name
* @return Offline player object
*/
@Nullable public abstract O getOfflinePlayer(@NotNull final String username);
@Nullable public abstract OfflinePlotPlayer getOfflinePlayer(@NotNull final String username);
/**
* Get all online players
@ -132,6 +144,9 @@ public abstract class PlayerManager<P extends PlotPlayer, O extends OfflinePlotP
super(String.format("There is no online player with UUID '%s'", uuid.toString()));
}
@Override public synchronized Throwable fillInStackTrace() {
return this;
}
}
}

View File

@ -83,7 +83,7 @@ public class WEManager {
return false;
}
public static HashSet<CuboidRegion> getMask(PlotPlayer player) {
public static HashSet<CuboidRegion> getMask(PlotPlayer<?> player) {
HashSet<CuboidRegion> regions = new HashSet<>();
UUID uuid = player.getUUID();
Location location = player.getLocation();