-
Notifications
You must be signed in to change notification settings - Fork 41
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' of https://github.com/AlphaBs/CmlLib.Core
- Loading branch information
Showing
2 changed files
with
73 additions
and
116 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |