简介
查找SRG、MCP、混淆名(主要是SRG、MCP)之间的关系一直是令人头疼的事情,不过其实MCP开发包中早就提供了一个工具MCP Mapping Viewer。不过可惜的是MCP Mapping Viewer实再太不接地气,导致国内访问十分困难。所以我就建了一个小小的镜像服务器,以供国内访问,然后顺手汉化了这个工具。
镜像服务器是自建的:http://mirror.kaaass.net/mcp/
不过,由于作者贫穷的原因,目前服务器(就是博客服务器啦)坐标并不在大陆,所以在深夜等特殊时期可能会突然爆炸。如果你发现工具运行很久都不能加载mapping,请取消选择“使用镜像服务器”。
简单的使用说明
整个程序大致可以分为这5个部分:
- Mapping下载&选择
- 搜索
- 类信息
- 方法信息
- 类字段信息
开始
使用时,首先需要点击“获取版本列表”以抓取所有mapping的版本。然后,在Mapping版本的下拉框中选择一个mapping,再点击右侧的“加载Mappings”即可读入mapping数据。Mapping数据在下载后会在本地缓存(缓存位置:用户文件夹/.cache/MCPMappingViewer/),再次访问不重新获取。
关于选择合适的Mapping,这里有个提示。镜像服务器并不会缓存所有的mapping,具体缓存情况请查看镜像服务器的页面。所以选择Mapping的时候有如下建议:
- 如果你没有更改过forge的默认mapping,并希望看到和你当前环境相同的mapping的话。1.12版本以下选择对应的stable版本mapping,1.12选择20171003的snapshot版本。
- 如果你希望查看最新的mapping。请选择对应版本最新的snapshot。
另外,由于网络原因,有时下载的mapping是不完整的,若程序检测到文件不完整,则会报错。待网络状况恢复时重试即可。
搜索
在搜索框输入后点击旁边的按钮即可,这里需要注意几点:
- 包名中的点需要改成“/”。
- 类名包名不可以一起搜索。如若想搜索net.minecraft.block.Block的话,可以搜索“net/minecraft/block”或“Block”。
- 不仅类的数据可以搜索,方法、字段也可以直接搜索,不过搜索的结果会以类的形式显示。比如搜索“getRegisteredBlock”,结果会是类信息(3)显示Blocks类。
- 内部类的一般形式是:类名$内部类名(若为匿名内部类则一般是整数)。
- 搜索大小写敏感。
- 方法参数不能被搜索。具体能搜索的内容请查看“注意事项”。
由于这个搜索逻辑很迷(考虑下个版本直接修改掉),故有以下搜索建议:
- 对于比较普遍的名字,搜索类名不如搜索包。比如如果想搜索“net.minecraft.block.Block”,如果搜索“Block”的话,会出现很多无关的类。比如“net.minecraft.world.biome.Biome”有个方法的MCP名是“genTerrainBlocks”,由于他包含了“Block”,所以也会出现在搜索结果里。连注释包含Block的都会被搜索出来,而直接搜索“net/minecraft/block”就能快不少。
- 尽量避免搜索方法名,尤其是有重载注解的方法。如“updateTick”方法,通常会搜出很多很多的结果。
- 搜索注释一行即可,多行需要加\n表示换行,注意空格。
查看
搜索到结果后,在类信息(3)点击一个类就能在方法信息(4)和字段信息(5)处看到相关信息了。在方法信息(4)的左侧点击一个方法,右侧就会显示方法的参数。这里要注意的是,所有类型都采用SRG描述符的形式。熟悉java Class文件的应该看得懂,看不懂建议百度,有时间我会填坑写一下。有《深度理解Java虚拟机》的可以查看6.3.5节。
示例查找
示范下使用昨天的snapshot查找1.12版本下net.minecraft.client.gui.inventory.GuiContainer的类字段draggedStack。
- 点击“获取版本列表”。
- 点击“加载Mappings”。
- 在搜索框中键入“net/minecraft/client/gui/inventory”,搜索后选择GuiContainer类。
- 然后在字段信息区就能找到draggedStack对应的SRG名field_147012_x了,Ctrl+C可以复制。
下载
在GitHub的Release处可以下载最新版本。
如果发现程序问题,可以到汉化版repo或原作者repo处发issue(原作者处建议英语),如果发现镜像服务器有问题,请到汉化版repo处发issue。
评论