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;
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Mth.lengthSquared()
- 引用位置: