protected void UpdateBlocks(Level world) { world.GetBlock(Coordinates.BlockUp()).BlockUpdate(world, Coordinates); world.GetBlock(Coordinates.BlockDown()).BlockUpdate(world, Coordinates); world.GetBlock(Coordinates.BlockWest()).BlockUpdate(world, Coordinates); world.GetBlock(Coordinates.BlockEast()).BlockUpdate(world, Coordinates); world.GetBlock(Coordinates.BlockSouth()).BlockUpdate(world, Coordinates); world.GetBlock(Coordinates.BlockNorth()).BlockUpdate(world, Coordinates); }
public override void DoPhysics(Level level) { if (level.GameMode == GameMode.Creative) { return; } if (level.GetSubtractedLight(Coordinates.BlockUp()) < 4) { Block dirt = BlockFactory.GetBlockById(3); dirt.Coordinates = Coordinates; level.SetBlock(dirt, true, false, false); } }
public override void OnTick(Level level, bool isRandom) { if (level.GameMode == GameMode.Creative) { return; } if (!isRandom) { return; } var lightLevel = level.GetSubtractedLight(Coordinates.BlockUp()); if (lightLevel < 4 /* && check opacity */) { Block dirt = BlockFactory.GetBlockById(3); dirt.Coordinates = Coordinates; level.SetBlock(dirt, true, false, false); } else { if (lightLevel >= 9) { Random random = new Random(); for (int i = 0; i < 4; i++) { var coordinates = Coordinates + new BlockCoordinates(random.Next(3) - 1, random.Next(5) - 3, random.Next(3) - 1); Block next = level.GetBlock(coordinates); if (next is Dirt && next.Metadata == 0) { Block nextUp = level.GetBlock(coordinates.BlockUp()); if (nextUp.IsTransparent && (nextUp.BlockLight >= 4 || nextUp.SkyLight >= 4)) { level.SetBlock(new Grass { Coordinates = coordinates }); } } } } } }
public override void BlockUpdate(Level level, BlockCoordinates blockCoordinates) { bool shouldKeep = true; shouldKeep &= IsValid(level.GetBlock(Coordinates.BlockUp())); shouldKeep &= IsValid(level.GetBlock(Coordinates.BlockDown())); if (Metadata < 2) { shouldKeep &= IsValid(level.GetBlock(Coordinates.BlockWest())); shouldKeep &= IsValid(level.GetBlock(Coordinates.BlockEast())); } else { shouldKeep &= IsValid(level.GetBlock(Coordinates.BlockSouth())); shouldKeep &= IsValid(level.GetBlock(Coordinates.BlockNorth())); } if (!shouldKeep) { Fill(level, Coordinates); } }