23w41a是Java版1.20.3的第2个快照,发布于2023年10月11日,为所有版本加入了Realms支持,加入了饰纹陶罐的新功能,重新加入了与函数有关的命令,改进了命令执行限制有关机制,并修复了一些漏洞。
新内容
常规
- 粒子
- 加入了
dust_plume
粒子。
更改
方块
- 饰纹陶罐
- 现在可在其中放置最多一叠的同类物品。
- 现在漏斗、漏斗矿车和投掷器可以向饰纹陶罐中放置物品,和/或从其中去除物品。
- 红石比较器现在可检测其中放置的物品数量。
- 玩家现在可以与之交互,并可以在其中放置物品。
- 玩家的交互动作会使它们wobble,并且发出频率为11的振动。
- 没有对应界面,其中的物品需要玩家将其破坏后才能取出。
- 现在饰纹陶罐可被弹射物击毁,使其碎裂并掉落其所有内容物。
- 现在可以堆叠至64个。
- 方块状态
cracked
为true时,无论用何种方式破坏,饰纹陶罐都会碎裂。
非生物实体
- 常规
- 现在所有无生命的实体,其名称都会在被玩家观察且
CustomName
NBT标签被设置时显示,或在CustomNameVisible
NBT标签被设置时一直显示,与所有有生命的实体类似。
命令格式
- 函数
- 更改了
/function
命令,以更好适应新的/return
命令。 - 现在,任何函数只在其使用了
/return
命令,或在其查询或实例化过程中出错时有返回值。故/function
命令现在不再返回(甚至显示)命令执行期间的命令执行数。- 会导致执行错误的情况如下:
- 调用不存在的函数。
- 调用空的函数标签。
- 宏的实例化失败。
- 会导致执行错误的情况如下:
- 本段中的“结果”一词指可被
/execute store
命令存储的值。 - 取消了使用
/execute store ... run 函数名
命令执行函数时,函数中所有命令都会被执行存储操作的命令行为。- 这表示对
函数名
的单次调用最多只会存储一次结果(如果函数内部没有调用/return
命令则为0次)。 - 对于具有多个条目的函数标签,函数结果将被累加,但部分结果将在每个函数的末尾处被存储。
- 这表示对
- 改进了函数现有的限制条件,以更好适应新的执行规则,并且避免更广泛的漏洞利用:
- 现在即便是从命令行执行的命令也会受到限制,与放置在函数中的命令表现一致。
- 例如,所有由
/execute as @e run 函数名
调用的函数都会计入相同的限制中。 - 命令方块所产生的命令执行仍独立计算。
- 例如,所有由
- 现在,游戏规则
maxCommandChainLength
在限制函数执行时会将下列情形计入“操作数”:- 单命令执行上下文的命令执行。
/execute
命令中一个阶段的命令执行(无论其中有多少令执行上下文被修改过)。- 函数调用。
- 加入了新的游戏规则
maxCommandForkCount
,用于限制如/execute
的单状态函数所能创建的命令执行上下文的总量。- 例如:如有5个实体,执行
/execute as @e
命令会创建5个命令执行上下文,而/execute as @e at @e
则会创建25个(5×5)。
- 例如:如有5个实体,执行
- 现在即便是从命令行执行的命令也会受到限制,与放置在函数中的命令表现一致。
/execute
- 重新加入了
(if|unless) function
条件子命令。- 用于执行一个函数或函数标签,并检查其返回值是否满足条件。若指定的是函数标签,无论结果如何,标签内靠前的函数都会被执行。
- 语法:
... (if|unless) function <function> -> execute
- 参数:
function
:要执行的函数或标签。
- 满足以下条件时,函数才会执行:
- 必须至少成功执行一个函数才能匹配成功。
- 函数成功执行必须满足下列条件:
- 使用
/return
命令返回值。 - 返回值不为0。
- 使用
- 如果没有任何函数以
/return
命令退出,if
或unless
都不会执行。
/return
- 重新加入了
run
子命令,语法:/return run ...
。- 此函数用于从所指定的命令中取得返回值,并将其作为其自身返回值返回给函数。
- 如果指定的命令不返回任何值(如调用一个没使用
/return
命令的函数),/return
命令不会执行,函数会继续执行。 - 如果指定的命令执行失败,返回值为
0
。 - 除此之外的其他情况下,此命令的表现与在
/return
命令中手动指定return
值的表现一致。 - 如遇会产生执行分支的情况(如执行
/return run execute as @e run 一些命令
命令),最先被执行的命令的返回值会被返回。- 如果没有任何命令被实际执行(如执行
/return run execute if @e[不可能的条件] run 一些命令
命令),函数将不会返回,并继续执行后续命令。
- 如果没有任何命令被实际执行(如执行
- 如果指定的命令不返回任何值(如调用一个没使用
- 此函数用于从所指定的命令中取得返回值,并将其作为其自身返回值返回给函数。
常规
- 数据包
- 将数据包版本号更改为
20
。
- Realms
- 现在在所有版本(包括所有非正式版)中可用。
- 只要有处于活动状态的Realms订阅,任何玩家都可以创建一个免费的快照版Realm。
- 快照版Realm与普通Realm分开,以避免出现任何问题,从而影响普通Realm。
- 最近一次进入的世界的版本会在Realm列表中显示。
- 可在新创建的Realm世界中使用实验性功能。
修复
- 修复了26个漏洞
- 1.20前正式版的漏洞
- MC-16937 — 禁用PvP时,将箭射入下界传送门可以对任何人造成伤害。
- MC-50319 — 有主箭矢离开传送门时会丢失其所有者信息。
- MC-81656 — 决定凋灵之首是否为蓝色的字段不会保存到NBT中,也不会从NBT中读取此字段。
- MC-118403 — 在队伍中的唤魔者召唤出的恼鬼不会加入对应队伍中。
- MC-143266 — 嵌套的函数调用会在其加入执行队列前重新评估
maxCommandChainLength
游戏规则的值。 - MC-143269 — 已生成命令执行队列时,受到
maxCommandChainLength
游戏规则的影响,函数中的嵌套的中间函数会被跳过。 - MC-189227 — 教学提示上使用的是旧纹理。
- MC-198113 — 不完整的命令不会使函数停止加载。
- MC-233276 — 玩家可以喂食满好感度的驴、马、羊驼或骡,此时手部动画不显示。
- MC-234323 — 文本解析有性能问题。
- MC-236341 — 玩家可以给成年驴、马或骡喂食干草捆,但不播放对应的手部动画和动物的进食动画与进食声音。
- MC-236501 — 被重命名过的矿车和船物品,放置后,此名称不显示在其实体的上方。
- MC-249408 — 运输船放置后其名字会丢失。
- MC-257786 — 游戏会花很长时间来处理玩家离开Realms组、接受或拒绝Realms邀请的操作。
- MC-260576 — 不完整的
/execute summon
命令仍会执行。 - MC-262105 — 如果玩家非常靠近一个实体的判定箱时,玩家的刷扫动作会被终止。
- 1.20的漏洞
- MC-261682 — 被刷扫的方块超出范围后,刷扫动作会继续进行。
- 1.20.1的漏洞
- MC-263575 — 刷扫可疑的沙子或可疑的沙砾,若刷扫过程被半途终止,方块在物品完全缩回前不受重力影响。
- MC-263660 — 告示牌和悬挂式告示牌的“告示牌:晃动”字幕是一样的,会导致翻译问题。
- 1.20.2的漏洞
- MC-264595 —
/return
命令位于其他函数中时不能执行函数。 - MC-264699 — 只有命令不以
/return run
开始时,函数才能返回命令输出。 - MC-264710 — 从函数中执行的
/execute if function
命令总是失败,而/execute unless function
总是成功。 - MC-264880 — Programmer Art资源包的GUI滑块使用的是新纹理。
- MC-265516 — 某些Realms菜单中的“取消”按钮是菜单中的唯一元素,但仍可以通过键盘导航键取消选择。
- 上个开发版本的漏洞
- MC-265647 — 乘船时,手臂持盾的位置不正确。
- MC-265656 — 不再能用剪刀雕刻南瓜。
来源:Minecraft Wiki