forked from LogBlock/LogBlock
Optionally log fluid flow as the player who created the fluid
This commit is contained in:
@ -35,6 +35,7 @@ public class Config {
|
||||
public static boolean logBedExplosionsAsPlayerWhoTriggeredThese;
|
||||
public static boolean logCreeperExplosionsAsPlayerWhoTriggeredThese, logPlayerInfo;
|
||||
public static boolean logFireSpreadAsPlayerWhoCreatedIt;
|
||||
public static boolean logFluidFlowAsPlayerWhoTriggeredIt;
|
||||
public static LogKillsLevel logKillsLevel;
|
||||
public static Set<Material> dontRollback, replaceAnyway;
|
||||
public static int rollbackMaxTime, rollbackMaxArea;
|
||||
@ -95,6 +96,7 @@ public class Config {
|
||||
def.put("logging.logBedExplosionsAsPlayerWhoTriggeredThese", true);
|
||||
def.put("logging.logCreeperExplosionsAsPlayerWhoTriggeredThese", false);
|
||||
def.put("logging.logFireSpreadAsPlayerWhoCreatedIt", true);
|
||||
def.put("logging.logFluidFlowAsPlayerWhoTriggeredIt", false);
|
||||
def.put("logging.logKillsLevel", "PLAYERS");
|
||||
def.put("logging.logEnvironmentalKills", false);
|
||||
def.put("logging.logPlayerInfo", false);
|
||||
@ -172,6 +174,7 @@ public class Config {
|
||||
logBedExplosionsAsPlayerWhoTriggeredThese = config.getBoolean("logging.logBedExplosionsAsPlayerWhoTriggeredThese", true);
|
||||
logCreeperExplosionsAsPlayerWhoTriggeredThese = config.getBoolean("logging.logCreeperExplosionsAsPlayerWhoTriggeredThese", false);
|
||||
logFireSpreadAsPlayerWhoCreatedIt = config.getBoolean("logging.logFireSpreadAsPlayerWhoCreatedIt", true);
|
||||
logFluidFlowAsPlayerWhoTriggeredIt = config.getBoolean("logging.logFluidFlowAsPlayerWhoTriggeredIt", false);
|
||||
logPlayerInfo = config.getBoolean("logging.logPlayerInfo", true);
|
||||
try {
|
||||
logKillsLevel = LogKillsLevel.valueOf(config.getString("logging.logKillsLevel").toUpperCase());
|
||||
|
@ -3,6 +3,7 @@ package de.diddiz.LogBlock.listeners;
|
||||
import de.diddiz.LogBlock.Actor;
|
||||
import de.diddiz.LogBlock.LogBlock;
|
||||
import de.diddiz.LogBlock.Logging;
|
||||
import de.diddiz.LogBlock.config.Config;
|
||||
import de.diddiz.LogBlock.config.WorldConfig;
|
||||
import de.diddiz.util.BukkitUtils;
|
||||
|
||||
@ -29,56 +30,57 @@ public class FluidFlowLogging extends LoggingListener {
|
||||
if (wcfg != null) {
|
||||
final BlockData blockDataFrom = event.getBlock().getBlockData();
|
||||
final Material typeFrom = blockDataFrom.getMaterial();
|
||||
|
||||
|
||||
Block source = Config.logFluidFlowAsPlayerWhoTriggeredIt ? event.getBlock() : null;
|
||||
final Block to = event.getToBlock();
|
||||
final Material typeTo = to.getType();
|
||||
final boolean canFlow = BukkitUtils.isEmpty(typeTo) || BukkitUtils.getNonFluidProofBlocks().contains(typeTo);
|
||||
if (typeFrom == Material.LAVA && wcfg.isLogging(Logging.LAVAFLOW)) {
|
||||
Levelled levelledFrom = (Levelled)blockDataFrom;
|
||||
Levelled levelledFrom = (Levelled) blockDataFrom;
|
||||
if (canFlow) {
|
||||
if (isSurroundedByWater(to) && levelledFrom.getLevel() <= 2) {
|
||||
consumer.queueBlockReplace(new Actor("LavaFlow"), to.getState(), Material.COBBLESTONE.createBlockData());
|
||||
consumer.queueBlockReplace(new Actor("LavaFlow", source), to.getState(), Material.COBBLESTONE.createBlockData());
|
||||
} else {
|
||||
Levelled newBlock = (Levelled) blockDataFrom.clone();
|
||||
newBlock.setLevel(levelledFrom.getLevel() + 1);
|
||||
if (BukkitUtils.isEmpty(typeTo)) {
|
||||
consumer.queueBlockPlace(new Actor("LavaFlow"), to.getLocation(), newBlock);
|
||||
consumer.queueBlockPlace(new Actor("LavaFlow", source), to.getLocation(), newBlock);
|
||||
} else {
|
||||
consumer.queueBlockReplace(new Actor("LavaFlow"), to.getState(), newBlock);
|
||||
consumer.queueBlockReplace(new Actor("LavaFlow", source), to.getState(), newBlock);
|
||||
}
|
||||
}
|
||||
} else if (typeTo == Material.WATER) {
|
||||
if (event.getFace() == BlockFace.DOWN) {
|
||||
consumer.queueBlockReplace(new Actor("LavaFlow"), to.getState(), Material.STONE.createBlockData());
|
||||
consumer.queueBlockReplace(new Actor("LavaFlow", source), to.getState(), Material.STONE.createBlockData());
|
||||
} else {
|
||||
consumer.queueBlockReplace(new Actor("LavaFlow"), to.getState(), Material.COBBLESTONE.createBlockData());
|
||||
consumer.queueBlockReplace(new Actor("LavaFlow", source), to.getState(), Material.COBBLESTONE.createBlockData());
|
||||
}
|
||||
}
|
||||
} else if ((typeFrom == Material.WATER) && wcfg.isLogging(Logging.WATERFLOW)) {
|
||||
Levelled levelledFrom = (Levelled)blockDataFrom;
|
||||
Levelled levelledFrom = (Levelled) blockDataFrom;
|
||||
Levelled newBlock = (Levelled) blockDataFrom.clone();
|
||||
newBlock.setLevel(levelledFrom.getLevel() + 1);
|
||||
if (BukkitUtils.isEmpty(typeTo)) {
|
||||
consumer.queueBlockPlace(new Actor("WaterFlow"), to.getLocation(), newBlock);
|
||||
consumer.queueBlockPlace(new Actor("WaterFlow", source), to.getLocation(), newBlock);
|
||||
} else if (BukkitUtils.getNonFluidProofBlocks().contains(typeTo)) {
|
||||
consumer.queueBlockReplace(new Actor("WaterFlow"), to.getState(), newBlock);
|
||||
consumer.queueBlockReplace(new Actor("WaterFlow", source), to.getState(), newBlock);
|
||||
} else if (typeTo == Material.LAVA) {
|
||||
int toLevel = ((Levelled)to.getBlockData()).getLevel();
|
||||
int toLevel = ((Levelled) to.getBlockData()).getLevel();
|
||||
if (toLevel == 0) {
|
||||
consumer.queueBlockReplace(new Actor("WaterFlow"), to.getState(), Material.OBSIDIAN.createBlockData());
|
||||
consumer.queueBlockReplace(new Actor("WaterFlow", source), to.getState(), Material.OBSIDIAN.createBlockData());
|
||||
} else if (event.getFace() == BlockFace.DOWN) {
|
||||
consumer.queueBlockReplace(new Actor("WaterFlow"), to.getState(), Material.STONE.createBlockData());
|
||||
consumer.queueBlockReplace(new Actor("WaterFlow", source), to.getState(), Material.STONE.createBlockData());
|
||||
}
|
||||
}
|
||||
if (BukkitUtils.isEmpty(typeTo) || BukkitUtils.getNonFluidProofBlocks().contains(typeTo)) {
|
||||
for (final BlockFace face : new BlockFace[]{BlockFace.DOWN, BlockFace.NORTH, BlockFace.WEST, BlockFace.EAST, BlockFace.SOUTH}) {
|
||||
for (final BlockFace face : new BlockFace[] { BlockFace.DOWN, BlockFace.NORTH, BlockFace.WEST, BlockFace.EAST, BlockFace.SOUTH }) {
|
||||
final Block lower = to.getRelative(face);
|
||||
if (lower.getType() == Material.LAVA) {
|
||||
int toLevel = ((Levelled)lower.getBlockData()).getLevel();
|
||||
int toLevel = ((Levelled) lower.getBlockData()).getLevel();
|
||||
if (toLevel == 0) {
|
||||
consumer.queueBlockReplace(new Actor("WaterFlow"), lower.getState(), Material.OBSIDIAN.createBlockData());
|
||||
consumer.queueBlockReplace(new Actor("WaterFlow", source), lower.getState(), Material.OBSIDIAN.createBlockData());
|
||||
} else if (event.getFace() == BlockFace.DOWN) {
|
||||
consumer.queueBlockReplace(new Actor("WaterFlow"), lower.getState(), Material.STONE.createBlockData());
|
||||
consumer.queueBlockReplace(new Actor("WaterFlow", source), lower.getState(), Material.STONE.createBlockData());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user