Lightmap importing + change to view distance fetching

This commit is contained in:
mcrcortex
2024-01-21 22:48:52 +10:00
parent 685c5cc587
commit a1f8493cda
2 changed files with 36 additions and 6 deletions

View File

@@ -28,7 +28,7 @@ public class DistanceTracker {
this.minYSection = MinecraftClient.getInstance().world.getBottomSectionCoord()/2; this.minYSection = MinecraftClient.getInstance().world.getBottomSectionCoord()/2;
this.maxYSection = MinecraftClient.getInstance().world.getTopSectionCoord()/2; this.maxYSection = MinecraftClient.getInstance().world.getTopSectionCoord()/2;
this.rings[0] = new TransitionRing2D(5, MinecraftClient.getInstance().options.getClampedViewDistance()/2, (x, z)->{ this.rings[0] = new TransitionRing2D(5, MinecraftClient.getInstance().options.getViewDistance().getValue()/2, (x, z)->{
for (int y = this.minYSection; y <= this.maxYSection; y++) { for (int y = this.minYSection; y <= this.maxYSection; y++) {
this.tracker.remLvl0(x, y, z); this.tracker.remLvl0(x, y, z);
} }

View File

@@ -8,15 +8,13 @@ import me.cortex.zenith.common.world.WorldEngine;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.*;
import net.minecraft.nbt.NbtElement;
import net.minecraft.nbt.NbtIo;
import net.minecraft.nbt.NbtOps;
import net.minecraft.registry.RegistryKeys; import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.world.World; 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.PalettedContainer; import net.minecraft.world.chunk.PalettedContainer;
import net.minecraft.world.chunk.ReadableContainer; import net.minecraft.world.chunk.ReadableContainer;
import net.minecraft.world.storage.ChunkStreamVersion; import net.minecraft.world.storage.ChunkStreamVersion;
@@ -182,6 +180,10 @@ public class WorldImporter {
} }
} }
private static int getIndex(int x, int y, int z) {
return y << 8 | z << 4 | x;
}
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) {
@@ -189,13 +191,41 @@ public class WorldImporter {
return; return;
} }
byte[] blockLightData = section.getByteArray("BlockLight");
byte[] skyLightData = section.getByteArray("SkyLight");
ChunkNibbleArray blockLight;
if (blockLightData.length != 0) {
blockLight = new ChunkNibbleArray(blockLightData);
} else {
blockLight = null;
}
ChunkNibbleArray skyLight;
if (skyLightData.length != 0) {
skyLight = new ChunkNibbleArray(skyLightData);
} else {
skyLight = null;
}
var blockStates = BLOCK_STATE_CODEC.parse(NbtOps.INSTANCE, section.getCompound("block_states")).result().get(); var blockStates = BLOCK_STATE_CODEC.parse(NbtOps.INSTANCE, section.getCompound("block_states")).result().get();
var biomes = this.biomeCodec.parse(NbtOps.INSTANCE, section.getCompound("biomes")).result().orElse(null); var biomes = this.biomeCodec.parse(NbtOps.INSTANCE, section.getCompound("biomes")).result().orElse(null);
VoxelizedSection csec = WorldConversionFactory.convert( VoxelizedSection csec = WorldConversionFactory.convert(
this.world.getMapper(), this.world.getMapper(),
blockStates, blockStates,
biomes, biomes,
(bx, by, bz, state) -> (byte) 0, (bx, by, bz, state) -> {
int block = 0;
int sky = 0;
if (blockLight != null) {
block = blockLight.get(bx, by, bz);
}
if (skyLight != null) {
sky = skyLight.get(bx, by, bz);
}
sky = 15-sky;
return (byte) (sky|(block<<4));
},
x, x,
y, y,
z, z,