Added exclude player

This commit is contained in:
Robin Kupper
2011-06-29 01:25:19 +02:00
parent 33d98efff9
commit a3ad43908c

View File

@@ -5,6 +5,7 @@ import static de.diddiz.util.BukkitUtils.getBlockEquivalents;
import static de.diddiz.util.BukkitUtils.materialName; import static de.diddiz.util.BukkitUtils.materialName;
import static de.diddiz.util.BukkitUtils.senderName; import static de.diddiz.util.BukkitUtils.senderName;
import static de.diddiz.util.Utils.isInt; import static de.diddiz.util.Utils.isInt;
import static de.diddiz.util.Utils.listing;
import static de.diddiz.util.Utils.parseTimeSpec; import static de.diddiz.util.Utils.parseTimeSpec;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@@ -29,6 +30,7 @@ public class QueryParams implements Cloneable
public Location loc = null; public Location loc = null;
public Order order = Order.DESC; public Order order = Order.DESC;
public List<String> players = new ArrayList<String>(); public List<String> players = new ArrayList<String>();
public boolean excludePlayersMode = false;
public boolean prepareToolQuery = false, coords = false, silent = false; public boolean prepareToolQuery = false, coords = false, silent = false;
public Selection sel = null; public Selection sel = null;
public SummarizationMode sum = SummarizationMode.NONE; public SummarizationMode sum = SummarizationMode.NONE;
@@ -89,9 +91,10 @@ public class QueryParams implements Cloneable
public String getTitle() { public String getTitle() {
final StringBuilder title = new StringBuilder(); final StringBuilder title = new StringBuilder();
if (!types.isEmpty()) { if (!types.isEmpty()) {
final String[] blocknames = new String[types.size()];
for (int i = 0; i < types.size(); i++) for (int i = 0; i < types.size(); i++)
title.append(materialName(types.get(i)) + ", "); blocknames[i] = materialName(types.get(i));
title.deleteCharAt(title.length() - 2); title.append(listing(blocknames, ", ", " and ") + " ");
} else } else
title.append("Block "); title.append("Block ");
if (bct == BlockChangeType.CREATED) if (bct == BlockChangeType.CREATED)
@@ -101,13 +104,9 @@ public class QueryParams implements Cloneable
else else
title.append("changes "); title.append("changes ");
if (players.size() > 10) if (players.size() > 10)
title.append("from many players "); title.append((excludePlayersMode ? "without" : "from") + " many players ");
else if (!players.isEmpty()) { else if (!players.isEmpty())
title.append("from player "); title.append((excludePlayersMode ? "without" : "from") + " player" + (players.size() != 1 ? "s" : "") + " " + listing(players.toArray(new String[players.size()]), ", ", " and ") + " ");
for (int i = 0; i < players.size(); i++)
title.append(players.get(i) + ", ");
title.deleteCharAt(title.length() - 2);
}
if (minutes > 0) if (minutes > 0)
title.append("in the last " + minutes + " minutes "); title.append("in the last " + minutes + " minutes ");
if (minutes < 0) if (minutes < 0)
@@ -175,13 +174,16 @@ public class QueryParams implements Cloneable
where.append("type = replaced AND (type = 23 OR type = 54 OR type = 61) AND "); where.append("type = replaced AND (type = 23 OR type = 54 OR type = 61) AND ");
break; break;
} }
if (!players.isEmpty() && sum != SummarizationMode.PLAYERS) { if (!players.isEmpty() && sum != SummarizationMode.PLAYERS)
where.append('('); if (!excludePlayersMode) {
for (final String playerName : players) where.append('(');
where.append("playername = '" + playerName + "' OR "); for (final String playerName : players)
where.delete(where.length() - 4, where.length()); where.append("playername = '" + playerName + "' OR ");
where.append(") AND "); where.delete(where.length() - 4, where.length());
} where.append(") AND ");
} else
for (final String playerName : players)
where.append("playername != '" + playerName + "' AND ");
if (loc != null) { if (loc != null) {
if (radius == 0) if (radius == 0)
where.append("x = '" + loc.getBlockX() + "' AND y = '" + loc.getBlockY() + "' AND z = '" + loc.getBlockZ() + "' AND "); where.append("x = '" + loc.getBlockX() + "' AND y = '" + loc.getBlockY() + "' AND z = '" + loc.getBlockZ() + "' AND ");
@@ -218,8 +220,11 @@ public class QueryParams implements Cloneable
if (values == null || values.length < 1) if (values == null || values.length < 1)
throw new IllegalArgumentException("No or wrong count of arguments for '" + param + "'"); throw new IllegalArgumentException("No or wrong count of arguments for '" + param + "'");
for (final String playerName : values) for (final String playerName : values)
if (playerName.length() > 0) if (playerName.length() > 0) {
players.add(playerName.replace("\\", "\\\\").replace("'", "\\'")); if (playerName.startsWith("!"))
excludePlayersMode = true;
players.add(playerName.replaceAll("[^a-zA-Z0-9_]", ""));
}
} else if (param.equals("block") || param.equals("type")) { } else if (param.equals("block") || param.equals("type")) {
if (values == null || values.length < 1) if (values == null || values.length < 1)
throw new IllegalArgumentException("No or wrong count of arguments for '" + param + "'"); throw new IllegalArgumentException("No or wrong count of arguments for '" + param + "'");