mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-19 07:11:14 +00:00
feat: start generating features
This commit is contained in:
+18
-1
@@ -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);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+39
-12
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user