Search in sources :

Example 6 with Biome

use of org.terasology.world.biomes.Biome in project Terasology by MovingBlocks.

the class WorldProviderCoreImpl method setBiome.

@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);
            }
            for (Vector3i pos : ChunkMath.getChunkRegionAroundWorldPos(worldPos, 1)) {
                RenderableChunk dirtiedChunk = chunkProvider.getChunk(pos);
                if (dirtiedChunk != null) {
                    dirtiedChunk.setDirty(true);
                }
            }
            notifyBiomeChanged(worldPos, biome, oldBiomeType);
        }
        return oldBiomeType;
    }
    return null;
}
Also used : CoreChunk(org.terasology.world.chunks.CoreChunk) Biome(org.terasology.world.biomes.Biome) BiomeChange(org.terasology.world.propagation.BiomeChange) Vector3i(org.terasology.math.geom.Vector3i) RenderableChunk(org.terasology.world.chunks.RenderableChunk)

Example 7 with Biome

use of org.terasology.world.biomes.Biome in project Terasology by MovingBlocks.

the class NetworkSystemImpl method getServerInfoMessage.

NetData.ServerInfoMessage getServerInfoMessage() {
    NetData.ServerInfoMessage.Builder serverInfoMessageBuilder = NetData.ServerInfoMessage.newBuilder();
    serverInfoMessageBuilder.setTime(time.getGameTimeInMs());
    if (config.getServerMOTD() != null) {
        serverInfoMessageBuilder.setMOTD(config.getServerMOTD());
    }
    serverInfoMessageBuilder.setOnlinePlayersAmount(clientList.size());
    WorldProvider worldProvider = context.get(WorldProvider.class);
    if (worldProvider != null) {
        NetData.WorldInfo.Builder worldInfoBuilder = NetData.WorldInfo.newBuilder();
        worldInfoBuilder.setTime(worldProvider.getTime().getMilliseconds());
        worldInfoBuilder.setTitle(worldProvider.getTitle());
        serverInfoMessageBuilder.addWorldInfo(worldInfoBuilder);
    }
    WorldGenerator worldGen = context.get(WorldGenerator.class);
    if (worldGen != null) {
        serverInfoMessageBuilder.setReflectionHeight(worldGen.getWorld().getSeaLevel());
    }
    for (Module module : CoreRegistry.get(ModuleManager.class).getEnvironment()) {
        if (!StandardModuleExtension.isServerSideOnly(module)) {
            serverInfoMessageBuilder.addModule(NetData.ModuleInfo.newBuilder().setModuleId(module.getId().toString()).setModuleVersion(module.getVersion().toString()).build());
        }
    }
    for (Map.Entry<String, Short> blockMapping : blockManager.getBlockIdMap().entrySet()) {
        serverInfoMessageBuilder.addBlockId(blockMapping.getValue());
        serverInfoMessageBuilder.addBlockName(blockMapping.getKey());
    }
    for (Biome biome : biomeManager.getBiomes()) {
        serverInfoMessageBuilder.addBiomeId(biome.getId());
        short shortId = biomeManager.getBiomeShortId(biome);
        serverInfoMessageBuilder.addBiomeShortId(shortId);
    }
    for (BlockFamily registeredBlockFamily : blockManager.listRegisteredBlockFamilies()) {
        serverInfoMessageBuilder.addRegisterBlockFamily(registeredBlockFamily.getURI().toString());
    }
    serializeComponentInfo(serverInfoMessageBuilder);
    serializeEventInfo(serverInfoMessageBuilder);
    return serverInfoMessageBuilder.build();
}
Also used : WorldGenerator(org.terasology.world.generator.WorldGenerator) ByteString(com.google.protobuf.ByteString) ModuleManager(org.terasology.engine.module.ModuleManager) Biome(org.terasology.world.biomes.Biome) WorldProvider(org.terasology.world.WorldProvider) BlockFamily(org.terasology.world.block.family.BlockFamily) Module(org.terasology.module.Module) Map(java.util.Map) TIntLongMap(gnu.trove.map.TIntLongMap) TIntLongHashMap(gnu.trove.map.hash.TIntLongHashMap)

Example 8 with Biome

use of org.terasology.world.biomes.Biome in project Terasology by MovingBlocks.

the class ServerImpl method onChunkReady.

@Override
public void onChunkReady(Vector3i chunkPos) {
    WorldProvider worldProvider = CoreRegistry.get(WorldProvider.class);
    List<NetData.BlockChangeMessage> updateBlockMessages = awaitingChunkReadyBlockUpdates.removeAll(chunkPos);
    for (NetData.BlockChangeMessage message : updateBlockMessages) {
        Vector3i pos = NetMessageUtil.convert(message.getPos());
        Block newBlock = blockManager.getBlock((short) message.getNewBlock());
        worldProvider.setBlock(pos, newBlock);
    }
    List<NetData.BiomeChangeMessage> updateBiomeMessages = awaitingChunkReadyBiomeUpdates.removeAll(chunkPos);
    for (NetData.BiomeChangeMessage message : updateBiomeMessages) {
        Vector3i pos = NetMessageUtil.convert(message.getPos());
        Biome newBiome = biomeManager.getBiomeByShortId((short) message.getNewBiome());
        worldProvider.setBiome(pos, newBiome);
    }
}
Also used : Biome(org.terasology.world.biomes.Biome) NetData(org.terasology.protobuf.NetData) WorldProvider(org.terasology.world.WorldProvider) Vector3i(org.terasology.math.geom.Vector3i) Block(org.terasology.world.block.Block)

Example 9 with Biome

use of org.terasology.world.biomes.Biome in project Terasology by MovingBlocks.

the class KinematicCharacterMover method checkBlockEntry.

/*
    * Figure out if our position has put us into a new set of blocks and fire the appropriate events.
    */
private void checkBlockEntry(EntityRef entity, Vector3i oldPosition, Vector3i newPosition, float characterHeight) {
    // is this a different position than previously
    if (!oldPosition.equals(newPosition)) {
        Biome oldBiome = worldProvider.getBiome(oldPosition);
        Biome newBiome = worldProvider.getBiome(newPosition);
        if (oldBiome != newBiome) {
            entity.send(new OnEnterBiomeEvent(oldPosition, newPosition, oldBiome, newBiome));
        }
        // get the old position's blocks
        Block[] oldBlocks = new Block[(int) Math.ceil(characterHeight)];
        Vector3i currentPosition = new Vector3i(oldPosition);
        for (int currentHeight = 0; currentHeight < oldBlocks.length; currentHeight++) {
            oldBlocks[currentHeight] = worldProvider.getBlock(currentPosition);
            currentPosition.add(0, 1, 0);
        }
        // get the new position's blocks
        Block[] newBlocks = new Block[(int) Math.ceil(characterHeight)];
        currentPosition = new Vector3i(newPosition);
        for (int currentHeight = 0; currentHeight < characterHeight; currentHeight++) {
            newBlocks[currentHeight] = worldProvider.getBlock(currentPosition);
            currentPosition.add(0, 1, 0);
        }
        for (int i = 0; i < characterHeight; i++) {
            // send a block enter/leave event for this character
            entity.send(new OnEnterBlockEvent(oldBlocks[i], newBlocks[i], new Vector3i(0, i, 0)));
        }
    }
}
Also used : Biome(org.terasology.world.biomes.Biome) Vector3i(org.terasology.math.geom.Vector3i) Block(org.terasology.world.block.Block) OnEnterBiomeEvent(org.terasology.logic.characters.events.OnEnterBiomeEvent) OnEnterBlockEvent(org.terasology.logic.characters.events.OnEnterBlockEvent)

Aggregations

Biome (org.terasology.world.biomes.Biome)9 Vector3i (org.terasology.math.geom.Vector3i)7 WorldProvider (org.terasology.world.WorldProvider)4 Block (org.terasology.world.block.Block)4 ModuleManager (org.terasology.engine.module.ModuleManager)2 Module (org.terasology.module.Module)2 NetData (org.terasology.protobuf.NetData)2 BiomeManager (org.terasology.world.biomes.BiomeManager)2 BlockFamily (org.terasology.world.block.family.BlockFamily)2 ByteString (com.google.protobuf.ByteString)1 TIntLongMap (gnu.trove.map.TIntLongMap)1 TIntLongHashMap (gnu.trove.map.hash.TIntLongHashMap)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 CoreBiome (org.terasology.core.world.CoreBiome)1 BiomeFacet (org.terasology.core.world.generator.facets.BiomeFacet)1 Time (org.terasology.engine.Time)1 Game (org.terasology.game.Game)1 GameManifest (org.terasology.game.GameManifest)1 OnEnterBiomeEvent (org.terasology.logic.characters.events.OnEnterBiomeEvent)1