diff --git a/src/main/java/com/github/halotroop/litecraft/world/Chunk.java b/src/main/java/com/github/halotroop/litecraft/world/Chunk.java index 6cda1c9..54464f6 100644 --- a/src/main/java/com/github/halotroop/litecraft/world/Chunk.java +++ b/src/main/java/com/github/halotroop/litecraft/world/Chunk.java @@ -184,6 +184,14 @@ public class Chunk implements BlockAccess, WorldGenConstants, DataStorage } } } + // + DataSection properties = data.get("properties"); + try + { + this.fullyGenerated = properties.readBoolean(0); // index 0 is the "fully generated" property + } + catch (Throwable e) + { System.out.println("An exception occurred reading properties for a chunk! This could be a benign error due to updates to chunk properties.");} } private int nextId; // for saving @@ -219,6 +227,10 @@ public class Chunk implements BlockAccess, WorldGenConstants, DataStorage // data.put("palette", paletteData); data.put("block", blockData); + // + DataSection properties = new DataSection(); + properties.writeBoolean(this.fullyGenerated); + data.put("properties", properties); dirty = true; } } diff --git a/src/main/java/com/github/halotroop/litecraft/world/World.java b/src/main/java/com/github/halotroop/litecraft/world/World.java index 71a8b51..975da56 100644 --- a/src/main/java/com/github/halotroop/litecraft/world/World.java +++ b/src/main/java/com/github/halotroop/litecraft/world/World.java @@ -57,7 +57,7 @@ public class World implements BlockAccess, WorldGenConstants for (int i = (0 - (size / 2)); i < (size / 2); i++) for (int k = (0 - (size / 2)); k < (size / 2); k++) for (int y = -2; y < 0; ++y) - this.getChunk(i, y, k).setRender(true); + this.loadChunk(i, y, k).setRender(true); System.out.println("Generated world in " + (System.currentTimeMillis() - time) + " milliseconds"); } @@ -74,6 +74,15 @@ public class World implements BlockAccess, WorldGenConstants return chunk; } + public Chunk loadChunk(int chunkX, int chunkY, int chunkZ) + { + return this.chunks.computeIfAbsent(posHash(chunkX, chunkY, chunkZ), pos -> + { + Chunk readChunk = save.readChunk(chunkX, chunkY, chunkZ, this.dimension); + return readChunk == null ? this.chunkGenerator.generateChunk(chunkX, chunkY, chunkZ) : readChunk; + }); + } + /** @return whether the chunk was unloaded without errors. Will often, but not always, be equal to whether the chunk was already in memory. */ public boolean unloadChunk(int chunkX, int chunkY, int chunkZ) {