Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/AlphaBs/CmlLib.Core
Browse files Browse the repository at this point in the history
  • Loading branch information
AlphaBs committed May 22, 2020
2 parents 60c494d + 70d022e commit be601b3
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 116 deletions.
8 changes: 6 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
This library is minecraft launcher library for .NET Core and .NET Framework
Support all version, with Forge

[한국어 README](https://github.com/AlphaBs/CmlLib.Core/blob/master/docs/README-kr.md)
한국어 문서는 업데이트가 느립니다.

## What is different between CmlLib.Core and [CmlLib](https://github.com/AlphaBs/MinecraftLauncherLibrary)?
CmlLib.Core is developed using .NET Core and support crossplatform. but CmlLib doesn't support it and will be deprecated.

Expand All @@ -23,8 +26,9 @@ MIT License

## Dependency

Newtonsoft.Json
SharpZipLib
Newtonsoft.Json 12.0.3
SharpZipLib 1.2.0
LZMA-SDK 19.0.0

## Functions

Expand Down
181 changes: 67 additions & 114 deletions docs/README-kr.md
Original file line number Diff line number Diff line change
@@ -1,166 +1,119 @@
# Csharp 마인크래프트 런처 라이브러리
# CmlLib.Core

## CmlLib 1.0.0

모든 게임 버전 지원, 포지 지원
윈도우만 지원
## Minecraft Launcher Library

.NET Core와 .NET Framework 를 지원하는 마인크래프트 런처 라이브러리입니다.
포지를 포함한 모든 버전 실행 가능합니다

## CmlLib.Core와 [CmlLib](https://github.com/AlphaBs/MinecraftLauncherLibrary)의 차이점?
CmlLib.Core 는 .NET Core 에서도 동작하도록 만들어졌으며, 윈도우 뿐만 아니라 다른 운영체제에서도 작동합니다.
기존 라이브러리(MinecraftLauncherLibrary)는 더이상 개발하지 않습니다.

## Contacts

Email : [email protected]
Discord : ksi123456ab#3719
Discord : ksi123456ab#3719

## License

MIT LICENSE
LICENSE 파일 참고
MIT License

## Crossplatform

이 라이브러리는 윈도우만 지원합니다.
크로스플랫폼 라이브러리가 필요하다면 pml을 사용하세요.
[pml github](https://github.com/AlphaBs/pml)
.NET Core 버전은 크로스플랫폼을 지원합니다. Windows10, Ubuntu 18.04, macOS Catalina 에서 테스트하였습니다.

## Dependency
## 종속성

Newtonsoft.Json
DotNetZip
Newtonsoft.Json 12.0.3
SharpZipLib 1.2.0
LZMA-SDK 19.0.0

## Functions

- [x] 정품/복돌 로그인
- [x] 게임 서버에서 게임 파일 다운로드
- [x] 모든 버전 실행 (1.14.4 까지 태스트)
- [x] 모든 버전 실행 (1.15.2 까지 테스트)
- [x] 포지, 옵티파인 등 커스텀 버전 실행 가능
- [x] 자바 런타임 다운로드
- [x] 다양한 실행 옵션 (서버 주소, 창 크기, 런처 이름 등)
- [ ] .NET CORE 로 포팅 (크로스플랫폼) ([pml](https://github.com/AlphaBs/pml))

## How To Use

아래는 간략한 사용방법만 소개합니다. 자세한 정보는 wiki로
- [x] 크로스플랫폼 지원

**[Sample Code](https://github.com/AlphaBs/MinecraftLauncherLibrary/wiki/Sample-Code)**
## 사용법

### **1. 준비**
더 자세한 내용은 위키에 있습니다. [wiki](https://github.com/AlphaBs/CmlLib.Core/wiki)

Nuget 패키지 관리자에서 'CustomMinecraftLauncher' 를 검색하고 설치하세요.
혹은 release 에서 dll 파일들(CmlLib.dll, Newtonsoft.Json.dll, DotNetZip.dll)을 다운받고 참조 추가를 해주세요.
**[샘플 코드](https://github.com/AlphaBs/CmlLib.Core/wiki/Sample-Code)**

소스 최상단에 아래 코드를 입력하세요 :
### **설치**

Nuget Package `CmlLib.Core` 를 설치하세요.
혹은 dll 파일을 직접 다운로드한 후 참조 추가하세요 : [Releases](https://github.com/AlphaBs/CmlLib.Core/releases)

using CmlLib.Launcher;
소스코드 최상단에 아래 코드를 입력하세요:

### **2. 게임 폴더**
using CmlLib;
using CmlLib.Core;

라이브러리 기능을 사용하기 전에 게임 폴더 설정을 반드시 해주세요.
### **예시 코드**

Minecraft.Initialize("게임폴더 경로");
**로그인**

위 코드가 게임 파일 다운로드, 프로필 로드, 게임 세션 저장, 실행 등에 필요한 게임 폴더를 설정합니다.
**절대 경로를 입력해 주세요.**
var login = new MLogin();
var session = login.TryAutoLogin(); // 'session' 변수는 실행할 때 LaunchOption 에서 사용됩니다.

### **3. 로그인**

MLogin login = new MLogin();
MSession session = null;

session = login.TryAutoLogin();
if (session.Result != MLoginResult.Success)
if (session.Result != MLoginResult.Success) // 자동 로그인 실패시
{
session = login.Authenticate(
"모장이메일",
"비밀번호");
var email = Console.ReadLine();
var pw = Console.ReadLine();
session = login.Authenticate(email, pw);

if (session.result != MLoginResult.Success)
throw new Exception("로그인 실패 : " + session.result.ToString());
if (session.Result != MLoginResult.Success)
throw new Exception(session.Result.ToString()) // 로그인 실패
}

Console.WriteLine("Hello, " + session.Username);

session 변수에 로그인 결과가 저장됩니다.
참고 : 모장 이메일 대신 닉네임을 입력하는 옛날 로그인 방식은 사용할 수 없습니다.

혹은 복돌 로그인도 사용할 수 있습니다 :
**복돌 로그인**

MSession session = MSession.GetOfflineSession("닉네임");
var session = MSession.GetOfflineSession("USERNAME"); // 'session' 변수는 실행할 때 LaunchOption 에서 사용됩니다.

### **4. 프로필 불러오기**
**실행**

프로필은 런처에서 사용하는 다양한 정보가 포함되어 있습니다. 모든 버전은 프로필을 가지고 있으며, (GameDirectory)₩versions₩(any-version)₩(version-name).json 파일 혹은 모장 서버에 저장되어 있습니다.
//var path = new Minecraft("게임 폴더 경로");
var path = Minecraft.GetOSDefaultPath(); // 기본 게임 폴더

MProfileInfo 은 프로필의 메타데이터를 나타내는 클래스입니다.

MProfileInfo[] infos = MProfileInfo.GetProfiles();
foreach (var item in infos)
var launcher = new CmlLib.CMLauncher(path);
launcher.ProgressChanged += (s, e) =>
{
Console.WriteLine(item.Type + " : " + item.Name);
}

위 코드는 모장 서버에 저장된 프로필과 게임 폴더에 저장된 모든 프로필을 표시합니다.

### **5. 프로필 선택, 파싱**

프로필을 사용하기 위해서는 프로필을 파싱해야 합니다. 아래 코드는 프로필을 찾고 파싱해서 반환해줍니다.

MProfile profile = MProfile.FindProfile(infos, "1.14.4");

### **6. 게임 파일 확인/다운로드**

MDownloader downloader = new MDownloader(profile);
downloader.ChangeFile += change_file;
downloader.ChangeProgress += change_progress;
downloader.DownloadAll();

다운로드 이벤트 헨들러 :

private void Downloader_ChangeProgress(object sender, System.ComponentModel.ProgressChangedEventArgs e)
Console.WriteLine("{0}%", e.ProgressPercentage);
};
launcher.FileChanged += (e) =>
{
// 다운로드하는 파일의 진행률
// 20%, 30%, 80%, ...
Console.WriteLine("{0}%", e.ProgressPercentage);
}

private void Downloader_ChangeFile(DownloadFileChangedEventArgs e)
Console.WriteLine("[{0}] {1} - {2}/{3}", e.FileKind.ToString(), e.FileName, e.ProgressedFileCount, e.TotalFileCount);
};

foreach (var item in launcher.ProfileInfos)
{
// 다운로드하는 파일이 바뀌었을때
// [Library] hi.jar - 3/51
Console.WriteLine("[{0}] {1} - {2}/{3}", e.FileKind.ToString(), e.FileName, e.ProgressedFileCount, e.TotalFileCount);
Console.WriteLine(item.Name);
}

DownloadAll() 메서드는 게임 파일의 존재 여부, 무결성을 검사하고 올바르지 않은 파일이라면 게임 파일을 모장 서버에서 다운로드하는 역할을 합니다.

### **7. 게임 인수 생성 후 실행**

var option = new MLaunchOption()
var launchOption = new MLaunchOption
{
// 필수 인수
StartProfile = profile,
JavaPath = "java.exe", //자바 경로 설정
MaximumRamMb = 1024, // MB
Session = session,
// 필수 아님
ServerIP = "", // 서버로 바로 접속
LauncherName = "", // 게임 메인화면에 런처 이름 표시
CustomJavaParameter = "" // JVM 인수 설정
};
var launch = new MLaunch(option);
var process = launch.GetProcess();
process.Start();

게임 옵션을 설정하고 실행하면 됩니다.

### **8. More Information**
MaximumRamMb = 1024,
Session = session, // 로그인 세션. ex) Session = MSession.GetOfflineSession("hello")

**[Sample Code](https://github.com/AlphaBs/MinecraftLauncherLibrary/wiki/Sample-Code)**

포지 실행 : 위 코드대로 만들면 실행 됩니다.
//LauncherName = "MyLauncher",
//ScreenWidth = 1600,
//ScreenHeigth = 900,
//ServerIp = "mc.hypixel.net"
};

버그 : issue 에서 알려주세요.
// 포지 실행
//var process = launcher.Launch("1.12.2", "14.23.5.2768", launchOption);

// 바닐라 실행
var process = launcher.Launch("1.15.2", launchOption);

process.Start();


### More Information
Go to [wiki](https://github.com/AlphaBs/CmlLib.Core/wiki/MLaunchOption)

0 comments on commit be601b3

Please sign in to comment.