Provide better random seeds for random number generators
This commit is contained in:
parent
49f76c7bdd
commit
f19804dd4a
@ -4,10 +4,11 @@ import net.minecraft.util.Mth
|
|||||||
import net.minecraft.util.RandomSource
|
import net.minecraft.util.RandomSource
|
||||||
import net.minecraft.world.level.levelgen.MarsagliaPolarGaussian
|
import net.minecraft.world.level.levelgen.MarsagliaPolarGaussian
|
||||||
import net.minecraft.world.level.levelgen.PositionalRandomFactory
|
import net.minecraft.world.level.levelgen.PositionalRandomFactory
|
||||||
|
import net.minecraft.world.level.levelgen.RandomSupport
|
||||||
import java.lang.StringBuilder
|
import java.lang.StringBuilder
|
||||||
import java.util.random.RandomGenerator
|
import java.util.random.RandomGenerator
|
||||||
|
|
||||||
class CMWCRandom(seed: Long = System.nanoTime()) : RandomGenerator, RandomSource {
|
class CMWCRandom(seed: Long = RandomSupport.generateUniqueSeed()) : RandomGenerator, RandomSource {
|
||||||
private val state = IntArray(CMWC_STATE_SIZE)
|
private val state = IntArray(CMWC_STATE_SIZE)
|
||||||
private var carry = 0
|
private var carry = 0
|
||||||
private var stateIndex = 0
|
private var stateIndex = 0
|
||||||
|
@ -4,13 +4,14 @@ import net.minecraft.util.Mth
|
|||||||
import net.minecraft.util.RandomSource
|
import net.minecraft.util.RandomSource
|
||||||
import net.minecraft.world.level.levelgen.MarsagliaPolarGaussian
|
import net.minecraft.world.level.levelgen.MarsagliaPolarGaussian
|
||||||
import net.minecraft.world.level.levelgen.PositionalRandomFactory
|
import net.minecraft.world.level.levelgen.PositionalRandomFactory
|
||||||
|
import net.minecraft.world.level.levelgen.RandomSupport
|
||||||
import java.lang.StringBuilder
|
import java.lang.StringBuilder
|
||||||
import java.util.random.RandomGenerator
|
import java.util.random.RandomGenerator
|
||||||
|
|
||||||
// different from LegacyRandomSource minecraft uses in meaning that this class use different constants
|
// different from LegacyRandomSource minecraft uses in meaning that this class use different constants
|
||||||
// and always use upper 32 bits instead of implementing BitRandomSource
|
// and always use upper 32 bits instead of implementing BitRandomSource
|
||||||
// AND it uses all bits from provided seed
|
// AND it uses all bits from provided seed
|
||||||
class LCG64Random(private var seed: Long = System.nanoTime()) : RandomGenerator, RandomSource {
|
class LCG64Random(private var seed: Long = RandomSupport.generateUniqueSeed()) : RandomGenerator, RandomSource {
|
||||||
private val gaussian = MarsagliaPolarGaussian(this)
|
private val gaussian = MarsagliaPolarGaussian(this)
|
||||||
|
|
||||||
override fun setSeed(seed: Long) {
|
override fun setSeed(seed: Long) {
|
||||||
|
@ -5,6 +5,7 @@ import net.minecraft.util.Mth
|
|||||||
import net.minecraft.util.RandomSource
|
import net.minecraft.util.RandomSource
|
||||||
import net.minecraft.world.level.levelgen.MarsagliaPolarGaussian
|
import net.minecraft.world.level.levelgen.MarsagliaPolarGaussian
|
||||||
import net.minecraft.world.level.levelgen.PositionalRandomFactory
|
import net.minecraft.world.level.levelgen.PositionalRandomFactory
|
||||||
|
import net.minecraft.world.level.levelgen.RandomSupport
|
||||||
import java.lang.StringBuilder
|
import java.lang.StringBuilder
|
||||||
import java.util.random.RandomGenerator
|
import java.util.random.RandomGenerator
|
||||||
|
|
||||||
@ -16,10 +17,12 @@ class Xoshiro256SSRandom(
|
|||||||
) : RandomGenerator, RandomSource {
|
) : RandomGenerator, RandomSource {
|
||||||
private val gaussian = MarsagliaPolarGaussian(this)
|
private val gaussian = MarsagliaPolarGaussian(this)
|
||||||
|
|
||||||
constructor(seed: Long = System.nanoTime()) : this(1L, 2L, 3L, 4L) {
|
constructor(seed: Long) : this(1L, 2L, 3L, 4L) {
|
||||||
setSeed(seed)
|
setSeed(seed)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
constructor() : this(RandomSupport.generateUniqueSeed(), RandomSupport.generateUniqueSeed(), RandomSupport.generateUniqueSeed(), RandomSupport.generateUniqueSeed())
|
||||||
|
|
||||||
override fun setSeed(seed: Long) {
|
override fun setSeed(seed: Long) {
|
||||||
val rng = LCG64Random(seed)
|
val rng = LCG64Random(seed)
|
||||||
s0 = rng.nextLong()
|
s0 = rng.nextLong()
|
||||||
|
Loading…
Reference in New Issue
Block a user