(2025年9月27日)我发现 TimeLib 存在几个严重问题,使其在某些用例中不可靠。请仔细阅读以下内容并自行评估是否继续使用 TimeLib。一旦找到或添加了由 Mojang 提供的修复方案,我将重新开始支持 TimeLib。截至我撰写本文时,TimeLib v2.3.1 是最新版本。 TimeLib 并未永久停用,待所有问题解决后它将回归! 我会在此处以及
注意 (2025年9月27日)我发现 TimeLib 存在几个 严重问题 ,使其在某些用例中不可靠。请 仔细阅读以下内容 并自行评估是否继续使用 TimeLib。一旦找到或添加了由 Mojang 提供的修复方案, 我将重新开始支持 TimeLib 。截至我撰写本文时, TimeLib v2.3.1 是最新版本。 TimeLib 并未永久停用,待所有问题解决后它将回归! 我会在此处以及 MinecraftCommands Discord 服务器(#resources 频道)发布有关该情况的更新。 目前无法修复的根本性问题: 由于这些问题,要使 TimeLib 按预期继续工作,用户需要在 每次世界重载时手动 确认/调整日期。这破坏了 TimeLib 的设计初衷,因此我需要时间思考/等待 Mojang 推出缓解这些问题的方法。 如果玩家头像配置文件(包含时间戳) 超过 24 小时 (可能因缓存导致且无法检测),则 无法准确自动检测日期 自 1.21.9 版本起,Unix 时间戳只能从在线玩家处获取,这意味着 当没有玩家在线时,TimeLib 无法更新日期 ,可能会破坏依赖它的整合包(注意:只需玩家在初始阶段同步日期即可。只要时间不同步,即使没有玩家在线,它也能继续工作) 包含游戏暂停/冻结时长的 PausedTicks 计分板仅在从头到尾至少有一名玩家在线时有效。如果所有人在游戏冻结期间离开(无需同时),或者一开始就没有人在线,则 PausedTicks 中存储的值不可靠 同样的问题导致 冻结游戏超过 24 小时会使日期不增加 (因为如果没有人在线,就无法知道过去了多少时间) 由于夏令时的原因, Unix 时间戳 (预期单调递增)可能会倒退 1 小时,从而潜在地 破坏那些必须依赖单调性的整合包 。由于无法自动检测时区和夏令时,若无玩家手动输入,无法对此进行补救 其他已知的大bug / 疏忽(可修复): 一旦我有空,我会修复这些问题。 在此期间,我将它们列在这里以便大家知晓。虽然并非所有已知问题都列于此,但这些都是主要问题。 一个疏忽导致在极少数情况下,日期可能比实际日期提前 1 天 一个疏忽导致在服务器/客户端连续运行超过 1 天未重启后,日期无法增加 当时间不正确时(因为检索必要数据需要一点时间),TimeLib 不会指示时间尚未同步,这可能会破坏那些尝试在数据未就绪时获取数据的整合包 TimeLib 一个 Minecraft 数据包库,允许你在游戏中获取现实世界的日期和时间。如有咨询,请在 Discord 上联系 @silicatYT 。 下载: Modrinth 报告错误: GitHub 功能 提供具有刻精度(tick accuracy)的现实世界日期和时间: 年、月、日、星期几、小时、分钟、秒以及 Unix 时间戳 提供当前的刻率(tickrate) 检测游戏暂停及暂停时长(例如 /tick freeze 或单人模式) 将任何 Unix 时间戳转换为日期和时间 支持不同的时区和夏令时 支持延迟、不同的刻率及暂停 高效能 使用方法 TimeLib 会自动为你追踪日期和时间。为此,你需要首先根据个人喜好配置设置。要访问设置,请点击重新加载后出现在聊天栏中的消息,或手动运行 /function timelib:util/settings 。 → 设置 Command Block Offset (命令方块偏移):这是为了抵消 UTC 时区与你的系统时间之间的差异所必需的。如果夏令时发生变化,需要调整此设置以确保日期计算正常工作。 示例: UTC(晚上7点),系统时钟(晚上8点)→ 使用 1 小时 Timezone Offset (时区偏移):使用此选项更改显示的时间。 示例: 晚上8点 + 1 小时偏移 → 晚上9点 → 获取现实世界的日期和时间 年、月、日、星期几、小时、分钟、秒以及 Unix 时间戳的值均存储在玩家 #TimeLib 中,每个值都有自己独立的计分板目标: TimeLib.Year, TimeLib.Month, TimeLib.Day, TimeLib.WeekDay, TimeLib.Hour, TimeLib.Minute, TimeLib.Second & TimeLib.UnixTime 此外,日期和白天时间的字符串版本(带前导零)存储在 timelib:date 和 timelib:daytime 数据存储中。 → 事件 #timelib:date_changed :每当日期更改时执行的函数标签 #timelib:daytime_changed :每当白天时间更改时执行的函数标签 #timelib:game_unpaused :每当游戏取消暂停时执行的函数标签 #TimeLib TimeLib.PausedTicks 计分板保存游戏被暂停的刻数 → 获取刻率 刻率每秒更新一次,可以从 TimeLib.Tickrate 计分板目标中读取。 → 将任何 Unix 时间戳转换为日期和时间 注意: 输出的日期和时间位于 UTC 时区,因为夏令时无法得到妥善处理。 将 #TimeLib.Input TimeLib.UnixTime 分数设置为输入值。 运行 /function timelib:util/unix_timestamp_to_date 。 输出值将存储在 #TimeLib.Output TimeLib.? 分数中,以及 timelib:output 数据存储中。 工作原理 TimeLib 结合玩家头像中 Base64 编码的 Unix 时间戳与命令方块输出中的白天时间信息,以计算当前的日期和时间。 为了获取刻率,TimeLib 计算每次白天时间变化之间的刻数。 暂停检测使用 minecraft.custom:minecraft:total_world_time 计分板目标,该目标即使在游戏暂停时也会每刻递增。 额外的逻辑用于确保最佳结果、良好的性能和准确性。 致谢 来自 CMDred: SilicatYT: TimeLib BananaRedPanda: Base64 解码器 & 帮助 须知 TimeLib 需要互联网连接。 获取刻率并未利用世界边界(worldborder)的复杂操作。 如果你的数据包在主世界 29999999 29999999 处使用了强制加载的区块,可能会发生冲突。 TimeLib(2.3.0 及更高版本)使用 lantern load 库来检查依赖项。如果你遵循其约定: #TimeLib load.status :如果安装了 TimeLib 则为 1,否则未设置 #TimeLib.Version load.status :特定版本的发布编号 升级到新版本: 对于 2.3.0 之前 的 TimeLib 版本: /function timelib:uninstall ,然后用新版本替换当前的 TimeLib 版本,最后 /reload 以安装新版本 对于从 2.3.0 或更高版本 升级到更新的版本,只需用新的数据包替换旧的数据包即可 (v2.3.0+)如果同时安装了多个不同的版本,TimeLib 会抛出错误并停止工作 。这也适用于尝试调用实用函数的情况。 在运行 /function timelib:uninstall 后尝试运行实用函数时,也会出现类似的行为 许可证 根据 MIT 许可证,只要你为我们对原始作品进行署名,就允许你重新分发、修改和使用 TimeLib。
在鱼乐云资源中心浏览该资源,登录后可一键安装到你的游戏服务器。