DamagePredicate.java
net.minecraft.advancements.criterion.DamagePredicate
信息
- 全限定名:net.minecraft.advancements.criterion.DamagePredicate
- 类型:public record
- 包:net.minecraft.advancements.criterion
- 源码路径:src/main/java/net/minecraft/advancements/criterion/DamagePredicate.java
- 起始行号:L9
- 职责:
TODO
字段/常量
CODEC- 类型:
Codec<DamagePredicate> - 修饰符:
public static final - 源码定位:
L16 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.advancements.criterion.DamagePredicate.Builder- 类型:
class - 修饰符:
public static - 源码定位:
L39 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
public boolean matches(ServerPlayer player, DamageSource source, float originalDamage, float actualDamage, boolean blocked) @ L27
- 方法名:matches
- 源码定位:L27
- 返回类型:boolean
- 修饰符:public
参数:
- player: ServerPlayer
- source: DamageSource
- originalDamage: float
- actualDamage: float
- blocked: boolean
说明:
TODO
代码
public record DamagePredicate(
MinMaxBounds.Doubles dealtDamage,
MinMaxBounds.Doubles takenDamage,
Optional<EntityPredicate> sourceEntity,
Optional<Boolean> blocked,
Optional<DamageSourcePredicate> type
) {
public static final Codec<DamagePredicate> CODEC = RecordCodecBuilder.create(
i -> i.group(
MinMaxBounds.Doubles.CODEC.optionalFieldOf("dealt", MinMaxBounds.Doubles.ANY).forGetter(DamagePredicate::dealtDamage),
MinMaxBounds.Doubles.CODEC.optionalFieldOf("taken", MinMaxBounds.Doubles.ANY).forGetter(DamagePredicate::takenDamage),
EntityPredicate.CODEC.optionalFieldOf("source_entity").forGetter(DamagePredicate::sourceEntity),
Codec.BOOL.optionalFieldOf("blocked").forGetter(DamagePredicate::blocked),
DamageSourcePredicate.CODEC.optionalFieldOf("type").forGetter(DamagePredicate::type)
)
.apply(i, DamagePredicate::new)
);
public boolean matches(ServerPlayer player, DamageSource source, float originalDamage, float actualDamage, boolean blocked) {
if (!this.dealtDamage.matches(originalDamage)) {
return false;
} else if (!this.takenDamage.matches(actualDamage)) {
return false;
} else if (this.sourceEntity.isPresent() && !this.sourceEntity.get().matches(player, source.getEntity())) {
return false;
} else {
return this.blocked.isPresent() && this.blocked.get() != blocked ? false : !this.type.isPresent() || this.type.get().matches(player, source);
}
}
public static class Builder {
private MinMaxBounds.Doubles dealtDamage = MinMaxBounds.Doubles.ANY;
private MinMaxBounds.Doubles takenDamage = MinMaxBounds.Doubles.ANY;
private Optional<EntityPredicate> sourceEntity = Optional.empty();
private Optional<Boolean> blocked = Optional.empty();
private Optional<DamageSourcePredicate> type = Optional.empty();
public static DamagePredicate.Builder damageInstance() {
return new DamagePredicate.Builder();
}
public DamagePredicate.Builder dealtDamage(MinMaxBounds.Doubles dealtDamage) {
this.dealtDamage = dealtDamage;
return this;
}
public DamagePredicate.Builder takenDamage(MinMaxBounds.Doubles takenDamage) {
this.takenDamage = takenDamage;
return this;
}
public DamagePredicate.Builder sourceEntity(EntityPredicate sourceEntity) {
this.sourceEntity = Optional.of(sourceEntity);
return this;
}
public DamagePredicate.Builder blocked(Boolean blocked) {
this.blocked = Optional.of(blocked);
return this;
}
public DamagePredicate.Builder type(DamageSourcePredicate type) {
this.type = Optional.of(type);
return this;
}
public DamagePredicate.Builder type(DamageSourcePredicate.Builder type) {
this.type = Optional.of(type.build());
return this;
}
public DamagePredicate build() {
return new DamagePredicate(this.dealtDamage, this.takenDamage, this.sourceEntity, this.blocked, this.type);
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置: