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

2022-01-14 16:54:57 浏览数 (1)

文章目录[隐藏]

  • 简介
  • 简单的使用说明
    • 开始
    • 搜索
    • 查看
    • 示例查找
  • 下载

简介

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

镜像服务器是自建的:http://mirror.kaaass.net/mcp/ 不过,由于作者贫穷的原因,目前服务器(就是博客服务器啦)坐标并不在大陆,所以在深夜等特殊时期可能会突然爆炸。如果你发现工具运行很久都不能加载mapping,请取消选择“使用镜像服务器”。

简单的使用说明

整个程序大致可以分为这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。

点击“获取版本列表”。

点击“加载Mappings”。

在搜索框中键入“net/minecraft/client/gui/inventory”,搜索后选择GuiContainer类。

然后在字段信息区就能找到draggedStack对应的SRG名field_147012_x了,Ctrl C可以复制。

下载

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

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

0 人点赞