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

Carpet TIS Addition 介绍:规则——更新补丁 v1.33 ~ v1.47

2023-06-08 01:17 作者:Fallen_Breath  | 我要投稿

专栏 CV16172536 的更新补丁

由于修改次数限制的原因,专栏并不适合长期更新,想看最新完整版的规则分析介绍的话,去我的博客就行:https://fallenbreath.me/2022/03/16/introduction-to-carpet-tis-addition/

图片动态根本发不出去,只能拷一份文字版了。专栏文本编辑器的排版一言难尽,就这样吧

创造模式用新增机制

fill指令模式增强 (fillCommandModeEnhance)

增加 /fill 指令中各种模式的功能:增加 softreplace 模式: 尽可能地保留原方块的方块状态,可用于替换楼梯/半砖的材质等

指令例子:

这个指令会将范围内的所有橡木楼梯替换成石砖楼梯,并保留楼梯的方块状态

技术上来讲,该功能并不关心新旧方块的种类是什么,它只管确保那些新旧方块均拥有的方块状态,在 /fill 前后保持不变。 举个例子,在侦测器 / 活塞 / 末地烛三者相互 softreplace 时,它们的“朝向”(facing)方块状态将会保持不变

同步服务端mspt指标数据 (syncServerMsptMetricsData)

向客户端同步服务端的 mspt 指标数据,借此,玩家可使用 F3 + ALT 在调试界面中看到这一服务端的指标。需要在客户端中安装 Carpet TIS Addition 模组

单人游戏的 F3 调试界面中,右下角的那个显示 mspt 的图表可是个好东西。可惜在原版里,多人游戏中用不了这个功能

这条规则的功能即为让调试界面的 mspt 显示功能在多人游戏中也能用,也即让服务端把它的 mspt 数据同步给客户端,进而在客户端显示相关数据

由于需要进行服务端与客户端之间的网络通讯,本规则依赖规则 tiscmNetworkProtocol


TISCM网络协议 (tiscmNetworkProtocol)

TISCM 网络协议的开关

作为一个总开关,这条规则可以一键让所有用了 TISCM 网络协议的规则失效,让 MC 的网络层面上回归原版表现

当然,这条规则默认值是 false,因此你需要把它设置为 true 来使得用了 TISCM 网络协议的规则生效

可以使用指令 /carpet list TISCM_protocol 来列出所有使用了 TISCM 网络协议的规则

创造模式用游戏修改

创造玩家地狱放水 (creativeNetherWaterPlacement)

允许创造模式的玩家在地狱通过水桶放出水。技术上来讲,本条规则对所有 ultrawarm 的维度都生效

都已经是创造模式了,玩家当然是想干什么就干什么,想划水就放水


创造玩家无物品冷却 (creativeNoItemCooldown)

取消创造模式玩家的任何物品使用冷却,例如使用末影珍珠的 20gt 冷却

都已经是创造模式了,麻将为何还要用物品使用冷却逻辑约束玩家


爆炸不影响实体 (explosionNoEntityInfluence)

爆炸不会影响任何实体。这里的影响包括伤害、加速等效果

虽然 carpet 的规则 explosionNoBlockDamage 可以阻止爆炸对方块的影响,但它并不阻止爆炸对实体的影响, 会导致乱飞的 TNT 依然可以把意料之外的实体炸没。这不好,用这条规则给我关

禁用耕地被踩踏 (farmlandTrampledDisabled)

阻止耕地被生物踩成泥土

在设计一些如小黑瓜机这种,使用了生物 + 耕地的机器时,很容易会遇到生物踩烂了耕地的情况。 这挺烦人的,尤其是在做概念验证的时候,毕竟这时我们更关心其他数据,并不在意耕地是否足够安全

拍扁三角形分布 (flattenTriangularDistribution)

本规则仅在 Minecraft >= 1.19 中存在

把 Minecraft 随机数发生器的三角形分布改为均匀分布。借此,边界情况就更有可能发生了

在 MC 1.19 版本之前,fabric carpet 提供了一个被命名为 extremeBehaviours 的规则,它能使得一些依赖正态分布随机数生成器的游戏机制更频繁地产生极端情况。 这些机制包括:投掷器喷出物品的随机速度、箭矢的基础伤害、生物生成时的 FOLLOW_RANGE 属性随机调整等

正态分布的随机数生成器产生的结果是无边界的,在极端情况下可能会产生偏差很大的随机值。extremeBehaviours 正是为了测试机器在这些极端情况的稳定性而生。 不过随着 MC 1.19 的到来,麻将把各种正态分布换成了有界的三角分布,fabric carpet 也因此将 extremeBehaviours 规则删除了

但是,就算是三角分布,它的边界情况依然也是罕见的,设计机器时也依然存在着测试边界情况的需求。 那么不如整一个 flattenTriangularDistribution,把三角分布替换成值域相同的均匀分布,让边界情况更容易发生

