59 lines
1.1 KiB
Java
59 lines
1.1 KiB
Java
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 size);
|
|
|
|
@Override
|
|
default int nextInt() {
|
|
return this.next(32);
|
|
}
|
|
|
|
@Override
|
|
default int nextInt(int bound) {
|
|
if (bound <= 0) {
|
|
throw new IllegalArgumentException("Bound must be positive");
|
|
} else if ((bound & bound - 1) == 0) {
|
|
return (int)((long)bound * this.next(31) >> 31);
|
|
} else {
|
|
int i;
|
|
int j;
|
|
do {
|
|
i = this.next(31);
|
|
j = i % bound;
|
|
} while (i - j + (bound - 1) < 0);
|
|
|
|
return j;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
default long nextLong() {
|
|
int i = this.next(32);
|
|
int j = this.next(32);
|
|
long l = (long)i << 32;
|
|
return l + 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 l = ((long)i << 27) + j;
|
|
return l * 1.110223E-16F;
|
|
}
|
|
}
|