AI 팀으로 마크 서버 만들기#4ChatGPT가 그리고 Claude가 검수하는 리소스팩 파이프라인! 🎨
한눈에 보기
그림은 ChatGPT, 규격과 검수는 Claude로 역할을 나눴어요. 프롬프트에 픽셀 좌표까지 적고 파이썬으로 격자부터 그리게 하는 방법, 1.21.11에서 활 당기기 3단계를 붙이는 item 정의 JSON, 그리고 검수가 없었으면 그대로 게임에 들어갔을 사고 5가지를 소개합니다.
- Minecraft Java 1.21.11 리소스팩(pack_format 75) · 2026-09-30 실제 병합·게임 확인
- 아이템 그림은 textures/item/ 아래에 둬야 해요 — textures/gui/ 에 두면 보라·검정 격자가 떠요
- 폰트 글리프로 그리는 GUI 배경은 창 크기 그대로(1배)만 — 2배(352px)는 게임에서 안 그려졌어요
- 활 당기기는 1.21.4부터 overrides 대신 items/ 정의의 condition + range_dispatch 로 만들어요
목차8개 항목

안녕하세요! Mojangcam입니다 😎
지난 #3에서는 숫자 밸런스를 다뤘어요. 이번 편은 그림이에요. 이 서버에는 커스텀 GUI(도우미 "오르벨" 메뉴, 퀘스트 일지), 아이콘 수십 개, 클래스 무기 그림이 들어가요. 이걸 전부 직접 그릴 수는 없어서 역할을 나눴어요.
| 누가 | 하는 일 |
|---|---|
| ChatGPT | 그림 그리기 + 파일 묶어서 zip으로 주기 |
| Claude (팀장) | 프롬프트 쓰기, zip 검수, 리소스팩에 합치기, 버전 올리기 |
| 나 | 프롬프트 복사해서 ChatGPT에 붙이기, zip을 Claude에게 넘기기, 게임에서 확인 |
이번 편에서는 이 파이프라인과, 검수에서 잡아낸 사고 5가지를 정리해 볼게요.

📌 1단계 - 프롬프트: "잘 그려줘" 대신 좌표를 적기
마크 GUI는 칸 위치가 1픽셀만 어긋나도 티가 나요. 그래서 프롬프트에 감성 말고 규격을 적었어요.
- 창 크기 공식: 폭 176, 높이
114 + 18 × 줄 수, 칸(7 + 18c, 17 + 18r)부터 18×18 - 버튼마다 슬롯 번호와 사각형 좌표
(x, y, w, h)표 - "파이썬(PIL)으로 격자부터 정확히 그리고, 그 위에 질감과 장식만 얹어라"
- 창 안쪽은 완전 불투명 (바닐라 회색 창이 비치지 않게)
- 이미지에 글자 넣지 않기 — 버튼 이름은 게임에서 툴팁으로
- 망토처럼 보이는 것 금지, 실제 게임·브랜드 스타일 흉내 금지
- 결과물은 zip 하나: 리소스팩 조각 + 미리보기 +
validation.json+ 한국어 README
그림 생성 AI가 격자를 "대충" 그리면 끝이에요. 격자는 코드로, 그림은 AI로 나누게 한 게 제일 효과가 컸어요.

📌 2단계 - 검수: zip을 받으면 Claude가 하는 일
- 미리보기 그림을 직접 열어서 보기 (AI가 쓴 validation.json만 믿지 않음)
- 이미지 크기·투명도·칸 위치 측정
- 모든 모델 JSON이 가리키는 텍스처 파일이 실제로 있는지 확인
- 기존 리소스팩과 겹치는 파일은 백업 후 덮어쓰기
- 리소스팩 버전을 올려 zip으로 묶고, 디스코드 리소스팩 채널에 올리기
이 과정에서 잡힌 사고가 다섯 개 있었어요.
📌 사고 1 - 텍스처 경로: 보라·검정 격자 직전
처음 프롬프트에 아이콘 경로를 textures/gui/quest/<id>.png로 적었어요. ChatGPT가 "이 경로면 아이템 모델이 못 읽는다"고 되물어 줬죠.
마인크래프트는 아이템 모델에 쓰는 그림을 블록·아이템 아틀라스로 묶는데, 기본으로는 textures/block/, textures/item/ 폴더만 넣어요. textures/gui/에 두면 아틀라스에 안 들어가서 보라·검정 격자가 떠요.
{
"parent": "minecraft:item/generated",
"textures": { "layer0": "myserver:item/gui/quest/crest_main" }
}→ 그림은 assets/myserver/textures/item/gui/quest/crest_main.png에 둬요. (아틀라스 설정을 바꾸는 방법도 있지만 minecraft 네임스페이스를 건드리게 돼서 피했어요.)
📌 사고 2 - 활 두 자루의 이름이 서로 바뀜
활 당기기 그림 6장(활 2종 × 3단계)을 받았어요. 미리보기만 보면 멀쩡했어요. 그런데 원본 그림과 픽셀 단위로 비교해 보니 이상했어요.
t0(모험가의 활) 이름으로 온 그림이 전부t1(서약 활)이었고, 반대도 마찬가지- 손잡이 위치가 원본보다 최대 9픽셀 어긋남 → 당기는 순간 활이 손에서 튀어 보임
- 활 주변에 먼지 같은 점이 흩어져 있음

그래서 Claude가 직접 고쳤어요.
- 원본과 비교해서 이름 바로잡기
- 손잡이의 청록색 감개 부분 중심을 찾아서 원본 위치로 정렬
- 몇 픽셀짜리 떨어진 덩어리는 지우기

1.21.4부터는 활 당기기를 옛 overrides 대신 아이템 정의 파일로 만들어요. 1.21.11 기준 실제로 쓴 파일이에요.
{
"model": {
"type": "minecraft:condition",
"property": "minecraft:using_item",
"on_false": { "type": "minecraft:model", "model": "myserver:item/t0_sylvanor_bow_a" },
"on_true": {
"type": "minecraft:range_dispatch",
"property": "minecraft:use_duration",
"scale": 0.05,
"fallback": { "type": "minecraft:model", "model": "myserver:item/t0_sylvanor_bow_a_pulling_0" },
"entries": [
{ "threshold": 0.65, "model": { "type": "minecraft:model", "model": "myserver:item/t0_sylvanor_bow_a_pulling_1" } },
{ "threshold": 0.9, "model": { "type": "minecraft:model", "model": "myserver:item/t0_sylvanor_bow_a_pulling_2" } }
]
}
}
}하나씩 뜯어볼게요 💡
assets/myserver/items/<id>.json: 이 파일 위치가 1.21.4+의 "아이템 정의"예요. 서버는 아이템에item_model = myserver:<id>만 붙여요.using_item: 활을 당기는 중인지use_duration+scale: 0.05: 당긴 시간(틱) × 0.05 → 20틱(1초)에 1.0. 바닐라 활과 같은 값이에요.
📌 사고 3 - GUI 배경이 안 보임
오르벨 메뉴와 퀘스트 창 배경을 넣었는데, 게임에서 열어 보니 배경 없이 바닐라 회색 창이 뜨고 제목은 창 밖 왼쪽으로 밀려나 있었어요.

커스텀 GUI 배경은 창 제목에 큰 글자(폰트 글리프) 하나를 그리는 방식이에요. 선명하게 하려고 배경을 2배 크기(352×444) 로 넣었는데, 이 크기의 글리프가 게임에서 그려지지 않았어요. 폰트 글리프가 들어가는 아틀라스 크기 한계(256픽셀로 추정) 때문으로 보여요. 배경이 없으니 제목을 왼쪽으로 당기는 음수 간격만 적용돼서 제목이 밀려났고요.
→ ChatGPT가 따로 챙겨 준 1배(176×222) 배경으로 바꾸니 바로 해결됐어요. 앞으로 폰트 배경은 1배로만 받기로 규칙에 적었어요.
📌 사고 4 - 지지직거리는 활
활 당기기가 들어간 뒤 활 옆면이 계단처럼 지지직거렸어요.

마인크래프트는 손에 든 2D 아이템을 픽셀마다 두께를 붙여서 입체로 만들어요. 16픽셀 그림이면 괜찮은데, 우리 활은 128픽셀이라 가는 줄과 픽셀 옆면이 수백 개 생겨서 줄무늬가 됐어요.
- 먼저 두께 0의 판 한 장으로 바꿨더니 → 줄무늬는 사라졌지만 너무 얇아 어색
- 그래서 활 몸통만 64칸 격자로 묶어 얇은 두께를 주고, 줄·화살은 판으로 두는 모델을 스크립트로 만들었어요 (모델 하나에 70~100개 정도의 상자)

📌 사고 5 - 16픽셀로 줄어든 "3D 활"
진짜 3D 활도 ChatGPT에 맡겨 봤어요. 받은 모델은 128픽셀 그림을 16×16으로 줄여서 한 칸에 한 색짜리 상자로 만든 거였어요. 무늬·감개·깃털 장식이 다 사라지고, 몸통이 끊겨 점들이 떠 있었어요. 게다가 당기기는 1.21.4에서 없어진 overrides 방식이라 1.21.11에서는 작동하지 않았어요.

→ 적용하지 않고 보관했어요. 3D는 나중에 Blockbench로 몸통을 구간별 곡선으로 직접 만드는 방식으로 다시 요청할 예정이에요.
📌 마무리
- 격자는 코드로, 그림은 AI로 — 프롬프트엔 감성 대신 좌표
- 검수는 미리보기를 직접 보고, 원본과 픽셀 비교까지
- 1.21.11에서 기억할 것: 아이템 그림은
textures/item/, 폰트 배경은 1배, 활 당기기는 items/ 정의 파일 - AI가 만든 결과물이라도 반려할 건 반려하기
다음 편은 시리즈 마지막으로 디스코드 운영 이야기예요. 결정-포럼 태그와 체크 표시 규칙, 명령어 목록 포럼, 리소스팩 채널처럼 봇이 자동으로 관리하는 채널들을 다룰게요. 기대해주세요 🙌
이 글은 제가 방향을 정하고 Claude와 함께 정리했어요. 이 서버는 개인 프로젝트이며, 마인크래프트 공식 콘텐츠가 아니고 Mojang·Microsoft와 관계없습니다.
연재 · 5편 중 4번째
AI 팀으로 마크 서버 만들기
- #1AI 팀장 1명 + 팀원 15명으로 MMORPG 플러그인 만드는 구조! 🤖
- #2플러그인 하나에 모듈 13개! 코어 구조와 '1000029 데미지' 사건 🧩
- #3숫자 ×10, 12시간 경험치 곡선, 클래스 6종 시뮬레이션! 📊
- #4ChatGPT가 그리고 Claude가 검수하는 리소스팩 파이프라인! 🎨지금 읽는 글
- #5디스코드 봇으로 개발팀 운영하기! 결정 포럼·명령어 목록·리소스팩 채널 🤝
