Skip to content

Added export command #746

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion lang/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -208,4 +208,10 @@ VALID_DONATION_KEY: "Valid donation key."
VERSION_INCOMPATIBLE: "{0} {1} is not supported."
VERSION_NOTICE: "Version {0} is now available."
VERSION_REQUIRED: "{0} {1} or higher is required."
WORLD_NOT_FOUND: "World \"{0}\" not found."
WORLD_NOT_FOUND: "World \"{0}\" not found."

# Export Feature
export-generating: Generating export file...
export-success: Successfully exported {0} {row|rows} to {1}.
export-failure: Failed to write export file.
export-error: An error occurred during export generation.
6 changes: 6 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,12 @@
<version>3.45.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
Expand Down
5 changes: 3 additions & 2 deletions src/main/java/net/coreprotect/command/ApplyCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@
import net.coreprotect.language.Selector;
import net.coreprotect.utility.Chat;
import net.coreprotect.utility.Color;
import net.coreprotect.CoreProtect;

public class ApplyCommand {
protected static void runCommand(CommandSender user, Command command, boolean permission, String[] args) {
protected static void runCommand(CoreProtect plugin, CommandSender user, Command command, boolean permission, String[] args) {
try {
if (ConfigHandler.lastRollback.get(user.getName()) != null) {
List<Object> list = ConfigHandler.lastRollback.get(user.getName());
Expand All @@ -33,7 +34,7 @@ protected static void runCommand(CommandSender user, Command command, boolean pe
}
else {
ConfigHandler.lastRollback.remove(user.getName());
RollbackRestoreCommand.runCommand(user, command, permission, args, location, startTime, endTime);
RollbackRestoreCommand.runCommand(plugin, user, command, permission, args, location, startTime, endTime);
}
}
else {
Expand Down
5 changes: 3 additions & 2 deletions src/main/java/net/coreprotect/command/CancelCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@
import net.coreprotect.language.Selector;
import net.coreprotect.utility.Chat;
import net.coreprotect.utility.Color;
import net.coreprotect.CoreProtect;

public class CancelCommand {
protected static void runCommand(CommandSender user, Command command, boolean permission, String[] args) {
protected static void runCommand(CoreProtect plugin, CommandSender user, Command command, boolean permission, String[] args) {
try {
if (ConfigHandler.lastRollback.get(user.getName()) != null) {
List<Object> list = ConfigHandler.lastRollback.get(user.getName());
Expand All @@ -33,7 +34,7 @@ protected static void runCommand(CommandSender user, Command command, boolean pe
}
else {
ConfigHandler.lastRollback.remove(user.getName());
RollbackRestoreCommand.runCommand(user, command, permission, args, location, startTime, endTime);
RollbackRestoreCommand.runCommand(plugin, user, command, permission, args, location, startTime, endTime);
}
}
else {
Expand Down
27 changes: 18 additions & 9 deletions src/main/java/net/coreprotect/command/CommandHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,133 +14,142 @@
import net.coreprotect.utility.Color;
import net.coreprotect.utility.Extensions;
import net.coreprotect.utility.VersionUtils;
import net.coreprotect.CoreProtect;

public class CommandHandler implements CommandExecutor {
private static CommandHandler instance;
private static ConcurrentHashMap<String, Boolean> versionAlert = new ConcurrentHashMap<>();
private final CoreProtect plugin;

public static CommandHandler getInstance() {
public CommandHandler(CoreProtect plugin) {
this.plugin = plugin;
}

public static CommandHandler getInstance(CoreProtect plugin) {
if (instance == null) {
instance = new CommandHandler();
instance = new CommandHandler(plugin);
}
return instance;
}

@Override
public boolean onCommand(CommandSender user, Command command, String commandLabel, String[] argumentArray) {
String commandName = command.getName().toLowerCase(Locale.ROOT);

if (commandName.equals("core") || commandName.equals("coreprotect") || commandName.equals("co")) {
int resultc = argumentArray.length;
if (resultc > -1) {
String corecommand = "help";
if (resultc > 0) {
corecommand = argumentArray[0].toLowerCase(Locale.ROOT);
}
boolean permission = false;
if (!permission) {
if (user.hasPermission("coreprotect.rollback") && (corecommand.equals("rollback") || corecommand.equals("rb") || corecommand.equals("ro") || corecommand.equals("apply") || corecommand.equals("cancel"))) {
permission = true;
}
else if (user.hasPermission("coreprotect.restore") && (corecommand.equals("restore") || corecommand.equals("rs") || corecommand.equals("re") || corecommand.equals("undo") || corecommand.equals("apply") || corecommand.equals("cancel"))) {
permission = true;
}
else if (user.hasPermission("coreprotect.inspect") && (corecommand.equals("i") || corecommand.equals("inspect") || corecommand.equals("inspector"))) {
permission = true;
}
else if (user.hasPermission("coreprotect.help") && corecommand.equals("help")) {
permission = true;
}
else if (user.hasPermission("coreprotect.purge") && corecommand.equals("purge")) {
permission = true;
}
else if (user.hasPermission("coreprotect.lookup") && (corecommand.equals("l") || corecommand.equals("lookup") || corecommand.equals("page") || corecommand.equals("near"))) {
else if (user.hasPermission("coreprotect.lookup") && (corecommand.equals("l") || corecommand.equals("lookup") || corecommand.equals("page") || corecommand.equals("near") || corecommand.equals("export"))) {
permission = true;
}
else if (user.hasPermission("coreprotect.lookup.near") && corecommand.equals("near")) {
permission = true;
}
else if (user.hasPermission("coreprotect.teleport") && (corecommand.equals("tp") || corecommand.equals("teleport"))) {
permission = true;
}
else if (user.hasPermission("coreprotect.reload") && corecommand.equals("reload")) {
permission = true;
}
else if (user.hasPermission("coreprotect.status") && (corecommand.equals("status") || corecommand.equals("stats") || corecommand.equals("version"))) {
permission = true;
}
else if (user.hasPermission("coreprotect.consumer") && corecommand.equals("consumer")) {
permission = true;
}
else if (user.hasPermission("coreprotect.networking") && corecommand.equals("network-debug")) {
permission = true;
}
}

if (corecommand.equals("rollback") || corecommand.equals("restore") || corecommand.equals("rb") || corecommand.equals("rs") || corecommand.equals("ro") || corecommand.equals("re")) {
RollbackRestoreCommand.runCommand(user, command, permission, argumentArray, null, 0, 0);
RollbackRestoreCommand.runCommand(plugin, user, command, permission, argumentArray, null, 0, 0);
}
else if (corecommand.equals("apply")) {
ApplyCommand.runCommand(user, command, permission, argumentArray);
ApplyCommand.runCommand(plugin, user, command, permission, argumentArray);
}
else if (corecommand.equals("cancel")) {
CancelCommand.runCommand(user, command, permission, argumentArray);
CancelCommand.runCommand(plugin, user, command, permission, argumentArray);
}
else if (corecommand.equals("undo")) {
UndoCommand.runCommand(user, command, permission, argumentArray);
UndoCommand.runCommand(plugin, user, command, permission, argumentArray);
}
else if (corecommand.equals("help")) {
HelpCommand.runCommand(user, permission, argumentArray);
}
else if (corecommand.equals("purge")) {
PurgeCommand.runCommand(user, permission, argumentArray);
}
else if (corecommand.equals("inspect") || corecommand.equals("i")) {
InspectCommand.runCommand(user, permission, argumentArray);
}
else if (corecommand.equals("lookup") || corecommand.equals("l") || corecommand.equals("page")) {
LookupCommand.runCommand(user, command, permission, argumentArray);
LookupCommand.runCommand(plugin, user, command, permission, argumentArray, false);
}
else if (corecommand.equals("near")) {
LookupCommand.runCommand(user, command, permission, new String[] { "near", "r:5x5" });
LookupCommand.runCommand(plugin, user, command, permission, new String[] { "near", "r:5x5" }, false);
}
else if (corecommand.equals("export")) {
LookupCommand.runCommand(plugin, user, command, permission, argumentArray, true);
}
else if (corecommand.equals("teleport") || corecommand.equals("tp")) {
TeleportCommand.runCommand(user, permission, argumentArray);
}
else if (corecommand.equals("status") || corecommand.equals("stats") || corecommand.equals("version")) {
StatusCommand.runCommand(user, permission, argumentArray);
}
else if (corecommand.equals("reload")) {
ReloadCommand.runCommand(user, permission, argumentArray);
}
else if (corecommand.equals("consumer")) {
ConsumerCommand.runCommand(user, permission, argumentArray);
}
else if (corecommand.equals("network-debug")) {
NetworkDebugCommand.runCommand(user, permission, argumentArray);
}
else if (corecommand.equals("migrate-db")) {
if (!VersionUtils.validDonationKey()) {
Chat.sendMessage(user, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.DONATION_KEY_REQUIRED));
}
else {
Extensions.runDatabaseMigration(corecommand, user, argumentArray);
}
}
else {
Chat.sendMessage(user, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.COMMAND_NOT_FOUND, Color.WHITE, "/co " + corecommand));
}
}
else {
Chat.sendMessage(user, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.MISSING_PARAMETERS, Color.WHITE, "/co <parameters>"));
}

if (user.isOp() && versionAlert.get(user.getName()) == null) {
String latestVersion = NetworkHandler.latestVersion();
String latestEdgeVersion = NetworkHandler.latestEdgeVersion();
if (latestVersion != null || latestEdgeVersion != null) {
versionAlert.put(user.getName(), true);
class updateAlert implements Runnable {

Check warning on line 152 in src/main/java/net/coreprotect/command/CommandHandler.java

View check run for this annotation

codefactor.io / CodeFactor

src/main/java/net/coreprotect/command/CommandHandler.java#L35-L152

Very Complex Method
@Override
public void run() {
try {
Expand Down
9 changes: 5 additions & 4 deletions src/main/java/net/coreprotect/command/LookupCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;

import net.coreprotect.CoreProtect;
import net.coreprotect.command.lookup.BlockLookupThread;
import net.coreprotect.command.lookup.ChestTransactionLookupThread;
import net.coreprotect.command.lookup.StandardLookupThread;
Expand All @@ -28,598 +29,598 @@
import net.coreprotect.utility.WorldUtils;

public class LookupCommand {
public static void runCommand(CommandSender player, Command command, boolean permission, String[] args) {
public static void runCommand(CoreProtect plugin, CommandSender player, Command command, boolean permission, String[] args, boolean exportMode) {
int resultc = args.length;
args = CommandParser.parsePage(args);
Location lo = CommandParser.parseLocation(player, args);
// List<String> arg_uuids = new ArrayList<String>();
List<String> argUsers = CommandParser.parseUsers(args);
Integer[] argRadius = CommandParser.parseRadius(args, player, lo);
int argNoisy = CommandParser.parseNoisy(args);
List<Integer> argAction = CommandParser.parseAction(args);
List<Object> argBlocks = CommandParser.parseRestricted(player, args, argAction);
Map<Object, Boolean> argExclude = CommandParser.parseExcluded(player, args, argAction);
List<String> argExcludeUsers = CommandParser.parseExcludedUsers(player, args);
String ts = CommandParser.parseTimeString(args);
long[] argTime = CommandParser.parseTime(args);
long startTime = argTime[0];
long endTime = argTime[1];
int argWid = CommandParser.parseWorld(args, true, true);
int parseRows = CommandParser.parseRows(args);
boolean count = CommandParser.parseCount(args);
boolean worldedit = CommandParser.parseWorldEdit(args);
boolean forceglobal = CommandParser.parseForceGlobal(args);
boolean pageLookup = false;

if (argBlocks == null || argExclude == null || argExcludeUsers == null) {
return;
}

if (args[0].toLowerCase(Locale.ROOT).equals("page") && (args.length != 2 || !args[1].equals(args[1].replaceAll("[^0-9]", "")))) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.MISSING_PARAMETERS, Color.WHITE, "/co page <page>"));
return;
}

int argExcluded = argExclude.size();
int argRestricted = argBlocks.size();

/* check for invalid block/entity combinations (include) */
boolean hasBlock = false;
boolean hasEntity = false;
for (Object arg : argBlocks) {
if (arg instanceof Material) {
hasBlock = true;
}
else if (arg instanceof EntityType) {
hasEntity = true;
if (argAction.size() == 0) {
argAction.add(3);
}
else if (!argAction.contains(3)) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.INVALID_INCLUDE_COMBO));
return;
}
}
}

/* check for invalid block/entity combinations (exclude) */
for (Object arg : argExclude.keySet()) {
if (arg instanceof Material) {
hasBlock = true;
}
else if (arg instanceof EntityType) {
hasEntity = true;
if (argAction.size() == 0) {
argAction.add(3);
}
else if (!argAction.contains(3)) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.INVALID_INCLUDE_COMBO));
return;
}
}
}

if (hasBlock && hasEntity) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.INVALID_INCLUDE_COMBO));
return;
}

if (argWid == -1) {
String worldName = CommandParser.parseWorldName(args, true);
Chat.sendMessage(player, new ChatMessage(Phrase.build(Phrase.WORLD_NOT_FOUND, worldName)).build());
return;
}

int type = 0;
if (ConfigHandler.lookupType.get(player.getName()) != null) {
type = ConfigHandler.lookupType.get(player.getName());
}
if (type == 0 && resultc > 1) {
type = 4;
}
else if (resultc > 2) {
type = 4;
}
else if (resultc > 1) {
pageLookup = true;
String dat = args[1];
if (dat.contains(":")) {
String[] split = dat.split(":");
String check1 = split[0].replaceAll("[^a-zA-Z_]", "");
String check2 = "";
if (split.length > 1) {
check2 = split[1].replaceAll("[^a-zA-Z_]", "");
}
if (check1.length() > 0 || check2.length() > 0) {
type = 4;
pageLookup = false;
}
}
else {
String check1 = dat.replaceAll("[^a-zA-Z_]", "");
if (check1.length() > 0) {
type = 4;
pageLookup = false;
}
}
}
if (argAction.contains(6) || argAction.contains(7) || argAction.contains(8) || argAction.contains(9) || argAction.contains(10)) {
pageLookup = true;
}

if (!permission) {
if (!pageLookup || !player.hasPermission("coreprotect.inspect")) {
Chat.sendMessage(player, new ChatMessage(Phrase.build(Phrase.NO_PERMISSION)).build());
return;
}
}
if (ConfigHandler.converterRunning) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.UPGRADE_IN_PROGRESS));
return;
}
if (ConfigHandler.purgeRunning) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.PURGE_IN_PROGRESS));
return;
}
if (resultc < 2) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.MISSING_PARAMETERS, "/co l <params>"));
return;
}
if (argAction.contains(-1)) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.INVALID_ACTION));
return;
}
if (worldedit && argRadius == null) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.INVALID_SELECTION, "WorldEdit"));
return;
}
if (argRadius != null && argRadius[0] == -1) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.INVALID_RADIUS));
return;
}
if (ConfigHandler.lookupThrottle.get(player.getName()) != null) {
Object[] lookupThrottle = ConfigHandler.lookupThrottle.get(player.getName());
if ((boolean) lookupThrottle[0] || ((System.currentTimeMillis() - (long) lookupThrottle[1])) < 50) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.DATABASE_BUSY));
return;
}
}
boolean allPermission = false;
if (args[0].equals("near") && player.hasPermission("coreprotect.lookup.near")) {
allPermission = true;
}
if (!allPermission) {
if (!pageLookup && (argAction.size() == 0 || (argAction.size() == 1 && (argAction.contains(0) || argAction.contains(1)))) && !player.hasPermission("coreprotect.lookup.block")) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.NO_PERMISSION));
return;
}
if (argAction.contains(2) && !player.hasPermission("coreprotect.lookup.click")) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.NO_PERMISSION));
return;
}
if (argAction.contains(3) && !player.hasPermission("coreprotect.lookup.kill")) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.NO_PERMISSION));
return;
}
if (argAction.contains(4) && !argAction.contains(11) && !player.hasPermission("coreprotect.lookup.container")) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.NO_PERMISSION));
return;
}
if (argAction.contains(6) && !player.hasPermission("coreprotect.lookup.chat")) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.NO_PERMISSION));
return;
}
if (argAction.contains(7) && !player.hasPermission("coreprotect.lookup.command")) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.NO_PERMISSION));
return;
}
if (argAction.contains(8) && !player.hasPermission("coreprotect.lookup.session")) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.NO_PERMISSION));
return;
}
if (argAction.contains(9) && !player.hasPermission("coreprotect.lookup.username")) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.NO_PERMISSION));
return;
}
if (argAction.contains(10) && !player.hasPermission("coreprotect.lookup.sign")) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.NO_PERMISSION));
return;
}
if (argAction.contains(11) && !argAction.contains(4) && !player.hasPermission("coreprotect.lookup.item")) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.NO_PERMISSION));
return;
}
if (argAction.contains(4) && argAction.contains(11) && !player.hasPermission("coreprotect.lookup.inventory")) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.NO_PERMISSION));
return;
}
}
if (argAction.contains(6) || argAction.contains(7) || argAction.contains(8) || argAction.contains(9) || argAction.contains(10)) {
if (argAction.contains(9) && (argRadius != null || argWid > 0 || worldedit)) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.INCOMPATIBLE_ACTION, "r:"));
return;
}
if (argBlocks.size() > 0) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.INCOMPATIBLE_ACTION, "i:"));
return;
}
if (argExclude.size() > 0) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.INCOMPATIBLE_ACTION, "e:"));
return;
}
}

if (startTime <= 0 && !pageLookup && type == 4 && (argBlocks.size() > 0 || argUsers.size() > 0)) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.MISSING_LOOKUP_TIME, Selector.FIRST));
return;
}

if (argAction.contains(4) && argAction.contains(11)) { // a:inventory
if (argUsers.size() == 0) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.MISSING_ACTION_USER));
return;
}

argExclude.put(Material.FIRE, false);
argExclude.put(Material.WATER, false);
argExclude.put(Material.FARMLAND, false);
argExcludeUsers.add("#hopper");
}

if (type == 1) {
boolean defaultRe = true;
int p = 0;
int re = 7;
if (parseRows > 0) {
re = parseRows;
}
if (resultc > 1) {
String pages = args[1];
if (pages.contains(":")) {
String[] data = pages.split(":");
pages = data[0];
String results = "";
if (data.length > 1) {
results = data[1];
}
results = results.replaceAll("[^0-9]", "");
if (results.length() > 0 && results.length() < 10) {
int r = Integer.parseInt(results);
if (r > 0) {
re = r;
defaultRe = false;
}
}
}
pages = pages.replaceAll("[^0-9]", "");
if (pages.length() > 0 && pages.length() < 10) {
int pa = Integer.parseInt(pages);
if (pa > 0) {
p = pa;
}
}
}

if (re > 1000) {
re = 1000;
}
if (re > 100 && !(player instanceof ConsoleCommandSender)) {
re = 100;
}

if (p <= 0) {
p = 1;
}
String lcommand = ConfigHandler.lookupCommand.get(player.getName());
String[] data = lcommand.split("\\.");
int x = Integer.parseInt(data[0]);
int y = Integer.parseInt(data[1]);
int z = Integer.parseInt(data[2]);
int wid = Integer.parseInt(data[3]);
int x2 = Integer.parseInt(data[4]);
int y2 = Integer.parseInt(data[5]);
int z2 = Integer.parseInt(data[6]);
if (defaultRe) {
re = Integer.parseInt(data[7]);
}

String bc = x + "." + y + "." + z + "." + wid + "." + x2 + "." + y2 + "." + z2 + "." + re;
ConfigHandler.lookupCommand.put(player.getName(), bc);

String world = WorldUtils.getWorldName(wid);
double dx = 0.5 * (x + x2);
double dy = 0.5 * (y + y2);
double dz = 0.5 * (z + z2);
final Location location = new Location(Bukkit.getServer().getWorld(world), dx, dy, dz);

Runnable runnable = new ChestTransactionLookupThread(player, command, location, p, re);
Runnable runnable = new ChestTransactionLookupThread(plugin, player, command, location, p, re, exportMode);
Thread thread = new Thread(runnable);
thread.start();
}
else if (type == 2 || type == 3 || type == 7 || type == 8) {
boolean defaultRe = true;
int page = 1;
int re = 7;
if (parseRows > 0) {
re = parseRows;
}
if (resultc > 1) {
String pages = args[1];
if (pages.contains(":")) {
String[] data = pages.split(":");
pages = data[0];
String results = "";
if (data.length > 1) {
results = data[1];
}
results = results.replaceAll("[^0-9]", "");
if (results.length() > 0 && results.length() < 10) {
int r = Integer.parseInt(results);
if (r > 0) {
re = r;
defaultRe = false;
}
}
}
pages = pages.replaceAll("[^0-9]", "");
if (pages.length() > 0 && pages.length() < 10) {
int p = Integer.parseInt(pages);
if (p > 0) {
page = p;
}
}
}

if (re > 1000) {
re = 1000;
}
if (re > 100 && !(player instanceof ConsoleCommandSender)) {
re = 100;
}

// String bc = x+"."+y+"."+z+"."+wid+"."+rstring+"."+lookup_user;
String lcommand = ConfigHandler.lookupCommand.get(player.getName());
String[] data = lcommand.split("\\.");
int x = Integer.parseInt(data[0]);
int y = Integer.parseInt(data[1]);
int z = Integer.parseInt(data[2]);
int wid = Integer.parseInt(data[3]);
int lookupType = Integer.parseInt(data[4]);
if (defaultRe) {
re = Integer.parseInt(data[5]);
}

String bc = x + "." + y + "." + z + "." + wid + "." + lookupType + "." + re;
ConfigHandler.lookupCommand.put(player.getName(), bc);

String world = WorldUtils.getWorldName(wid);
final Block block = Bukkit.getServer().getWorld(world).getBlockAt(x, y, z);
final BlockState blockState = block.getState();

Runnable runnable = new BlockLookupThread(player, command, block, blockState, page, re, type);
Runnable runnable = new BlockLookupThread(plugin, player, command, block, blockState, page, re, type, exportMode);
Thread thread = new Thread(runnable);
thread.start();
}
else if (type == 4 || type == 5) {
boolean defaultRe = true;
int pa = 1;
int re = 4;
if (argAction.contains(6) || argAction.contains(7) || argAction.contains(9) || (argAction.contains(4) && argAction.contains(11))) {
re = 7;
}
if (parseRows > 0) {
re = parseRows;
}
if (type == 5) {
if (resultc > 1) {
String pages = args[1];
if (pages.contains(":")) {
String[] data = pages.split(":");
pages = data[0];
String results = "";
if (data.length > 1) {
results = data[1];
}
results = results.replaceAll("[^0-9]", "");
if (results.length() > 0 && results.length() < 10) {
int r = Integer.parseInt(results);
if (r > 0) {
re = r;
defaultRe = false;
}
}
}
pages = pages.replaceAll("[^0-9]", "");
if (pages.length() > 0 && pages.length() < 10) {
int p = Integer.parseInt(pages);
if (p > 0) {
pa = p;
}
}
}
}

if (re > 1000) {
re = 1000;
}
if (re > 100 && !(player instanceof ConsoleCommandSender)) {
re = 100;
}

int g = 1;
if (argUsers.contains("#global")) {
if (argRadius == null) {
g = 0;
}
}

if (g == 1 && (pageLookup || argBlocks.size() > 0 || argUsers.size() > 0 || (argUsers.size() == 0 && argRadius != null))) {
Integer MAX_RADIUS = Config.getGlobal().MAX_RADIUS;
if (argRadius != null) {
int radiusValue = argRadius[0];
if (radiusValue > MAX_RADIUS && MAX_RADIUS > 0) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.MAXIMUM_RADIUS, MAX_RADIUS.toString(), Selector.FIRST));
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.GLOBAL_LOOKUP));
return;
}
}

if (argUsers.size() == 0) {
argUsers.add("#global");
}
List<String> rollbackusers = argUsers;
int c = 0;
for (String ruser : rollbackusers) {
if (Bukkit.getServer() != null) {
List<Player> players = Bukkit.getServer().matchPlayer(ruser);
for (Player p : players) {
if (p.getName().equalsIgnoreCase(ruser)) {
rollbackusers.set(c, p.getName());
}
}
}
c++;

if (argAction.contains(4) && argAction.contains(11)) {
if (ruser.startsWith("#")) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.INVALID_USERNAME, ruser));
return;
}
}
}

long timeStart = -1;
long timeEnd = 0;
int x = 0;
int y = 0;
int z = 0;
int wid = 0;

if (type == 5) {
String lcommand = ConfigHandler.lookupCommand.get(player.getName());
String[] data = lcommand.split("\\.");
x = Integer.parseInt(data[0]);
y = Integer.parseInt(data[1]);
z = Integer.parseInt(data[2]);
wid = Integer.parseInt(data[3]);
timeStart = Long.parseLong(data[4]);
timeEnd = Long.parseLong(data[5]);
argNoisy = Integer.parseInt(data[6]);
argExcluded = Integer.parseInt(data[7]);
argRestricted = Integer.parseInt(data[8]);
argWid = Integer.parseInt(data[9]);
if (defaultRe) {
re = Integer.parseInt(data[10]);
}

rollbackusers = ConfigHandler.lookupUlist.get(player.getName());
argBlocks = ConfigHandler.lookupBlist.get(player.getName());
argExclude = ConfigHandler.lookupElist.get(player.getName());
argExcludeUsers = ConfigHandler.lookupEUserlist.get(player.getName());
argAction = ConfigHandler.lookupAlist.get(player.getName());
argRadius = ConfigHandler.lookupRadius.get(player.getName());
ts = ConfigHandler.lookupTime.get(player.getName());
startTime = 1;
endTime = 0;
}
else {
if (lo != null) {
x = lo.getBlockX();
z = lo.getBlockZ();
if (lo.getWorld() != null) {
wid = WorldUtils.getWorldId(lo.getWorld().getName());
}
}

if (rollbackusers.size() == 1 && rollbackusers.contains("#global") && argAction.contains(9)) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.MISSING_PARAMETERS, "/co l a:username u:<user>"));
return;
}

