forked from LogBlock/LogBlock
added rollback playerarea
This commit is contained in:
@ -183,41 +183,56 @@ public class LogBlock extends JavaPlugin
|
||||
}
|
||||
} else if (args[0].equalsIgnoreCase("rollback")) {
|
||||
if (args.length >= 2) {
|
||||
int minutes;
|
||||
int minutes = Config.defaultTime;
|
||||
if (args[1].equalsIgnoreCase("player")) {
|
||||
if (args.length == 3)
|
||||
minutes = Config.defaultTime;
|
||||
else
|
||||
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();
|
||||
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)
|
||||
minutes = Config.defaultTime;
|
||||
else
|
||||
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();
|
||||
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 + "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")) {
|
||||
if (args.length == 2)
|
||||
minutes = Config.defaultTime;
|
||||
else
|
||||
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");
|
||||
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 + "No rollback mode");
|
||||
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")) {
|
||||
@ -227,9 +242,7 @@ public class LogBlock extends JavaPlugin
|
||||
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 area [radius] <time> <minutes|hours|days>");
|
||||
player.sendMessage("<EFBFBD>d/lb rollback player [name] <time> <minutes|hours|days>");
|
||||
player.sendMessage("<EFBFBD>d/lb rollback cuboid <time> <minutes|hours|days>");
|
||||
player.sendMessage("<EFBFBD>d/lb rollback [rollback mode]");
|
||||
} else
|
||||
player.sendMessage(ChatColor.RED + "Wrong argument. Type /lb help for help");
|
||||
} else
|
||||
|
@ -35,6 +35,25 @@ public class Rollback implements Runnable
|
||||
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) {
|
||||
this.player = player;
|
||||
|
Reference in New Issue
Block a user