PlotSquared/Core/src/main/java/com/intellectualcrafters/plot/commands/MainCommand.java

239 lines
8.4 KiB
Java
Raw Normal View History

2016-02-23 05:11:28 +01:00
package com.intellectualcrafters.plot.commands;
import com.intellectualcrafters.plot.PS;
2016-02-23 05:11:28 +01:00
import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.ConsolePlayer;
import com.intellectualcrafters.plot.object.Location;
import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotArea;
import com.intellectualcrafters.plot.object.PlotPlayer;
import com.intellectualcrafters.plot.object.RunnableVal2;
import com.intellectualcrafters.plot.object.RunnableVal3;
import com.intellectualcrafters.plot.util.CmdConfirm;
import com.intellectualcrafters.plot.util.EconHandler;
2016-02-23 05:11:28 +01:00
import com.intellectualcrafters.plot.util.Permissions;
import com.plotsquared.general.commands.Command;
import com.plotsquared.general.commands.CommandDeclaration;
2016-02-23 05:11:28 +01:00
import java.util.Arrays;
/**
2016-03-23 02:41:37 +01:00
* PlotSquared command class.
2016-02-23 05:11:28 +01:00
*/
@CommandDeclaration(
command = "plot",
aliases = {"plots", "p", "plotsquared", "plot2", "p2", "ps", "2", "plotme", "plotz", "ap"})
public class MainCommand extends Command {
2016-02-23 05:11:28 +01:00
private static MainCommand instance;
2016-03-26 06:44:38 +01:00
public Help help;
public Toggle toggle;
2016-02-23 05:11:28 +01:00
private MainCommand() {
super(null, true);
2016-02-23 05:11:28 +01:00
instance = this;
}
public static MainCommand getInstance() {
if (instance == null) {
instance = new MainCommand();
new Buy();
new Save();
new Load();
new Confirm();
new Template();
new Download();
new Update();
new Template();
new Setup();
new Area();
new DebugSaveTest();
new DebugLoadTest();
new CreateRoadSchematic();
new DebugAllowUnsafe();
new RegenAllRoads();
new Claim();
new Auto();
new Visit();
new Set();
new Clear();
new Delete();
new Trust();
new Add();
new Deny();
new Remove();
new Info();
new ListCmd();
new Debug();
new SchematicCmd();
new PluginCmd();
new Purge();
new Reload();
2016-03-29 19:34:48 +02:00
new Relight();
new Merge();
new DebugPaste();
new Unlink();
new Kick();
new Rate();
new DebugClaimTest();
new Inbox();
new Comment();
new Database();
new Swap();
new Music();
new DebugRoadRegen();
new Trust();
new DebugExec();
new FlagCmd();
new Target();
new DebugFixFlags();
new Move();
new Condense();
new Condense();
new Copy();
new Chat();
new Trim();
new Done();
new Continue();
new BO3();
new Middle();
new Grant();
2016-03-26 06:44:38 +01:00
// Set commands
new Owner();
new Desc();
new Biome();
new Alias();
new SetHome();
new Cluster();
2016-03-26 06:44:38 +01:00
// Referenced commands
instance.toggle = new Toggle();
instance.help = new Help(instance);
2016-02-23 05:11:28 +01:00
}
return instance;
}
public static boolean onCommand(final PlotPlayer player, String... args) {
if (args.length >= 1 && args[0].contains(":")) {
String[] split2 = args[0].split(":");
if (split2.length == 2) {
// Ref: c:v, this will push value to the last spot in the array
// ex. /p h:2 SomeUsername
// > /p h SomeUsername 2
String[] tmp = new String[args.length + 1];
tmp[0] = split2[0];
tmp[args.length] = split2[1];
2016-03-28 14:04:08 +02:00
if (args.length >= 2) {
System.arraycopy(args, 1, tmp, 1, args.length - 1);
}
args = tmp;
2016-02-23 05:11:28 +01:00
}
}
try {
getInstance().execute(player, args, new RunnableVal3<Command, Runnable, Runnable>() {
@Override
public void run(final Command cmd, final Runnable success, final Runnable failure) {
if (cmd.hasConfirmation(player)) {
CmdConfirm.addPending(player, cmd.getUsage(), new Runnable() {
@Override
public void run() {
if (EconHandler.manager != null) {
PlotArea area = player.getApplicablePlotArea();
if (area != null) {
Double price = area.PRICES.get(cmd.getFullId()).evalute(0d);
if (price != null && EconHandler.manager.getMoney(player) < price) {
if (failure != null) {
failure.run();
}
return;
}
}
}
if (success != null) {
success.run();
}
}
});
return;
}
if (EconHandler.manager != null) {
PlotArea area = player.getApplicablePlotArea();
if (area != null) {
Double price = area.PRICES.get(cmd.getFullId()).evalute(0d);
if (price != null && EconHandler.manager.getMoney(player) < price) {
if (failure != null) {
failure.run();
}
return;
}
}
}
if (success != null) {
success.run();
}
2016-02-23 05:11:28 +01:00
}
}, new RunnableVal2<Command, CommandResult>() {
@Override
public void run(Command cmd, CommandResult result) {
// Post command stuff!?
}
});
} catch (CommandException e) {
e.perform(player);
}
// Always true
return true;
2016-02-23 05:11:28 +01:00
}
2016-03-22 18:53:17 +01:00
@Deprecated
/**
* @Deprecated legacy
*/
public void addCommand(SubCommand command) {
PS.debug("Command registration is now done during instantiation");
}
@Override
public void execute(PlotPlayer player, String[] args, RunnableVal3<Command, Runnable, Runnable> confirm, RunnableVal2<Command, CommandResult> whenDone) {
2016-02-23 05:11:28 +01:00
// Clear perm caching //
player.deleteMeta("perm");
// Optional command scope //
2016-02-23 05:11:28 +01:00
Location loc = null;
Plot plot = null;
boolean tp = false;
if (args.length >= 2) {
PlotArea area = player.getApplicablePlotArea();
Plot newPlot = Plot.fromString(area, args[0]);
if (newPlot != null && (player instanceof ConsolePlayer || newPlot.getArea().equals(area) || Permissions.hasPermission(player, C.PERMISSION_ADMIN)) && !newPlot.isDenied(player.getUUID())) {
// Save meta
loc = player.getMeta("location");
plot = player.getMeta("lastplot");
tp = true;
// Set loc
player.setMeta("location", newPlot.getBottomAbs());
player.setMeta("lastplot", newPlot);
// Trim command
args = Arrays.copyOfRange(args, 1, args.length);
2016-02-23 05:11:28 +01:00
}
}
super.execute(player, args, confirm, whenDone);
// Reset command scope //
if (tp && !(player instanceof ConsolePlayer)) {
2016-02-23 05:11:28 +01:00
if (loc == null) {
player.deleteMeta("location");
} else {
player.setMeta("location", loc);
}
if (plot == null) {
player.deleteMeta("lastplot");
} else {
player.setMeta("lastplot", plot);
}
}
}
2016-03-22 18:53:17 +01:00
2016-02-23 05:11:28 +01:00
@Override
2016-03-26 17:34:55 +01:00
public boolean canExecute(PlotPlayer player, boolean message) {
return true;
2016-02-23 05:11:28 +01:00
}
}