![[SBW] 抛射体区块加载](https://cdn8.newbeebox.com/nbbnext/2026/08/14/c02c1e2018937be6050ef61ea08f52ab.png)
[SBW] 抛射体区块加载
服务端修复,使Superb Warfare和PointBlank的火箭、炮弹及子弹在未加载区块中飞行时不会卡顿。
[SBW] 弹射物区块加载
Superb Warfare + PointBlank (FCL) 的服务器端附加组件:让火箭弹、炮弹、子弹和无人机在飞越未加载区块时不会冻结。
问题
Superb Warfare 和 PointBlank (FCL) 中的远程武器发射的弹射物会远远飞过已加载区域:
- SBW 仅原生强制加载 4 类弹射物(制导导弹、中型火箭、加农炮和迫击炮弹)的区块。其他所有类型——NURS 火箭弹、机炮炮弹、炸弹、RPG 火箭弹、7.62/12.7 子弹——在到达已加载地形边缘时会冻结,并且永远不会再飞回来。
- PointBlank/FCL 发射器火箭弹(RPG-7V2、RPG-26、M72、AT4、SMAW、卡尔·古斯塔夫)存在同样的问题。
- FPV/Mavic 无人机(uncomplicated-fpv)在飞出已加载区域时,会悄无声息地失去信号链路。
同时,SBW/pointblank 弹射物只会在 distance <= simulation-distance 的区块中 tick。原版区块加载由玩家驱动——炮弹将要落下的地方,没有人站在那里。
此模组的作用
在原版 ServerLevel.addFreshEntity 上挂载一个钩子,将每个新弹射物送入公开追踪器 API。对于每个被追踪的弹射物,该模组会:
- 按速度分类(子弹 / 火箭弹 / 重型炮弹 / 炸弹)——仅一次,按类别缓存。
- 沿其弹道栅格化一片区块走廊(DDA,宽度可配置),并带有自适应前瞻(
速度 × 间隔 × 倍率),确保弹射物永远不会飞出已加载的路径。 - 通过原版区域票证(region tickets)在正确的等级(
min(3, simulation-distance))上保持这些区块的实体 tick,使弹射物能真正穿过它们。 - 自动释放一切:带引用计数的共享票证(同一区块中的 100 颗子弹 = 1 张票证)、TTL 过期(最后一次刷新后约 5 秒)、智能更新(仅在航向/速度实际改变时重新计算走廊)。
特性
- 即插即用:将 jar 放入服务器的
mods/文件夹即可。无需集成,无需配置。 - 覆盖所有继承基础类的实体:SBW 弹射物 + FCP、VVP 和 DragonRise 载具、pointblank
ProjectileLike实体、uncomplicated-fpv FPV/Mavic 无人机——未来的附加组件会自动覆盖,无需新增 mixin。 - 公开 API(
ProjectileTracker.register(entity[, profile])):任何模组都可以注册自己的弹射物,无需 mixin。 - 开销极低:时间轮(timing wheel)每 tick 处理一个桶——无需每 tick 扫描所有弹射物;当没有变化时跳过走廊重新计算。
- 默认安全:
- 仅在区块确实未进行实体 tick 时放置票证(
smartChunkLoading), - 世界边界保护(不会在边界外生成区块),
- 所有硬性限制均可通过
<world>/serverconfig/sbwchunkload-server.toml配置:最大追踪弹射物数量(300)、最大活动票证数(512)、最大追踪距离(2000 格)、最大追踪寿命(1200 tick)、静止物移除(落地的手雷/卡住的火箭弹会释放其票证), - 无人机仅在空时被追踪。
- 仅在区块确实未进行实体 tick 时放置票证(
- 调试命令:
/sbwchunkload status(权限 2)显示追踪数量和移除原因;/sbwchunkload config打印当前生效的设置。
为 PWP 打造
此模组专为 PWP 打造——一个战术小队射击 Minecraft 服务器:类似 Squad 的玩法,包含票数、占领点、小队、前哨基地、补给后勤、全套载具和无人机作战。当火炮、载具机炮和 FPV 无人机成为游戏核心时,弹射物在区块边界冻结并非边缘情况——而是整场比赛的关键。PWP 由 Superb Warfare、PointBlank、uncomplicated-fpv 和其他战斗模组驱动,而这个附加组件正是让远程战斗在那里真正可行的关键。
加入 PWP 社区 Discord:https://discord.gg/4SMwkQMEAP
需求
- Minecraft Forge 1.20.1
- Superb Warfare 0.8.9+(必需)
- PointBlank 1.11+(必需)
- 无人机支持:uncomplicated-fpv(自带 GeckoLib 依赖)
安装
将 jar 放入服务器的 mods/ 文件夹即可。客户端不需要此模组(仅限服务器端;在客户端安装无害但无意义)。
配置
所有内容均可通过 <world>/serverconfig/sbwchunkload-server.toml 配置(首次启动服务器时创建):
enabled、trackSbwProjectiles、trackPointblankProjectiles、trackDronessmartChunkLoading、adaptiveLookahead、predictionMultiplier、corridorWidth、ticketIntervalTicks、ticketTTLTicks- 各配置文件间隔和前瞻:
bullet.*、rocket.*、heavy.*、ballistic.*、drone.* - 硬性限制:
maxTrackedProjectiles、maxActiveTickets、maxTrackDistanceBlocks、maxTrackAgeTicks、stationaryThresholdUpdates debug(周期性统计日志)
大多数值可由 Forge(serverconfig 重新加载)热更新——无需重启。
常见问题
我的炮弹仍然冻结。 检查服务器的 simulation-distance(server.properties)。票证放置在 min(3, simulationDistance) 级别——实体只在 distance <= simulationDistance 的区块中 tick,因此 simulation-distance 为 2 的服务器上,效果会在距离任何玩家 32 格之外失效。将其提高到 4 以上可实现有效的远程射击。
对 TPS 的影响? 极小:每 tick 一桶工作量,仅在航向/速度变化时重新计算走廊,每个区块共享票证,所有内容在弹射物消失后约 5 秒释放。
无人机仍然失去连接? 该模组在无人机飞行时保持其区块 tick;降落的无人机会按设计释放其票证(地面无人机不能作为区块加载器)。
在单人游戏中有效吗? 有效——内置服务器也是服务器。
许可证
保留所有权利。非开源。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。