获得一个Minecraft Forge mod的源码竟然这么简单!!!

注意:获取他人不开源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))

启动!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值