DamageSourcePredicate.java
net.minecraft.advancements.criterion.DamageSourcePredicate
信息
- 全限定名:net.minecraft.advancements.criterion.DamageSourcePredicate
- 类型:public record
- 包:net.minecraft.advancements.criterion
- 源码路径:src/main/java/net/minecraft/advancements/criterion/DamageSourcePredicate.java
- 起始行号:L15
- 职责:
TODO
字段/常量
CODEC- 类型:
Codec<DamageSourcePredicate> - 修饰符:
public static final - 源码定位:
L18 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.advancements.criterion.DamageSourcePredicate.Builder- 类型:
class - 修饰符:
public static - 源码定位:
L48 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
public boolean matches(ServerPlayer player, DamageSource source) @ L28
- 方法名:matches
- 源码定位:L28
- 返回类型:boolean
- 修饰符:public
参数:
- player: ServerPlayer
- source: DamageSource
说明:
TODO
public boolean matches(ServerLevel level, Vec3 position, DamageSource source) @ L32
- 方法名:matches
- 源码定位:L32
- 返回类型:boolean
- 修饰符:public
参数:
- level: ServerLevel
- position: Vec3
- source: DamageSource
说明:
TODO
代码
public record DamageSourcePredicate(
List<TagPredicate<DamageType>> tags, Optional<EntityPredicate> directEntity, Optional<EntityPredicate> sourceEntity, Optional<Boolean> isDirect
) {
public static final Codec<DamageSourcePredicate> CODEC = RecordCodecBuilder.create(
i -> i.group(
TagPredicate.codec(Registries.DAMAGE_TYPE).listOf().optionalFieldOf("tags", List.of()).forGetter(DamageSourcePredicate::tags),
EntityPredicate.CODEC.optionalFieldOf("direct_entity").forGetter(DamageSourcePredicate::directEntity),
EntityPredicate.CODEC.optionalFieldOf("source_entity").forGetter(DamageSourcePredicate::sourceEntity),
Codec.BOOL.optionalFieldOf("is_direct").forGetter(DamageSourcePredicate::isDirect)
)
.apply(i, DamageSourcePredicate::new)
);
public boolean matches(ServerPlayer player, DamageSource source) {
return this.matches(player.level(), player.position(), source);
}
public boolean matches(ServerLevel level, Vec3 position, DamageSource source) {
for (TagPredicate<DamageType> tag : this.tags) {
if (!tag.matches(source.typeHolder())) {
return false;
}
}
if (this.directEntity.isPresent() && !this.directEntity.get().matches(level, position, source.getDirectEntity())) {
return false;
} else {
return this.sourceEntity.isPresent() && !this.sourceEntity.get().matches(level, position, source.getEntity())
? false
: !this.isDirect.isPresent() || this.isDirect.get() == source.isDirect();
}
}
public static class Builder {
private final ImmutableList.Builder<TagPredicate<DamageType>> tags = ImmutableList.builder();
private Optional<EntityPredicate> directEntity = Optional.empty();
private Optional<EntityPredicate> sourceEntity = Optional.empty();
private Optional<Boolean> isDirect = Optional.empty();
public static DamageSourcePredicate.Builder damageType() {
return new DamageSourcePredicate.Builder();
}
public DamageSourcePredicate.Builder tag(TagPredicate<DamageType> tag) {
this.tags.add(tag);
return this;
}
public DamageSourcePredicate.Builder direct(EntityPredicate.Builder directEntity) {
this.directEntity = Optional.of(directEntity.build());
return this;
}
public DamageSourcePredicate.Builder source(EntityPredicate.Builder sourceEntity) {
this.sourceEntity = Optional.of(sourceEntity.build());
return this;
}
public DamageSourcePredicate.Builder isDirect(boolean direct) {
this.isDirect = Optional.of(direct);
return this;
}
public DamageSourcePredicate build() {
return new DamageSourcePredicate(this.tags.build(), this.directEntity, this.sourceEntity, this.isDirect);
}
}
}引用的其他类
-
- 引用位置:
方法调用 - 关联成员:
TagPredicate.codec()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置: