@@ -74,11 +74,13 @@ public class SlimeAnvilImporter implements SlimeImporter {
7474 private final SlimeLoader slimeLoader ;
7575 private final Set <String > preservedWorldTags ;
7676 private final Set <String > preservedChunkTags ;
77+ private final boolean optimizeChunks ;
7778
7879 private SlimeAnvilImporter (Builder builder ) {
7980 this .slimeLoader = builder .slimeLoader ;
8081 this .preservedWorldTags = builder .preservedWorldTags ;
8182 this .preservedChunkTags = builder .preservedChunkTags ;
83+ this .optimizeChunks = builder .optimizeChunks ;
8284 }
8385
8486 public static Builder builder (SlimeLoader slimeLoader ) {
@@ -191,10 +193,6 @@ private Chunk[] readChunks(File root, Map<ChunkPos, EntityChunk> entityChunks) t
191193 })
192194 .toArray (Section []::new );
193195
194- Heightmaps heightmaps = slimeLoader .deserializers ().heightmaps ().deserialize (
195- tag .getCompound (HEIGHTMAPS_TAG )
196- );
197-
198196 BlockEntity [] blockEntities = tag .getList (BLOCK_ENTITIES_TAG , BinaryTagTypes .COMPOUND ).stream ()
199197 .map (CompoundBinaryTag .class ::cast )
200198 .map (slimeLoader .deserializers ().blockEntity ()::deserialize )
@@ -203,6 +201,14 @@ private Chunk[] readChunks(File root, Map<ChunkPos, EntityChunk> entityChunks) t
203201 ChunkPos chunkPos = new ChunkPos (x , z );
204202 Entity [] entities = entityChunks .containsKey (chunkPos ) ? entityChunks .get (chunkPos ).entities () : EMPTY_ENTITIES ;
205203
204+ if (optimizeChunks && ChunkUtils .isEmpty (sections , blockEntities , entities )) {
205+ return null ;
206+ }
207+
208+ Heightmaps heightmaps = slimeLoader .deserializers ().heightmaps ().deserialize (
209+ tag .getCompound (HEIGHTMAPS_TAG )
210+ );
211+
206212 CompoundBinaryTag customDataTag = readCustomData (tag , preservedChunkTags );
207213
208214 return slimeLoader .deserializers ().chunk ().deserialize (
@@ -302,6 +308,7 @@ public static class Builder {
302308 private final SlimeLoader slimeLoader ;
303309 private Set <String > preservedWorldTags = Collections .emptySet ();
304310 private Set <String > preservedChunkTags = Collections .emptySet ();
311+ private boolean optimizeChunks ;
305312
306313 private Builder (SlimeLoader slimeLoader ) {
307314 this .slimeLoader = nonNull (slimeLoader , "slimeLoader" );
@@ -317,6 +324,11 @@ public Builder preserveChunkTags(String... tags) {
317324 return this ;
318325 }
319326
327+ public Builder optimizeChunks (boolean optimizeChunks ) {
328+ this .optimizeChunks = optimizeChunks ;
329+ return this ;
330+ }
331+
320332 public SlimeAnvilImporter build () {
321333 return new SlimeAnvilImporter (this );
322334 }
0 commit comments