diff --git a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/generators/NoiseChunkGenerator3D.java b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/generators/NoiseChunkGenerator3D.java index fa09c72de..96b35ff80 100644 --- a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/generators/NoiseChunkGenerator3D.java +++ b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/generators/NoiseChunkGenerator3D.java @@ -7,12 +7,13 @@ package com.dfsek.terra.addons.chunkgenerator.generation.generators; +import com.dfsek.terra.api.world.access.WorldAccess; + import net.jafama.FastMath; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; -import java.util.Random; import com.dfsek.terra.addons.chunkgenerator.PaletteUtil; import com.dfsek.terra.addons.chunkgenerator.generation.math.samplers.Sampler3D; @@ -48,7 +49,9 @@ public class NoiseChunkGenerator3D implements ChunkGenerator { @Override @SuppressWarnings("try") - public void generateChunkData(@NotNull World world, Random random, int chunkX, int chunkZ, ProtoChunk chunk) { + public void generateChunkData(@NotNull ProtoChunk chunk, @NotNull WorldAccess world, + int chunkZ, + int chunkX) { try(ProfileFrame ignore = platform.getProfiler().profile("chunk_base_3d")) { BiomeProvider grid = world.getBiomeProvider(); diff --git a/common/api/core/src/main/java/com/dfsek/terra/api/world/access/World.java b/common/api/core/src/main/java/com/dfsek/terra/api/world/access/World.java index 182c6b481..e78534ea1 100644 --- a/common/api/core/src/main/java/com/dfsek/terra/api/world/access/World.java +++ b/common/api/core/src/main/java/com/dfsek/terra/api/world/access/World.java @@ -22,10 +22,4 @@ public interface World extends WorldAccess { default Chunk getChunkAt(Vector3 location) { return getChunkAt(location.getBlockX() >> 4, location.getBlockZ() >> 4); } - - ChunkGenerator getGenerator(); - - BiomeProvider getBiomeProvider(); - - WorldConfig getConfig(); } diff --git a/common/api/core/src/main/java/com/dfsek/terra/api/world/access/WorldAccess.java b/common/api/core/src/main/java/com/dfsek/terra/api/world/access/WorldAccess.java index 206a66752..1585cf989 100644 --- a/common/api/core/src/main/java/com/dfsek/terra/api/world/access/WorldAccess.java +++ b/common/api/core/src/main/java/com/dfsek/terra/api/world/access/WorldAccess.java @@ -3,9 +3,12 @@ package com.dfsek.terra.api.world.access; import com.dfsek.terra.api.Handle; import com.dfsek.terra.api.block.entity.BlockEntity; import com.dfsek.terra.api.block.state.BlockState; +import com.dfsek.terra.api.config.WorldConfig; import com.dfsek.terra.api.entity.Entity; import com.dfsek.terra.api.entity.EntityType; import com.dfsek.terra.api.util.vector.Vector3; +import com.dfsek.terra.api.world.biome.generation.BiomeProvider; +import com.dfsek.terra.api.world.chunk.generation.ChunkGenerator; public interface WorldAccess extends Handle { @@ -46,4 +49,10 @@ public interface WorldAccess extends Handle { } Entity spawnEntity(double x, double y, double z, EntityType entityType); + + ChunkGenerator getGenerator(); + + BiomeProvider getBiomeProvider(); + + WorldConfig getConfig(); } 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 1d641e2c1..b5dd15f65 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 @@ -9,12 +9,12 @@ package com.dfsek.terra.api.world.chunk.generation; import com.dfsek.terra.api.util.vector.integer.Vector3Int; +import com.dfsek.terra.api.world.access.WorldAccess; import com.dfsek.terra.api.world.chunk.generation.stage.GenerationStage; import org.jetbrains.annotations.NotNull; import java.util.List; -import java.util.Random; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.block.state.BlockState; @@ -26,7 +26,8 @@ import com.dfsek.terra.api.world.biome.generation.BiomeProvider; public interface ChunkGenerator { - void generateChunkData(@NotNull World world, Random random, int x, int z, ProtoChunk original); + void generateChunkData(@NotNull ProtoChunk chunk, @NotNull WorldAccess world, + int chunkZ, int chunkX); Sampler createSampler(int chunkX, int chunkZ, BiomeProvider provider, World world, int elevationSmooth); ConfigPack getConfigPack(); 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 7a2da07a2..34430859e 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 @@ -19,6 +19,8 @@ package com.dfsek.terra.bukkit.generator; import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.bukkit.world.BukkitProtoWorld; + import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.generator.BiomeProvider; @@ -59,7 +61,7 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener if(this.worldConfig == null) { this.worldConfig = delegate.getConfigPack().toWorldConfig(BukkitAdapter.adapt(Bukkit.getWorld(worldInfo.getUID()))); } - delegate.generateChunkData(worldConfig.getWorld(), random, x, z, new BukkitProtoChunk(chunkData)); + delegate.generateChunkData(new BukkitProtoChunk(chunkData), worldConfig.getWorld(), z, x); } @Override diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitProtoWorld.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitProtoWorld.java index 0e441ca3a..f9a4427f0 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitProtoWorld.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitProtoWorld.java @@ -2,13 +2,17 @@ package com.dfsek.terra.bukkit.world; import com.dfsek.terra.api.block.entity.BlockEntity; import com.dfsek.terra.api.block.state.BlockState; +import com.dfsek.terra.api.config.WorldConfig; import com.dfsek.terra.api.entity.Entity; import com.dfsek.terra.api.entity.EntityType; import com.dfsek.terra.api.util.vector.Vector3; import com.dfsek.terra.api.world.access.World; +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.ProtoWorld; import com.dfsek.terra.bukkit.BukkitEntity; +import com.dfsek.terra.bukkit.generator.BukkitChunkGeneratorWrapper; import com.dfsek.terra.bukkit.world.block.data.BukkitBlockState; import com.dfsek.terra.bukkit.world.block.state.BukkitBlockEntity; @@ -69,6 +73,21 @@ public class BukkitProtoWorld implements ProtoWorld { } + @Override + public ChunkGenerator getGenerator() { + return ((BukkitChunkGeneratorWrapper) delegate.getWorld().getGenerator()).getHandle(); + } + + @Override + public BiomeProvider getBiomeProvider() { + return ((BukkitChunkGeneratorWrapper) delegate.getWorld().getGenerator()).getWorldConfig().getProvider(); + } + + @Override + public WorldConfig getConfig() { + return ((BukkitChunkGeneratorWrapper) delegate.getWorld().getGenerator()).getWorldConfig(); + } + @Override public int centerChunkX() { return delegate.getCenterChunkX(); 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 8773b1a83..7868f619c 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 @@ -17,6 +17,8 @@ package com.dfsek.terra.fabric.generation; +import com.dfsek.terra.api.world.chunk.generation.ProtoWorld; + import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.block.BlockState; @@ -62,7 +64,6 @@ import com.dfsek.terra.api.world.generator.GeneratorWrapper; import com.dfsek.terra.fabric.FabricEntryPoint; import com.dfsek.terra.fabric.block.FabricBlockState; import com.dfsek.terra.fabric.mixin.StructureAccessorAccessor; -import com.dfsek.terra.util.FastRandom; public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.ChunkGenerator implements GeneratorWrapper { @@ -193,7 +194,7 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C public CompletableFuture populateNoise(Executor executor, Blender arg, StructureAccessor structureAccessor, Chunk chunk) { return CompletableFuture.supplyAsync(() -> { World world = (World) ((StructureAccessorAccessor) structureAccessor).getWorld(); - delegate.generateChunkData(world, new FastRandom(), chunk.getPos().x, chunk.getPos().z, (ProtoChunk) chunk); + delegate.generateChunkData((ProtoChunk) chunk, (ProtoWorld) world, chunk.getPos().z, chunk.getPos().x); delegate.getGenerationStages().forEach(populator -> { if(populator instanceof Chunkified) { populator.populate(world, (com.dfsek.terra.api.world.chunk.Chunk) world);