写在前面
剧透警告!!!
本教程已过时!!!
本教程不会更新新版的解密,请自行探索!!!
本教程使用了大量非常规方法——包括但不限于反编译、资源分析等手段
如果你对此介意/不满,或是希望通过自己的努力解谜,请关闭本页面
本人使用此方法纯属个人兴趣,本教程只作为经验分享
本教程经模组作者许可发布
省流/快速解谜
(这是我写完整篇教程才发现的……就放开头吧)
首先在游戏中进入你的存档,然后用记事本(或者类似工具)打开 /<版本文件夹>/logs/debug.log 这个文件
然后搜索“RevelationFix”,如果不出意外,你就能看到以下内容:

这就是这个存档的谜题物品了估计是baka程序员忘记删掉调试用的输出了
准备工作
首先,我们需要以下工具:
一个可用的Minecraft Forge 1.20.1游戏实例一个可以启动的游戏:无需多言
jadx-gui:用于反编译模组文件
vscode、forge mdk(可选):避免频繁查询映射(见谜题仪式破解-详细过程)
作为一个开源模组,为什么不直接查其码而使用反编译呢?因为我懒
因为启示录的源码分散在两个不同平台的仓库中,查询起来十分不便说白了还是懒
本教程得到了模组作者的许可,所以会放出反编译后的结果(见文末-轶事一节)
谜题物品破解
详细过程
用jadx打开启示录的jar文件,十分顺利地加载了出来

熟悉mc开发的话,大概会想到打开本模组的配方数据看看——假设你这么做了,然后一眼就看到了这个有点引人注目的 the_end_ritual.json (箭头所指),并打开了它——

emm,输出物品是 goety_revelation:halo_of_the_end ,也就是终末之环,显然是这次解谜的核心——看来我们找对地方了
再一看,作为材料的输入也很令人在意:“puzzle”有“谜题”的意思,多半就是终末之谜的对应物品了
使用jadx的搜索功能,找到 com.mega.revelationfix.common.init.GRItems 这个类,随即就能看到这些tag在代码中的定义:
以“THE_END_PUZZLES4”为搜索关键词继续搜索,发现结果只有不到10个,一个个看过去——
在 com.mega.revelationfix.common.event.ClientEventHandler.addTECraftingTooltip 中,我们看到:

出现了又一个值得在意我想不出别的词了的类:com.mega.revelationfix.common.odamane.common.TheEndPuzzleItems (红框所指)
点开,然后我们看到:
可以开香槟了,我们找到了所有的谜题物品的ID——
等一下!我怎么知道哪个谜面对应哪个物品?
不用担心,回到代码中看看,发现蓝框所指的地方就是谜面的本地化键(不知道是啥的去这里看看),只要我们搜索……
怎么啥也没有?!
作为对比,这是对晋升之环描述的搜索:

可以看到是有assets中的搜索结果的……不应该啊,语言文件里没有的话,游戏内又是怎么显示文本的?
不要着急,回头看前面的代码,我们会在部分代码的开头看到jadx给我们的一条提示:
可以看到,这段代码来着模组jar文件中的一个jar文件——有点绕?理解为这模组内置了另一个模组就行
(这是forge的jar-in-jar技术,详情见此)
显然缺少的语言文件应该来自这个内置的模组,而jadx并没有扫到这个内置的模组
解决办法很简单,把这个内置模组拉出来单独反编译就行——jar文件的本质其实就是个压缩包,随便哪个压缩软件都能解压
再次查找,我们果然找到了想要的东西:

