Minecraft 1.19实验性快照1 代码解析
令人激动的1.19快照来了!这个版本最重要的更新就是加入了deep dark及相关的生物、物品和方块,接下来将一一介绍。
一. Deep Dark群系和Ancient City结构
这个版本新加入了Deep Dark地下群系:

这个群系的最佳放置要求为:任意温度区间,任意湿度区间,大陆性介于0.825~1.5,任意侵蚀度区间,深度0.7~1.0,任意奇异度区间。
和蘑菇岛类似,它不会自然生成怪物(当然动物在此群系也无法生成),这主要是为了避免Warden一直寻敌导致不会消失。但是刷怪笼在这个群系能起到作用,下图就是在deep dark群系中废弃矿坑生成的刷怪笼。

Ancient City是新的结构,只能在Deep Dark群系内生成。结构的spacing是24,seperation是8,盐为20083232。
它的结构很大,和要塞差不多,含有很多的宝箱和一系列Sculk方块。
二. Sculk Catalyst和Sculk方块
这个版本加入了Sculk Catalyst可以将经验转化为Sculk方块。生物在它旁边死亡并产生经验时,它会将这些经验变成Sculk方块替换掉旁边的方块。
Sculk Catalyst会监视以它方块中心点为球心,半径为8格的区域。如果在这个球内有生物死亡,那么它的经验值会被吸收不产生经验球,同时这些经验值将用来用作替换Sculk的唯一参数。
替换Sculk这一步骤由SculkSpreader类完成。首先获得的经验值会进行分块:如果总经验值大于1000,那么先分出来1000点经验值,剩下的作为另一块经验值,如果另一块还是大于1000点,继续这个操作直到不再大于1000点。每块经验值会被分配位置为生物死亡位置的一个指针(cursor),指针数量不超过32个。
每个游戏刻指针将会计算“游走”一次(不一定成功,指针游走一次会有2游戏刻的冷却),游走范围是以它为中心的3x3x3正方体(不包括自身和8个角位共18个位置),每次游走会尝试移动到一个Sculk方块或Sculk Vein上。如果两或多个指针游走到同一个方块上且经验值之和小于1000,那么它们会合并为一个(冷却时间取决于小的那个);如果剩余可用的经验值小于0,这个指针就会被消除。如果游走失败并且这个方块无法进行Sculk传播,这个指针也会消失。当指针游走到方块时,方块会产生粒子效果。
指针的位置上的方块决定了Sculk的传播方式。如果这个方块不是Sculk或者Sculk Vein,那么在这个方块上会尝试生成Sculk Vein,不消耗经验值;如果这个方块是Sculk Vein,它会尝试旁边生成Sculk并且在旁边继续生成Sculk Vein,如果Vein依附在Sculk上它将消失,消耗1经验值,如果生成失败(比如生成位置上的方块不含有sculk_replaceable标签),会有10%的概率消耗掉一半经验值;如果方块是Sculk,首先有90%的几率被略过计算不消耗经验值,如果这个方块离Catalyst小于4格(欧氏距离)、无法在上方放置方块(不是空气或者是水源)、以它为中心的7x2x7空间内有两个及以上的Sculk Sensor/Shrieker,那么生成失败,如果远离Catalyst失败那么消耗1经验值,否则消耗最多2%的经验值(和距离有关),如果可以生成,那么再次检查几率,如果指针剩余经验值大于10则肯定生成,小于10则概率为经验值x10%,生成是10%在上方生成Shrieker,90%生成Sensor,无论这次检查是否成功都会消耗10经验值。
(由于代码量巨大,此处代码就不展示了)
总结一下就是:一个方块先生成Sculk Vein,之后才能转变成Sculk,最后游走到这个方块上时有1%的几率生成Shrieker,9%生成Sensor。
下面是一种最大化利用指针游走生成Sensor/Shrieker的方式:
将不含有sculk_replaceable标签的方块放在Catalyst上方(超出4格),六面都用不可替换的方块围起来,在旁边放上一个Sculk(多个也可以,保证没有Vein——它会消耗大量的经验值)。在方块上杀死生物,就能看到Sculk产生粒子效果(这是因为指针无法游走到别的方块上),如果运气好就能在上方生成Sensor/Shrieker。

Sculk Catalyst没有冷却时间,破坏时会给20点以内的经验值。Sculk方块每个方块被破坏都会给1经验值。(如果想用这个存储经验就算了吧,不值)
三. Warden与Sculk Shrieker
Warden是一种新的强大到玩家基本杀不死的生物(可以算boss级?)。血量为500点。(锋利255也不能一刀砍死)
他需要Sculk Shrieker“召唤”,所以先看看这个方块的特性。
Sculk Shrieker有三种触发方式:
玩家站在它的上方,冷却时间是90tick。
附近8格(欧式距离)的Sculk Sensor发出sculk_sensor_tendails_clicking游戏事件,冷却200tick并且要求附近48x48x48格内不存在Warden。
由红石激活,冷却90tick。
当它被触发之后,会检查周围16格(欧式距离)内的所有非旁观玩家,选取警告等级最大的玩家的警告等级并加一,同时将这个等级拷贝给选中的这些玩家。当冷却期90tick结束后,再次检查16格内玩家的警告等级,如果等于3,在方块11x13x11的范围内尝试生成Warden(尝试20次);如果小于3,会产生Warden的声音并对周围的生存玩家施加260刻Darkness效果(不过在测试的时候有时候不给效果,可能是bug)。
减小警告等级的方法是等或死亡,每12000tick警告等级会减1。
回到Warden。它也会给予玩家Darkness效果,每120tick会给周围20格(欧式距离)的生存玩家640tick的Darkness效果,当玩家有200tick以上Darkness效果时不会重复获得这个效果。
当它钻出地面或者挖回地面时是处于无敌状态的,无法受到伤害。
Warden会和所有生物敌对,除了盔甲架和其他Warden。
Warden和Sculk Sensor的感受器差不多,接受所有的声音游戏事件,冷却时间是40tick。当接收到一个声音事件时,Warden会将这个事件的发出者(或者投掷物的投掷者)的怀疑度增加,如果这个事件的发出者是投掷物/首席怀疑目标或者不存在怀疑目标,Warden会立刻看向事件发出的位置并停止行动。
Warden的碰撞箱是1x3x1,和末影人相同。
因为这些AI比较复杂,就不展开说明了。
四.其他方块与物品
1.Reinforced Deepslate
这是一种极硬的方块,自然生成于Ancient City。爆炸抗性极高(1200),类似黑曜石和远古残骸。硬度极高(55.0,大于黑曜石),效率V急迫二也需要1-2分钟才能挖掉(即使急迫127也不能瞬间挖掉),但是没有掉落物,也就是生存不可获得。可以被活塞推拉。最重要的是它含有dragon_immune和wither_immune标签,这代表末影龙和凋灵无法破坏该方块,也就是说做凋零塔可以不用寻找特定基岩位置,只需要将这个方块用飞行器推到指定位置就行。
2. Swift Sneak附魔
这是个附在鞋子上的附魔,加速潜行时的速度。在普通潜行的时候,速度是走路的30%。这个附魔每一级增加15%的速度,也就是一级45%走路速度,二级60%走路速度,三级75%走路速度。无论等级多高速度也不会大于走路速度。这个附魔和灵魂疾行、冰霜行者和深海探索者冲突。

这就是1.19第一个实验性快照加入内容的简单解析,有错误可以在评论区指出。
混淆映射表:Mojang Mapping
反混淆器:MCDynamicExchanger beta.9
反编译器:CFR 0.152