diff --git a/src/de/diddiz/LogBlock/AutoClearLog.java b/src/de/diddiz/LogBlock/AutoClearLog.java new file mode 100644 index 0000000..a79ee97 --- /dev/null +++ b/src/de/diddiz/LogBlock/AutoClearLog.java @@ -0,0 +1,28 @@ +package de.diddiz.LogBlock; + +import static org.bukkit.Bukkit.getConsoleSender; +import static org.bukkit.Bukkit.getLogger; +import static org.bukkit.Bukkit.getServer; +import java.util.Arrays; +import java.util.logging.Level; + +public class AutoClearLog implements Runnable +{ + private final LogBlock logblock; + + AutoClearLog(LogBlock logblock) { + this.logblock = logblock; + } + + @Override + public void run() { + final CommandsHandler handler = logblock.getCommandsHandler(); + for (final String paramStr : logblock.getLBConfig().autoClearLog) + try { + final QueryParams params = new QueryParams(logblock, getConsoleSender(), Arrays.asList(paramStr.split(" "))); + handler.new CommandClearLog(getServer().getConsoleSender(), params, false); + } catch (final Exception ex) { + getLogger().log(Level.SEVERE, "Failed to schedule auto ClearLog: ", ex); + } + } +} diff --git a/src/de/diddiz/LogBlock/CommandsHandler.java b/src/de/diddiz/LogBlock/CommandsHandler.java index 19c6579..9e14cc6 100644 --- a/src/de/diddiz/LogBlock/CommandsHandler.java +++ b/src/de/diddiz/LogBlock/CommandsHandler.java @@ -326,7 +326,7 @@ public class CommandsHandler implements CommandExecutor } private boolean checkRestrictions(CommandSender sender, QueryParams params) { - if (logblock.hasPermission(sender, "logblock.ignoreRestrictions")) + if (sender.isOp() || logblock.hasPermission(sender, "logblock.ignoreRestrictions")) return true; if (config.rollbackMaxTime > 0 && (params.before > 0 || params.since > config.rollbackMaxTime)) { sender.sendMessage(ChatColor.RED + "You are not allowed to rollback more than " + config.rollbackMaxTime + " minutes"); diff --git a/src/de/diddiz/LogBlock/Config.java b/src/de/diddiz/LogBlock/Config.java index 1b2e6ed..e26ba26 100644 --- a/src/de/diddiz/LogBlock/Config.java +++ b/src/de/diddiz/LogBlock/Config.java @@ -2,6 +2,7 @@ package de.diddiz.LogBlock; import static de.diddiz.util.BukkitUtils.friendlyWorldname; import static de.diddiz.util.Utils.parseTimeSpec; +import static org.bukkit.Bukkit.getConsoleSender; import static org.bukkit.Bukkit.getLogger; import java.io.File; import java.io.IOException; @@ -15,7 +16,6 @@ import java.util.Map.Entry; import java.util.Set; import java.util.logging.Level; import java.util.zip.DataFormatException; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; @@ -27,7 +27,8 @@ public class Config public final String url, user, password; public final int delayBetweenRuns, forceToProcessAtLeast, timePerRun; public final boolean useBukkitScheduler; - public final int keepLogDays; + public final boolean enableAutoClearLog; + public final List autoClearLog; public final boolean dumpDeletedLog; public boolean logBlockPlacings, logBlockBreaks, logSignTexts, logExplosions, logFire, logLeavesDecay, logLavaFlow, logWaterFlow, logChestAccess, logButtonsAndLevers, logKills, logChat, logSnowForm, logSnowFade, logDoors, logCakes, logEndermen; public final boolean logCreeperExplosionsAsPlayerWhoTriggeredThese, logPlayerInfo; @@ -62,7 +63,8 @@ public class Config def.put("consumer.timePerRun", 200); def.put("consumer.useBukkitScheduler", true); def.put("clearlog.dumpDeletedLog", false); - def.put("clearlog.keepLogDays", -1); + def.put("clearlog.enableAutoClearLog", false); + def.put("clearlog.auto", Arrays.asList("world \"world\" before 365 days all", "world \"world\" player lavaflow waterflow leavesdecay before 7 days all", "world world_nether before 365 days all", "world world_nether player lavaflow before 7 days all")); def.put("logging.logCreeperExplosionsAsPlayerWhoTriggeredThese", false); def.put("logging.logKillsLevel", "PLAYERS"); def.put("logging.logPlayerInfo", true); @@ -111,9 +113,8 @@ public class Config forceToProcessAtLeast = config.getInt("consumer.forceToProcessAtLeast", 0); timePerRun = config.getInt("consumer.timePerRun", 100); useBukkitScheduler = config.getBoolean("consumer.useBukkitScheduler", true); - keepLogDays = config.getInt("clearlog.keepLogDays", -1); - if (keepLogDays * 86400000L > System.currentTimeMillis()) - throw new DataFormatException("Too large timespan for keepLogDays. Must be shorter than " + (int)(System.currentTimeMillis() / 86400000L) + " days."); + enableAutoClearLog = config.getBoolean("clearlog.enableAutoClearLog"); + autoClearLog = toStringList(config.getList("clearlog.auto")); dumpDeletedLog = config.getBoolean("clearlog.dumpDeletedLog", false); logCreeperExplosionsAsPlayerWhoTriggeredThese = config.getBoolean("logging.logCreeperExplosionsAsPlayerWhoTriggeredThese", false); logPlayerInfo = config.getBoolean("logging.logPlayerInfo", true); @@ -161,7 +162,7 @@ public class Config final int item = tSec.getInt("item", 0); final QueryParams params = new QueryParams(logblock); params.prepareToolQuery = true; - params.parseArgs(Bukkit.getConsoleSender(), Arrays.asList(tSec.getString("params").split(" "))); + params.parseArgs(getConsoleSender(), Arrays.asList(tSec.getString("params").split(" "))); final ToolMode mode = ToolMode.valueOf(tSec.getString("mode").toUpperCase()); final PermissionDefault pdef = PermissionDefault.valueOf(tSec.getString("permissionDefault").toUpperCase()); tools.add(new Tool(toolName, aliases, leftClickBehavior, rightClickBehavior, defaultEnabled, item, params, mode, pdef)); diff --git a/src/de/diddiz/LogBlock/LogBlock.java b/src/de/diddiz/LogBlock/LogBlock.java index 4f50d15..76e0845 100644 --- a/src/de/diddiz/LogBlock/LogBlock.java +++ b/src/de/diddiz/LogBlock/LogBlock.java @@ -14,7 +14,6 @@ import java.util.List; import java.util.Timer; import java.util.logging.Level; import org.bukkit.ChatColor; -import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -25,7 +24,6 @@ import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import com.nijiko.permissions.PermissionHandler; import com.nijikokun.bukkit.Permissions.Permissions; -import de.diddiz.LogBlock.QueryParams.BlockChangeType; import de.diddiz.util.MySQLConnectionPool; public class LogBlock extends JavaPlugin @@ -131,20 +129,8 @@ public class LogBlock extends JavaPlugin getLogger().info("[LogBlock] Permissions plugin found."); } else getLogger().info("[LogBlock] Permissions plugin not found. Using Bukkit Permissions."); - if (config.keepLogDays >= 0) { - final QueryParams params = new QueryParams(this); - params.before = config.keepLogDays * 1440; - params.bct = BlockChangeType.ALL; - for (final World world : getServer().getWorlds()) - if (config.worlds.containsKey(world.getName().hashCode())) { - params.world = world; - try { - commandsHandler.new CommandClearLog(getServer().getConsoleSender(), params.clone(), true); - } catch (final Exception ex) { - getLogger().log(Level.SEVERE, "Failed to schedule ClearLog: ", ex); - } - } - } + if (config.enableAutoClearLog) + getServer().getScheduler().scheduleAsyncDelayedTask(this, new AutoClearLog(this)); getServer().getScheduler().scheduleAsyncDelayedTask(this, new DumpedLogImporter(this)); final LBBlockListener lbBlockListener = new LBBlockListener(this); final LBPlayerListener lbPlayerListener = new LBPlayerListener(this);