diff --git a/src/de/diddiz/LogBlock/ClearLog.java b/src/de/diddiz/LogBlock/ClearLog.java index db331a8..ec1a7fa 100644 --- a/src/de/diddiz/LogBlock/ClearLog.java +++ b/src/de/diddiz/LogBlock/ClearLog.java @@ -35,7 +35,7 @@ public class ClearLog implements Runnable rs.next(); int deleted = rs.getInt(1); if (deleted > 0) { - if (LogBlock.config.dumpDroppedLog) + if (LogBlock.config.dumpDeletedLog) state.execute("SELECT * FROM `" + table + "` WHERE date < '" + time + "' INTO OUTFILE '" + new File(dumbFolder, 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."); @@ -44,7 +44,7 @@ public class ClearLog implements Runnable rs.next(); deleted = rs.getInt(1); if (deleted > 0) { - if (LogBlock.config.dumpDroppedLog) + if (LogBlock.config.dumpDeletedLog) state.execute("SELECT id, signtext FROM `" + table + "-sign` LEFT JOIN `" + table + "` USING (id) WHERE `" + table + "`.id IS NULL INTO OUTFILE '" + new File(dumbFolder, 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."); @@ -53,7 +53,7 @@ public class ClearLog implements Runnable rs.next(); deleted = rs.getInt(1); if (deleted > 0) { - if (LogBlock.config.dumpDroppedLog) + if (LogBlock.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(dumbFolder, 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."); diff --git a/src/de/diddiz/LogBlock/Config.java b/src/de/diddiz/LogBlock/Config.java index f6e4088..2e1c9fc 100644 --- a/src/de/diddiz/LogBlock/Config.java +++ b/src/de/diddiz/LogBlock/Config.java @@ -1,5 +1,6 @@ package de.diddiz.LogBlock; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; @@ -9,20 +10,13 @@ import org.bukkit.util.config.Configuration; public class Config { final HashMap tables; - final List dontRollback; - final List replaceAtRollback; - final String dbDriver; - final String dbUrl; - final String dbUsername; - final String dbPassword; - final int keepLogDays; - final boolean dumpDroppedLog; + final String url; + final String user; + final String password; final int delay; - final int defaultDist; - final int defaultTime; - final int toolID; - final int toolblockID; - final boolean toolblockRemove; + final boolean useBukkitScheduler; + final int keepLogDays; + final boolean dumpDeletedLog; final boolean logBlockCreations; final boolean logBlockDestroyings; final boolean logSignTexts; @@ -30,112 +24,114 @@ public class Config { final boolean logFire; final boolean logLeavesDecay; final boolean logChestAccess; - final String logTNTExplosionsAs; - final String logCreeperExplosionsAs; - final String logFireballExplosionsAs; - final String logFireAs; - final String logLeavesDecayAs; - boolean usePermissions; + final List dontRollback; + final List replaceAnyway; + final int defaultDist; + final int defaultTime; + final int toolID; + final int toolblockID; Config (LogBlock logblock) throws Exception { Configuration config = logblock.getConfiguration(); config.load(); List keys = config.getKeys(null); + List subkeys; if (!keys.contains("version")) config.setProperty("version", logblock.getDescription().getVersion()); - if (!keys.contains("worldNames")) - config.setProperty("worldNames", Arrays.asList(new String[]{"world"})); - if (!keys.contains("worldTables")) - config.setProperty("worldTables", Arrays.asList(new String[]{"lb-main"})); - if (!keys.contains("dontRollback")) - config.setProperty("dontRollback", Arrays.asList(new Integer[]{46, 51})); - if (!keys.contains("replaceAtRollback")) - config.setProperty("replaceAtRollback", Arrays.asList(new Integer[]{8, 9, 10, 11, 51})); - if (!keys.contains("driver")) - config.setProperty("driver", "com.mysql.jdbc.Driver"); - if (!keys.contains("url")) - config.setProperty("url", "jdbc:mysql://localhost:3306/db"); - if (!keys.contains("username")) - config.setProperty("username", "user"); - if (!keys.contains("password")) - config.setProperty("password", "pass"); - if (!keys.contains("keepLogDays")) - config.setProperty("keepLogDays", -1); - if (!keys.contains("dumpDroppedLog")) - config.setProperty("dumpDroppedLog", true); - if (!keys.contains("delay")) - config.setProperty("delay", 6); - if (!keys.contains("defaultDist")) - config.setProperty("defaultDist", 20); - if (!keys.contains("defaultTime")) - config.setProperty("defaultTime", "30 minutes"); - if (!keys.contains("toolID")) - config.setProperty("toolID", 270); - if (!keys.contains("toolblockID")) - config.setProperty("toolblockID", 7); - if (!keys.contains("toolblockRemove")) - config.setProperty("toolblockRemove", true); - if (!keys.contains("logBlockCreations")) - config.setProperty("logBlockCreations", true); - if (!keys.contains("logBlockDestroyings")) - config.setProperty("logBlockDestroyings", true); - if (!keys.contains("logSignTexts")) - config.setProperty("logSignTexts", false); - if (!keys.contains("logExplosions")) - config.setProperty("logExplosions", false); - if (!keys.contains("logFire")) - config.setProperty("logFire", false); - if (!keys.contains("logChestAccess")) - config.setProperty("logChestAccess", false); - if (!keys.contains("logLeavesDecay")) - config.setProperty("logLeavesDecay", false); - if (!keys.contains("logTNTExplosionsAs")) - config.setProperty("logTNTExplosionsAs", "TNT"); - if (!keys.contains("logCreeperExplosionsAs")) - config.setProperty("logCreeperExplosionsAs", "Creeper"); - if (!keys.contains("logFireballExplosionsAs")) - config.setProperty("logFireballExplosionsAs", "Ghast"); - if (!keys.contains("logFireAs")) - config.setProperty("logFireAs", "Fire"); - if (!keys.contains("logLeavesDecayAs")) - config.setProperty("logLeavesDecayAs", "LeavesDecay"); - if (!keys.contains("usePermissions")) - config.setProperty("usePermissions", false); + if (!keys.contains("loggedWorlds")) + config.setProperty("loggedWorlds", Arrays.asList(new String[]{"world", "nether"})); + if (!keys.contains("tables")) + config.setProperty("tables", Arrays.asList(new String[]{"lb-main", "lb-hell"})); + subkeys = config.getKeys("mysql"); + if (subkeys == null) + subkeys = new ArrayList(); + if (!subkeys.contains("host")) + config.setProperty("mysql.host", "localhost"); + if (!subkeys.contains("port")) + config.setProperty("mysql.port", 3306); + if (!subkeys.contains("database")) + config.setProperty("mysql.database", "minecraft"); + if (!subkeys.contains("user")) + config.setProperty("mysql.user", "username"); + if (!subkeys.contains("password")) + config.setProperty("mysql.password", "pass"); + subkeys = config.getKeys("consumer"); + if (subkeys == null) + subkeys = new ArrayList(); + if (!subkeys.contains("delay")) + config.setProperty("consumer.delay", 6); + if (!subkeys.contains("useBukkitScheduler")) + config.setProperty("consumer.useBukkitScheduler", true); + subkeys = config.getKeys("clearlog"); + if (subkeys == null) + subkeys = new ArrayList(); + if (!subkeys.contains("dumpDeletedLog")) + config.setProperty("clearlog.dumpDeletedLog", false); + if (!subkeys.contains("keepLogDays")) + config.setProperty("clearlog.keepLogDays", -1); + subkeys = config.getKeys("logging"); + if (subkeys == null) + subkeys = new ArrayList(); + if (!subkeys.contains("logBlockCreations")) + config.setProperty("logging.logBlockCreations", true); + if (!subkeys.contains("logBlockDestroyings")) + config.setProperty("logging.logBlockDestroyings", true); + if (!subkeys.contains("logSignTexts")) + config.setProperty("logging.logSignTexts", false); + if (!subkeys.contains("logExplosions")) + config.setProperty("logging.logExplosions", false); + if (!subkeys.contains("llogFire")) + config.setProperty("logging.logFire", false); + if (!subkeys.contains("logChestAccess")) + config.setProperty("logging.logChestAccess", false); + if (!subkeys.contains("logLeavesDecay")) + config.setProperty("logging.logLeavesDecay", false); + subkeys = config.getKeys("rollback"); + if (subkeys == null) + subkeys = new ArrayList(); + if (!subkeys.contains("dontRollback")) + config.setProperty("rollback.dontRollback", Arrays.asList(new Integer[]{10, 11, 46, 51})); + if (!subkeys.contains("replaceAnyway")) + config.setProperty("rollback.replaceAnyway", Arrays.asList(new Integer[]{8, 9, 10, 11, 51})); + subkeys = config.getKeys("lookup"); + if (subkeys == null) + subkeys = new ArrayList(); + if (!subkeys.contains("defaultDist")) + config.setProperty("lookup.defaultDist", 20); + if (!subkeys.contains("defaultTime")) + config.setProperty("lookup.defaultTime", "30 minutes"); + if (!subkeys.contains("toolID")) + config.setProperty("lookup.toolID", 270); + if (!subkeys.contains("toolblockID")) + config.setProperty("lookup.toolblockID", 7); if (!config.save()) throw new Exception("Error while writing to config.yml"); - dbDriver = config.getString("driver"); - dbUrl = config.getString("url"); - dbUsername = config.getString("username"); - dbPassword = config.getString("password"); - keepLogDays = config.getInt("keepLogDays", -1); - dumpDroppedLog = config.getBoolean("dumpDroppedLog", true); - delay = config.getInt("delay", 6); - defaultDist = config.getInt("defaultDist", 20); - defaultTime = LogBlock.parseTimeSpec(config.getString("defaultTime")); - toolID = config.getInt("toolID", 270); + url = "jdbc:mysql://" + config.getString("mysql.host") + ":" + config.getString("mysql.port") + "/" + config.getString("mysql.database"); + user = config.getString("mysql.user"); + password = config.getString("mysql.password"); + delay = config.getInt("consumer.delay", 6); + useBukkitScheduler = config.getBoolean("consumer.useBukkitScheduler", true); + keepLogDays = config.getInt("clearlog.keepLogDays", -1); + dumpDeletedLog = config.getBoolean("clearlog.dumpDeletedLog", false); + logBlockCreations = config.getBoolean("logging.logBlockCreations", true); + logBlockDestroyings = config.getBoolean("logging.logBlockDestroyings", true); + logSignTexts = config.getBoolean("logging.logSignTexts", false); + logExplosions = config.getBoolean("logging.logExplosions", false); + logFire = config.getBoolean("logging.logFire", false); + logChestAccess = config.getBoolean("logging.logChestAccess", false); + logLeavesDecay = config.getBoolean("logging.logLeavesDecay", false); + dontRollback = config.getIntList("rollback.dontRollback", null); + replaceAnyway = config.getIntList("rollback.replaceAnyway", null); + defaultDist = config.getInt("lookup.defaultDist", 20); + defaultTime = LogBlock.parseTimeSpec(config.getString("lookup.defaultTime")); + toolID = config.getInt("lookup.toolID", 270); if (Material.getMaterial(toolID) == null || Material.getMaterial(toolID).isBlock()) - throw new Exception("toolID doesn't appear to be a valid item id"); - toolblockID = config.getInt("toolblockID", 7); + throw new Exception("lookup.toolID doesn't appear to be a valid item id"); + toolblockID = config.getInt("lookup.toolblockID", 7); if (Material.getMaterial(toolblockID) == null || !Material.getMaterial(toolblockID).isBlock() || toolblockID == 0) - throw new Exception("toolblockID doesn't appear to be a valid block id"); - toolblockRemove = config.getBoolean("toolblockRemove", true); - logBlockCreations = config.getBoolean("logBlockCreations", true); - logBlockDestroyings = config.getBoolean("logBlockDestroyings", true); - logSignTexts = config.getBoolean("logSignTexts", false); - logExplosions = config.getBoolean("logExplosions", false); - logFire = config.getBoolean("logFire", false); - logChestAccess = config.getBoolean("logChestAccess", false); - logLeavesDecay = config.getBoolean("logLeavesDecay", false); - logTNTExplosionsAs = config.getString("logTNTExplosionsAs"); - logCreeperExplosionsAs = config.getString("logCreeperExplosionsAs"); - logFireballExplosionsAs = config.getString("logFireballExplosionsAs"); - logFireAs = config.getString("logFireAs"); - logLeavesDecayAs = config.getString("logLeavesDecayAs"); - usePermissions = config.getBoolean("usePermissions", false); - dontRollback = config.getIntList("dontRollback", null); - replaceAtRollback = config.getIntList("replaceAtRollback", null); - List worldNames = config.getStringList("worldNames", null); - List worldTables = config.getStringList("worldTables", null); + throw new Exception("lookup.toolblockID doesn't appear to be a valid block id"); + List worldNames = config.getStringList("loggedWorlds", null); + List worldTables = config.getStringList("tables", null); tables = new HashMap(); if (worldNames == null || worldTables == null || worldNames.size() == 0 || worldNames.size() != worldTables.size()) throw new Exception("worldNames or worldTables not set porperly"); diff --git a/src/de/diddiz/LogBlock/LogBlock.java b/src/de/diddiz/LogBlock/LogBlock.java index aaadb4e..aebf0af 100644 --- a/src/de/diddiz/LogBlock/LogBlock.java +++ b/src/de/diddiz/LogBlock/LogBlock.java @@ -41,6 +41,7 @@ import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; +import com.nijiko.permissions.PermissionHandler; import com.nijikokun.bukkit.Permissions.Permissions; import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldedit.bukkit.selections.CuboidSelection; @@ -56,6 +57,7 @@ public class LogBlock extends JavaPlugin public ConnectionPool pool; private Consumer consumer = null; private Timer timer = null; + private PermissionHandler permissions = null; @Override public void onEnable() { @@ -66,15 +68,12 @@ public class LogBlock extends JavaPlugin log.log(Level.SEVERE, "[LogBlock] Exception while reading config", ex); getServer().getPluginManager().disablePlugin(this); return; - } - if (config.usePermissions) { - if (getServer().getPluginManager().getPlugin("Permissions") != null) - log.info("[LogBlock] Permissions enabled"); - else { - config.usePermissions = false; - log.warning("[LogBlock] Permissions plugin not found. Using default permissions."); - } } + if (getServer().getPluginManager().getPlugin("Permissions") != null) { + permissions = ((Permissions)getServer().getPluginManager().getPlugin("Permissions")).getHandler(); + log.info("[LogBlock] Permissions enabled"); + } else + log.info("[LogBlock] Permissions plugin not found. Using default permissions."); File file = new File("lib/mysql-connector-java-bin.jar"); try { if (!file.exists() || file.length() == 0) { @@ -89,7 +88,7 @@ public class LogBlock extends JavaPlugin return; } try { - pool = new ConnectionPool(config.dbDriver, config.dbUrl, config.dbUsername, config.dbPassword); + pool = new ConnectionPool("com.mysql.jdbc.Driver", config.url, config.user, config.password); Connection conn = pool.getConnection(); conn.close(); } catch (Exception ex) { @@ -429,7 +428,7 @@ public class LogBlock extends JavaPlugin if (!dbm.getTables(null, null, "lb-players", null).next()) return false; } - state.execute("INSERT IGNORE INTO `lb-players` (playername) VALUES ('" + config.logTNTExplosionsAs + "'), ('" + config.logCreeperExplosionsAs + "'), ('" + config.logFireAs + "'), ('" + config.logLeavesDecayAs + "'), ('" + config.logFireballExplosionsAs + "'), ('Environment')"); + state.execute("INSERT IGNORE INTO `lb-players` (playername) VALUES ('TNT'), ('Creeper'), ('Fire'), ('LeavesDecay'), ('Ghast'), ('Environment')"); for (String table : config.tables.values()) { if (!dbm.getTables(null, null, table, null).next()) { log.log(Level.INFO, "[LogBlock] Crating table " + table + "."); @@ -467,8 +466,8 @@ public class LogBlock extends JavaPlugin } private boolean CheckPermission(Player player, String permission) { - if (config.usePermissions) - return Permissions.Security.permission(player, permission); + if (permissions != null) + return permissions.permission(player, permission); else { if (permission.equals("logblock.area")) return player.isOp(); @@ -521,12 +520,12 @@ public class LogBlock extends JavaPlugin public void onBlockBurn(BlockBurnEvent event) { if (!event.isCancelled()) - consumer.queueBlock(config.logFireAs, 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()) - consumer.queueBlock(config.logLeavesDecayAs, event.getBlock(), event.getBlock().getTypeId(), 0, event.getBlock().getData()); + consumer.queueBlock("LeavesDecay", event.getBlock(), event.getBlock().getTypeId(), 0, event.getBlock().getData()); } } @@ -536,11 +535,11 @@ public class LogBlock extends JavaPlugin if (!event.isCancelled()) { String name; if (event.getEntity() instanceof TNTPrimed) - name = config.logTNTExplosionsAs; + name = "TNT"; else if (event.getEntity() instanceof Creeper) - name = config.logCreeperExplosionsAs; + name = "Creeper"; else if (event.getEntity() instanceof Fireball) - name = config.logFireballExplosionsAs; + name = "Ghast"; else name = "Environment"; for (Block block : event.blockList()) @@ -605,8 +604,7 @@ public class LogBlock extends JavaPlugin event.setCancelled(true); } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getMaterial().getId() == LogBlock.config.toolblockID && CheckPermission(event.getPlayer(), "logblock.lookup")) { getServer().getScheduler().scheduleAsyncDelayedTask(LogBlock.this, new BlockStats(pool.getConnection(), event.getPlayer(), event.getClickedBlock().getFace(event.getBlockFace()))); - if (config.toolblockRemove) - event.setCancelled(true); + event.setCancelled(true); } } } diff --git a/src/de/diddiz/LogBlock/Rollback.java b/src/de/diddiz/LogBlock/Rollback.java index 38418ee..56ff0df 100644 --- a/src/de/diddiz/LogBlock/Rollback.java +++ b/src/de/diddiz/LogBlock/Rollback.java @@ -166,7 +166,7 @@ public class Rollback implements Runnable Block block = world.getBlockAt(x, y, z); if (!world.isChunkLoaded(block.getChunk())) world.loadChunk(block.getChunk()); - if (equalsType(block.getTypeId(), type) || LogBlock.config.replaceAtRollback.contains(block.getTypeId()) || (type == 0 && replaced == 0)) { + if (equalsType(block.getTypeId(), type) || LogBlock.config.replaceAnyway.contains(block.getTypeId()) || (type == 0 && replaced == 0)) { if (block.setTypeIdAndData(replaced, data, false)) return PerformResult.SUCCESS; else