몹 정의
몹 선언
mod.content().entity("golem_friend", EntityDefinition.builder(ResourceId.of("my_mod", "textures/entity/golem_friend.png"))
.maxHealth(20)
.movementSpeed(0.25)
.panicWhenHurt()
.temptedBy(SPARK) // 이 아이템을 들고 있으면 따라옴
.spawnEgg(CreativeTab.SPAWN_EGGS)
.behavior(new EntityBehavior() { // onServerTick, onInteract
@Override
public InteractionResult onInteract(EntityInteraction interaction) {
if (!interaction.world().isClientSide()) {
interaction.entity().addEffect(GLOWING_HEART, 100, 0);
}
return InteractionResult.SUCCESS;
}
})
.build());
- 게임의 길찾기 몹에 표준 AI 목표(배회, 플레이어 바라보기, 다치면 도망, 공격, 아이템으로 유인) 중 원하는 것을 골라 붙이는 방식입니다. 직접 만든 목표는 AI 목표와 탑승에서 다룹니다.
- 모양은 기본적으로 플레이어 모델에 64×64 스킨 텍스처를 입혀 그립니다. 상자 모델을 직접 정의하려면 몹 모델을 참고하세요.
- 몹은
/summon, 생성 알,world.spawnEntity로 생성합니다.
| 빌더 메서드 | 뜻 |
|---|---|
size(width, height) | 충돌 상자 크기 |
category(MobCategory) | CREATURE, MONSTER, AMBIENT, WATER_CREATURE |
maxHealth, movementSpeed | 속성 |
noWandering(), panicWhenHurt(), attackPlayers(damage), temptedBy(item) | 표준 AI 목표 선택 |
goal(priority, factory), targetGoal(priority, factory) | 직접 만든 AI 목표 |
rideable(steerable) | 탈 수 있게 함(true면 조종도 가능) |
noGravity(), notPushable() | 중력 없음, 밀리지 않음 |
spawnEgg(CreativeTab) | 생성 알 아이템(<id>_spawn_egg) |
spawnsNaturally(biomes, weight, minGroup, maxGroup) | 자연 스폰 |
model(EntityModelDefinition) | 상자 모델 |
flying(flyingSpeed), swimming() | 나는 몹, 헤엄치는 몹. 아래 "이동 방식" 참고 |
behavior(EntityBehavior) | onServerTick, onInteract 콜백 |
No data fixer registered for <id>Minecraft 26.2에는 모드 엔티티용 데이터 변환 스키마가 없어서, 시작할 때 이 오류 로그가 한 줄 남습니다. 동작에는 영향이 없습니다.
이동 방식
몹은 기본적으로 걷고 뛰며, 물에서는 수면으로 떠오릅니다(Movement.WALK). 이동 방식을 바꾸면 길찾기, 이동 제어, 기본 배회 목표가 함께 바뀝니다.
| 빌더 | 동작 |
|---|---|
flying(flyingSpeed) | 공중으로 길을 찾고, 멈추면 그 자리에 떠 있습니다(벌처럼). 낙하 피해가 없으며, 공중 속도는 flyingSpeed로 정합니다(앵무새는 0.4). |
swimming() | 물속으로만 길을 찾고, 어느 방향으로든 헤엄칩니다(돌고래처럼). 물속에서 숨을 쉬고, 물 밖에서는 느리게 기어갑니다. 물에서 스폰하려면 category(MobCategory.WATER_CREATURE)를 함께 지정합니다. |
mod.content().entity("minnow", EntityDefinition.builder(ResourceId.of("my_mod", "textures/entity/minnow.png"))
.size(0.5f, 0.4f)
.category(MobCategory.WATER_CREATURE)
.movementSpeed(1.0)
.swimming()
.build());
MobView.navigateTo(x, y, z, speed)도 몹의 이동 방식에 맞게 길을 찾습니다. 나는 몹은 공중의 한 점으로, 헤엄치는 몹은 물속의 한 점으로 이동합니다.
자연 스폰
EntityDefinition.builder(texture)
.spawnsNaturally(BiomeSelector.ids(ResourceId.minecraft("plains")), 5, 1, 2);
- 서버가 월드를 만들 때 선택한 바이옴의 스폰 목록에 추가됩니다(로그:
[Poly 모드 로더] Added N natural spawn(s)). - 스폰 위치 규칙은 같은 분류의 게임 몹을 따릅니다. 생물은 밝은 곳의
#minecraft:animals_spawnable_on블록 위에, 몬스터는 어두운 곳에, 수중 생물은 물속에 스폰됩니다. - 스폰 설정은
WorldView.naturalSpawns(pos, category)로 확인할 수 있습니다. - 코드 바이옴에는
BiomeDefinition.builder().spawn(...)으로 추가합니다. 자세한 내용은 월드 생성을 참고하세요.
투사체
mod.content().projectile("bolt", ProjectileDefinition.builder(SPARK) // 클라이언트에서 그릴 아이템 모양
.damage(2)
.behavior(new ProjectileBehavior() {
@Override
public void onHitEntity(ProjectileHit hit) {
if (hit.entity().orElseThrow() instanceof LivingEntityView living) {
living.addEffect(ResourceId.minecraft("glowing"), 100, 0);
}
}
})
.build());
player.launchProjectile(ResourceId.of("my_mod", "bolt"), 1.5f, 1.0f); // 속도, 부정확도
- 투사체는 눈덩이처럼 날아가다가 처음 맞은 곳에서 피해를 주고, 행동 콜백(
onHitEntity,onHitBlock)을 호출한 뒤 사라집니다. size,gravity,damage를 지정할 수 있습니다.launchProjectile로minecraft:snowball같은 게임 투사체도 쏠 수 있습니다.
엔티티 뷰
| 타입 | 주요 메서드 |
|---|---|
EntityView | uuid, type, name, x/y/z, blockPos, world, isAlive, remove, teleport, changeDimension, data(key) |
LivingEntityView | health, maxHealth, setHealth, hurt(amount), hurt(damageType, amount), addEffect, hasEffect, launchProjectile |
MobView | 길찾기, 시선, 공격 대상. AI 목표와 탑승 |
PlayerView | sendMessage, give, countItem, mainHandItem, mainHandStack, inventory, openMenu, 발전 과제, hasPermission |
EntityView golem = world.spawnEntity(GOLEM, x, y, z);
List<EntityView> near = world.entitiesNear(x, y, z, 5);
entity.changeDimension(ResourceId.minecraft("the_nether"), x, y, z);