Added WaterFlowLogging. Added logging for nonsolid blocks destroyed by

fluids.
This commit is contained in:
Robin Kupper
2011-07-24 22:46:14 +02:00
parent d2a91263f8
commit ad27cddeb2
4 changed files with 59 additions and 44 deletions

View File

@@ -10,6 +10,7 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.zip.DataFormatException; import java.util.zip.DataFormatException;
import org.bukkit.Material; import org.bukkit.Material;
@@ -24,7 +25,7 @@ public class Config
public final boolean useBukkitScheduler; public final boolean useBukkitScheduler;
public final int keepLogDays; public final int keepLogDays;
public final boolean dumpDeletedLog; public final boolean dumpDeletedLog;
public boolean logBlockCreations, logBlockDestroyings, logSignTexts, logExplosions, logFire, logLeavesDecay, logLavaFlow, logChestAccess, logButtonsAndLevers, logKills, logChat; public boolean logBlockPlacings, logBlockBreaks, logSignTexts, logExplosions, logFire, logLeavesDecay, logLavaFlow, logWaterFlow, logChestAccess, logButtonsAndLevers, logKills, logChat;
public final boolean logCreeperExplosionsAsPlayerWhoTriggeredThese; public final boolean logCreeperExplosionsAsPlayerWhoTriggeredThese;
public final LogKillsLevel logKillsLevel; public final LogKillsLevel logKillsLevel;
public final Set<Integer> dontRollback, replaceAnyway; public final Set<Integer> dontRollback, replaceAnyway;
@@ -200,10 +201,10 @@ public class Config
for (final String world : worldNames) for (final String world : worldNames)
worlds.put(world.hashCode(), new WorldConfig(new File("plugins/LogBlock/" + friendlyWorldname(world) + ".yml"))); worlds.put(world.hashCode(), new WorldConfig(new File("plugins/LogBlock/" + friendlyWorldname(world) + ".yml")));
for (final WorldConfig wcfg : worlds.values()) { for (final WorldConfig wcfg : worlds.values()) {
if (wcfg.logBlockCreations) if (wcfg.logBlockPlacings)
logBlockCreations = true; logBlockPlacings = true;
if (wcfg.logBlockDestroyings) if (wcfg.logBlockBreaks)
logBlockDestroyings = true; logBlockBreaks = true;
if (wcfg.logSignTexts) if (wcfg.logSignTexts)
logSignTexts = true; logSignTexts = true;
if (wcfg.logExplosions) if (wcfg.logExplosions)
@@ -214,6 +215,8 @@ public class Config
logLeavesDecay = true; logLeavesDecay = true;
if (wcfg.logLavaFlow) if (wcfg.logLavaFlow)
logLavaFlow = true; logLavaFlow = true;
if (wcfg.logWaterFlow)
logWaterFlow = true;
if (wcfg.logChestAccess) if (wcfg.logChestAccess)
logChestAccess = true; logChestAccess = true;
if (wcfg.logButtonsAndLevers) if (wcfg.logButtonsAndLevers)
@@ -230,45 +233,39 @@ public class Config
class WorldConfig class WorldConfig
{ {
public final String table; public final String table;
public final boolean logBlockCreations, logBlockDestroyings, logSignTexts, logExplosions, logFire, logLeavesDecay, logLavaFlow, logChestAccess, logButtonsAndLevers, logKills, logChat; public final boolean logBlockPlacings, logBlockBreaks, logSignTexts, logExplosions, logFire, logLeavesDecay, logLavaFlow, logWaterFlow, logChestAccess, logButtonsAndLevers, logKills, logChat;
public WorldConfig(File file) { public WorldConfig(File file) {
final Map<String, Object> def = new HashMap<String, Object>();
def.put("table", "lb-" + file.getName().substring(0, file.getName().length() - 4));
def.put("logBlockCreations", true);
def.put("logBlockDestroyings", true);
def.put("logSignTexts", true);
def.put("logExplosions", true);
def.put("logFire", true);
def.put("logLeavesDecay", false);
def.put("logLavaFlow", false);
def.put("logWaterFlow", false);
def.put("logChestAccess", false);
def.put("logButtonsAndLevers", false);
def.put("logKills", false);
def.put("logChat", false);
final Configuration config = new Configuration(file); final Configuration config = new Configuration(file);
config.load(); config.load();
final List<String> keys = config.getKeys(null); final List<String> keys = config.getKeys(null);
if (!keys.contains("table")) for (final Entry<String, Object> e : def.entrySet())
config.setProperty("table", "lb-" + file.getName().substring(0, file.getName().length() - 4)); if (!keys.contains(e.getKey()))
if (!keys.contains("logBlockCreations")) config.setProperty(e.getKey(), e.getValue());
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("logLeavesDecay"))
config.setProperty("logLeavesDecay", false);
if (!keys.contains("logLavaFlow"))
config.setProperty("logLavaFlow", false);
if (!keys.contains("logChestAccess"))
config.setProperty("logChestAccess", false);
if (!keys.contains("logButtonsAndLevers"))
config.setProperty("logButtonsAndLevers", false);
if (!keys.contains("logKills"))
config.setProperty("logKills", false);
if (!keys.contains("logChat"))
config.setProperty("logChat", false);
config.save(); config.save();
table = config.getString("table"); table = config.getString("table");
logBlockCreations = config.getBoolean("logBlockCreations", true); logBlockPlacings = config.getBoolean("logBlockCreations", true);
logBlockDestroyings = config.getBoolean("logBlockDestroyings", true); logBlockBreaks = config.getBoolean("logBlockDestroyings", true);
logSignTexts = config.getBoolean("logSignTexts", false); logSignTexts = config.getBoolean("logSignTexts", false);
logExplosions = config.getBoolean("logExplosions", false); logExplosions = config.getBoolean("logExplosions", false);
logFire = config.getBoolean("logFire", false); logFire = config.getBoolean("logFire", false);
logLeavesDecay = config.getBoolean("logLeavesDecay", false); logLeavesDecay = config.getBoolean("logLeavesDecay", false);
logLavaFlow = config.getBoolean("logLavaFlow", false); logLavaFlow = config.getBoolean("logLavaFlow", false);
logWaterFlow = config.getBoolean("logWaterFlow", false);
logChestAccess = config.getBoolean("logChestAccess", false); logChestAccess = config.getBoolean("logChestAccess", false);
logButtonsAndLevers = config.getBoolean("logButtonsAndLevers", false); logButtonsAndLevers = config.getBoolean("logButtonsAndLevers", false);
logKills = config.getBoolean("logKills", false); logKills = config.getBoolean("logKills", false);

View File

@@ -4,9 +4,13 @@ import java.io.File;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState; import org.bukkit.block.BlockState;
import org.bukkit.block.Sign; import org.bukkit.block.Sign;
@@ -25,6 +29,7 @@ class LBBlockListener extends BlockListener
private final Consumer consumer; private final Consumer consumer;
private final Map<Integer, WorldConfig> worlds; private final Map<Integer, WorldConfig> worlds;
private final List<String> errors = new ArrayList<String>(20); private final List<String> errors = new ArrayList<String>(20);
private final Set<Integer> nonFluidProofBlocks = new HashSet<Integer>(Arrays.asList(27, 28, 31, 32, 37, 38, 39, 40, 50, 51, 55, 59, 66, 69, 70, 75, 76, 78, 93, 94));
LBBlockListener(LogBlock logblock) { LBBlockListener(LogBlock logblock) {
consumer = logblock.getConsumer(); consumer = logblock.getConsumer();
@@ -34,7 +39,7 @@ class LBBlockListener extends BlockListener
@Override @Override
public void onBlockBreak(BlockBreakEvent event) { public void onBlockBreak(BlockBreakEvent event) {
final WorldConfig wcfg = worlds.get(event.getBlock().getWorld().getName().hashCode()); final WorldConfig wcfg = worlds.get(event.getBlock().getWorld().getName().hashCode());
if (!event.isCancelled() && wcfg != null && wcfg.logBlockDestroyings) { if (!event.isCancelled() && wcfg != null && wcfg.logBlockBreaks) {
final int type = event.getBlock().getTypeId(); final int type = event.getBlock().getTypeId();
if (type == 0) { if (type == 0) {
final Location loc = event.getBlock().getLocation(); final Location loc = event.getBlock().getLocation();
@@ -59,24 +64,38 @@ class LBBlockListener extends BlockListener
@Override @Override
public void onBlockFromTo(BlockFromToEvent event) { public void onBlockFromTo(BlockFromToEvent event) {
final WorldConfig wcfg = worlds.get(event.getBlock().getWorld().getName().hashCode()); final WorldConfig wcfg = worlds.get(event.getBlock().getWorld().getName().hashCode());
if (!event.isCancelled() && wcfg != null && wcfg.logLavaFlow) { if (!event.isCancelled() && wcfg != null) {
final int typeFrom = event.getBlock().getTypeId(); final int typeFrom = event.getBlock().getTypeId();
final int typeTo = event.getToBlock().getTypeId(); final int typeTo = event.getToBlock().getTypeId();
if (typeFrom == 10 || typeFrom == 11) if (typeFrom == 10 || typeFrom == 11) {
if (typeTo == 0 || typeTo == 78) if (typeTo == 0) {
if (wcfg.logLavaFlow)
consumer.queueBlockPlace("LavaFlow", event.getToBlock().getLocation(), 10, (byte)(event.getBlock().getData() + 1));
} else if (nonFluidProofBlocks.contains(typeTo))
consumer.queueBlockReplace("LavaFlow", event.getToBlock().getState(), 10, (byte)(event.getBlock().getData() + 1)); consumer.queueBlockReplace("LavaFlow", event.getToBlock().getState(), 10, (byte)(event.getBlock().getData() + 1));
else if (typeTo == 8 || typeTo == 9) else if (typeTo == 8 || typeTo == 9)
if (event.getFace() == BlockFace.DOWN) if (event.getFace() == BlockFace.DOWN)
consumer.queueBlockReplace("LavaFlow", event.getToBlock().getState(), 10, (byte)0); consumer.queueBlockReplace("LavaFlow", event.getToBlock().getState(), 10, (byte)0);
else else
consumer.queueBlockReplace("LavaFlow", event.getToBlock().getState(), 4, (byte)0); consumer.queueBlockReplace("LavaFlow", event.getToBlock().getState(), 4, (byte)0);
} else if (typeFrom == 8 || typeFrom == 9)
if (typeTo == 0 || nonFluidProofBlocks.contains(typeTo)) {
if (typeTo == 0) {
if (wcfg.logWaterFlow)
consumer.queueBlockPlace("WaterFlow", event.getToBlock().getLocation(), 8, (byte)(event.getBlock().getData() + 1));
} else
consumer.queueBlockReplace("WaterFlow", event.getToBlock().getState(), 8, (byte)(event.getBlock().getData() + 1));
final Block lower = event.getToBlock().getRelative(BlockFace.DOWN);
if (lower.getTypeId() == 10 || lower.getTypeId() == 11)
consumer.queueBlockReplace("WaterFlow", lower.getState(), lower.getData() == 0 ? 49 : 4, (byte)0);
}
} }
} }
@Override @Override
public void onBlockPlace(BlockPlaceEvent event) { public void onBlockPlace(BlockPlaceEvent event) {
final WorldConfig wcfg = worlds.get(event.getBlock().getWorld().getName().hashCode()); final WorldConfig wcfg = worlds.get(event.getBlock().getWorld().getName().hashCode());
if (!event.isCancelled() && wcfg != null && wcfg.logBlockCreations) { if (!event.isCancelled() && wcfg != null && wcfg.logBlockPlacings) {
final int type = event.getBlock().getTypeId(); final int type = event.getBlock().getTypeId();
BlockState before = event.getBlockReplacedState(); BlockState before = event.getBlockReplacedState();
final BlockState after = event.getBlockPlaced().getState(); final BlockState after = event.getBlockPlaced().getState();

View File

@@ -21,14 +21,14 @@ class LBPlayerListener extends PlayerListener
@Override @Override
public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) {
final WorldConfig wcfg = worlds.get(event.getPlayer().getWorld().getName().hashCode()); final WorldConfig wcfg = worlds.get(event.getPlayer().getWorld().getName().hashCode());
if (!event.isCancelled() && wcfg != null && wcfg.logBlockCreations) if (!event.isCancelled() && wcfg != null && wcfg.logBlockPlacings)
consumer.queueBlockPlace(event.getPlayer().getName(), event.getBlockClicked().getRelative(event.getBlockFace()).getLocation(), event.getBucket() == Material.WATER_BUCKET ? 9 : 11, (byte)0); consumer.queueBlockPlace(event.getPlayer().getName(), event.getBlockClicked().getRelative(event.getBlockFace()).getLocation(), event.getBucket() == Material.WATER_BUCKET ? 9 : 11, (byte)0);
} }
@Override @Override
public void onPlayerBucketFill(PlayerBucketFillEvent event) { public void onPlayerBucketFill(PlayerBucketFillEvent event) {
final WorldConfig wcfg = worlds.get(event.getPlayer().getWorld().getName().hashCode()); final WorldConfig wcfg = worlds.get(event.getPlayer().getWorld().getName().hashCode());
if (!event.isCancelled() && wcfg != null && wcfg.logBlockDestroyings) if (!event.isCancelled() && wcfg != null && wcfg.logBlockBreaks)
consumer.queueBlockBreak(event.getPlayer().getName(), event.getBlockClicked().getState()); consumer.queueBlockBreak(event.getPlayer().getName(), event.getBlockClicked().getState());
} }

View File

@@ -157,13 +157,14 @@ public class LogBlock extends JavaPlugin
final LBPlayerListener lbPlayerListener = new LBPlayerListener(this); final LBPlayerListener lbPlayerListener = new LBPlayerListener(this);
final LBEntityListener lbEntityListener = new LBEntityListener(this); final LBEntityListener lbEntityListener = new LBEntityListener(this);
pm.registerEvent(Type.PLAYER_INTERACT, new LBToolListener(this), Priority.Normal, this); pm.registerEvent(Type.PLAYER_INTERACT, new LBToolListener(this), Priority.Normal, this);
if (config.logBlockCreations) { if (config.logBlockPlacings) {
pm.registerEvent(Type.BLOCK_PLACE, lbBlockListener, Priority.Monitor, this); pm.registerEvent(Type.BLOCK_PLACE, lbBlockListener, Priority.Monitor, this);
pm.registerEvent(Type.PLAYER_BUCKET_EMPTY, lbPlayerListener, Priority.Monitor, this); pm.registerEvent(Type.PLAYER_BUCKET_EMPTY, lbPlayerListener, Priority.Monitor, this);
} }
if (config.logBlockDestroyings) { if (config.logBlockBreaks) {
pm.registerEvent(Type.BLOCK_BREAK, lbBlockListener, Priority.Monitor, this); pm.registerEvent(Type.BLOCK_BREAK, lbBlockListener, Priority.Monitor, this);
pm.registerEvent(Type.PLAYER_BUCKET_FILL, lbPlayerListener, Priority.Monitor, this); pm.registerEvent(Type.PLAYER_BUCKET_FILL, lbPlayerListener, Priority.Monitor, this);
pm.registerEvent(Type.BLOCK_FROMTO, lbBlockListener, Priority.Monitor, this);
} }
if (config.logSignTexts) if (config.logSignTexts)
pm.registerEvent(Type.SIGN_CHANGE, lbBlockListener, Priority.Monitor, this); pm.registerEvent(Type.SIGN_CHANGE, lbBlockListener, Priority.Monitor, this);
@@ -178,8 +179,6 @@ public class LogBlock extends JavaPlugin
pm.registerEvent(Type.CUSTOM_EVENT, new LBChestAccessListener(this), Priority.Monitor, this); pm.registerEvent(Type.CUSTOM_EVENT, new LBChestAccessListener(this), Priority.Monitor, this);
else else
log.warning("[LogBlock] BukkitContrib not found. Can't log chest accesses."); log.warning("[LogBlock] BukkitContrib not found. Can't log chest accesses.");
if (config.logLavaFlow)
pm.registerEvent(Type.BLOCK_FROMTO, lbBlockListener, Priority.Monitor, this);
if (config.logButtonsAndLevers) if (config.logButtonsAndLevers)
pm.registerEvent(Type.PLAYER_INTERACT, lbPlayerListener, Priority.Monitor, this); pm.registerEvent(Type.PLAYER_INTERACT, lbPlayerListener, Priority.Monitor, this);
if (config.logKills) if (config.logKills)
@@ -202,7 +201,7 @@ public class LogBlock extends JavaPlugin
timer.scheduleAtFixedRate(consumer, config.delayBetweenRuns * 1000, config.delayBetweenRuns * 1000); timer.scheduleAtFixedRate(consumer, config.delayBetweenRuns * 1000, config.delayBetweenRuns * 1000);
log.info("[LogBlock] Scheduled consumer with timer."); log.info("[LogBlock] Scheduled consumer with timer.");
} }
log.info("Logblock v" + getDescription().getVersion() + " by DiddiZ enabled."); log.info("LogBlock v" + getDescription().getVersion() + " by DiddiZ enabled.");
} }
@Override @Override