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

34 lines
1.2 KiB
Java

package net.minecraft.world.entity.ai.behavior;
import net.minecraft.world.entity.Entity;
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.entity.ai.memory.WalkTarget;
public class Mount {
private static final int CLOSE_ENOUGH_TO_START_RIDING_DIST = 1;
public static BehaviorControl<LivingEntity> create(float speedModifier) {
return BehaviorBuilder.create(
instance -> instance.group(
instance.registered(MemoryModuleType.LOOK_TARGET), instance.absent(MemoryModuleType.WALK_TARGET), instance.present(MemoryModuleType.RIDE_TARGET)
)
.apply(instance, (memoryAccessor, memoryAccessor2, memoryAccessor3) -> (serverLevel, livingEntity, l) -> {
if (livingEntity.isPassenger()) {
return false;
} else {
Entity entity = instance.get(memoryAccessor3);
if (entity.closerThan(livingEntity, 1.0)) {
livingEntity.startRiding(entity);
} else {
memoryAccessor.set(new EntityTracker(entity, true));
memoryAccessor2.set(new WalkTarget(new EntityTracker(entity, false), speedModifier, 1));
}
return true;
}
})
);
}
}