简介
查找 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。
评论