跳到正文

Chunk Schedudeler

作者:hd42

高效且可控的区块加载(对服务器友好)。

收藏

截图

介绍

介绍由机器翻译自 Modrinth 原页面,仅供参考。

Chunk Schedudeler

高效且可控的区块加载(对服务器友好)。

bisecthosting

区块加载方块(“Schedudeler”)

Schedudeler Recipe

Schedudeler 是此模组添加的唯一方块。它能够加载周围区域内的区块,但会随时间缓慢消耗充能。


Schedudeler Block Default

放置 Schedudeler 后,它最初没有充能,但可以通过右键点击为其充能。只要有玩家在附近(距离在 24 格内),或其所有者在线(稍后会详细介绍),它也会自动充能。Schedudeler 的默认容量为 576000 刻(8 小时)。

默认情况下,Schedudeler 不属于任何人(即公共),区块半径为 0,也就是说它只会加载自身所在的区块。

只有在主动加载区块时,Schedudeler 才会消耗充能。


Schedudeler Block - Active

Schedudeler 中央的染色玻璃方块会在其已充能/处于激活状态时点亮边角,并缓慢闪烁。


Schedudeler Block - Charged

尝试为已充满的 Schedudeler 手动充能时,它会发出粒子效果。


Schedudeler Block Iron

对 Schedudeler 使用铁升级(手持 Iron Ingot 右键点击)即可升级。升级后,Schedudeler 的最大充能量将提升至 1728000 刻(24 小时)。

不同升级可以分别应用,互不影响。


Schedudeler Block Iron/Gold

金升级(手持 Gold Ingot 右键点击)会将 Schedudeler 的区块半径提升至 1(覆盖 3×3 区块区域)。

最大半径仅为 1,这是为了鼓励玩家使用更多小型区块加载器,而不是单个大型区块加载器。这样有助于调度算法在多名玩家之间公平分配区块加载器(详见区块调度部分)。铁升级和金升级提供的效果均可配置。


Schedudeler Block Iron/Gold/Ender

玩家可以应用末影升级(手持 Ender Eye 右键点击),将 Schedudeler 设为自己的所有物。这样有以下好处:

  • 无论距离多远,只要所有者在线,Schedudeler 就会充能。
  • 调度区块加载器时,算法会考虑每位玩家拥有的区块加载器数量,并将其与其他玩家及公共区块加载器(不属于任何玩家的加载器)进行比较。详情请参阅区块调度部分。

Schedudeler Block Iron/Chain

锁链升级(手持 Chain 右键点击)会锁定 Schedudeler,防止玩家误操作并应用其他升级。


Schedudeler Block Iron - Area Preview

玩家可以手持 Redstone Torch 右键点击任意 Schedudeler,预览其加载区域(区块边界)。预览仅对该玩家可见,并会在短时间后消失。Redstone Torch 不会被消耗。


Schedudeler Block - Destroyed

破坏 Schedudeler 时,先前应用的所有升级也会一并掉落。

区块调度

此模组的核心功能之一是调度算法。这意味着每个维度中,同一时间最多只会有可配置数量的区块加载器处于激活状态(默认值为 8)。为此,区块加载器会排入队列,每 8 个区块加载器为一组,并在短时间内激活(默认持续 80 刻)。

此外,算法还会考虑每位所有者拥有的区块加载器数量(以及公共区块加载器的数量),确保各方获得相同的区块加载器激活时间。


举个例子:为简单起见,假设始终只有 2 个区块加载器可以同时处于激活状态。如果玩家 Red 放置了一个区块加载器,而玩家 Blue 放置了 100 个区块加载器,那么每个调度周期都会激活玩家 Red 的这一个区块加载器,以及玩家 Blue 的下一个区块加载器。总共需要 100 个调度周期(8000 刻),才能让玩家 Blue 的每个区块加载器都恰好激活一次。同时,玩家 Red 的区块加载器会被激活 100 次。


