From c6293ce5167907639e67380c64e439ca68c7569d Mon Sep 17 00:00:00 2001 From: Robin Kupper Date: Thu, 9 Jun 2011 22:47:20 +0200 Subject: [PATCH] Added command to execute rollback/redo/clearlog/writelogfile/lookup commands to tools --- src/de/diddiz/LogBlock/CommandsHandler.java | 38 +++++++++++- src/de/diddiz/LogBlock/LBToolListener.java | 65 ++++++++++++--------- src/de/diddiz/LogBlock/Session.java | 6 +- src/de/diddiz/LogBlock/ToolMode.java | 15 +++++ 4 files changed, 94 insertions(+), 30 deletions(-) create mode 100644 src/de/diddiz/LogBlock/ToolMode.java diff --git a/src/de/diddiz/LogBlock/CommandsHandler.java b/src/de/diddiz/LogBlock/CommandsHandler.java index dc99f6a..72f4228 100644 --- a/src/de/diddiz/LogBlock/CommandsHandler.java +++ b/src/de/diddiz/LogBlock/CommandsHandler.java @@ -118,6 +118,23 @@ public class CommandsHandler implements CommandExecutor } else if (args[1].equalsIgnoreCase("disable") || args[1].equalsIgnoreCase("off")) { logblock.getSession(player.getName()).toolEnabled = false; player.sendMessage(ChatColor.GREEN + "Tool disabled."); + } else if (args[1].equalsIgnoreCase("mode")) { + final Session session = logblock.getSession(player.getName()); + if (args.length == 3) { + final ToolMode mode; + try { + mode = ToolMode.valueOf(args[2].toUpperCase()); + } catch (final IllegalArgumentException ex) { + sender.sendMessage(ChatColor.RED + "Can't find mode " + args[2]); + return true; + } + if (logblock.hasPermission(player, mode.getPermission())) { + session.toolMode = mode; + sender.sendMessage(ChatColor.GREEN + "Tool mode set to " + args[2]); + } else + sender.sendMessage(ChatColor.RED + "You aren't allowed to use mode " + args[2]); + } else + player.sendMessage(ChatColor.RED + "No mode specified"); } else if (logblock.hasPermission(player, "logblock.lookup")) try { final QueryParams params = new QueryParams(logblock, sender, ArgsToList(args, 1)); @@ -144,6 +161,23 @@ public class CommandsHandler implements CommandExecutor } else if (args[1].equalsIgnoreCase("disable") || args[1].equalsIgnoreCase("off")) { logblock.getSession(player.getName()).toolBlockEnabled = false; player.sendMessage(ChatColor.GREEN + "Tool block disabled."); + } else if (args[1].equalsIgnoreCase("mode")) { + final Session session = logblock.getSession(player.getName()); + if (args.length == 3) { + final ToolMode mode; + try { + mode = ToolMode.valueOf(args[2].toUpperCase()); + } catch (final IllegalArgumentException ex) { + sender.sendMessage(ChatColor.RED + "Can't find mode " + args[2]); + return true; + } + if (logblock.hasPermission(player, mode.getPermission())) { + session.toolBlockMode = mode; + sender.sendMessage(ChatColor.GREEN + "Toolblock mode set to " + args[2]); + } else + sender.sendMessage(ChatColor.RED + "You aren't allowed to use mode " + args[2]); + } else + player.sendMessage(ChatColor.RED + "No mode specified"); } else if (logblock.hasPermission(player, "logblock.lookup")) try { final QueryParams params = new QueryParams(logblock, sender, ArgsToList(args, 1)); @@ -162,7 +196,7 @@ public class CommandsHandler implements CommandExecutor if (logblock.getConsumer().hide((Player)sender)) sender.sendMessage(ChatColor.GREEN + "You are now hided and won't appear in any log. Type '/lb hide' again to unhide"); else - sender.sendMessage(ChatColor.GREEN + "You aren't hided anylonger."); + sender.sendMessage(ChatColor.GREEN + "You aren't hidden anylonger."); } else sender.sendMessage(ChatColor.RED + "You aren't allowed to do this."); } else @@ -550,7 +584,7 @@ public class CommandsHandler implements CommandExecutor } if (config.dumpDeletedLog) try { - state.execute("SELECT * FROM `" + table + "` " + join + params.getWhere() + "INTO OUTFILE '" + new File(dumpFolder, formatter.format(System.currentTimeMillis()) + " " + table + " " + params.getTitle() + ".csv").getAbsolutePath().replace("\\", "\\\\") + "' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n'"); + state.execute("SELECT * FROM `" + table + "` " + join + params.getWhere() + "INTO OUTFILE '" + new File(dumpFolder, formatter.format(System.currentTimeMillis()) + " " + table + " " + params.getTitle().replace(":", ".") + ".csv").getAbsolutePath().replace("\\", "\\\\") + "' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n'"); } catch (final SQLException ex) { sender.sendMessage(ChatColor.RED + "Error while dumping log. Make sure your MySQL user has access to the LogBlock folder, or disable clearlog.dumpDeletedLog"); log.log(Level.SEVERE, "[LogBlock ClearLog] Exception while dumping", ex); diff --git a/src/de/diddiz/LogBlock/LBToolListener.java b/src/de/diddiz/LogBlock/LBToolListener.java index af4d0f3..5db8635 100644 --- a/src/de/diddiz/LogBlock/LBToolListener.java +++ b/src/de/diddiz/LogBlock/LBToolListener.java @@ -26,32 +26,45 @@ class LBToolListener extends PlayerListener @Override public void onPlayerInteract(PlayerInteractEvent event) { if (!event.isCancelled()) { - final Player player = event.getPlayer(); - if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getMaterial().getId() == toolID && logblock.hasPermission(player, "logblock.tool") && logblock.getSession(player.getName()).toolEnabled) { - if (tables.get(player.getWorld().getName().hashCode()) != null) { - try { - final QueryParams params = logblock.getSession(player.getName()).toolQuery; - params.setLocation(event.getClickedBlock().getLocation()); - handler.new CommandLookup(player, params); - } catch (final Exception ex) { - player.sendMessage(ChatColor.RED + ex.getMessage()); - } - if (event.getClickedBlock().getTypeId() != 26) - event.setCancelled(true); - } else - player.sendMessage("This world isn't logged"); - } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getMaterial().getId() == toolblockID && logblock.hasPermission(player, "logblock.toolblock") && logblock.getSession(player.getName()).toolBlockEnabled) - if (tables.get(player.getWorld().getName().hashCode()) != null) { - try { - final QueryParams params = logblock.getSession(player.getName()).toolQuery; - params.setLocation(event.getClickedBlock().getFace(event.getBlockFace()).getLocation()); - handler.new CommandLookup(player, params); - } catch (final Exception ex) { - player.sendMessage(ChatColor.RED + ex.getMessage()); - } - event.setCancelled(true); - } else - player.sendMessage("This world isn't logged"); + final Action action = event.getAction(); + final int type = event.getMaterial().getId(); + if (type == toolID && action == Action.RIGHT_CLICK_BLOCK || type == toolblockID && (action == Action.LEFT_CLICK_BLOCK || action == Action.RIGHT_CLICK_BLOCK)) { + final Player player = event.getPlayer(); + final Session session = logblock.getSession(player.getName()); + if (type == toolID && session.toolEnabled && logblock.hasPermission(player, "logblock.tool") || type == toolblockID && session.toolBlockEnabled && logblock.hasPermission(player, "logblock.toolblock")) + if (tables.get(player.getWorld().getName().hashCode()) != null) { + if (!(type == toolID && event.getClickedBlock().getTypeId() == 26)) + event.setCancelled(true); + final QueryParams params; + ToolMode mode; + if (type == toolID) { + params = session.toolQuery; + mode = session.toolMode; + } else { + params = session.toolBlockQuery; + mode = session.toolBlockMode; + } + if (type == toolblockID && action == Action.RIGHT_CLICK_BLOCK) + params.setLocation(event.getClickedBlock().getFace(event.getBlockFace()).getLocation()); + else + params.setLocation(event.getClickedBlock().getLocation()); + try { + if (mode == ToolMode.ROLLBACK) + handler.new CommandRollback(player, params); + else if (mode == ToolMode.REDO) + handler.new CommandRedo(player, params); + else if (mode == ToolMode.CLEARLOG) + handler.new CommandClearLog(player, params); + else if (mode == ToolMode.WRITELOGFILE) + handler.new CommandWriteLogFile(player, params); + else + handler.new CommandLookup(player, params); + } catch (final Exception ex) { + player.sendMessage(ChatColor.RED + ex.getMessage()); + } + } else + player.sendMessage("This world isn't logged"); + } } } } diff --git a/src/de/diddiz/LogBlock/Session.java b/src/de/diddiz/LogBlock/Session.java index 60f5f6f..27f9884 100644 --- a/src/de/diddiz/LogBlock/Session.java +++ b/src/de/diddiz/LogBlock/Session.java @@ -3,10 +3,12 @@ package de.diddiz.LogBlock; public class Session { public QueryParams lastQuery = null; - public QueryParams toolQuery; - public QueryParams toolBlockQuery; public boolean toolEnabled = true; + public QueryParams toolQuery; + public ToolMode toolMode; public boolean toolBlockEnabled = true; + public QueryParams toolBlockQuery; + public ToolMode toolBlockMode; Session(LogBlock logblock) { toolQuery = logblock.getConfig().toolQuery.clone(); diff --git a/src/de/diddiz/LogBlock/ToolMode.java b/src/de/diddiz/LogBlock/ToolMode.java new file mode 100644 index 0000000..e928e57 --- /dev/null +++ b/src/de/diddiz/LogBlock/ToolMode.java @@ -0,0 +1,15 @@ +package de.diddiz.LogBlock; + +public enum ToolMode { + CLEARLOG("logblock.clearlog"), LOOKUP("logblock.lookup"), REDO("logblock.rollback"), ROLLBACK("logblock.rollback"), WRITELOGFILE("logblock.rollback"); + + private final String permission; + + private ToolMode(String permission) { + this.permission = permission; + } + + public String getPermission() { + return permission; + } +}