public override void OnServerGameTick(IWorldAccessor world, BlockPos pos, object extra = null) { // We cannot call the base method, otherwise we'll destroy the chiseled block // base.OnServerGameTick(world, pos, extra); if (extra is string && (string)extra == "melt") { BlockEntityMicroBlock bec = world.BlockAccessor.GetBlockEntity(pos) as BlockEntityMicroBlock; if (this == snowCovered3) { world.BlockAccessor.ExchangeBlock(snowCovered2.Id, pos); bec.SnowLevel = 0; bec.MarkDirty(true); } else if (this == snowCovered2) { world.BlockAccessor.ExchangeBlock(snowCovered1.Id, pos); bec.SnowLevel = 0; bec.MarkDirty(true); } else if (this == snowCovered1) { world.BlockAccessor.ExchangeBlock(notSnowCovered.Id, pos); bec.SnowLevel = 0; bec.MarkDirty(true); } } }
public override void OnNeighbourBlockChange(IWorldAccessor world, BlockPos pos, BlockPos neibpos) { // We cannot call the base method, otherwise we'll destroy the chiseled block //base.OnNeighbourBlockChange(world, pos, neibpos); if (pos.X == neibpos.X && pos.Z == neibpos.Z && pos.Y + 1 == neibpos.Y && world.BlockAccessor.GetBlock(neibpos).Id != 0) { BlockEntityMicroBlock bec = world.BlockAccessor.GetBlockEntity(pos) as BlockEntityMicroBlock; if (bec.SnowLevel > 0) { world.BlockAccessor.ExchangeBlock(notSnowCovered.Id, pos); bec.SnowLevel = 0; bec.MarkDirty(true); } } }
public override void OnBlockPlaced(IWorldAccessor world, BlockPos blockPos, ItemStack byItemStack) { base.OnBlockPlaced(world, blockPos, byItemStack); BlockEntityMicroBlock be = world.BlockAccessor.GetBlockEntity(blockPos) as BlockEntityMicroBlock; if (be != null && byItemStack != null) { ITreeAttribute tree = byItemStack.Attributes.Clone(); tree.SetInt("posx", blockPos.X); tree.SetInt("posy", blockPos.Y); tree.SetInt("posz", blockPos.Z); be.FromTreeAttributes(tree, world); be.MarkDirty(true); if (world.Side == EnumAppSide.Client) { be.RegenMesh(); } be.RegenSelectionBoxes(null); } }