马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 teddyxlandlee 于 2025-11-5 18:24 编辑
最新快照25w45a同步发布了未混淆的版本25w45a_unobfuscated,该版本没有进入Version Manifest。
与此同时,Mojang把net.minecraft.resources.ResourceLocation(Fabric Yarn:net.minecraft.util.Identifier;Intermediary:net.minecraft.class_2960)改名为net.minecraft.resources.Identifier。不知是对CC0之神Yarn的致敬,还是如Wiki群友说的“与基岩版术语同步”。
Fabric由于使用Intermediary这一稳定中间名,不会受到影响。但从1.21.12起,Intermediary就要随着去除混淆适应期的结束而终止存在,Fabric平台的兼容断层本就是1.21.12。
Forge和NeoForge分别从1.20.6和1.20.2就开始用官方映射表,所以他们不得不接受Mojang对代码进行更名导致的兼容性问题。因此,1.21.11是Forge系的兼容断层。
因此,通过Unobfuscation和Identifier renaming,Mojang把所有modloader得罪了个遍(大雾
(以上涉及的版本号都假设Mojang暂时不跳大版本号)
这两件事情都很令人意外,但当它们发生在同一个版本,这个有意思的巧合就可以加以利用。
简单来说,无论是哪个平台,在运行环境中都可以通过判断net.minecraft.resources.Identifier类是否存在,来判定是否是Mojang官方的未混淆版本。通常来说,在代码中使用`Class.forName("net.minecraft.resources.Identifier")并检测是否抛出ClassNotFoundException异常,这就足够了。——Fabric在[25w45a, 1.21.11]区间内的混淆版本仍会使用intermediary,不会被这个规则误判。
但在Mixin Config Plugin或Coremod等不适合加载原版类的情况下,如果不能扫classpath的话,这个办法可能并不适用。
如果在Forge系环境下,可以直接比较MC版本是否高于1.21.10,这就足够了,毕竟他们不支持快照。
Fabric的话情况会稍微复杂一些。由于我们目前并不知道Fabric会如何将_unobfuscated的版本翻译称SemVer(语义版本号),我们只能在原始版本号上作文章。但在假定Mojang不跳大版本号的条件下,从1.21.12的第一个快照起将不再包含混淆。因此可以作这么一个判定:
isMojMapped(): !(<=1.21.11-alpha.25.44.a) && (>=1.21.12- || FabricLoader.getInstance().getRawGameVersion().endsWith("_unobfuscated"))
其中1.21.12-在Fabric的SemanticVersion中代表“主版本号为1.21.12的某个虚拟版本,该版本不晚于一切主版本号为1.21.12的版本”。也就是说,>=1.21.12-匹配1.21.12的所有快照、预发布版、发布候选、正式版等,以及比1.21.12更晚的版本。
|