From 74d662b00c627a1ae41efa0c45889044af694969 Mon Sep 17 00:00:00 2001 From: Robin Kupper Date: Sat, 16 Apr 2011 17:53:18 +0200 Subject: [PATCH] Removed static and public fields. --- src/de/diddiz/LogBlock/AreaBlockSearch.java | 35 ++++++---- src/de/diddiz/LogBlock/AreaStats.java | 29 +++++--- src/de/diddiz/LogBlock/BlockStats.java | 35 +++++----- src/de/diddiz/LogBlock/ClearLog.java | 39 ++++++----- src/de/diddiz/LogBlock/Config.java | 46 ++++++------- src/de/diddiz/LogBlock/Consumer.java | 26 ++++--- src/de/diddiz/LogBlock/LBBlockListener.java | 18 ++--- src/de/diddiz/LogBlock/LBEntityListener.java | 14 ++-- src/de/diddiz/LogBlock/LBPlayerListener.java | 21 +++--- .../diddiz/LogBlock/LBToolPlayerListener.java | 6 +- src/de/diddiz/LogBlock/LogBlock.java | 68 +++++++++++-------- src/de/diddiz/LogBlock/PlayerAreaStats.java | 31 ++++++--- src/de/diddiz/LogBlock/Rollback.java | 59 +++++++++------- src/de/diddiz/LogBlock/WriteLogFile.java | 33 ++++++--- src/de/diddiz/util/ConnectionPool.java | 12 ---- 15 files changed, 274 insertions(+), 198 deletions(-) diff --git a/src/de/diddiz/LogBlock/AreaBlockSearch.java b/src/de/diddiz/LogBlock/AreaBlockSearch.java index 850da8f..d972eba 100644 --- a/src/de/diddiz/LogBlock/AreaBlockSearch.java +++ b/src/de/diddiz/LogBlock/AreaBlockSearch.java @@ -6,6 +6,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.logging.Level; +import java.util.logging.Logger; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -14,20 +15,22 @@ import org.bukkit.entity.Player; public class AreaBlockSearch implements Runnable { - private Player player; - private Location location; - private int type; - private int size; - private Connection conn = null; - private String table; + private final Logger log; + private final Player player; + private final Location location; + private final int type; + private final int size; + private final Connection conn; + private final String table; - AreaBlockSearch(Connection conn, Player player, int type, int size, String table) { + AreaBlockSearch(LogBlock logblock, Player player, int type, int size) { this.player = player; this.location = player.getLocation(); this.type = type; this.size = size; - this.conn = conn; - this.table = table; + log = logblock.getServer().getLogger(); + conn = logblock.getConnection(); + table = logblock.getConfig().tables.get(player.getWorld().getName().hashCode()); } public void run() { @@ -36,8 +39,16 @@ public class AreaBlockSearch implements Runnable ResultSet rs = null; SimpleDateFormat formatter = new SimpleDateFormat("MM-dd HH:mm:ss"); try { + if (conn == null) { + player.sendMessage(ChatColor.RED + "Failed to create database connection"); + return; + } + if (table == null) { + player.sendMessage(ChatColor.RED + "This world isn't logged"); + return; + } conn.setAutoCommit(false); - ps = conn.prepareStatement("SELECT * FROM `" + table + "` INNER JOIN `lb-players` USING (`playerid`) WHERE (type = ? or replaced = ?) and y > ? and y < ? and x > ? and x < ? and z > ? and z < ? order by date desc limit 10"); + ps = conn.prepareStatement("SELECT * FROM `" + table + "` INNER JOIN `lb-players` USING (playerid) WHERE (type = ? or replaced = ?) and y > ? and y < ? and x > ? and x < ? and z > ? and z < ? order by date desc limit 10"); ps.setInt(1, type); ps.setInt(2, type); ps.setInt(3, location.getBlockY() - size); @@ -62,7 +73,7 @@ public class AreaBlockSearch implements Runnable if (!hist) player.sendMessage(ChatColor.DARK_AQUA + "None."); } catch (SQLException ex) { - LogBlock.log.log(Level.SEVERE, "[LogBlock AreaBlockSearch] SQL exception", ex); + log.log(Level.SEVERE, "[LogBlock AreaBlockSearch] SQL exception", ex); } finally { try { if (rs != null) @@ -72,7 +83,7 @@ public class AreaBlockSearch implements Runnable if (conn != null) conn.close(); } catch (SQLException ex) { - LogBlock.log.log(Level.SEVERE, "[LogBlock AreaBlockSearch] SQL exception on close", ex); + log.log(Level.SEVERE, "[LogBlock AreaBlockSearch] SQL exception on close", ex); } } } diff --git a/src/de/diddiz/LogBlock/AreaStats.java b/src/de/diddiz/LogBlock/AreaStats.java index 05f7918..fc63fd4 100644 --- a/src/de/diddiz/LogBlock/AreaStats.java +++ b/src/de/diddiz/LogBlock/AreaStats.java @@ -5,28 +5,39 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.logging.Level; +import java.util.logging.Logger; import org.bukkit.ChatColor; import org.bukkit.entity.Player; public class AreaStats implements Runnable { - private Player player; - private int size; - private Connection conn = null; - private String table; + private final Logger log; + private final Player player; + private final int size; + private final Connection conn; + private final String table; - AreaStats(Connection conn, Player player, int size, String table) { + AreaStats(LogBlock logblock, Player player, int size) { this.player = player; this.size = size; - this.conn = conn; - this.table = table; + log = logblock.getServer().getLogger(); + conn = logblock.getConnection(); + table = logblock.getConfig().tables.get(player.getWorld().getName().hashCode()); } public void run() { PreparedStatement ps = null; ResultSet rs = null; try { + if (conn == null) { + player.sendMessage(ChatColor.RED + "Failed to create database connection"); + return; + } + if (table == null) { + player.sendMessage(ChatColor.RED + "This world isn't logged"); + return; + } conn.setAutoCommit(false); ps = conn.prepareStatement("SELECT `playername`, SUM(`created`) AS `created`, SUM(`destroyed`) AS `destroyed` FROM ((SELECT `playerid`, count(`type`) AS `created`, 0 AS `destroyed` FROM `" + table + "` WHERE `type` > 0 AND x > ? AND x < ? AND z > ? AND z < ? AND `type` != `replaced` GROUP BY `playerid`) UNION (SELECT `playerid`, 0 AS `created`, count(`replaced`) AS `destroyed` FROM `" + table + "` WHERE `replaced` > 0 AND x > ? AND x < ? AND z > ? AND z < ? AND `type` != `replaced` GROUP BY `playerid`)) AS t INNER JOIN `lb-players` USING (`playerid`) GROUP BY `playerid` ORDER BY SUM(`created`) + SUM(`destroyed`) DESC LIMIT 15"); ps.setInt(1, player.getLocation().getBlockX()-size); @@ -49,7 +60,7 @@ public class AreaStats implements Runnable } } } catch (SQLException ex) { - LogBlock.log.log(Level.SEVERE, "[LogBlock AreaStats] SQL exception", ex); + log.log(Level.SEVERE, "[LogBlock AreaStats] SQL exception", ex); } finally { try { if (rs != null) @@ -59,7 +70,7 @@ public class AreaStats implements Runnable if (conn != null) conn.close(); } catch (SQLException ex) { - LogBlock.log.log(Level.SEVERE, "[LogBlock AreaStats] SQL exception on close", ex); + log.log(Level.SEVERE, "[LogBlock AreaStats] SQL exception on close", ex); } } } diff --git a/src/de/diddiz/LogBlock/BlockStats.java b/src/de/diddiz/LogBlock/BlockStats.java index 43f1373..711e2c1 100644 --- a/src/de/diddiz/LogBlock/BlockStats.java +++ b/src/de/diddiz/LogBlock/BlockStats.java @@ -6,6 +6,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.logging.Level; +import java.util.logging.Logger; import org.bukkit.ChatColor; import org.bukkit.Material; @@ -14,33 +15,35 @@ import org.bukkit.entity.Player; public class BlockStats implements Runnable { - private final LogBlock logblock; - private Player player; - private Block block; + private final Logger log; + private final Connection conn; + private final String table; + private final Player player; + private final Block block; BlockStats(LogBlock logblock, Player player, Block block) { - this.logblock = logblock; + log = logblock.getServer().getLogger(); + conn = logblock.getConnection(); + table = logblock.getConfig().tables.get(player.getWorld().getName().hashCode()); this.player = player; this.block = block; } @Override public void run() { - Connection conn = logblock.pool.getConnection(); - if (conn == null) { - player.sendMessage(ChatColor.RED + "Failed to create database connection"); - return; - } - String table = logblock.config.tables.get(block.getWorld().getName().hashCode()); - if (table == null) { - player.sendMessage(ChatColor.RED + "This world isn't logged"); - return; - } boolean hist = false; PreparedStatement ps = null; ResultSet rs = null; SimpleDateFormat formatter = new SimpleDateFormat("MM-dd HH:mm:ss"); try { + if (conn == null) { + player.sendMessage(ChatColor.RED + "Failed to create database connection"); + return; + } + if (table == null) { + player.sendMessage(ChatColor.RED + "This world isn't logged"); + return; + } conn.setAutoCommit(false); ps = conn.prepareStatement("SELECT date, replaced, type, signtext, playername FROM `" + table + "` LEFT JOIN `" + table + "-sign` USING (id) INNER JOIN `lb-players` USING (playerid) WHERE x = ? AND y = ? AND z = ? ORDER BY date DESC LIMIT 15"); ps.setInt(1, block.getX()); @@ -69,7 +72,7 @@ public class BlockStats implements Runnable if (!hist) player.sendMessage(ChatColor.DARK_AQUA + "None."); } catch (SQLException ex) { - LogBlock.log.log(Level.SEVERE, "[LogBlock BlockStats] SQL exception", ex); + log.log(Level.SEVERE, "[LogBlock BlockStats] SQL exception", ex); } finally { try { if (rs != null) @@ -79,7 +82,7 @@ public class BlockStats implements Runnable if (conn != null) conn.close(); } catch (SQLException ex) { - LogBlock.log.log(Level.SEVERE, "[LogBlock BlockStats] SQL exception on close", ex); + log.log(Level.SEVERE, "[LogBlock BlockStats] SQL exception on close", ex); } } } diff --git a/src/de/diddiz/LogBlock/ClearLog.java b/src/de/diddiz/LogBlock/ClearLog.java index e3f4ca6..d7191d2 100644 --- a/src/de/diddiz/LogBlock/ClearLog.java +++ b/src/de/diddiz/LogBlock/ClearLog.java @@ -7,58 +7,63 @@ import java.sql.SQLException; import java.sql.Statement; import java.text.SimpleDateFormat; import java.util.logging.Level; +import java.util.logging.Logger; public class ClearLog implements Runnable { - private final LogBlock logblock; + private final Logger log; + private final Config config; + private final Connection conn; + private final File dumpFolder; public ClearLog(LogBlock logblock) { - this.logblock = logblock; + log = logblock.getServer().getLogger(); + config = logblock.getConfig(); + conn = logblock.getConnection(); + dumpFolder = new File(logblock.getDataFolder(), "dumb"); } @Override public void run() { - File dumpFolder = new File(logblock.getDataFolder(), "dumb"); - dumpFolder.mkdirs(); - Connection conn = logblock.pool.getConnection(); - if (conn == null) - return; Statement state = null; try { + if (conn == null) + return; + dumpFolder.mkdirs(); state = conn.createStatement(); - String time = new SimpleDateFormat("yy-MM-dd-HH-mm-ss").format(System.currentTimeMillis() - logblock.config.keepLogDays*86400000L); + String time = new SimpleDateFormat("yy-MM-dd-HH-mm-ss").format(System.currentTimeMillis() - config.keepLogDays*86400000L); ResultSet rs; - for (String table : logblock.config.tables.values()) { + for (String table : config.tables.values()) { rs = state.executeQuery("SELECT count(*) FROM `" + table + "` WHERE date < '" + time + "'"); rs.next(); int deleted = rs.getInt(1); if (deleted > 0) { - if (logblock.config.dumpDeletedLog) + if (config.dumpDeletedLog) state.execute("SELECT * FROM `" + table + "` WHERE date < '" + time + "' INTO OUTFILE '" + new File(dumpFolder, table + "-" + time + ".csv").getAbsolutePath().replace("\\", "\\\\") + "' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n'"); state.execute("DELETE FROM `" + table + "` WHERE date < '" + time + "'"); - LogBlock.log.info("[LogBlock] Cleared out table " + table + ". Deleted " + deleted + " entries."); + log.info("[LogBlock] Cleared out table " + table + ". Deleted " + deleted + " entries."); } rs = state.executeQuery("SELECT COUNT(*) FROM `" + table + "-sign` LEFT JOIN `" + table + "` USING (id) WHERE `" + table + "`.id IS NULL"); rs.next(); deleted = rs.getInt(1); if (deleted > 0) { - if (logblock.config.dumpDeletedLog) + if (config.dumpDeletedLog) state.execute("SELECT id, signtext FROM `" + table + "-sign` LEFT JOIN `" + table + "` USING (id) WHERE `" + table + "`.id IS NULL INTO OUTFILE '" + new File(dumpFolder, table + "-sign-" + time + ".csv").getAbsolutePath().replace("\\", "\\\\") + "' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n'"); state.execute("DELETE `" + table + "-sign` FROM `" + table + "-sign` LEFT JOIN `" + table + "` USING (id) WHERE `" + table + "`.id IS NULL;"); - LogBlock.log.info("[LogBlock] Cleared out table " + table + "-sign. Deleted " + deleted + " entries."); + log.info("[LogBlock] Cleared out table " + table + "-sign. Deleted " + deleted + " entries."); } rs = state.executeQuery("SELECT COUNT(*) FROM `" + table + "-chest` LEFT JOIN `" + table + "` USING (id) WHERE `" + table + "`.id IS NULL"); rs.next(); deleted = rs.getInt(1); if (deleted > 0) { - if (logblock.config.dumpDeletedLog) + if (config.dumpDeletedLog) state.execute("SELECT id, intype, inamount, outtype, outamount FROM `" + table + "-chest` LEFT JOIN `" + table + "` USING (id) WHERE `" + table + "`.id IS NULL INTO OUTFILE '" + new File(dumpFolder, table + "-chest-" + time + ".csv").getAbsolutePath().replace("\\", "\\\\") + "' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n'"); state.execute("DELETE `" + table + "-chest` FROM `" + table + "-chest` LEFT JOIN `" + table + "` USING (id) WHERE `" + table + "`.id IS NULL;"); - LogBlock.log.info("[LogBlock] Cleared out table " + table + "-chest. Deleted " + deleted + " entries."); + log.info("[LogBlock] Cleared out table " + table + "-chest. Deleted " + deleted + " entries."); } } } catch (SQLException ex) { - LogBlock.log.log(Level.SEVERE, "[LogBlock] SQL exception", ex); + log.log(Level.SEVERE, "[LogBlock] SQL exception", ex); } finally { try { if (state != null) @@ -66,7 +71,7 @@ public class ClearLog implements Runnable if (conn != null) conn.close(); } catch (SQLException ex) { - LogBlock.log.log(Level.SEVERE, "[LogBlock] SQL exception on close", ex); + log.log(Level.SEVERE, "[LogBlock] SQL exception on close", ex); } } } diff --git a/src/de/diddiz/LogBlock/Config.java b/src/de/diddiz/LogBlock/Config.java index 7c1ee15..54655d5 100644 --- a/src/de/diddiz/LogBlock/Config.java +++ b/src/de/diddiz/LogBlock/Config.java @@ -9,29 +9,29 @@ import org.bukkit.Material; import org.bukkit.util.config.Configuration; public class Config { - final HashMap tables; - final String url; - final String user; - final String password; - final int delay; - final boolean useBukkitScheduler; - final int keepLogDays; - final boolean dumpDeletedLog; - final boolean logBlockCreations; - final boolean logBlockDestroyings; - final boolean logSignTexts; - final boolean logExplosions; - final boolean logFire; - final boolean logLeavesDecay; - final boolean logChestAccess; - final boolean logKills; - final LogKillsLevel logKillsLevel; - final List dontRollback; - final List replaceAnyway; - final int defaultDist; - final int defaultTime; - final int toolID; - final int toolblockID; + public final HashMap tables; + public final String url; + public final String user; + public final String password; + public final int delay; + public final boolean useBukkitScheduler; + public final int keepLogDays; + public final boolean dumpDeletedLog; + public final boolean logBlockCreations; + public final boolean logBlockDestroyings; + public final boolean logSignTexts; + public final boolean logExplosions; + public final boolean logFire; + public final boolean logLeavesDecay; + public final boolean logChestAccess; + public final boolean logKills; + public final LogKillsLevel logKillsLevel; + public final List dontRollback; + public final List replaceAnyway; + public final int defaultDist; + public final int defaultTime; + public final int toolID; + public final int toolblockID; enum LogKillsLevel { PLAYERS, MONSTERS, ANIMALS diff --git a/src/de/diddiz/LogBlock/Consumer.java b/src/de/diddiz/LogBlock/Consumer.java index cac1067..f3085df 100644 --- a/src/de/diddiz/LogBlock/Consumer.java +++ b/src/de/diddiz/LogBlock/Consumer.java @@ -9,6 +9,7 @@ import java.util.HashSet; import java.util.TimerTask; import java.util.concurrent.LinkedBlockingQueue; import java.util.logging.Level; +import java.util.logging.Logger; import org.bukkit.block.Block; import org.bukkit.entity.Entity; @@ -17,15 +18,20 @@ import org.bukkit.entity.TNTPrimed; public class Consumer extends TimerTask implements Runnable { + private final LogBlock logblock; + private final Logger log; + private final Config config; private LinkedBlockingQueue bqueue = new LinkedBlockingQueue(); private LinkedBlockingQueue kqueue = new LinkedBlockingQueue(); private HashSet hiddenplayers = new HashSet(); private HashMap lastAttackedEntity = new HashMap(); private HashMap lastAttackTime = new HashMap(); - private LogBlock logblock; + Consumer (LogBlock logblock) { this.logblock = logblock; + log = logblock.getServer().getLogger(); + config = logblock.getConfig(); } public void queueBlock(Player player, Block block, int typeAfter) { @@ -45,7 +51,7 @@ public class Consumer extends TimerTask implements Runnable return; if (hiddenplayers.contains(playerName.hashCode())) return; - String table = logblock.config.tables.get(block.getWorld().getName().hashCode()); + String table = config.tables.get(block.getWorld().getName().hashCode()); if (table == null) return; if (playerName.length() > 32) @@ -56,13 +62,13 @@ public class Consumer extends TimerTask implements Runnable if (ca != null) row.ca = ca; if (!bqueue.offer(row)) - LogBlock.log.info("[LogBlock] Failed to queue block for " + playerName); + log.info("[LogBlock] Failed to queue block for " + playerName); } public void queueKill(Entity attacker, Entity defender) { if (lastAttackedEntity.containsKey(attacker.getEntityId()) && lastAttackedEntity.get(attacker.getEntityId()) == defender.getEntityId() && System.currentTimeMillis() - lastAttackTime.get(attacker.getEntityId()) < 3000) return; - String table = logblock.config.tables.get(defender.getWorld().getName().hashCode()); + String table = config.tables.get(defender.getWorld().getName().hashCode()); if (table == null) return; int weapon = 0; @@ -93,14 +99,14 @@ public class Consumer extends TimerTask implements Runnable } public synchronized void run() { - Connection conn = logblock.pool.getConnection(); + Connection conn = logblock.getConnection(); if (conn == null) return; Statement state = null; BlockRow b; KillRow k; int count = 0; if (bqueue.size() > 100) - LogBlock.log.info("[LogBlock Consumer] Queue overloaded. Size: " + bqueue.size()); + log.info("[LogBlock Consumer] Queue overloaded. Size: " + bqueue.size()); try { conn.setAutoCommit(false); state = conn.createStatement(); @@ -115,13 +121,13 @@ public class Consumer extends TimerTask implements Runnable if (keys.next()) state.execute("INSERT INTO `" + b.table + "-sign` (id, signtext) values (" + keys.getInt(1) + ", '" + b.signtext + "')"); else - LogBlock.log.severe("[LogBlock Consumer] Failed to get generated keys"); + log.severe("[LogBlock Consumer] Failed to get generated keys"); } else if (b.ca != null) { ResultSet keys = state.getGeneratedKeys(); if (keys.next()) state.execute("INSERT INTO `" + b.table + "-chest` (id, intype, inamount, outtype, outamount) values (" + keys.getInt(1) + ", " + b.ca.inType + ", " + b.ca.inAmount + ", " + b.ca.outType + ", " + b.ca.outAmount + ")"); else - LogBlock.log.severe("[LogBlock Consumer] Failed to get generated keys"); + log.severe("[LogBlock Consumer] Failed to get generated keys"); } count++; } @@ -134,7 +140,7 @@ public class Consumer extends TimerTask implements Runnable } conn.commit(); } catch (SQLException ex) { - LogBlock.log.log(Level.SEVERE, "[LogBlock Consumer] SQL exception", ex); + log.log(Level.SEVERE, "[LogBlock Consumer] SQL exception", ex); } finally { try { if (conn != null) @@ -142,7 +148,7 @@ public class Consumer extends TimerTask implements Runnable if (state != null) state.close(); } catch (SQLException ex) { - LogBlock.log.log(Level.SEVERE, "[LogBlock Consumer] SQL exception on close", ex); + log.log(Level.SEVERE, "[LogBlock Consumer] SQL exception on close", ex); } } } diff --git a/src/de/diddiz/LogBlock/LBBlockListener.java b/src/de/diddiz/LogBlock/LBBlockListener.java index 6a235aa..eb82e63 100644 --- a/src/de/diddiz/LogBlock/LBBlockListener.java +++ b/src/de/diddiz/LogBlock/LBBlockListener.java @@ -10,35 +10,37 @@ import org.bukkit.event.block.SignChangeEvent; public class LBBlockListener extends BlockListener { - private final LogBlock logblock; + private final Config config; + private final Consumer consumer; LBBlockListener(LogBlock logblock) { - this.logblock = logblock; + config = logblock.getConfig(); + consumer = logblock.getConsumer(); } public void onBlockPlace(BlockPlaceEvent event) { - if (!event.isCancelled() && !(logblock.config.logSignTexts && (event.getBlock().getType() == Material.WALL_SIGN || event.getBlock().getType() == Material.SIGN_POST))) { - logblock.consumer.queueBlock(event.getPlayer().getName(), event.getBlockPlaced(), event.getBlockReplacedState().getTypeId(), event.getBlockPlaced().getTypeId(), event.getBlockPlaced().getData()); + if (!event.isCancelled() && !(config.logSignTexts && (event.getBlock().getType() == Material.WALL_SIGN || event.getBlock().getType() == Material.SIGN_POST))) { + consumer.queueBlock(event.getPlayer().getName(), event.getBlockPlaced(), event.getBlockReplacedState().getTypeId(), event.getBlockPlaced().getTypeId(), event.getBlockPlaced().getData()); } } public void onBlockBreak(BlockBreakEvent event) { if (!event.isCancelled()) - logblock.consumer.queueBlock(event.getPlayer().getName(), event.getBlock(), event.getBlock().getTypeId(), 0, event.getBlock().getData()); + consumer.queueBlock(event.getPlayer().getName(), event.getBlock(), event.getBlock().getTypeId(), 0, event.getBlock().getData()); } public void onSignChange(SignChangeEvent event) { if (!event.isCancelled()) - logblock.consumer.queueBlock(event.getPlayer().getName(), event.getBlock(), 0, event.getBlock().getTypeId(), event.getBlock().getData(), "sign [" + event.getLine(0) + "] [" + event.getLine(1) + "] [" + event.getLine(2) + "] [" + event.getLine(3) + "]", null); + consumer.queueBlock(event.getPlayer().getName(), event.getBlock(), 0, event.getBlock().getTypeId(), event.getBlock().getData(), "sign [" + event.getLine(0) + "] [" + event.getLine(1) + "] [" + event.getLine(2) + "] [" + event.getLine(3) + "]", null); } public void onBlockBurn(BlockBurnEvent event) { if (!event.isCancelled()) - logblock.consumer.queueBlock("Fire", event.getBlock(), event.getBlock().getTypeId(), 0, event.getBlock().getData()); + consumer.queueBlock("Fire", event.getBlock(), event.getBlock().getTypeId(), 0, event.getBlock().getData()); } public void onLeavesDecay(LeavesDecayEvent event) { if (!event.isCancelled()) - logblock.consumer.queueBlock("LeavesDecay", event.getBlock(), event.getBlock().getTypeId(), 0, event.getBlock().getData()); + consumer.queueBlock("LeavesDecay", event.getBlock(), event.getBlock().getTypeId(), 0, event.getBlock().getData()); } } diff --git a/src/de/diddiz/LogBlock/LBEntityListener.java b/src/de/diddiz/LogBlock/LBEntityListener.java index 06b1176..65e86f3 100644 --- a/src/de/diddiz/LogBlock/LBEntityListener.java +++ b/src/de/diddiz/LogBlock/LBEntityListener.java @@ -15,10 +15,12 @@ import org.bukkit.event.entity.EntityListener; public class LBEntityListener extends EntityListener { - private final LogBlock logblock; + private final Config config; + private final Consumer consumer; LBEntityListener(LogBlock logblock) { - this.logblock = logblock; + config= logblock.getConfig(); + consumer = logblock.getConsumer(); } public void onEntityExplode(EntityExplodeEvent event) { @@ -33,7 +35,7 @@ public class LBEntityListener extends EntityListener else name = "Environment"; for (Block block : event.blockList()) - logblock.consumer.queueBlock(name, block, block.getTypeId(), 0, block.getData()); + consumer.queueBlock(name, block, block.getTypeId(), 0, block.getData()); } } @@ -44,10 +46,10 @@ public class LBEntityListener extends EntityListener Entity killer = ((EntityDamageByEntityEvent)event).getDamager(); if (victim.getHealth() - event.getDamage() > 0 || victim.getHealth() <= 0 ) return; - if (logblock.config.logKillsLevel == Config.LogKillsLevel.PLAYERS && !(victim instanceof Player && killer instanceof Player)) + if (config.logKillsLevel == Config.LogKillsLevel.PLAYERS && !(victim instanceof Player && killer instanceof Player)) return; - else if (logblock.config.logKillsLevel == Config.LogKillsLevel.MONSTERS && !((victim instanceof Player || victim instanceof Monster) && killer instanceof Player || killer instanceof Monster)) + else if (config.logKillsLevel == Config.LogKillsLevel.MONSTERS && !((victim instanceof Player || victim instanceof Monster) && killer instanceof Player || killer instanceof Monster)) return; - logblock.consumer.queueKill(killer, victim); + consumer.queueKill(killer, victim); } } diff --git a/src/de/diddiz/LogBlock/LBPlayerListener.java b/src/de/diddiz/LogBlock/LBPlayerListener.java index 5f6960a..5f6aebb 100644 --- a/src/de/diddiz/LogBlock/LBPlayerListener.java +++ b/src/de/diddiz/LogBlock/LBPlayerListener.java @@ -4,6 +4,7 @@ import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.util.logging.Level; +import java.util.logging.Logger; import org.bukkit.Material; import org.bukkit.event.block.Action; @@ -15,43 +16,47 @@ import org.bukkit.event.player.PlayerListener; public class LBPlayerListener extends PlayerListener { + private final Logger log; private final LogBlock logblock; + private final Consumer consumer; LBPlayerListener(LogBlock logblock) { this.logblock = logblock; + log = logblock.getServer().getLogger(); + consumer = logblock.getConsumer(); } public void onPlayerInteract(PlayerInteractEvent event) { if (!event.isCancelled()) { if (event.getAction() == Action.RIGHT_CLICK_BLOCK && (event.getClickedBlock().getType() == Material.CHEST || event.getClickedBlock().getType() == Material.FURNACE ||event.getClickedBlock().getType() == Material.DISPENSER)) { - logblock.consumer.queueBlock(event.getPlayer(), event.getClickedBlock(), (short)0, (byte)0, (short)0, (byte)0); + consumer.queueBlock(event.getPlayer(), event.getClickedBlock(), (short)0, (byte)0, (short)0, (byte)0); } } } public void onPlayerBucketFill(PlayerBucketFillEvent event) { if (!event.isCancelled()) { - logblock.consumer.queueBlock(event.getPlayer().getName(), event.getBlockClicked(), event.getBlockClicked().getTypeId(), 0, event.getBlockClicked().getData()); + consumer.queueBlock(event.getPlayer().getName(), event.getBlockClicked(), event.getBlockClicked().getTypeId(), 0, event.getBlockClicked().getData()); } } public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { if (event.getBucket() == Material.WATER_BUCKET) - logblock.consumer.queueBlock(event.getPlayer(), event.getBlockClicked().getFace(event.getBlockFace()), Material.STATIONARY_WATER.getId()); + consumer.queueBlock(event.getPlayer(), event.getBlockClicked().getFace(event.getBlockFace()), Material.STATIONARY_WATER.getId()); else if (event.getBucket() == Material.LAVA_BUCKET) - logblock.consumer.queueBlock(event.getPlayer(), event.getBlockClicked().getFace(event.getBlockFace()), Material.STATIONARY_LAVA.getId()); + consumer.queueBlock(event.getPlayer(), event.getBlockClicked().getFace(event.getBlockFace()), Material.STATIONARY_LAVA.getId()); } public void onPlayerJoin(PlayerJoinEvent event) { - Connection conn = logblock.pool.getConnection(); - Statement state = null; + Connection conn = logblock.getConnection(); if (conn == null) return; + Statement state = null; try { state = conn.createStatement(); state.execute("INSERT IGNORE INTO `lb-players` (playername) VALUES ('" + event.getPlayer().getName() + "');"); } catch (SQLException ex) { - LogBlock.log.log(Level.SEVERE, "[LogBlock] SQL exception", ex); + log.log(Level.SEVERE, "[LogBlock] SQL exception", ex); } finally { try { if (state != null) @@ -59,7 +64,7 @@ public class LBPlayerListener extends PlayerListener if (conn != null) conn.close(); } catch (SQLException ex) { - LogBlock.log.log(Level.SEVERE, "[LogBlock] SQL exception on close", ex); + log.log(Level.SEVERE, "[LogBlock] SQL exception on close", ex); } } } diff --git a/src/de/diddiz/LogBlock/LBToolPlayerListener.java b/src/de/diddiz/LogBlock/LBToolPlayerListener.java index 4a4a6bc..b953776 100644 --- a/src/de/diddiz/LogBlock/LBToolPlayerListener.java +++ b/src/de/diddiz/LogBlock/LBToolPlayerListener.java @@ -8,18 +8,20 @@ import org.bukkit.event.player.PlayerListener; public class LBToolPlayerListener extends PlayerListener { private final LogBlock logblock; + private final Config config; LBToolPlayerListener(LogBlock logblock) { this.logblock = logblock; + config = logblock.getConfig(); } public void onPlayerInteract(PlayerInteractEvent event) { if (!event.isCancelled()) { - if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getMaterial().getId() == logblock.config.toolID && logblock.checkPermission(event.getPlayer(), "logblock.lookup")) { + if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getMaterial().getId() == config.toolID && logblock.checkPermission(event.getPlayer(), "logblock.lookup")) { logblock.getServer().getScheduler().scheduleAsyncDelayedTask(logblock, new BlockStats(logblock, event.getPlayer(), event.getClickedBlock())); if (event.getClickedBlock().getType() != Material.BED_BLOCK) event.setCancelled(true); - } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getMaterial().getId() == logblock.config.toolblockID && logblock.checkPermission(event.getPlayer(), "logblock.lookup")) { + } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getMaterial().getId() == config.toolblockID && logblock.checkPermission(event.getPlayer(), "logblock.lookup")) { logblock.getServer().getScheduler().scheduleAsyncDelayedTask(logblock, new BlockStats(logblock, event.getPlayer(), event.getClickedBlock().getFace(event.getBlockFace()))); event.setCancelled(true); } diff --git a/src/de/diddiz/LogBlock/LogBlock.java b/src/de/diddiz/LogBlock/LogBlock.java index 45edc15..f8fd649 100644 --- a/src/de/diddiz/LogBlock/LogBlock.java +++ b/src/de/diddiz/LogBlock/LogBlock.java @@ -34,13 +34,21 @@ import de.diddiz.util.Download; public class LogBlock extends JavaPlugin { - public static Logger log; - public Config config; - public ConnectionPool pool; - public Consumer consumer = null; + private Logger log; + private Config config; + private ConnectionPool pool; + private Consumer consumer = null; private Timer timer = null; private PermissionHandler permissions = null; + public Config getConfig() { + return config; + } + + public Consumer getConsumer() { + return consumer; + } + @Override public void onEnable() { log = getServer().getLogger(); @@ -71,7 +79,7 @@ public class LogBlock extends JavaPlugin } try { pool = new ConnectionPool("com.mysql.jdbc.Driver", config.url, config.user, config.password); - Connection conn = pool.getConnection(); + Connection conn = getConnection(); conn.close(); } catch (Exception ex) { log.log(Level.SEVERE, "[LogBlock] Exception while checking database connection", ex); @@ -85,6 +93,7 @@ public class LogBlock extends JavaPlugin } if (config.keepLogDays >= 0) new Thread(new ClearLog(this)).start(); + consumer = new Consumer(this); LBBlockListener lbBlockListener = new LBBlockListener(this); LBPlayerListener lbPlayerListener = new LBPlayerListener(this); LBEntityListener lbEntityListener = new LBEntityListener(this); @@ -111,7 +120,6 @@ public class LogBlock extends JavaPlugin pm.registerEvent(Type.PLAYER_INTERACT, lbPlayerListener, Priority.Monitor, this); if (config.logKills) pm.registerEvent(Type.ENTITY_DAMAGE, lbEntityListener, Priority.Monitor, this); - consumer = new Consumer(this); if (config.useBukkitScheduler) { if (getServer().getScheduler().scheduleAsyncRepeatingTask(this, consumer, config.delay * 20, config.delay * 20) > 0) log.info("[LogBlock] Scheduled consumer with bukkit scheduler."); @@ -152,15 +160,6 @@ public class LogBlock extends JavaPlugin return true; } Player player = (Player)sender; - Connection conn = pool.getConnection(); - String table = config.tables.get(player.getWorld().getName().hashCode()); - 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.LIGHT_PURPLE + "LogBlock v" + getDescription().getVersion() + " by DiddiZ"); player.sendMessage(ChatColor.LIGHT_PURPLE + "Type /lb help for help"); @@ -217,12 +216,12 @@ public class LogBlock extends JavaPlugin 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(); + new Thread(new AreaStats(this, player, radius)).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(); + new Thread(new AreaStats(this, player, Short.MAX_VALUE)).start(); } else player.sendMessage(ChatColor.RED + "You aren't allowed to do this"); } else if (args[0].equalsIgnoreCase("player")) { @@ -231,7 +230,7 @@ public class LogBlock extends JavaPlugin 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(); + new Thread(new PlayerAreaStats(this, player, args[1], radius)).start(); } else player.sendMessage(ChatColor.RED + "Usage: /lb player [name] "); } else @@ -244,7 +243,7 @@ public class LogBlock extends JavaPlugin 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(); + new Thread(new AreaBlockSearch(this, player, mat.getId(), radius)).start(); else player.sendMessage(ChatColor.RED + "Can't find any item like '" + args[1] + "'"); } else @@ -260,7 +259,7 @@ public class LogBlock extends JavaPlugin if (args.length == 5) minutes = parseTimeSpec(args[3], args[4]); player.sendMessage(ChatColor.GREEN + "Rolling back " + args[2] + " by " + minutes + " minutes."); - getServer().getScheduler().scheduleAsyncDelayedTask(this, new Rollback(player, conn, this, args[2], -1, null, minutes, table, false)); + getServer().getScheduler().scheduleAsyncDelayedTask(this, new Rollback(this, player, args[2], -1, null, minutes, false)); } else player.sendMessage(ChatColor.RED + "Usage: /lb rollback player [name]