mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-17 22:31:52 +00:00
multithread structure and cave population
This commit is contained in:
-3
@@ -4,7 +4,6 @@ import com.dfsek.terra.fabric.world.generator.FabricChunkGenerator;
|
|||||||
import com.dfsek.terra.fabric.world.generator.FabricChunkGeneratorWrapper;
|
import com.dfsek.terra.fabric.world.generator.FabricChunkGeneratorWrapper;
|
||||||
import com.dfsek.terra.fabric.world.handles.FabricWorld;
|
import com.dfsek.terra.fabric.world.handles.FabricWorld;
|
||||||
import com.dfsek.terra.fabric.world.handles.chunk.FabricChunkWorldAccess;
|
import com.dfsek.terra.fabric.world.handles.chunk.FabricChunkWorldAccess;
|
||||||
import com.dfsek.terra.fabric.world.handles.world.FabricWorldAccess;
|
|
||||||
import com.mojang.serialization.Codec;
|
import com.mojang.serialization.Codec;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.StructureWorldAccess;
|
import net.minecraft.world.StructureWorldAccess;
|
||||||
@@ -29,8 +28,6 @@ public class PopulatorFeature extends Feature<DefaultFeatureConfig> {
|
|||||||
FabricChunkGeneratorWrapper gen = (FabricChunkGeneratorWrapper) chunkGenerator;
|
FabricChunkGeneratorWrapper gen = (FabricChunkGeneratorWrapper) chunkGenerator;
|
||||||
FabricChunkWorldAccess chunk = new FabricChunkWorldAccess(world, pos.getX() >> 4, pos.getZ() >> 4);
|
FabricChunkWorldAccess chunk = new FabricChunkWorldAccess(world, pos.getX() >> 4, pos.getZ() >> 4);
|
||||||
FabricWorld world1 = new FabricWorld(world.toServerWorld(), new FabricChunkGenerator(chunkGenerator));
|
FabricWorld world1 = new FabricWorld(world.toServerWorld(), new FabricChunkGenerator(chunkGenerator));
|
||||||
gen.getCavePopulator().populate(new FabricWorldAccess(world), chunk);
|
|
||||||
gen.getStructurePopulator().populate(new FabricWorldAccess(world), chunk);
|
|
||||||
gen.getOrePopulator().populate(world1, chunk);
|
gen.getOrePopulator().populate(world1, chunk);
|
||||||
gen.getTreePopulator().populate(world1, chunk);
|
gen.getTreePopulator().populate(world1, chunk);
|
||||||
gen.getFloraPopulator().populate(world1, chunk);
|
gen.getFloraPopulator().populate(world1, chunk);
|
||||||
|
|||||||
+5
-9
@@ -7,6 +7,7 @@ import com.dfsek.terra.config.pack.ConfigPack;
|
|||||||
import com.dfsek.terra.fabric.TerraFabricPlugin;
|
import com.dfsek.terra.fabric.TerraFabricPlugin;
|
||||||
import com.dfsek.terra.fabric.mixin.StructureAccessorAccessor;
|
import com.dfsek.terra.fabric.mixin.StructureAccessorAccessor;
|
||||||
import com.dfsek.terra.fabric.world.TerraBiomeSource;
|
import com.dfsek.terra.fabric.world.TerraBiomeSource;
|
||||||
|
import com.dfsek.terra.fabric.world.handles.chunk.FabricChunk;
|
||||||
import com.dfsek.terra.fabric.world.handles.world.FabricSeededWorldAccess;
|
import com.dfsek.terra.fabric.world.handles.world.FabricSeededWorldAccess;
|
||||||
import com.dfsek.terra.world.generation.generators.DefaultChunkGenerator3D;
|
import com.dfsek.terra.world.generation.generators.DefaultChunkGenerator3D;
|
||||||
import com.dfsek.terra.world.population.CavePopulator;
|
import com.dfsek.terra.world.population.CavePopulator;
|
||||||
@@ -34,7 +35,6 @@ import net.minecraft.world.gen.chunk.VerticalBlockSample;
|
|||||||
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
|
|
||||||
public class FabricChunkGeneratorWrapper extends ChunkGenerator implements GeneratorWrapper {
|
public class FabricChunkGeneratorWrapper extends ChunkGenerator implements GeneratorWrapper {
|
||||||
private final long seed;
|
private final long seed;
|
||||||
@@ -72,14 +72,6 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener
|
|||||||
return floraPopulator;
|
return floraPopulator;
|
||||||
}
|
}
|
||||||
|
|
||||||
public StructurePopulator getStructurePopulator() {
|
|
||||||
return structurePopulator;
|
|
||||||
}
|
|
||||||
|
|
||||||
public CavePopulator getCavePopulator() {
|
|
||||||
return cavePopulator;
|
|
||||||
}
|
|
||||||
|
|
||||||
public FabricChunkGeneratorWrapper(TerraBiomeSource biomeSource, long seed, ConfigPack configPack) {
|
public FabricChunkGeneratorWrapper(TerraBiomeSource biomeSource, long seed, ConfigPack configPack) {
|
||||||
super(biomeSource, new StructuresConfig(false));
|
super(biomeSource, new StructuresConfig(false));
|
||||||
this.pack = configPack;
|
this.pack = configPack;
|
||||||
@@ -126,7 +118,11 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener
|
|||||||
public CompletableFuture<Chunk> populateNoise(Executor executor, StructureAccessor accessor, Chunk chunk) {
|
public CompletableFuture<Chunk> populateNoise(Executor executor, StructureAccessor accessor, Chunk chunk) {
|
||||||
return CompletableFuture.supplyAsync(() -> {
|
return CompletableFuture.supplyAsync(() -> {
|
||||||
FabricSeededWorldAccess worldAccess = new FabricSeededWorldAccess(((StructureAccessorAccessor) accessor).getWorld(), seed, this);
|
FabricSeededWorldAccess worldAccess = new FabricSeededWorldAccess(((StructureAccessorAccessor) accessor).getWorld(), seed, this);
|
||||||
|
com.dfsek.terra.api.platform.world.Chunk c = new FabricChunk(worldAccess, chunk);
|
||||||
|
|
||||||
delegate.generateChunkData(worldAccess, new FastRandom(), chunk.getPos().x, chunk.getPos().z, new FabricChunkData(chunk));
|
delegate.generateChunkData(worldAccess, new FastRandom(), chunk.getPos().x, chunk.getPos().z, new FabricChunkData(chunk));
|
||||||
|
cavePopulator.populate(worldAccess, c);
|
||||||
|
structurePopulator.populate(worldAccess, c);
|
||||||
return chunk;
|
return chunk;
|
||||||
}, executor);
|
}, executor);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -60,7 +60,7 @@ public class FabricWorld implements World, FabricWorldHandle {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Chunk getChunkAt(int x, int z) {
|
public Chunk getChunkAt(int x, int z) {
|
||||||
return new FabricChunk(delegate.world.getChunk(x, z));
|
return new FabricChunk(this, delegate.world.getChunk(x, z));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+8
-3
@@ -4,14 +4,18 @@ import com.dfsek.terra.api.platform.block.Block;
|
|||||||
import com.dfsek.terra.api.platform.block.BlockData;
|
import com.dfsek.terra.api.platform.block.BlockData;
|
||||||
import com.dfsek.terra.api.platform.world.Chunk;
|
import com.dfsek.terra.api.platform.world.Chunk;
|
||||||
import com.dfsek.terra.api.platform.world.World;
|
import com.dfsek.terra.api.platform.world.World;
|
||||||
|
import com.dfsek.terra.fabric.world.block.FabricBlock;
|
||||||
import com.dfsek.terra.fabric.world.block.FabricBlockData;
|
import com.dfsek.terra.fabric.world.block.FabricBlockData;
|
||||||
|
import com.dfsek.terra.fabric.world.handles.world.FabricWorldHandle;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class FabricChunk implements Chunk {
|
public class FabricChunk implements Chunk {
|
||||||
private final net.minecraft.world.chunk.Chunk chunk;
|
private final net.minecraft.world.chunk.Chunk chunk;
|
||||||
|
private final FabricWorldHandle worldHandle;
|
||||||
|
|
||||||
public FabricChunk(net.minecraft.world.chunk.Chunk chunk) {
|
public FabricChunk(FabricWorldHandle worldHandle, net.minecraft.world.chunk.Chunk chunk) {
|
||||||
|
this.worldHandle = worldHandle;
|
||||||
this.chunk = chunk;
|
this.chunk = chunk;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -27,12 +31,13 @@ public class FabricChunk implements Chunk {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public World getWorld() {
|
public World getWorld() {
|
||||||
return null;
|
return worldHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Block getBlock(int x, int y, int z) {
|
public Block getBlock(int x, int y, int z) {
|
||||||
return null;
|
BlockPos pos = new BlockPos(x + (chunk.getPos().x << 4), y, z + (chunk.getPos().z << 4));
|
||||||
|
return new FabricBlock(pos, worldHandle.getWorld());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+2
-1
@@ -1,7 +1,8 @@
|
|||||||
package com.dfsek.terra.fabric.world.handles.world;
|
package com.dfsek.terra.fabric.world.handles.world;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.platform.world.World;
|
||||||
import net.minecraft.world.WorldAccess;
|
import net.minecraft.world.WorldAccess;
|
||||||
|
|
||||||
public interface FabricWorldHandle {
|
public interface FabricWorldHandle extends World {
|
||||||
WorldAccess getWorld();
|
WorldAccess getWorld();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user