跳到正文

Shtreimel – Sable Utility

作者:sauramel

适用于 NeoForge 1.21.1 上 Sable 与 Create Aeronautics 的服务端管理工具:列出、检查、冻结、归档和移除子级网格;在控制台中提示卡顿嫌疑对象;丰富崩溃报告。

收藏

介绍

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

Shtreimel

为 Sable 和 Create Aeronautics 提供的服务器管理工具包。查找导致卡顿的飞艇、冻结失控的飞艇、撤销意外破坏、查看最后登上某艘船的玩家、追踪某个刚体消失的确切时间,并确认服务器崩溃时有哪些机械结构。

支持 NeoForge 和 Fabric 1.21.1。仅需在专用服务器上安装,无需安装客户端模组。

“Shtreimel”是戴在貂皮衬里上的毛皮帽。它是戴在 Sable 上面的帽子。这个名字是个玩笑;这个模组可不是。

为什么你需要它

你在运行 Sable 或 Create Aeronautics 服务器。迟早会遇到以下情况之一:

  • 有人造出了一个占地 50,000 格的巨型机械结构,导致 TPS 暴跌。你不知道它是谁造的、在哪里,也不知道该如何阻止它,除非使用 /stop。
  • 有玩家把飞艇开出了生存范围,之后再也没回来。或者飞艇卡在半空中。又或者掉进了虚空。
  • 你信任的人对错误的机械结构运行了 /sable remove,而你没有任何办法回滚。
  • 有玩家报告说自己的飞艇被拆空、移动或开走了,而你完全不知道当时谁在船上。
  • Sable 在两个游戏刻之间移除了一个刚体,但你的日志没有记录原因。
  • 服务器崩溃了,崩溃报告只写着“physics tick”,没有其他信息。

Shtreimel 为以上每种情况都提供了相应命令。

功能介绍

查找卡顿来源

当某个维度的物理切片负载过高时,Shtreimel 会对最可能的可疑刚体进行排名,并在服务器控制台打印一行信息,包含位置、玩家设置的名称、UUID、边界框和可疑度评分。

控制台输出示例:

[shtreimel.lag] lag suspect dim=minecraft:overworld ewma=7.43ms max60=18.20ms uuid=8a1f... name="Big Blimp" plot=(10005,10003) center=(124.0,72.5,-88.3) bb=24x10x32 suspect=83

排名会使用可配置的代理指标:体积、占地范围、已加载区块、Sable 动力元件、速度、网络漂移、反作用飞轮、排队中的力、相交实体,以及可选的连接、依赖和票据指标。权重和上限都可以在配置中设置。

如果你的服务器负载比一般情况更高或更低,可以在正常运行几小时后执行 /shtreimel lag autotune,以获取建议阈值,并输出到 <world>/shtreimel/dimension-overrides.json。

你也可以随时查看实时排名:

  • /shtreimel rank
  • /shtreimel physics-stats
  • /shtreimel list

停止卡顿

  • /shtreimel freeze <uuid>
  • /shtreimel freeze nearest [radius]
  • /shtreimel freeze connected <uuid>
  • /shtreimel freeze list
  • /shtreimel unfreeze <uuid>
  • /shtreimel unfreeze connected <uuid>

freeze 会将机械结构固定在原地,而不会暂停整个维度的物理模拟。connected 会冻结一个刚体及与其相连的所有刚体。固定状态会在服务器重启后保留,也不会因卸载而消失;冻结状态的父刚体分裂后,其子刚体也会继承冻结状态。unfreeze 会重新唤醒刚体。

  • /shtreimel delete uuid <uuid> --confirm
  • /shtreimel delete at <x> <y> <z> --confirm
  • /shtreimel delete nearest --confirm

delete 会调用 Sable 自带的移除流程,清理效果与 /sable remove 相同。

撤销你的失误

  • /shtreimel archive save <uuid> [tag]
  • /shtreimel archive list [uuid] [limit]
  • /shtreimel archive verify <uuid> <archiveId>
  • /shtreimel archive restore <uuid> <archiveId> [keepUuid] [dimension] [at <pos>]
  • /shtreimel archive prune

