Use CMWC random for enormous placements
This commit is contained in:
parent
988f078d24
commit
536f69930c
@ -13,6 +13,7 @@ import net.minecraft.util.RandomSource
|
|||||||
import net.minecraft.world.level.ChunkPos
|
import net.minecraft.world.level.ChunkPos
|
||||||
import net.minecraft.world.level.levelgen.placement.PlacementContext
|
import net.minecraft.world.level.levelgen.placement.PlacementContext
|
||||||
import net.minecraft.world.level.levelgen.placement.PlacementModifier
|
import net.minecraft.world.level.levelgen.placement.PlacementModifier
|
||||||
|
import ru.dbotthepony.mc.otm.core.util.CMWCRandom
|
||||||
import ru.dbotthepony.mc.otm.data.codec.inRange
|
import ru.dbotthepony.mc.otm.data.codec.inRange
|
||||||
import ru.dbotthepony.mc.otm.data.codec.minRange
|
import ru.dbotthepony.mc.otm.data.codec.minRange
|
||||||
import java.time.Duration
|
import java.time.Duration
|
||||||
@ -70,8 +71,7 @@ abstract class AbstractEnormousPlacement(val parameters: Parameters) : Placement
|
|||||||
.build<ChunkPos, GeneratedChunk>()
|
.build<ChunkPos, GeneratedChunk>()
|
||||||
|
|
||||||
private fun computeChunk(context: PlacementContext, pos: ChunkPos): GeneratedChunk {
|
private fun computeChunk(context: PlacementContext, pos: ChunkPos): GeneratedChunk {
|
||||||
// TODO: Maybe switch to something else other than original LCG PRNG? Original form of LCG is kinda bad for this kind of workload
|
val random = CMWCRandom(context.level.seed + HashCommon.murmurHash3(pos.x + pos.z * 31) + parameters.seedMix)
|
||||||
val random = RandomSource.create(context.level.seed + HashCommon.murmurHash3(pos.x + pos.z * 31) + parameters.seedMix)
|
|
||||||
var stream = Stream.of(BlockPos(pos.minBlockX, 0, pos.minBlockZ))
|
var stream = Stream.of(BlockPos(pos.minBlockX, 0, pos.minBlockZ))
|
||||||
parameters.placementModifiers.forEach { modifier -> stream = stream.flatMap { modifier.getPositions(context, random, it).sequential() } }
|
parameters.placementModifiers.forEach { modifier -> stream = stream.flatMap { modifier.getPositions(context, random, it).sequential() } }
|
||||||
return GeneratedChunk(stream.flatMap { getPositions(it, random) })
|
return GeneratedChunk(stream.flatMap { getPositions(it, random) })
|
||||||
|
Loading…
Reference in New Issue
Block a user