# Minecraft Launcher

Electron 기반 커스텀 마인크래프트 런처입니다. `MRSLauncher`를 최신 소스로 가져온 뒤, 설치 페이지 + 라이브러리 구조와 관리자 사이트를 붙였습니다.

## 현재 구조

- 프로필은 `맵`을 기본으로 두고 `모드`, `플러그인`, `서버` 기능을 조합합니다.
- 설치 페이지는 관리자 등록 프로필을 읽기 전용으로 보여줍니다.
- 라이브러리에서는 프로필 설치, 선택, 제거만 하고, 서버 프로필은 접속 주소를 직접 입력할 수 있습니다.
- `PLAY`를 누르면:
  - 서버 기능이 없는 프로필은 맵을 싱글플레이로 실행
  - 서버 기능이 있고 접속 주소가 있으면 해당 주소로 접속
  - 서버 기능이 있고 접속 주소가 없으면 로컬 서버를 먼저 실행한 뒤 `localhost`로 접속
- 메인 화면 왼쪽 아래는 선택된 서버 프로필의 자동 포트 개방 상태를 표시합니다.

## 자동 포트 개방

- 현재 구현은 `UPnP + Windows 방화벽` 기준입니다.
- 성공하면 자동 개방 상태를 표시합니다.
- 이미 열려 있으면 기존 포트를 그대로 사용합니다.
- 실패하면 `직접 포트포워딩 해주세요` 안내를 표시합니다.
- 접속 주소를 직접 입력한 경우에는 자동 포트 개방을 건너뜁니다.

## 관리자 사이트

```bash
npm run admin
```

- 기본 주소: `http://127.0.0.1:8787`
- `distribution.json` 업로드 / 새로 만들기 / 입력 폼 편집 가능
- 월드 ZIP 업로드 가능
- 서버용 버킷 JAR 업로드 가능
- 서버 메모리, 최대 인원수, 화이트리스트, 포트 설정 가능
- 상단의 `앱 연결용 catalog URL`을 런처 설정의 `카탈로그 주소`에 넣으면 앱이 원격 catalog를 읽습니다.

공개 주소로 관리자 사이트를 띄울 때:

```bash
LAUNCHER_PUBLIC_BASE_URL=https://your-domain.example npm run admin
```

문서:

- [docs/admin-site.md](docs/admin-site.md)
- [docs/launcher-catalog.md](docs/launcher-catalog.md)

## 개발

요구사항:

- Node.js 22

설치:

```bash
npm install
```

개발 실행:

```bash
npm start
```

윈도우 smoke 테스트:

```bash
npm run smoke:win
```

TypeScript 메인 프로세스만 빌드:

```bash
npm run build
```

배포 빌드:

```bash
npm run dist:win
```

## 참고

- Upstream: `https://github.com/peunsu/MRSLauncher`
- Original base: `https://github.com/dscalzi/HeliosLauncher`
