|
1 |
| -# Csharp 마인크래프트 런처 라이브러리 |
| 1 | +# CmlLib.Core |
2 | 2 |
|
3 |
| -## CmlLib 1.0.0 |
4 |
| - |
5 |
| - 모든 게임 버전 지원, 포지 지원 |
6 |
| - 윈도우만 지원 |
| 3 | +## Minecraft Launcher Library |
| 4 | + |
| 5 | +.NET Core와 .NET Framework 를 지원하는 마인크래프트 런처 라이브러리입니다. |
| 6 | +포지를 포함한 모든 버전 실행 가능합니다 |
| 7 | + |
| 8 | +## CmlLib.Core와 [CmlLib](https://github.com/AlphaBs/MinecraftLauncherLibrary)의 차이점? |
| 9 | +CmlLib.Core 는 .NET Core 에서도 동작하도록 만들어졌으며, 윈도우 뿐만 아니라 다른 운영체제에서도 작동합니다. |
| 10 | +기존 라이브러리(MinecraftLauncherLibrary)는 더이상 개발하지 않습니다. |
7 | 11 |
|
8 | 12 | ## Contacts
|
9 | 13 |
|
10 | 14 | Email : ksi123456ab@naver.com
|
11 |
| -Discord : ksi123456ab#3719 |
| 15 | +Discord : ksi123456ab#3719 |
12 | 16 |
|
13 | 17 | ## License
|
14 | 18 |
|
15 |
| -MIT LICENSE |
16 |
| -LICENSE 파일 참고 |
| 19 | +MIT License |
17 | 20 |
|
18 | 21 | ## Crossplatform
|
19 | 22 |
|
20 |
| -이 라이브러리는 윈도우만 지원합니다. |
21 |
| -크로스플랫폼 라이브러리가 필요하다면 pml을 사용하세요. |
22 |
| -[pml github](https://github.com/AlphaBs/pml) |
| 23 | +.NET Core 버전은 크로스플랫폼을 지원합니다. Windows10, Ubuntu 18.04, macOS Catalina 에서 테스트하였습니다. |
23 | 24 |
|
24 |
| -## Dependency |
| 25 | +## 종속성 |
25 | 26 |
|
26 |
| -Newtonsoft.Json |
27 |
| -DotNetZip |
| 27 | +Newtonsoft.Json 12.0.3 |
| 28 | +SharpZipLib 1.2.0 |
| 29 | +LZMA-SDK 19.0.0 |
28 | 30 |
|
29 | 31 | ## Functions
|
30 | 32 |
|
31 | 33 | - [x] 정품/복돌 로그인
|
32 | 34 | - [x] 게임 서버에서 게임 파일 다운로드
|
33 |
| -- [x] 모든 버전 실행 (1.14.4 까지 태스트) |
| 35 | +- [x] 모든 버전 실행 (1.15.2 까지 테스트) |
34 | 36 | - [x] 포지, 옵티파인 등 커스텀 버전 실행 가능
|
35 | 37 | - [x] 자바 런타임 다운로드
|
36 | 38 | - [x] 다양한 실행 옵션 (서버 주소, 창 크기, 런처 이름 등)
|
37 |
| -- [ ] .NET CORE 로 포팅 (크로스플랫폼) ([pml](https://github.com/AlphaBs/pml)) |
38 |
| - |
39 |
| -## How To Use |
40 |
| - |
41 |
| -아래는 간략한 사용방법만 소개합니다. 자세한 정보는 wiki로 |
| 39 | +- [x] 크로스플랫폼 지원 |
42 | 40 |
|
43 |
| -**[Sample Code](https://github.com/AlphaBs/MinecraftLauncherLibrary/wiki/Sample-Code)** |
| 41 | +## 사용법 |
44 | 42 |
|
45 |
| -### **1. 준비** |
| 43 | +더 자세한 내용은 위키에 있습니다. [wiki](https://github.com/AlphaBs/CmlLib.Core/wiki) |
46 | 44 |
|
47 |
| -Nuget 패키지 관리자에서 'CustomMinecraftLauncher' 를 검색하고 설치하세요. |
48 |
| -혹은 release 에서 dll 파일들(CmlLib.dll, Newtonsoft.Json.dll, DotNetZip.dll)을 다운받고 참조 추가를 해주세요. |
| 45 | +**[샘플 코드](https://github.com/AlphaBs/CmlLib.Core/wiki/Sample-Code)** |
49 | 46 |
|
50 |
| -소스 최상단에 아래 코드를 입력하세요 : |
| 47 | +### **설치** |
51 | 48 |
|
| 49 | +Nuget Package `CmlLib.Core` 를 설치하세요. |
| 50 | +혹은 dll 파일을 직접 다운로드한 후 참조 추가하세요 : [Releases](https://github.com/AlphaBs/CmlLib.Core/releases) |
52 | 51 |
|
53 |
| - using CmlLib.Launcher; |
| 52 | +소스코드 최상단에 아래 코드를 입력하세요: |
54 | 53 |
|
55 |
| -### **2. 게임 폴더** |
| 54 | + using CmlLib; |
| 55 | + using CmlLib.Core; |
56 | 56 |
|
57 |
| -라이브러리 기능을 사용하기 전에 게임 폴더 설정을 반드시 해주세요. |
| 57 | +### **예시 코드** |
58 | 58 |
|
59 |
| - Minecraft.Initialize("게임폴더 경로"); |
| 59 | +**로그인** |
60 | 60 |
|
61 |
| -위 코드가 게임 파일 다운로드, 프로필 로드, 게임 세션 저장, 실행 등에 필요한 게임 폴더를 설정합니다. |
62 |
| -**절대 경로를 입력해 주세요.** |
| 61 | + var login = new MLogin(); |
| 62 | + var session = login.TryAutoLogin(); // 'session' 변수는 실행할 때 LaunchOption 에서 사용됩니다. |
63 | 63 |
|
64 |
| -### **3. 로그인** |
65 |
| - |
66 |
| - MLogin login = new MLogin(); |
67 |
| - MSession session = null; |
68 |
| - |
69 |
| - session = login.TryAutoLogin(); |
70 |
| - if (session.Result != MLoginResult.Success) |
| 64 | + if (session.Result != MLoginResult.Success) // 자동 로그인 실패시 |
71 | 65 | {
|
72 |
| - session = login.Authenticate( |
73 |
| - "모장이메일", |
74 |
| - "비밀번호"); |
| 66 | + var email = Console.ReadLine(); |
| 67 | + var pw = Console.ReadLine(); |
| 68 | + session = login.Authenticate(email, pw); |
75 | 69 |
|
76 |
| - if (session.result != MLoginResult.Success) |
77 |
| - throw new Exception("로그인 실패 : " + session.result.ToString()); |
| 70 | + if (session.Result != MLoginResult.Success) |
| 71 | + throw new Exception(session.Result.ToString()) // 로그인 실패 |
78 | 72 | }
|
79 | 73 |
|
80 |
| - Console.WriteLine("Hello, " + session.Username); |
81 |
| - |
82 |
| -session 변수에 로그인 결과가 저장됩니다. |
83 |
| -참고 : 모장 이메일 대신 닉네임을 입력하는 옛날 로그인 방식은 사용할 수 없습니다. |
84 |
| - |
85 |
| -혹은 복돌 로그인도 사용할 수 있습니다 : |
| 74 | +**복돌 로그인** |
86 | 75 |
|
87 |
| - MSession session = MSession.GetOfflineSession("닉네임"); |
| 76 | + var session = MSession.GetOfflineSession("USERNAME"); // 'session' 변수는 실행할 때 LaunchOption 에서 사용됩니다. |
88 | 77 |
|
89 |
| -### **4. 프로필 불러오기** |
| 78 | +**실행** |
90 | 79 |
|
91 |
| -프로필은 런처에서 사용하는 다양한 정보가 포함되어 있습니다. 모든 버전은 프로필을 가지고 있으며, (GameDirectory)₩versions₩(any-version)₩(version-name).json 파일 혹은 모장 서버에 저장되어 있습니다. |
| 80 | + //var path = new Minecraft("게임 폴더 경로"); |
| 81 | + var path = Minecraft.GetOSDefaultPath(); // 기본 게임 폴더 |
92 | 82 |
|
93 |
| -MProfileInfo 은 프로필의 메타데이터를 나타내는 클래스입니다. |
94 |
| - |
95 |
| - MProfileInfo[] infos = MProfileInfo.GetProfiles(); |
96 |
| - foreach (var item in infos) |
| 83 | + var launcher = new CmlLib.CMLauncher(path); |
| 84 | + launcher.ProgressChanged += (s, e) => |
97 | 85 | {
|
98 |
| - Console.WriteLine(item.Type + " : " + item.Name); |
99 |
| - } |
100 |
| - |
101 |
| -위 코드는 모장 서버에 저장된 프로필과 게임 폴더에 저장된 모든 프로필을 표시합니다. |
102 |
| - |
103 |
| -### **5. 프로필 선택, 파싱** |
104 |
| - |
105 |
| -프로필을 사용하기 위해서는 프로필을 파싱해야 합니다. 아래 코드는 프로필을 찾고 파싱해서 반환해줍니다. |
106 |
| - |
107 |
| - MProfile profile = MProfile.FindProfile(infos, "1.14.4"); |
108 |
| - |
109 |
| -### **6. 게임 파일 확인/다운로드** |
110 |
| - |
111 |
| - MDownloader downloader = new MDownloader(profile); |
112 |
| - downloader.ChangeFile += change_file; |
113 |
| - downloader.ChangeProgress += change_progress; |
114 |
| - downloader.DownloadAll(); |
115 |
| - |
116 |
| -다운로드 이벤트 헨들러 : |
117 |
| - |
118 |
| - private void Downloader_ChangeProgress(object sender, System.ComponentModel.ProgressChangedEventArgs e) |
| 86 | + Console.WriteLine("{0}%", e.ProgressPercentage); |
| 87 | + }; |
| 88 | + launcher.FileChanged += (e) => |
119 | 89 | {
|
120 |
| - // 다운로드하는 파일의 진행률 |
121 |
| - // 20%, 30%, 80%, ... |
122 |
| - Console.WriteLine("{0}%", e.ProgressPercentage); |
123 |
| - } |
124 |
| - |
125 |
| - private void Downloader_ChangeFile(DownloadFileChangedEventArgs e) |
| 90 | + Console.WriteLine("[{0}] {1} - {2}/{3}", e.FileKind.ToString(), e.FileName, e.ProgressedFileCount, e.TotalFileCount); |
| 91 | + }; |
| 92 | + |
| 93 | + foreach (var item in launcher.ProfileInfos) |
126 | 94 | {
|
127 |
| - // 다운로드하는 파일이 바뀌었을때 |
128 |
| - // [Library] hi.jar - 3/51 |
129 |
| - Console.WriteLine("[{0}] {1} - {2}/{3}", e.FileKind.ToString(), e.FileName, e.ProgressedFileCount, e.TotalFileCount); |
| 95 | + Console.WriteLine(item.Name); |
130 | 96 | }
|
131 | 97 |
|
132 |
| -DownloadAll() 메서드는 게임 파일의 존재 여부, 무결성을 검사하고 올바르지 않은 파일이라면 게임 파일을 모장 서버에서 다운로드하는 역할을 합니다. |
133 |
| - |
134 |
| -### **7. 게임 인수 생성 후 실행** |
135 |
| - |
136 |
| - var option = new MLaunchOption() |
| 98 | + var launchOption = new MLaunchOption |
137 | 99 | {
|
138 |
| - // 필수 인수 |
139 |
| - StartProfile = profile, |
140 |
| - JavaPath = "java.exe", //자바 경로 설정 |
141 |
| - MaximumRamMb = 1024, // MB |
142 |
| - Session = session, |
143 |
| - |
144 |
| - // 필수 아님 |
145 |
| - ServerIP = "", // 서버로 바로 접속 |
146 |
| - LauncherName = "", // 게임 메인화면에 런처 이름 표시 |
147 |
| - CustomJavaParameter = "" // JVM 인수 설정 |
148 |
| - }; |
149 |
| - |
150 |
| - var launch = new MLaunch(option); |
151 |
| - var process = launch.GetProcess(); |
152 |
| - process.Start(); |
153 |
| - |
154 |
| -게임 옵션을 설정하고 실행하면 됩니다. |
155 |
| - |
156 |
| -### **8. More Information** |
| 100 | + MaximumRamMb = 1024, |
| 101 | + Session = session, // 로그인 세션. ex) Session = MSession.GetOfflineSession("hello") |
157 | 102 |
|
158 |
| -**[Sample Code](https://github.com/AlphaBs/MinecraftLauncherLibrary/wiki/Sample-Code)** |
159 |
| - |
160 |
| -포지 실행 : 위 코드대로 만들면 실행 됩니다. |
| 103 | + //LauncherName = "MyLauncher", |
| 104 | + //ScreenWidth = 1600, |
| 105 | + //ScreenHeigth = 900, |
| 106 | + //ServerIp = "mc.hypixel.net" |
| 107 | + }; |
161 | 108 |
|
162 |
| -버그 : issue 에서 알려주세요. |
| 109 | + // 포지 실행 |
| 110 | + //var process = launcher.Launch("1.12.2", "14.23.5.2768", launchOption); |
163 | 111 |
|
| 112 | + // 바닐라 실행 |
| 113 | + var process = launcher.Launch("1.15.2", launchOption); |
164 | 114 |
|
| 115 | + process.Start(); |
165 | 116 |
|
166 | 117 |
|
| 118 | +### More Information |
| 119 | +Go to [wiki](https://github.com/AlphaBs/CmlLib.Core/wiki/MLaunchOption) |
0 commit comments