if (rollbackusers.contains("#container")) {
if (argAction.contains(6) || argAction.contains(7) || argAction.contains(8) || argAction.contains(9) || argAction.contains(10) || argAction.contains(11)) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.INVALID_USERNAME, "#container"));
return;
}

boolean valid = false;
if (ConfigHandler.lookupType.get(player.getName()) != null) {
int lookupType = ConfigHandler.lookupType.get(player.getName());
if (lookupType == 1) {
valid = true;
}
else if (lookupType == 5) {
if (ConfigHandler.lookupUlist.get(player.getName()).contains("#container")) {
valid = true;
}
}
}

if (valid) {
if (!player.hasPermission("coreprotect.lookup.container") && !allPermission) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.NO_PERMISSION));
return;
}
String lcommand = ConfigHandler.lookupCommand.get(player.getName());
String[] data = lcommand.split("\\.");
x = Integer.parseInt(data[0]);
y = Integer.parseInt(data[1]);
z = Integer.parseInt(data[2]);
wid = Integer.parseInt(data[3]);
argAction.add(5);
argRadius = null;
argWid = 0;
}
else {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.INVALID_CONTAINER));
return;
}
}
}

try {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Color.ITALIC + Phrase.build(Phrase.LOOKUP_SEARCHING));

if (timeStart == -1) {
if (startTime <= 0) {
timeStart = 0;
}
else {
timeStart = (System.currentTimeMillis() / 1000L) - startTime;
}
if (endTime <= 0) {
timeEnd = 0;
}
else {
timeEnd = (System.currentTimeMillis() / 1000L) - endTime;
}
}

