DefaultDispenseItemBehavior.java
net.minecraft.core.dispenser.DefaultDispenseItemBehavior
信息
- 全限定名:net.minecraft.core.dispenser.DefaultDispenseItemBehavior
- 类型:public class
- 包:net.minecraft.core.dispenser
- 源码路径:src/main/java/net/minecraft/core/dispenser/DefaultDispenseItemBehavior.java
- 起始行号:L11
- 实现:DispenseItemBehavior
- 职责:
TODO
字段/常量
DEFAULT_ACCURACY- 类型:
int - 修饰符:
private static final - 源码定位:
L12 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
- 无
方法
下面的方法块按源码顺序生成。
public final ItemStack dispense(BlockSource source, ItemStack dispensed) @ L14
- 方法名:dispense
- 源码定位:L14
- 返回类型:ItemStack
- 修饰符:public final
参数:
- source: BlockSource
- dispensed: ItemStack
说明:
TODO
protected ItemStack execute(BlockSource source, ItemStack dispensed) @ L22
- 方法名:execute
- 源码定位:L22
- 返回类型:ItemStack
- 修饰符:protected
参数:
- source: BlockSource
- dispensed: ItemStack
说明:
TODO
public static void spawnItem(Level level, ItemStack itemStack, int accuracy, Direction direction, Position position) @ L30
- 方法名:spawnItem
- 源码定位:L30
- 返回类型:void
- 修饰符:public static
参数:
- level: Level
- itemStack: ItemStack
- accuracy: int
- direction: Direction
- position: Position
说明:
TODO
protected void playSound(BlockSource source) @ L51
- 方法名:playSound
- 源码定位:L51
- 返回类型:void
- 修饰符:protected
参数:
- source: BlockSource
说明:
TODO
protected void playAnimation(BlockSource source, Direction direction) @ L55
- 方法名:playAnimation
- 源码定位:L55
- 返回类型:void
- 修饰符:protected
参数:
- source: BlockSource
- direction: Direction
说明:
TODO
private static void playDefaultSound(BlockSource source) @ L59
- 方法名:playDefaultSound
- 源码定位:L59
- 返回类型:void
- 修饰符:private static
参数:
- source: BlockSource
说明:
TODO
private static void playDefaultAnimation(BlockSource source, Direction direction) @ L63
- 方法名:playDefaultAnimation
- 源码定位:L63
- 返回类型:void
- 修饰符:private static
参数:
- source: BlockSource
- direction: Direction
说明:
TODO
protected ItemStack consumeWithRemainder(BlockSource source, ItemStack dispensed, ItemStack remainder) @ L67
- 方法名:consumeWithRemainder
- 源码定位:L67
- 返回类型:ItemStack
- 修饰符:protected
参数:
- source: BlockSource
- dispensed: ItemStack
- remainder: ItemStack
说明:
TODO
private void addToInventoryOrDispense(BlockSource source, ItemStack itemStack) @ L77
- 方法名:addToInventoryOrDispense
- 源码定位:L77
- 返回类型:void
- 修饰符:private
参数:
- source: BlockSource
- itemStack: ItemStack
说明:
TODO
代码
public class DefaultDispenseItemBehavior implements DispenseItemBehavior {
private static final int DEFAULT_ACCURACY = 6;
@Override
public final ItemStack dispense(BlockSource source, ItemStack dispensed) {
ItemStack result = this.execute(source, dispensed);
this.playSound(source);
this.playAnimation(source, source.state().getValue(DispenserBlock.FACING));
return result;
}
protected ItemStack execute(BlockSource source, ItemStack dispensed) {
Direction direction = source.state().getValue(DispenserBlock.FACING);
Position position = DispenserBlock.getDispensePosition(source);
ItemStack itemStack = dispensed.split(1);
spawnItem(source.level(), itemStack, 6, direction, position);
return dispensed;
}
public static void spawnItem(Level level, ItemStack itemStack, int accuracy, Direction direction, Position position) {
double spawnX = position.x();
double spawnY = position.y();
double spawnZ = position.z();
if (direction.getAxis() == Direction.Axis.Y) {
spawnY -= 0.125;
} else {
spawnY -= 0.15625;
}
ItemEntity itemEntity = new ItemEntity(level, spawnX, spawnY, spawnZ, itemStack);
RandomSource random = level.getRandom();
double pow = random.nextDouble() * 0.1 + 0.2;
itemEntity.setDeltaMovement(
random.triangle(direction.getStepX() * pow, 0.0172275 * accuracy),
random.triangle(0.2, 0.0172275 * accuracy),
random.triangle(direction.getStepZ() * pow, 0.0172275 * accuracy)
);
level.addFreshEntity(itemEntity);
}
protected void playSound(BlockSource source) {
playDefaultSound(source);
}
protected void playAnimation(BlockSource source, Direction direction) {
playDefaultAnimation(source, direction);
}
private static void playDefaultSound(BlockSource source) {
source.level().levelEvent(1000, source.pos(), 0);
}
private static void playDefaultAnimation(BlockSource source, Direction direction) {
source.level().levelEvent(2000, source.pos(), direction.get3DDataValue());
}
protected ItemStack consumeWithRemainder(BlockSource source, ItemStack dispensed, ItemStack remainder) {
dispensed.shrink(1);
if (dispensed.isEmpty()) {
return remainder;
} else {
this.addToInventoryOrDispense(source, remainder);
return dispensed;
}
}
private void addToInventoryOrDispense(BlockSource source, ItemStack itemStack) {
ItemStack remainder = source.blockEntity().insertItem(itemStack);
if (!remainder.isEmpty()) {
Direction direction = source.state().getValue(DispenserBlock.FACING);
spawnItem(source.level(), remainder, 6, direction, DispenserBlock.getDispensePosition(source));
playDefaultSound(source);
playDefaultAnimation(source, direction);
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
ItemEntity()
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
DispenserBlock.getDispensePosition()
- 引用位置: