move stages to ConfigPack instance

This commit is contained in:
dfsek
2021-12-12 16:09:40 -07:00
parent e45b44c0aa
commit 480bb84d9c
6 changed files with 26 additions and 24 deletions
@@ -35,7 +35,6 @@ import com.dfsek.terra.api.world.chunk.generation.util.Palette;
public class NoiseChunkGenerator3D implements ChunkGenerator { public class NoiseChunkGenerator3D implements ChunkGenerator {
private final Platform platform; private final Platform platform;
private final List<GenerationStage> generationStages = new ArrayList<>();
private final SamplerProvider samplerCache; private final SamplerProvider samplerCache;
@@ -51,7 +50,6 @@ public class NoiseChunkGenerator3D implements ChunkGenerator {
this.carverHorizontalResolution = carverHorizontalResolution; this.carverHorizontalResolution = carverHorizontalResolution;
this.carverVerticalResolution = carverVerticalResolution; this.carverVerticalResolution = carverVerticalResolution;
this.samplerCache = new SamplerProvider(platform, c.getBiomeProvider(), elevationBlend); this.samplerCache = new SamplerProvider(platform, c.getBiomeProvider(), elevationBlend);
c.getStages().forEach(stage -> generationStages.add(stage.newInstance(c)));
} }
@Override @Override
@@ -112,11 +110,6 @@ public class NoiseChunkGenerator3D implements ChunkGenerator {
} }
} }
@Override
public List<GenerationStage> getGenerationStages() {
return generationStages;
}
@Override @Override
public BlockState getBlock(ServerWorld world, int x, int y, int z) { public BlockState getBlock(ServerWorld world, int x, int y, int z) {
BiomeProvider provider = world.getBiomeProvider(); BiomeProvider provider = world.getBiomeProvider();
@@ -23,6 +23,7 @@ import com.dfsek.terra.api.util.StringIdentifiable;
import com.dfsek.terra.api.util.reflection.TypeKey; import com.dfsek.terra.api.util.reflection.TypeKey;
import com.dfsek.terra.api.world.ServerWorld; 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.stage.GenerationStage;
import com.dfsek.terra.api.world.chunk.generation.util.provider.ChunkGeneratorProvider; import com.dfsek.terra.api.world.chunk.generation.util.provider.ChunkGeneratorProvider;
import com.dfsek.terra.api.world.chunk.generation.util.provider.GenerationStageProvider; import com.dfsek.terra.api.world.chunk.generation.util.provider.GenerationStageProvider;
@@ -53,7 +54,7 @@ public interface ConfigPack extends LoaderRegistrar, LoaderHolder, RegistryHolde
return getOrCreateRegistry(type.getType()); return getOrCreateRegistry(type.getType());
} }
List<GenerationStageProvider> getStages(); List<GenerationStage> getStages();
Loader getLoader(); Loader getLoader();
@@ -23,8 +23,6 @@ public interface ChunkGenerator {
void generateChunkData(@NotNull ProtoChunk chunk, @NotNull WritableWorld world, void generateChunkData(@NotNull ProtoChunk chunk, @NotNull WritableWorld world,
int chunkX, int chunkZ); int chunkX, int chunkZ);
List<GenerationStage> getGenerationStages();
BlockState getBlock(ServerWorld world, int x, int y, int z); BlockState getBlock(ServerWorld world, int x, int y, int z);
default BlockState getBlock(ServerWorld world, Vector3 vector3) { default BlockState getBlock(ServerWorld world, Vector3 vector3) {
@@ -29,6 +29,10 @@ import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.tectonic.loading.TypeRegistry; import com.dfsek.tectonic.loading.TypeRegistry;
import com.dfsek.tectonic.loading.object.ObjectTemplate; import com.dfsek.tectonic.loading.object.ObjectTemplate;
import com.dfsek.tectonic.yaml.YamlConfiguration; import com.dfsek.tectonic.yaml.YamlConfiguration;
import com.dfsek.terra.api.util.generic.Lazy;
import com.dfsek.terra.api.world.chunk.generation.stage.GenerationStage;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -49,6 +53,7 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipFile; import java.util.zip.ZipFile;
@@ -75,7 +80,6 @@ import com.dfsek.terra.api.util.generic.pair.Pair;
import com.dfsek.terra.api.util.reflection.ReflectionUtil; import com.dfsek.terra.api.util.reflection.ReflectionUtil;
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.util.provider.ChunkGeneratorProvider; import com.dfsek.terra.api.world.chunk.generation.util.provider.ChunkGeneratorProvider;
import com.dfsek.terra.api.world.chunk.generation.util.provider.GenerationStageProvider;
import com.dfsek.terra.config.fileloaders.FolderLoader; import com.dfsek.terra.config.fileloaders.FolderLoader;
import com.dfsek.terra.config.fileloaders.ZIPLoader; import com.dfsek.terra.config.fileloaders.ZIPLoader;
import com.dfsek.terra.config.loaders.GenericTemplateSupplierLoader; import com.dfsek.terra.config.loaders.GenericTemplateSupplierLoader;
@@ -115,7 +119,11 @@ public class ConfigPackImpl implements ConfigPack {
private final ConfigTypeRegistry configTypeRegistry; private final ConfigTypeRegistry configTypeRegistry;
private final Lazy<List<GenerationStage>> stages = Lazy.lazy(() -> template
.getStages()
.stream()
.map(stage -> stage.newInstance(this))
.collect(Collectors.toList()));
private final TreeMap<Integer, List<Pair<String, ConfigType<?, ?>>>> configTypes = new TreeMap<>(); private final TreeMap<Integer, List<Pair<String, ConfigType<?, ?>>>> configTypes = new TreeMap<>();
public ConfigPackImpl(File folder, Platform platform) throws ConfigException { public ConfigPackImpl(File folder, Platform platform) throws ConfigException {
@@ -343,8 +351,8 @@ public class ConfigPackImpl implements ConfigPack {
} }
@Override @Override
public List<GenerationStageProvider> getStages() { public List<GenerationStage> getStages() {
return template.getStages(); return stages.value();
} }
@Override @Override
@@ -67,12 +67,16 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener
@Override @Override
public @NotNull List<BlockPopulator> getDefaultPopulators(@NotNull World world) { public @NotNull List<BlockPopulator> getDefaultPopulators(@NotNull World world) {
return delegate.getGenerationStages().stream().map(generationStage -> new BlockPopulator() { return pack.getStages()
@Override .stream()
public void populate(@NotNull WorldInfo worldInfo, @NotNull Random random, int x, int z, @NotNull LimitedRegion limitedRegion) { .map(generationStage -> new BlockPopulator() {
generationStage.populate(new BukkitProtoWorld(limitedRegion)); @Override
} public void populate(@NotNull WorldInfo worldInfo, @NotNull Random random, int x, int z,
}).collect(Collectors.toList()); @NotNull LimitedRegion limitedRegion) {
generationStage.populate(new BukkitProtoWorld(limitedRegion));
}
})
.collect(Collectors.toList());
} }
@Override @Override
@@ -21,11 +21,9 @@ import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.entity.SpawnGroup; import net.minecraft.entity.SpawnGroup;
import net.minecraft.structure.StructureManager;
import net.minecraft.util.collection.Pool; import net.minecraft.util.collection.Pool;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ChunkPos; import net.minecraft.util.math.ChunkPos;
import net.minecraft.util.registry.DynamicRegistryManager;
import net.minecraft.world.ChunkRegion; import net.minecraft.world.ChunkRegion;
import net.minecraft.world.HeightLimitView; import net.minecraft.world.HeightLimitView;
import net.minecraft.world.Heightmap; import net.minecraft.world.Heightmap;
@@ -195,7 +193,7 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C
return CompletableFuture.supplyAsync(() -> { return CompletableFuture.supplyAsync(() -> {
ProtoWorld world = (ProtoWorld) ((StructureAccessorAccessor) structureAccessor).getWorld(); ProtoWorld world = (ProtoWorld) ((StructureAccessorAccessor) structureAccessor).getWorld();
delegate.generateChunkData((ProtoChunk) chunk, world, chunk.getPos().x, chunk.getPos().z); delegate.generateChunkData((ProtoChunk) chunk, world, chunk.getPos().x, chunk.getPos().z);
delegate.getGenerationStages().forEach(populator -> { pack.getStages().forEach(populator -> {
if(populator instanceof Chunkified) { if(populator instanceof Chunkified) {
populator.populate(world); populator.populate(world);
} }
@@ -207,7 +205,7 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C
@Override @Override
public void generateFeatures(StructureWorldAccess world, Chunk chunk, StructureAccessor structureAccessor) { public void generateFeatures(StructureWorldAccess world, Chunk chunk, StructureAccessor structureAccessor) {
super.generateFeatures(world, chunk, structureAccessor); super.generateFeatures(world, chunk, structureAccessor);
delegate.getGenerationStages().forEach(populator -> { pack.getStages().forEach(populator -> {
if(!(populator instanceof Chunkified)) { if(!(populator instanceof Chunkified)) {
populator.populate((ProtoWorld) world); populator.populate((ProtoWorld) world);
} }