Unloaded Activity

Unloaded Activity

模拟区块与实体在卸载一段时间后的追赶过程。

这个模组是做什么的?

在 Minecraft 中,当你远离区块时,它们会停止模拟。当你稍后返回时,农作物不会生长,幼年动物仍然是幼年状态,烹饪中的物品也还在烹饪。

这个模组通过模拟进入模拟距离内的方块和实体来改变这一点,让它们在卸载一段时间后追赶进度。就好像它们一直在被模拟一样!

这也适用于跳过夜晚的情况。无需等待铁烧炼完成或农作物生长,你可以跳过夜晚来加速这个过程!

它是如何工作的?

每当一个区块、实体或方块实体被 tick 时,它会保存当前时间,并检查距离上次 tick 已过去多久。如果差异足够大,我的模组就会开始模拟它,使其追赶进度。

但 如果必须模拟所有错过的时间,这不会导致游戏卡顿吗?

只要足够聪明就不会!卸载活动(Unloaded Activity)不会为错过的每个 tick 重复运行 tick 函数,而是直接根据错过的 tick 数量计算方块的状态。因此,如果一个方块错过了 24000 个 tick(一个 Minecraft 日),它不会尝试 tick 它 24000 次,而是只需要做一点数学计算就能完成。

这样速度会快得多,但代价是必须以这种新方式重新实现 tick 逻辑。这就是为什么有些模组作物可能生长不正确,或者根本不生长。如果你发现某个模组方块模拟不正确,你可以将该方块加入模组的黑名单,但也请提交一个错误报告!

那些有随机/降水 tick 的方块呢?它们具有随机性。

为了模拟这些方块,模组会从二项分布中采样一个随机数,然后用它来更新方块的状态。然而,有时成功的概率会改变。这时我们需要从负二项分布中采样随机数来模拟每次成功的持续时间。

不支持的方块和实体

原版 Minecraft 中并非一切都受支持。以下是不支持的内容及其原因:

  • 所有红石相关方块 红石逻辑对我来说太复杂了,即使我尝试支持它,也极有可能破坏大量现有的红石装置。

  • 酿造台 酿造台只有一个原料槽。因此,卸载活动在不得不停止之前,只能模拟一种原料,而且我认为酿造台足够快,不需要支持。除非你在开启酿造台后立即用鞘翅飞走或睡觉,否则你不会真正注意到缺乏支持。

  • 营火 原因与酿造台相同。

  • 掉落物消失 我觉得这会毁了游戏。如果你死在远离基地的地方,你将无法找回你的物品,即使你确切知道它们在哪里。

  • 蜂巢 这个方块与任何受支持的方块都不同,因为它需要实体(蜜蜂)自己行动才能工作。我还没有深入研究太多,所以将来可能会支持它。

对于任何其他未在此列出且不受支持的方块或实体,我纯粹是忘记了。所以如果我遗漏了什么,请告诉我!

灵感来源

这个想法来自 DigiDigger 的一个视频,他在视频中谈到了 Terraria 如何处理它的所有方块。虽然这个视频对 Terraria 实际运作方式的描述并不完全准确,但他确实提出了一个我认为可以在 Minecraft 中实施的优化。他谈论这个优化的时间戳是 5:11。

反馈 / 建议

如果你对这个模组有任何反馈或建议,欢迎加入我的Discord 服务器!