
大家好!
以下是更新 7 的预发布补丁说明,我们将每周进行更新。
和以往一样,如果遇到任何问题,可以通过游戏内的错误报告器进行反馈,也可以通过反馈请求网站提交您的建议。提交时请务必注明“预发布”字样。
要访问预发布版本:通过启动器 → Setting → Pre-Release 启用。
感谢大家的持续支持!
——Hytale团队
预发布版(更新 7,第 2 部分)
见本帖楼下。
预发布版(更新 7,第 1 部分)
2026年9月3日
衷心感谢 Blovien、Nullicorn 和 NoctuaAstrum 为本更新带来的修复、功能和优化。你们的社区贡献让 Hytale 变得更美好!
第一章内容来袭!
本次预发布版我们包含了即将到来的第一章的第一波内容!这是未来几周内数波内容中的第一波,这些内容仍在积极开发中。其中部分内容,尤其是符文能力系统,在第一章正式发布前会有较大变动。您的报告和反馈对我们修复问题和了解您喜爱的内容都有巨大帮助,所以请务必告诉我们您的想法和体验!在本预发布版中,第一章内容主要通过创造模式获取。
移动与战斗
- 引入符文技能系统!收集符文,然后将其放入符文羁绊之像中,以增强你的战斗能力。
- 新增初始五种符文:
- 符文:狂怒 —— 引导原始怒火,提升造成的伤害和受到的伤害。
- 符文:火球 —— 发射一颗火球,撞击时爆炸。
- 符文:淬毒 —— 为武器淬毒,攻击会叠加中毒效果。
- 符文:裂地猛击 —— 撕裂大地,迸发地刺将敌人击飞。
- 符文:风之冲击 —— 为武器注入风元素,使接下来三次攻击发出穿透性的风刃。
- 滑翔系统已重做。现在可以通过按下/释放冲刺键来俯冲和上升。滑翔伞现在展开时会保持你的速度。
NPC 与实体
- 重做了大量与第一章相关的 NPC,包括:
- 哥布林打手 —— 轻型近战单位,喜欢蜂拥围攻敌人。
- 哥布林矿工 —— 重型近战单位,拥有强力的跳跃攻击。
- 哥布林守卫 —— 重甲哥布林,持盾防御。
- 哥布林投弹手 —— 热爱炸弹的远程单位,拥有爆炸性武器库。
- 哥布林喷火者 —— 危险的远程单位,装备火焰喷射器。
- 哥布林老饕 —— 体型庞大、贪食的巨型哥布林。
- 冲锋型 NPC 的加速和减速现在可以更精细地调整。
世界与方块
- 新增多种方块,包括:
- 火燎铜方块组
- 火燎铁方块组
- 哥布林铁方块组
- 一组哥布林装饰物
- 金方块组更新了模型和纹理润色。
- 实例编辑现在允许你破坏、收集和放置方块,即使实例本身通常不允许这些操作。
- 服务器规则变更现在会立即影响玩家,因此生命值条、战斗文本、护甲隐藏以及放置/破坏方块的规则都无需离开并重新加入服务器即可更新。
- 在禁止破坏方块的世界中,爆炸不再破坏方块。
- 重做了恐怖浅滩中的虚空事件积累方式,现在会在固定时间后升级。
物品与交互
- 哥布林为第一章带来了几种小工具:
- 残料钻头 —— 一种采矿工具,可同时破坏多个方块。
- 望远镜 —— 放大视野,观察远处发生的事。
- 残料滑翔伞 —— 让你翱翔天空的工具。
- 火箭靴 —— 时尚鞋履,提供二段跳能力。
- 钩爪(及钩爪锚点) —— 用于在世界中酷炫地穿梭。
- 洒水壶的攻击能力已被移除。
触发功能域
- 触发功能域现在可以设置你的重生点、移动世界出生点,或清除你的重生点。
- 触发功能域的标签条件现在可以将一个标签与另一个标签进行比较,而不仅仅与固定值比较。
- 显示事件标题触发功能域效果现在有了样式选项,取代了旧的“是否主要”开关,让你直接选择标题外观。其字段标签也再次正确显示。
- 在创造模式快捷设置中加入了激活触发功能域开关。关闭后,你可以穿过自己的触发功能域而不会触发它们。
界面与体验改进
- 传送门世界中的传送门面板已重新设计!倒计时、传送门名称和进度条都有了新外观。
- 模组现在可以包含完整的世界,安装后这些世界会出现在你的世界列表中,而且即使移除模组,你基于它创建的世界依然保留。
- 增加了启动画面后可出现的一次性全屏公告,让新内容新闻更难被忽略。
- 从模组创建世界现在会先请求许可。
- 模组浏览器中的模组分类现在在卡片、筛选器和详情页上显示可读的名称。
- 在线游戏屏幕现在会用简单文字说明你的好友是否能加入,以及如果不能该怎么办。
- 在在线游戏屏幕添加了复制网络报告按钮。它会复制一份不含地址的简短诊断报告,方便你在寻求帮助时粘贴。
- 在发送错误报告后,报告 ID 旁边增加了复制按钮,可一键获取 ID。
音频
- 尝试使用无法激活的能力时,现在会根据无法使用的原因播放不同的音效,例如充能不足、能力冷却中、武器类型错误等。
性能
- 去重了实体碰撞背后的方块查找逻辑(该逻辑对服务器上每个移动的玩家和生物都会执行)。
- 重做了世界地图,改为分段加载小块而非一整张大图,因此内存占用大幅降低,打开时也不再卡顿。
- 改进了服务器上的方块破坏,计算破坏内容时不再需要停止加载区块。
- 多人游戏会话现在会优先采用直连路径(若存在),避免会增加延迟的替代路径。
面向玩家的 Bug 修复
移动与战斗修复
- 洒水壶和战斧现在在游泳时会正确握持。
世界与方块修复
- 修复了相邻方块放置或破坏时,部分方块可能无法更新的问题。
- 修复了卸载区域可能导致方块忘记在相邻方块放置/破坏后更新的问题。
- 破坏旋转多方块结构后,现在会正确更新周围方块,可能导致支撑方块掉落或流体流动。
- 拾取方块不再触发本应发生在方块破坏时的交互。
- 修复了位置过高或过低的传送器可能无法正常工作的问题。
NPC 与实体修复
- 站在浅水中的生物不再会在没有放松约束的情况下自动走入深水。这也修复了 NPC 可能卡在液体附近的问题。
- 靠近目标的冲锋型 NPC 现在只会转身面向目标,而不会循环整个内部冲锋状态。
- 会话期间收集的记忆不再在会话结束时丢失。
物品与交互修复
- 修复了在禁止放置、破坏或收集的世界中,交互提示仍出现在方块上的问题。
- 升级后的工作台已全票通过,决定保留新外观,不再在每次使用时变回旧外观。
- 升级工作台上的制作动画现在也会正确循环。
创造工具修复
- 设置为应用于投射物来源的触发功能域现在会正确生效,而不再将投射物本身视为来源。
- 建造工具现在会在离开世界时停用。
界面与生活质量修复
- 世界列表中的世界图像现在只显示最新的截图,而不是旧版本。
- 修复了启动时若网络缓慢,好友列表和邀请可能无法正确显示的问题。
- 修复了如果在会话中途开启社交功能,社交侧边栏无法打开的问题。
- 修复了大型好友列表中显示默认头像的问题。
- 修复了正确头像会回退到默认头像的问题。
- 通知菜单现在在有大量待处理好友请求时打开速度大幅提升。
- 未配置图标的物品现在会显示神秘的“未知物品”图标。
- 从模组浏览器安装模组现在能正常工作了,即使你已手动将模组内容放入相应文件夹。
- 模组浏览器不再会在因同名文件导致问题时,误报连接问题阻止模组安装。
图形与渲染修复
- 回滚了近期对半透明表面渲染的更改,因为它引起了视觉问题。
- 修复了引擎电影编辑器中,新场景与现有场景名称几乎相同时可能导致新场景丢失的问题。
- 清理了引擎电影编辑器相机视图遗留的内存。
- HUD 的透明部分不再意外变暗。
- 单人世界中的视觉效果如果设置了持续时间,现在在世界暂停时也会暂停该持续时间。
- 纹理过大致使溢出的 NPC 现在会渲染为黑色,而不是隐形。
- NPC 现在再次正确投射阴影。
音频修复
- 环境世界音效现在会在离开世界的瞬间停止,而不再偶尔在主菜单上循环几秒。
稳定性修复
- 修复了离开世界或在服务器间切换时可能发生的崩溃,以及随之而来的小内存泄漏。
- 修复了因损坏或恶意网络数据嵌套过深(命令树、物品类别或交互链)而可能导致的崩溃。
- 修复了加入一个同时运行多个大型自定义皮肤的世界时可能发生的崩溃,现在无法容纳的纹理会跳过并发出警告。
- 修复了服务器刷新界面时可能发生的崩溃,该问题还会导致菜单中的物品和角色预览损坏。
- 修复了丢弃数量为零的物品堆时可能发生的崩溃。
- 修复了序列化分叉交互时可能发生的崩溃。
- 修复了将无图标的物品拖到实体工具上时可能发生的崩溃。
- 修复了在较老 NVIDIA 显卡(GeForce 400 至 700 系列及对应笔记本版本)上可能发生的崩溃。
- 修复了每次关闭显示角色的菜单时都会产生的内存和图形泄漏,因此长时间开关菜单不再消耗内存。
- 修复了游戏过程中、切换世界和关闭游戏时的多处内存和图形泄漏,长时间游玩不再导致内存占用攀升。
- 修复了单个玩家的连接问题可能导致服务器上其他所有人网络中断的故障。
- 修复了将共享世界切回私有时,世界有时仍可访问数秒的问题。
- 修复了当某个存档的设置文件损坏时,世界列表无法加载的问题。
- 世界地图不再会在纹理限制较小的显卡上、高视距下永久卡死。
- 修复了传送方块在已卸载区域延迟后自我移除时可能导致的短暂服务器卡顿。
- 服务器关闭时现在会干净地断开连接,你无需再等待连接超时。
- 如果保存的视距高于 Hytale 允许的最大值,服务器和世界现在不会拒绝启动,该值现在会被限制在 32 个区块。
面向模组制作者的更改
世界生成
- 更新了公共 HytaleGenerator 文档,可在此处的“pre-release”下找到。
- 在资源及节点编辑器中移除了 GradientWarp Density 节点过时的 2D 和 YFor2D 选项。应改用 YOverride -> Cache -> GradientWarp 链。
NPC 与实体
- 遭遇战现在可以强制所有参与者进入某种天气。SetEncounterWeather 接受一个 Weather 资源和可选的 TransitionSeconds(默认 2),ClearEncounterWeather 将成员恢复为正常天气。两者均仅限于 InstructionType.Encounter。
- NPC 天气传感器仍只读取世界天气,因此 Sensor: Weather 不匹配遭遇战强制设定的天空。请通过遭遇战状态或信标驱动该行为。
- Example_Boss 遭遇战现在将两种动作作为示例使用:在进入阶段1时强制血月,并在首领死亡时清除。
- MotionControllerWalk 和 MotionControllerBase 上所有有意义的配置值现在都是持有者(holder),因此可以从模板计算和覆盖,而不再固定于角色。
- BodyMotionCharge 中的 ChargeAcceleration 已移除。新的 ChargeAccelerationDistance 和 ChargeDecelerationDistance 以格数定义每段加减速距离,而非设置速率。仍然使用旧键的角色在加载时会发出警告并丢失该行为。
- RemovedBlockSet 也已移除。IgnoredBlockSet 现在覆盖其功能,冲锋探测将那些方块视为不碰撞且可呼吸,因此只列出冲锋真正穿过的方块。
- 冲锋现在可以在距目标选定距离处停止。ChargeDistanceMode 选择如何测量该距离(MaxRange、TargetDist 或碰撞器模式之一),TargetDistanceRange 偏移停止点,正值会在到达目标前停止。
- 冲锋加减速曲线完全可塑。ChargeAccelerationCurveMode 和 ChargeDecelerationCurveMode 选择曲线是解读为速度还是覆盖距离,对应的 MinimumRelativeSpeed、HalfTimeValue、HalfTimeSteepness 和 EndSteepness 键用于调整曲线本身。
- 冲锋中 NPC 的移动行为现在可以修改。ProbeRelaxedConstraints 接受 Wade、Damage、Drop、Breathe 和 Fence,因此角色可以让冲锋穿过液体或窒息方块,而之前会拒绝。
- ChargeState 新增 InStopRange,角色可通过 SensorChargeState 匹配。当目标距离小于配置要求的停止点时,NPC 进入该状态。
- 查找和追踪移动中的 ThrottleIgnoreCount 和 ThrottleDelayRange 现在也覆盖路径受阻的情况,而不仅仅是搜索失败。将 ThrottleDelayRange 设为 [0, 0] 可在遇到障碍时恢复旧行为。
- 奖励现在可以通过遭遇战管理器发放。遭遇战模板上的新 GrantReward 动作指向一个奖励资源,RewardExistsValidator 在名称无法解析时加载失败。
- 移除了废弃的哥布林隐士和拾荒者资源,包括其生成的图标、隐士掉落列表和隐士模型。
- 废弃的哥布林公爵阶段1和阶段3模板现在使用散兵模型。
物品与交互
- 滑翔伞参数为新的移动状态机重建。物品上旧的 FallSpeedMultiplier、HorizontalSpeedMultiplier、TerminalVelocity 和 Speed 值已移除,取而代之的是 Template_Glider 上更广泛的字段,涵盖俯冲和爬升。
- 钉头锤物品动画新增 SwingUpLeft 变体,用于能力。
- 掉落物品现在可以在你指定的距离内合并。新的继承键 MergeRadius 位于 ItemEntityConfig 中,设定掉落物品寻找其他可堆叠物品的范围(以格为单位)。保持 -1.0F 则回退到世界默认值。
方块与预制结构
- TickProcedure.onTick 现在接受 CommandBuffer<ChunkStore> 和区块段 Ref<ChunkStore>,取代之前的 World 和 WorldChunk 参数,因此任何子类重写都需要更新。世界可通过 commandBuffer.getExternalData().getWorld() 获取。
- 指定方块可以在禁止破坏方块的世界中保持可破坏。WorldConfig.BlockBreakingBypassTag 命名一个标签,带有该标签的任何方块在 AllowBlockBreaking 关闭时仍可被破坏。爆炸遵循相同规则。
资源模式与格式
- 地图标记覆盖现在可以更改标记的显示名称。MapMarkerOverride 新增 DisplayName 键,使用本地化键替代,标记覆盖添加命令现在接受 --icon 和 --global 之外的该选项。
- 世界事件现在可以等待时间。新的 TimeCondition 在世界时间达到你设定的 Day、Hour 和 Minute 时完成,任何设为 -1 的部分将被忽略,因此没有 Day 的条件就是每天届时重复的固定时间。
- 世界事件现在也可以通过战役进度门控,使用 GameFlagLevelCondition,在游戏标志达到你设定的 Level 时完成。Comparator 选择比较方式,默认为 GreaterThan。
- 三种新触发效果处理重生:SetRespawnPoint 接受 Origin、Position、Name 和 ClearExisting;SetWorldSpawn 接受 Origin、Position、Yaw 和 ClearPlayerRespawnPoints;ClearRespawnPoints 接受 Name 和 AllPlayers。
- 事件标题现在在 JSON 中选择命名样式。ShowEventTitleInteraction、ShowEventTitleEffect 和 InstanceDiscoveryConfig 都接受 Style 值,旧的 IsMajor 和 Major 键仍然可解码以使现有资源继续工作,但旧属性已标记为弃用,将在未来版本移除。
- UI 精灵新增两个字段:Color 用于为精灵着色并控制其不透明度,KeepLastFrame 使动画停留在最后一帧而不是跳回第一帧。
- 触发功能域标签现在可以像变量一样使用并相互比较。TagCondition 新增 CompareAgainst 字段,选择是将标签与普通值(默认)比较,还是与 CompareTagKey 命名的第二个标签比较。
- 重生点现在可以设置玩家面向方向。PlayerRespawnPointData 和 SetRespawnPointEffect 都接受以度为单位的 Yaw。
- 触发功能域上的事件标题效果现在可以选择谁看到它。ShowEventTitleEffect 新增 Recipient 字段,与 SendMessageEffect 选项相同,默认为触发玩家。
- 新增 Beam 资源类型,位于 Entity/Beams,包含单一 TexturePath 字段。纹理必须位于 Beams/ 或 Trails/ 下。
- WorldEvents 的事件标题动作现在可以选择横幅外观。ShowEventTitleAction 接受可选的 Style 和可选的 Icon,省略 Style 时回退到默认样式。
服务器与权限
- /eventtitle 命令现在使用 --style 替代 --major,副标题行现在默认为空而不是“Event”。
- 实例编辑世界现在加载新的 InstanceEdit 游戏玩法配置,开启 AllowBlockBreaking、AllowBlockGathering 和 AllowBlockPlacement,使限制性规则的实例仍可编辑。
- 服务器管理员现在可以检查哪些区块被荒野系统计为荒野、哪些计为家园。新命令 /wilderness debug [enabled] [player] 会在玩家的世界地图上将这些区块染成绿色和红色,并在世界中绘制对应的立方体。荒野跟踪在 WildernessConfig 中默认关闭,命令会在世界关闭该功能时发出警告。
- 新增用于开发工作的 /beam 命令,包含 entity、position、spawn 和 clear 子命令。
- 服务器现在会拒绝启动,如果其写入的内容会落在启动器的安装文件夹内(每次更新都会修补或清空该文件夹)。检查覆盖工作目录及 --universe、--prefab-cache 和 --backup-dir,并在退出前(代码 11)打印如何将它们移到安全位置的步骤。
- 新增 --allow-install-dir 标志,以及对应的 hytale.allow_install_dir 系统属性,供愿意承担数据丢失风险的人使用。单人游戏运行、--help、--version 以及不带 --bootstrap 的 --bare 启动已跳过此检查。
- 服务器管理员现在可以在已登录状态下运行 /auth login browser 或 /auth login device,无需先注销。现有会话在新登录完成前保持活跃,因此取消或失败的登录不会影响原有登录状态。
重命名与弃用
- 三种密度资源类型已重命名:SmallerThan 现为 LessThan,SmallerOrEquals 现为 LessOrEqual,Select 现为 Selector。
- 另外两种密度资源类型去掉了末尾的 s:Equals 现为 Equal,GreaterOrEquals 现为 GreaterOrEqual。节点编辑器条目也使用新名称。
- 藏宝图目标已移除,连同其所有关联内容。TreasureMap 目标任务、OpenTreasureContainer 和 DestroyTreasureCondition 交互、LookBlocksBelow 和 TagBlockHeight 世界位置条件,以及 TreasureChest 方块实体组件都不再解码,任何引用它们的资源加载失败。已放置的宝藏箱仍可加载,因为服务器会将其组件保留为未知数据。
- IsMajor 已从 ShowEventTitleEffect 中移除。Style 字段覆盖了它,请直接选择你想要的外观,而不再使用布尔值。
- 虚空幽灵资源已合并为一个名称,指向旧 ID 的任何引用都不再解析。Spectre_Void 现已统一为 Void_Spectre,涵盖模型、掉落列表、图标和粒子。
- 资源文件 Spiwer_Web_Full.png 已重命名为 Spider_Web_Full.png,Fig_Blue_.png 现为 Fig_Blue.png,重复文件 Totem_Heal_BeamStart (1).particlespawner 已移除。
音频
- 音乐现在可以通过自定义规则从一首曲目切换到另一首。新增两种资源类型:MusicTransition 和 Stinger,位于 Audio/MusicTransitions 和 Audio/Stingers。
- 切换可以落在音乐边界而非帧上。MusicSync 选择输出曲目的切换时刻(立即、下一拍、下一小节、退出标记或命名标记),DestinationAlign 选择输入曲目在其自己的时间线上从哪里开始。
- 重叠和淡入淡出现在是独立控制。ExitAt 设定切换点,PlayPostExit 让输出曲目播放到文件结尾,FadeOutDuration 和 FadeOutDelay 改为淡出,遵循默认等功率的 FadeCurve。
- 音乐容器新增一批字段:MusicContainer 接受 Tags、Align、AlignMarker、ExitAt 和 Stingers;SegmentMusicContainer 接受命名的 Markers;HorizontalMusicContainer 接受带有 Phases 的 AudioState,因此可以通过状态轴切换阶段。
- Stinger 现在挂载在容器上的自由形式音乐事件上,而不是直接引用。任何内容都可以触发该事件,绑定它的最深活动容器决定播放内容,stinger 在排除组内按优先级排序。
- StateTransition 新增 PostEvent,因此音频状态边可以标记音乐时刻,而无需直接命名 stinger。
协议与网络
- ShowEventTitle 数据包移除了 IsMajor,改为 EventTitleStyle Style 字段,这会破坏任何手动构建该数据包的插件。样式包括 Default 和 Major。
- 世界的游戏玩法配置现在通过新的 WorldGameplayConfig 数据包复制到客户端,包含 WorldConfig、CombatConfig 和 PlayerConfig 结构体,与服务器资源对应。该数据包在玩家加入世界时以及 GameplayConfig 资源重新加载时发送。
- 线路现在承载光束数据。BeamConfig 和 UpdateBeamConfigs 传输光束资源,BeamInstance 和 Beams 组件更新传输放置位置,因此需要匹配的客户端。
插件开发者相关
- 光照计算现在按区块段运行,因此 LightCalculation.init 接受 ChunkStore 和段 Ref,而不再是 WorldChunk;getSkyValue 移除了未使用的 WorldChunk 参数;ChunkLightingManager 公开了 invalidateLightInChunkSections 用于段级失效。
- 光标服务器相机现在支持游戏手柄。右摇杆通过新的 GamepadCursor 助手驱动真实光标,PrimaryItemAction 和 SecondaryItemAction 发送点击数据包,因此扳机键可以触发并在光标所在位置使用物品。
- com.hypixel.hytale.protocol.DurabilityOperator 已改为 ComparisonOperator,因为相同的比较列表同时用于耐久度检查和新的游戏标志条件。引用旧类型的插件代码需要切换,而资产 JSON 和线路格式保持不变。
- WeatherTracker 新增 tryClaimOverride、releaseOverride 和 resolveUnoverriddenWeatherIndex。clearOverrideWeatherIndex 现在也会移除持有者。一个持有者一次持有一个天气覆盖。
- EventTitleUtil 新增接受 EventTitleStyle 的重载。布尔重载仍然可用但已弃用,将来会移除。
- TargetUtil.getTargetBlock 和 getTargetLocation 现在接受 ChunkStore,之前接受 World,直接调用它们的插件代码需要改为传入 world.getChunkStore()。
- 爆炸、方块爆炸效果、方块收获、射线选择器和旁观者相机现在都能在立方体世界中工作,因为 TargetUtil 不再假设单一垂直列。
- ClientFeature 不再包含 DisplayHealthBars、DisplayCombatText、CanHideHelmet、CanHideCuirass、CanHideGauntlets、CanHidePants、AllowBlockPlacement、AllowBlockBreaking 或 AllowBlockGathering,引用其中任何一个的插件将无法编译。这些规则现在位于 GameplayConfig 资源中,而 ClientFeature 保留插件自行注册的移动能力。
- ChunkAccessor.performBlockUpdate 和 WorldChunk.setTicking 已移除。使用 BlockOperations.updateBlockArea 处理整个碰撞箱,或使用 BlockSection.setTicking 配合 ChunkSection.markNeedsSaving 处理单个单元格。注意 updateBlockArea 现在同时接受 ChunkSection 和 BlockSection。
- 方块写入正在迁移到区块段,因此 WorldChunk.setBlock 和 WorldChunk.breakBlock 已弃用,现在委托给 BlockOperations.setBlock。它们还会触发 BlockAnimationModule.onBlockReplaced,因此方块替换动画会为这些写入播放。WorldChunk.setBlockPhysics 以及 BlockTypeModule.SET_BLOCK_SETTINGS 及其填充辅助方法已移除。
- 门和填充交互不再拉取相邻区块仅为了更新它。未加载的相邻区块会被跳过,与其他方块更新行为一致。
- 所有返回 WorldChunk 的区块查找现在都标记为待移除,涵盖 IChunkAccessorSync、IWorldChunksAsync、IWorldChunks、World 和 LocalCachedChunkAccessor。行为不变,但插件编译时会收到弃用警告,应迁移到 ChunkStore.getChunkReference 和段存储。
- 已弃用的 IChunkAccessorSync.getBaseBlock 已移除。填充方块现在通过 BlockOperations.resolveBaseBlockPosition 解析,它接受 ChunkStore 且不会触发区块加载。
- BlockDataProvider 现在在每次方块读取时解析其区块和流体段,而不是在每个字段访问时解析。readBlockId、readRotation、readFiller、readFluidId 和 readFluidLevel 方法现已私有,直接调用它们的插件将无法编译。
- Wilderness 新增 size()、test(int) 和 isValid(),因此插件可以按索引遍历玩家的跟踪区域,并测试单个区块而无需世界坐标。
- 新增 Rewards 内置模块,插件可以用自己的奖励类型扩展它。目前包含一种类型 EntitlementReward,通过 RewardAsset 授予权益。
- 剩余的同步区块访问器成员现在标记为待移除。IChunkAccessorSync 上的九个默认方法、ChunkAccessor.getFluidId 和 OverridableChunkAccessor 都会发出警告,因此 world.getBlock、setBlock、breakBlock 等在每个调用点都会标记。IWorldChunks.waitForFutureWithoutLock 现为私有,无法再从接口外部调用。
- 从区块访问表面移除了十七个未使用的成员,仍然调用它们的插件将无法编译。涵盖 IChunkAccessorSync.getBlockComponentHolder、IWorldChunksAsync.getNonTickingChunkAsync(int, int)、BlockChunk.getSectionRefAtIndex、BlockComponentSection.getBlockReferences、BlockSection.setChunkSection 和 getMaximumHitboxExtent、PaletteTypeEnum.getPaletteId,以及 LocalCachedChunkAccessor 上的十个访问器。请通过段引用(使用 AbstractCachedAccessor 或 ChunkStore.getChunkReference)进行读写。
- 新增内置 Hytale:Beam,包含 BeamComponent,持有 AttachedBeam 条目,每条光束从拥有者的附着点延伸到另一个实体、该实体模型上的节点或固定的世界位置。光束是运行时状态,不会随实体保存。
- BeamComponent.spawn 创建一个复制实体,该实体携带光束但没有模型,用于不属于任何其他物体的光束。它接受可选的生存时间,并通过 DespawnComponent 应用。
- GroundedCondition 交互已从 Abilities 内置模块移入核心服务器,因此交互可以在未加载该插件的情况下使用它。
- 公共常量 ItemMergeSystem#RADIUS 已移除。合并距离现在来自物品配置,通过 ItemComponent#getMergeRadius(ComponentAccessor) 获取,ItemComponent#setMergeRadius(float) 用于在运行时更改。
面向模组制作者的 Bug 修复
世界生成修复
- 修复了 Cache Positions 节点的 SectionSize 引脚。
- 为 Density 节点添加了缺失的工具提示。
- 降低了无效 Normalizer Density 参数(FromMin 等于 FromMax)的错误级别为警告,为模组更新留出更多时间。今后应使用新的逻辑 Density 节点来创建布尔映射。
- 修复了当目标轴为倒置 Y 轴时的 Rotator Density。
- 为配置为锚定水平面的 Plane Density 启用了一项优化。
- 修复了 Switch 和 SwitchState Density 节点读取 Default 状态不一致的问题。
NPC 与实体修复
- 修复了 BuilderMotionControllerWalk.getFenceBlockSet 在配置的方块集为空或缺失时抛出异常的问题。
- 修复了由 NPC 触发的触发功能域效果会触发两次的问题,因此带有单条消息效果的触发功能域不再发送两次相同的聊天消息。DestroyTaggedVolumesInteraction 也应用了相同的防护。
- 修复了关闭 DiagonalMoves 的角色路径寻找崩溃问题。
- 修复了每 tick 重新计算阻塞路径的问题。
- 修复了 NPC 冲锋探测接受无效终点位置的问题。
- 清理了 BodyMotionCharge 配置描述,方便模板作者使用。
- 放置方块的 NPC 现在通过段存储写入,因此放置在高出或低于旧高度带的位置可以正确放置,而不会被丢弃。角色数据中未知的方块类型键会静默跳过,而不是抛出异常。
- 恢复了 _Deprecated 下的废弃哥布林生成标记,包括 Ogre、Scavenger 和巡逻变体,以便仍引用它们的世界可以继续加载。
物品与交互修复
- 清除了物品交互资源中的一批警告。传送器配置、发光蘑菇食用交互、石英砂砾半砖、守卫盾击和法杖交互中的未使用字段已移除,间歇泉环境音效键也已正确拼写。
- 修复了穿透性投射物可能停止 tick 并永远停留在世界中的问题。
方块与预制结构修复
- 方块 tick 过程现在可以在任意高度的区块段中运行。之前计划 tick 在 Y 0 到 319 之外会停止,因此为该范围编写的过程需要适应负坐标和高坐标。
- 触发功能域文本现在可以解析普通书写文本中的标签值,而不仅限于翻译键。SendMessage 和 ShowEventTitle 都支持此功能。
- 修复了格式化文本在遇到无法识别的占位符时丢失字符的问题,因此未知的 {tag} 会原样保留。
资源模式与格式修复
- 在资源编辑器中创建文件夹时,现在会自动创建任何缺失的父文件夹,因此你可以组织全新的资源类型,而无需先创建临时资源。
- Float2ObjectMap 字段的模式验证现在与编解码器实际读写内容一致。生成的键模式接受科学计数法(如 1.0E-4)和以点开头的值(如 .5),不再允许 1x2 等非数字键通过。
服务器与权限修复
- world add 命令现在会告诉你创建成功还是失败,而不再静默丢弃结果。
- 修复了 /fluid setradius 只让填充区域中一个方块流动而不是全部的问题;/block setticking 现在会自己解析区块段,并在未加载时告知你。
- config.json 中的 MaxViewRadius 超出 1 到 32 范围不再阻止服务器启动。该值会被限制并发出警告,文件保留你写入的值。
- 最大视距命令现在拒绝高于 32 的值,而之前是 512。
协议与网络修复
- 对等端现在拒绝嵌套深度超过 32 层的结构,涵盖 FormattedMessage 树、物品类别、命令树和交互链。实际内容远低于该限制。
- UpdateLanguage.Language 现在是必需协议字段而非可选,协议版本已为此增加。该字段和 Connect.Language 也从 16 字符上限扩大到 100 字符,可适配任何 .NET CultureInfo.Name。
插件开发者修复
- 光标服务器相机重新可用。插件在 ServerCameraSettings 中设置 displayCursor 即可恢复光标瞄准,并且每个移动方向都使用前进速度,因此侧移不再比前进慢。
- PlayerMouseButtonEvent 现在在光标相机下点击时触发,携带目标方块或实体以及屏幕坐标,方便从上到下视角实现自定义点击逻辑。
- 修复了在菜单、聊天或页面打开时光标相机仍读取鼠标输入的问题。打开暂停菜单不再导致角色旋转,且 MouseInteraction 数据包不再在 UI 覆盖层后发送。
- 自定义 UI 页面中的 ItemGrid 不再需要 DefaultItemIcon。图标无法解析的物品会回退到未知物品图标,而 DefaultItemIcon 仍可覆盖该占位符。
- 使用来自插件 getCodecRegistry 编解码器的宇宙资源现在会在关闭时写入。最终的刷新已移至新的 ShutdownEvent.FLUSH_UNIVERSE_RESOURCES 阶段,在 SHUTDOWN_WORLDS 之后运行,此时所有插件仍处于启用状态。
- ClientTool 现在会在世界关闭且工具仍处于激活状态时收到 OnActiveStateChange(false),并且该调用在工具释放之前运行。
- 修复了服务器翻译缓存无限增长的问题。I18nModule 现在根据新的 resolveLanguage() 返回的语言来缓存消息,而不再使用原始客户端字符串;queueTranslations() 替换了 sendTranslations(),因此同一连接上的重复语言切换会合并为一次发送。
最后编辑: