added rollback playerarea

This commit is contained in:
Robin Kupper
2011-03-13 14:58:50 +01:00
parent 3a9e9f7d71
commit 522f75aba6
2 changed files with 61 additions and 29 deletions

View File

@ -183,41 +183,56 @@ public class LogBlock extends JavaPlugin
} }
} else if (args[0].equalsIgnoreCase("rollback")) { } else if (args[0].equalsIgnoreCase("rollback")) {
if (args.length >= 2) { if (args.length >= 2) {
int minutes; int minutes = Config.defaultTime;
if (args[1].equalsIgnoreCase("player")) { if (args[1].equalsIgnoreCase("player")) {
if (args.length == 3) if (args.length == 3 || args.length == 5) {
minutes = Config.defaultTime; if (args.length == 5)
else minutes = parseTimeSpec(args[3], args[4]);
minutes = parseTimeSpec(args[3], args[4]); player.sendMessage(ChatColor.GREEN + "Rolling back " + args[2] + " by " + minutes + " minutes.");
player.sendMessage(ChatColor.GREEN + "Rolling back " + args[2] + " by " + minutes + " minutes."); new Thread(new Rollback(player, conn, args[2], minutes, table)).start();
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")) { } else if (args[1].equalsIgnoreCase("area")) {
if (args.length == 3) if (args.length == 3 || args.length == 5) {
minutes = Config.defaultTime; if (args.length == 5)
else minutes = parseTimeSpec(args[3], args[4]);
minutes = parseTimeSpec(args[3], args[4]); if (isInt(args[2])) {
if (isInt(args[2])) { player.sendMessage(ChatColor.GREEN + "Rolling back area within " + args[2] + " blocks of you by " + minutes + " minutes.");
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();
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 } else
player.sendMessage(ChatColor.RED + "Can't cast into an int: " + args[2]); 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")) { } else if (args[1].equalsIgnoreCase("cuboid")) {
if (args.length == 2) if (args.length == 2 || args.length == 4) {
minutes = Config.defaultTime; if (args.length == 4)
else minutes = parseTimeSpec(args[2], args[3]);
minutes = parseTimeSpec(args[2], args[3]); Session session = getSession(player);
Session session = getSession(player); if (session.isloc1Set() && session.isloc2Set()) {
if (session.isloc1Set() && session.isloc2Set()) { player.sendMessage(ChatColor.GREEN + "Rolling back selected cuboid by " + minutes + " minutes.");
player.sendMessage(ChatColor.GREEN + "Rolling back selected cuboid by " + minutes + " minutes."); new Thread(new Rollback(player, conn, session.loc1, session.loc2, minutes, table)).start();
new Thread(new Rollback(player, conn, session.loc1, session.loc2, minutes, table)).start(); } else
} else player.sendMessage(ChatColor.RED + "No cuboid selected. Use /lb setpos");
player.sendMessage(ChatColor.RED + "No cuboid selected. Use /lb setpos"); } else
player.sendMessage(ChatColor.RED + "Usage: /lb rollback cuboid <time> <minutes|hours|days>");
} else } else
player.sendMessage(ChatColor.RED + "Wrong rollback mode"); player.sendMessage(ChatColor.RED + "Wrong rollback mode");
} else { } else {
player.sendMessage(ChatColor.RED + "Usage:"); player.sendMessage(ChatColor.RED + "No rollback mode");
player.sendMessage(ChatColor.RED + "/lb rollback player [name] <time> <minutes|hours|days>"); 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 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>"); player.sendMessage(ChatColor.RED + "/lb rollback cuboid <time> <minutes|hours|days>");
} }
} else if (args[0].equalsIgnoreCase("help")) { } else if (args[0].equalsIgnoreCase("help")) {
@ -227,9 +242,7 @@ public class LogBlock extends JavaPlugin
player.sendMessage("<EFBFBD>d/lb player [name] <radius>"); player.sendMessage("<EFBFBD>d/lb player [name] <radius>");
player.sendMessage("<EFBFBD>d/lb block [type] <radius>"); player.sendMessage("<EFBFBD>d/lb block [type] <radius>");
player.sendMessage("<EFBFBD>d/lb setpos <1|2>"); player.sendMessage("<EFBFBD>d/lb setpos <1|2>");
player.sendMessage("<EFBFBD>d/lb rollback area [radius] <time> <minutes|hours|days>"); player.sendMessage("<EFBFBD>d/lb rollback [rollback mode]");
player.sendMessage("<EFBFBD>d/lb rollback player [name] <time> <minutes|hours|days>");
player.sendMessage("<EFBFBD>d/lb rollback cuboid <time> <minutes|hours|days>");
} else } else
player.sendMessage(ChatColor.RED + "Wrong argument. Type /lb help for help"); player.sendMessage(ChatColor.RED + "Wrong argument. Type /lb help for help");
} else } else

View File

@ -35,6 +35,25 @@ public class Rollback implements Runnable
return; return;
} }
} }
Rollback(Player player, Connection conn, String name, int radius, int minutes, String table) {
this.player = player;
this.conn = conn;
try {
conn.setAutoCommit(false);
ps = conn.prepareStatement("SELECT type, data, replaced, x, y, z FROM `" + table + "` INNER JOIN `lb-players` USING (`playerid`) WHERE playername = ? AND x > ? AND x < ? AND z > ? AND z < ? AND date > date_sub(now(), INTERVAL ? MINUTE) ORDER BY date DESC", Statement.RETURN_GENERATED_KEYS);
ps.setString(1, name);
ps.setInt(2, player.getLocation().getBlockX()-radius);
ps.setInt(3, player.getLocation().getBlockX()+radius);
ps.setInt(4, player.getLocation().getBlockZ()-radius);
ps.setInt(5, player.getLocation().getBlockZ()+radius);
ps.setInt(6, minutes);
} catch (SQLException ex) {
LogBlock.log.log(Level.SEVERE, this.getClass().getName() + " SQL exception", ex);
player.sendMessage(ChatColor.RED + "Error, check server logs.");
return;
}
}
Rollback(Player player, Connection conn, int radius, int minutes, String table) { Rollback(Player player, Connection conn, int radius, int minutes, String table) {
this.player = player; this.player = player;