가이드 (mc_datapack/launcher_datapack_연동_가이드.txt) 에 따라:
- file/datapacks/music_quiz_template/ 에 mc_datapack 의 music_quiz/ 정적
파일을 미리 동봉 (data/mq/function/init/songs.mcfunction 제외).
- src/server/datapack.ts: list.music → SNBT (`{title, author, alias}`)
songs.mcfunction 빌더와 archiver 기반 zip 스트리머 추가.
- /op/datapack/:packName/generate 가 텍스트 placeholder 대신
music_quiz_<key>.zip 을 Content-Disposition attachment 로 내려준다.
- datapack.ejs 의 코드블록·복사 UI 제거, 곡 수는 서버 렌더 시점에 표시.
- 더 이상 쓰이지 않는 locales 의 datapackOutput.* 키 제거, datapack
버튼 라벨/상태 문구를 zip 다운로드용으로 정리.
35 lines
1.5 KiB
TypeScript
35 lines
1.5 KiB
TypeScript
import path from 'node:path'
|
|
import os from 'node:os'
|
|
|
|
// 컴파일 후 dist/shared/paths.js → 2단계 상위가 프로젝트 루트.
|
|
export const projectRoot = path.resolve(__dirname, '..', '..')
|
|
export const manifestRootPath = path.join(projectRoot, 'manifest.json')
|
|
export const manifestDirPath = path.join(projectRoot, 'manifest')
|
|
export const accountFilePath = path.join(projectRoot, 'account.json')
|
|
export const fileDirPath = path.join(projectRoot, 'file')
|
|
export const fileListDirPath = path.join(fileDirPath, 'list')
|
|
export const fileDatapacksDirPath = path.join(fileDirPath, 'datapacks')
|
|
export const viewsDirPath = path.join(projectRoot, 'views')
|
|
export const publicDirPath = path.join(projectRoot, 'public')
|
|
|
|
/**
|
|
* 사용자 환경의 "%appdata%" 디렉터리(OS별 표준 사용자 데이터 경로)를 반환.
|
|
* - Windows : %APPDATA% (보통 C:\Users\<user>\AppData\Roaming)
|
|
* - macOS : ~/Library/Application Support
|
|
* - Linux 등 : $XDG_CONFIG_HOME 또는 ~/.config
|
|
*/
|
|
export function getAppDataDir(): string {
|
|
if (process.platform === 'win32') {
|
|
return process.env.APPDATA || path.join(os.homedir(), 'AppData', 'Roaming')
|
|
}
|
|
if (process.platform === 'darwin') {
|
|
return path.join(os.homedir(), 'Library', 'Application Support')
|
|
}
|
|
return process.env.XDG_CONFIG_HOME || path.join(os.homedir(), '.config')
|
|
}
|
|
|
|
/** %appdata%/.mc_custom — 음악퀴즈 관련 외부 도구/캐시 보관 디렉터리. */
|
|
export function getMcCustomDir(): string {
|
|
return path.join(getAppDataDir(), '.mc_custom')
|
|
}
|