
1. 시스템 개요
일반 적대적 몹을 확률적으로 '보스'로 변환시키고, 전투를 통해 실시간으로 성장(레벨업)하며 무작위 특수 능력을 얻는 RPG형 보스 시스템을 구축했습니다.
2. 데이터 저장 및 관리 (Capability & NBT)
- 전용 배낭(Capability) 장착: 모든 생명체 엔티티에게 레벨, 티어, 킬수, 배운 능력을 저장할 수 있는 우리 모드 전용 데이터 공간을 부여했습니다.
- 스킬 데이터 구조 변경: 처음에는 단순히 배운 스킬 리스트(List)만 저장했으나, 스킬별 레벨업 기능을 위해 '스킬 이름:레벨' 쌍으로 저장하는 맵(Map) 구조로 확장했습니다.
- 영구 저장: 게임을 껐다 켜도 보스의 성장 상태와 배운 스킬들이 사라지지 않도록 NBT 저장 로직을 완비했습니다.
3. 서버-클라이언트 데이터 동기화 (Networking)
- 데이터 패킷 전송: 서버가 결정한 보스의 정보(티어, 레벨, 스킬 목록)를 플레이어의 화면(클라이언트)에 전달하는 통신 체계를 구축했습니다.
- 동기화 오류 해결: 몹이 처음 태어날 때뿐만 아니라, **플레이어가 몹 근처에 다가가 몹이 화면에 보이기 시작하는 순간(Start Tracking)**에도 최신 데이터를 보내도록 하여 티어가 '0'으로 보이는 현상을 해결했습니다.
- 통신 안정화: 서버와 클라이언트가 주고받는 데이터 개수가 일치하지 않아 발생하던 튕김 오류(IndexOutOfBounds)를 데이터 규격을 맞춰 수정했습니다.
4. 렌더링 및 시각 효과 (UI/UX)
- 정보 레이블 설계: 몹 머리 위에 [티어/레벨], [체력바/체력 숫자], [보유 스킬 목록]을 3층 구조로 배치했습니다.
- 디자인 커스터마이징:
- 바닐라 이름표(좀비 등)를 제거하여 깔끔하게 만들었습니다.
- 소수점으로 나오던 체력을 정수(int)로 변환해 가독성을 높였습니다.
- 아군 몹(IZombieAlly)의 경우 체력바를 숨기고 등급과 스킬만 보이도록 처리했습니다.
- 색상 테이블 적용: 완전 랜덤 대신 미리 정의된 '예쁜 색상표'에서 몹의 고유 ID에 맞춰 색을 배정하여, 보스마다 고유의 상징색을 갖도록 했습니다.
5. 렌더링 최적화 (성능 보호)
- 거리 제한: 플레이어와 24블록 이상 떨어진 보스는 렌더링 연산을 생략합니다.
- 투시 방지 (Wallhack 제거):
- 가시선 체크: 플레이어와 보스 사이에 블록이 있으면 정보를 그리지 않습니다.
- 주기적 갱신: 무거운 계산인 가시선 체크를 매 프레임 하지 않고, 5틱(약 0.25초)마다 한 번씩만 수행하여 CPU 부담을 획기적으로 줄였습니다.
- 깊이 테스트: 렌더링 엔진 설정을 통해 지형지물 뒤에 있는 글자가 비쳐 보이지 않게 처리했습니다.
6. 보스 성장 및 능력 시스템
- 레벨업 로직: 보스가 다른 생명체를 죽여서 킬수를 채우면 레벨이 오릅니다. 레벨업 시 최대 체력이 증가하고 즉시 풀피로 회복됩니다.
- 능력 부여: 레벨업 시 보유한 능력 중 하나가 강화되거나 새로운 능력을 배웁니다.
- 능력 개별 클래스화: 모든 보스 능력을 인터페이스(IBossAbility)로 표준화하여, 향후 '공격', '힐', '버프' 등 어떤 형태의 능력도 쉽게 추가할 수 있는 구조를 만들었습니다.
- 삼지창의 복수 (첫 번째 스킬):
- 보스가 공격받으면 공격자를 향해 삼지창을 날려 반격합니다.
- 스킬 레벨이 오르면 한 번에 여러 개의 삼지창을 날립니다.
- 삼지창의 비행 속도를 조절(velocity)하여 플레이어가 보고 피할 수 있는 전투의 재미를 더했습니다.
7. 기타 세부 조정
- 티어별 잠재력: 높은 티어의 보스는 태어날 때부터 더 많은 스킬과 높은 기본 능력치를 가지고 태어나도록 설정했습니다.
- 이름표 위치 조정: 다른 모드와 글자가 겹치지 않도록 전체 레이블 높이를 머리 위로 더 띄웠습니다.
8. 새로운 엔티티 생성 및 등록 (Trident Tempest Zombie 2)
- 클래스 분리: 기존의 삼지창 좀비와 충돌하지 않도록 모든 클래스, 아이템, 엔티티 이름 뒤에 '2'를 붙여 새롭게 정의했습니다.
- 스폰 시스템: 전용 스폰 알(Spawn Egg)을 등록하고, 한글/영어 언어 파일과 아이템 모델(JSON)을 설정하여 게임 내에서 정상적으로 보이도록 했습니다.
- 메인 클래스 등록: 모드의 메인 클래스에서 새로운 엔티티와 아이템이 게임 엔진에 인식되도록 등록 코드를 추가했습니다.
9. 중앙 집중식 피아식별 시스템 (AllyDamageHandler)
- 두뇌의 중앙화: 각 몹마다 공격 로직을 따로 짜면 관리가 힘들기 때문에, AllyDamageHandler라는 중앙 관리소를 만들었습니다. 앞으로 어떤 능력이 추가되든 이곳만 수정하면 모든 몹에게 적용되는 구조입니다.
- 공격 판단 로직: "공격자"와 "대상"을 분석하여 다음 세 가지를 판단합니다.
- 공격자가 잔혹함(Cruelty) 능력을 가졌는가? → 무조건 공격 허용.
- 공격자와 대상이 모두 **아군(Ally)**인가? → 공격 금지 (데미지 0).
- 그 외의 경우 → 일반적인 공격 허용.
10. '잔혹함(Cruelty)' 능력의 구현
- 광기 상태: 보스 데이터 시스템과 연동하여 '잔혹함' 특성이 부여된 몹은 아군 좀비 시스템의 보호를 무시하도록 설계했습니다.
- 팀킬 및 성장: 잔혹함 상태의 몹이 아군을 죽여도 정상적으로 데미지가 들어가며, 이를 통해 경험치를 얻고 레벨업을 할 수 있게 하여 '아군을 희생시켜 강해지는 보스'의 개념을 완성했습니다.
11. 주요 버그 해결 및 최적화
- NullPointerException(NPE) 방지: 공격자가 없는 상태(낙사, 화상 등)에서 공격자의 정보를 조회하려다 게임이 멈추는 문제를 해결했습니다. 정보 조회 전 "공격자가 실제로 존재하는지" 확인하는 안전장치를 추가했습니다.
- 데미지 0 및 무적 현상 해결: 서로 싸우는데 피가 안 깎이던 문제는, 개별 이벤트 클래스에서 무조건 데미지를 0으로 만들던 중복 코드가 원인이었습니다. 이를 제거하고 모든 권한을 중앙 관리소로 통합하여 잔혹함 상태일 때 피가 정상적으로 깎이도록 수정했습니다.
- 데미지 0 상태의 반격 현상: 데미지가 0인데도 왜 반격하는지에 대해 분석했습니다. 마인크래프트는 "데미지 계산"보다 "누가 날 건드렸는가"를 먼저 기억하기 때문입니다. 이를 해결하기 위해 반격 AI 자체에서도 중앙 관리소의 판단을 거치도록 수정했습니다.
12. 성장 및 전투 밸런스
- 경험치 시스템: 삼지창 좀비가 적(또는 잔혹함 상태일 때의 아군)을 타격하면 데미지 양에 따라 경험치를 얻고 최대 10레벨까지 성장합니다.
- 레벨 보너스: 레벨이 오를수록 최대 체력과 추적 거리가 늘어나며, 한 번에 던지는 삼지창의 개수와 밀치기 강도가 강화됩니다.
- 레벨업 보상 수정: 원래 레벨업 시 체력이 전체 회복되었으나, 너무 강력하다는 판단하에 회복 로직만 삭제하여 최대 체력 수치만 늘어나도록 변경했습니다.
13. 시각적 요소 (렌더링)
- 정보 표시: 삼지창 좀비 2의 머리 위에 현재 레벨, 체력 수치, 체력 바, 그리고 경험치 바가 실시간으로 표시되도록 렌더러를 설정했습니다.
- 이펙트: 레벨업 시 토템 파티클과 레벨업 사운드가 재생되어 플레이어가 성장 여부를 시각적으로 확인할 수 있게 했습니다.
14. 청크와 보스 시스템의 이해
- 청크 비활성: 플레이어가 멀리 떨어져 청크가 언로드되면 보스의 활동(공격 및 성장)도 멈춘다는 점을 확인했습니다. 이는 의도치 않은 보스의 무한 성장을 막는 자연스러운 밸런스 장치임을 검토했습니다.
'모딩 > 마인크래프트 모드 개발 일지' 카테고리의 다른 글
| 마크 모딩) 26.02.03 (0) | 2026.02.03 |
|---|---|
| 마크 모딩) 26.1.31 (1) | 2026.01.31 |
| 마크 모딩) 디펜스 타워 만들기 (1) | 2026.01.12 |
| 맠모딩) 벌몹 (0) | 2025.12.28 |
| 마크) 1.18.2 게코립 설정 시 1.18.2가 아닌 1.18을 써야 하는 이유 (1) | 2025.12.28 |