EquipmentDispenseItemBehavior.java

net.minecraft.core.dispenser.EquipmentDispenseItemBehavior

信息

  • 全限定名:net.minecraft.core.dispenser.EquipmentDispenseItemBehavior
  • 类型:public class
  • 包:net.minecraft.core.dispenser
  • 源码路径:src/main/java/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java
  • 起始行号:L12
  • 继承:DefaultDispenseItemBehavior
  • 职责:

    TODO

字段/常量

  • INSTANCE
    • 类型: EquipmentDispenseItemBehavior
    • 修饰符: public static final
    • 源码定位: L13
    • 说明:

      TODO

内部类/嵌套类型

构造器

方法

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

protected ItemStack execute(BlockSource source, ItemStack dispensed) @ L15

  • 方法名:execute
  • 源码定位:L15
  • 返回类型:ItemStack
  • 修饰符:protected

参数:

  • source: BlockSource
  • dispensed: ItemStack

说明:

TODO

public static boolean dispenseEquipment(BlockSource source, ItemStack dispensed) @ L20

  • 方法名:dispenseEquipment
  • 源码定位:L20
  • 返回类型:boolean
  • 修饰符:public static

参数:

  • source: BlockSource
  • dispensed: ItemStack

说明:

TODO

代码

public class EquipmentDispenseItemBehavior extends DefaultDispenseItemBehavior {
    public static final EquipmentDispenseItemBehavior INSTANCE = new EquipmentDispenseItemBehavior();
 
    @Override
    protected ItemStack execute(BlockSource source, ItemStack dispensed) {
        return dispenseEquipment(source, dispensed) ? dispensed : super.execute(source, dispensed);
    }
 
    public static boolean dispenseEquipment(BlockSource source, ItemStack dispensed) {
        BlockPos pos = source.pos().relative(source.state().getValue(DispenserBlock.FACING));
        List<LivingEntity> entities = source.level().getEntitiesOfClass(LivingEntity.class, new AABB(pos), entity -> entity.canEquipWithDispenser(dispensed));
        if (entities.isEmpty()) {
            return false;
        } else {
            LivingEntity target = entities.getFirst();
            EquipmentSlot slot = target.getEquipmentSlotForItem(dispensed);
            ItemStack equip = dispensed.split(1);
            target.setItemSlot(slot, equip);
            if (target instanceof Mob targetMob) {
                targetMob.setGuaranteedDrop(slot);
                targetMob.setPersistenceRequired();
            }
 
            return true;
        }
    }
}

引用的其他类