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

Minecraft 1.19实验性快照1 代码解析

2022-02-18 19:56 作者:Nickid2018  | 我要投稿

令人激动的1.19快照来了!这个版本最重要的更新就是加入了deep dark及相关的生物、物品和方块,接下来将一一介绍。

一. Deep Dark群系和Ancient City结构

这个版本新加入了Deep Dark地下群系:

种子:-7152941486238939813

这个群系的最佳放置要求为:任意温度区间,任意湿度区间,大陆性介于0.825~1.5,任意侵蚀度区间,深度0.7~1.0,任意奇异度区间。

和蘑菇岛类似,它不会自然生成怪物(当然动物在此群系也无法生成),这主要是为了避免Warden一直寻敌导致不会消失。但是刷怪笼在这个群系能起到作用,下图就是在deep dark群系中废弃矿坑生成的刷怪笼。

Deep Dark群系内废弃矿坑的洞穴蜘蛛刷怪笼

Ancient City是新的结构,只能在Deep Dark群系内生成。结构的spacing是24,seperation是8,盐为20083232。

它的结构很大,和要塞差不多,含有很多的宝箱和一系列Sculk方块。

二. Sculk CatalystSculk方块

这个版本加入了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,那么平均杀死两个苦力怕或一只僵尸猪灵就能获得一个Sensor。

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

Minecraft 1.19实验性快照1 代码解析的评论 (共 条)

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