跳到正文

Tiquality

作者:Terminator_NL

让服务器卡顿成为源玩家的问题。

收藏

介绍

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

Tiquality

Tiquality 是看起来颇受欢迎的模组 LagGoggles 的继任者。

目前,Tiquality 是一款仅适用于服务器端的模组,但也支持客户端(在局域网托管时)。

其核心功能是限制玩家在世界中的刻更新耗时,从而平均分配时间。

支持

如果你遇到问题,我更希望你在 GitHub 上提交新的问题报告。如果你觉得还不值得在 GitHub 上提交问题报告,可以通过 Discord 频道以更随意的方式联系我。请注意,在 GitHub 上讨论问题会更好,因为其他人可以找到同样的问题并参与讨论,而不必翻阅数百条消息(更有条理)。

下载

你可以在此下载最新版本。THIN 和 FAT 之间的唯一区别是,FAT 内置了 Mixin,这是 Tiquality 正常运行所需的前置库。其他模组可能已经内置了 Mixin,或带有其他版本。一般来说,Tiquality 能很好地兼容大多数 Mixin 版本。
已知内置 Mixin 的模组包括 SpongeForge。如果你安装了 SpongeForge,或其他需要不同版本 Mixin 的模组,请选择 THIN 版本。

整合包作者

当然可以,我允许你将它加入整合包!:thumbsup: 如果你帮大家完成所有配置工作,就能为服务器管理员节省不少时间!(/tq setblock)

配置

对这个模组感兴趣?可以在此查看默认配置及其说明。

本模组的用途与设计目标

这是一款更新节流模组,旨在让不会给服务器造成沉重负担的玩家以 20 TPS 畅玩 Minecraft;而建造方式不够谨慎的玩家则只能获得 10 TPS(随着其造成的影响增大,TPS 会逐渐降低)。

这能鼓励玩家采用对服务器更友好的建造方式,并尽量避免影响其他重视服务器的玩家的游戏体验。

一般来说,玩家不会察觉 Tiquality 的存在,也无需与它交互。在少数情况下,/tq claim 可以立即帮上忙。

这不是一款惩罚型模组,而是让责任人自行承担其行为带来的后果,从而让其他所有人受益。

本模组不是什么

它并不像 ClearLagg。无论其他人做什么,Tiquality 都会尽力确保每个人的游戏体验公平。

运行机制

没有所有者且未在配置中指定的方块无法更新,其中也包括刚生成的区域。为了保留树叶腐烂、草方块蔓延等功能,你可以在配置中将方块加入白名单。白名单中的方块无需所有者也能进行刻更新。

如果玩家放置了方块,Tiquality 会将该方块分配给该玩家的个人追踪器。之后,该追踪器会根据放置方块的玩家所受的时间限制,执行该方块的更新。

登录的玩家越多,每个人分到的时间就越少。如果某位玩家没有用完自己的刻更新时间,剩余时间就会分配给其他玩家。

已登出的玩家所放置的方块可用的刻更新时间,会少于在线玩家所放置方块的可用时间(可在配置中自定义)!

当实体生成或在区块之间移动时,其追踪器会更新为与该区块中占主导地位的追踪器(缓存)一致。这意味着模组也完全支持实体节流。占主导地位的追踪器由区块内方块数量最多的所有者决定。只要在区块内建造,就会自动取得该区块的控制权。

集成

  • SpongeForge
    • 权限、命令、自定义 tick 逻辑
  • GriefPrevention
    • 领地会自动在所声明的区域设置追踪器,并在领地存在期间将其锁定给对应所有者
  • GriefDefender
    • 领地会自动在所声明的区域设置追踪器,并在领地存在期间将其锁定给对应所有者
  • FTB Utilities
    • 领地会自动在所声明的区域设置追踪器,并在领地存在期间将其锁定给对应所有者(适合同基地的玩家)
  • LagGoggles (开发中……)
    • 为不太熟悉技术的玩家提供界面。

以上功能均为可选。

工作原理

所有对 Block.randomTickBlock()、Block.updateTickBlock()、Entity.onUpdate() 和 ITickable.tickTileEntity() 的调用都会重定向到 Tiquality;随后 Tiquality 会使用定制的高性能查询方式,查找方块或实体的所有者。

世界中的方块位置和实体都关联有追踪器。这些追踪器会记录一次更新耗费的时间,并从“获准纳秒数”中扣除,直到数值归零。数值归零后,所有后续更新都会排队等待稍后执行,不会立即运行。

