83 lines
2.4 KiB
Java
83 lines
2.4 KiB
Java
package net.minecraft.util;
|
|
|
|
import io.netty.util.internal.ThreadLocalRandom;
|
|
import net.minecraft.world.level.levelgen.LegacyRandomSource;
|
|
import net.minecraft.world.level.levelgen.PositionalRandomFactory;
|
|
import net.minecraft.world.level.levelgen.RandomSupport;
|
|
import net.minecraft.world.level.levelgen.SingleThreadedRandomSource;
|
|
import net.minecraft.world.level.levelgen.ThreadSafeLegacyRandomSource;
|
|
|
|
/**
|
|
* A basic interface for random number generation. This mirrors the same methods in {@link java.util.Random}, however it does not make any guarantee that these are thread-safe, unlike {@code Random}.
|
|
* The notable difference is that {@link #setSeed(long)} is not {@code synchronized} and should not be accessed from multiple threads.
|
|
* The documentation for each individual method can be assumed to be otherwise the same as the identically named method in {@link java.util.Random}.
|
|
* @see java.util.Random
|
|
* @see net.minecraft.world.level.levelgen.SimpleRandomSource
|
|
*/
|
|
public interface RandomSource {
|
|
@Deprecated
|
|
double GAUSSIAN_SPREAD_FACTOR = 2.297;
|
|
|
|
static RandomSource create() {
|
|
return create(RandomSupport.generateUniqueSeed());
|
|
}
|
|
|
|
@Deprecated
|
|
static RandomSource createThreadSafe() {
|
|
return new ThreadSafeLegacyRandomSource(RandomSupport.generateUniqueSeed());
|
|
}
|
|
|
|
static RandomSource create(long seed) {
|
|
return new LegacyRandomSource(seed);
|
|
}
|
|
|
|
static RandomSource createNewThreadLocalInstance() {
|
|
return new SingleThreadedRandomSource(ThreadLocalRandom.current().nextLong());
|
|
}
|
|
|
|
RandomSource fork();
|
|
|
|
PositionalRandomFactory forkPositional();
|
|
|
|
void setSeed(long seed);
|
|
|
|
int nextInt();
|
|
|
|
int nextInt(int bound);
|
|
|
|
default int nextIntBetweenInclusive(int min, int max) {
|
|
return this.nextInt(max - min + 1) + min;
|
|
}
|
|
|
|
long nextLong();
|
|
|
|
boolean nextBoolean();
|
|
|
|
float nextFloat();
|
|
|
|
double nextDouble();
|
|
|
|
double nextGaussian();
|
|
|
|
default double triangle(double min, double max) {
|
|
return min + max * (this.nextDouble() - this.nextDouble());
|
|
}
|
|
|
|
default float triangle(float min, float max) {
|
|
return min + max * (this.nextFloat() - this.nextFloat());
|
|
}
|
|
|
|
default void consumeCount(int count) {
|
|
for (int i = 0; i < count; i++) {
|
|
this.nextInt();
|
|
}
|
|
}
|
|
|
|
default int nextInt(int origin, int bound) {
|
|
if (origin >= bound) {
|
|
throw new IllegalArgumentException("bound - origin is non positive");
|
|
} else {
|
|
return origin + this.nextInt(bound - origin);
|
|
}
|
|
}
|
|
}
|