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;
}
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();
}
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);
}
}
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)));
}
}
}
Aggregations