본문으로 건너뛰기
버전: Minecraft 26.2

AI 목표와 탑승

AI 목표​

EntityDefinition.builder(texture)
.goal(4, SeekGlowBlockGoal::new) // 몹마다 새 목표 객체를 만듦
.build();
SeekGlowBlockGoal.java
final class SeekGlowBlockGoal implements AiGoal { // canStart, shouldContinue, start, tick, stop

private BlockPos target;

@Override
public boolean canStart(MobView mob) {
target = find(mob.world(), mob.blockPos()); // 주변의 빛나는 블록 찾기
return target != null;
}

@Override
public boolean shouldContinue(MobView mob) {
return mob.isNavigating();
}

@Override
public void start(MobView mob) {
mob.navigateTo(target.x() + 0.5, target.y(), target.z() + 0.5, 1.0);
}

@Override
public void tick(MobView mob) {
mob.lookAt(target.x() + 0.5, target.y() + 0.5, target.z() + 0.5);
}

@Override
public void stop(MobView mob) {
mob.stopNavigating();
}
}
  • 목표는 게임의 목표 스케줄러가 서버 스레드에서 실행합니다.
  • 숫자가 낮을수록 우선순위가 높습니다. 같은 제어(GoalControl: MOVE, LOOK, JUMP, TARGET)를 쓰는 목표끼리는 동시에 실행되지 않으며, 목표가 쓰는 제어는 controls()를 재정의해 정합니다.
  • 기본 목표의 우선순위는 0(뜨기), 1(도망), 2(공격), 3(유혹), 5(배회), 6–7(둘러보기)입니다.
  • targetGoal(priority, factory)는 공격 대상을 고르는 목표를 등록합니다.
  • 팩토리는 몹마다 한 번 호출되므로 목표 객체에 상태를 저장해도 됩니다.

MobView​

메서드뜻
navigateTo(x, y, z, speed)길찾기를 시작
isNavigating(), stopNavigating()길찾기 상태 확인과 중지
lookAt(x, y, z)바라볼 곳 지정
target(), setTarget(living)공격 대상

이동과 탑승​

EntityDefinition.builder(texture)
.rideable(true) // 빈손으로 사용하면 탑승하고, 이동 키로 조종
.noGravity().notPushable();

entity.setVelocity(0, 0.5, 0);
player.startRiding(golem);

EntityView의 이동 관련 메서드:

메서드뜻
velocity(), setVelocity(x, y, z)속도(Vector3). 플레이어의 속도는 클라이언트로 전달
yaw(), pitch(), setRotation(yaw, pitch)방향
hasNoGravity(), setNoGravity(bool)중력
isOnGround()땅 위 여부
vehicle(), passengers(), startRiding(vehicle), stopRiding()탈것과 승객
  • rideable(true)인 몹은 말처럼 조종할 수 있습니다. 조종 이동은 말과 마찬가지로 탑승한 플레이어의 클라이언트가 계산합니다.
  • rideable(false)인 몹은 탈 수만 있고 조종할 수는 없습니다.
사람 확인 필요

탈것 조종은 키 입력을 자동화할 수 없으므로 사람이 직접 확인해야 합니다.

Buy me a coffee