Runnable runnable = new StandardLookupThread(player, command, rollbackusers, argBlocks, argExclude, argExcludeUsers, argAction, argRadius, lo, x, y, z, wid, argWid, timeStart, timeEnd, argNoisy, argExcluded, argRestricted, pa, re, type, ts, count);
Runnable runnable = new StandardLookupThread(plugin, player, command, rollbackusers, argBlocks, argExclude, argExcludeUsers, argAction, argRadius, lo, x, y, z, wid, argWid, timeStart, timeEnd, argNoisy, argExcluded, argRestricted, pa, re, type, ts, count, exportMode);
Thread thread = new Thread(runnable);
thread.start();
}
catch (Exception e) {
e.printStackTrace();
}
}
else {
// Functions.sendMessage(player, ChatColors.RED + "You did not specify a lookup radius.");
if (argUsers.size() == 0 && argBlocks.size() == 0 && (argWid > 0 || forceglobal)) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.MISSING_LOOKUP_USER, Selector.FIRST));
return;
}
else if (argUsers.size() == 0 && argBlocks.size() == 0 && argRadius == null) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.MISSING_LOOKUP_USER, Selector.SECOND));
return;
}
else {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.MISSING_PARAMETERS, "/co l <params>"));
}
}
}
else {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.MISSING_PARAMETERS, "/co l <params>"));
}
}

Check failure on line 625 in src/main/java/net/coreprotect/command/LookupCommand.java

View check run for this annotation

codefactor.io / CodeFactor

src/main/java/net/coreprotect/command/LookupCommand.java#L32-L625

Very Complex Method
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,461 +30,462 @@
import net.coreprotect.utility.Chat;
import net.coreprotect.utility.Color;
import net.coreprotect.utility.WorldUtils;
import net.coreprotect.CoreProtect;

public class RollbackRestoreCommand {
public static void runCommand(CommandSender player, Command command, boolean permission, String[] args, Location argLocation, long forceStart, long forceEnd) {
public static void runCommand(CoreProtect plugin, CommandSender player, Command command, boolean permission, String[] args, Location argLocation, long forceStart, long forceEnd) {
Location lo = (argLocation != null ? argLocation : CommandParser.parseLocation(player, args));
List<String> argUuids = new ArrayList<>();
List<String> argUsers = CommandParser.parseUsers(args);
Integer[] argRadius = CommandParser.parseRadius(args, player, lo);
int argNoisy = CommandParser.parseNoisy(args);
List<Integer> argAction = CommandParser.parseAction(args);
List<Object> argBlocks = CommandParser.parseRestricted(player, args, argAction);
Map<Object, Boolean> argExclude = CommandParser.parseExcluded(player, args, argAction);
List<String> argExcludeUsers = CommandParser.parseExcludedUsers(player, args);
String ts = CommandParser.parseTimeString(args);
long[] argTime = CommandParser.parseTime(args);
long startTime = argTime[0];
long endTime = argTime[1];
int argWid = CommandParser.parseWorld(args, true, true);
boolean count = CommandParser.parseCount(args);
boolean worldedit = CommandParser.parseWorldEdit(args);
boolean forceglobal = CommandParser.parseForceGlobal(args);
int preview = CommandParser.parsePreview(args);
String corecommand = args[0].toLowerCase(Locale.ROOT);

if (argBlocks == null || argExclude == null || argExcludeUsers == null) {
return;
}

/* check for invalid block/entity combinations (include) */
boolean hasBlock = false;
boolean hasEntity = false;
for (Object arg : argBlocks) {
if (arg instanceof Material) {
hasBlock = true;
}
else if (arg instanceof EntityType) {
hasEntity = true;
if (argAction.size() == 0) {
argAction.add(3);
}
else if (!argAction.contains(3)) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.INVALID_INCLUDE_COMBO));
return;
}
}
}

/* check for invalid block/entity combinations (exclude) */
for (Object arg : argExclude.keySet()) {
if (arg instanceof Material) {
hasBlock = true;
}
else if (arg instanceof EntityType) {
hasEntity = true;
if (argAction.size() == 0) {
argAction.add(3);
}
else if (!argAction.contains(3)) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.INVALID_INCLUDE_COMBO));
return;
}
}
}

if (hasBlock && hasEntity) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.INVALID_INCLUDE_COMBO));
return;
}

if (count) {
LookupCommand.runCommand(player, command, permission, args);
LookupCommand.runCommand(plugin, player, command, permission, args, false);
return;
}
if (ConfigHandler.converterRunning) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.UPGRADE_IN_PROGRESS));
return;
}
if (ConfigHandler.purgeRunning) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.PURGE_IN_PROGRESS));
return;
}
if (argWid == -1) {
String worldName = CommandParser.parseWorldName(args, true);
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.WORLD_NOT_FOUND, worldName));
return;
}
if (preview > 0 && (!(player instanceof Player))) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.PREVIEW_IN_GAME));
return;
}
if (argAction.contains(-1)) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.INVALID_ACTION));
return;
}
if (worldedit && argRadius == null) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.INVALID_SELECTION, "WorldEdit"));
return;
}
if (argRadius != null && argRadius[0] == -1) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.INVALID_RADIUS));
return;
}
if (ConfigHandler.activeRollbacks.get(player.getName()) != null) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.ROLLBACK_IN_PROGRESS));
return;
}
if (ConfigHandler.lookupThrottle.get(player.getName()) != null) {
Object[] lookupThrottle = ConfigHandler.lookupThrottle.get(player.getName());
if ((boolean) lookupThrottle[0] || ((System.currentTimeMillis() - (long) lookupThrottle[1])) < 100) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.DATABASE_BUSY));
return;
}
}
if (preview > 1 && forceStart <= 0) {
preview = 1;
}

if (permission) {
int a = 0;
if (corecommand.equals("restore") || corecommand.equals("rs") || corecommand.equals("re")) {
a = 1;
}
final int finalAction = a;

int DEFAULT_RADIUS = Config.getGlobal().DEFAULT_RADIUS;
if ((player instanceof Player || player instanceof BlockCommandSender) && argRadius == null && DEFAULT_RADIUS > 0 && !forceglobal && !argAction.contains(11)) {
Location location = lo;
int xmin = location.getBlockX() - DEFAULT_RADIUS;
int xmax = location.getBlockX() + DEFAULT_RADIUS;
int zmin = location.getBlockZ() - DEFAULT_RADIUS;
int zmax = location.getBlockZ() + DEFAULT_RADIUS;
argRadius = new Integer[] { DEFAULT_RADIUS, xmin, xmax, null, null, zmin, zmax, 0 };
}
// if (arg_radius==-2)arg_radius = -1;

int g = 1;
if (argUsers.contains("#global")) {
if (argRadius == null) {
g = 0;
}
}

if (argUsers.size() == 0 && (argWid > 0 || forceglobal) && argRadius == null) {
if (finalAction == 0) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.MISSING_ROLLBACK_USER, Selector.FIRST));
}
else {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.MISSING_ROLLBACK_USER, Selector.SECOND));
}
return;
}

if (argAction.contains(4) && argAction.contains(11)) { // a:inventory
if (argUsers.size() == 0) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.MISSING_ACTION_USER));
return;
}

argExclude.put(Material.FIRE, false);
argExclude.put(Material.WATER, false);
argExclude.put(Material.FARMLAND, false);
argExcludeUsers.add("#hopper");
}
else if (!argAction.contains(4) && Config.getGlobal().EXCLUDE_TNT && !argExclude.containsKey(Material.TNT) && !argBlocks.contains(Material.TNT)) {
argExclude.put(Material.TNT, true);
}

if (g == 1 && (argUsers.size() > 0 || (argUsers.size() == 0 && argRadius != null))) {
Integer MAX_RADIUS = Config.getGlobal().MAX_RADIUS;
if (argRadius != null) {
int radiusValue = argRadius[0];
if (radiusValue > MAX_RADIUS && MAX_RADIUS > 0) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.MAXIMUM_RADIUS, MAX_RADIUS.toString(), (finalAction == 0 ? Selector.SECOND : Selector.THIRD)));
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.GLOBAL_ROLLBACK, "r:#global", (finalAction == 0 ? Selector.FIRST : Selector.SECOND)));
return;
}
}
if (argAction.size() > 0) {
if (argAction.contains(4)) {
if (argUsers.contains("#global") || (argUsers.size() == 0 && argRadius == null)) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.MISSING_ACTION_USER));
return;
}
else if (preview > 0) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.PREVIEW_TRANSACTION, !argAction.contains(11) ? Selector.FIRST : Selector.SECOND));
return;
}
}
if (argAction.contains(8) || (argAction.contains(11) && !argAction.contains(4)) || (!argAction.contains(0) && !argAction.contains(1) && !argAction.contains(3) && !argAction.contains(4))) {
if (finalAction == 0) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.ACTION_NOT_SUPPORTED));
}
else {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.ACTION_NOT_SUPPORTED));
}
return;
}
}

if (argUsers.size() == 0) {
argUsers.add("#global");
}

List<String> rollbackusers = argUsers;
int c = 0;
for (String ruser : rollbackusers) {
List<Player> players = Bukkit.getServer().matchPlayer(ruser); // here
for (Player p : players) {
if (p.getName().equalsIgnoreCase(ruser)) {
ruser = p.getName();
rollbackusers.set(c, ruser);
}
}
c++;

if (argAction.contains(4) && argAction.contains(11)) {
Player onlineUser = Bukkit.getServer().getPlayer(ruser);
if (onlineUser == null || !onlineUser.isOnline()) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.USER_OFFLINE, ruser));
return;
}
}
}

int wid = 0;
int x = 0;
int y = 0;
int z = 0;
if (rollbackusers.contains("#container")) {
if (argAction.contains(11)) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.INVALID_USERNAME, "#container"));
return;
}

boolean valid = false;
if (ConfigHandler.lookupType.get(player.getName()) != null) {
int lookupType = ConfigHandler.lookupType.get(player.getName());
if (lookupType == 1) {
valid = true;
}
else if (lookupType == 5) {
if (ConfigHandler.lookupUlist.get(player.getName()).contains("#container")) {
valid = true;
}
}
}
if (valid) {
if (preview > 0) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.PREVIEW_TRANSACTION, Selector.FIRST));
return;
}
else {
String lcommand = ConfigHandler.lookupCommand.get(player.getName());
String[] data = lcommand.split("\\.");
x = Integer.parseInt(data[0]);
y = Integer.parseInt(data[1]);
z = Integer.parseInt(data[2]);
wid = Integer.parseInt(data[3]);
argAction.add(5);
argRadius = null;
argWid = 0;
lo = new Location(Bukkit.getServer().getWorld(WorldUtils.getWorldName(wid)), x, y, z);
Block block = lo.getBlock();
if (block.getState() instanceof Chest) {
BlockFace[] blockFaces = new BlockFace[] { BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST };
for (BlockFace face : blockFaces) {
if (block.getRelative(face, 1).getState() instanceof Chest) {
Block relative = block.getRelative(face, 1);
int x2 = relative.getX();
int z2 = relative.getZ();
double newX = (x + x2) / 2.0;
double newZ = (z + z2) / 2.0;
lo.setX(newX);
lo.setZ(newZ);
break;
}
}
}
}
}
else {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.INVALID_CONTAINER));
return;
}
}