archive save 会将机械装置的完整方块数据写入磁盘,并附带压缩后大小和 SHA-256 元数据。信任存档前,可以使用 verify 进行检查。restore 可以将其恢复,还可选择保留原 UUID。旧版 0.2/0.3 存档仍可列出和恢复。每个机械装置的撤销记录相互独立。

检查机械装置

/shtreimel info <uuid>

显示姿态、边界框、质量、质心、质量和刚体有效性、反作用轮、排队中的力、网络漂移、连接链和加载依赖项数量、拆分前的父级、冻结状态、上次序列化指针、Sable 2 强制加载票据,以及可配置的加载索引明细。在 Sable 1.2.x 上,票据字段会提示 Sable 2 API 不可用。在游戏中,标题栏包含可点击的 [teleport]、[freeze]、[archive] 按钮。

记录单个刚体的受力情况

  • /shtreimel forces start <uuid> [seconds]
  • /shtreimel forces show <uuid>
  • /shtreimel forces stop <uuid>

Shtreimel 仅会对你明确选择的刚体启用逐点力记录,且记录时长有限;停止、到期、移除或关闭时都会进行清理。结果会显示力组采样数、点力数量,以及力和扭矩的平均值与最大值。

查找位置

  • /shtreimel at <x> <y> <z>
  • /shtreimel in <fromPos> <toPos>
  • /shtreimel near [radius]
  • /shtreimel watch <uuid> [seconds]
  • /shtreimel unwatch

at 会指出指定方块位置上是哪台机械装置。in 会列出所有边界框与指定区域相交的机械装置。near 会列出调用者周围的机械装置。watch 会让一名管理人员订阅某台机械装置的实时姿态更新,持续 N 秒(非常适合实时追踪飞艇)。

查看乘员记录

  • /shtreimel who <uuid>
  • /shtreimel who recent <uuid> [limit]
  • /shtreimel who player <player> [limit]

who 会显示当前位于机械装置内的玩家、正在追踪它的玩家,以及最后一位已知曾在其中的玩家。who recent 会按时间从新到旧列出最近乘坐过的玩家,并显示他们离开的时间以及停留时长。who player 会按时间从新到旧列出某位玩家乘坐过的机械装置,并显示每个刚体最后已知的位置——通常足以找到有人声称丢失的船。

两条历史记录命令都适用于已卸载或已删除的机械装置,也适用于通过名称或 UUID 查询的离线玩家——等报告传到你手上时,这通常就是实际情况。只要身处船体内部就会被计入,不要求站在顶部表面。历史记录会保存到磁盘并在重启后保留;同一玩家反复上下机械装置,也无法挤掉其他人的历史记录。所有数据都有上限,并可在 shtreimel.occupancy 下配置,包括关闭记录的选项。

传送过去

  • /shtreimel tp <uuid>
  • /shtreimel tp player <playerName> <uuid>
  • /shtreimel tp back

传送到机械装置边界框的顶部。tp back 会将你传回原来的位置。

查看谁做了什么

  • /shtreimel audit tail [n]
  • /shtreimel audit since 1h
  • /shtreimel audit by Steve
  • /shtreimel audit uuid <uuid>

每条破坏性命令(删除、冻结、归档保存/恢复)都会向 <world>/shtreimel/audit.log 写入一行记录。Tail 会读取当前日志和轮转日志。你可以在游戏内查询它。

在一切消失之前了解发生了什么

  • /shtreimel history [limit]
  • /shtreimel history <uuid> [limit]

Shtreimel 会为每个 Sable 容器附加一个 SubLevelObserver,并在确切的回调处记录添加和永久移除,早于 Sable 销毁该地块。永久移除会同步到审计日志,附带有效性、姿态、边界、原因,以及(启用时)发起调用的调用帧。该日志在主体卸载后仍然保留,并能捕获在单个 tick 内发生的移除。

更好的崩溃报告

当服务器崩溃时,Shtreimel 会添加一个有界的 -- Shtreimel snapshot -- 块,列出已加载的装置(UUID、名称、位置、包围盒、有效性、票据、拓扑)、各维度的物理计时、最近的生命周期/移除事件、活跃的力配置摘要以及存储指针。NeoForge 使用 CrashReportCallables;Fabric 通过一个软失败友好报告 mixin 使用相同的输出。

