From 9db56bbf875fb6872eaf4986dface7bd95d66a98 Mon Sep 17 00:00:00 2001 From: s809 <43530948+s809@users.noreply.github.com> Date: Tue, 22 Aug 2023 20:41:42 +0500 Subject: [PATCH] test --- .../core/level/DhServerLevel.java | 41 +++++++++++-------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/level/DhServerLevel.java b/core/src/main/java/com/seibel/distanthorizons/core/level/DhServerLevel.java index d5e533e17..6cf5a62d8 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/level/DhServerLevel.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/level/DhServerLevel.java @@ -30,6 +30,7 @@ import org.apache.logging.log4j.Logger; import javax.annotation.CheckForNull; import java.util.Map; +import java.util.Objects; import java.util.concurrent.*; public class DhServerLevel extends DhLevel implements IDhServerLevel @@ -195,9 +196,16 @@ public class DhServerLevel extends DhLevel implements IDhServerLevel @Override public CompletableFuture updateChunkAsync(IChunkWrapper chunk) { - DhSectionPos sectionPos = new DhSectionPos(chunk.getChunkPos()).convertToDetailLevel(DhSectionPos.SECTION_MINIMUM_DETAIL_LEVEL); + DhSectionPos sectionPos = new DhSectionPos( + LodUtil.BLOCK_DETAIL_LEVEL, + chunk.getMinBlockX(), + chunk.getMinBlockZ() + ).convertToDetailLevel(DhSectionPos.SECTION_BLOCK_DETAIL_LEVEL); FullDataMetaFile metaFile = this.serverside.dataFileHandler.getFileIfExist(sectionPos); - int prevChecksum = metaFile != null ? metaFile.baseMetaData.checksum : 0; + + if (metaFile == null) + return super.updateChunkAsync(chunk); + int prevChecksum = metaFile.baseMetaData.checksum; CompletableFuture future = super.updateChunkAsync(chunk); if (future == null) @@ -205,24 +213,25 @@ public class DhServerLevel extends DhLevel implements IDhServerLevel future.thenRun(() -> { - if (metaFile == null || metaFile.baseMetaData.checksum == prevChecksum) + FullDataMetaFile changedMetaFile = this.serverside.dataFileHandler.getFileIfExist(sectionPos); + Objects.requireNonNull(changedMetaFile, "Failed to get meta file for section pos " + sectionPos); + + if (changedMetaFile.baseMetaData.checksum == prevChecksum) return; - this.serverside.dataFileHandler.read(sectionPos).thenAccept(fullDataSource -> + IFullDataSource fullDataSource = changedMetaFile.getCachedDataSourceNowOrNull(); + if (!(fullDataSource instanceof CompleteFullDataSource)) + return; + CompleteFullDataSource completeSource = (CompleteFullDataSource) fullDataSource; + + for (IServerPlayerWrapper serverPlayer : worldGenLoopingQueue) { - if (!(fullDataSource instanceof CompleteFullDataSource)) - return; - CompleteFullDataSource completeSource = (CompleteFullDataSource) fullDataSource; + ServerPlayerState serverPlayerState = remotePlayerConnectionHandler.getPlayer(serverPlayer); + if (serverPlayerState == null) continue; - for (IServerPlayerWrapper serverPlayer : worldGenLoopingQueue) - { - ServerPlayerState serverPlayerState = remotePlayerConnectionHandler.getPlayer(serverPlayer); - if (serverPlayerState == null) continue; - - if (chunk.getChunkPos().distance(new DhChunkPos(serverPlayer.getPosition())) <= serverPlayerState.config.renderDistance) - serverPlayerState.channelContext.writeAndFlush(new FullDataSourceUpdateMessage(completeSource, this)); - } - }); + if (chunk.getChunkPos().distance(new DhChunkPos(serverPlayer.getPosition())) <= serverPlayerState.config.renderDistance) + serverPlayerState.channelContext.writeAndFlush(new FullDataSourceUpdateMessage(completeSource, this)); + } }); return future;