ProjectileDispenseBehavior.java

net.minecraft.core.dispenser.ProjectileDispenseBehavior

信息

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

    TODO

字段/常量

  • projectileItem

    • 类型: ProjectileItem
    • 修饰符: private final
    • 源码定位: L13
    • 说明:

      TODO

  • dispenseConfig

    • 类型: ProjectileItem.DispenseConfig
    • 修饰符: private final
    • 源码定位: L14
    • 说明:

      TODO

内部类/嵌套类型

构造器

public ProjectileDispenseBehavior(Item item) @ L16

  • 构造器名:ProjectileDispenseBehavior
  • 源码定位:L16
  • 修饰符:public

参数:

  • item: Item

说明:

TODO

方法

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

public ItemStack execute(BlockSource source, ItemStack dispensed) @ L25

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

参数:

  • source: BlockSource
  • dispensed: ItemStack

说明:

TODO

protected void playSound(BlockSource source) @ L44

  • 方法名:playSound
  • 源码定位:L44
  • 返回类型:void
  • 修饰符:protected

参数:

  • source: BlockSource

说明:

TODO

代码

public class ProjectileDispenseBehavior extends DefaultDispenseItemBehavior {
    private final ProjectileItem projectileItem;
    private final ProjectileItem.DispenseConfig dispenseConfig;
 
    public ProjectileDispenseBehavior(Item item) {
        if (item instanceof ProjectileItem projectileItem) {
            this.projectileItem = projectileItem;
            this.dispenseConfig = projectileItem.createDispenseConfig();
        } else {
            throw new IllegalArgumentException(item + " not instance of " + ProjectileItem.class.getSimpleName());
        }
    }
 
    @Override
    public ItemStack execute(BlockSource source, ItemStack dispensed) {
        ServerLevel level = source.level();
        Direction direction = source.state().getValue(DispenserBlock.FACING);
        Position position = this.dispenseConfig.positionFunction().getDispensePosition(source, direction);
        Projectile.spawnProjectileUsingShoot(
            this.projectileItem.asProjectile(level, position, dispensed, direction),
            level,
            dispensed,
            direction.getStepX(),
            direction.getStepY(),
            direction.getStepZ(),
            this.dispenseConfig.power(),
            this.dispenseConfig.uncertainty()
        );
        dispensed.shrink(1);
        return dispensed;
    }
 
    @Override
    protected void playSound(BlockSource source) {
        source.level().levelEvent(this.dispenseConfig.overrideDispenseEvent().orElse(1002), source.pos(), 0);
    }
}

引用的其他类