# Minecraft Launcher Electron 기반 커스텀 마인크래프트 런처입니다. `MRSLauncher`를 최신 소스로 가져온 뒤, 단일 모드팩 구조를 `설치 페이지 + 라이브러리` 구조로 확장했습니다. ## 현재 상태 - 여러 프로필을 설치 페이지에서 라이브러리로 추가 가능 - 프로필 종류 지원: - `modpack` - `map` - `server-pack` - 라이브러리에서 프로필 선택, 제거, 자료 준비, 실행 화면 이동, 바로 실행 가능 - 프로필별 `distribution.json` 전환 가능 - `map` 프로필은 월드 ZIP/로컬 폴더를 `saves/`에 설치하고 `quickPlaySingleplayer`로 바로 실행 - `server-pack` 프로필은 로컬 서버 번들 설치, 서버 시작/중지, 선택형 터널 명령 실행, 공개 주소 표시 지원 - 라이브러리의 주소 입력칸에 `host:port`를 넣으면 실행 시 자동 접속 - 설치 페이지는 관리자가 미리 등록한 프로필을 보여주는 읽기 전용 카탈로그 화면 - 설치 페이지에서 프로필 제목, 요약, 상세 설명, 실행 조건을 확인 가능 ## 중요한 제한 포트포워딩 없이 외부 사용자가 접속하게 만드는 기능은 런처만으로 해결되지 않습니다. 필요한 것 중 하나: - 별도 릴레이 서버 - 터널링 도구 - VPN/NAT traversal 백엔드 현재 구현은 `server-pack` 프로필에 `tunnelCommand`를 넣어 외부 도구를 호출하는 자리까지 제공합니다. 추후 설계 문서: - [docs/portforwarding-free-connection-plan.md](docs/portforwarding-free-connection-plan.md) ## 프로젝트 구조 - `app/` - Electron renderer 자산 - 설치/라이브러리/로그인/설정 화면 - `app/assets/js/catalogmanager.js` - 관리자 등록 카탈로그 로드, 프로필 메타데이터 정규화 - `app/assets/js/profileassetmanager.js` - 맵 ZIP, 서버 번들 ZIP/폴더 설치 - `app/assets/js/serverruntime.js` - 로컬 서버 실행, 선택형 터널 프로세스 관리 - `src/main/index.ts` - TypeScript 메인 프로세스 엔트리 - `index.js` - `dist/main/index.js` 우선 실행, 없으면 `index.legacy.js` 폴백 ## 카탈로그 / 프로필 기본 카탈로그: - `app/assets/launcher/catalog.json` 원격 카탈로그: - 관리자 배포 설정으로 연결 세부 스키마는 [docs/launcher-catalog.md](docs/launcher-catalog.md)를 보면 됩니다. ## 개발 요구사항: - Node.js 22 설치: ```bash npm install ``` 관리자 사이트 실행: ```bash npm run admin ``` 설치 페이지용 프로필을 웹 UI로 관리할 수 있습니다. - `distribution.json`도 사이트 안에서 직접 만들고 수정할 수 있습니다. - 문서: [docs/admin-site.md](docs/admin-site.md) 개발 실행: ```bash npm start ``` 윈도우 smoke 테스트: ```bash npm run smoke:win ``` 이 명령은 TypeScript 메인 프로세스를 빌드한 뒤 Electron 앱을 실제로 한 번 띄우고, `LAUNCHER_SMOKE_EXIT` 환경변수로 자동 종료합니다. TypeScript 메인 프로세스만 빌드: ```bash npm run build ``` 배포 빌드: ```bash npm run dist ``` ## 참고 - Upstream: `https://github.com/peunsu/MRSLauncher` - Original base: `https://github.com/dscalzi/HeliosLauncher` - CI: `.github/workflows/windows-smoke.yml` 에서 Windows smoke run 수행