final List<String> rollbackusers2 = rollbackusers;
if (startTime > 0) {
long unixtimestamp = (System.currentTimeMillis() / 1000L);
long timeStart = unixtimestamp - startTime;
long timeEnd = endTime > 0 ? (unixtimestamp - endTime) : 0;
if (forceStart > 0) {
timeStart = forceStart;
timeEnd = forceEnd;
}
final long finalTimeStart = timeStart;
final long finalTimeEnd = timeEnd;
final Integer[] radius = argRadius;
try {
final CommandSender player2 = player;
final int noisy = argNoisy;
final String rtime = ts;
final List<String> uuidList = argUuids;
final List<Object> blist = argBlocks;
final Map<Object, Boolean> elist = argExclude;
final List<String> euserlist = argExcludeUsers;
final Location locationFinal = lo;
final int finalArgWid = argWid;
final List<Integer> finalArgAction = argAction;
final String[] finalArgs = args;
final int finalPreview = preview;

ConfigHandler.activeRollbacks.put(player.getName(), true);

class BasicThread2 implements Runnable {

Check warning on line 347 in src/main/java/net/coreprotect/command/RollbackRestoreCommand.java

View check run for this annotation

codefactor.io / CodeFactor

src/main/java/net/coreprotect/command/RollbackRestoreCommand.java#L36-L347

Very Complex Method
@Override
public void run() {
try (Connection connection = Database.getConnection(false, 1000)) {
ConfigHandler.lookupThrottle.put(player.getName(), new Object[] { true, System.currentTimeMillis() });
int action = finalAction;
Location location = locationFinal;
if (connection != null) {
Statement statement = connection.createStatement();
String baduser = "";
boolean exists = false;
for (String check : rollbackusers2) {
if (!check.equals("#global") && !check.equals("#container")) {
exists = PlayerLookup.playerExists(connection, check);
if (!exists) {
baduser = check;
break;
}
}
else {
exists = true;
}
}
if (exists) {
for (String check : euserlist) {
if (!check.equals("#global") && !check.equals("#hopper")) {
exists = PlayerLookup.playerExists(connection, check);
if (!exists) {
baduser = check;
break;
}
}
else if (check.equals("#global")) {
baduser = "#global";
exists = false;
}
}
}
if (exists) {
boolean restrictWorld = false;
if (radius != null) {
restrictWorld = true;
}
if (location == null) {
restrictWorld = false;
}
if (finalArgWid > 0) {
restrictWorld = true;
location = new Location(Bukkit.getServer().getWorld(WorldUtils.getWorldName(finalArgWid)), 0, 0, 0);
}
boolean verbose = false;
if (noisy == 1) {
verbose = true;
}

String users = "";
for (String value : rollbackusers2) {
if (users.length() == 0) {
users = "" + value + "";
}
else {
users = users + ", " + value;
}
}
if (users.equals("#global") && restrictWorld) {
// chat output only, don't pass into any functions
users = "#" + location.getWorld().getName();
}
if (finalPreview == 2) {
Chat.sendMessage(player2, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.PREVIEW_CANCELLING));
}
else if (finalPreview == 1) {
Chat.sendMessage(player2, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.ROLLBACK_STARTED, users, Selector.THIRD));
}
else if (action == 0) {
Chat.sendMessage(player2, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.ROLLBACK_STARTED, users, Selector.FIRST));
}
else {
Chat.sendMessage(player2, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.ROLLBACK_STARTED, users, Selector.SECOND));
}

if (finalArgAction.contains(5)) {
ContainerRollback.performContainerRollbackRestore(statement, player2, uuidList, rollbackusers2, rtime, blist, elist, euserlist, finalArgAction, location, radius, finalTimeStart, finalTimeEnd, restrictWorld, false, verbose, action);
}
else {
Rollback.performRollbackRestore(statement, player2, uuidList, rollbackusers2, rtime, blist, elist, euserlist, finalArgAction, location, radius, finalTimeStart, finalTimeEnd, restrictWorld, false, verbose, action, finalPreview);
}
if (finalPreview < 2) {
List<Object> list = new ArrayList<>();
list.add(finalTimeStart);
list.add(finalTimeEnd);
list.add(finalArgs);
list.add(locationFinal);
ConfigHandler.lastRollback.put(player2.getName(), list);
}
}
else {
Chat.sendMessage(player2, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.USER_NOT_FOUND, baduser));
}
statement.close();
}
else {
Chat.sendMessage(player2, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.DATABASE_BUSY));
}
}
catch (Exception e) {
e.printStackTrace();
}
if (ConfigHandler.activeRollbacks.get(player2.getName()) != null) {
ConfigHandler.activeRollbacks.remove(player2.getName());
}
ConfigHandler.lookupThrottle.put(player2.getName(), new Object[] { false, System.currentTimeMillis() });
}
}
Runnable runnable = new BasicThread2();
Thread thread = new Thread(runnable);
thread.start();
}
catch (Exception e) {
e.printStackTrace();
}
}
else {
if (finalAction == 0) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.MISSING_LOOKUP_TIME, Selector.SECOND));
}
else {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.MISSING_LOOKUP_TIME, Selector.THIRD));
}
}
}
else {
if (finalAction == 0) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.MISSING_ROLLBACK_RADIUS, Selector.FIRST)); // rollback
}
else {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.MISSING_ROLLBACK_RADIUS, Selector.SECOND)); // restore
}
}
}
else {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.NO_PERMISSION));
}
}

Check notice on line 490 in src/main/java/net/coreprotect/command/RollbackRestoreCommand.java

View check run for this annotation

codefactor.io / CodeFactor

src/main/java/net/coreprotect/command/RollbackRestoreCommand.java#L348-L490

Complex Method
}
5 changes: 4 additions & 1 deletion src/main/java/net/coreprotect/command/TabHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@
addCompletionIfPermitted(sender, "coreprotect.rollback", "rollback", completions);
addCompletionIfPermitted(sender, "coreprotect.restore", "restore", completions);
addCompletionIfPermitted(sender, "coreprotect.lookup", "lookup", completions);
addCompletionIfPermitted(sender, "coreprotect.lookup", "export", completions);
addCompletionIfPermitted(sender, "coreprotect.purge", "purge", completions);
addCompletionIfPermitted(sender, "coreprotect.reload", "reload", completions);
addCompletionIfPermitted(sender, "coreprotect.status", "status", completions);
Expand Down Expand Up @@ -118,7 +119,9 @@
}

private boolean hasLookupCommand(String cmd, CommandSender sender) {
return (sender.hasPermission("coreprotect.lookup") && (cmd.equals("l") || cmd.equals("lookup"))) || (sender.hasPermission("coreprotect.rollback") && (cmd.equals("rollback") || cmd.equals("rb") || cmd.equals("ro"))) || (sender.hasPermission("coreprotect.restore") && (cmd.equals("restore") || cmd.equals("rs") || cmd.equals("re")));
return (sender.hasPermission("coreprotect.lookup") && (cmd.equals("l") || cmd.equals("lookup") || cmd.equals("export")))
|| (sender.hasPermission("coreprotect.rollback") && (cmd.equals("rollback") || cmd.equals("rb") || cmd.equals("ro")))
|| (sender.hasPermission("coreprotect.restore") && (cmd.equals("restore") || cmd.equals("rs") || cmd.equals("re")));
}

