diff --git a/src/main/java/morlok8k/MinecraftLandGenerator/MinecraftLandGenerator.java b/src/main/java/morlok8k/MinecraftLandGenerator/MinecraftLandGenerator.java index 8da55a0..3e87321 100644 --- a/src/main/java/morlok8k/MinecraftLandGenerator/MinecraftLandGenerator.java +++ b/src/main/java/morlok8k/MinecraftLandGenerator/MinecraftLandGenerator.java @@ -240,18 +240,18 @@ public class MinecraftLandGenerator implements Runnable { .distinct().parallel() .flatMap(v -> world.availableChunks(v, dimension) .map(w -> new Vector2i((v.x << 5) | w.x, (v.y << 5) | w.y))) - .collect(Collectors.toList())); + .collect(Collectors.toSet())); log.debug( "Removed " + (size - loadedChunks.size()) + " chunks that are already present"); } log.info("Generating world"); if (loadedChunks.size() < 5000) - log.debug("Chunks to generate: " + loadedChunks); + log.debug(loadedChunks.size() + " chunks to generate: " + loadedChunks); else log.debug(loadedChunks.size() + " chunks to generate"); int stepCount = (int) Math.ceil((double) loadedChunks.size() / maxLoaded); for (int i = 0; i < stepCount; i++) { List batch = loadedChunks.subList(i * maxLoaded, - Math.min((i + 1) * maxLoaded, loadedChunks.size() - 1)); + Math.min((i + 1) * maxLoaded, loadedChunks.size())); log.info("Generating batch " + (i + 1) + " / " + stepCount + " with " + batch.size() + " chunks"); try { diff --git a/src/main/java/morlok8k/MinecraftLandGenerator/World.java b/src/main/java/morlok8k/MinecraftLandGenerator/World.java index fa3b74c..31e5c9d 100644 --- a/src/main/java/morlok8k/MinecraftLandGenerator/World.java +++ b/src/main/java/morlok8k/MinecraftLandGenerator/World.java @@ -2,6 +2,7 @@ package morlok8k.MinecraftLandGenerator; import java.io.IOException; import java.nio.ByteBuffer; +import java.nio.IntBuffer; import java.nio.channels.FileChannel; import java.nio.file.FileAlreadyExistsException; import java.nio.file.Files; @@ -239,7 +240,8 @@ public class World { ByteBuffer buffer = ByteBuffer.allocate(4096); channel.read(buffer); buffer.flip(); - return IntStream.range(0, buffer.capacity()).filter(i -> buffer.get(i) != 0) + IntBuffer locations = buffer.asIntBuffer(); + return IntStream.range(0, locations.capacity()).filter(i -> locations.get(i) >>> 8 != 0) .mapToObj(i -> new Vector2i(i & 31, i >> 5)); } catch (IOException e) { log.warn("Could not open region file " + path + ", assuming it contains no chunks", e);