set chunk status to full AFTER generation

This commit is contained in:
Julian Krings 2025-02-08 20:59:20 +01:00
parent 22622f6e8a
commit 6e84d38680
No known key found for this signature in database
GPG Key ID: 208C6E08C3B718D2
16 changed files with 76 additions and 48 deletions

View File

@ -7,4 +7,6 @@ public interface SerializableChunk extends TerrainChunk {
Position2 getPos();
Object serialize();
void mark();
}

View File

@ -169,6 +169,7 @@ public class IrisHeadless {
biomes.apply();
storage.fillBiomes(chunk, ctx);
chunk.mark();
long key = Cache.key(x >> 5, z >> 5);
regions.computeIfAbsent(key, Region::new)
@ -255,7 +256,7 @@ public class IrisHeadless {
@Override
public void run() {
try (IRegion region = storage.getRegion(x, z, false)){
try (IRegion region = storage.getRegion(x, z, false)) {
assert region != null;
for (var chunk : chunks) {
@ -269,7 +270,8 @@ public class IrisHeadless {
}
} catch (Throwable e) {
Iris.error("Failed to load region file " + x + ", " + z);
Iris.reportError(e);
e.printStackTrace();
loadedChunks.addAndGet(-chunks.size());
}
regions.remove(key);

View File

@ -12,7 +12,8 @@ import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.EntityBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.ChunkStatus;
import net.minecraft.world.level.chunk.ProtoChunk;
import org.bukkit.Material;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
@ -27,11 +28,11 @@ import static com.volmit.iris.core.nms.v1_20_R1.headless.RegionStorage.registryA
@Data
public final class DirectTerrainChunk implements SerializableChunk {
private final ChunkAccess access;
private final ProtoChunk access;
private final int minHeight, maxHeight;
private final Registry<net.minecraft.world.level.biome.Biome> biomes;
public DirectTerrainChunk(ChunkAccess access) {
public DirectTerrainChunk(ProtoChunk access) {
this.access = access;
this.minHeight = access.getMinBuildHeight();
this.maxHeight = access.getMaxBuildHeight();
@ -206,4 +207,9 @@ public final class DirectTerrainChunk implements SerializableChunk {
public Object serialize() {
return RegionStorage.serialize(access);
}
@Override
public void mark() {
access.setStatus(ChunkStatus.FULL);
}
}

View File

@ -141,9 +141,7 @@ public class RegionStorage implements IRegionStorage, LevelHeightAccessor {
@NotNull
@Override
public SerializableChunk createChunk(int x, int z) {
ProtoChunk chunk = new ProtoChunk(new ChunkPos(x, z), UpgradeData.EMPTY, this, registryAccess().registryOrThrow(Registries.BIOME), null);
chunk.setStatus(ChunkStatus.FULL);
return new DirectTerrainChunk(chunk);
return new DirectTerrainChunk(new ProtoChunk(new ChunkPos(x, z), UpgradeData.EMPTY, this, registryAccess().registryOrThrow(Registries.BIOME), null));
}
@Override

View File

@ -11,7 +11,8 @@ import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.EntityBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.ChunkStatus;
import net.minecraft.world.level.chunk.ProtoChunk;
import org.bukkit.Material;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
@ -24,10 +25,10 @@ import org.jetbrains.annotations.NotNull;
@Data
public final class DirectTerrainChunk implements SerializableChunk {
private final ChunkAccess access;
private final ProtoChunk access;
private final int minHeight, maxHeight;
public DirectTerrainChunk(ChunkAccess access) {
public DirectTerrainChunk(ProtoChunk access) {
this.access = access;
this.minHeight = access.getMinBuildHeight();
this.maxHeight = access.getMaxBuildHeight();
@ -201,4 +202,9 @@ public final class DirectTerrainChunk implements SerializableChunk {
public Object serialize() {
return RegionStorage.serialize(access);
}
@Override
public void mark() {
access.setStatus(ChunkStatus.FULL);
}
}

View File

@ -140,9 +140,7 @@ public class RegionStorage implements IRegionStorage, LevelHeightAccessor {
@NotNull
@Override
public SerializableChunk createChunk(int x, int z) {
ProtoChunk chunk = new ProtoChunk(new ChunkPos(x, z), UpgradeData.EMPTY, this, registryAccess().registryOrThrow(Registries.BIOME), null);
chunk.setStatus(ChunkStatus.FULL);
return new DirectTerrainChunk(chunk);
return new DirectTerrainChunk(new ProtoChunk(new ChunkPos(x, z), UpgradeData.EMPTY, this, registryAccess().registryOrThrow(Registries.BIOME), null));
}
@Override

View File

@ -11,7 +11,8 @@ import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.EntityBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.ChunkStatus;
import net.minecraft.world.level.chunk.ProtoChunk;
import org.bukkit.Material;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
@ -25,10 +26,10 @@ import org.jetbrains.annotations.NotNull;
@Data
public final class DirectTerrainChunk implements SerializableChunk {
private final ChunkAccess access;
private final ProtoChunk access;
private final int minHeight, maxHeight;
public DirectTerrainChunk(ChunkAccess access) {
public DirectTerrainChunk(ProtoChunk access) {
this.access = access;
this.minHeight = access.getMinBuildHeight();
this.maxHeight = access.getMaxBuildHeight();
@ -202,4 +203,9 @@ public final class DirectTerrainChunk implements SerializableChunk {
public Object serialize() {
return RegionStorage.serialize(access);
}
@Override
public void mark() {
access.setStatus(ChunkStatus.FULL);
}
}

View File

@ -140,9 +140,7 @@ public class RegionStorage implements IRegionStorage, LevelHeightAccessor {
@NotNull
@Override
public SerializableChunk createChunk(int x, int z) {
ProtoChunk chunk = new ProtoChunk(new ChunkPos(x, z), UpgradeData.EMPTY, this, registryAccess().registryOrThrow(Registries.BIOME), null);
chunk.setStatus(ChunkStatus.FULL);
return new DirectTerrainChunk(chunk);
return new DirectTerrainChunk(new ProtoChunk(new ChunkPos(x, z), UpgradeData.EMPTY, this, registryAccess().registryOrThrow(Registries.BIOME), null));
}
@Override

View File

@ -11,7 +11,8 @@ import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.EntityBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.ProtoChunk;
import net.minecraft.world.level.chunk.status.ChunkStatus;
import org.bukkit.Material;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
@ -25,10 +26,10 @@ import org.jetbrains.annotations.NotNull;
@Data
public final class DirectTerrainChunk implements SerializableChunk {
private final ChunkAccess access;
private final ProtoChunk access;
private final int minHeight, maxHeight;
public DirectTerrainChunk(ChunkAccess access) {
public DirectTerrainChunk(ProtoChunk access) {
this.access = access;
this.minHeight = access.getMinBuildHeight();
this.maxHeight = access.getMaxBuildHeight();
@ -202,4 +203,9 @@ public final class DirectTerrainChunk implements SerializableChunk {
public Object serialize() {
return RegionStorage.serialize(access);
}
@Override
public void mark() {
access.setStatus(ChunkStatus.FULL);
}
}

View File

@ -30,7 +30,6 @@ import net.minecraft.world.level.LevelHeightAccessor;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.Biomes;
import net.minecraft.world.level.chunk.*;
import net.minecraft.world.level.chunk.status.ChunkStatus;
import net.minecraft.world.level.chunk.status.ChunkType;
import net.minecraft.world.level.levelgen.BelowZeroRetrogen;
import net.minecraft.world.level.levelgen.GenerationStep;
@ -141,9 +140,7 @@ public class RegionStorage implements IRegionStorage, LevelHeightAccessor {
@NotNull
@Override
public SerializableChunk createChunk(int x, int z) {
ProtoChunk chunk = new ProtoChunk(new ChunkPos(x, z), UpgradeData.EMPTY, this, registryAccess().registryOrThrow(Registries.BIOME), null);
chunk.setStatus(ChunkStatus.FULL);
return new DirectTerrainChunk(chunk);
return new DirectTerrainChunk(new ProtoChunk(new ChunkPos(x, z), UpgradeData.EMPTY, this, registryAccess().registryOrThrow(Registries.BIOME), null));
}
@Override

View File

@ -11,7 +11,8 @@ import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.EntityBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.ProtoChunk;
import net.minecraft.world.level.chunk.status.ChunkStatus;
import org.bukkit.Material;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
@ -25,10 +26,10 @@ import org.jetbrains.annotations.NotNull;
@Data
public final class DirectTerrainChunk implements SerializableChunk {
private final ChunkAccess access;
private final ProtoChunk access;
private final int minHeight, maxHeight;
public DirectTerrainChunk(ChunkAccess access) {
public DirectTerrainChunk(ProtoChunk access) {
this.access = access;
this.minHeight = access.getMinBuildHeight();
this.maxHeight = access.getMaxBuildHeight();
@ -202,4 +203,9 @@ public final class DirectTerrainChunk implements SerializableChunk {
public Object serialize() {
return RegionStorage.serialize(access);
}
@Override
public void mark() {
access.setPersistedStatus(ChunkStatus.FULL);
}
}

View File

@ -27,7 +27,6 @@ import net.minecraft.world.level.LevelHeightAccessor;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.Biomes;
import net.minecraft.world.level.chunk.*;
import net.minecraft.world.level.chunk.status.ChunkStatus;
import net.minecraft.world.level.chunk.status.ChunkType;
import net.minecraft.world.level.levelgen.BelowZeroRetrogen;
import net.minecraft.world.level.levelgen.GenerationStep;
@ -137,9 +136,7 @@ public class RegionStorage implements IRegionStorage, LevelHeightAccessor {
@NotNull
@Override
public SerializableChunk createChunk(int x, int z) {
ProtoChunk chunk = new ProtoChunk(new ChunkPos(x, z), UpgradeData.EMPTY, this, registryAccess().registryOrThrow(Registries.BIOME), null);
chunk.setPersistedStatus(ChunkStatus.FULL);
return new DirectTerrainChunk(chunk);
return new DirectTerrainChunk(new ProtoChunk(new ChunkPos(x, z), UpgradeData.EMPTY, this, registryAccess().registryOrThrow(Registries.BIOME), null));
}
@Override

View File

@ -11,7 +11,8 @@ import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.EntityBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.ProtoChunk;
import net.minecraft.world.level.chunk.status.ChunkStatus;
import org.bukkit.Material;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
@ -25,10 +26,10 @@ import org.jetbrains.annotations.NotNull;
@Data
public final class DirectTerrainChunk implements SerializableChunk {
private final ChunkAccess access;
private final ProtoChunk access;
private final int minHeight, maxHeight;
public DirectTerrainChunk(ChunkAccess access) {
public DirectTerrainChunk(ProtoChunk access) {
this.access = access;
this.minHeight = access.getMinY();
this.maxHeight = access.getMaxY();
@ -202,4 +203,9 @@ public final class DirectTerrainChunk implements SerializableChunk {
public Object serialize() {
return RegionStorage.serialize(access);
}
@Override
public void mark() {
access.setPersistedStatus(ChunkStatus.FULL);
}
}

View File

@ -30,7 +30,6 @@ import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.LevelChunkSection;
import net.minecraft.world.level.chunk.ProtoChunk;
import net.minecraft.world.level.chunk.UpgradeData;
import net.minecraft.world.level.chunk.status.ChunkStatus;
import net.minecraft.world.level.chunk.storage.SerializableChunkData;
import net.minecraft.world.level.levelgen.Heightmap;
import net.minecraft.world.level.levelgen.blending.BlendingData;
@ -135,9 +134,7 @@ public class RegionStorage implements IRegionStorage, LevelHeightAccessor {
@NotNull
@Override
public SerializableChunk createChunk(int x, int z) {
ProtoChunk chunk = new ProtoChunk(new ChunkPos(x, z), UpgradeData.EMPTY, this, registryAccess().lookupOrThrow(Registries.BIOME), null);
chunk.setPersistedStatus(ChunkStatus.FULL);
return new DirectTerrainChunk(chunk);
return new DirectTerrainChunk(new ProtoChunk(new ChunkPos(x, z), UpgradeData.EMPTY, this, registryAccess().lookupOrThrow(Registries.BIOME), null));
}
@Override

View File

@ -11,7 +11,8 @@ import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.EntityBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.ProtoChunk;
import net.minecraft.world.level.chunk.status.ChunkStatus;
import org.bukkit.Material;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
@ -25,10 +26,10 @@ import org.jetbrains.annotations.NotNull;
@Data
public final class DirectTerrainChunk implements SerializableChunk {
private final ChunkAccess access;
private final ProtoChunk access;
private final int minHeight, maxHeight;
public DirectTerrainChunk(ChunkAccess access) {
public DirectTerrainChunk(ProtoChunk access) {
this.access = access;
this.minHeight = access.getMinY();
this.maxHeight = access.getMaxY();
@ -202,4 +203,9 @@ public final class DirectTerrainChunk implements SerializableChunk {
public Object serialize() {
return RegionStorage.serialize(access);
}
@Override
public void mark() {
access.setPersistedStatus(ChunkStatus.FULL);
}
}

View File

@ -30,7 +30,6 @@ import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.LevelChunkSection;
import net.minecraft.world.level.chunk.ProtoChunk;
import net.minecraft.world.level.chunk.UpgradeData;
import net.minecraft.world.level.chunk.status.ChunkStatus;
import net.minecraft.world.level.chunk.storage.SerializableChunkData;
import net.minecraft.world.level.levelgen.Heightmap;
import net.minecraft.world.level.levelgen.blending.BlendingData;
@ -135,9 +134,7 @@ public class RegionStorage implements IRegionStorage, LevelHeightAccessor {
@NotNull
@Override
public SerializableChunk createChunk(int x, int z) {
ProtoChunk chunk = new ProtoChunk(new ChunkPos(x, z), UpgradeData.EMPTY, this, registryAccess().lookupOrThrow(Registries.BIOME), null);
chunk.setPersistedStatus(ChunkStatus.FULL);
return new DirectTerrainChunk(chunk);
return new DirectTerrainChunk(new ProtoChunk(new ChunkPos(x, z), UpgradeData.EMPTY, this, registryAccess().lookupOrThrow(Registries.BIOME), null));
}
@Override