教學/編寫啟動器 - Minecraft Wiki
文章推薦指數: 80 %
游戏依赖库文件以及游戏资源文件由启动器补全。
玩家登录认证由启动器完成。
这使得我们能通过编写第三方启动器来接管游戏文件管理和登录认证。
要编写一个启动器, ...
MinecraftWiki除另有声明,转载时均必须注明出处若簡繁轉換出錯,請以遊戲內為準请勇于扩充与修正内容有兴趣逛逛我们的微博吗沟通交流,欢迎到社区专页需要协助,请在告示板留言
了解更多
MinecraftWiki
導覽
首頁
所有頁面
人氣頁面
指令
附魔
藥水釀造
交易
紅石電路
教學
資源包
入門教學
新手手冊
方塊一覽
物品一覽
合成簡介
熔煉簡介
生物簡介
參與編輯
說明資訊
計畫
沙盒
溝通社群
社區專頁
管理員告示板
wiki微博
敬請參閲
wiki條例
wiki手冊
標準譯名清單
管理制度
FANDOM
遊戲
電影
電視
wiki
探索wiki
社群中心
建立wiki
註冊
尚未註冊?
登入
Advertisement
分類:
正在進行中的工作、Java版獨有特性、教學、中文獨有教學
台灣正體
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
教學/編寫啟動器
=
-Dos.name=Windows10-Dos.version=10.0目前系統名稱及版本。
-Dminecraft.launcher.brand=minecraft-launcher-Dminecraft.launcher.version=2.1.3674目前啟動器名稱及版本。
-Dlog4j.configurationFile=\client-1.12.xml遊戲日誌配置檔案。
-Djava.library.path=
-cp參數[]
全稱為-classpath,後為所有目前版本Minecraft的普通庫檔案路徑及遊戲主檔案,中間在Windows下用;隔開,其它系統下用:隔開。
Minecraft參數[]
以主類名開頭,通常為net.minecraft.client.main.Main,若安裝Mod載入器則一般為net.minecraft.launchwrapper.Launch
參數通常有:
--username後接使用者名稱。
--version後接遊戲版本。
--gameDir後接遊戲路徑。
--assetsDir後接資源檔案路徑。
--assetIndex後接資源索引版本。
--uuid後接使用者UUID。
--accessToken後接登入令牌。
--userType後接使用者類型。
--versionType後接版本類型,會顯示在遊戲主介面右下角。
--width後接窗口寬度。
--height後接窗口高度。
--server後接伺服器地址,遊戲進入時將直接連入伺服器
--port後接伺服器的埠號
等等,可能因版本而異,具體應參考目前版本json檔案內提供的資訊。
取得參數[]
執行此指令可取得目前執行的Minecraft進程的參數:
wmicprocesswherecaption="javaw.exe"getcommandline/value>args.txt
wmicprocesswherecaption="java.exe"getcommandline/value>args_java.txt
此時args.txt或args_java.txt中大致有這樣的檔案內容:
CommandLine="
執行前注意檔案編碼。
並注意官方啟動器的解壓出的natives庫檔案儲存在臨時資料夾下,可能因刪除導致無法啟動。
遊戲檔案[]
列表
.minecraft
assets
indexes
version.json
log_configs
client-version.xml
objects
skins
virtual
bin
jinput.jar
lwjgl.jar
lwjgl_util.jar
minecraft.jar(這是1.5.2之前的client.jar。
目前不再使用,而是使用「versions」資料夾。
)
natives
(.dll檔案)
debug
debug-report-年-月-日_時.分.秒.zip
profile-report-年-月-日_時.分.秒.txt
libraries
[按Maven公約包裝的各種庫(沒有POM檔案)]
logs
年-月-日-會話編號.log.gz
latest.log
resourcepacks
saves
世界名稱
advancements
uuid.json
data
idcounts.dat
map_id.dat
scoreboard.dat
raids.dat
datapacks
DIM1
data
raids_end.dat
poi
r.x.z.mca
region
r.x.z.mca
DIM-1
data
raids_nether.dat
poi
r.x.z.mca
region
r.x.z.mca
generated
(命名空間)
structures
name.nbt
playerdata
uuid.dat
poi
r.x.z.mca
region
r.x.z.mca
stats
uuid.json
icon.png
level.dat
level.dat_mcr
level.dat_old
resources.zip
session.lock
screenshots
年-月-日_時.分.秒.png
stats
stats_player_unsent.dat
stats_player_unsent.old
texturepacks
texturepacks-mp-cache
versions
版本
version.jar
version.json
debug.stitched_items.png
debug.stitched_terrain.png
hotbar.nbt
lastlogin
launcher_log.txt
launcherprofiles.json
launcher_skins.json
options.txt
output-client.log
output-server.log
realms_persistence.json
servers.dat
textures_0.png
textures_1.png
textures_2.png
textures_3.png
textures_4.png
usercache.json
JSON檔案[]
Minecraft大多數資訊使用JSON文件儲存管理,使用這些JSON檔案可以取得下載、管理及啟動所需的大部分資訊。
版本清單檔案[]
主條目:/version_manifest.json
該檔案可以在mojang官方伺服器下載:
https://launchermeta.mojang.com/mc/game/version_manifest.json
內容通常如下:
{
"latest":{
"release":"1.14.1",
"snapshot":"1.14.2Pre-Release4"
},
"versions":[
{
"id":"1.14.2Pre-Release4",
"type":"snapshot",
"url":"https://launchermeta.mojang.com/v1/packages/f90f601344058a812144eb71a49552b30a70d589/1.14.2_Pre-Release_4.json",
"time":"2019-05-24T15:50:42+00:00",
"releaseTime":"2019-05-24T15:48:24+00:00"
},
{
"id":"1.14.2Pre-Release3",
"type":"snapshot",
"url":"https://launchermeta.mojang.com/v1/packages/48004350162b58ab677efb7db5cc417af13124ef/1.14.2_Pre-Release_3.json",
"time":"2019-05-24T15:40:12+00:00",
"releaseTime":"2019-05-22T13:12:51+00:00"
},
...
]
}
其中,latest中為目前最新版本,分為發布版和快照版。
versions後為所有可下載的遊戲版本,url後為該版本的json檔案下載地址。
版本json檔案[]
主條目:/version.json
該檔案一般下載後儲存在.minecraft/versions資料夾下,有如下內容:
內容通常如下:
{
"arguments":{
"game":[
"--username",
"${auth_player_name}",
"--version",
"${version_name}",
...,
{
"rules":[
{
"action":"allow",
"features":{
"is_demo_user":true
}
}
],
"value":"--demo"
},
...
],
"jvm":[
{
"rules":[
{
"action":"allow",
"os":{
"name":"osx"
}
}
],
"value":[
"-XstartOnFirstThread"
]
},
...
]
},
"assetIndex":{
"id":"1.14",
"sha1":"702d433ca9a27a2b75dc4e95ac57921a34d82bd3",
"size":226168,
"totalSize":207233561,
"url":"https://launchermeta.mojang.com/v1/packages/702d433ca9a27a2b75dc4e95ac57921a34d82bd3/1.14.json"
},
"assets":"1.14",
"downloads":{
"client":{
"sha1":"f14e1ab15fb7455c81c487b2d82b29773e7cf4f6",
"size":18794301,
"url":"https://launcher.mojang.com/v1/objects/f14e1ab15fb7455c81c487b2d82b29773e7cf4f6/client.jar"
},
"server":{
"sha1":"631e46624daaf9e8357fcb985e0fce489b020e74",
"size":35932929,
"url":"https://launcher.mojang.com/v1/objects/631e46624daaf9e8357fcb985e0fce489b020e74/server.jar"
}
},
"id":"1.14.2Pre-Release4",
"libraries":[
{
"downloads":{
"artifact":{
"path":"com/mojang/patchy/1.1/patchy-1.1.jar",
"sha1":"aef610b34a1be37fa851825f12372b78424d8903",
"size":15817,
"url":"https://libraries.minecraft.net/com/mojang/patchy/1.1/patchy-1.1.jar"
}
},
"name":"com.mojang:patchy:1.1"
},
...,
{
"downloads":{
"artifact":{
"path":"org/lwjgl/lwjgl/3.2.1/lwjgl-3.2.1.jar",
"sha1":"2bb514e444994c6fece99a21f76e0c90438e377f",
"size":317748,
"url":"https://libraries.minecraft.net/org/lwjgl/lwjgl/3.2.1/lwjgl-3.2.1.jar"
},
"classifiers":{
"javadoc":{
"path":"org/lwjgl/lwjgl/3.2.1/lwjgl-3.2.1-javadoc.jar",
"sha1":"1f6b7050737559b775d797c0ea56612b8e373fd6",
"size":1287174,
"url":"https://libraries.minecraft.net/org/lwjgl/lwjgl/3.2.1/lwjgl-3.2.1-javadoc.jar"
},
"natives-linux":{
"path":"org/lwjgl/lwjgl/3.2.1/lwjgl-3.2.1-natives-linux.jar",
"sha1":"9bdd47cd63ce102cec837a396c8ded597cb75a66",
"size":87484,
"url":"https://libraries.minecraft.net/org/lwjgl/lwjgl/3.2.1/lwjgl-3.2.1-natives-linux.jar"
},
"natives-macos":{
"path":"org/lwjgl/lwjgl/3.2.1/lwjgl-3.2.1-natives-macos.jar",
"sha1":"5a4c271d150906858d475603dcb9479453c60555",
"size":39835,
"url":"https://libraries.minecraft.net/org/lwjgl/lwjgl/3.2.1/lwjgl-3.2.1-natives-macos.jar"
},
"natives-windows":{
"path":"org/lwjgl/lwjgl/3.2.1/lwjgl-3.2.1-natives-windows.jar",
"sha1":"e799d06b8969db0610e68776e0eff4b6191098bd",
"size":255871,
"url":"https://libraries.minecraft.net/org/lwjgl/lwjgl/3.2.1/lwjgl-3.2.1-natives-windows.jar"
},
"sources":{
"path":"org/lwjgl/lwjgl/3.2.1/lwjgl-3.2.1-sources.jar",
"sha1":"106f90ac41449004a969309488aa6e3a2f7d6731",
"size":255671,
"url":"https://libraries.minecraft.net/org/lwjgl/lwjgl/3.2.1/lwjgl-3.2.1-sources.jar"
}
}
}
},
...
],
"logging":{
"client":{
"argument":"-Dlog4j.configurationFile=${path}",
"file":{
"id":"client-1.12.xml",
"sha1":"ef4f57b922df243d0cef096efe808c72db042149",
"size":877,
"url":"https://launcher.mojang.com/v1/objects/ef4f57b922df243d0cef096efe808c72db042149/client-1.12.xml"
},
"type":"log4j2-xml"
}
},
"mainClass":"net.minecraft.client.main.Main",
"minimumLauncherVersion":21,
"releaseTime":"2019-05-24T15:48:24+00:00",
"time":"2019-05-24T15:48:24+00:00",
"type":"snapshot"
}
rules
用於可選條目,使用features判斷並應用其action。
arguments
1.13後新增鍵,舊版本為gameArguments,且不提供JVM參數及rules規則。
${****}
字串模板,替換相應內容來使用。
assetIndex
目前版本的資源檔案索引,包含其下載地址等資訊。
downloads
遊戲主檔案,分為用戶端及伺服器端,包含其下載地址等資訊。
libraries
遊戲所有依賴庫,包含其下載地址等資訊。
downloads下均含有artifact鍵,有些含有classifiers鍵。
只含有artifact鍵的為-cp參數後所需拼接的路徑,注意path鍵中為不完整路徑,請補全為完整路徑。
含有classifiers鍵的為natives庫,在遊戲啟動前將對應平台的含有jar檔案解壓至natives資料夾。
logging
log4j配置檔案,包含其下載地址等資訊。
mainClass
主類名。
資源索引檔案[]
一般儲存於.minecraft/assets/indexes路徑下,用於指示objects檔案的資訊及其下載地址。
該檔案的下載地址等資訊儲存在版本json檔案中,該檔案可能需要不定期更新。
內容如下:
{
"objects":{
"icons/icon_16x16.png":{
"hash":"bdf48ef6b5d0d23bbb02e17d04865216179f510a",
"size":3665
},
...
}
}
objects檔案的下載地址為:
http://resources.download.minecraft.net/
啟動器配置檔案[]
主條目:launcher_profiles.json
該檔案不是必須的,但它是官方啟動器的配置檔案。
所以可用於與官方啟動器資料互通,以及Forge安裝檢驗。
最簡單的配置檔案為:
{
"profiles":{
"(Default)":{
"gameDir":"",
"lastVersionId":"1.14.1",
"name":"(Default)"
}
},
"selectedProfileName":"(Default)",
}
profiles為啟動器中建立的所有配置檔案。
遊戲主檔案[]
通常儲存於.minecraft/versions/
依賴庫檔案[]
通常儲存於.minecraft/libraries/路徑下,下載地址等資訊儲存在版本json檔案中。
普通庫檔案[]
在啟動前需拼接在啟動參數的-cp參數後。
natives庫檔案[]
在啟動前需解壓至natives路徑下。
資源檔案[]
通常儲存在.minecraft/assets/objects/,並在.minecraft/assets/virtual/legacy/有一份拷貝。
下載地址等資訊儲存在資源索引檔案中。
這些檔案可能在發布後更新,留意更新資源索引檔案來更新他們。
正版驗證[]
Minecraft自1.6後使用了Yggdrasil驗證方法,驗證伺服器為:
https://authserver.mojang.com
驗證時需要:
為POST請求
Content-Type設定為application/json
負載以JSON編碼
若請求成功則返回狀態碼200及一個JSON文件。
若失敗則返回錯誤資訊:
{
"error":"错误简要描述",
"errorMessage":"向用户显示的长描述",
"cause":"错误原因"//可选的
}
具體錯誤資訊可參考https://wiki.vg/ZH:Authentication#錯誤。
驗證帳號密碼[]
後綴:
/authenticate
負載:
{
"agent":{
"name":"Minecraft",//默认为Minecraft,可选
"version":1//未来可能会改(不会)
},
"username":"mojang用户名",//可以是邮箱地址或旧版mojang用户名
"password":"密码",
"clientToken":"客户端标识符"//可选的,用于复用该值
}
響應:
{
"accessToken":"随机令牌",
"clientToken":"客户端标识符",
"availableProfiles":[
{
"id":"profileidentifier",
"name":"玩家名"
}
],
"selectedProfile":{
"id":"不含-的uuid",
"name":"玩家名"
}
}
(有刪節,參考https://wiki.vg/ZH:Authentication#Authentication)
你可以儲存這個clientToken,用來標識這個用戶端。
此處取得的uuid和accessToken即為啟動參數中所需的,傳入你剛剛獲得的值,啟動遊戲後便能發現已顯示正版外觀,即完成了正版登入。
檢驗令牌有效性[]
accessToken具有有效期,可能因為一些原因失效。
你可以發送請求,驗證目前accessToken是否還是有效的.
後綴:
/validate
負載:
{
"accessToken":"validaccessToken",
"clientToken":"associatedclientToken"//可选的
}
響應:
如果狀態碼為204NoContent則有效,而403Forbidden為已失效。
刷新令牌[]
刷新一個accessToken,用於保持使用者在遊戲會話之間登入。
後綴:
/refresh
負載:
{
"accessToken":"validaccessToken",
"clientToken":"associatedclientToken"//可选的
}
響應:
{
"accessToken":"随机令牌",
"clientToken":"客户端标识符",
"availableProfiles":[
{
"id":"profileidentifier",
"name":"玩家名"
}
],
"selectedProfile":{
"id":"不含-的uuid",
"name":"玩家名"
}
}
(有刪節,參考https://wiki.vg/ZH:Authentication#Refresh)
與「驗證帳號密碼」中相同。
啟動遊戲[]
首先必須保證啟動參數中出現的所有檔案及提供的資源索引檔案中的object檔案都存在且未被損壞。
選定一個natives路徑,可以自由選定,也可像官方啟動器一樣使用臨時路徑。
將natives庫檔案解壓至該路徑,並將該路徑使用-Djava.library.path=傳入遊戲。
完成正版驗證,得到UUID及accessToken。
拼接啟動參數,建立遊戲進程。
處理遊戲輸出及遊戲錯誤。
支持forge等Mod載入器[]
執行forge等Mod載入器的安裝包後,可以發現:
啟動器配置檔案中加入了一條新安裝的配置。
.minecraft/libraries/資料夾中多了一些檔案。
.minecraft/versions/資料夾中多了一個版本json檔案(也可能會有jar檔案)。
額外的版本json檔案[]
該檔案相比原版的版本json檔案檔案多了inheritsFrom和jar鍵,而且其他鍵內容明顯是不完整的。
inheritsFrom
該參數指定了目前版本所繼承的原版版本,意思為除此版本json檔案外,同時使用inheritsFrom中指定的版本json檔案內容。
即,-cp參數後同時包含兩個版本json檔案指定的普通庫檔案,且natives庫檔案也同時包含兩個版本json檔案指定的,且該版本json檔案優先於原版版本json檔案。
jar
該參數指定了-cp參數後的遊戲主檔案。
除此之外,版本json檔案中的libraries鍵的格式也有些不一樣了,如:
{
"name":"org.ow2.asm:asm-all:5.0.3",
"serverreq":true
},
{
"name":"jline:jline:2.13",
"url":"http://files.minecraftforge.net/maven/",
"checksums":[
"2d9530d0a25daffaffda7c35037b046b627bb171"
],
"serverreq":true,
"clientreq":false
}
不再有downloads鍵了,只剩下name和url,檔案路徑及下載路徑需要根據一定規則拼接。
name鍵的格式為:
serverreq和clientreq用於區分用戶端和伺服器端的需要。
最佳化下載[]
有時,在官方伺服器下載檔案會很緩慢,這時可以考慮使用第三方鏡像下載。
目前常用的第三方鏡像有:
BMCLAPI
另外,Minecraft的依賴庫檔案和資源索引檔案很多為小檔案,可以考慮使用多線程下載來最佳化速度。
外觀管理[]
外觀管理需要使用MojangAPI:
api.mojang.com
取得外觀及披風[]
可透過發送GET請求獲得外觀及披風地址:
https://sessionserver.mojang.com/session/minecraft/profile/
上傳外觀[]
發送PUT請求至:
https://api.mojang.com/user/profile/
file:原始圖像檔案資料。
重置外觀[]
發送DELETE請求至:
https://api.mojang.com/user/profile/
Advertisement
FanFeed
1
附魔
2
交易
3
村民
薩爾達傳說Wiki
MinecraftWiki
缺氧Wiki
FollowonIG
Newsletter
JoinFanLab
延伸文章資訊
- 1【攻略】MultiMC 啟動器使用教學 - 哈啦區
這個啟動器教學應該有人發過了,用Google搜尋找到的是這個不過已經有一 ... 簡單講就是可以選擇FTB模組包的名稱並直接下載,私人的或第三方也可以的 ...
- 2教學/編寫啟動器 - Minecraft Wiki
游戏依赖库文件以及游戏资源文件由启动器补全。 玩家登录认证由启动器完成。 这使得我们能通过编写第三方启动器来接管游戏文件管理和登录认证。 要编写一个启动器, ...
- 3教程- Minecraft Java版入正&第三方启动器下载指南 - MineBBS
介绍Minecraft Java版也称之为:JE版/MCPC/电脑版MC,仅能在电脑上运行,如:Windows,MacOS ... 教程 Minecraft Java版入正&第三方启动器下载指南.
- 4Nsiso启动器
经典作品. Nsiso启动器- Minecraft第三方启动器- 超过400万次使用 全版本启动· 高自定义· 功能强大· 开源. 前往了解. App Screenshots ...
- 5Minecraft 袖珍版的5 個最佳啟動器
但是,在控制台ú您只能使用官方啟動器,通過不允許安裝第三方應用程序,雖然微軟沒有阻止它。 在移動設備上,在Android 上,我們有大量的啟動器來定制我們 ...