下一次 tick 到来时,所有追踪器都会获得一定的追踪时间,这意味着方块会再次更新。队列会优先执行。如果队列未能处理完毕,新的更新也会加入队列(若尚未排入)。

如果某位玩家没有用完自己的 tick 时间,剩余时间会分配给已用完全部时间的玩家。

你可以使用 /tq share 与其他玩家共享 tick 时间。这对同基地的玩家很有用。

命令与权限

  • /tiquality

    • 主命令
    • tiquality.use
  • /tq

    • /tiquality 的别名
    • tiquality.use
  • /tq info [point]

    • 显示你脚下的方块以及双脚所在方块(液体)的信息。<br>显示方块的所有者。<br>显示方块当前是否在白名单中。<br>使用“point”标记时,你可以瞄准方块并潜行,快速查看该方块由谁追踪。
    • tiquality.use
  • /tq share <playername>

    • 与同基地的玩家共享 tick 时间,这样即使基地所有者离线,你也可以继续游玩。如果你们同时在线,实际可用的 tick 时间会翻倍。
    • tiquality.use
  • /tq track

    • 无需重新放置方块,即可将其归属给一名玩家。(适用于自然生成的方块、已有基地等)
    • tiquality.use
  • /tq claim [radius]

    • 为玩家认领一片区域。最大半径由配置中的 MAX_CLAIM_RADIUS 定义。如果省略半径参数,则使用配置中的最大值。如果你刚安装 Tiquality,需要将基地导入现有世界,这个功能尤其有用。
    • tiquality.claim
  • /tq acceptoverride <player>

    • 在其他玩家认领你的区域失败后,允许其再次尝试认领。你会收到提示,告知何时使用此命令。
    • tiquality.use
  • /tq denyoverride <player>

    • 在其他玩家认领你的区域失败后,拒绝其再次尝试认领。你会收到提示,告知何时使用此命令。
    • tiquality.use
  • /tq unclaim [radius]

    • 取消认领一片区域,管理员可使用此命令。
    • tiquality.admin
  • /tq profile <seconds>

    • 对你拥有的方块运行一个基础性能分析器。更好的替代方案正在开发中。
    • tiquality.use
  • /tq profile <seconds> <uuid or playername>

    • 对指定的 UUID 或玩家名运行一个基础性能分析器。更好的替代方案正在开发中。
    • tiquality.admin
  • /tq setblock <feet|below> <DEFAULT|NATURAL|PRIORITY|ALWAYS_TICK|TICK_DENIED>

    • 将所有指定类型的方块设为相应的刻更新行为。<br>
      有效类型如下:<br>

      • DEFAULT:
        • 仅在分配了追踪器且追踪器有可用刻数时更新。更新可能会被限速。
      • PRIORITY:
        • 与 DEFAULT 相同,但会在同一追踪器中的其他内容之前更新。更新可能会被限速。
      • TICK_DENIED:
        • 永不更新
      • NATURAL: 在以下任一情况下更新:
        • 未分配追踪器时更新。分配追踪器后,更新可能会被限速。
      • ALWAYS_TICK:
        • 始终更新,不会被限速。如果已分配追踪器,它仍会影响追踪器获得的时间。
    • tiquality.admin
  • /tq setentity <entity_name> <DEFAULT|NATURAL|PRIORITY|ALWAYS_TICK|TICK_DENIED>

    • 将所有指定类型的实体设为相应的刻更新行为。<br>
      有效类型如下:<br>

      • DEFAULT:
        • 未分配追踪器时更新。分配追踪器后,如果没有剩余时间,更新可能会被限速。
      • PRIORITY:
        • 与 DEFAULT 相同,但会在同一追踪器中的其他内容之前更新。更新可能会被限速。
      • TICK_DENIED:
        • 永不更新
      • NATURAL: 在以下任一情况下更新:
        • 与 DEFAULT 完全相同
      • ALWAYS_TICK:
        • 始终更新,不会被限速。如果已分配追踪器,它仍会影响追踪器获得的时间。
    • tiquality.admin
  • /tq reload

    • 重新加载配置文件。
    • tiquality.admin

常见问题

你怎么还不换成 Sponge!?

