zoukankan      html  css  js  c++  java
  • 基于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了~

  • 相关阅读:
    KindEditor限制输入字数
    datepicker日历控件使用
    复合注解的解析
    jdk包结构及用途分析
    深入理解BIO、NIO、AIO
    MiniCat:手写Http服务器
    基于TCP协议的Socket编程
    手写一个最迷你的Web服务器
    手写一个Web服务器,极简版Tomcat
    java网络编程socket的使用
  • 原文地址:https://www.cnblogs.com/jpfss/p/8464161.html
Copyright © 2011-2022 走看看