private void processInvalidatedChunks(NetData.NetMessage message) { for (NetData.InvalidateChunkMessage chunk : message.getInvalidateChunkList()) { Vector3i chunkPos = NetMessageUtil.convert(chunk.getPos()); remoteWorldProvider.invalidateChunks(chunkPos); awaitingChunkReadyBlockUpdates.removeAll(chunkPos); awaitingChunkReadyBiomeUpdates.removeAll(chunkPos); } }
@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); } }
private void processBlockChanges(NetData.NetMessage message) { for (NetData.BlockChangeMessage blockChange : message.getBlockChangeList()) { Block newBlock = blockManager.getBlock((short) blockChange.getNewBlock()); logger.debug("Received block change to {}", newBlock); // TODO: Store changes to blocks that aren't ready to be modified (the surrounding chunks // aren't available) WorldProvider worldProvider = CoreRegistry.get(WorldProvider.class); Vector3i pos = NetMessageUtil.convert(blockChange.getPos()); if (worldProvider.isBlockRelevant(pos)) { worldProvider.setBlock(pos, newBlock); } else { awaitingChunkReadyBlockUpdates.put(ChunkMath.calcChunkPos(pos), blockChange); } } }
private void processEvent(NetData.EventMessage message) { try { Event event = eventSerializer.deserialize(message.getEvent()); EntityRef target = EntityRef.NULL; if (message.hasTargetBlockPos()) { target = blockEntityRegistry.getBlockEntityAt( NetMessageUtil.convert(message.getTargetBlockPos())); } else if (message.hasTargetId()) { target = networkSystem.getEntity(message.getTargetId()); } if (target.exists()) { target.send(event); } else { logger.info( "Dropping event {} for unavailable entity {}", event.getClass().getSimpleName(), target); } } catch (DeserializationException e) { logger.error("Failed to deserialize event", e); } }