Code/net/minecraft/world/level/levelgen/BitRandomSource.java

59 lines
1.4 KiB
Java
Raw Normal View History

2025-07-01 06:20:03 +00:00
package net.minecraft.world.level.levelgen;
import net.minecraft.util.RandomSource;
public interface BitRandomSource extends RandomSource {
float FLOAT_MULTIPLIER = 5.9604645E-8F;
double DOUBLE_MULTIPLIER = 1.110223E-16F;
int next(int p_188498_);
@Override
default int nextInt() {
return this.next(32);
}
@Override
default int nextInt(int p_188504_) {
if (p_188504_ <= 0) {
throw new IllegalArgumentException("Bound must be positive");
} else if ((p_188504_ & p_188504_ - 1) == 0) {
return (int)((long)p_188504_ * this.next(31) >> 31);
} else {
int i;
int j;
do {
i = this.next(31);
j = i % p_188504_;
} while (i - j + (p_188504_ - 1) < 0);
return j;
}
}
@Override
default long nextLong() {
int i = this.next(32);
int j = this.next(32);
long k = (long)i << 32;
return k + j;
}
@Override
default boolean nextBoolean() {
return this.next(1) != 0;
}
@Override
default float nextFloat() {
return this.next(24) * 5.9604645E-8F;
}
@Override
default double nextDouble() {
int i = this.next(26);
int j = this.next(27);
long k = ((long)i << 27) + j;
return k * 1.110223E-16F;
}
}