EntityEquipmentPredicate.java

net.minecraft.advancements.criterion.EntityEquipmentPredicate

信息

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

    TODO

字段/常量

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

      TODO

内部类/嵌套类型

  • net.minecraft.advancements.criterion.EntityEquipmentPredicate.Builder
    • 类型: class
    • 修饰符: public static
    • 源码定位: L81
    • 说明:

      TODO

构造器

方法

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

public static EntityEquipmentPredicate captainPredicate(HolderGetter<Item> items, HolderGetter<BannerPattern> patternGetter) @ L41

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

参数:

  • items: HolderGetter
  • patternGetter: HolderGetter

说明:

TODO

public boolean matches(Entity entity) @ L59

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

参数:

  • entity: Entity

说明:

TODO

代码

public record EntityEquipmentPredicate(
    Optional<ItemPredicate> head,
    Optional<ItemPredicate> chest,
    Optional<ItemPredicate> legs,
    Optional<ItemPredicate> feet,
    Optional<ItemPredicate> body,
    Optional<ItemPredicate> mainhand,
    Optional<ItemPredicate> offhand
) {
    public static final Codec<EntityEquipmentPredicate> CODEC = RecordCodecBuilder.create(
        i -> i.group(
                ItemPredicate.CODEC.optionalFieldOf("head").forGetter(EntityEquipmentPredicate::head),
                ItemPredicate.CODEC.optionalFieldOf("chest").forGetter(EntityEquipmentPredicate::chest),
                ItemPredicate.CODEC.optionalFieldOf("legs").forGetter(EntityEquipmentPredicate::legs),
                ItemPredicate.CODEC.optionalFieldOf("feet").forGetter(EntityEquipmentPredicate::feet),
                ItemPredicate.CODEC.optionalFieldOf("body").forGetter(EntityEquipmentPredicate::body),
                ItemPredicate.CODEC.optionalFieldOf("mainhand").forGetter(EntityEquipmentPredicate::mainhand),
                ItemPredicate.CODEC.optionalFieldOf("offhand").forGetter(EntityEquipmentPredicate::offhand)
            )
            .apply(i, EntityEquipmentPredicate::new)
    );
 
    public static EntityEquipmentPredicate captainPredicate(HolderGetter<Item> items, HolderGetter<BannerPattern> patternGetter) {
        return EntityEquipmentPredicate.Builder.equipment()
            .head(
                ItemPredicate.Builder.item()
                    .of(items, Items.WHITE_BANNER)
                    .withComponents(
                        DataComponentMatchers.Builder.components()
                            .exact(
                                DataComponentExactPredicate.someOf(
                                    Raid.getBannerComponentPatch(patternGetter).split().added(), DataComponents.BANNER_PATTERNS, DataComponents.ITEM_NAME
                                )
                            )
                            .build()
                    )
            )
            .build();
    }
 
    public boolean matches(@Nullable Entity entity) {
        if (entity instanceof LivingEntity livingEntity) {
            if (this.head.isPresent() && !this.head.get().test((ItemInstance)livingEntity.getItemBySlot(EquipmentSlot.HEAD))) {
                return false;
            } else if (this.chest.isPresent() && !this.chest.get().test((ItemInstance)livingEntity.getItemBySlot(EquipmentSlot.CHEST))) {
                return false;
            } else if (this.legs.isPresent() && !this.legs.get().test((ItemInstance)livingEntity.getItemBySlot(EquipmentSlot.LEGS))) {
                return false;
            } else if (this.feet.isPresent() && !this.feet.get().test((ItemInstance)livingEntity.getItemBySlot(EquipmentSlot.FEET))) {
                return false;
            } else if (this.body.isPresent() && !this.body.get().test((ItemInstance)livingEntity.getItemBySlot(EquipmentSlot.BODY))) {
                return false;
            } else {
                return this.mainhand.isPresent() && !this.mainhand.get().test((ItemInstance)livingEntity.getItemBySlot(EquipmentSlot.MAINHAND))
                    ? false
                    : !this.offhand.isPresent() || this.offhand.get().test((ItemInstance)livingEntity.getItemBySlot(EquipmentSlot.OFFHAND));
            }
        } else {
            return false;
        }
    }
 
    public static class Builder {
        private Optional<ItemPredicate> head = Optional.empty();
        private Optional<ItemPredicate> chest = Optional.empty();
        private Optional<ItemPredicate> legs = Optional.empty();
        private Optional<ItemPredicate> feet = Optional.empty();
        private Optional<ItemPredicate> body = Optional.empty();
        private Optional<ItemPredicate> mainhand = Optional.empty();
        private Optional<ItemPredicate> offhand = Optional.empty();
 
        public static EntityEquipmentPredicate.Builder equipment() {
            return new EntityEquipmentPredicate.Builder();
        }
 
        public EntityEquipmentPredicate.Builder head(ItemPredicate.Builder head) {
            this.head = Optional.of(head.build());
            return this;
        }
 
        public EntityEquipmentPredicate.Builder chest(ItemPredicate.Builder chest) {
            this.chest = Optional.of(chest.build());
            return this;
        }
 
        public EntityEquipmentPredicate.Builder legs(ItemPredicate.Builder legs) {
            this.legs = Optional.of(legs.build());
            return this;
        }
 
        public EntityEquipmentPredicate.Builder feet(ItemPredicate.Builder feet) {
            this.feet = Optional.of(feet.build());
            return this;
        }
 
        public EntityEquipmentPredicate.Builder body(ItemPredicate.Builder body) {
            this.body = Optional.of(body.build());
            return this;
        }
 
        public EntityEquipmentPredicate.Builder mainhand(ItemPredicate.Builder mainhand) {
            this.mainhand = Optional.of(mainhand.build());
            return this;
        }
 
        public EntityEquipmentPredicate.Builder offhand(ItemPredicate.Builder offhand) {
            this.offhand = Optional.of(offhand.build());
            return this;
        }
 
        public EntityEquipmentPredicate build() {
            return new EntityEquipmentPredicate(this.head, this.chest, this.legs, this.feet, this.body, this.mainhand, this.offhand);
        }
    }
}

引用的其他类