基于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了~
基于mcp940反编译Minecraft源代码的更多相关文章
- vue打包后反编译到源代码(reverse-sourcemap)
因为突然的疫情把我困在家了,家里的电脑没有源代码,但是需求还要改,工作还得继续... 从服务器下载了之前上传的打包后的文件,找了一圈反编译方法,得救了,在此记录一下. 1.npm install -- ...
- 如何使用Visual Studio 2017自带的源代码反编译功能
反编译C#源代码,大家可能第一时间想到 .NET Reflector 这个工具.但是这个工具反编译出来的代码跟实际源码还是有一定差距的,阅读起来不是很便利. 本人在查看Visual Studio 20 ...
- 7 款开源 Java 反编译工具
今天我们要来分享一些关于Java的反编译工具,反编译听起来是一个非常高上大的技术词汇,通俗的说,反编译是一个对目标可执行程序进行逆向分析,从而得到原始代码的过程.尤其是像.NET.Java这样的运行在 ...
- 7款开源Java反编译工具
今天我们要来分享一些关于Java的反编译工具,反编译听起来是一个非常高上大的技术词汇,通俗的说,反编译是一个对目标可执行程序进行逆向分析,从而得到原始代码的过程.尤其是像.NET.Java这样的运行在 ...
- Java反编译工具Jad详解
做项目过程中需要反编译一个jar包,于是作了一些学习,记录下来. Jad(JAva Decompiler)是一个Java的反编译器,可以通过命令行把Java的class文件反编译成源代码. 如果你在使 ...
- Java基础学习总结(27)——7 款开源 Java 反编译工具
今天我们要来分享一些关于Java的反编译工具,反编译听起来是一个非常高上大的技术词汇,通俗的说,反编译是一个对目标可执行程序进行逆向分析,从而得到原始代码的过程.尤其是像.NET.Java这样的运行在 ...
- Eclipse 安装反编译插件 Eclipse Class Decompiler
Eclipse Class Decompiler在线安装方法 https://blog.csdn.net/tangjinquan1157/article/details/77506015 Eclips ...
- android 混淆 与 反编译
1, 文件 project.properties 修改: target=android-14proguard.config=${sdk.dir}/tools/proguard/proguard-and ...
- JDK 的配置和反编译工具的使用---------------Java知识点
初始Java 1995年5月,sun公司开发了一门新的编程语言------Java 詹姆斯.高斯林(Java之父),Java语言小巧安全具有可移植可跨平台性的优点. 开发java程序的步骤:编写 ,编 ...
随机推荐
- ES6之主要知识点(二) 变量的解构赋值。默认值
引自http://es6.ruanyifeng.com/#docs/destructuring 数组解构赋值 默认值 对象解构赋值 用途 1.数组的解构赋值 let [a, b, c] = [1, 2 ...
- HBase与传统关系数据库的对比分析
- mongoDB可视化工具RoBo 3T的安装和使用
第一步下载RoBo3T https://robomongo.org/download 第二步安装 双击安装包安装,修改安装路径,不停下一步,点击安装. 一路next,最后到了这个页面直接点击finis ...
- 中国 SaaS 企业如何突围?这几点是关键!
进入2019年,关于SaaS的各种言论甚嚣尘上,有人看好:“SaaS市场得大客户者得天下”,也有人唱衰:“SaaS已死,下一个”.在众说纷纭中,中国SaaS企业的成功之路迷雾重重,前期走的较早的头部S ...
- Windows 下 MQTT 服务器搭建之Apollo
https://blog.csdn.net/wangh0802/article/details/84861226#%EF%BC%881%EF%BC%89%E4%B8%8B%E8%BD%BD%20Apo ...
- LUOGU P2962 [USACO09NOV]灯Lights
题目描述 Bessie and the cows were playing games in the barn, but the power was reset and the lights were ...
- sql调优的总结
sql调优的总结 列类型尽量定义成数值类型,且长度尽可能短,如主键和外键,类型字段等等 建立单列索引 根据需要建立多列联合索引 当单个列过滤之后还有很多数据,那么索引的效率将会比较低,即列的区分度较低 ...
- Maven实战07_依赖
1:依赖声明 <project> ... <dependencies> <dependency> <groupId>...</groupId> ...
- jdk 数组位移运算
1.采用先shift=31-Integer.numberOfLeadingZeros(scale);取int前面的补零个数31再减去拿到占得内存位长度 2.i偏移shift(其实等于I*位数) 加上b ...
- JAVA面试常见问题之常见集合篇
1.List 和 Set 区别 List 可以允许重复的对象. 可以插入多个null元素. 有序容器 Set 不允许重复的对象. 只能插入1个null元素 无序容器,可以使用TreeSet实现有序 2 ...