83

MCP Mapping 查看器汉化 – 查看SRG、MCP、混淆名的关系

 5 years ago
source link: https://blog.kaaass.net/archives/877?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

查找SRG、MCP、混淆名(主要是SRG、MCP)之间的关系一直是令人头疼的事情,不过其实MCP开发包中早就提供了一个工具MCP Mapping Viewer。不过可惜的是MCP Mapping Viewer实再太不接地气,导致国内访问十分困难。所以我就建了一个小小的镜像服务器,以供国内访问,然后顺手汉化了这个工具。

yAfyy2r.png!web

镜像服务器是自建的: http://mirror.kaaass.net/mcp/

不过,由于作者贫穷的原因,目前服务器

(就是博客服务器啦)

坐标并不在大陆,所以在深夜等特殊时期可能会突然爆炸。如果你发现工具运行很久都不能加载mapping,请取消选择“使用镜像服务器”。

简单的使用说明

MZBJRn2.png!web

整个程序大致可以分为这5个部分:

  1. Mapping下载&选择
  2. 搜索
  3. 类信息
  4. 方法信息
  5. 类字段信息

使用时,首先需要点击“获取版本列表”以抓取所有mapping的版本。然后,在Mapping版本的下拉框中选择一个mapping,再点击右侧的“加载Mappings”即可读入mapping数据。Mapping数据在下载后会在本地缓存(缓存位置:用户文件夹/.cache/MCPMappingViewer/),再次访问不重新获取。

关于选择合适的Mapping,这里有个提示。镜像服务器并不会缓存所有的mapping,具体缓存情况请查看镜像服务器的页面。所以选择Mapping的时候有如下建议:

  1. 如果你没有更改过forge的默认mapping,并希望看到和你当前环境相同的mapping的话。1.12版本以下选择对应的stable版本mapping,1.12选择20171003的snapshot版本。
  2. 如果你希望查看最新的mapping。请选择对应版本最新的snapshot。

另外,由于网络原因,有时下载的mapping是不完整的,若程序检测到文件不完整,则会报错。待网络状况恢复时重试即可。

在搜索框输入后点击旁边的按钮即可,这里需要注意几点:

  1. 包名中的点需要改成“/”。
  2. 类名包名不可以一起搜索。如若想搜索net.minecraft.block.Block的话,可以搜索“net/minecraft/block”或“Block”。
  3. 不仅类的数据可以搜索,方法、字段也可以直接搜索,不过搜索的结果会以类的形式显示。比如搜索“getRegisteredBlock”,结果会是类信息(3)显示Blocks类。
  4. 内部类的一般形式是:类名$内部类名(若为匿名内部类则一般是整数)。
  5. 搜索大小写敏感。
  6. 方法参数不能被搜索。具体能搜索的内容请查看“注意事项”。

由于这个搜索逻辑很迷(考虑下个版本直接修改掉),故有以下搜索建议:

  1. 对于比较普遍的名字,搜索类名不如搜索包。比如如果想搜索“net.minecraft.block.Block”,如果搜索“Block”的话,会出现很多无关的类。比如“net.minecraft.world.biome.Biome”有个方法的MCP名是“genTerrainBlocks”,由于他包含了“Block”,所以也会出现在搜索结果里。连注释包含Block的都会被搜索出来,而直接搜索“net/minecraft/block”就能快不少。
  2. 尽量避免搜索方法名,尤其是有重载注解的方法。如“updateTick”方法,通常会搜出很多很多的结果。
  3. 搜索注释一行即可,多行需要加\n表示换行,注意空格。

搜索到结果后,在类信息(3)点击一个类就能在方法信息(4)和字段信息(5)处看到相关信息了。在方法信息(4)的左侧点击一个方法,右侧就会显示方法的参数。这里要注意的是,所有类型都采用SRG描述符的形式。熟悉java Class文件的应该看得懂,看不懂建议百度,有时间我会填坑写一下。有《深度理解Java虚拟机》的可以查看6.3.5节。

示例查找

示范下使用昨天的snapshot查找1.12版本下net.minecraft.client.gui.inventory.GuiContainer的类字段draggedStack。

  1. 点击“获取版本列表”。 bA3QJzr.png!web
  2. 点击“加载Mappings”。 ruuqeav.png!web
  3. 在搜索框中键入“net/minecraft/client/gui/inventory”,搜索后选择GuiContainer类。 ZJrQvyf.png!web
  4. 然后在字段信息区就能找到draggedStack对应的SRG名field_147012_x了,Ctrl+C可以复制。

在GitHub的 Release处 可以 下载最新版本。

如果发现程序问题,可以到 汉化版repo原作者repo 处发issue(原作者处建议英语),如果发现镜像服务器有问题,请到 汉化版repo 处发issue。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK