didi78579 a035878b89424256ba3ccc14aaafb8c7
| 분야 | 플러그인 |
|---|---|
| 장르 | 재미 |
| 게임버전 | 모든버전 |
| API | 페이퍼 |
AI로 플러그인 만드는 법
** 코딩 없음
2부는 1부에서 준비해놓은 환경에서
예시로 꼬리잡기 처음부터 끝까지 만드는 과정임
플러그인 업데이트는 /reload confirm 이라 치면 새로 고침 하는데
최신버전에선 막힘(그래서 1.20.4쓴거임)
그냥 예시만 있으니까 1부 부터 보셈
제미니의 마지막 말을 보면
Main.java:
onCommand에서 /꼬리잡기 시작, /꼬리잡기 종료 명령어를 처리합니다.
startGame(): 게임 시작 로직을 담당합니다. 온라인 플레이어들을 참여시키고, 월드보더를 설정하며, 랜덤으로 타겟을 지정합니다.
stopGame(), resetGame(): 게임을 종료하고 모든 설정을 초기화합니다.
GameListener.java:
onPlayerDeath: 플레이어가 죽었을 때, 죽인 사람이 자신의 추격자인지 확인합니다. 맞다면 '노예화' 처리(관전 모드로 변경)를 하고, 승리 조건을 체크합니다.
startCompassUpdater: 1초마다 모든 추격자의 나침반이 자신의 타겟을 가리키도록 업데이트합니다.
setupTeams: 게임이 시작되면 각 플레이어에게 랜덤 색상의 팀을 부여하여 이름표 색을 바꿉니다.
onPlayerQuit: 게임 도중 플레이어가 나가면 게임을 초기화합니다.
GameState.java: WAITING, RUNNING, ENDING 세 가지 상태로 게임 흐름을 관리합니다.
요청하신 대로 투박하지만 핵심적인 기능은 모두 포함된 형태입니다. 이 코드를 기반으로 하여 "자연사 대기 시간(게임 시작 후 무적 시간)" 이나 더 복잡한 "노예" 시스템 등 다양한 기능을 추가하며 발전시킬 수 있습니다. 궁금한 점이 있다면 언제든지 다시 질문해 주세요
" 일단 꼬리색을 추가해줄거임
색은 빨주노초파남보 7개 만 사용할거임
빨부터 시작하여 개임시작시 인원수에 맟춰 최소 2색 최대 7색이
빨부터 순서대로 매칭을 해줄거임
이러면 5명이면 빨~파 이렇게 5가지색을 각각 고유하게 가지게 됨 "
이라 제미니한태 보냄
결과


"필요 없는 나침반과 이름에 색부여를 삭제 해줘
대신 시작시 자신의 색을 공지 해주고 어떤색을 쫒으라고 해줘(누군진 비밀)
또한 나침반을 대신하여 다이아를 우클릭시 소울랜턴 파티클이 타깃 방향으로 3m 만큼 생성후 2초간 사라지도록"
이렇게 수정 요청함(다이아 감소 깜박함 ;;)


파멸남
"색 매칭은 빨->주~보 순서로 인원수 만큼 색을 순서대로 할당후 색에 플레이어를 랜덤하게 배치
마지막 색은 첫번째를 타깃으로
다이아는 지급하지 말고
들고 우클릭시 1개 소모 되고
파티클이 일직선으로 10개가 바로 생성되고
소리는 8비트 노트 블럭으로 "
이렇게 수정 요청함
우클릭을 해도 파티클이 없는 버그남
"우클릭을 해도 파티클이 안나오고 다이아만 소모되고 있어"
-> 버그 픽스
이럼 노예랑 자연사만 남은듯
"이제 노예 시스템과 자연사 방지 시스템을 추가 할건데
노예는 관전자가 아닌 체력 5칸 나약함을 상시로 지닌 상태에서
자연사가 가능하고 사망시 즉시 주인 주변에서 1초 실명과 함께 즉시 리스폰함
자연사 방지는 노예가 아닌 플레이어가 자연사 시 사망하지 않고 불사의 토템이 발동되며
2분간 움직이지 못하고 무적상태가 되는거야"
걍 뒤지는 문제 발생
"자연사를 감지하지 못하고 있어"
실패
"플레이어의 죽음이밴트가 아니라 죽을 정도의 대미지가 들어갈시로 변경"

대강 성공
노예는 사람이 없어서 태스트 불가능
총 12번의 대화면 꼬리잡기 끝
벌써 다했쥬?
대화 횟수
결과 : ct.jar
"지금까지의 대화를 택스트 문서로 만들어줘"
마인크래프트 1.20.4 꼬리잡기 플러그인 개발 기록
이 문서는 꼬리잡기 플러그인의 초기 기획부터 기능 추가 및 오류 수정까지의 전체 개발 과정을 기록합니다.
1. 초기 기획 및 기본 구조 개발
요청 사항:
•
마인크래프트 1.20.4 버전용 플러그인
•
기본 기능: 인원수 설정, 색 랜덤 부여, 타깃 지정 및 나침반 추격, 잡힐 시 관전 모드(노예화), 월드 보더 설정
개발 내용:
•
플러그인의 기본 구조(Main.java, GameState.java, GameListener.java)를 생성했습니다.
•
/꼬리잡기 시작, /꼬리잡기 종료 명령어를 구현했습니다.
•
게임 시작 시 온라인 플레이어를 모두 참여시키고, 랜덤으로 타겟을 지정했습니다.
•
플레이어가 잡히면(사망) 관전 모드로 전환하고, 최후의 1인이 남으면 게임이 종료되는 로직을 구현했습니다.
•
1초마다 나침반이 타겟을 가리키도록 업데이트하는 기능을 추가했습니다.
2. 오류 수정 (컴파일 및 로딩 오류)
•
문제 1: Main.java 파일의 중괄호({})가 맞지 않아 컴파일 오류 발생.
◦
해결: 불필요한 닫는 중괄호를 제거하여 수정했습니다.
•
문제 2: plugin.yml의 메인 클래스 경로 오류로 인한 플러그인 로딩 실패 (Cannot find main class 'Main').
◦
해결: plugin.yml 파일의 main 경로를 Main.Main으로 수정하여 패키지 경로를 정확히 명시했습니다.
3. 색상 부여 방식 변경
요청 사항:
•
색상을 랜덤이 아닌 '빨-주-노-초-파-남-보' 순서로 부여.
•
게임 참여 인원수만큼 순서대로 고유한 색상을 할당.
개발 내용:
•
GameListener.java의 색상 배열을 요청된 순서로 변경했습니다.
•
게임 시작 시, 참여자 목록 순서대로 색상을 할당하는 로직으로 수정했습니다.
•
이 과정에서 private 메소드 접근 오류가 발생하여, setupTeams() 메소드를 public으로 변경하여 해결했습니다.
4. 추격 방식 변경 (나침반 -> 다이아몬드 파티클)
요청 사항:
•
나침반과 이름표 색상 기능을 제거.
•
게임 시작 시, 자신의 색과 쫓아야 할 목표의 '색'을 채팅으로 안내.
•
다이아몬드를 우클릭하면 타겟 방향으로 SOUL_FIRE_FLAME 파티클이 생성되도록 변경.
•
다이아몬드는 지급하지 않고, 우클릭 시 1개씩 소모.
•
파티클은 일직선으로 10개가 즉시 생성되고, 소리는 8비트 노트 블록 소리로 변경.
개발 내용:
•
Main.java에서 게임 시작 시 나침반 대신 다이아몬드를 지급하던 코드를 제거하고, 색상 안내 메시지 로직을 수정했습니다.
•
플레이어에게 색상을 랜덤하게 배정하는 로직으로 수정했습니다.
•
GameListener.java에서 PlayerInteractEvent를 사용하여 다이아몬드 우클릭을 감지하고, 1개를 소모하며 요청된 파티클과 소리를 재생하는 기능을 구현했습니다.
•
버그 수정: 다이아몬드 소모 후 코드가 종료되어 파티클이 생성되지 않는 문제를 해결했습니다. (불필요한 return; 제거)
5. 노예 및 자연사 방지 시스템 구현
요청 사항:
•
노예 시스템: 잡힌 플레이어는 관전자가 되는 대신, 최대 체력 5칸과 영구적인 '나약함' 효과를 받는 '노예' 상태가 됨. 노예가 죽으면 주인(자신을 잡은 플레이어) 근처에서 1초간 '실명'과 함께 즉시 부활.
•
자연사 방지: 노예가 아닌 플레이어가 자연사할 경우, 죽지 않고 불사의 토템 효과가 발동하며 2분간 무적 및 행동 불가 상태가 됨.
개발 내용:
•
플레이어가 죽는 이벤트(PlayerDeathEvent) 대신, 죽을 만큼의 대미지를 받는 이벤트(EntityDamageEvent)를 감지하도록 로직을 변경했습니다.
◦
이를 통해 플레이어가 죽음 화면을 보지 않고 즉시 상태가 변경되도록 게임 흐름을 개선했습니다.
•
onEntityDamage 이벤트 핸들러에서 아래와 같이 로직을 분기했습니다.
i.
추격자에게 잡혔을 경우: 죽음을 취소하고, 체력을 5칸으로 줄인 뒤 나약함 효과를 부여하여 '노예'로 만듭니다.
ii.
자연사했을 경우: 죽음을 취소하고, 불사의 토템 효과를 재생하며 2분간 무적 및 행동 불가 상태로 만듭니다. (PlayerMoveEvent를 통해 움직임 제한)
iii.
노예가 죽었을 경우: 그대로 죽도록 두고, PlayerRespawnEvent에서 주인 옆에 부활시키고 실명 효과를 부여하는 로직을 추가했습니다.
•
오류 수정: EntityDamageEvent에서는 죽음 메시지를 설정할 수 없어(setDeathMessage 사용 불가) 발생한 컴파일 오류를 Bukkit.broadcastMessage()로 코드를 변경하여 해결했습니다.
•
버그 수정: 자연사 감지가 제대로 되지 않던 문제를 onEntityDamage 이벤트의 로직 순서를 재구성하여 해결했습니다.
댓글이 없습니다.
새로운 댓글을 등록해 주세요!