claude-bot 2a500a381f op editor: 플랫폼 설치파일 URL 필드 초기 렌더에서 플랫폼 타입에 맞게 숨김
증상: 플랫폼 타입이 fabric 인 음악퀴즈를 편집할 때 "플랫폼 설치파일
URL" 필드가 잠깐 보이고, 그 자리에 값을 입력해 저장해도 disk 에는
저장되지 않아 다시 비어 보였다 (normalizePackDefinition 이 fabric 의
downloadUrl 을 의도적으로 제거하기 때문).

원인: editor.ejs 가 platformDownloadField 를 항상 visible 로,
platformLoaderField 를 항상 hidden 으로 렌더한 뒤 JS 가 뒤늦게 보정.
이 짧은 깜빡임 동안 사용자가 URL 필드를 보고 입력하게 됨.

수정: 서버 렌더 시점에 pack.platform.type 에 따라 hidden 속성을 미리
붙여 둔다 (fabric/vanilla → URL 숨김, fabric → loader 표시).
2026-05-14 00:06:15 +09:00
2026-05-11 03:31:07 +09:00

마인크래프트 음악퀴즈 통합 패키지

마인크래프트 음악퀴즈를 한 번에 배포·관리할 수 있도록 만든 통합 프로젝트입니다.

  • 관리 사이트 — 음악퀴즈 정보(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.
  • fabricloaderVersion 만 지정하면 설치기가 최신 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
No description provided
Readme 41 MiB
v0.3.5 Latest
2026-05-23 17:31:42 +09:00
Languages
TypeScript 58.7%
JavaScript 24.2%
EJS 10.2%
CSS 6.5%
HTML 0.4%