DistancePredicate.java

net.minecraft.advancements.criterion.DistancePredicate

信息

  • 全限定名:net.minecraft.advancements.criterion.DistancePredicate
  • 类型:public record
  • 包:net.minecraft.advancements.criterion
  • 源码路径:src/main/java/net/minecraft/advancements/criterion/DistancePredicate.java
  • 起始行号:L7
  • 职责:

    TODO

字段/常量

  • CODEC
    • 类型: Codec<DistancePredicate>
    • 修饰符: public static final
    • 源码定位: L10
    • 说明:

      TODO

内部类/嵌套类型

构造器

方法

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

public static DistancePredicate horizontal(MinMaxBounds.Doubles horizontal) @ L21

  • 方法名:horizontal
  • 源码定位:L21
  • 返回类型:DistancePredicate
  • 修饰符:public static

参数:

  • horizontal: MinMaxBounds.Doubles

说明:

TODO

public static DistancePredicate vertical(MinMaxBounds.Doubles y) @ L25

  • 方法名:vertical
  • 源码定位:L25
  • 返回类型:DistancePredicate
  • 修饰符:public static

参数:

  • y: MinMaxBounds.Doubles

说明:

TODO

public static DistancePredicate absolute(MinMaxBounds.Doubles absolute) @ L29

  • 方法名:absolute
  • 源码定位:L29
  • 返回类型:DistancePredicate
  • 修饰符:public static

参数:

  • absolute: MinMaxBounds.Doubles

说明:

TODO

public boolean matches(double x0, double y0, double z0, double x1, double y1, double z1) @ L33

  • 方法名:matches
  • 源码定位:L33
  • 返回类型:boolean
  • 修饰符:public

参数:

  • x0: double
  • y0: double
  • z0: double
  • x1: double
  • y1: double
  • z1: double

说明:

TODO

代码

public record DistancePredicate(
    MinMaxBounds.Doubles x, MinMaxBounds.Doubles y, MinMaxBounds.Doubles z, MinMaxBounds.Doubles horizontal, MinMaxBounds.Doubles absolute
) {
    public static final Codec<DistancePredicate> CODEC = RecordCodecBuilder.create(
        i -> i.group(
                MinMaxBounds.Doubles.CODEC.optionalFieldOf("x", MinMaxBounds.Doubles.ANY).forGetter(DistancePredicate::x),
                MinMaxBounds.Doubles.CODEC.optionalFieldOf("y", MinMaxBounds.Doubles.ANY).forGetter(DistancePredicate::y),
                MinMaxBounds.Doubles.CODEC.optionalFieldOf("z", MinMaxBounds.Doubles.ANY).forGetter(DistancePredicate::z),
                MinMaxBounds.Doubles.CODEC.optionalFieldOf("horizontal", MinMaxBounds.Doubles.ANY).forGetter(DistancePredicate::horizontal),
                MinMaxBounds.Doubles.CODEC.optionalFieldOf("absolute", MinMaxBounds.Doubles.ANY).forGetter(DistancePredicate::absolute)
            )
            .apply(i, DistancePredicate::new)
    );
 
    public static DistancePredicate horizontal(MinMaxBounds.Doubles horizontal) {
        return new DistancePredicate(MinMaxBounds.Doubles.ANY, MinMaxBounds.Doubles.ANY, MinMaxBounds.Doubles.ANY, horizontal, MinMaxBounds.Doubles.ANY);
    }
 
    public static DistancePredicate vertical(MinMaxBounds.Doubles y) {
        return new DistancePredicate(MinMaxBounds.Doubles.ANY, y, MinMaxBounds.Doubles.ANY, MinMaxBounds.Doubles.ANY, MinMaxBounds.Doubles.ANY);
    }
 
    public static DistancePredicate absolute(MinMaxBounds.Doubles absolute) {
        return new DistancePredicate(MinMaxBounds.Doubles.ANY, MinMaxBounds.Doubles.ANY, MinMaxBounds.Doubles.ANY, MinMaxBounds.Doubles.ANY, absolute);
    }
 
    public boolean matches(double x0, double y0, double z0, double x1, double y1, double z1) {
        float xd = (float)(x0 - x1);
        float yd = (float)(y0 - y1);
        float zd = (float)(z0 - z1);
        if (!this.x.matches(Mth.abs(xd)) || !this.y.matches(Mth.abs(yd)) || !this.z.matches(Mth.abs(zd))) {
            return false;
        } else {
            return !this.horizontal.matchesSqr(xd * xd + zd * zd) ? false : this.absolute.matchesSqr(xd * xd + yd * yd + zd * zd);
        }
    }
}

引用的其他类

  • MinMaxBounds

    • 引用位置: 参数
  • Mth

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