Skip to content
블로그로 돌아가기
CmlLib.Core로 커스텀 마인크래프트 런처 만들기

CmlLib.Core로 커스텀 마인크래프트 런처 만들기

Alexandru Maftei
Alexandru Maftei
@ice
Updated
4 조회수
TL;DR:CmlLib.Core는 인증, 버전 관리, 모드로더, 크로스 플랫폼 배포를 지원하는 .NET 라이브러리로, 커스텀 마인크래프트 런처를 만드는 데 완벽합니다. 모드팩을 배포하거나 커뮤니티 서버를 운영하는 개발자에게 이상적입니다.

".NET 마인크래프트 런처 라이브러리. 모든 버전, 인증, Forge, Java, 크로스플랫폼 지원"

CmlLib/CmlLib.Core - github.com
⭐ 274개 스타💻 C#📄 MIT

공식 런처에 의존하지 않고 자신만의 마인크래프트 런처를 만들고 싶으신가요? CmlLib.Core는 인증, 버전 관리, 모드 로딩 등 복잡한 작업을 모두 처리하는 .NET 라이브러리입니다. 원하는 방식으로 작동하는 런처를 만드는 데 집중할 수 있습니다.

이 프로젝트의 역할

CmlLib.Core는 커스텀 마인크래프트 런처를 만들고자 하는 개발자를 위한 .NET 라이브러리입니다. 커뮤니티에서 모드된 게임 버전을 배포하는 방법이나 일부 서버에서 커스텀 클라이언트 설정을 관리하는 방식이 궁금했다면, 이 라이브러리가 그러한 인프라의 많은 부분을 지원합니다. 모드도 아니고, 클라이언트 패치도 아니며, 직접 실행하는 것도 아닙니다. 게임 파일 다운로드, 마이크로소프트 계정 인증 관리, 커스텀 파라미터로 게임 실행, Forge와 Fabric 같은 모드로더 지원 등 복잡한 백엔드 작업을 처리하는 툴킷입니다.

이 프로젝트는 GitHub에서 274개의 스타를 받았으며 C#으로 작성되었습니다. 즉, .NET 개발에 최소한의 기본 지식이 필요합니다. 그리고 솔직히, 대상은 런처를 만드는 개발자이지 더 쉽게 게임을 하려는 플레이어가 아닙니다.


커스텀 런처를 만드는 경우

커스텀 런처에 대해 명심할 점은 대부분의 플레이어는 필요 없다는 것입니다. 공식 런처는 바닐라 마인크래프트에 잘 작동합니다. 하지만 커스텀 런처가 정말 필요한 실제 경우들이 있습니다.

커뮤니티 서버를 운영 중이고 커스텀 모드와 리소스 팩이 미리 포함된 사전 구성된 클라이언트를 배포하고 싶을 수도 있습니다. 새로운 플레이어들이 참여하고, 런처를 다운로드하고, 플레이를 누르면 모든 것이 준비됩니다. "어떤 모드를 설치해야 하나요?" 같은 질문이 없고, 깨진 설정도 없습니다. 우리의 마인크래프트 서버 목록에 서버를 올리는 것도 좋지만, 플레이어들이 실제로 문제 없이 접속할 수 있도록 하는 것이 중요합니다.

또는 모드팩 배포 플랫폼을 구축 중이며 버전 관리와 모드 업데이트에 대한 완전한 제어가 필요할 수도 있습니다. 특정 지역이나 게임 모드를 위한 특화된 런처를 만들 수도 있습니다. 이런 경우들에서 CmlLib.Core는 과도한 것이 아니라 정말 유용해집니다.


시작하기: 설치 및 첫 단계

CmlLib.Core를 설치하려면 NuGet을 통해 .NET 프로젝트에 가져와야 합니다. NuGet 패키지를 전에 사용해본 경우라면 익숙한 과정입니다.

bash
dotnet add package CmlLib.Core

설치 후 런처 코드를 작성할 수 있습니다. README는 기본 예제를 보여줍니다: 사용 가능한 모든 버전을 가져온 후 게임을 실행합니다. 이것이 어떻게 생겼는지 보겠습니다.

