feat: start generating features

This commit is contained in:
Christian Bergschneider
2024-12-28 20:05:50 +01:00
parent 7288373dbc
commit f953c5085d
2 changed files with 57 additions and 13 deletions
@@ -2,6 +2,7 @@ package com.dfsek.terra.minestom.world;
import com.dfsek.terra.api.world.chunk.generation.ChunkGenerator; import com.dfsek.terra.api.world.chunk.generation.ChunkGenerator;
import com.dfsek.terra.api.world.chunk.generation.stage.GenerationStage;
import com.dfsek.terra.minestom.chunk.CachedChunk; import com.dfsek.terra.minestom.chunk.CachedChunk;
import com.dfsek.terra.minestom.chunk.GeneratedChunkCache; import com.dfsek.terra.minestom.chunk.GeneratedChunkCache;
@@ -14,9 +15,11 @@ import org.jetbrains.annotations.NotNull;
public class MinestomChunkGeneratorWrapper implements Generator { public class MinestomChunkGeneratorWrapper implements Generator {
private final GeneratedChunkCache cache; private final GeneratedChunkCache cache;
private final ChunkGenerator generator; private final ChunkGenerator generator;
private final TerraMinestomWorld world;
public MinestomChunkGeneratorWrapper(ChunkGenerator generator, TerraMinestomWorld world) { public MinestomChunkGeneratorWrapper(ChunkGenerator generator, TerraMinestomWorld world) {
this.generator = generator; this.generator = generator;
this.world = world;
this.cache = new GeneratedChunkCache(world.getDimensionType(), generator, world); this.cache = new GeneratedChunkCache(world.getDimensionType(), generator, world);
} }
@@ -29,6 +32,20 @@ public class MinestomChunkGeneratorWrapper implements Generator {
Point start = unit.absoluteStart(); Point start = unit.absoluteStart();
CachedChunk chunk = cache.at(start.chunkX(), start.chunkZ()); CachedChunk chunk = cache.at(start.chunkX(), start.chunkZ());
chunk.writeRelative(unit.modifier()); //chunk.writeRelative(unit.modifier());
unit.fork(setter -> {
MinestomProtoWorld protoWorld = new MinestomProtoWorld(
cache,
start.chunkX(),
start.chunkZ(),
world,
setter
);
for(GenerationStage stage : world.getPack().getStages()) {
stage.populate(protoWorld);
}
});
} }
} }
@@ -9,27 +9,51 @@ import com.dfsek.terra.api.world.ServerWorld;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider; import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.chunk.generation.ChunkGenerator; import com.dfsek.terra.api.world.chunk.generation.ChunkGenerator;
import com.dfsek.terra.api.world.chunk.generation.ProtoWorld; import com.dfsek.terra.api.world.chunk.generation.ProtoWorld;
import com.dfsek.terra.minestom.chunk.GeneratedChunkCache;
import net.minestom.server.instance.block.Block;
import net.minestom.server.instance.block.Block.Setter;
public class MinestomProtoWorld implements ProtoWorld { public class MinestomProtoWorld implements ProtoWorld {
private final GeneratedChunkCache cache;
private final int x;
private final int z;
private final ServerWorld world;
private final Setter modifier;
public MinestomProtoWorld(
GeneratedChunkCache cache,
int x,
int z,
ServerWorld world,
Setter modifier
) {
this.cache = cache;
this.x = x;
this.z = z;
this.world = world;
this.modifier = modifier;
}
@Override @Override
public int centerChunkX() { public int centerChunkX() {
return 0; return x;
} }
@Override @Override
public int centerChunkZ() { public int centerChunkZ() {
return 0; return z;
} }
@Override @Override
public ServerWorld getWorld() { public ServerWorld getWorld() {
return null; return world;
} }
@Override @Override
public void setBlockState(int x, int y, int z, BlockState data, boolean physics) { public void setBlockState(int x, int y, int z, BlockState data, boolean physics) {
modifier.setBlock(this.x * 16 + x, y, this.z * 16 + z, (Block) data.getHandle());
} }
@Override @Override
@@ -39,7 +63,10 @@ public class MinestomProtoWorld implements ProtoWorld {
@Override @Override
public BlockState getBlockState(int x, int y, int z) { public BlockState getBlockState(int x, int y, int z) {
return null; int chunkX = x >> 4;
int chunkZ = z >> 4;
return cache.at(chunkX + this.x, chunkZ + this.z)
.getBlock(x & 15, y, z & 15);
} }
@Override @Override
@@ -49,36 +76,36 @@ public class MinestomProtoWorld implements ProtoWorld {
@Override @Override
public ChunkGenerator getGenerator() { public ChunkGenerator getGenerator() {
return null; return world.getGenerator();
} }
@Override @Override
public BiomeProvider getBiomeProvider() { public BiomeProvider getBiomeProvider() {
return null; return world.getBiomeProvider();
} }
@Override @Override
public ConfigPack getPack() { public ConfigPack getPack() {
return null; return world.getPack();
} }
@Override @Override
public long getSeed() { public long getSeed() {
return 0; return world.getSeed();
} }
@Override @Override
public int getMaxHeight() { public int getMaxHeight() {
return 0; return world.getMaxHeight();
} }
@Override @Override
public int getMinHeight() { public int getMinHeight() {
return 0; return world.getMinHeight();
} }
@Override @Override
public Object getHandle() { public Object getHandle() {
return null; return world;
} }
} }