public void RemoveBlockEntity(BlockCoordinates blockCoordinates) { ChunkColumn chunk = _worldProvider.GenerateChunkColumn(new ChunkCoordinates(blockCoordinates.X >> 4, blockCoordinates.Z >> 4)); var nbt = chunk.GetBlockEntity(blockCoordinates); if (nbt == null) { return; } var blockEntity = BlockEntities.FirstOrDefault(entity => entity.Coordinates == blockCoordinates); if (blockEntity != null) { BlockEntities.Remove(blockEntity); } chunk.RemoveBlockEntity(blockCoordinates); }
public BlockEntity GetBlockEntity(BlockCoordinates blockCoordinates) { var blockEntity = BlockEntities.FirstOrDefault(entity => entity.Coordinates == blockCoordinates); if (blockEntity != null) { return(blockEntity); } ChunkColumn chunk = _worldProvider.GenerateChunkColumn(new ChunkCoordinates(blockCoordinates.X >> 4, blockCoordinates.Z >> 4)); NbtCompound nbt = chunk?.GetBlockEntity(blockCoordinates); if (nbt == null) { return(null); } string id = null; var idTag = nbt.Get("id"); if (idTag != null) { id = idTag.StringValue; } if (string.IsNullOrEmpty(id)) { return(null); } blockEntity = BlockEntityFactory.GetBlockEntityById(id); if (blockEntity == null) { return(null); } blockEntity.Coordinates = blockCoordinates; blockEntity.SetCompound(nbt); return(blockEntity); }