WeightedRandom.java

net.minecraft.util.random.WeightedRandom

信息

  • 全限定名:net.minecraft.util.random.WeightedRandom
  • 类型:public class
  • 包:net.minecraft.util.random
  • 源码路径:src/main/java/net/minecraft/util/random/WeightedRandom.java
  • 起始行号:L9
  • 职责:

    TODO

字段/常量

内部类/嵌套类型

构造器

private WeightedRandom() @ L10

  • 构造器名:WeightedRandom
  • 源码定位:L10
  • 修饰符:private

参数:

说明:

TODO

方法

下面的方法块按源码顺序生成。

public static <T> int getTotalWeight(List<T> items, ToIntFunction<T> weightGetter) @ L13

  • 方法名:getTotalWeight
  • 源码定位:L13
  • 返回类型: int
  • 修饰符:public static

参数:

  • items: List
  • weightGetter: ToIntFunction

说明:

TODO

public static <T> Optional<T> getRandomItem(RandomSource random, List<T> items, int totalWeight, ToIntFunction<T> weightGetter) @ L27

  • 方法名:getRandomItem
  • 源码定位:L27
  • 返回类型: Optional
  • 修饰符:public static

参数:

  • random: RandomSource
  • items: List
  • totalWeight: int
  • weightGetter: ToIntFunction

说明:

TODO

public static <T> Optional<T> getWeightedItem(List<T> items, int index, ToIntFunction<T> weightGetter) @ L38

  • 方法名:getWeightedItem
  • 源码定位:L38
  • 返回类型: Optional
  • 修饰符:public static

参数:

  • items: List
  • index: int
  • weightGetter: ToIntFunction

说明:

TODO

public static <T> Optional<T> getRandomItem(RandomSource random, List<T> items, ToIntFunction<T> weightGetter) @ L49

  • 方法名:getRandomItem
  • 源码定位:L49
  • 返回类型: Optional
  • 修饰符:public static

参数:

  • random: RandomSource
  • items: List
  • weightGetter: ToIntFunction

说明:

TODO

代码

public class WeightedRandom {
    private WeightedRandom() {
    }
 
    public static <T> int getTotalWeight(List<T> items, ToIntFunction<T> weightGetter) {
        long totalWeight = 0L;
 
        for (T item : items) {
            totalWeight += weightGetter.applyAsInt(item);
        }
 
        if (totalWeight > 2147483647L) {
            throw new IllegalArgumentException("Sum of weights must be <= 2147483647");
        } else {
            return (int)totalWeight;
        }
    }
 
    public static <T> Optional<T> getRandomItem(RandomSource random, List<T> items, int totalWeight, ToIntFunction<T> weightGetter) {
        if (totalWeight < 0) {
            throw (IllegalArgumentException)Util.pauseInIde(new IllegalArgumentException("Negative total weight in getRandomItem"));
        } else if (totalWeight == 0) {
            return Optional.empty();
        } else {
            int selection = random.nextInt(totalWeight);
            return getWeightedItem(items, selection, weightGetter);
        }
    }
 
    public static <T> Optional<T> getWeightedItem(List<T> items, int index, ToIntFunction<T> weightGetter) {
        for (T item : items) {
            index -= weightGetter.applyAsInt(item);
            if (index < 0) {
                return Optional.of(item);
            }
        }
 
        return Optional.empty();
    }
 
    public static <T> Optional<T> getRandomItem(RandomSource random, List<T> items, ToIntFunction<T> weightGetter) {
        return getRandomItem(random, items, getTotalWeight(items, weightGetter), weightGetter);
    }
}

引用的其他类

  • RandomSource

    • 引用位置: 参数
  • Util

    • 引用位置: 方法调用
    • 关联成员: Util.pauseInIde()