欢迎光临散文网 会员登陆 & 注册

玩家在看终末之诗时究竟在哪里?UP主实验后惊了!

2023-08-22 12:55 作者:柚子柚子l  | 我要投稿

从代码层面解释其实也不难……

这里以 Java 版 1.19.3 为例,根据 Minecraft Wiki,“玩家进入返回传送门后终末之诗是否显示,取决于玩家的实体数据 seenCredits[仅JE] hasSeenCredits[仅BE]。初始状态下为 false,此时诗会显示;玩家看过或跳过之后,数据变为 true,则不再会显示”。

因此,只需要通过混淆映射表搜索 seenCredits,即可找到代码中对应的完整路径:net.minecraft.server.level.ServerPlayer.seenCredits,混淆后是 ahn.cI(注意是大写 i 而不是小写 L)。

打开源代码文件 ahn.java,可以找到 cI 数据值的声明:

/*  179 */   private boolean cI;

那么通过全局搜索,一路顺藤摸瓜,可以在同一个文件中找到函数 net.minecraft.world.entity.Entity changeDimension(net.minecraft.server.level.ServerLevel),混淆后是 bdr b(ahm $$0)。Change dimension 的中文意思是“改变维度”,而这恰巧就是我们要找的代码。

重点关注含有终末之诗相关内容的代码,即 763 - 775 行。这段代码的逻辑如下:

  1. 将当前玩家状态标记为“正在改变维度”(net.minecraft.server.level.ServerPlayer.isChangingDimension,ahn.cH);
  2. 后面两行看不懂,但是大概意思是,获取到当前维度,保存至 $$2;
  3. 如果当前维度是 g(END,末地),欲切换的维度是 e(OVERWORLD,主世界),那么执行以下操作:
  4. 把欲传送的实体从载具上面……弄下来?
  5. 判断玩家在主世界的出生点是否可以交互;
  6. 如果玩家没有在这个存档中通关过,将玩家标记为 wonGame(f);向服务器发送数据包,表明玩家已经通关;将玩家阅读过终末之诗标记为 true;
  7. 返回当前的玩家实例。

额,所以……终末之诗的内容在哪里啊喂!

算了,之后再研究吧,这个就当是给大家一个思路了……

玩家在看终末之诗时究竟在哪里?UP主实验后惊了!的评论 (共 条)

分享到微博请遵守国家法律