csharp
using CmlLib.Core;

var launcher = new MinecraftLauncher();
var versions = await launcher.GetAllVersionsAsync();
foreach (var version in versions)
{
    Console.WriteLine($"{version.Type} {version.Name}");
}

이것만으로도 강력합니다. 마인크래프트의 버전 manifest를 쿼리하고 사용 가능한 모든 것을 다시 가져옵니다: 바닐라 릴리스, 스냅샷, 이전 빌드. 라이브러리는 마이크로소프트 서버 연결, manifest 파싱, 깔끔한 C# 객체로 표현하는 것을 처리합니다.

다음 단계는 실제로 게임을 실행하는 것입니다. 이것이 정말 중요한 부분입니다.

csharp
using CmlLib.Core;
using CmlLib.Core.ProcessBuilder;

var launcher = new MinecraftLauncher();
var process = await launcher.InstallAndBuildProcessAsync("1.21", new MLaunchOption());
process.Start();

이 한 줄의 호출은 버전 1.21의 게임 파일을 다운로드하고, 유효성을 검사하고, 실행할 준비가 된 Windows 프로세스를 빌드하는 것을 처리합니다. 라이브러리는 필요 시 Java 런타임도 관리합니다.


이해해야 할 핵심 기능들

인증. 현대의 마인크래프트는 마이크로소프트 계정 인증이 필요합니다 (Mojang 계정은 더 이상 사용 불가). CmlLib.Core는 전체 OAuth 플로우, 토큰 갱신, 세션 관리를 처리합니다. 마이크로소프트의 인증 시스템이 어떻게 작동하는지 자세히 이해할 필요가 없습니다. 사실, 복잡한 API 문서를 읽지 않는 한 직접 이해하려고 하지 않기를 권장합니다.

버전 관리. 바닐라 버전, 스냅샷, 모드된 버전, 이전 빌드 - 라이브러리가 모든 것을 쿼리하고 일관되게 표현합니다. 모든 버전을 요청하고 원하는 것으로 필터링할 수 있습니다. 또는 1.21 같은 특정 버전을 대상으로 하고 라이브러리가 올바른 버전을 찾도록 할 수 있습니다.

모드 지원. Forge, Fabric, LiteLoader - CmlLib.Core는 이런 모드로더를 이해합니다. 바닐라 버전을 실행하는 것과 같은 방식으로 모드된 버전을 실행하는 프로세스를 빌드할 수 있습니다. 라이브러리는 모드로더 설치 파일과 게임 파일을 별도로 다운로드한 후 올바르게 연결합니다.

크로스 플랫폼. Windows, Linux, macOS - 라이브러리가 플랫폼 차이를 추상화합니다. 한 번 작성하면 모든 곳에서 실행됩니다. 다양한 플레이어 기반에 런처를 배포하는 경우 매우 중요합니다.

진행률 추적. 2GB 중 50MB를 다운로드했나요? 라이브러리는 파일 다운로드 및 검증 시 이벤트를 발생시킵니다. 이는 런처가 절망의 회전 원 대신 실제 진행률 표시줄을 플레이어에게 보여줄 수 있다는 의미입니다. README는 파일 진행률 및 바이트 진행률 콜백으로 이를 보여주며, 정말 생각 깊은 API 설계입니다.


실제 구축 (더 어려운 부분)

게임을 다운로드하고 실행하는 기본 런처를 만드는 것은 쉬운 부분입니다. 진정한 복잡성은 커스텀 기능을 추가할 때 나타납니다: GUI, 커스텀 설정, 커뮤니티 모드와의 통합, 런처 자체의 자동 업데이트.

마인크래프트 숲 저택의 알레이들
마인크래프트 숲 저택의 알레이들

CmlLib.Core는 기초를 제공합니다. 공식 런처 같은 완전한 런처 프레임워크는 아닙니다. UI, UX, 브랜딩, 런처를 실제 제품처럼 느끼게 하는 모든 것이 여러분의 책임입니다. 하지만 어려운 작업 - Mojang 서버와의 통신, 게임 파일 관리, 인증 처리 - 이미 해결되어 있습니다.