在本规则开启前后,相关随机数生成器的概率密度函数变化如下所示。左侧为原来的三角分布,右侧为修改后的均匀分布


重新引入瞬时方块更新逻辑 (instantBlockUpdaterReintroduced)

本规则仅在 Minecraft >= 1.19 中存在

重新引入 1.19 以前的瞬时方块更新逻辑。本规则让基于栈溢出的更新抑制在 1.19+ 中再次可行

它还可以让微时序记录器的记录结果更加清晰有逻辑,如 1.19 以前的版本一样的清晰

MC 1.19 引入了人工栈数据结构来处理 MC 方块更新,这导致 1.19 之后,方块并不会瞬时发出更新了。这带来了两个影响:

  • 足够长的方块更新链不再能引发 JVM 栈溢出异常,这导致基于方块更新栈溢出的更新抑制不再可行

  • 方块更新之间的代码调用关系从直接调用变成了间接调用,变得更加晦涩。这不仅仅使得代码阅读的难度增加,还会使得微时序记录器的输出变得抽象起来,增加借助微时序记录器分析时序的难度

好在麻将并没有完全移除瞬时更新的逻辑,因此可以整条规则把 1.19 以前的瞬时方块更新带回来

参考 Void514 的观点,在这里,一个操作是“瞬时”的,指:在操作的结果发生时,触发操作的原因位于当前 JVM 的函数调用栈上

矿车搭载乘客最小速度 (minecartTakePassengerMinVelocity)

决定矿车将其附近实体作为乘客搭载上车所需的最低水平方向速度(m/gt)。将其设为 0 以让矿车忽略速度,像船一样总能将附件实体载上车。将其设为 NaN 以让矿车永远不能把实体载上车

一个矿车想要把附近的生物吸上车,需要满足其在水平方向上的速度大于 0.1m/gt(2m/s)这个条件,这意味着静止 / 慢慢移动的矿车无法把生物吸上车

在设计机器时,这个矿车吸生物上车的条件有时候就挺烦人的。为了把生物装进矿车里,我们还得专门搞一段铁轨来给矿车加速。 如果矿车能像船一样,蹭着生物就能吸上车,那就最好了。多说无益,整条规则改之

由于本规则修改的是“矿车搭载乘客的最小速度”,因此你可以把它设置成不同的取值,来满足不同场景下的需求:

  • 把值设成 0:矿车像船一样,蹭着生物就能把生物吸上去

  • 把值设成 NaN:矿车无论怎样都不会把生物吸上去


橡树长成鸡腿树百分率 (oakBalloonPercent)

橡树树苗长成鸡腿树(fancy_oak)的概率,使用百分率作为值。如,0 代表没有鸡腿树,50 代表有 50% 的概率长成鸡腿树,100 代表总长成鸡腿树

将其设为 -1 以禁用本规则并使用原版逻辑(10% 概率长成鸡腿树)

若想高效地测试树场对鸡腿橡树的兼容性,与其对着原版的 10% 鸡腿树概率慢慢尝试,不如开条规则来修改原版的概率。必出鸡腿树 / 必不出鸡腿树,任你选择

禁用侦测器检测功能 (observerNoDetection)

不准侦测器在受状态更新时添加计划刻事件。可以认为这条规则禁用了观察者的检测功能

在使用 /fill/clone 指令、结构方块、worldedit 等方式来修改世界时,有时候会莫名其妙地把侦测器给激活了。 与其想办法关掉方块更新,排除各种误触的地方,不如直接禁止侦测器检测方块变化,从源头上解决问题

值得注意的是,不要在机器开着的时候启用这条规则,毕竟这条规则的作用范围是整个服务器


坚韧的凋零玫瑰 (toughWitherRose)

由死而生,凋零玫瑰非常坚韧,能在任意表面上种植。该规则移除了凋零玫瑰所有的放置约束,这意味着你可以将零玫瑰种植在任何地方。

在你想用更新抑制的凋零玫瑰做凋灵骷髅塔时,这条规则可以帮你一把

背景知识:凋灵玫瑰在受到状态更新时会检查其是否处于合法的状态,如果不合法则立即掉落

如规则介绍所述,在设计把凋灵玫瑰种在地狱砖上的凋灵骷髅塔时,很容易因误触而整掉了一整片的凋灵玫瑰,非常烦人

本条规则的作用就是去除凋灵玫瑰的一切放置限制,让凋灵玫瑰可以种在任何方块上。在什么地狱砖,铁轨,岩浆,甚至空气之上,都能种凋灵玫瑰


亡灵生物别在阳光下着火 (undeadDontBurnInSunlight)

阻止亡灵生物在阳光下着火。不过他们的头盔依然会在阳光下损失耐久

有时在主世界测试一些与亡灵生物相关的机器时,还得记得给做个遮阳天花板,防止亡灵生物被晒死。 这挺烦人的,不如整个规则给亡灵涂足防晒霜。毕竟绝大部分情况下,给最终实装版本加个天花板防晒是很容易的操作

