forked from LogBlock/LogBlock
Added WaterFlowLogging. Added logging for nonsolid blocks destroyed by
fluids.
This commit is contained in:
@@ -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);
|
||||||
|
@@ -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();
|
||||||
|
@@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user