我的目标是让所有人都能尽可能方便地使用 Tiquality。不必安装 Sponge、匹配 Forge 版本,也不用费心寻找同时兼容 Sponge 和特定 Forge 版本的模组,安装起来就会容易得多。所有人都应该能使用 Tiquality,即使你运行的是不带 Sponge 的服务器。

不过,Sponge 仍然受支持。

/tq info 有什么作用?

它可以帮助你诊断方块是否能够运行刻,还可以查找配置中要使用的名称。

站在方块上方并运行 /tq info。输出如下:

No entities are found in your chunk
Block below: minecraft:piston TickType: DEFAULT Status: Tracked by: Terminator_NL

我们来逐项说明:

  • "minecraft:piston" 是方块名称。
  • "TickType: DEFAULT" 表示只有在分配了追踪器且追踪器有剩余时间时,这个方块才会运行刻。(参见:/tq track)
  • "Tracked by: XXX" 用来说明方块是否正在被追踪;在本例中,它由我追踪。

另一个 tq info 的示例:

Entities in chunk:
minecraft:item PRIORITY Not tracked
Block below: minecraft:grass TickType: NATURAL Status: Not tracked

我们来逐项说明:

  • "minecraft:item" 是区块中掉落物实体的名称。
  • "minecraft:grass" 是方块名称。
  • "TickType: NATURAL" 表示如果该方块类型未被追踪,或追踪器有剩余时间,这种方块就会运行刻。(参见:/tq setblock)
  • "Not tracked" 表示这个方块尚未分配追踪器。

推荐用法:

  • tq info point:启用后,只需看向方块并按潜行键,就能查看哪些方块正在被追踪。
  • tq info:检查配置更改是否生效,也可以帮助玩家诊断服务器配置问题。

我的方块不会运行刻!该怎么办?

满足以下任一条件时,方块就会运行刻:

  • 已分配追踪器,且追踪器有足够的时间让方块运行刻。
  • 方块已在配置中定义(NATURAL_BLOCKS),且未分配追踪器。
  • 方块已在配置中定义(NATURAL_BLOCKS),且追踪器有足够的时间让方块运行刻。
  • 方块已在配置中定义(ALWAYS_TICKED_BLOCKS),即使已分配的追踪器耗尽时间,方块仍会运行刻。请注意,这仍会消耗追踪器的时间。

最快的解决方法是站在方块上方并运行 /tq setblock below NATURAL。这会将该方块添加到配置的 NATURAL_BLOCKS 中。

专业提示:先使用 /tq info,看看你是否真的正确站在了方块上。

我的流体不流动!我该怎么办?

流体的追踪方式与方块相同。

最快的解决方法就是站在液体中并运行 /tq setblock feet NATURAL。它会将该流体添加到配置中的 NATURAL_BLOCKS 下。

专业提示:先使用 /tq info,看看你是否真的正确站在了液体中。

我刚安装了 Tiquality,TPS 糟透了!

请记住,TPS 仍然无法达到 20 还有很多其他原因。加载未加载的区块是其中一个重要因素:玩家在探索或登录时。另一个重要因素是世界 tick 后的处理。
Tiquality 不会挂钩世界事件,因此世界 tick 之后的任何处理都完全不在 Tiquality 的控制范围内。你可以尝试提高配置值 TIME_BETWEEN_TICKS_IN_NS。请记住,增大此值会导致世界更早停止 tick,实际上使世界 tick 变慢。

数据存储在哪里?

数据存储在世界文件夹下的 TiqualityStorage 中。受 Minecraft 自身代码的启发,Tiquality 也使用位移运算来查找方块的正确标识符,而无需遍历任何内容。这意味着极快的性能,而这是必要的,因为 Tiquality 必须拦截并处理每一个被 tick 的对象。

我有个想法!我能做些什么来帮忙?

在 GitHub 上提交一个 issue,我会给你一些反馈。(我可能已经考虑过你的想法了!)之后,fork Tiquality 并直接提交 pull request!
如果你不会写代码,你显然仍然可以提交请求,只要它符合项目的范围,我就会实现它。

常见问题

Tiquality 支持哪些 Minecraft 版本?

Tiquality 支持 Minecraft Java 版 1.12.2,可用的加载器:Forge。下载时注意选择和你游戏版本一致的文件。

Tiquality 怎么安装?

先用 PCL2 或 HMCL 启动器安装对应版本的 Forge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。

评论

登录后评论和评分

Terminator_NL 的其他作品

查看全部 →