为什么有些minecraft的mod作者提供了混淆代码后又提供一份源代码

 我来答
匿名用户
推荐于2017-11-22
展开全部
简单来说,就是题主看到的混淆代码(universal)是供玩家使用的,而非混淆的代码(deobf和sources)是供开发者使用的。

详细说来,我们要从Minecraft这一游戏本身说起。

首先,Mojang并不为其开发的Minecraft游戏提供源代码,同时,其提供的游戏文件也是混淆过的,其中的类没有包名,类名方法名等也全都是abcdef这种无意义的字母组合。

不过,针对Minecraft的修改行为(也就是我们通常所说的Mod和插件)从Minecraft发布不久就有人着手去做了,后来Mojang在Minecraft的最终用户许可协议(EULA)中明确表示了对Mod的支持,包括默许反编译等行为。当然,Minecraft的Mod数量也非常之多,目前至少有上万个Minecraft Mod活跃在各个论坛社区中。

在Minecraft发布不久就出现了专门反编译和反混淆Minecraft代码的组织,这一组织就是MCP(Mod Coder Pack),MCP提供的若干个映射表,就把上面提到的一些无意义的字母组合(又称Notch Name),变成了有意义的方法名类名(又称MCP Name)等。这个映射表就应该是这个样子的:

不过这样就出现了一个问题:毕竟这些名称是从无到有猜测出来的,总有一些名称当时猜不出来,而另一些名称可能当时的猜测是错误的,所以其实这个映射表,是经常修改和补充的。但是,旧的Mod使用的是修改前的名称,而新制作的Mod使用的是修改后的名称,这样怎么能够放在一起运行呢?机智的人民群众很快就想到了一个办法:我们可以使用一套固定的名称索引起来,打包Mod和运行Mod的时候都使用这套名称不就可以了?所以映射表就变成了这样:

半混淆名有着形如func_xxxxxx_x或者field_xxxxxx_x的形式,一般情况下不会发生变动。半混淆名又名SRG Name,以纪念MCP的领导者,后来进入Mojang参与Minecraft开发的Searge。

Minecraft Forge,一套主流的Minecraft Mod API,在运行的时候使用的正是这套方式:编译并打包Mod的时候把其中的未混淆名变成半混淆名,运行Minecraft的时候把混淆名同样变成半混淆名,这样Mod就可以使用半混淆名正常工作了。

所以正如题主所见,在直接下载Mod文件并运行的时候,其中的代码已经使用的是半混淆名了。然而在开发Mod的时候,如果Mod开发者想要提供其他Mod的兼容支持,那么就需要链接其他Mod的类,此时因为开发环境使用的是未混淆名,所以引入的其他Mod也必须使用未混淆名,也就是题主所看到的deobf(提供编译后的后缀名为.class的文件)和source(直接提供后缀名为.java的源代码)两个JAR。
苏州蓝晓生物科技有限公司_
2022-08-05 广告
苏州蓝晓生物科技有限公司。标准化核心产品:公司拥有完整的琼脂糖介质、葡聚糖介质、聚甲基丙烯酸酯介质生产线,年产分离介质50000L,产品质量稳定并达到国际领先水平。核心优势:公司核心技术人员拥有近二十年不同基质的基球开发和官能化的丰富技术经... 点击进入详情页
本回答由苏州蓝晓生物科技有限公司_提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式