



프로젝트 요약
Minecraft 플레이어는 자연 생성되는 물새를 유인하고 길들인 뒤 따라오거나 앉도록 명령할 수 있으며, 짧은 속도 효과를 주는 바나나도 사용할 수 있습니다. 이 모드는 공유 시뮬레이션과 클라이언트 렌더링을 분리하고, 기본 길들이기 생물 시스템을 재사용하며, 커스텀 모델과 텍스처 및 네 가지 애니메이션 상태를 제공합니다.
아키텍처
- Minecraft 플레이어, 클라이언트 · 상호작용, use item · interact, 바나나, 소유자 확인, 앉기 전환
- Minecraft + Fabric, 런타임 · 모드 호스트, fabric.mod.json
- Waterbird 초기화기, 생명주기 · 공통 초기화, Waterbird.java · onInitialize
- WaterbirdEntity, 도메인 · 길들이기 생물, entity/custom/WaterbirdEntity.java, 10번 중 1번 길들이기, 체력 20, 소유자 따라오기, 앉기 목표
- 모델 + 렌더러, 클라이언트 · 표현, WaterbirdClient.java · entity/client
- Overworld 생성 규칙, 월드 · 생성 훅, world/gen/ModEntityGeneration.java
- 아이템 + 엔티티 레지스트리, 데이터 · 게임 레지스트리, ModItems.java · ModEntities.java
- 모델, 텍스처 + 언어, 데이터 · 표현 리소스, src/main/resources/assets/waterbird
- Minecraft + Fabric에서 Waterbird 초기화기 방향으로: 모드 로드
- Minecraft 플레이어에서 WaterbirdEntity 방향으로: 바나나 사용
- Waterbird 초기화기에서 아이템 + 엔티티 레지스트리 방향으로: 타입 등록
- Waterbird 초기화기에서 Overworld 생성 규칙 방향으로: 생성 추가
- Overworld 생성 규칙에서 WaterbirdEntity 방향으로: Waterbird 생성
- WaterbirdEntity에서 모델 + 렌더러 방향으로: 자세 읽기
- 모델 + 렌더러에서 모델, 텍스처 + 언어 방향으로: 리소스 로드
모드의 로딩, 상호작용, 시뮬레이션, 렌더링 흐름을 추적합니다.
배포: Mod JAR → Fabric mods 폴더 · Minecraft 클라이언트 또는 서버
결과
- 10번 중 1번 · 바나나 길들이기 확률
- 10초 · 바나나 속도 효과
- 1마리에서 3마리 · 자연 생성 무리
- 4개 · 모델링된 애니메이션 상태
활용 기술: Fabric 생명주기 분리 · 서버 권한 기반 엔티티 상호작용 · 목표 기반 길들이기 생물 행동 · 상태 기반 클라이언트 애니메이션 · 리소스 및 레지스트리 연결
문제와 해결책
서버 권한 기반 게임플레이를 유지하면서 작은 모드를 Minecraft의 기존 시스템에 통합합니다.
▓ 길들이기 행동을 위해 ParrotEntity 확장
문제: Minecraft의 수동적 생물 구조를 다시 만들지 않고도 물새의 길들이기, 소유권, 비행, 따라오기, 앉기를 구현해야 합니다.
ParrotEntity를 상속해 생명주기를 유지하고, 바나나 상호작용과 물새 전용 목표 및 속성을 추가합니다.
- 거부한 대안: 커스텀 MobEntity 구현은 소유권, 길들이기 상태, 이동 행동을 중복 구현하게 됩니다
- 수용한 절충: 상속한 앵무새 행동이 향후 특수화를 제한합니다
- 결과: 간결한 엔티티가 길들이기, 따라오기, 앉기, 비행을 지원합니다
█ 길들이기와 앉기 상태를 서버에서 관리
문제: 소유권과 앉기 상태는 월드의 모든 플레이어에게 일관되어야 합니다.
서버에서 바나나를 소비하고 길들이기 또는 앉기 상태를 변경하며, Minecraft에는 실행 측에 맞는 상호작용 성공 결과를 반환합니다.
- 거부한 대안: 클라이언트 상태 변경은 지속되는 월드 상태 없이 시각적 성공만 만들 수 있습니다
- 수용한 절충: 상호작용 코드가 서버와 클라이언트 실행 측을 분기해야 합니다
- 결과: 서버가 상태를 소유하고 클라이언트는 표준 엔티티 업데이트와 파티클을 받습니다
▒ 공통 초기화와 클라이언트 초기화 분리
문제: 엔티티 등록과 월드 생성은 서버에서 실행되어야 하지만 모델과 렌더러 클래스는 클라이언트 전용입니다.
Fabric의 메인 및 클라이언트 진입점을 분리하고, 렌더링 등록을 WaterbirdClient에 격리합니다.
- 거부한 대안: 공통 초기화에서 렌더링을 등록하면 전용 서버가 클라이언트 클래스를 불러올 수 없습니다
- 수용한 절충: 관련 설정이 두 진입점에 나뉩니다
- 결과: 같은 mod JAR를 클라이언트와 서버 환경 모두에서 불러올 수 있습니다
▤ 엔티티 상태로 애니메이션 구동
문제: 걷기, 비행, 대기, 앉기는 실시간 엔티티 행동을 따르는 서로 다른 자세가 필요합니다.
매 tick마다 클라이언트 애니메이션 상태를 갱신하고, 모델이 이동과 대기, 비행, 앉기 클립을 조합하도록 합니다.
- 거부한 대안: 하나의 일반 루프는 비행과 앉기에 필요한 뚜렷이 다른 자세를 표현하지 못합니다
- 수용한 절충: 상태 우선순위와 전환을 직접 작성한 tick 로직에서 관리합니다
- 결과: 모델링된 네 상태가 이동, 공중 여부, 앉기 조건에 직접 반응합니다
▚ 바나나를 음식과 생물 상호작용 수단으로 재사용
문제: 플레이어와 새 생물 모두에게 의미가 있고 용도를 쉽게 이해할 수 있는 아이템이 필요합니다.
허기를 회복하고 10초 속도 효과를 주며 물새를 유인하고 길들이기를 시도하는 바나나 하나를 등록합니다.
- 거부한 대안: 별도 길들이기 토큰은 한 가지 목적만 가진 아이템을 추가합니다
- 수용한 절충: 음식 밸런스와 길들이기 밸런스가 하나의 자원을 공유합니다
- 결과: 하나의 아이템이 인벤토리, 플레이어 효과, AI 유인, 소유권을 연결합니다