基於mcp940反編譯Minecraft源代碼


引言

Minecraft中文叫“我的世界”,沒怎么深入玩過,來試試把它源代碼反編譯出來吧。

參考教程:
https://minecraft.gamepedia.com/Mods/Creating_mods/Setting_up_the_MCP_workspace

我用的是最新的mcp940,對應版本是1.12。

遇到問題及解決

因為我的是Mac系統,遇到一些坑,下面簡要說明一下。

客戶端下載

因為官方客戶端需要mojang賬號才能登陸,而mojang賬號注冊點擊沒反應,因此怎么也進行不下去。

解決辦法:網上找!還好,被我在百度貼吧找到了:https://tieba.baidu.com/p/5235025666
感謝樓主。
下載下來,解壓到~/.minecraft目錄

服務端下載

最新服務端在:https://minecraft.net/en-us/download/server
版本是1.12.1,而我們要找的是1.12,鏈接是猜出來的:https://s3.amazonaws.com/Minecraft.Download/versions/1.12/minecraft_server.1.12.jar
放入mcp目錄的jars目錄中。

運行一次:java -jar minecraft_server.1.12.jar

python命令

mcp的runtime目錄的python腳本中,都指定由python2運行,現改為python。

text2speech庫沒有osx版本

此問題導致反編譯時檢查腳本出錯。
解決辦法:修改1.12.json,借用linux的,把“linux”改為“osx”,如下:

{"extract":{"exclude":["META-INF/"]},"name":"com.mojang:text2speech:1.10.3","natives":{"osx":"natives-linux","windows":"natives-windows"}

提示找不到庫

如果反編譯時提示類似“Copying library java-objc-bridge... Error copying library java-objc-bridge"的錯誤,那么就打開1.12.json文件,找到相關的庫的下載鏈接,自行下載放到相應目錄中即可。

結論

至此,可以成功反編譯了。后續就可以嘗試eclipse打開,研究分析源代碼了。

后續:Eclipse打開項目

Eclipse中,把workspace指定到目錄mcp940/eclipse目錄下,啟動Eclipse后自動就打開Client和Server項目了。
Server能正常運行,沒問題。

客戶端錯誤

Java Build Path中重新加入jar包,修正紅叉錯誤。

因為用到了與text2speech相關的osx特性的代碼需要注釋掉,否則客戶端會提示類沒找到,沒辦法運行,例如:
GuiIngame.java中GuiIngame函數中NarratorChatListener相關的注釋掉:

// IChatListener ichatlistener = NarratorChatListener.field_193643_a;
(this.field_191743_I.get(ChatType.CHAT)).add(new NormalChatListener(mcIn));
// (this.field_191743_I.get(ChatType.CHAT)).add(ichatlistener);
(this.field_191743_I.get(ChatType.SYSTEM)).add(new NormalChatListener(mcIn));
// (this.field_191743_I.get(ChatType.SYSTEM)).add(ichatlistener);
(this.field_191743_I.get(ChatType.GAME_INFO)).add(new OverlayChatListener(mcIn));
this.setDefaultTitlesTimes();

Minecraft.java中loadWorld函數的NarratorChatListener相關代碼注釋掉:
// NarratorChatListener.field_193643_a.func_193642_b();

好了,Eclipse可以正常運行Client了~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM