public static void blockSquash(object sender, PlayerPlacingBlockEventArgs e)
{
try {
Player player = e.Player;
World world = player.World;
if (null == world)
{
return;
}
lock (world.SyncRoot) {
if (null != world.Map && world.IsLoaded && world.plantPhysics)
{
if (e.NewBlock == Block.Plant)
{
world.AddPhysicsTask(new PlantTask(world, ( short )e.Coords.X, ( short )e.Coords.Y, ( short )e.Coords.Z), PlantTask.GetRandomDelay());
}
Vector3I z = new Vector3I(e.Coords.X, e.Coords.Y, e.Coords.Z - 1);
if (world.Map.GetBlock(z) == Block.Grass && e.NewBlock != Block.Air)
{
world.Map.QueueUpdate(new BlockUpdate(null, z, Block.Dirt));
}
else if (Physics.CanSquash(world.Map.GetBlock(z)) && e.NewBlock != Block.Air)
{
e.Result = CanPlaceResult.Revert;
Player.RaisePlayerPlacedBlockEvent(player, world.Map, z, world.Map.GetBlock(z), e.NewBlock, BlockChangeContext.Physics);
world.Map.QueueUpdate(new BlockUpdate(null, z, e.NewBlock));
}
}
}
} catch (Exception ex) {
Logger.Log(LogType.SeriousError, "BlockSquash" + ex);
}
}