GlymeraChunkGrid

GlymeraChunkGrid

GlymeraChunkGrid 使用半透明的紫色调试框可视化区块边界。使用 /grid 切换 - 显示为每位玩家单独设置,实时更新,对服务器性能无任何影响。

实用

📐 GlymeraChunkGrid 📐

使用 /grid 命令,借助 DebugShape 方块切换区块边界可视化。

最新版本仅适用于 Hytale stable 5!不要错过我的其他精彩项目——请查看 GlymeraCraft 的个人资料 Discord:https://discord.gg/s5NRFWfxgy


◆ GlymeraChunkGrid 是什么?

GlymeraChunkGrid 让玩家能够使用半透明的紫色调试方块来可视化他们当前所处区块的精确边界。使用 /grid 命令即可开启,一个完整的当前 32x32 方块区块轮廓将出现在你周围——在你的 Y 高度有勾勒出四条边的四条水平边界线,以及在每个角向上延伸 20 个方块的四个垂直立柱。

该显示完全基于每个玩家独立进行。每个玩家独立控制自己的区块网格。调试方块仅通过直接数据包发送给开启此功能的玩家——服务器上的其他玩家看不到它们,并且世界中不会实际放置任何实体或方块。显示每半秒更新一次,随着玩家在区块间移动而无缝跟随。

这是一个面向服务器管理员、建筑师以及需要了解精确区块边界的玩家的实用工具。当你使用基于区块的系统(如领地保护、人口上限、出生信标或任何其他以区块为单位运作的机制)时,它尤其有用。

◆ 工作原理 - 逐步说明

  1. 玩家在聊天栏输入 /grid
  2. 命令获取玩家的当前位置,并通过将 X 和 Z 坐标除以 32(Hytale 的区块大小)并向下取整来计算他们所在的区块。
  3. 玩家的 UUID 被添加到已启用玩家集合中。发送一条确认消息:"Chunk grid ON - You are in chunk 4:7"(显示区块坐标)。
  4. 500 毫秒,一个计划好的渲染任务在服务器上运行。它会遍历所有已加载世界中所有已启用的玩家。
  5. 对于每个已启用的玩家,插件会:
    • 从玩家的 TransformComponent 中获取其当前位置
    • 计算区块边界:minX, maxX (minX + 32), minZ, maxZ (minZ + 32)
    • 清除该玩家之前显示的所有调试方块
    • 在玩家的 Y 高度处,沿着区块的 4 条边发送 水平边界方块,每条边由两根半长条首尾相接组成
    • 在区块的 4 个角发送 垂直立柱方块,从玩家 Y 位置向上延伸 20 个方块
  6. 所有调试方块都作为 DisplayDebug 数据包,使用 writeNoCache() 直接发送给单个玩家的数据包处理器。其他玩家不会收到这些数据包。
  7. 显示会自动跟随玩家。当他们走进另一个区块时,下一个渲染周期(500 毫秒内)会显示新区块的边界。
  8. 要禁用,玩家再次输入 /grid。他们的 UUID 会从集合中移除,所有调试方块被清除,并发送消息 "Chunk grid OFF"。该玩家将不再有方块被渲染。
  9. 如果玩家在显示激活时断开连接,下一个渲染周期会检测到 PlayerRef 为 null,并自动将其从启用集合中移除。

◆ 功能特性

  • 按玩家切换 - 每个玩家通过 /grid 独立开启或关闭自己的区块网格显示。多名玩家可以同时激活此功能而互不干扰。
  • 私人显示 - 调试方块作为直接数据包仅发送给单个玩家。其他玩家看不到它们。世界中不会放置实体或方块。对其他玩家的视觉影响为零。
  • 水平区块轮廓 - 半透明的紫色方块在玩家当前 Y 高度处勾勒出 32x32 区块的全部 4 条边。每条边由两根半长条(每根 16 方块)首尾相接组成,形成连续的边界线。北边 (minZ)、南边 (maxZ)、西边 (minX) 和东边 (maxX) 都会被渲染。
  • 垂直角立柱 - 在区块的 4 个角(西北、东北、西南、东南)各有一个垂直方块从玩家 Y 位置向上延伸 20 个方块。这有助于在 3D 空间中可视化区块边界,尤其是在地形起伏的区域。
  • 流畅的实时跟踪 - 显示每 500 毫秒更新一次。当玩家移动时,边界会平滑地变化,以显示玩家当前所在的区块。每个方块的 2 秒显示时间与 0.5 秒的刷新率重叠,确保持续可见,无闪烁或间隙。
  • 区块坐标显示 - 启用网格时,玩家会在聊天消息中看到他们当前的区块坐标,格式为 "chunk X:Z"。
  • 多世界支持 - 渲染任务会遍历服务器上所有已加载的世界。如果玩家移动到不同的世界,他们的网格会在新世界中继续渲染。玩家仅在他们当前所在的世界中被渲染(通过存储引用比较检查)。
  • 自动清理 - 如果玩家断开连接或他们的 PlayerRef 变为无效,他们将在下一个渲染周期期间自动从启用集合中移除。在插件关闭时,所有已启用玩家的调试方块都会被清除,然后清空集合。
  • 非活跃时零服务器负载 - 渲染任务在执行任何工作前会检查已启用玩家集合是否为空。如果没有玩家激活网格,任务会立即返回,不进行任何处理。
  • 线程安全 - 已启用玩家集合使用 ConcurrentHashMap.newKeySet() 来保证线程安全。渲染任务通过 world.execute() 分发到每个世界的线程,以安全地访问实体位置。命令处理器也通过 world.execute() 分发,以安全地读取玩家的位置。