在安装了 Create 的 NeoForge 服务器上,崩溃报告还可以指出 ContraptionCollider.collideEntities 内正在处理的装置(Create Aeronautics 飞艇/螺旋桨崩溃)。Create 装置上下文需要 NeoForge;Create 6 和 Aeronautics 在 1.21.1 上为 NeoForge 发布。

运行 /shtreimel debug crash-header 可以在不使服务器崩溃的情况下预览该块。

权限

未安装权限模组时,Shtreimel 使用原版 OP 等级:

  • Op 2:只读命令(list、info、rank、history、who、watch、空间查询、physics-stats、dump、snapshot diff、lag autotune)。
  • Op 3:破坏性和改变状态的命令(delete、freeze、archive save / restore / prune / verify、forces start / stop、audit 查询)。
  • Op 4:跳过 --confirm 令牌。服务器控制台和 RCON 为 op 4。

如果你运行权限模组(LuckPerms、FTB Ranks、Fabric Permissions API 等),命名节点为:

  • shtreimel.observe
  • shtreimel.profile
  • shtreimel.delete
  • shtreimel.delete.confirm_bypass
  • shtreimel.audit.read

安装

  1. 确保你的服务器在 mods/ 中有 Sable 1.2.1 或更新版本。
  2. 从 Releases 下载匹配的 jar 并放入同一个 mods/ 文件夹:
    • NeoForge 上使用 shtreimel-neoforge-1.21.1-<version>.jar,或
    • Fabric 上使用 shtreimel-fabric-1.21.1-<version>.jar。
  3. 启动服务器。配置文件会生成在 <world>/serverconfig/shtreimel-server.toml,编辑文件后会重新加载。现有的 0.3.x 配置、冻结状态、归档、快照和审计日志仍然可读。

就这样。玩家的客户端无需安装任何东西。

兼容性

NeoForge

组件 所需版本
Minecraft 1.21.1
NeoForge 21.1.219 或更高版本
Java 21
Sable 1.2.1 至 2.x(&gt;=1.2.1 &lt;3.0.0)

NeoForge 上的可选项

模组 提供的功能
Create 崩溃报告可以注明在 ContraptionCollider.collideEntities 中正在处理的机械装置。可在服务器配置中通过 mixins.createContraptionContextEnabled 开关此功能。
Create Aeronautics 与 Create 相同的崩溃上下文信息;当航空装置等 Aeronautics 机械装置通过 Create 的碰撞器处理时,也会显示其类型。

即使未安装 Create,Shtreimel 的其他所有功能也可在仅安装 Sable 的 NeoForge 服务器上运行。

Fabric

组件 所需版本
Minecraft 1.21.1
Fabric 加载器 0.16.9 或更高版本
Fabric API 0.110.0+1.21.1(需要 fabric-command-api-v2 和 fabric-lifecycle-events-v1)
Java 21
Sable 1.2.1 至 2.x(&gt;=1.2.1 &lt;3.0.0)

Fabric 上的可选项

模组 提供的功能
— 0.5.0 版本没有可选的模组集成功能。所有管理、审计、生命周期、冻结、归档、快照、占用情况和崩溃信息增强功能均已内置。Create 机械装置崩溃上下文功能仅支持 NeoForge,因为 Create 6 和 Create Aeronautics 未发布官方的 1.21.1 Fabric 版本。

已打包在 Fabric jar 中

组件 用途
Fabric Permissions API 0.3.3 与 NeoForge 相同的权限节点和原版 op 权限回退机制

两个加载器通用说明

  • 只安装一个 Shtreimel jar:shtreimel-neoforge-1.21.1-<version>.jar 或 shtreimel-fabric-1.21.1-<version>.jar。
  • Sable Companion 已随 Sable 一同提供;无需单独安装 Shtreimel。
  • 在专用服务器上,玩家无需在客户端安装 Shtreimel。

常见问题

Shtreimel – Sable Utility 支持哪些 Minecraft 版本?

Shtreimel – Sable Utility 支持 Minecraft Java 版 1.21.1,可用的加载器:Fabric / NeoForge。下载时注意选择和你游戏版本一致的文件。

Shtreimel – Sable Utility 怎么安装?

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

评论

登录后评论和评分

sauramel 的其他作品

查看全部 →