虚空伤害数值 (voidDamageAmount)

修改虚空伤害的数值

让掉虚空的生物死快些,原版虚空的 4 点伤害有点太低了,直接加到 1000 点

虚空伤害忽略玩家 (voidDamageIgnorePlayer)

阻止玩家受到任何虚空伤害。对玩家完全无害的虚空,好耶!

有些时候,你想飞到虚空深处,来从远处贴近世界底部的机器的整体运行情况,但又担心会被无视游戏模式的虚空伤害搞死。 不如整个规则,移除虚空对玩家的伤害,让玩家想在虚空逛多深逛多久都没问题

生存模式用新增特性/bug修复

玩家重生丢失客户端设置数据修复 (clientSettingsLostOnRespawnFix)

修复在玩家重生或从末地进入末地门时,新创建的玩家实体未迁移旧玩家实体中储存着的客户端设置的问题。因此依赖客户端设置数据的模组总能正常的工作,如本模组以及 worldedit 模组的服务端翻译

对于玩家重生,以及玩家从末地进入末地门这两个操作,MC 会重建一个玩家实体对象,并把原实体的数据复制到新实体上

可惜,在这个复制数据的过程中,麻将忘了复制客户端配置相关的数据,这包括但不限于玩家客户端的语言设置。 这会导致一些依赖客户端设置数据的 mod 无法按照预期工作,比如 worldedit 和本 mod 的文本在玩家重生后都变成了英文

这是个 bug,虽然不严重,但挺影响游戏体验的,得重进服务器或者手动调一下客户端设置,才能恢复正常

有虫,得修,/carpet setDefault clientSettingsLostOnRespawnFix true,done

技术上来讲,在从旧玩家实体复制数据到新玩家实体的过程中,这条规则会重新将曾经用于旧玩家实体的客户端设置数据包(ClientSettingsC2SPacket)应用到新的玩家实体上。

其他规则

射线追踪命令开关 (commandRaycast)

启用 /raycast 命令用于分析射线追踪

/raycast 指令的开关及其权限控制

移除实体命令开关 (commandRemoveEntity)

启用 /removeentity 命令用于直接在世界中抹除目标实体

/removeentity 指令的开关及其权限控制

睡眠命令开关 (commandSleep)

启用 /sleep 命令用于制造卡顿

/sleep 指令的开关及其权限控制

反混淆崩溃报告堆栈追踪 (deobfuscateCrashReportStackTrace)

反混淆崩溃报告中输出的堆栈追踪

在分析生产环境下游戏崩溃的日志时,一份反混淆好的堆栈追踪所提供的阅读体验可比混淆版的堆栈追踪好多了

假人远程召唤 (fakePlayerRemoteSpawning)

使用 /player 指令远程召唤假人的权限需求。在这里,“远程”指的是被召唤的假人位于 16m 以外,或另一个维度

禁止远程召唤 bot,这可一点都不像一个“小号”能做的事情

移动记录器 (loggerMovement)

移动记录器的开关 / 权限等级需求

移动记录器(movement logger)并不是一个适合在生存服中使用的记录器,毕竟它容易刷屏 + 会暴露其他玩家的位置信息,最好还是加个权限开关来控制下

stop指令两步确认 (stopCommandDoubleConfirmation)

为 /stop 指令添加两步确认机制,以防止误触导致意外地关掉了服务器。你需要在1分钟内输入两次 /stop 指令来关闭服务器。该确认机制仅对玩家有效

一波操作猛如虎,/st + tab 一顿敲,一按回车服务器无。这种输错指令把服务器关掉了的情况是小天才最喜欢干的事,比如在敲 //stack 时少打了个 /

对于这种手抖问题,加一个两步确认就能很好的避免了


阻止更新抑制崩溃 (yeetUpdateSuppressionCrash)

阻止服务端因栈溢出异常造成崩溃。具体功能实现类似 carpet 的 updateSuppressionCrashFix 规则,但包含更多信息

并不是所有版本的 fabric carpet / carpet extra 都提供了更新抑制防崩服的规则。对于那些缺失 updateSuppressionCrashFix 的场景,就是本规则派上用场的时候了

借助微时序记录器同款游戏阶段记录功能,该规则可在更新抑制崩服时提供更加丰富的信息


若 fabric carpet / carpet extra 存在规则 updateSuppressionCrashFix,本规则会自动禁用,以避免发生冲突

  • 移植自:

    • fabric carpet 1.4.50 的规则 updateSuppressionCrashFix

    • TISCarpet13 build238 的规则 yeetUpdateSuppressionCrash

  • 冲突版本:

    • fabric carpet: [1.4.49, 1.4.76]

    • carpet extra: [1.4.14, 1.4.43]


Carpet TIS Addition 介绍:规则——更新补丁 v1.33 ~ v1.47的评论 (共 条)

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