◆ 调试方块布局

每个渲染周期为一个玩家生成以下调试方块:

▸ 水平边界(在玩家 Y 高度)

  • 北边 - 在 z=minZ 处沿 X 轴首尾放置的两个方块,每个长 16 方块,厚 0.1 方块。第一个方块覆盖从 minX 到 midX,第二个从 midX 到 maxX。
  • 南边 - 在 z=maxZ 处沿 X 轴首尾放置的两个方块,布局与北边相同。
  • 西边 - 在 x=minX 处沿 Z 轴首尾放置的两个方块,每个长 16 方块,厚 0.1 方块。第一个方块覆盖从 minZ 到 midZ,第二个从 midZ 到 maxZ。
  • 东边 - 在 x=maxX 处沿 Z 轴首尾放置的两个方块,布局与西边相同。

▸ 垂直立柱(在 4 个角)

  • 西北角 - 在 (minX, playerY, minZ) 处向上延伸 20 个方块的垂直方块,X 和 Z 方向厚度为 0.1 方块
  • 东北角 - 在 (maxX, playerY, minZ) 处向上延伸 20 个方块的垂直方块,X 和 Z 方向厚度为 0.1 方块
  • 西南角 - 在 (minX, playerY, maxZ) 处向上延伸 20 个方块的垂直方块,X 和 Z 方向厚度为 0.1 方块
  • 东南角 - 在 (maxX, playerY, maxZ) 处向上延伸 20 个方块的垂直方块,X 和 Z 方向厚度为 0.1 方块

每个玩家每渲染周期的调试方块总数:12 个方块(8 个水平边界条 + 4 个垂直角立柱)。每个方块的显示时长为 2 秒。由于刷新率为 500 毫秒,方块会重叠显示以实现持续可见性。

◆ 命令

  • /grid - 开启或关闭区块网格显示。启用时,显示你当前的区块坐标(例如 "Chunk grid ON - You are in chunk 4:7")。禁用时,清除所有调试方块并显示 "Chunk grid OFF"。只能由玩家使用,控制台无法使用。

◆ 配置

此插件无配置文件。所有值都内置于插件中:

  • 区块大小 - 32 方块(Hytale 默认区块大小)
  • 方块类型 - DebugShape.Cube(实心半透明方块)
  • 颜色 - 紫色(RGB 0.78, 0.36, 1.0)匹配 Glymera 主题
  • 不透明度 - 0.6(半透明,可见但不遮挡)
  • 线条厚度 - 水平和垂直立柱均为 0.1 方块
  • 立柱高度 - 从玩家 Y 位置向上 20 方块
  • 显示时长 - 每个方块 2 秒(与刷新率重叠以实现连续显示)
  • 渲染间隔 - 500 毫秒(方块每秒刷新两次)

◆ 技术细节

  • 区块边界使用带有 DebugShape.Cube 的 DisplayDebug 数据包进行渲染,该数据包会绘制由 4x4 列主变换矩阵定义的实心半透明方块
  • 每个方块由其中心位置(平移)和尺寸(缩放)定义,这些信息编码在变换矩阵中。对角线的缩放值控制方块大小,而底行控制位置。
  • 在每个渲染周期之前,会使用 ClearDebugShapes 数据包清除之前的调试方块,确保没有残留方块累积
  • 数据包通过 playerRef.getPacketHandler().writeNoCache() 发送——直接发送给单个玩家,绕过服务器的正常广播系统
  • 已启用玩家集合使用 ConcurrentHashMap.newKeySet() 以实现线程安全的并发访问
  • 渲染任务在 Hytale 的 ScheduledExecutor 上以固定的 500 毫秒间隔运行,并通过 world.execute() 分发到每个世界的线程
  • 通过比较 ref.getStore() 与当前世界的 store,跳过不同世界的玩家
  • 区块坐标计算:chunkX = floor(playerX / 32), chunkZ = floor(playerZ / 32)
  • 在插件关闭时,所有已启用玩家的调试方块被清除,渲染任务被取消
  • 插件无持久状态。如果服务器重启,所有玩家的区块网格默认关闭。

◆ 安装

  1. 停止你的 Hytale 服务器
  2. GlymeraChunkGrid.jar 复制到服务器目录的 mods/ 文件夹中
  3. 启动你的服务器
  4. 检查服务器日志中是否包含消息:"GlymeraChunkGrid v2.2.0 started!"
  5. 在游戏中,输入 /grid 来开启或关闭显示

无需资源包。此插件是一个独立的 JAR 文件,无外部依赖。

◆ 支持

遇到问题或疑问?在此留言或访问我们的 Discord!


由 GlymeraCraft 开发