以下动画展示了该算法的运行过程(示例稍复杂,但更紧凑)。有关此主题的更多信息,请参阅 这个代码仓库。

scheduler-animation

配置

可用的配置选项及其默认值:

| 名称 | 描述 | 默认值 |

| —————————– | ——————————————————————————————————————————————————————————————————————- | ——— |

| maxActiveChunkLoaders | 定义可同时处于激活状态的区块加载器的最大数量。 | 8 |

| maxChunkLoaderCharge | 定义区块加载器总共可以处于激活状态的最大刻数。 | 576000 |

| ticksOfActiveChunkLoading | 定义每组排队中的区块加载器保持激活状态的刻数。注意:如果此值过低,某些(方块)实体更新可能会被跳过(例如,“日光传感器”每 20 个世界刻更新一次)。 | 80 |

| rechargeFactorRightClick | 定义每次右键点击时区块加载器的充能百分比。 | 0.1 |

| rechargeFactorPlayersNearby | 定义玩家在附近时,区块加载器每刻的充能百分比。 | 0.05 |

| rechargeFactorOwnerOnline | 定义所有者在线时,区块加载器每个激活周期的充能百分比。 | 0.1 |

| rechargeRadiusPlayersNearby | 定义区块加载器扫描附近玩家、以判断是否应充能的范围半径。 | 24 |

| ironUpgradeBonusCharge | 定义铁质升级为区块加载器额外增加的最大充能量。 | 1152000 |

| ironUpgradeBonusRadius | 定义铁质升级为区块加载器额外增加的区块半径。 | 0 |
| goldUpgradeBonusCharge | 定义带有金质升级的区块加载器额外增加的区块半径。 | 0 |

| goldUpgradeBonusRadius | 定义带有金质升级的区块加载器额外增加的区块半径。 | 1 |

| logChunkStateChange | 启用后,区块「强制加载」状态的任何更改都会记录到日志中。 | false |

| logChunkLoaderUpdates | 启用后,区块加载器方块实体的更新会记录到日志中。 | false |

| logChunkLoaderRegistration | 启用后,区块加载器的注册和注销都会记录到日志中。 | false |

命令

所有命令都需要至少 1 级权限:

  • chunkschedudeler get <blockPos> [charge|radius|owner|locked]:获取给定位置的 Schedudeler 信息。

常见问题

区块加载器有玩家数量限制吗?

没有。


如果区块加载器数量不受限制,性能会怎么样?

始终相同,因为同时处于活动状态的区块加载器不会超过配置的数量(默认为 8)。


区块加载器会不会永远无法激活?

不会。只要它们有电,最终就会轮到它们。


玩家能否通过在同一区域放置许多区块加载器来「作弊」?

不能。因为玩家有动机认领这些区块加载器,所以其拥有的区块加载器总数会增加,导致该玩家拥有的每个区块加载器激活频率都降低(详情请参阅 区块调度)。

免责声明

我在测试中发现,紧邻区块加载器强制加载区块的区块也会被加载。我还发现,其他模组的区块加载器也有这种行为。由此可见,半径为 0 的区块加载器(即 1×1 区块区域)实际上会加载 3×3 的区域;半径为 1 的区块加载器(即 3×3 区块区域)会加载 5×5 的区块区域,以此类推。由于我无法完全确定额外区块是否能稳定加载,因此将其视为开销而不予考虑。

常见问题

Chunk Schedudeler 支持哪些 Minecraft 版本?

Chunk Schedudeler 支持 Minecraft Java 版 1.18.2–1.20.4,共 5 个版本,可用的加载器:Fabric / Forge。下载时注意选择和你游戏版本一致的文件。

Chunk Schedudeler 怎么安装?

先用 PCL2 或 HMCL 启动器安装对应版本的 Fabric / Forge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。运行环境:客户端和服务端都要装。

评论

登录后评论和评分

hd42 的其他作品

查看全部 →