ENFRKOantony langlois
프로젝트

Waterbird and Bananas

바로가기기타JavaMinecraftFabric API
Minecraft의 물새바나나 옆에 있는 물새왼쪽에서 본 물새오른쪽에서 본 물새

프로젝트 요약

Minecraft 플레이어는 자연 생성되는 물새를 유인하고 길들인 뒤 따라오거나 앉도록 명령할 수 있으며, 짧은 속도 효과를 주는 바나나도 사용할 수 있습니다. 이 모드는 공유 시뮬레이션과 클라이언트 렌더링을 분리하고, 기본 길들이기 생물 시스템을 재사용하며, 커스텀 모델과 텍스처 및 네 가지 애니메이션 상태를 제공합니다.

아키텍처

in game
클라이언트 · 상호작용
Minecraft 플레이어
use item · interact
바나나를 먹고 물새를 유인하거나 길들이며, 소유한 새를 따라오기와 앉기 사이로 전환합니다
바나나소유자 확인앉기 전환
Java
런타임 · 모드 호스트
Minecraft + Fabric
fabric.mod.json
Minecraft 1.21.1용 메인, 클라이언트, 데이터 생성 진입점을 각각 불러옵니다
Fabric API
생명주기 · 공통 초기화
Waterbird 초기화기
Waterbird.java · onInitialize
바나나, 물새 속성, Overworld 생성 통합을 등록합니다
ParrotEntity
도메인 · 길들이기 생물
WaterbirdEntity
entity/custom/WaterbirdEntity.java
바나나 길들이기, 앉기와 따라오기 목표, 속성, 대기와 비행 및 앉기 상태를 관리합니다
10번 중 1번 길들이기체력 20소유자 따라오기앉기 목표
Fabric client
클라이언트 · 표현
모델 + 렌더러
WaterbirdClient.java · entity/client
모델 레이어와 렌더러를 등록한 뒤 걷기, 대기, 비행, 앉기 애니메이션을 선택합니다
Fabric API
월드 · 생성 훅
Overworld 생성 규칙
world/gen/ModEntityGeneration.java
Overworld 생물군계에 가중치 12와 1마리에서 3마리 규모의 생물 생성을 추가합니다
waterbird
데이터 · 게임 레지스트리
아이템 + 엔티티 레지스트리
ModItems.java · ModEntities.java
바나나 아이템과 물새 엔티티 타입에 안정적인 식별자를 연결합니다
resources
데이터 · 표현 리소스
모델, 텍스처 + 언어
src/main/resources/assets/waterbird
바나나 아이템 모델, 엔티티와 아이템 텍스처, 아이콘, 이름, 툴팁을 제공합니다

모드의 로딩, 상호작용, 시뮬레이션, 렌더링 흐름을 추적합니다.

배포: 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 유인, 소유권을 연결합니다