Rewritten "onliquid" check to maybe avoid problems some people have

This commit is contained in:
Evenprime 2011-09-15 22:02:54 +02:00
parent 248a4867a6
commit 3943812b8c

View File

@ -2,7 +2,9 @@ package cc.co.evenprime.bukkit.nocheat.checks.blockplace;
import java.util.HashMap;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import cc.co.evenprime.bukkit.nocheat.NoCheat;
@ -15,7 +17,7 @@ import cc.co.evenprime.bukkit.nocheat.data.BlockPlaceData;
/**
*
* @author Evenprime
*
*
*/
public class OnLiquidCheck {
@ -24,15 +26,18 @@ public class OnLiquidCheck {
public OnLiquidCheck(NoCheat plugin) {
action = new ActionExecutorWithHistory(plugin);
}
public boolean check(Player player, Block blockPlaced, Block blockPlacedAgainst, BlockPlaceData data, ConfigurationCache cc) {
boolean cancel = false;
if(blockPlaced == null || blockPlaced.isLiquid() || blockPlaced.isEmpty()) {
// all ok
} else if(blockPlacedAgainst != null && (blockPlacedAgainst.isLiquid() || blockPlacedAgainst.isEmpty())) {
if(blockPlaced == null) {
// all ok
} else if(blockPlacedAgainst != null && isSolid(blockPlacedAgainst)) {
// all ok
} else if(isSolid(blockPlaced.getRelative(BlockFace.DOWN)) || isSolid(blockPlaced.getRelative(BlockFace.WEST)) || isSolid(blockPlaced.getRelative(BlockFace.EAST)) || isSolid(blockPlaced.getRelative(BlockFace.NORTH)) || isSolid(blockPlaced.getRelative(BlockFace.SOUTH)) || isSolid(blockPlaced.getRelative(BlockFace.UP))) {
// all ok
} else {
data.onliquidViolationLevel += 1;
HashMap<String, String> params = new HashMap<String, String>();
params.put(LogAction.CHECK, "blockplace.onliquid");
@ -41,7 +46,12 @@ public class OnLiquidCheck {
}
data.onliquidViolationLevel *= 0.95D; // Reduce level over time
return cancel;
}
public boolean isSolid(Block block) {
Material m = block.getType();
return !(m == Material.AIR) || (m == Material.WATER) || (m == Material.STATIONARY_WATER) || (m == Material.LAVA) || (m == Material.STATIONARY_LAVA);
}
}