private boolean isActionParam(String lastArg, String currentArg) {
Expand All @@ -141,83 +144,83 @@
return lastArg.equals("r:") || lastArg.equals("radius:") || currentArg.startsWith("r:") || currentArg.startsWith("radius:");
}

private boolean isMaterialParam(String lastArg, String currentArg) {
return lastArg.equals("i:") || lastArg.equals("include:") || lastArg.equals("item:") || lastArg.equals("items:") || lastArg.equals("b:") || lastArg.equals("block:") || lastArg.equals("blocks:") || currentArg.startsWith("i:") || currentArg.startsWith("include:") || currentArg.startsWith("item:") || currentArg.startsWith("items:") || currentArg.startsWith("b:") || currentArg.startsWith("block:") || currentArg.startsWith("blocks:") || lastArg.equals("e:") || lastArg.equals("exclude:") || currentArg.startsWith("e:") || currentArg.startsWith("exclude:");
}

private static class ParamState {
boolean hasUser;
boolean hasAction;
boolean hasInclude;
boolean hasExclude;
boolean hasRadius;
boolean hasTime;
boolean hasContainer;
boolean hasCount;
boolean hasPreview;
boolean hasPage;
boolean validContainer;
boolean pageLookup;
}

Check notice on line 165 in src/main/java/net/coreprotect/command/TabHandler.java

View check run for this annotation

codefactor.io / CodeFactor

src/main/java/net/coreprotect/command/TabHandler.java#L147-L165

Complex Method
private ParamState getParamState(String[] args) {
ParamState state = new ParamState();

if (ConfigHandler.lookupType.get(args[0]) != null && ConfigHandler.lookupPage.get(args[0]) != null) {
state.pageLookup = true;
}

for (int i = 1; i < args.length; i++) {
String arg = args[i].toLowerCase(Locale.ROOT);
if (arg.equals("#container")) {
state.hasContainer = true;
}
else if (arg.equals("#count") || arg.equals("#sum")) {
state.hasCount = true;
}
else if (arg.equals("#preview")) {
state.hasPreview = true;
}
else if ((!arg.contains(":") && !args[i - 1].contains(":") && args.length > (i + 1)) || arg.contains("u:") || arg.contains("user:") || arg.contains("users:") || arg.contains("p:")) {
state.hasUser = true;
}
else if (arg.contains("page:")) {
state.hasPage = true;
}
else if (arg.contains("a:") || arg.contains("action:")) {
state.hasAction = true;
}
else if (arg.contains("i:") || arg.contains("include:") || arg.contains("item:") || arg.contains("items:") || arg.contains("b:") || arg.contains("block:") || arg.contains("blocks:")) {
state.hasInclude = true;
}
else if (arg.contains("t:") || arg.contains("time:")) {
state.hasTime = true;
}
else if (arg.contains("e:") || arg.contains("exclude:")) {
state.hasExclude = true;
}
else if (arg.contains("r:") || arg.contains("radius:")) {
state.hasRadius = true;
}
}

if (!state.hasContainer) {
if (ConfigHandler.lookupType.get(args[0]) != null) {
int lookupType = ConfigHandler.lookupType.get(args[0]);
if (lookupType == 1) {
state.validContainer = true;
}
else if (lookupType == 5) {
if (ConfigHandler.lookupUlist.get(args[0]).contains("#container")) {
state.validContainer = true;
}
}
}
}

return state;
}

Check notice on line 223 in src/main/java/net/coreprotect/command/TabHandler.java

View check run for this annotation

codefactor.io / CodeFactor

src/main/java/net/coreprotect/command/TabHandler.java#L166-L223

Complex Method
private List<String> handleActionParamCompletions(String currentArg, String lastArg) {
String arg = "";
String filter = lastArg;
Expand Down Expand Up @@ -465,43 +468,43 @@
return StringUtil.copyPartialMatches(currentArg, completions, new ArrayList<>(completions.size()));
}

private ArrayList<String> filterParams(boolean firstParam, String lastArgument, String argument, ParamState state) {
ArrayList<String> params = new ArrayList<>();
for (String param : PARAMS) {
if (param.equals("user:") && !state.hasUser) {
params.add(param);
}
else if (param.equals("action:") && !state.hasAction) {
params.add(param);
}
else if (param.equals("include:") && !state.hasInclude) {
params.add(param);
}
else if (param.equals("exclude:") && !state.hasExclude) {
params.add(param);
}
else if (param.equals("radius:") && !state.hasRadius) {
params.add(param);
}
else if (param.equals("time:") && !state.hasTime) {
params.add(param);
}
else if (param.equals("#container") && !state.hasContainer && !state.hasRadius && state.validContainer) {
params.add(param);
}
}
if (firstParam && state.pageLookup && (lastArgument.equals("l") || lastArgument.equals("lookup"))) {
params.add("page:");
}
else if (!firstParam && argument.startsWith("#")) {
if (!state.hasCount) {
params.add("#count");
}
if (!state.hasPreview) {
params.add("#preview");
}
}

return params;
}

Check notice on line 509 in src/main/java/net/coreprotect/command/TabHandler.java

View check run for this annotation

codefactor.io / CodeFactor

src/main/java/net/coreprotect/command/TabHandler.java#L471-L509

Complex Method
}
7 changes: 4 additions & 3 deletions src/main/java/net/coreprotect/command/UndoCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@
import net.coreprotect.language.Selector;
import net.coreprotect.utility.Chat;
import net.coreprotect.utility.Color;
import net.coreprotect.CoreProtect;

public class UndoCommand {
protected static void runCommand(CommandSender user, Command command, boolean permission, String[] args) {
protected static void runCommand(CoreProtect plugin, CommandSender user, Command command, boolean permission, String[] args) {
try {
if (ConfigHandler.lastRollback.get(user.getName()) != null) {
List<Object> list = ConfigHandler.lastRollback.get(user.getName());
Expand All @@ -23,7 +24,7 @@ protected static void runCommand(CommandSender user, Command command, boolean pe
Location location = (Location) list.get(3);
for (String arg : args) {
if (arg.equals("#preview")) {
CancelCommand.runCommand(user, command, permission, args);
CancelCommand.runCommand(plugin, user, command, permission, args);
return;
}
}
Expand All @@ -39,7 +40,7 @@ else if (args[0].equals("restore") || args[0].equals("rs") || args[0].equals("re
}
if (valid) {
ConfigHandler.lastRollback.remove(user.getName());
RollbackRestoreCommand.runCommand(user, command, permission, args, location, startTime, endTime);
RollbackRestoreCommand.runCommand(plugin, user, command, permission, args, location, startTime, endTime);
}
}
else {
Expand Down
Loading