2015-01-24 01:00:57 +01:00
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// PlotSquared - A plot manager and world generator for the Bukkit API /
|
|
|
|
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters /
|
|
|
|
// /
|
|
|
|
// This program is free software; you can redistribute it and/or modify /
|
|
|
|
// it under the terms of the GNU General Public License as published by /
|
|
|
|
// the Free Software Foundation; either version 3 of the License, or /
|
|
|
|
// (at your option) any later version. /
|
|
|
|
// /
|
|
|
|
// This program is distributed in the hope that it will be useful, /
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of /
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the /
|
|
|
|
// GNU General Public License for more details. /
|
|
|
|
// /
|
|
|
|
// You should have received a copy of the GNU General Public License /
|
|
|
|
// along with this program; if not, write to the Free Software Foundation, /
|
|
|
|
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA /
|
|
|
|
// /
|
|
|
|
// You can contact us via: support@intellectualsites.com /
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
package com.intellectualcrafters.plot.commands;
|
|
|
|
|
2015-07-30 16:25:16 +02:00
|
|
|
import java.io.File;
|
|
|
|
import java.io.FileNotFoundException;
|
2015-08-01 18:12:49 +02:00
|
|
|
import java.io.IOException;
|
2015-07-30 16:25:16 +02:00
|
|
|
import java.io.PrintWriter;
|
2015-08-01 18:12:49 +02:00
|
|
|
import java.nio.charset.StandardCharsets;
|
2015-07-30 16:25:16 +02:00
|
|
|
import java.sql.Timestamp;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Arrays;
|
|
|
|
import java.util.Date;
|
2015-08-01 18:12:49 +02:00
|
|
|
import java.util.HashMap;
|
2015-07-30 16:25:16 +02:00
|
|
|
import java.util.List;
|
|
|
|
import java.util.UUID;
|
|
|
|
|
2015-08-01 18:12:49 +02:00
|
|
|
import javax.script.Bindings;
|
|
|
|
import javax.script.ScriptContext;
|
|
|
|
import javax.script.ScriptEngine;
|
|
|
|
import javax.script.ScriptEngineManager;
|
|
|
|
import javax.script.ScriptException;
|
|
|
|
import javax.script.SimpleScriptContext;
|
2015-07-30 16:25:16 +02:00
|
|
|
|
2015-08-01 18:12:49 +02:00
|
|
|
import com.google.common.io.Files;
|
2015-07-03 14:15:20 +02:00
|
|
|
import com.intellectualcrafters.plot.PS;
|
2015-06-11 02:56:53 +02:00
|
|
|
import com.intellectualcrafters.plot.config.C;
|
2015-08-01 18:12:49 +02:00
|
|
|
import com.intellectualcrafters.plot.config.Settings;
|
|
|
|
import com.intellectualcrafters.plot.database.DBFunc;
|
2015-06-24 22:33:43 +02:00
|
|
|
import com.intellectualcrafters.plot.flag.FlagManager;
|
2015-06-07 21:37:40 +02:00
|
|
|
import com.intellectualcrafters.plot.generator.HybridUtils;
|
2015-07-30 16:25:16 +02:00
|
|
|
import com.intellectualcrafters.plot.object.ChunkLoc;
|
2015-08-01 18:12:49 +02:00
|
|
|
import com.intellectualcrafters.plot.object.ConsolePlayer;
|
|
|
|
import com.intellectualcrafters.plot.object.Location;
|
2015-07-30 16:25:16 +02:00
|
|
|
import com.intellectualcrafters.plot.object.OfflinePlotPlayer;
|
|
|
|
import com.intellectualcrafters.plot.object.Plot;
|
|
|
|
import com.intellectualcrafters.plot.object.PlotAnalysis;
|
2015-08-01 18:12:49 +02:00
|
|
|
import com.intellectualcrafters.plot.object.PlotBlock;
|
|
|
|
import com.intellectualcrafters.plot.object.PlotId;
|
2015-07-30 16:25:16 +02:00
|
|
|
import com.intellectualcrafters.plot.object.PlotPlayer;
|
|
|
|
import com.intellectualcrafters.plot.object.RunnableVal;
|
2015-08-01 18:12:49 +02:00
|
|
|
import com.intellectualcrafters.plot.util.AbstractTitle;
|
2015-07-30 16:25:16 +02:00
|
|
|
import com.intellectualcrafters.plot.util.BlockManager;
|
|
|
|
import com.intellectualcrafters.plot.util.ChunkManager;
|
2015-08-01 22:11:28 +02:00
|
|
|
import com.intellectualcrafters.plot.util.EconHandler;
|
2015-08-01 18:12:49 +02:00
|
|
|
import com.intellectualcrafters.plot.util.EventUtil;
|
2015-07-30 16:25:16 +02:00
|
|
|
import com.intellectualcrafters.plot.util.ExpireManager;
|
|
|
|
import com.intellectualcrafters.plot.util.MainUtil;
|
2015-08-01 18:12:49 +02:00
|
|
|
import com.intellectualcrafters.plot.util.MathMan;
|
|
|
|
import com.intellectualcrafters.plot.util.SchematicHandler;
|
|
|
|
import com.intellectualcrafters.plot.util.SetupUtils;
|
2015-07-30 19:24:01 +02:00
|
|
|
import com.intellectualcrafters.plot.util.StringMan;
|
2015-08-01 18:12:49 +02:00
|
|
|
import com.intellectualcrafters.plot.util.TaskManager;
|
2015-07-30 16:25:16 +02:00
|
|
|
import com.intellectualcrafters.plot.util.UUIDHandler;
|
2015-07-28 08:06:19 +02:00
|
|
|
import com.plotsquared.bukkit.util.BukkitHybridUtils;
|
2015-08-06 18:05:15 +02:00
|
|
|
import com.plotsquared.general.commands.Command;
|
2015-07-27 19:50:04 +02:00
|
|
|
import com.plotsquared.general.commands.CommandDeclaration;
|
2015-07-28 08:06:19 +02:00
|
|
|
|
2015-07-27 00:26:19 +02:00
|
|
|
@CommandDeclaration(
|
2015-09-11 12:09:22 +02:00
|
|
|
command = "debugexec",
|
|
|
|
permission = "plots.admin",
|
|
|
|
description = "Mutli-purpose debug command",
|
|
|
|
aliases = { "exec" },
|
|
|
|
category = CommandCategory.DEBUG)
|
|
|
|
public class DebugExec extends SubCommand
|
|
|
|
{
|
2015-02-23 02:32:27 +01:00
|
|
|
|
2015-08-01 18:12:49 +02:00
|
|
|
private ScriptEngine engine;
|
|
|
|
private Bindings scope;
|
2015-09-11 12:09:22 +02:00
|
|
|
|
|
|
|
public DebugExec()
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
final File file = new File(PS.get().IMP.getDirectory(), "scripts" + File.separator + "start.js");
|
|
|
|
if (file.exists())
|
|
|
|
{
|
2015-08-23 14:04:17 +02:00
|
|
|
init();
|
2015-09-11 12:09:22 +02:00
|
|
|
final String script = StringMan.join(Files.readLines(new File(new File(PS.get().IMP.getDirectory() + File.separator + "scripts"), "start.js"), StandardCharsets.UTF_8),
|
|
|
|
System.getProperty("line.separator"));
|
|
|
|
scope.put("THIS", this);
|
|
|
|
scope.put("PlotPlayer", ConsolePlayer.getConsole());
|
|
|
|
engine.eval(script, scope);
|
2015-08-11 20:04:17 +02:00
|
|
|
}
|
2015-08-06 18:05:15 +02:00
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
catch (final Exception e)
|
|
|
|
{}
|
2015-08-06 18:05:15 +02:00
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
|
|
|
|
public ScriptEngine getEngine()
|
|
|
|
{
|
2015-08-14 00:52:31 +02:00
|
|
|
return engine;
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
|
|
|
|
public Bindings getScope()
|
|
|
|
{
|
2015-08-14 00:52:31 +02:00
|
|
|
return scope;
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
|
|
|
|
public void init()
|
|
|
|
{
|
|
|
|
if (engine != null) { return; }
|
2015-08-03 20:20:04 +02:00
|
|
|
engine = (new ScriptEngineManager(null)).getEngineByName("nashorn");
|
2015-09-11 12:09:22 +02:00
|
|
|
if (engine == null)
|
|
|
|
{
|
2015-08-03 20:20:04 +02:00
|
|
|
engine = (new ScriptEngineManager(null)).getEngineByName("JavaScript");
|
2015-08-03 16:54:35 +02:00
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
final ScriptContext context = new SimpleScriptContext();
|
2015-08-01 18:12:49 +02:00
|
|
|
scope = context.getBindings(ScriptContext.ENGINE_SCOPE);
|
2015-09-11 12:09:22 +02:00
|
|
|
|
2015-08-01 18:12:49 +02:00
|
|
|
// stuff
|
|
|
|
scope.put("MainUtil", new MainUtil());
|
|
|
|
scope.put("Settings", new Settings());
|
|
|
|
scope.put("StringMan", new StringMan());
|
|
|
|
scope.put("MathMan", new MathMan());
|
2015-09-05 03:35:43 +02:00
|
|
|
scope.put("FlagManager", new FlagManager());
|
2015-09-11 12:09:22 +02:00
|
|
|
|
2015-08-01 18:12:49 +02:00
|
|
|
// Classes
|
|
|
|
scope.put("Location", Location.class);
|
|
|
|
scope.put("PlotBlock", PlotBlock.class);
|
|
|
|
scope.put("Plot", Plot.class);
|
|
|
|
scope.put("PlotId", PlotId.class);
|
|
|
|
scope.put("Runnable", Runnable.class);
|
|
|
|
scope.put("RunnableVal", RunnableVal.class);
|
2015-09-11 12:09:22 +02:00
|
|
|
|
2015-08-01 18:12:49 +02:00
|
|
|
// Instances
|
|
|
|
scope.put("PS", PS.get());
|
|
|
|
scope.put("TaskManager", PS.get().TASK);
|
|
|
|
scope.put("TitleManager", AbstractTitle.TITLE_CLASS);
|
|
|
|
scope.put("ConsolePlayer", ConsolePlayer.getConsole());
|
|
|
|
scope.put("SchematicHandler", SchematicHandler.manager);
|
|
|
|
scope.put("ChunkManager", ChunkManager.manager);
|
|
|
|
scope.put("BlockManager", BlockManager.manager);
|
|
|
|
scope.put("SetupUtils", SetupUtils.manager);
|
|
|
|
scope.put("EventUtil", EventUtil.manager);
|
2015-08-01 22:11:28 +02:00
|
|
|
scope.put("EconHandler", EconHandler.manager);
|
2015-08-01 18:12:49 +02:00
|
|
|
scope.put("UUIDHandler", UUIDHandler.implementation);
|
|
|
|
scope.put("DBFunc", DBFunc.dbManager);
|
|
|
|
scope.put("HybridUtils", HybridUtils.manager);
|
|
|
|
scope.put("IMP", PS.get().IMP);
|
|
|
|
scope.put("MainCommand", MainCommand.getInstance());
|
2015-09-11 12:09:22 +02:00
|
|
|
|
2015-08-01 18:12:49 +02:00
|
|
|
// enums
|
2015-09-11 12:09:22 +02:00
|
|
|
for (final Enum<?> value : C.values())
|
|
|
|
{
|
2015-08-01 18:12:49 +02:00
|
|
|
scope.put("C_" + value.name(), value);
|
|
|
|
}
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
|
2015-01-24 01:00:57 +01:00
|
|
|
@Override
|
2015-09-11 12:09:22 +02:00
|
|
|
public boolean onCommand(final PlotPlayer player, final String... args)
|
|
|
|
{
|
2015-07-18 07:02:44 +02:00
|
|
|
final List<String> allowed_params = Arrays.asList("calibrate-analysis", "remove-flag", "stop-expire", "start-expire", "show-expired", "update-expired", "seen", "trim-check");
|
2015-09-11 12:09:22 +02:00
|
|
|
if (args.length > 0)
|
|
|
|
{
|
2015-02-20 07:34:19 +01:00
|
|
|
final String arg = args[0].toLowerCase();
|
2015-08-01 18:12:49 +02:00
|
|
|
String script;
|
|
|
|
boolean async = false;
|
2015-09-11 12:09:22 +02:00
|
|
|
switch (arg)
|
|
|
|
{
|
|
|
|
case "analyze":
|
|
|
|
{
|
|
|
|
final Plot plot = MainUtil.getPlot(player.getLocation());
|
|
|
|
if (plot == null)
|
|
|
|
{
|
2015-07-18 07:02:44 +02:00
|
|
|
MainUtil.sendMessage(player, C.NOT_IN_PLOT);
|
|
|
|
return false;
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
final PlotAnalysis analysis = plot.getComplexity();
|
|
|
|
if (analysis != null)
|
|
|
|
{
|
|
|
|
final int complexity = analysis.getComplexity();
|
2015-07-19 15:12:48 +02:00
|
|
|
MainUtil.sendMessage(player, "Changes: " + analysis.changes);
|
2015-07-18 07:02:44 +02:00
|
|
|
MainUtil.sendMessage(player, "Complexity: " + complexity);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
MainUtil.sendMessage(player, "$1Starting task...");
|
2015-09-11 12:09:22 +02:00
|
|
|
HybridUtils.manager.analyzePlot(plot, new RunnableVal<PlotAnalysis>()
|
|
|
|
{
|
2015-06-28 02:54:57 +02:00
|
|
|
@Override
|
2015-09-11 12:09:22 +02:00
|
|
|
public void run()
|
|
|
|
{
|
2015-07-18 07:02:44 +02:00
|
|
|
MainUtil.sendMessage(player, "$1Done: $2use $3/plot debugexec analyze$2 for more information");
|
2015-06-28 02:54:57 +02:00
|
|
|
}
|
|
|
|
});
|
2015-06-26 11:46:06 +02:00
|
|
|
return true;
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
case "calibrate-analysis":
|
|
|
|
{
|
|
|
|
if (args.length != 2)
|
|
|
|
{
|
2015-07-18 07:02:44 +02:00
|
|
|
MainUtil.sendMessage(player, C.COMMAND_SYNTAX, "/plot debugexec analyze <threshold>");
|
|
|
|
MainUtil.sendMessage(player, "$1<threshold> $2= $1The percentage of plots you want to clear (100 clears 100% of plots so no point calibrating it)");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
double threshold;
|
2015-09-11 12:09:22 +02:00
|
|
|
try
|
|
|
|
{
|
2015-07-18 07:02:44 +02:00
|
|
|
threshold = Integer.parseInt(args[1]) / 100d;
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
catch (final NumberFormatException e)
|
|
|
|
{
|
2015-07-18 07:02:44 +02:00
|
|
|
MainUtil.sendMessage(player, "$2Invalid threshold: " + args[1]);
|
|
|
|
MainUtil.sendMessage(player, "$1<threshold> $2= $1The percentage of plots you want to clear as a number between 0 - 100");
|
|
|
|
return false;
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
PlotAnalysis.calcOptimalModifiers(new Runnable()
|
|
|
|
{
|
2015-07-18 07:02:44 +02:00
|
|
|
@Override
|
2015-09-11 12:09:22 +02:00
|
|
|
public void run()
|
|
|
|
{
|
2015-07-30 16:25:16 +02:00
|
|
|
MainUtil.sendMessage(player, "$1Thank you for calibrating PlotSquared plot expiry");
|
2015-07-18 07:02:44 +02:00
|
|
|
}
|
|
|
|
}, threshold);
|
|
|
|
return true;
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
case "stop-expire":
|
|
|
|
{
|
|
|
|
if (ExpireManager.task != -1)
|
|
|
|
{
|
2015-08-01 18:12:49 +02:00
|
|
|
PS.get().TASK.cancelTask(ExpireManager.task);
|
2015-09-11 12:09:22 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2015-05-08 06:54:01 +02:00
|
|
|
return MainUtil.sendMessage(player, "Task already halted");
|
2015-02-20 07:34:19 +01:00
|
|
|
}
|
|
|
|
ExpireManager.task = -1;
|
2015-05-08 06:54:01 +02:00
|
|
|
return MainUtil.sendMessage(player, "Cancelled task.");
|
2015-02-20 07:34:19 +01:00
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
case "remove-flag":
|
|
|
|
{
|
|
|
|
if (args.length != 2)
|
|
|
|
{
|
2015-07-12 21:08:41 +02:00
|
|
|
MainUtil.sendMessage(player, C.COMMAND_SYNTAX, "/plot debugexec remove-flag <flag>");
|
2015-06-29 21:30:36 +02:00
|
|
|
return false;
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
final String flag = args[1];
|
|
|
|
for (final Plot plot : PS.get().getPlots())
|
|
|
|
{
|
|
|
|
if (FlagManager.getPlotFlag(plot, flag) != null)
|
|
|
|
{
|
2015-06-29 21:30:36 +02:00
|
|
|
FlagManager.removePlotFlag(plot, flag);
|
2015-06-24 22:33:43 +02:00
|
|
|
}
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
return MainUtil.sendMessage(player, "Cleared flag: " + flag);
|
2015-06-24 22:33:43 +02:00
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
case "start-rgar":
|
|
|
|
{
|
|
|
|
if (args.length != 2)
|
|
|
|
{
|
2015-07-30 16:25:16 +02:00
|
|
|
MainUtil.sendMessage(player, "&cInvalid syntax: /plot debugexec start-rgar <world>");
|
2015-06-07 21:37:40 +02:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
boolean result;
|
2015-09-11 12:09:22 +02:00
|
|
|
if (!PS.get().isPlotWorld(args[1]))
|
|
|
|
{
|
2015-06-11 02:56:53 +02:00
|
|
|
MainUtil.sendMessage(player, C.NOT_VALID_PLOT_WORLD, args[1]);
|
|
|
|
return false;
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
if (HybridUtils.regions != null)
|
|
|
|
{
|
|
|
|
result = ((BukkitHybridUtils) (HybridUtils.manager)).scheduleRoadUpdate(args[1], HybridUtils.regions, 0);
|
2015-06-07 21:37:40 +02:00
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
else
|
|
|
|
{
|
2015-06-11 02:56:53 +02:00
|
|
|
result = HybridUtils.manager.scheduleRoadUpdate(args[1], 0);
|
2015-06-07 21:37:40 +02:00
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
if (!result)
|
|
|
|
{
|
2015-07-30 16:25:16 +02:00
|
|
|
MainUtil.sendMessage(player, "&cCannot schedule mass schematic update! (Is one already in progress?)");
|
2015-06-07 21:37:40 +02:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
case "stop-rgar":
|
|
|
|
{
|
|
|
|
if (!HybridUtils.UPDATE)
|
|
|
|
{
|
2015-07-30 16:25:16 +02:00
|
|
|
MainUtil.sendMessage(player, "&cTASK NOT RUNNING!");
|
2015-06-07 21:37:40 +02:00
|
|
|
return false;
|
|
|
|
}
|
2015-08-02 13:56:18 +02:00
|
|
|
HybridUtils.UPDATE = false;
|
|
|
|
MainUtil.sendMessage(player, "&cCancelling task... (please wait)");
|
2015-06-07 21:37:40 +02:00
|
|
|
return true;
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
case "start-expire":
|
|
|
|
{
|
|
|
|
if (ExpireManager.task == -1)
|
|
|
|
{
|
2015-02-20 07:34:19 +01:00
|
|
|
ExpireManager.runTask();
|
2015-09-11 12:09:22 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2015-05-08 06:54:01 +02:00
|
|
|
return MainUtil.sendMessage(player, "Plot expiry task already started");
|
2015-02-20 07:34:19 +01:00
|
|
|
}
|
2015-05-08 06:54:01 +02:00
|
|
|
return MainUtil.sendMessage(player, "Started plot expiry task");
|
2015-02-20 07:34:19 +01:00
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
case "update-expired":
|
|
|
|
{
|
|
|
|
if (args.length > 1)
|
|
|
|
{
|
2015-02-22 07:42:52 +01:00
|
|
|
final String world = args[1];
|
2015-09-11 12:09:22 +02:00
|
|
|
if (!BlockManager.manager.isWorld(world)) { return MainUtil.sendMessage(player, "Invalid world: " + args[1]); }
|
2015-05-08 06:54:01 +02:00
|
|
|
MainUtil.sendMessage(player, "Updating expired plot list");
|
2015-02-20 07:34:19 +01:00
|
|
|
ExpireManager.updateExpired(args[1]);
|
|
|
|
return true;
|
|
|
|
}
|
2015-05-08 06:54:01 +02:00
|
|
|
return MainUtil.sendMessage(player, "Use /plot debugexec update-expired <world>");
|
2015-02-20 07:34:19 +01:00
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
case "show-expired":
|
|
|
|
{
|
|
|
|
if (args.length > 1)
|
|
|
|
{
|
2015-02-22 07:42:52 +01:00
|
|
|
final String world = args[1];
|
2015-09-11 12:09:22 +02:00
|
|
|
if (!BlockManager.manager.isWorld(world)) { return MainUtil.sendMessage(player, "Invalid world: " + args[1]); }
|
|
|
|
if (!ExpireManager.expiredPlots.containsKey(args[1])) { return MainUtil.sendMessage(player, "No task for world: " + args[1]); }
|
2015-05-08 06:54:01 +02:00
|
|
|
MainUtil.sendMessage(player, "Expired plots (" + ExpireManager.expiredPlots.get(args[1]).size() + "):");
|
2015-09-11 12:09:22 +02:00
|
|
|
for (final Plot plot : ExpireManager.expiredPlots.get(args[1]))
|
|
|
|
{
|
2015-05-30 00:01:41 +02:00
|
|
|
MainUtil.sendMessage(player, " - " + plot.world + ";" + plot.id.x + ";" + plot.id.y + ";" + UUIDHandler.getName(plot.owner) + " : " + ExpireManager.dates.get(plot.owner));
|
2015-02-20 07:34:19 +01:00
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
2015-05-08 06:54:01 +02:00
|
|
|
return MainUtil.sendMessage(player, "Use /plot debugexec show-expired <world>");
|
2015-02-20 07:34:19 +01:00
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
case "seen":
|
|
|
|
{
|
|
|
|
if (args.length != 2) { return MainUtil.sendMessage(player, "Use /plot debugexec seen <player>"); }
|
2015-07-27 11:14:28 +02:00
|
|
|
final UUID uuid = UUIDHandler.getUUID(args[1], null);
|
2015-09-11 12:09:22 +02:00
|
|
|
if (uuid == null) { return MainUtil.sendMessage(player, "player not found: " + args[1]); }
|
2015-07-24 16:06:58 +02:00
|
|
|
final OfflinePlotPlayer op = UUIDHandler.getUUIDWrapper().getOfflinePlayer(uuid);
|
2015-09-11 12:09:22 +02:00
|
|
|
if ((op == null) || (op.getLastPlayed() == 0)) { return MainUtil.sendMessage(player, "player hasn't connected before: " + args[1]); }
|
2015-02-20 07:34:19 +01:00
|
|
|
final Timestamp stamp = new Timestamp(op.getLastPlayed());
|
|
|
|
final Date date = new Date(stamp.getTime());
|
2015-05-08 06:54:01 +02:00
|
|
|
MainUtil.sendMessage(player, "PLAYER: " + args[1]);
|
|
|
|
MainUtil.sendMessage(player, "UUID: " + uuid);
|
|
|
|
MainUtil.sendMessage(player, "Object: " + date.toGMTString());
|
|
|
|
MainUtil.sendMessage(player, "GMT: " + date.toGMTString());
|
|
|
|
MainUtil.sendMessage(player, "Local: " + date.toLocaleString());
|
2015-02-20 07:34:19 +01:00
|
|
|
return true;
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
case "trim-check":
|
|
|
|
{
|
|
|
|
if (args.length != 2)
|
|
|
|
{
|
2015-05-08 06:54:01 +02:00
|
|
|
MainUtil.sendMessage(player, "Use /plot debugexec trim-check <world>");
|
|
|
|
MainUtil.sendMessage(player, "&7 - Generates a list of regions to trim");
|
|
|
|
return MainUtil.sendMessage(player, "&7 - Run after plot expiry has run");
|
2015-02-20 07:34:19 +01:00
|
|
|
}
|
2015-02-22 07:42:52 +01:00
|
|
|
final String world = args[1];
|
2015-09-11 12:09:22 +02:00
|
|
|
if (!BlockManager.manager.isWorld(world) || !PS.get().isPlotWorld(args[1])) { return MainUtil.sendMessage(player, "Invalid world: " + args[1]); }
|
2015-02-20 07:34:19 +01:00
|
|
|
final ArrayList<ChunkLoc> empty = new ArrayList<>();
|
2015-09-11 12:09:22 +02:00
|
|
|
final boolean result = Trim.getTrimRegions(empty, world, new Runnable()
|
|
|
|
{
|
2015-02-12 07:59:02 +01:00
|
|
|
@Override
|
2015-09-11 12:09:22 +02:00
|
|
|
public void run()
|
|
|
|
{
|
2015-02-12 07:59:02 +01:00
|
|
|
Trim.sendMessage("Processing is complete! Here's how many chunks would be deleted:");
|
|
|
|
Trim.sendMessage(" - MCA #: " + empty.size());
|
2015-02-12 08:41:26 +01:00
|
|
|
Trim.sendMessage(" - CHUNKS: " + (empty.size() * 1024) + " (max)");
|
2015-02-12 07:59:02 +01:00
|
|
|
Trim.sendMessage("Exporting log for manual approval...");
|
2015-07-03 14:15:20 +02:00
|
|
|
final File file = new File(PS.get().IMP.getDirectory() + File.separator + "trim.txt");
|
2015-02-12 07:59:02 +01:00
|
|
|
PrintWriter writer;
|
2015-09-11 12:09:22 +02:00
|
|
|
try
|
|
|
|
{
|
2015-02-12 07:59:02 +01:00
|
|
|
writer = new PrintWriter(file);
|
2015-09-11 12:09:22 +02:00
|
|
|
for (final ChunkLoc loc : empty)
|
|
|
|
{
|
2015-02-22 07:42:52 +01:00
|
|
|
writer.println(world + "/region/r." + loc.x + "." + loc.z + ".mca");
|
2015-02-12 07:59:02 +01:00
|
|
|
}
|
|
|
|
writer.close();
|
2015-02-12 08:41:26 +01:00
|
|
|
Trim.sendMessage("File saved to 'plugins/PlotSquared/trim.txt'");
|
2015-09-11 12:09:22 +02:00
|
|
|
}
|
|
|
|
catch (final FileNotFoundException e)
|
|
|
|
{
|
2015-02-12 07:59:02 +01:00
|
|
|
e.printStackTrace();
|
|
|
|
Trim.sendMessage("File failed to save! :(");
|
|
|
|
}
|
|
|
|
Trim.sendMessage("How to get the chunk coords from a region file:");
|
|
|
|
Trim.sendMessage(" - Locate the x,z values for the region file (the two numbers which are separated by a dot)");
|
|
|
|
Trim.sendMessage(" - Multiply each number by 32; this gives you the starting position");
|
|
|
|
Trim.sendMessage(" - Add 31 to each number to get the end position");
|
|
|
|
}
|
|
|
|
});
|
2015-09-11 12:09:22 +02:00
|
|
|
if (!result)
|
|
|
|
{
|
2015-05-08 06:54:01 +02:00
|
|
|
MainUtil.sendMessage(player, "Trim task already started!");
|
2015-02-20 07:34:19 +01:00
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
2015-08-01 18:12:49 +02:00
|
|
|
case "h":
|
|
|
|
case "he":
|
|
|
|
case "?":
|
2015-09-11 12:09:22 +02:00
|
|
|
case "help":
|
|
|
|
{
|
2015-08-01 18:12:49 +02:00
|
|
|
MainUtil.sendMessage(player, "Possible sub commands: /plot debugexec <" + StringMan.join(allowed_params, "|") + ">");
|
|
|
|
return false;
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
case "addcmd":
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
final String cmd = StringMan.join(Files.readLines(new File(new File(PS.get().IMP.getDirectory() + File.separator + "scripts"), args[1]), StandardCharsets.UTF_8),
|
|
|
|
System.getProperty("line.separator"));
|
|
|
|
final Command<PlotPlayer> subcommand = new Command<PlotPlayer>(args[1].split("\\.")[0])
|
|
|
|
{
|
|
|
|
@Override
|
|
|
|
public boolean onCommand(final PlotPlayer plr, final String[] args)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
scope.put("PlotPlayer", plr);
|
|
|
|
scope.put("args", args);
|
|
|
|
engine.eval(cmd, scope);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
catch (final ScriptException e)
|
|
|
|
{
|
|
|
|
e.printStackTrace();
|
|
|
|
MainUtil.sendMessage(player, C.COMMAND_WENT_WRONG);
|
|
|
|
return false;
|
|
|
|
}
|
2015-08-06 18:05:15 +02:00
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
};
|
|
|
|
MainCommand.getInstance().addCommand(subcommand);
|
|
|
|
return true;
|
2015-08-06 18:05:15 +02:00
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
catch (final Exception e)
|
|
|
|
{
|
2015-08-06 18:05:15 +02:00
|
|
|
e.printStackTrace();
|
|
|
|
MainUtil.sendMessage(player, C.COMMAND_SYNTAX, "/plot debugexec addcmd <file>");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
case "runasync":
|
|
|
|
{
|
2015-08-01 18:12:49 +02:00
|
|
|
async = true;
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
case "run":
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
script = StringMan.join(Files.readLines(new File(new File(PS.get().IMP.getDirectory() + File.separator + "scripts"), args[1]), StandardCharsets.UTF_8),
|
|
|
|
System.getProperty("line.separator"));
|
|
|
|
if (args.length > 2)
|
|
|
|
{
|
|
|
|
final HashMap<String, String> replacements = new HashMap<>();
|
|
|
|
for (int i = 2; i < args.length; i++)
|
|
|
|
{
|
|
|
|
replacements.put("%s" + (i - 2), args[i]);
|
2015-08-01 18:12:49 +02:00
|
|
|
}
|
|
|
|
script = StringMan.replaceFromMap(script, replacements);
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
}
|
|
|
|
catch (final IOException e)
|
|
|
|
{
|
2015-08-01 18:12:49 +02:00
|
|
|
e.printStackTrace();
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
default:
|
|
|
|
{
|
2015-08-01 18:12:49 +02:00
|
|
|
script = StringMan.join(args, " ");
|
|
|
|
}
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
if (!ConsolePlayer.isConsole(player))
|
|
|
|
{
|
2015-08-01 20:01:41 +02:00
|
|
|
MainUtil.sendMessage(player, C.NOT_CONSOLE);
|
|
|
|
return false;
|
|
|
|
}
|
2015-08-01 18:12:49 +02:00
|
|
|
init();
|
|
|
|
scope.put("PlotPlayer", player);
|
2015-08-06 18:05:15 +02:00
|
|
|
PS.debug("> " + script);
|
2015-09-11 12:09:22 +02:00
|
|
|
try
|
|
|
|
{
|
|
|
|
if (async)
|
|
|
|
{
|
2015-08-01 18:12:49 +02:00
|
|
|
final String toExec = script;
|
2015-09-11 12:09:22 +02:00
|
|
|
TaskManager.runTaskAsync(new Runnable()
|
|
|
|
{
|
2015-08-01 18:12:49 +02:00
|
|
|
@Override
|
2015-09-11 12:09:22 +02:00
|
|
|
public void run()
|
|
|
|
{
|
|
|
|
final long start = System.currentTimeMillis();
|
|
|
|
try
|
|
|
|
{
|
2015-08-01 18:12:49 +02:00
|
|
|
engine.eval(toExec, scope);
|
2015-09-11 12:09:22 +02:00
|
|
|
}
|
|
|
|
catch (final ScriptException e)
|
|
|
|
{
|
2015-08-01 18:12:49 +02:00
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
PS.log("> " + (System.currentTimeMillis() - start) + "ms");
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2015-09-11 12:09:22 +02:00
|
|
|
else
|
|
|
|
{
|
|
|
|
final long start = System.currentTimeMillis();
|
2015-08-01 18:12:49 +02:00
|
|
|
engine.eval(script, scope);
|
|
|
|
PS.log("> " + (System.currentTimeMillis() - start) + "ms");
|
|
|
|
}
|
|
|
|
return true;
|
2015-09-11 12:09:22 +02:00
|
|
|
}
|
|
|
|
catch (final ScriptException e)
|
|
|
|
{
|
2015-08-01 18:12:49 +02:00
|
|
|
e.printStackTrace();
|
|
|
|
return false;
|
2015-02-20 07:34:19 +01:00
|
|
|
}
|
2015-01-24 01:00:57 +01:00
|
|
|
}
|
2015-08-01 18:12:49 +02:00
|
|
|
return false;
|
2015-01-24 01:00:57 +01:00
|
|
|
}
|
|
|
|
}
|