@Override public Biome setBiome(Vector3i worldPos, Biome biome) { Vector3i chunkPos = ChunkMath.calcChunkPos(worldPos); CoreChunk chunk = chunkProvider.getChunk(chunkPos); if (chunk != null) { Vector3i blockPos = ChunkMath.calcBlockPos(worldPos); Biome oldBiomeType = chunk.setBiome(blockPos.x, blockPos.y, blockPos.z, biome); if (oldBiomeType != biome) { BiomeChange oldChange = biomeChanges.get(worldPos); if (oldChange == null) { biomeChanges.put(worldPos, new BiomeChange(worldPos, oldBiomeType, biome)); } else { oldChange.setTo(biome); } setDirtyChunksNear(worldPos); notifyBiomeChanged(worldPos, biome, oldBiomeType); } return oldBiomeType; } return null; }
@Override public Block setBlock(Vector3i worldPos, Block type) { /* * Hint: This method has a benchmark available in the BenchmarkScreen, The screen can be opened ingame via the * command "showSCreen BenchmarkScreen". */ Vector3i chunkPos = ChunkMath.calcChunkPos(worldPos); CoreChunk chunk = chunkProvider.getChunk(chunkPos); if (chunk != null) { 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); } setDirtyChunksNear(worldPos); notifyBlockChanged(worldPos, type, oldBlockType); } return oldBlockType; } return null; }
@Override public int setExtraData(int index, Vector3i worldPos, int value) { Vector3i chunkPos = ChunkMath.calcChunkPos(worldPos); CoreChunk chunk = chunkProvider.getChunk(chunkPos); if (chunk != null) { Vector3i blockPos = ChunkMath.calcBlockPos(worldPos); int oldValue = chunk.getExtraData(index, blockPos.x, blockPos.y, blockPos.z); chunk.setExtraData(index, blockPos.x, blockPos.y, blockPos.z, value); if (oldValue != value) { setDirtyChunksNear(worldPos); notifyExtraDataChanged(index, worldPos, value, oldValue); } return oldValue; } return 0; }
context.get(ComponentSystemManager.class).register(new RelevanceSystem(chunkProvider), "engine:relevanceSystem"); Block unloadedBlock = blockManager.getBlock(BlockManager.UNLOADED_ID); WorldProviderCoreImpl worldProviderCore = new WorldProviderCoreImpl(worldInfo, chunkProvider, unloadedBlock, context); EntityAwareWorldProvider entityWorldProvider = new EntityAwareWorldProvider(worldProviderCore, context); WorldProvider worldProvider = new WorldProviderWrapper(entityWorldProvider, extraDataManager);
WorldProviderCoreImpl worldProviderCore = new WorldProviderCoreImpl(gameManifest.getWorldInfo(TerasologyConstants.MAIN_WORLD), chunkProvider, blockManager.getBlock(BlockManager.UNLOADED_ID), context); EntityAwareWorldProvider entityWorldProvider = new EntityAwareWorldProvider(worldProviderCore, context);
oldChange.setTo(type); setDirtyChunksNear(worldPos); changedBlocks.add(new BlockChange(worldPos, oldBlockType, type)); notifyBlockChanged(change.getPosition(), change.getTo(), change.getFrom());