이 프로젝트에는 GitHub의 샘플 런처 링크가 포함되어 있으며, 이는 도움이 됩니다. 문서만으로는 실제로 기능을 실행하는 코드를 보는 것이 훨씬 더 유용합니다.


사람들을 혼동시키는 것들

Java 런타임 복잡성. 마인크래프트는 Java가 필요하고, Java 버전 호환성은... 까다롭습니다. CmlLib.Core는 Java 설치를 도울 수 있지만, 어떤 Java 버전이 어떤 마인크래프트 버전과 호환되는지 이해하는 것은 여전히 여러분의 책임입니다. 라이브러리가 이를 추상화하지만, 자동으로 Java를 간단하게 만들지는 못합니다.

파일 경로와 디렉토리. 기본적으로 라이브러리는 OS의 표준 게임 디렉토리를 사용합니다. Windows는 AppData/Roaming/.minecraft를 사용하고, Linux는 ~/.minecraft를 사용하며, macOS는 ~/Library/Application Support/minecraft를 사용합니다. 이를 커스터마이즈할 수 있지만, 잘못하면 런처가 이상한 위치에 파일을 설치합니다. 게임이 실행되지 않으면 공식 문서를 확인하세요.

인증 토큰 만료. 마이크로소프트 토큰은 영구적이지 않습니다. 며칠 동안 열려 있는 런처를 구축하는 경우 토큰 갱신을 처리해야 합니다. 라이브러리가 이를 제공하지만 실제로 사용해야 합니다. 무시하면 사용자가 세션 중간에 무작위로 로그아웃됩니다. 재미없습니다.


다른 접근 방식과의 비교

Mojang 서버와 직접 통신하여 처음부터 런처를 작성할 수 있습니다. 하지 마세요. CmlLib.Core는 주 투자 후에만 발견할 API 변경, 엣지 케이스, 프로토콜 뉘앙스를 처리합니다. 인생은 그것을 위해 너무 짧습니다.

공식 런처를 시작점으로 사용하고 수정할 수도 있지만, 이는 불안정하고 법적으로도 모호합니다. CmlLib.Core 위에 구축하는 것이 더 깔끔하고 유지보수하기 쉽습니다.

Modrinth와 유사한 플랫폼에서 다른 런처 도구를 찾을 수 있으며, 종종 모드팩에 특화되어 있습니다. 커뮤니티 서버나 특정 모드팩을 위해 일회용 런처를 만드는 경우 더 빠를 수 있습니다. 하지만 완전한 제어와 향후 커스텀 기능을 추가할 수 있는 능력을 원한다면, CmlLib.Core가 그 기초를 제공합니다.


코딩을 시작하기 전에

CmlLib.Core는 적극적으로 유지관리되며 업데이트를 받고 있습니다. 최신 릴리스는 v4.0.4로, API 호스트 변경을 해결하고 Quilt 모드로더 테스트를 추가했습니다. 이 프로젝트는 좋은 위치에 있습니다: 프로덕션에 충분히 안정적이지만, 여전히 개선사항을 받고 있습니다.

공식 위키를 읽고 싶을 것입니다. 영문 및 한글 모두에서 이용 가능합니다. 이는 예제만으로 라이브러리 사용 방법을 추측하려는 것보다 훨씬 낫습니다. 코딩을 시작하기 전에 30분을 문서 읽기에 투자하세요. 정말입니다.

막히면 이 프로젝트에는 Discord 커뮤니티가 있습니다. 문제를 이미 해결한 실제 사람들이 보통 빠르게 나타납니다.

커스텀 런처 구축이 사소한 일은 아닙니다. 하지만 필요하다면, CmlLib.Core는 가장 큰 통증점을 제거합니다: 마인크래프트 클라이언트 자체 관리. 나머지는 단순한 소프트웨어 엔지니어링일 뿐이며, 이미 그것을 위해 등록했으니까요.

About the author
Alexandru Maftei
Alexandru MafteiLead Writer

Lead writer at minecraft.how. Long-time Minecraft player running a small SMP server, testing every build, mod, and seed before writing about it.

Share with your friends!