From 1d7092ab83cb0ed5d1e0c07dc3c7675684738eee Mon Sep 17 00:00:00 2001 From: bootswithdefer Date: Fri, 29 Oct 2010 18:25:07 -0700 Subject: [PATCH] column killer, logblock, jdbcpool --- LogBlock.jar | Bin 0 -> 20687 bytes LogBlock.java | 244 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 244 insertions(+) create mode 100755 LogBlock.jar create mode 100755 LogBlock.java diff --git a/LogBlock.jar b/LogBlock.jar new file mode 100755 index 0000000000000000000000000000000000000000..2be6d29d17aa665d965b79adf7f5211d09b60cd3 GIT binary patch literal 20687 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 bqueue = new LinkedBlockingQueue(); + + static final Logger log = Logger.getLogger("Minecraft"); + + public void enable() + { + PropertiesFile properties = new PropertiesFile("logblock.properties"); + try { + dbDriver = properties.getString("driver", "com.mysql.jdbc.Driver"); + dbUrl = properties.getString("url", "jdbc:mysql://localhost:3306/db"); + dbUsername = properties.getString("username", "user"); + dbPassword = properties.getString("password", "pass"); + delay = properties.getInt("delay", 10); + toolID = properties.getInt("tool-id", 270); + } catch (Exception ex) { + log.log(Level.SEVERE, "Exception while reading from logblock.properties", ex); + } + + try { + new JDCConnectionDriver(dbDriver, dbUrl, dbUsername, dbPassword); + } catch (Exception ex) { + log.log(Level.SEVERE, "Exception while creation database connection pool", ex); + return; + } + + consumer = new Consumer(); + new Thread(consumer).start(); + log.info(name + " v" + version + " Plugin Enabled."); + } + + public void disable() + { + consumer.stop(); + consumer = null; + log.info(name + " v" + version + " Plugin Disabled."); + } + + public void initialize() + { + LBListener listener = new LBListener(); + etc.getLoader().addListener(PluginLoader.Hook.COMMAND, listener, this, PluginListener.Priority.LOW); + etc.getLoader().addListener(PluginLoader.Hook.BLOCK_CREATED, listener, this, PluginListener.Priority.LOW); + etc.getLoader().addListener(PluginLoader.Hook.BLOCK_DESTROYED, listener, this, PluginListener.Priority.LOW); + } + + private Connection getConnection() throws SQLException + { + return DriverManager.getConnection("jdbc:jdc:jdcpool"); + } + + private void queueBlock(Player player, String type, Block b) + { + if (b.getType() == 0) + return; + BlockRow row = new BlockRow(player.getName(), type, b.getType(), b.getX(), b.getY(), b.getZ()); + boolean result = bqueue.offer(row); + if (!result) + log.info(name + " failed to queue block for " + player.getName()); + } + + private void showBlockHistory(Player player, Block b) + { + player.sendMessage(Colors.Blue + "Block history (" + b.getX() + ", " + b.getY() + ", " + b.getZ() + "): "); + boolean hist = false; + Connection conn = null; + PreparedStatement ps = null; + ResultSet rs = null; + try { + conn = getConnection(); + conn.setAutoCommit(false); + ps = conn.prepareStatement("SELECT * from blocks where x = ? and y = ? and z = ? order by date desc limit 10", Statement.RETURN_GENERATED_KEYS); + ps.setInt(1, b.getX()); + ps.setInt(2, b.getY()); + ps.setInt(3, b.getZ()); + rs = ps.executeQuery(); + while (rs.next()) + { + String msg = rs.getString("date") + " " + rs.getString("player") + " " + rs.getString("action") + " " + etc.getDataSource().getItem(rs.getInt("type")); + player.sendMessage(Colors.Blue + msg); + hist = true; + } + } catch (SQLException ex) { + log.log(Level.SEVERE, name + " SQL exception", ex); + } finally { + try { + rs.close(); + ps.close(); + conn.close(); + } catch (SQLException ex) { + log.log(Level.SEVERE, name + " SQL exception on close", ex); + } + } + if (!hist) + player.sendMessage(Colors.Blue + "None."); + } + + public class LBListener extends PluginListener // start + { + public boolean onCommand(Player player, String[] split) + { + if (!player.canUseCommand(split[0])) + return false; + + if (split[0].equalsIgnoreCase("/lb")) { + + return true; + } + return false; + } + + public boolean onBlockCreate(Player player, Block blockPlaced, Block blockClicked, int itemInHand) + { + if (itemInHand == toolID && player.canUseCommand("/blockhistory")) + { + showBlockHistory(player, blockClicked); + return true; + } + + Block before = new Block(etc.getServer().getBlockIdAt(blockPlaced.getX(), blockPlaced.getY(), blockPlaced.getZ()), blockPlaced.getX(), blockPlaced.getY(), blockPlaced.getZ()); + + if (before.getType() == blockPlaced.getType()) + return false; + + queueBlock(player, "create", blockPlaced); + queueBlock(player, "destroy", before); + return false; + } + + public boolean onBlockDestroy(Player player, Block blockAt) + { + Block after = new Block(etc.getServer().getBlockIdAt(blockAt.getX(), blockAt.getY(), blockAt.getZ()), blockAt.getX(), blockAt.getY(), blockAt.getZ()); + + if (after.getType() == blockAt.getType()) + return false; + + queueBlock(player, "destroy", blockAt); + queueBlock(player, "create", after); + return false; + } + } // end LBListener + + private class Consumer implements Runnable // start + { + private boolean stop = false; + Consumer() { stop = false; } + public void stop() { stop = true; } + public void run() + { + PreparedStatement ps = null; + Connection conn = null; + BlockRow b; + + while (!stop) + { + long start = System.currentTimeMillis(); + int count = 0; + + if (bqueue.size() > 100) + log.info(name + " queue size " + bqueue.size()); + + try { + conn = getConnection(); + conn.setAutoCommit(false); + ps = conn.prepareStatement("INSERT INTO blocks (date, player, action, type, x, y, z) VALUES (now(),?,?,?,?,?,?)", Statement.RETURN_GENERATED_KEYS); + + while (count < 100 && start+delay > (System.currentTimeMillis()/1000F)) + { + b = bqueue.poll(1L, TimeUnit.SECONDS); + if (b == null) + continue; + //b.log(); + ps.setString(1, b.name); + ps.setString(2, b.action); + ps.setInt(3, b.type); + ps.setInt(4, b.x); + ps.setInt(5, b.y); + ps.setInt(6, b.z); + ps.executeUpdate(); + count++; + } + + conn.commit(); + } catch (InterruptedException ex) { + log.log(Level.SEVERE, name + " interrupted exception", ex); + } catch (SQLException ex) { + log.log(Level.SEVERE, name + " SQL exception", ex); + } finally { + try { + ps.close(); + conn.close(); + } catch (SQLException ex) { + log.log(Level.SEVERE, name + " SQL exception on close", ex); + } + } + } + } + } // end LBDB + + private class BlockRow // start + { + public String name; + public String action; + public int type; + public int x, y, z; + + BlockRow(String name, String action, int type, int x, int y, int z) + { + this.name = name; + this.action = action; + this.type = type; + this.x = x; + this.y = y; + this.z = z; + } + + public void log() + { + log.info("name: " + name + " action: " + action + " type: " + type + " x: " + x + " y: " + y + " z: " + z); + } + } // end MyRow +} // end LogBlock