MovementPredicate.java

net.minecraft.advancements.criterion.MovementPredicate

信息

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

    TODO

字段/常量

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

      TODO

内部类/嵌套类型

构造器

方法

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

public static MovementPredicate speed(MinMaxBounds.Doubles bounds) @ L29

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

参数:

  • bounds: MinMaxBounds.Doubles

说明:

TODO

public static MovementPredicate horizontalSpeed(MinMaxBounds.Doubles bounds) @ L41

  • 方法名:horizontalSpeed
  • 源码定位:L41
  • 返回类型:MovementPredicate
  • 修饰符:public static

参数:

  • bounds: MinMaxBounds.Doubles

说明:

TODO

public static MovementPredicate verticalSpeed(MinMaxBounds.Doubles bounds) @ L53

  • 方法名:verticalSpeed
  • 源码定位:L53
  • 返回类型:MovementPredicate
  • 修饰符:public static

参数:

  • bounds: MinMaxBounds.Doubles

说明:

TODO

public static MovementPredicate fallDistance(MinMaxBounds.Doubles bounds) @ L65

  • 方法名:fallDistance
  • 源码定位:L65
  • 返回类型:MovementPredicate
  • 修饰符:public static

参数:

  • bounds: MinMaxBounds.Doubles

说明:

TODO

public boolean matches(double x, double y, double z, double fallDistance) @ L77

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

参数:

  • x: double
  • y: double
  • z: double
  • fallDistance: double

说明:

TODO

代码

public record MovementPredicate(
    MinMaxBounds.Doubles x,
    MinMaxBounds.Doubles y,
    MinMaxBounds.Doubles z,
    MinMaxBounds.Doubles speed,
    MinMaxBounds.Doubles horizontalSpeed,
    MinMaxBounds.Doubles verticalSpeed,
    MinMaxBounds.Doubles fallDistance
) {
    public static final Codec<MovementPredicate> CODEC = RecordCodecBuilder.create(
        i -> i.group(
                MinMaxBounds.Doubles.CODEC.optionalFieldOf("x", MinMaxBounds.Doubles.ANY).forGetter(MovementPredicate::x),
                MinMaxBounds.Doubles.CODEC.optionalFieldOf("y", MinMaxBounds.Doubles.ANY).forGetter(MovementPredicate::y),
                MinMaxBounds.Doubles.CODEC.optionalFieldOf("z", MinMaxBounds.Doubles.ANY).forGetter(MovementPredicate::z),
                MinMaxBounds.Doubles.CODEC.optionalFieldOf("speed", MinMaxBounds.Doubles.ANY).forGetter(MovementPredicate::speed),
                MinMaxBounds.Doubles.CODEC.optionalFieldOf("horizontal_speed", MinMaxBounds.Doubles.ANY).forGetter(MovementPredicate::horizontalSpeed),
                MinMaxBounds.Doubles.CODEC.optionalFieldOf("vertical_speed", MinMaxBounds.Doubles.ANY).forGetter(MovementPredicate::verticalSpeed),
                MinMaxBounds.Doubles.CODEC.optionalFieldOf("fall_distance", MinMaxBounds.Doubles.ANY).forGetter(MovementPredicate::fallDistance)
            )
            .apply(i, MovementPredicate::new)
    );
 
    public static MovementPredicate speed(MinMaxBounds.Doubles bounds) {
        return new MovementPredicate(
            MinMaxBounds.Doubles.ANY,
            MinMaxBounds.Doubles.ANY,
            MinMaxBounds.Doubles.ANY,
            bounds,
            MinMaxBounds.Doubles.ANY,
            MinMaxBounds.Doubles.ANY,
            MinMaxBounds.Doubles.ANY
        );
    }
 
    public static MovementPredicate horizontalSpeed(MinMaxBounds.Doubles bounds) {
        return new MovementPredicate(
            MinMaxBounds.Doubles.ANY,
            MinMaxBounds.Doubles.ANY,
            MinMaxBounds.Doubles.ANY,
            MinMaxBounds.Doubles.ANY,
            bounds,
            MinMaxBounds.Doubles.ANY,
            MinMaxBounds.Doubles.ANY
        );
    }
 
    public static MovementPredicate verticalSpeed(MinMaxBounds.Doubles bounds) {
        return new MovementPredicate(
            MinMaxBounds.Doubles.ANY,
            MinMaxBounds.Doubles.ANY,
            MinMaxBounds.Doubles.ANY,
            MinMaxBounds.Doubles.ANY,
            MinMaxBounds.Doubles.ANY,
            bounds,
            MinMaxBounds.Doubles.ANY
        );
    }
 
    public static MovementPredicate fallDistance(MinMaxBounds.Doubles bounds) {
        return new MovementPredicate(
            MinMaxBounds.Doubles.ANY,
            MinMaxBounds.Doubles.ANY,
            MinMaxBounds.Doubles.ANY,
            MinMaxBounds.Doubles.ANY,
            MinMaxBounds.Doubles.ANY,
            MinMaxBounds.Doubles.ANY,
            bounds
        );
    }
 
    public boolean matches(double x, double y, double z, double fallDistance) {
        if (this.x.matches(x) && this.y.matches(y) && this.z.matches(z)) {
            double speedSqr = Mth.lengthSquared(x, y, z);
            if (!this.speed.matchesSqr(speedSqr)) {
                return false;
            } else {
                double horizontalSpeedSqr = Mth.lengthSquared(x, z);
                if (!this.horizontalSpeed.matchesSqr(horizontalSpeedSqr)) {
                    return false;
                } else {
                    double verticalSpeed = Math.abs(y);
                    return !this.verticalSpeed.matches(verticalSpeed) ? false : this.fallDistance.matches(fallDistance);
                }
            }
        } else {
            return false;
        }
    }
}

引用的其他类

  • MinMaxBounds

    • 引用位置: 参数
  • Mth

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