minecraft-src/net/minecraft/world/entity/ai/behavior/RingBell.java
2025-07-04 01:41:11 +03:00

36 lines
1.3 KiB
Java

package net.minecraft.world.entity.ai.behavior;
import net.minecraft.core.BlockPos;
import net.minecraft.core.GlobalPos;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.ai.behavior.declarative.BehaviorBuilder;
import net.minecraft.world.entity.ai.memory.MemoryModuleType;
import net.minecraft.world.level.block.BellBlock;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
public class RingBell {
private static final float BELL_RING_CHANCE = 0.95F;
public static final int RING_BELL_FROM_DISTANCE = 3;
public static BehaviorControl<LivingEntity> create() {
return BehaviorBuilder.create(
instance -> instance.group(instance.present(MemoryModuleType.MEETING_POINT)).apply(instance, memoryAccessor -> (serverLevel, livingEntity, l) -> {
if (serverLevel.random.nextFloat() <= 0.95F) {
return false;
} else {
BlockPos blockPos = instance.<GlobalPos>get(memoryAccessor).pos();
if (blockPos.closerThan(livingEntity.blockPosition(), 3.0)) {
BlockState blockState = serverLevel.getBlockState(blockPos);
if (blockState.is(Blocks.BELL)) {
BellBlock bellBlock = (BellBlock)blockState.getBlock();
bellBlock.attemptToRing(livingEntity, serverLevel, blockPos, null);
}
}
return true;
}
})
);
}
}