[마인크래프트] Paper 플러그인으로 RPG 서버 만들기 - Day 1
🎮 마인크래프트 Paper 플러그인으로 RPG 서버 만들기 - Day 1
📌 프로젝트 개요
서버 개발자를 목표로 마인크래프트 RPG 서버를 포트폴리오 프로젝트로 제작했습니다.
서버 Paper 1.21.10
언어 Java 21
IDE IntelliJ IDEA
데이터베이스 MySQL 8.0 (Docker)
빌드 도구 Maven + Shade Plugin
✨ 구현 기능
1️⃣ 레벨 & 경험치 시스템
- 몬스터 처치 시 자동 경험치 획득
- 레벨업 시 스탯 포인트 5개 지급
- 몬스터별 차등 경험치
좀비: 10 exp
크리퍼: 20 exp
엔더드래곤: 500 exp
2️⃣ 스탯 시스템
- 힘(STR): 공격력 증가
- 민첩(DEX): 이동속도 증가
- 지능(INT): 최대 체력 증가
/stat add str 5
/menu (GUI로 간편하게)
3️⃣ MySQL 연동
- JSON → MySQL 전환
- HikariCP 커넥션 풀
- Docker로 간편한 DB 관리
- 서버 재시작 시 데이터 유지
4️⃣ 커스텀 아이템
- 4가지 등급 시스템
- 무기: 공격력 보너스
- 부츠: 이동속도 보너스
- 실제 게임에 능력치 적용
/customgive weapon legendary 화염검
/customgive boots epic 질풍부츠
5️⃣ UI 시스템
- Action Bar로 실시간 정보 표시
- 경험치 진행바 시각화
- 레벨, 체력, 배고픔 표시
- GUI 메뉴 시스템
🐛 해결한 주요 오류
1. 한글 인코딩 오류
❌ unmappable character (0xED) for encoding x-windows-949
✅ 해결방법 pom.xml에 UTF-8 인코딩 설정 추가
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
2. Docker Hypervisor 오류
❌ Docker Desktop - Windows Hypervisor is not present
✅ 해결방법 Docker Desktop을 실행하지 않은 상태였음. Docker Desktop 실행 후 정상 작동 확인
3. HikariCP 클래스 찾을 수 없음
❌ NoClassDefFoundError: com/zaxxer/hikari/HikariConfig
✅ 해결방법 Maven Shade Plugin 추가로 의존성을 jar 파일에 포함
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.0</version>
</plugin>
</plugins>
</build>
4. Attribute 이름 오류
❌ cannot find symbol: Attribute.ATTACK_DAMAGE
✅ 해결방법 Paper 1.21.10에서는 Attribute.GENERIC_ATTACK_DAMAGE로 변경됨
5. AttributeModifier Deprecated
❌ AttributeModifier 생성자가 버전 1.21 이상에서 지원 중단
✅ 해결방법 복잡도를 줄이기 위해 ItemFlag.HIDE_ATTRIBUTES로 기본 속성 숨김 처리.
실제 능력치는 이벤트 리스너로 적용하는 방식으로 변경
실제 능력치는 이벤트 리스너로 적용하는 방식으로 변경
6. PlayerArmorChangeEvent 없음
❌ cannot find symbol: PlayerArmorChangeEvent
✅ 해결방법 Paper 1.21.10에 해당 이벤트 미존재. 인벤토리 클릭 이벤트로 장비 슬롯(36-39) 감지하는 방식으로 대체
if (slot >= 36 && slot <= 39) {
updatePlayerStats(player);
}
📊 프로젝트 구조
MyFirstPlugin/ ├── src/main/java/com/myserver/plugin/ │ ├── Main.java // 메인 플러그인 클래스 │ ├── PlayerData.java // 플레이어 데이터 모델 │ ├── DataManager.java // MySQL 연동 관리 │ ├── ItemGrade.java // 아이템 등급 enum │ └── ItemManager.java // 커스텀 아이템 생성 ├── src/main/resources/ │ └── plugin.yml // 플러그인 설정 └── pom.xml // Maven 설정
🎯 다음 계획 (Day 2)
- 스킬 시스템 (파이어볼, 힐 등)
- 쿨타임 시스템
- 파티클 효과
- 클래스 시스템 (전사, 마법사, 궁수)
💡 배운 점
- Maven 의존성 관리: Shade Plugin으로 라이브러리를 jar에 포함하는 방법
- MySQL 연동: HikariCP를 사용한 효율적인 DB 커넥션 풀 관리
- Docker 활용: 개발 환경을 깔끔하게 구축하고 관리하는 방법
- Paper API: Bukkit/Spigot과의 차이점, 버전별 API 변경사항 대응
- 이벤트 기반 프로그래밍: Listener 패턴으로 게임 로직 구현
- 문제 해결 능력: 오류를 분석하고 해결책을 찾는 과정
📝 소감
처음에는 단순한 명령어 하나 만드는 것도 어려웠는데, 하루 만에 레벨 시스템부터 데이터베이스 연동, 커스텀 아이템까지 구현할 수 있었습니다. 특히 오류를 하나씩 해결하면서 Paper API와 Java 개발에 대한 이해도가 크게 높아졌습니다.
가장 기억에 남는 부분은 MySQL 연동 과정이었습니다. Docker를 사용해 깔끔하게 데이터베이스를 구축하고, HikariCP로 효율적인 커넥션 관리를 구현하면서 실무에서 사용하는 기술 스택을 직접 경험할 수 있었습니다.
서버 개발자 포트폴리오로 충분히 활용할 수 있을 것 같아 뿌듯합니다. 내일은 스킬 시스템을 구현하며 더욱 RPG다운 서버를 만들어보겠습니다!
'개발 일지' 카테고리의 다른 글
| OWASP Top 10:2025A01~A10 완전 정리 (0) | 2026.06.01 |
|---|---|
| 스텔라이브 라이브 대시보드 (1) | 2026.04.20 |