Only import full chunk sections

This commit is contained in:
mcrcortex
2024-08-08 19:54:22 +10:00
parent 7f25f5ff5d
commit 3ba1c76414

View File

@@ -19,6 +19,7 @@ import net.minecraft.world.World;
import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.BiomeKeys; import net.minecraft.world.biome.BiomeKeys;
import net.minecraft.world.chunk.ChunkNibbleArray; import net.minecraft.world.chunk.ChunkNibbleArray;
import net.minecraft.world.chunk.ChunkStatus;
import net.minecraft.world.chunk.PalettedContainer; import net.minecraft.world.chunk.PalettedContainer;
import net.minecraft.world.chunk.ReadableContainer; import net.minecraft.world.chunk.ReadableContainer;
import net.minecraft.world.storage.ChunkCompressionFormat; import net.minecraft.world.storage.ChunkCompressionFormat;
@@ -256,6 +257,13 @@ public class WorldImporter {
} }
private void importChunkNBT(NbtCompound chunk) { private void importChunkNBT(NbtCompound chunk) {
if (!chunk.contains("Status")) {
return;
}
//Dont process non full chunk sections
if (ChunkStatus.byId(chunk.getString("Status")) != ChunkStatus.FULL) {
return;
}
try { try {
int x = chunk.getInt("xPos"); int x = chunk.getInt("xPos");
int z = chunk.getInt("zPos"); int z = chunk.getInt("zPos");
@@ -272,12 +280,6 @@ public class WorldImporter {
this.updateCallback.update(this.chunksProcessed.incrementAndGet(), this.estimatedTotalChunks.get()); this.updateCallback.update(this.chunksProcessed.incrementAndGet(), this.estimatedTotalChunks.get());
} }
private static int getIndex(int x, int y, int z) {
return y << 8 | z << 4 | x;
}
private static final ThreadLocal<VoxelizedSection> SECTION_CACHE = ThreadLocal.withInitial(VoxelizedSection::createEmpty); private static final ThreadLocal<VoxelizedSection> SECTION_CACHE = ThreadLocal.withInitial(VoxelizedSection::createEmpty);
private static final Codec<PalettedContainer<BlockState>> BLOCK_STATE_CODEC = PalettedContainer.createPalettedContainerCodec(Block.STATE_IDS, BlockState.CODEC, PalettedContainer.PaletteProvider.BLOCK_STATE, Blocks.AIR.getDefaultState()); private static final Codec<PalettedContainer<BlockState>> BLOCK_STATE_CODEC = PalettedContainer.createPalettedContainerCodec(Block.STATE_IDS, BlockState.CODEC, PalettedContainer.PaletteProvider.BLOCK_STATE, Blocks.AIR.getDefaultState());
private void importSectionNBT(int x, int y, int z, NbtCompound section) { private void importSectionNBT(int x, int y, int z, NbtCompound section) {