Search in sources :

Example 6 with CoreChunk

use of org.terasology.world.chunks.CoreChunk in project Terasology by MovingBlocks.

the class WorldProviderCoreImpl method setBlocks.

@Override
public Map<Vector3i, Block> setBlocks(Map<Vector3i, Block> blocks) {
    /*
         * Hint: This method has a benchmark available in the BenchmarkScreen, The screen can be opened ingame via the
         * command "showSCreen BenchmarkScreen".
         */
    Set<RenderableChunk> dirtiedChunks = new HashSet<>();
    Set<BlockChange> changedBlocks = new HashSet<>();
    Map<Vector3i, Block> result = new HashMap<>(blocks.size());
    for (Map.Entry<Vector3i, Block> entry : blocks.entrySet()) {
        Vector3i worldPos = entry.getKey();
        Vector3i chunkPos = ChunkMath.calcChunkPos(worldPos);
        CoreChunk chunk = chunkProvider.getChunk(chunkPos);
        if (chunk != null) {
            Block type = entry.getValue();
            Vector3i blockPos = ChunkMath.calcBlockPos(worldPos);
            Block oldBlockType = chunk.setBlock(blockPos, type);
            if (oldBlockType != type) {
                BlockChange oldChange = blockChanges.get(worldPos);
                if (oldChange == null) {
                    blockChanges.put(worldPos, new BlockChange(worldPos, oldBlockType, type));
                } else {
                    oldChange.setTo(type);
                }
                for (Vector3i pos : ChunkMath.getChunkRegionAroundWorldPos(worldPos, 1)) {
                    RenderableChunk dirtiedChunk = chunkProvider.getChunk(pos);
                    if (dirtiedChunk != null) {
                        dirtiedChunks.add(dirtiedChunk);
                    }
                }
                changedBlocks.add(new BlockChange(worldPos, oldBlockType, type));
            }
            result.put(worldPos, oldBlockType);
        } else {
            result.put(worldPos, null);
        }
    }
    for (RenderableChunk chunk : dirtiedChunks) {
        chunk.setDirty(true);
    }
    for (BlockChange change : changedBlocks) {
        notifyBlockChanged(change.getPosition(), change.getTo(), change.getFrom());
    }
    return result;
}
Also used : CoreChunk(org.terasology.world.chunks.CoreChunk) BlockChange(org.terasology.world.propagation.BlockChange) HashMap(java.util.HashMap) RenderableChunk(org.terasology.world.chunks.RenderableChunk) Vector3i(org.terasology.math.geom.Vector3i) Block(org.terasology.world.block.Block) HashMap(java.util.HashMap) Map(java.util.Map) HashSet(java.util.HashSet)

Example 7 with CoreChunk

use of org.terasology.world.chunks.CoreChunk in project Terasology by MovingBlocks.

the class WorldProviderCoreImpl method getBiome.

@Override
public Biome getBiome(Vector3i pos) {
    Vector3i chunkPos = ChunkMath.calcChunkPos(pos);
    CoreChunk chunk = chunkProvider.getChunk(chunkPos);
    if (chunk != null) {
        Vector3i blockPos = ChunkMath.calcBlockPos(pos);
        return chunk.getBiome(blockPos.x, blockPos.y, blockPos.z);
    }
    return BiomeManager.getUnknownBiome();
}
Also used : CoreChunk(org.terasology.world.chunks.CoreChunk) Vector3i(org.terasology.math.geom.Vector3i)

Aggregations

CoreChunk (org.terasology.world.chunks.CoreChunk)7 Vector3i (org.terasology.math.geom.Vector3i)6 Block (org.terasology.world.block.Block)3 RenderableChunk (org.terasology.world.chunks.RenderableChunk)3 Map (java.util.Map)2 LiquidData (org.terasology.world.liquid.LiquidData)2 BlockChange (org.terasology.world.propagation.BlockChange)2 ImmutableList (com.google.common.collect.ImmutableList)1 Maps (com.google.common.collect.Maps)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 List (java.util.List)1 FloraFacet (org.terasology.core.world.generator.facets.FloraFacet)1 BaseVector3i (org.terasology.math.geom.BaseVector3i)1 CoreRegistry (org.terasology.registry.CoreRegistry)1 WhiteNoise (org.terasology.utilities.procedural.WhiteNoise)1 Biome (org.terasology.world.biomes.Biome)1 BlockManager (org.terasology.world.block.BlockManager)1 Region (org.terasology.world.generation.Region)1 WorldRasterizer (org.terasology.world.generation.WorldRasterizer)1