接下来的事情很简单,把它们和代码中的物品ID一一对应起来就行了
结果
序号 | 谜面 | 物品ID | 物品名称 |
0 | 未曾绽放的末路之花 | minecraft:chorus_flower | |
1 | 呼唤往昔之号 | goety:blazing_horn | |
2 | 幽暗处摇曳的暗焰 | goety:shadow_essence | |
3 | 往昔之事的残败记叙 | goety:withered_manuscript | |
4 | 远古灭绝之生灵 | minecraft:sniffer_egg | |
5 | 诓骗死神之物 | minecraft:totem_of_undying | |
6 | 炼金的终点 | goety:philosophers_stone | |
7 | 空岛之基 | minecraft:end_stone | |
8 | 世界之暗的伊始 | goety:night_beacon | |
9 | 墓穴主人的沉眠之所 | goety:pithos | |
10 | 幽深黑暗的回忆 | minecraft:echo_shard | |
11 | 生者安息之所 | minecraft:bed | |
12 | 恒世的不死不灭 | goety:arca | |
13 | 生机本源的连接者 | goety:animation_core | |
14 | 幽暗之中的明光 | minecraft:glow_lichen | |
15 | 忤逆指令的力量 | goety:totem_of_souls | |
16 | 归家之引 | minecraft:beacon | |
17 | 暗影猎手之魂 | goety:howling_soul | |
18 | 先古回音的碎片 | goety:forbidden_piece | |
19 | 终末永恒之伴 | minecraft:end_crystal | |
20 | 最初挚友的心爱之物 | minecraft:bone | |
21 | 守护者的遗志 | minecraft:iron_ingot | |
22 | 守护者的忠情 | minecraft:red_flower | |
23 | 群死排衙累白骨,幽邃晦暝止鬼哭 | goety:shriek_obelisk | |
24 | 创生塑魂烦抟土,深影为始束身无 | goety:animator | |
25 | 黑暗魔法的起源 | goety:ectoplasm | |
26 | 深埋于高山之下的奇异珍宝 | minecraft:deepslate_emerald_ore | |
27 | 层嶂存于虚无,吾将开辟道路 | goety:tunnel_focus | |
28 | 无所不知,无所不说 | goety:black_book | 黑暗之书 (Black Book) - 诡厄巫法 (Goety) |
29 | 以身紫烛引世久,颂炎驱火净尘沙 | goety:infernal_tome | |
30 | 迷于尘世者的忿怒 | goety:raging_matter | |
31 | 荒芜生机的遗迹 | minecraft:deadbush | |
32 | 追随死亡 | minecraft:recovery_compass | |
33 | 破败的神性冠冕 | irons_spellbooks:tarnished_helmet | 黯淡皇冠 (Tarnished Crown) - [ISS] Iron的法术与魔法书 (Iron's Spells 'n Spellbooks) |
34 | 神明的黄金冠冕 | irons_spellbooks:gold_crown | Iron的皇冠 (Iron's Crown) - [ISS] Iron的法术与魔法书 (Iron's Spells 'n Spellbooks) |
35 | 匿踪商队的埋没之物 | irons_spellbooks:permafrost_shard | 永冻碎片 (Permafrost Shard) - [ISS] Iron的法术与魔法书 (Iron's Spells 'n Spellbooks) |
36 | 不可视之物 | irons_spellbooks:invisibility_ring | 隐形之戒 (Ring of Invisibility) - [ISS] Iron的法术与魔法书 (Iron's Spells 'n Spellbooks) |
37 | 不见光明的遗忘金属 | irons_spellbooks:arcane_debris | 奥术残骸 (Arcane Debris) - [ISS] Iron的法术与魔法书 (Iron's Spells 'n Spellbooks) |
38 | 深埋黑暗的不语之书 | irons_spellbooks:ruined_book | 残破的书 (Ruined Book) - [ISS] Iron的法术与魔法书 (Iron's Spells 'n Spellbooks) |
39 | 炽焰魔神的固化力量 | cataclysm:ignitium_block | |
40 | 诅咒守卫的惨白头颅 | cataclysm:aptrgangr_head | |
41 | 终界堡垒的明灯 | cataclysm:void_lantern_block | |
42 | 听闻壁外苍天语 | alexsmobs:bear_dust | |
43 | 远古天灾的媒介 | alexscaves:ominous_catalyst | |
44 | 荒野挑战之证 | ars_nouveau:wilden_tribute | |
45 | 寂静之冰下的孤独遗物 | aquamirae:rune_of_the_storm | |
46 | 世间谬误集所,永无止境的亵渎之书 | enigmaticlegacy:the_infinitum | |
47 | 恃其无尽之力,凌驾死亡之上 | enigmaticlegacy:the_cube | |
48 | 逆行时间的谎言 | enigmaticlegacy:cosmic_cake | |
49 | 铸就饕餮的恶意 | enigmaticlegacy:evil_ingot | |
50 | 刻下诅咒的匕首 | enigmaticaddons.evil_dagger | |
51 | 亘古未来之树 | twilightforest:twilight_sapling | (疑为错误,这是低版本暮色树苗的ID) |
52 | 巨人国的通路 | twilightforest:magic_beans | |
53 | 奔雷淬其脆如酥,琼液如玉甘似梦 | iceandfire:cannoli | |
54 | 传说巨兽蓬勃的能量之源 | jerotesvillage:bright_land_heart | |
55 | 你的噩梦,关乎你所爱之人的死亡。你醒来,直面愈加疯狂的噩梦。 | fantasy_ending:uom_spawn_egg | 召唤 「终焉秩序维系者」 (Spawn 「The Ultimate Order Manager」) - [FE] 梦幻终焉 (FantasyEnding) |
56 | 虚空之中的末影之眼 | l2complements:void_eye | |
57 | 深渊死灵之王的无上冠冕 | alexsmobs:novelty_hat | |
58 | 渊海大镖客之枪 | alexscaves:game_controller | |
59 | 凡人的创世权柄 | create:schematicannon |
谜题仪式破解
详细过程
回到我们发现的那个配方文件,里面还有一个Tag材料:revelationfix:te_craft
在内置的jar文件中可以发现它指向ID为 goety_revelation:random_display 的物品
再次搜索这物品,找到如下配方文件:
材料仍然是谜题物品,没什么好说的……但如果你试图在游戏内直接合成,你只会得到一个提示:无效的仪式
回到配方文件,框出的地方代表了这个配方所需的仪式
再度在代码中搜索,找到 com.mega.revelationfix.common.ritual.ModRitualTypes ,这里有两种仪式:

一种是我们最上面找到的终末之环所需的仪式,另一种是我们刚刚找到的这个配方的仪式
继续搜索,来到 com.mega.revelationfix.mixin.goety.ritual.RitualRequirementsMixin.revelationfix$getStructuresTheEnd ,我们看到:

不难看出来,这里是在合成时检查是否满足仪式要求,我们上面找到的两种仪式都在这里……
等会儿,虽然我看得懂代码,但是这些 f_50259_ 之类的是什么玩意?
事实上,这些是Searge名——下面这张来自SpongeDocs的截图说明了这是什么:

所以,这就是为什么我在前面提到可以使用vscode、forge mdk这两个工具了——尽管有不少工具可以查询Searge名对应的MCP名,但是只要导入到开发环境,开发工具就会自动帮我们翻译成MCP名,就像下面这样(然而是真正源码的图):
嗯,这下看懂了
值得在意的是, the_end 仪式中需要一个满足特定要求的箱子,而检测箱子的方法如下:
最后整理一下,我们就能得到两种仪式的具体要求了
结果
物品 | 仪式ID | 仪式需求 |
goety_revelation:random_display | te_magic | 周边方块提供的附魔等级大于 16 讲台 × 1(必须非空) 附魔台 × 1 |
终末之环(goety_revelation:halo_of_the_end) | the_end | 末地烛 × 4 紫珀块 × 8 末地石砖 × 16 末地石 × 4800(多少?!) 箱子 × 1 (内含: 金锭 × 1 铁锭 × 1 钻石 × 1 甜菜种子 × 1 鞍 × 1 绿宝石 × 1 ) 必须位于末地 |
顺便一提,终末之环还需要献祭一个末影人,别忘了
作业
如果你真的按照上面的内容去做终末之环,会发现提示物品缺失
事实上,启动 the_end 仪式还有一个隐藏的条件因为某人忘记在游戏里尝试合成所以没发现
这个条件就作为这篇教程的作业吧(笑
轶事
最初这篇教程在审核时被站长拦下,然后模组作者来找我,于是我就撤回了这篇教程
然而不到两天时间……不想说了,自己看百科评论区吧
总之,现在这篇教程是经过作者同意,在百科发布了
下面几张图是启示录内测群的截图,也作为我对此事的评价




总结
比起解谜的结果,过程更值得令我们去体会
希望你也能在这次解谜中得到自己想要的东西——是什么?我不知道,只有你自己知道,不是吗?


