注意:获取他人不开源mod的源代码是不建议的行为。
第一步,反编译jar文件
可以去decompiler.com在线反编译。并且以zip格式下载。
此时,当你满心欢喜准备c代码时,你会发现代码里有一大堆这玩意。
还有f_xxxx_这样的。
这叫Searge Name,简称SRG。这是技术上的名称,字段名与方法名都是编号。
当然我们需要的是MCP Name。这是可读性较强的名称。
具体定义请自行百度。
第二步,获取json格式映射表。
在网上找过,版本只到了1.12.2
其实MDK本来就有一份映射表。
来到你自己的MDK环境,来到目录build/createSrgToMcp
如果没有build目录,运行build命令进行打包。
该目录下有个名为output.srg的文件,打开看看。
python脚本。
写入json文件。
import json
fjson = json.load(open("mcp.txt"))
for i in open(r"D:\forge projects\1.20.1 MDK\build\createSrgToMcp\output.srg").readlines():
if i.split(" ")[0] == "MD:":
ls=i.split(" ")
srg = ls[1].split("/")[-1]
lss = ls
del ls[0]
for k in ls:
if len(k.split("/"))>1:
if k.split(r"/")[-2] == lss[0].split("/")[-2]:
fjson[srg] = k.split("/")[-1].split(";")[0]
elif "f_" in i:
if i.split(" ")[0] == "FD:":
srg = i.split(" ")[1].split("/")[-1]
if i.split(" ")[-1].split("/")[-1][-1] == "\n":
fjson[srg] = i.split(" ")[-1].split("/")[-1][0:-1]
else:
fjson[srg] = i.split(" ")[-1].split("/")[-1]
json.dump(fjson,open("mcp.txt","w"))
print("Done...")
替换mod的SRG Name.
import os
import json
mcp = json.load(open(r"mcp.txt"))
print("Succ Load...")
for root, dirs, files in os.walk(r"D:\forge projects\OtherDevsSource\SRG MOD"):#解压ZIP
for file in files:
if ".java" in file:
f = open(os.path.join(root, file), encoding="latin1").read()
print("LOADING:", os.path.join(root, file))
for k in mcp.keys():
if k in f:
print("Srg", k, "MCP", mcp[k])
f = f.replace(k, mcp[k])
open(os.path.join(root, file), 'w', encoding="latin1").write(f)
print("Write Succ:", os.path.join(root, file))
启动!!!