ShearsDispenseItemBehavior.java
net.minecraft.core.dispenser.ShearsDispenseItemBehavior
信息
- 全限定名:net.minecraft.core.dispenser.ShearsDispenseItemBehavior
- 类型:public class
- 包:net.minecraft.core.dispenser
- 源码路径:src/main/java/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java
- 起始行号:L19
- 继承:OptionalDispenseItemBehavior
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
- 无
构造器
- 无
方法
下面的方法块按源码顺序生成。
protected ItemStack execute(BlockSource source, ItemStack dispensed) @ L20
- 方法名:execute
- 源码定位:L20
- 返回类型:ItemStack
- 修饰符:protected
参数:
- source: BlockSource
- dispensed: ItemStack
说明:
TODO
private static boolean tryShearBeehive(ServerLevel level, ItemStack tool, BlockPos pos) @ L34
- 方法名:tryShearBeehive
- 源码定位:L34
- 返回类型:boolean
- 修饰符:private static
参数:
- level: ServerLevel
- tool: ItemStack
- pos: BlockPos
说明:
TODO
private static boolean tryShearEntity(ServerLevel level, BlockPos pos, ItemStack tool) @ L50
- 方法名:tryShearEntity
- 源码定位:L50
- 返回类型:boolean
- 修饰符:private static
参数:
- level: ServerLevel
- pos: BlockPos
- tool: ItemStack
说明:
TODO
代码
public class ShearsDispenseItemBehavior extends OptionalDispenseItemBehavior {
@Override
protected ItemStack execute(BlockSource source, ItemStack dispensed) {
ServerLevel level = source.level();
if (!level.isClientSide()) {
BlockPos pos = source.pos().relative(source.state().getValue(DispenserBlock.FACING));
this.setSuccess(tryShearBeehive(level, dispensed, pos) || tryShearEntity(level, pos, dispensed));
if (this.isSuccess()) {
dispensed.hurtAndBreak(1, level, null, item -> {});
}
}
return dispensed;
}
private static boolean tryShearBeehive(ServerLevel level, ItemStack tool, BlockPos pos) {
BlockState state = level.getBlockState(pos);
if (state.is(BlockTags.BEEHIVES, s -> s.hasProperty(BeehiveBlock.HONEY_LEVEL) && s.getBlock() instanceof BeehiveBlock)) {
int honeyLevel = state.getValue(BeehiveBlock.HONEY_LEVEL);
if (honeyLevel >= 5) {
level.playSound(null, pos, SoundEvents.BEEHIVE_SHEAR, SoundSource.BLOCKS, 1.0F, 1.0F);
BeehiveBlock.dropHoneycomb(level, tool, state, level.getBlockEntity(pos), null, pos);
((BeehiveBlock)state.getBlock()).releaseBeesAndResetHoneyLevel(level, state, pos, null, BeehiveBlockEntity.BeeReleaseStatus.BEE_RELEASED);
level.gameEvent(null, GameEvent.SHEAR, pos);
return true;
}
}
return false;
}
private static boolean tryShearEntity(ServerLevel level, BlockPos pos, ItemStack tool) {
for (Entity entity : level.getEntitiesOfClass(Entity.class, new AABB(pos), EntitySelector.NO_SPECTATORS)) {
if (entity.shearOffAllLeashConnections(null)) {
return true;
}
if (entity instanceof Shearable shearable && shearable.readyForShearing()) {
shearable.shear(level, SoundSource.BLOCKS, tool);
level.gameEvent(null, GameEvent.SHEAR, pos);
return true;
}
}
return false;
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
BeehiveBlock.dropHoneycomb()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
AABB()
- 引用位置: