fe0d2f75e342b1aabab8d5df3a3e81f8758acbca
On install failure the temp folder is now preserved instead of wiped, so already-downloaded songs/images are skipped on the next attempt. The error screen offers 재시도 (resume from the failed item) and 처음으로 (discard the partial download and restart). Closing the program without retrying still wipes the partial download via window-all-closed, and an explicit cancel also clears it. Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
마인크래프트 음악퀴즈 통합 패키지
마인크래프트 음악퀴즈를 한 번에 배포·관리할 수 있도록 만든 통합 프로젝트입니다.
- 관리 사이트 — 음악퀴즈 정보(JSON)와 음악·사진 목록, 데이터팩 출력을 한 곳에서 운영.
- 음악퀴즈 간편설치기 (
.exe) —manifest.json기반으로 사용자가 마인크래프트 본체·서버·모드를 자동 설치. - 리소스팩 간편설치기 (
.exe) — 음악퀴즈 음악·표지를 yt-dlp 로 받아 painting variant 텍스처 리소스팩으로 패키징.
무엇이 들어 있나
| 디렉터리 | 역할 | 진입점 |
|---|---|---|
src/server/ |
음악퀴즈 관리 웹사이트 (Express + EJS) | bun start 또는 npm start |
src/installer/ |
음악퀴즈 간편설치기 (Electron) | npm run installer |
src/installer-rp/ |
리소스팩 간편설치기 (Electron) | npm run installer:rp |
src/shared/ |
두 설치기와 서버가 공유하는 타입·스토어 | — |
views/ |
EJS 템플릿 (관리 사이트) | — |
manifest/ |
음악퀴즈별 정의 JSON | — |
file/list/ |
음악퀴즈별 음악·사진 목록 JSON | — |
file/ |
정적 파일(서버 zip / 맵 zip / 모드 jar 등) 호스팅 | — |
핵심 컨셉
설치기는 사용자의 %APPDATA%\.minecraft 를 더럽히지 않기 위해 .mc_custom 을 별도 게임 디렉터리로 사용합니다.
%APPDATA%\
├─ .minecraft\ ← 원래 마인크래프트 폴더(공용 자원: assets, libraries, versions, runtime)
└─ .mc_custom\ ← 음악퀴즈 전용 게임 폴더(설치기가 자동 생성)
├─ mods\ ← 음악퀴즈가 지정한 모드(.jar)
├─ resourcepacks\ ← 리소스팩(.zip)
├─ saves\ ← 단일 맵 .zip 압축 해제 결과
├─ assets\ (junction → .minecraft\assets)
├─ libraries\ (junction → .minecraft\libraries)
├─ versions\ (junction → .minecraft\versions)
├─ options.txt 등 ← `.minecraft` 의 최상위 설정 파일을 복사해 사용
└─ launcher_profiles ← 실제 파일은 `.minecraft\launcher_profiles.json` 을 수정해 gameDir=.mc_custom 으로 지정
이렇게 분리해 두면 사용자가 평소 쓰던 마인크래프트와 음악퀴즈 설정이 섞이지 않고, 음악퀴즈만 삭제해도 본체에는 영향이 없습니다.
빠른 시작
전제: Node.js 18+, npm. 윈도우 빌드를 만들 때만 추가로 Electron 의 PE 서명·아이콘 도구가 필요합니다.
# 의존성 설치
npm install
# 환경변수 템플릿 복사 (처음 한 번만)
cp .env.example .env
# 1) 관리 사이트 개발 실행 (http://localhost:3000)
npm start
# 2) 음악퀴즈 간편설치기를 Electron 으로 실행해 보기
npm run installer
# 3) 리소스팩 간편설치기를 Electron 으로 실행해 보기
npm run installer:rp
# 4) 음악퀴즈 간편설치기 윈도우 .exe 빌드
npm run dist:win
리소스팩 설치기는 yt-dlp 가 필요합니다. 자동 다운로드되지만, 막혀 있는 환경이라면 docs/yt-dlp-setup.md 참고.
자주 쓰는 문서
| 문서 | 내용 |
|---|---|
docs/installer.md |
음악퀴즈 간편설치기 사용자 흐름(단계별 화면·동작). |
docs/admin-site.md |
관리 사이트 운영자 가이드(음악퀴즈 추가·편집, 음악 목록, 데이터팩 출력). |
docs/resourcepack-installer.md |
리소스팩 간편설치기 동작 명세(yt-dlp 흐름, 이미지 정규화 규칙). |
docs/painting-variant.md |
1.21+ painting variant 슬롯/리소스팩 텍스처 규격. |
docs/yt-dlp-setup.md |
yt-dlp 자동/수동 설치, 트러블슈팅. |
데이터 포맷 (요약)
자세한 필드 설명은 docs/admin-site.md 의 "음악퀴즈 JSON" 절을 참고하세요.
manifest.json — 사이트 루트, 음악퀴즈 목록
{
"packs": [
{ "name": "음악퀴즈 v1", "file": "mq-v1" }
]
}
file은/manifest/<file>.json의 파일명(확장자 제외).- 관리 사이트에서 음악퀴즈를 추가/삭제하면 자동으로 갱신됩니다.
/manifest/<key>.json — 음악퀴즈 정의
{
"name": "음악퀴즈 v1",
"mcVersion": "1.21.4",
"platform": {
"type": "fabric",
"loaderVersion": "0.16.10"
},
"modsFolder": "mq-v1",
"resourcepackPath": "mq-v1.zip",
"mapPath": "mq-v1-map.zip",
"serverPath": "mq-v1-server.zip",
"serverMinRam": 4096,
"serverMaxRam": 8192,
"clientMinRam": 4096,
"clientRecommendedRam": 8192
}
platform.type=vanilla/forge/fabric/neoforge.fabric은loaderVersion만 지정하면 설치기가 최신 fabric-installer 로 자동 CLI 설치합니다.- 나머지(forge/neoforge) 는
platform.downloadUrl에 설치 jar URL. modsFolder→/file/mods/<폴더>/의 모든.jar를 자동으로 받습니다.serverPath/mapPath/resourcepackPath→/file/servers/,/file/maps/,/file/resourcepacks/아래 zip 파일명.
/file/list/<key>.json — 음악·사진 목록 (리소스팩 설치기용)
{
"musicPlaylistUrl": "https://www.youtube.com/playlist?list=...",
"imagePlaylistUrl": "https://www.youtube.com/playlist?list=...",
"music": [
{ "url": "https://www.youtube.com/watch?v=...", "title": "...", "artist": "...", "durationSec": 213 }
],
"images": [
{ "url": "https://www.youtube.com/watch?v=..." },
{ "url": "https://example.com/cover.png" }
]
}
디렉터리 구조 (전체)
minecraft_launcher/
├─ src/
│ ├─ server/ Express + EJS 관리 사이트
│ ├─ installer/ 음악퀴즈 간편설치기 (Electron 메인 + preload)
│ ├─ installer-rp/ 리소스팩 간편설치기 (Electron 메인 + 음악/이미지 파이프라인)
│ └─ shared/ 공용 타입, 매니페스트 스토어, mojang/upnp 유틸
├─ installer/ 음악퀴즈 설치기 렌더러(HTML/CSS/JS)
├─ installer-rp/ 리소스팩 설치기 렌더러(HTML/CSS/JS)
├─ views/ 관리 사이트 EJS 템플릿
├─ public/ 관리 사이트 정적 파일(styles.css 등)
├─ manifest/ 음악퀴즈 JSON 정의 (운영자가 편집)
├─ file/
│ ├─ servers/ 서버 zip
│ ├─ maps/ 맵 zip
│ ├─ mods/<폴더>/ 모드 jar 묶음 (index.json 자동 생성)
│ ├─ resourcepacks/ 리소스팩 zip
│ ├─ platforms/ Forge / NeoForge 설치 jar
│ └─ list/<key>.json 음악·사진 목록
├─ docs/ 사용·운영 문서
├─ manifest.json 사이트 루트 매니페스트 (자동 관리)
├─ account.json 관리자 계정 (절대 외부 노출 금지)
├─ package.json
└─ tsconfig.{,server,installer,installer-rp}.json
빌드 산출물 / 배포
| 산출물 | 빌드 명령 | 비고 |
|---|---|---|
| 관리 사이트 (Node 실행) | npm start |
systemd 등으로 띄우기. 외부 도메인이 manifest 의 base URL 이 됩니다. |
음악퀴즈 간편설치기 .exe |
npm run dist:win |
electron-builder.yml 설정 사용. |
리소스팩 간편설치기 .exe |
tsconfig.installer-rp.json 빌드 후 electron-builder 수동 패키징 |
라이선스
내부 프로젝트. 외부 공개 시 별도 명시.
Description