客户端视觉效果

客户端视觉效果

Clientside Visuals 是一个库模组,旨在向玩家显示某些内容,但不向其他玩家显示。

图书馆

客户端视觉效果

一个轻量级的 Hytale 服务端插件,提供持久化的、针对每个玩家的客户端可视化功能。它最初是一个调试方块高亮器,后来发展成一个双系统处理器,足以被打包并在多个项目中重复使用。

系统

调试可视化

在客户端为任意一组方块位置渲染彩色线框立方体。相邻方块会自动合并为最小数量的轴对齐包围盒(AABB),无论区域大小如何,都能保持较低的数据包体积。视觉效果通过后台定时器持久化——无需每刻更新代码。

假门

发送客户端的 ServerSetBlock 数据包,将指定位置替换为空气,使这些方块在视觉上变得可通过,从而允许玩家穿过。世界状态不会被修改。清除一个假门集合会自动将客户端恢复为真实的方块。

假方块(即将推出——需要旋转支持)


设置

// 每个系统或实体使用一个管理器
private transient final VisualizationManager vizManager = new VisualizationManager("mymod_" + System.identityHashCode(this));

管理器在构造时自动注册,并在服务器关闭时自动清理。


使用说明

这两个系统完全独立——可以单独使用其中一个,也可以同时使用两者。

仅使用假门

// 让一堵墙对某个特定玩家变为可通过
vizManager.addFakeDoors(playerId, "north_gate", getNorthGatePositions());
vizManager.addFakeDoors(playerId, "south_gate", getSouthGatePositions());
// 独立关闭一个门,不影响另一个
vizManager.clear(playerId, "north_gate");

仅使用调试可视化

// 同时可视化一个带有多个命名覆盖层的区域
vizManager.addDebugVisuals(playerId, "interior", getInteriorPositions(), new Vector3f(0.0F, 1.0F, 0.0F));
vizManager.addDebugVisuals(playerId, "boundary", getBoundaryPositions(), new Vector3f(1.0F, 0.0F, 0.0F));
// 清除一个而不影响另一个
vizManager.clear(playerId, "boundary");

使用调试可视化覆盖假门

一个简单的调试模式标志可以在实践中轻松管理此操作:

vizManager.addFakeDoors(playerId, "entrance", doorPositions);
if (debugMode) {
    vizManager.addDebugVisuals(playerId, "entrance_debug", doorPositions, new Vector3f(0.0F, 1.0F, 0.0F));
}