Added /lb me

This commit is contained in:
Robin Kupper
2011-03-14 00:44:32 +01:00
parent 9d2cee1cd1
commit bb61ceac37
2 changed files with 161 additions and 144 deletions

View File

@@ -107,158 +107,174 @@ public class LogBlock extends JavaPlugin
@Override @Override
public void onDisable() { public void onDisable() {
if (consumer != null) { if (consumer != null) {
log.info("[LogBlock] Stopping consumer");
consumer.stop(); consumer.stop();
consumer = null;
} }
log.info("LogBlock disabled."); log.info("LogBlock disabled.");
} }
@Override @Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
if (cmd.getName().equalsIgnoreCase("lb")) { if (!cmd.getName().equalsIgnoreCase("lb"))
try {
if ((sender instanceof Player)) {
Player player = (Player)sender;
Connection conn = getConnection();
if (conn != null) {
String table = getTable(player);
if (table != null) {
if (CheckPermission(player,"logblock.area")) {
if (args.length == 0) {
player.sendMessage(ChatColor.RED + "No argument. Type /lb help for help");
} else if (args[0].equalsIgnoreCase("area")) {
int radius = Config.defaultDist;
if (args.length == 2 && isInt(args[1]))
radius = Integer.parseInt(args[1]);
new Thread(new AreaStats(conn, player, radius, table)).start();
} else if (args[0].equalsIgnoreCase("world")) {
new Thread(new AreaStats(conn, player, Short.MAX_VALUE, table)).start();
} else if (args[0].equalsIgnoreCase("player")) {
if (args.length >= 2) {
int radius = Config.defaultDist;
if (args.length == 3 && isInt(args[2]))
radius = Integer.parseInt(args[2]);
new Thread(new PlayerAreaStats(conn, player, args[1], radius, table)).start();
} else
player.sendMessage(ChatColor.RED + "Usage: /lb player [name] <radius>");
} else if (args[0].equalsIgnoreCase("block")) {
if (args.length >= 2) {
if (Material.matchMaterial(args[1]) != null) {
int type = Material.matchMaterial(args[1]).getId();
int radius = Config.defaultDist;
if (args.length == 3 && isInt(args[2]))
radius = Integer.parseInt(args[2]);
new Thread(new AreaBlockSearch(conn, player, type, radius, table)).start();
} else
player.sendMessage(ChatColor.RED + "Can't find any item like '" + args[1] + "'");
} else
player.sendMessage(ChatColor.RED + "Usage: /lb block [type] <radius>");
} else if (args[0].equalsIgnoreCase("setpos")) {
Session session = getSession(player);
Location loc = player.getTargetBlock(null, Integer.MAX_VALUE).getLocation();
if (args.length == 1) {
if (!session.isloc1Set()) {
session.loc1 = loc;
player.sendMessage(ChatColor.GREEN + "Pos 1 set.");
} else if (!session.isloc2Set()) {
session.loc2 = loc;
player.sendMessage(ChatColor.GREEN + "Pos 2 set.");
} else {
session.loc1 = loc;
session.loc2 = null;
player.sendMessage(ChatColor.GREEN + "Positions cleared.");
player.sendMessage(ChatColor.GREEN + "Pos 1 set.");
}
} else if (args.length == 2) {
if (args[1].equalsIgnoreCase("1")) {
session.loc1 = loc;
player.sendMessage(ChatColor.GREEN + "Pos 1 set.");
} else if (args[1].equalsIgnoreCase("2")) {
session.loc2 = loc;
player.sendMessage(ChatColor.GREEN + "Pos 2 set.");
} else
player.sendMessage(ChatColor.RED + "Usage: /lb setpos <1|2>");
} else {
player.sendMessage(ChatColor.RED + "Usage: /lb setpos <1|2>");
}
} else if (args[0].equalsIgnoreCase("rollback")) {
if (args.length >= 2) {
int minutes = Config.defaultTime;
if (args[1].equalsIgnoreCase("player")) {
if (args.length == 3 || args.length == 5) {
if (args.length == 5)
minutes = parseTimeSpec(args[3], args[4]);
player.sendMessage(ChatColor.GREEN + "Rolling back " + args[2] + " by " + minutes + " minutes.");
new Thread(new Rollback(player, conn, args[2], minutes, table)).start();
} else
player.sendMessage(ChatColor.RED + "Usage: /lb rollback player [name] <time> <minutes|hours|days>");
} else if (args[1].equalsIgnoreCase("area")) {
if (args.length == 3 || args.length == 5) {
if (args.length == 5)
minutes = parseTimeSpec(args[3], args[4]);
if (isInt(args[2])) {
player.sendMessage(ChatColor.GREEN + "Rolling back area within " + args[2] + " blocks of you by " + minutes + " minutes.");
new Thread(new Rollback(player, conn, Integer.parseInt(args[2]), minutes, table)).start();
} else
player.sendMessage(ChatColor.RED + "Can't parse to an int: " + args[2]);
} else
player.sendMessage(ChatColor.RED + "Usage /lb rollback area [radius] <time> <minutes|hours|days>");
} else if (args[1].equalsIgnoreCase("playerarea")) {
if (args.length == 4 || args.length == 6) {
if (args.length == 6)
minutes = parseTimeSpec(args[4], args[5]);
if (isInt(args[3])) {
player.sendMessage(ChatColor.GREEN + "Rolling back " + args[2] + " within " + args[3] + " blocks by " + minutes + " minutes.");
new Thread(new Rollback(player, conn, args[2], Integer.parseInt(args[3]), minutes, table)).start();
} else
player.sendMessage(ChatColor.RED + "Can't parse to an int: " + args[3]);
} else
player.sendMessage(ChatColor.RED + "Usage: /lb rollback playerarea [player] [radius] <time> <minutes|hours|days>");
} else if (args[1].equalsIgnoreCase("cuboid")) {
if (args.length == 2 || args.length == 4) {
if (args.length == 4)
minutes = parseTimeSpec(args[2], args[3]);
Session session = getSession(player);
if (session.isloc1Set() && session.isloc2Set()) {
player.sendMessage(ChatColor.GREEN + "Rolling back selected cuboid by " + minutes + " minutes.");
new Thread(new Rollback(player, conn, session.loc1, session.loc2, minutes, table)).start();
} else
player.sendMessage(ChatColor.RED + "No cuboid selected. Use /lb setpos");
} else
player.sendMessage(ChatColor.RED + "Usage: /lb rollback cuboid <time> <minutes|hours|days>");
} else
player.sendMessage(ChatColor.RED + "Wrong rollback mode");
} else {
player.sendMessage(ChatColor.RED + "Usage: ");
player.sendMessage(ChatColor.RED + "/lb rollback player [name] <time> <minutes|hours|days>");
player.sendMessage(ChatColor.RED + "/lb rollback area [radius] <time> <minutes|hours|days>");
player.sendMessage(ChatColor.RED + "/lb rollback playerarea [name] [radius] <time> <minutes|hours|days>");
player.sendMessage(ChatColor.RED + "/lb rollback cuboid <time> <minutes|hours|days>");
}
} else if (args[0].equalsIgnoreCase("help")) {
player.sendMessage("<EFBFBD>dLogBlock Commands:");
player.sendMessage("<EFBFBD>d/lb area <radius>");
player.sendMessage("<EFBFBD>d/lb world");
player.sendMessage("<EFBFBD>d/lb player [name] <radius>");
player.sendMessage("<EFBFBD>d/lb block [type] <radius>");
player.sendMessage("<EFBFBD>d/lb setpos <1|2>");
player.sendMessage("<EFBFBD>d/lb rollback [rollback mode]");
} else
player.sendMessage(ChatColor.RED + "Wrong argument. Type /lb help for help");
} else
player.sendMessage(ChatColor.RED + "You aren't allowed to do this");
} else
player.sendMessage(ChatColor.RED + "This world isn't logged");
} else
player.sendMessage(ChatColor.RED + "Can't create SQL connection.");
} else
sender.sendMessage("You aren't a player");
} catch (Exception ex) {
sender.sendMessage(ChatColor.RED + "An error occured. Check you syntax:");
}
return true;
} else
return false; return false;
if (!(sender instanceof Player)) {
sender.sendMessage("You aren't a player");
return true;
}
Player player = (Player)sender;
Connection conn = getConnection();
String table = getTable(player);
if (conn == null) {
player.sendMessage(ChatColor.RED + "Can't create SQL connection.");
return true;
} else if (table == null) {
player.sendMessage(ChatColor.RED + "This world isn't logged");
return true;
}
if (args.length == 0)
player.sendMessage(ChatColor.RED + "No argument. Type /lb help for help");
else if (args[0].equalsIgnoreCase("area")) {
if (CheckPermission(player,"logblock.area")) {
int radius = Config.defaultDist;
if (args.length == 2 && isInt(args[1]))
radius = Integer.parseInt(args[1]);
new Thread(new AreaStats(conn, player, radius, table)).start();
} else
player.sendMessage(ChatColor.RED + "You aren't allowed to do this");
} else if (args[0].equalsIgnoreCase("world")) {
if (CheckPermission(player,"logblock.area")) {
new Thread(new AreaStats(conn, player, Short.MAX_VALUE, table)).start();
} else
player.sendMessage(ChatColor.RED + "You aren't allowed to do this");
} else if (args[0].equalsIgnoreCase("player")) {
if (CheckPermission(player,"logblock.area")) {
if (args.length == 2 || args.length == 3) {
int radius = Config.defaultDist;
if (args.length == 3 && isInt(args[2]))
radius = Integer.parseInt(args[2]);
new Thread(new PlayerAreaStats(conn, player, args[1], radius, table)).start();
} else
player.sendMessage(ChatColor.RED + "Usage: /lb player [name] <radius>");
} else
player.sendMessage(ChatColor.RED + "You aren't allowed to do this");
} else if (args[0].equalsIgnoreCase("block")) {
if (CheckPermission(player,"logblock.area")) {
if (args.length == 2 || args.length == 3) {
Material mat = Material.matchMaterial(args[1]);
int radius = Config.defaultDist;
if (args.length == 3 && isInt(args[2]))
radius = Integer.parseInt(args[2]);
if (mat != null)
new Thread(new AreaBlockSearch(conn, player, mat.getId(), radius, table)).start();
else
player.sendMessage(ChatColor.RED + "Can't find any item like '" + args[1] + "'");
} else
player.sendMessage(ChatColor.RED + "Usage: /lb block [type] <radius>");
} else
player.sendMessage(ChatColor.RED + "You aren't allowed to do this");
} else if (args[0].equalsIgnoreCase("setpos")) {
if (CheckPermission(player,"logblock.rollback")) {
Session session = getSession(player);
Location loc = player.getTargetBlock(null, Integer.MAX_VALUE).getLocation();
if (args.length == 1) {
if (!session.isloc1Set()) {
session.loc1 = loc;
player.sendMessage(ChatColor.GREEN + "Pos 1 set.");
} else if (!session.isloc2Set()) {
session.loc2 = loc;
player.sendMessage(ChatColor.GREEN + "Pos 2 set.");
} else {
session.loc1 = loc;
session.loc2 = null;
player.sendMessage(ChatColor.GREEN + "Positions cleared.");
player.sendMessage(ChatColor.GREEN + "Pos 1 set.");
}
} else if (args.length == 2) {
if (args[1].equalsIgnoreCase("1")) {
session.loc1 = loc;
player.sendMessage(ChatColor.GREEN + "Pos 1 set.");
} else if (args[1].equalsIgnoreCase("2")) {
session.loc2 = loc;
player.sendMessage(ChatColor.GREEN + "Pos 2 set.");
} else
player.sendMessage(ChatColor.RED + "Wrong parameter. Try to use either 1 or 2");
} else
player.sendMessage(ChatColor.RED + "Usage: /lb setpos <1|2>");
} else
player.sendMessage(ChatColor.RED + "You aren't allowed to do this");
} else if (args[0].equalsIgnoreCase("rollback")) {
if (CheckPermission(player,"logblock.rollback")) {
if (args.length >= 2) {
int minutes = Config.defaultTime;
if (args[1].equalsIgnoreCase("player")) {
if (args.length == 3 || args.length == 5) {
if (args.length == 5)
minutes = parseTimeSpec(args[3], args[4]);
player.sendMessage(ChatColor.GREEN + "Rolling back " + args[2] + " by " + minutes + " minutes.");
new Thread(new Rollback(player, conn, args[2], minutes, table)).start();
} else
player.sendMessage(ChatColor.RED + "Usage: /lb rollback player [name] <time> <minutes|hours|days>");
} else if (args[1].equalsIgnoreCase("area")) {
if (args.length == 3 || args.length == 5) {
if (args.length == 5)
minutes = parseTimeSpec(args[3], args[4]);
if (isInt(args[2])) {
player.sendMessage(ChatColor.GREEN + "Rolling back area within " + args[2] + " blocks of you by " + minutes + " minutes.");
new Thread(new Rollback(player, conn, Integer.parseInt(args[2]), minutes, table)).start();
} else
player.sendMessage(ChatColor.RED + "Can't parse to an int: " + args[2]);
} else
player.sendMessage(ChatColor.RED + "Usage /lb rollback area [radius] <time> <minutes|hours|days>");
} else if (args[1].equalsIgnoreCase("playerarea")) {
if (args.length == 4 || args.length == 6) {
if (args.length == 6)
minutes = parseTimeSpec(args[4], args[5]);
if (isInt(args[3])) {
player.sendMessage(ChatColor.GREEN + "Rolling back " + args[2] + " within " + args[3] + " blocks by " + minutes + " minutes.");
new Thread(new Rollback(player, conn, args[2], Integer.parseInt(args[3]), minutes, table)).start();
} else
player.sendMessage(ChatColor.RED + "Can't parse to an int: " + args[3]);
} else
player.sendMessage(ChatColor.RED + "Usage: /lb rollback playerarea [player] [radius] <time> <minutes|hours|days>");
} else if (args[1].equalsIgnoreCase("cuboid")) {
if (args.length == 2 || args.length == 4) {
if (args.length == 4)
minutes = parseTimeSpec(args[2], args[3]);
Session session = getSession(player);
if (session.isloc1Set() && session.isloc2Set()) {
player.sendMessage(ChatColor.GREEN + "Rolling back selected cuboid by " + minutes + " minutes.");
new Thread(new Rollback(player, conn, session.loc1, session.loc2, minutes, table)).start();
} else
player.sendMessage(ChatColor.RED + "No cuboid selected. Use /lb setpos");
} else
player.sendMessage(ChatColor.RED + "Usage: /lb rollback cuboid <time> <minutes|hours|days>");
} else
player.sendMessage(ChatColor.RED + "Wrong rollback mode");
} else {
player.sendMessage(ChatColor.RED + "Usage: ");
player.sendMessage(ChatColor.RED + "/lb rollback player [name] <time> <minutes|hours|days>");
player.sendMessage(ChatColor.RED + "/lb rollback area [radius] <time> <minutes|hours|days>");
player.sendMessage(ChatColor.RED + "/lb rollback playerarea [name] [radius] <time> <minutes|hours|days>");
player.sendMessage(ChatColor.RED + "/lb rollback cuboid <time> <minutes|hours|days>");
}
} else if (args[0].equalsIgnoreCase("me")) {
if (CheckPermission(player,"logblock.me")) {
new Thread(new PlayerAreaStats(conn, player, player.getName(), Short.MAX_VALUE, table)).start();
} else
player.sendMessage(ChatColor.RED + "You aren't allowed to do this");
} else
player.sendMessage(ChatColor.RED + "You aren't allowed to do this");
} else if (args[0].equalsIgnoreCase("help")) {
player.sendMessage("<EFBFBD>dLogBlock Commands:");
player.sendMessage("<EFBFBD>d/lb area <radius>");
player.sendMessage("<EFBFBD>d/lb world");
player.sendMessage("<EFBFBD>d/lb player [name] <radius>");
player.sendMessage("<EFBFBD>d/lb block [type] <radius>");
player.sendMessage("<EFBFBD>d/lb setpos <1|2>");
player.sendMessage("<EFBFBD>d/lb rollback [rollback mode]");
} else
player.sendMessage(ChatColor.RED + "Wrong argument. Type /lb help for help");
return true;
} }
private Connection getConnection() private Connection getConnection()

View File

@@ -123,6 +123,7 @@ public class Rollback implements Runnable
int changes = edits.size(); int changes = edits.size();
int rolledBack = 0; int rolledBack = 0;
player.sendMessage(ChatColor.GREEN + "" + changes + " Changes found."); player.sendMessage(ChatColor.GREEN + "" + changes + " Changes found.");
player.sendMessage(ChatColor.GOLD + "This may take " + (int)Math.ceil(changes/1000) + " seconds.");
int counter = 0; int counter = 0;
Edit e = edits.poll(); Edit e = edits.poll();
while (e != null) while (e != null)