From 480bb84d9ccb2af042f4d7ae3227619a5fdba899 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 12 Dec 2021 16:09:40 -0700 Subject: [PATCH] move stages to ConfigPack instance --- .../generation/NoiseChunkGenerator3D.java | 7 ------- .../com/dfsek/terra/api/config/ConfigPack.java | 3 ++- .../world/chunk/generation/ChunkGenerator.java | 2 -- .../dfsek/terra/config/pack/ConfigPackImpl.java | 16 ++++++++++++---- .../generator/BukkitChunkGeneratorWrapper.java | 16 ++++++++++------ .../generation/FabricChunkGeneratorWrapper.java | 6 ++---- 6 files changed, 26 insertions(+), 24 deletions(-) diff --git a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/NoiseChunkGenerator3D.java b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/NoiseChunkGenerator3D.java index 1be4f0893..d3f56f387 100644 --- a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/NoiseChunkGenerator3D.java +++ b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/NoiseChunkGenerator3D.java @@ -35,7 +35,6 @@ import com.dfsek.terra.api.world.chunk.generation.util.Palette; public class NoiseChunkGenerator3D implements ChunkGenerator { private final Platform platform; - private final List generationStages = new ArrayList<>(); private final SamplerProvider samplerCache; @@ -51,7 +50,6 @@ public class NoiseChunkGenerator3D implements ChunkGenerator { this.carverHorizontalResolution = carverHorizontalResolution; this.carverVerticalResolution = carverVerticalResolution; this.samplerCache = new SamplerProvider(platform, c.getBiomeProvider(), elevationBlend); - c.getStages().forEach(stage -> generationStages.add(stage.newInstance(c))); } @Override @@ -112,11 +110,6 @@ public class NoiseChunkGenerator3D implements ChunkGenerator { } } - @Override - public List getGenerationStages() { - return generationStages; - } - @Override public BlockState getBlock(ServerWorld world, int x, int y, int z) { BiomeProvider provider = world.getBiomeProvider(); diff --git a/common/api/core/src/main/java/com/dfsek/terra/api/config/ConfigPack.java b/common/api/core/src/main/java/com/dfsek/terra/api/config/ConfigPack.java index e2f28e74f..29c32d90b 100644 --- a/common/api/core/src/main/java/com/dfsek/terra/api/config/ConfigPack.java +++ b/common/api/core/src/main/java/com/dfsek/terra/api/config/ConfigPack.java @@ -23,6 +23,7 @@ import com.dfsek.terra.api.util.StringIdentifiable; import com.dfsek.terra.api.util.reflection.TypeKey; import com.dfsek.terra.api.world.ServerWorld; 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.GenerationStageProvider; @@ -53,7 +54,7 @@ public interface ConfigPack extends LoaderRegistrar, LoaderHolder, RegistryHolde return getOrCreateRegistry(type.getType()); } - List getStages(); + List getStages(); Loader getLoader(); diff --git a/common/api/core/src/main/java/com/dfsek/terra/api/world/chunk/generation/ChunkGenerator.java b/common/api/core/src/main/java/com/dfsek/terra/api/world/chunk/generation/ChunkGenerator.java index 9c6adb20a..da344d969 100644 --- a/common/api/core/src/main/java/com/dfsek/terra/api/world/chunk/generation/ChunkGenerator.java +++ b/common/api/core/src/main/java/com/dfsek/terra/api/world/chunk/generation/ChunkGenerator.java @@ -23,8 +23,6 @@ public interface ChunkGenerator { void generateChunkData(@NotNull ProtoChunk chunk, @NotNull WritableWorld world, int chunkX, int chunkZ); - List getGenerationStages(); - BlockState getBlock(ServerWorld world, int x, int y, int z); default BlockState getBlock(ServerWorld world, Vector3 vector3) { diff --git a/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java b/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java index d33cad168..48557f726 100644 --- a/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java +++ b/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java @@ -29,6 +29,10 @@ import com.dfsek.tectonic.loading.TypeLoader; import com.dfsek.tectonic.loading.TypeRegistry; import com.dfsek.tectonic.loading.object.ObjectTemplate; 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.LoggerFactory; @@ -49,6 +53,7 @@ import java.util.Map; import java.util.Set; import java.util.TreeMap; import java.util.function.Supplier; +import java.util.stream.Collectors; import java.util.zip.ZipEntry; 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.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.GenerationStageProvider; import com.dfsek.terra.config.fileloaders.FolderLoader; import com.dfsek.terra.config.fileloaders.ZIPLoader; import com.dfsek.terra.config.loaders.GenericTemplateSupplierLoader; @@ -115,7 +119,11 @@ public class ConfigPackImpl implements ConfigPack { private final ConfigTypeRegistry configTypeRegistry; - + private final Lazy> stages = Lazy.lazy(() -> template + .getStages() + .stream() + .map(stage -> stage.newInstance(this)) + .collect(Collectors.toList())); private final TreeMap>>> configTypes = new TreeMap<>(); public ConfigPackImpl(File folder, Platform platform) throws ConfigException { @@ -343,8 +351,8 @@ public class ConfigPackImpl implements ConfigPack { } @Override - public List getStages() { - return template.getStages(); + public List getStages() { + return stages.value(); } @Override diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/generator/BukkitChunkGeneratorWrapper.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/generator/BukkitChunkGeneratorWrapper.java index b842ed9a6..ee5e35eb0 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/generator/BukkitChunkGeneratorWrapper.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/generator/BukkitChunkGeneratorWrapper.java @@ -67,12 +67,16 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener @Override public @NotNull List getDefaultPopulators(@NotNull World world) { - return delegate.getGenerationStages().stream().map(generationStage -> new BlockPopulator() { - @Override - public void populate(@NotNull WorldInfo worldInfo, @NotNull Random random, int x, int z, @NotNull LimitedRegion limitedRegion) { - generationStage.populate(new BukkitProtoWorld(limitedRegion)); - } - }).collect(Collectors.toList()); + return pack.getStages() + .stream() + .map(generationStage -> new BlockPopulator() { + @Override + public void populate(@NotNull WorldInfo worldInfo, @NotNull Random random, int x, int z, + @NotNull LimitedRegion limitedRegion) { + generationStage.populate(new BukkitProtoWorld(limitedRegion)); + } + }) + .collect(Collectors.toList()); } @Override diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java index 524ef0ca5..fbfc8ab06 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java @@ -21,11 +21,9 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.block.BlockState; import net.minecraft.entity.SpawnGroup; -import net.minecraft.structure.StructureManager; import net.minecraft.util.collection.Pool; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; -import net.minecraft.util.registry.DynamicRegistryManager; import net.minecraft.world.ChunkRegion; import net.minecraft.world.HeightLimitView; import net.minecraft.world.Heightmap; @@ -195,7 +193,7 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C return CompletableFuture.supplyAsync(() -> { ProtoWorld world = (ProtoWorld) ((StructureAccessorAccessor) structureAccessor).getWorld(); delegate.generateChunkData((ProtoChunk) chunk, world, chunk.getPos().x, chunk.getPos().z); - delegate.getGenerationStages().forEach(populator -> { + pack.getStages().forEach(populator -> { if(populator instanceof Chunkified) { populator.populate(world); } @@ -207,7 +205,7 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C @Override public void generateFeatures(StructureWorldAccess world, Chunk chunk, StructureAccessor structureAccessor) { super.generateFeatures(world, chunk, structureAccessor); - delegate.getGenerationStages().forEach(populator -> { + pack.getStages().forEach(populator -> { if(!(populator instanceof Chunkified)) { populator.populate((ProtoWorld) world); }