Distant Ticking

模拟超出模拟距离的区块。高级区块加载器。

资源图片
## 🚀 概述 DistantTicking 是一款强大的 PaperMC 插件,旨在提高服务器性能的同时,确保您的重要红石装置和自动化农场持续运行,无论玩家距离多远。 告别 AFK 农场和在不方便的时候卸载区块! 传统上,Minecraft 只在玩家的 `simulation-distance` 范围内“tick” 区块。这意味着当玩家离得太远或离线时,复杂的机器和农场就会停止工作。DistantTicking 通过智能地检测和永久加载包含玩家放置的“值得 tick”的区块来解决这个问题,通过跟踪它们的 **确切位置**。 ## 适合谁? 这不适用于大型服务器。 适用于小型、高端的私有服务器,这些服务器侧重于沉浸感并旨在拥有最大的模拟距离。 此插件可以让你降低你的模拟距离。 例如,在我的服务器上,模拟距离为 16,每个玩家会模拟大约 1089 个区块。 使用此插件,大约有 60 个区块被加载。 因为模拟距离变得不那么重要,所以我们将模拟距离降低到 10。 这意味着每个玩家模拟的区块少了大约 648 个,同时有效地将模拟距离作为经验来看,无限制延长,因为例如农作物、熔炉、带有箱子的区块等仍然被加载。 本质上,它是一个隐形的区块加载器。 [![观看视频](https://img.youtube.com/vi/PBmrIrpQiUU/maxresdefault.jpg)](https://youtu.be/PBmrIrpQiUU) ## ✨ 特性 - **智能区块加载:** 自动检测并强制加载区块,通过跟踪玩家放置的区块的 **具体位置** (例如,熔炉、漏斗、红石、活塞、铁轨)。 - **区块休眠:** 在所有玩家都离线一段时间后,自动休眠区块。 - **持久 tick:** 确保您的机器、农场和红石装置 24/7 持续工作,即使附近或同一维度没有玩家。 - **性能优化:** 允许服务器所有者在 `server.properties` 中降低全局 `simulation-distance` (例如,到 4-8),以获得更好的总体 TPS 和更低的服务器负载,同时 DistantTicking 管理关键的 tick 区域。 - **可配置的值得 tick 的区块:** 可以在 `config.yml` 中轻松自定义触发区块加载的区块材质。 - **自愈数据:** 使用混合方法(中心索引和每个区块的持久性数据容器 (PDC))进行强大的持久性。 在意外删除数据文件或服务器崩溃时,能够优雅地恢复。 - **定期的一致性检查:** 自动清理如果区块被移除而没有适当的插件通知(例如,世界编辑、服务器崩溃),则过时的强制加载条目。 - **管理员命令:** 直观的命令用于监控插件状态、列出强制加载的区块、刷新区块数据和调试。 - **旧数据清理工具:** 一个特定的命令,用于从旧版本的插件中删除存储在 PDC 中的旧 tick-worthy 区块数据。 - **调试日志:** 专门的调试模式以获取详细的插件日志,而不会淹没整个服务器控制台。 ## ⚙️ 工作原理 DistantTicking 采用混合数据存储模型: 1. **每个区块的数据 (PDC):** 当玩家放置一个可配置的“值得 tick”的区块时,插件使用 Minecraft 内置的持久性数据容器 (PDCs) 标记该区块的数据。 除了计数,它现在存储每个区块内的 **X、Y、Z 具体坐标** 的可 tick 区块。 此数据序列化为 JSON 字符串,并直接存储在区块文件中,即使主插件数据文件丢失,也能持续存在。 2. **中心索引 (`active_chunks.json`):** 一个轻量级的 JSON 文件维护了所有世界中当前由插件强制加载的所有区块的列表。 在服务器启动时加载此文件,以立即启动所有相关区块的强制加载。 3. **同步:** - 当玩家放置一个值得 tick 的区块时,它的区块被添加到中心索引,并且如果它是该区块中第一个值得 tick 的区块,则会强制加载。 - 当玩家破坏(或破坏一个)值得 tick 的区块时,其位置从区块的 PDC 中删除。 如果删除后,该区块 PDC 中 _没有_ 任何值得 tick 的区块,则它将从中心索引中删除并卸载。 - 定期的后台任务会验证中心索引中的区块是否仍然在它们的 PDC 中有相应的值得 tick 的区块。 如果区块的 PDC 显示没有存储的区块位置,则将该条目从中心索引中删除,从而确保从数据不一致中进行“自愈”。 这种方法提供了精确的跟踪、可靠的持久性和高效的资源管理。 ## 已知问题 - 如果你跟踪农作物,当你跳到它们上面时,它不会检测它们被破坏。 然而,一致性检查最终会意识到。 ## 📥 安装 1. 下载最新版本的 `DistantTicking-X.Y.Z.jar`。 2. 将 `DistantTicking-X.Y.Z.jar` 文件放入服务器的 `plugins/` 文件夹中。 3. 重新启动你的 PaperMC 服务器。 4. 将创建一个 `DistantTicking` 文件夹到你的 `plugins/` 目录中,包含 `config.yml` 和 `active_chunks.json`。 5. 重要提示! 如果你将其添加到现有的世界,你将需要运行 `/dt refresh <区块半径> <垂直向上> <垂直向下>` 以填充新位置的跟踪数据以供现有区块使用。 我建议以手术的方式,使用低区块半径和适当的垂直限制来完成,因为扫描许多区块或大型垂直范围可能很慢。 > 你可能想要在更新后运行 /dt cleanup,以防我更改了任何东西。 ## 🛠️ 配置 (`config.yml`) `config.yml` 文件将首次运行时自动生成。 您可以在此处自定义插件的行为。 ```yaml # DistantTicking 插件配置 settings: # 自动将强制加载的区块数据保存到 active_chunks.json 文件的间隔。 # 测量单位为分钟。(20 滴答 = 1 秒) auto-save-interval-minutes: 5 # 默认: 5 # 定期一致性检查的间隔。 # 此检查验证是否标记为强制加载的区块仍然在其 PDC 中包含值得 tick 的区块。 # 测量单位为小时。 consistency-check-interval-hours: 6 # 默认: 6 # 启用调试模式以获取更详细的控制台日志。 # 将其设置为 'true' 以查看详细的插件活动(例如,单个区块的加载/卸载)。 # 这些日志 *仅* 用于 DistantTicking,并且不会用其他插件的调试消息淹没你的控制台。 debug-mode: false # 默认: false # 设置用于服务器休眠功能的设置。 # 当服务器为空时,插件可以卸载所有区块以节省资源。 hibernation: # 设置为 true 以启用此功能。 enabled: true # 服务器必须为空多长时间才能卸载区块。 # 测量单位为分钟。 unload-delay-minutes: 60 # 每次玩家加入空服务器时重新加载多少区块。 # 更高的值可以更快地重新加载,但可能会导致更多延迟。 reload-chunks-per-batch: 5 # 如何频繁(以滴答为单位)处理一批区块进行重新加载。 20 滴答 = 1 秒。 # 5 的值意味着每 5 滴答重新加载一个批次。 reload-stagger-ticks: 5 # 值得 tick 的区块材料的列表,当玩家放置时,应该使它们的区块 tick-worthy 并强制加载。 # 确保 Minecraft Material 枚举名称有效(在插件中不区分大小写,但为了清晰起见,请使用大写)。 # # 重要提示:即使是非 BlockEntities(如红石线、中继器、活塞)也会导致区块保持加载状态, # 允许它们持续运行,如果它们是活动红石电路的一部分。 # tick-worthy-blocks: - 你想要 tick 的区块 # 服务器所有者的建议: # 为了获得最佳性能,请考虑将服务器的 'simulation-distance' 降低到 4-8 等值 # 位于 server.properties 中。 这允许 DistantTicking 管理机器的持久 tick, # 同时显著降低服务器 CPU 在没有重要装置的区域的负载。 ``` ## 🎮 命令 所有命令都以 `/dt` (或 `/distantticking`) 开头。 | 命令 | 描述 | 权限 | | :--------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------ | | `/dt help` | 显示插件的帮助消息。 | `distantticking.command.base` | | `/dt pdcinfo` | 显示你当前区块中的 tick-worthy 区块数 (来自 PDC)。 | `distantticking.command.pdcinfo` | | `/dt status` | 显示 DistantTicking 插件的当前状态。 | `distantticking.command.status` | | `/dt list [页面]` | 列出插件当前强制加载的所有区块,并带有分页。 | `distantticking.command.list` | | `/dt removehere` | 从强制加载列表中删除你所在区块。 | `distantticking.command.removehere` | | `/dt reload` | 重新加载插件的 `config.yml` 并重启内部任务。 | `distantticking.command.reload` | | `/dt refresh <半径> <垂直向上> <垂直向下>` | 扫描由半径参数定义的区块的正方形区域,并被垂直向上和向下参数限制以防止检测不需要的地图结构(例如矿井)。 | `distantticking.command.refresh` | | `/dt cleanup` | 清理旧 PDC 密钥,在跟踪是块特异之前使用。 | `distantticking.command.cleanup` | | `/dt check` | 执行一致性检查并告诉你运行所需的时间。 这旨在作为配置工具,而不是真正使用,因为这些检查会自动运行。 | `distantticking.command.cleanup` |