跳到主要内容

幻象会话

幻象(Illusion)会话是挥发能力的高级管理层,解决的核心问题是:当多个机制同时对同一玩家施加视觉效果时,如何在某个机制结束时只撤销它自己的效果,而不影响其他机制的效果。

IllusionKey

每个幻象效果都通过 IllusionKey 来标识其来源:

字段说明
viewerId目标玩家的标识
namespace来源命名空间,标识是哪个机制施加的效果
targetId效果目标的标识(如实体 ID 或方块位置)

通过这三个维度的组合,系统可以精确区分不同来源的效果,即使它们作用于同一个玩家和同一个目标。

可用操作

方块操作

putBlock(key, location, blockData)    // 添加伪方块
removeBlock(key, location) // 移除伪方块

世界边界操作

applyWorldBorder(key, borderState)    // 应用伪世界边界

实体标志操作

setEntityFlag(key, entity, flag, value)    // 设置实体标志

清除操作

clear(key)              // 清除指定来源的所有幻象效果
clearViewer(viewerId) // 清除指定玩家的所有幻象效果
  • clear(key) 只移除与该 Key 关联的效果,其他来源的效果不受影响
  • clearViewer(viewerId) 移除该玩家身上的全部幻象效果,无论来源

使用场景

假设你有两个机制同时作用于同一个玩家:

  • 区域机制:玩家进入某个区域时,让附近的怪物对该玩家发光
  • 技能机制:玩家释放技能时,让目标实体对该玩家发光

两个机制各自使用不同的 namespace 创建 IllusionKey,分别调用 setEntityFlag 施加发光效果。当区域机制结束时,调用 clear(regionKey) 只会移除区域机制施加的发光效果,技能机制的发光效果不受影响。

如果不使用幻象会话而是直接调用底层的 setFlag,区域机制关闭发光时会把技能机制的发光也一起关掉 —— 这就是幻象会话要解决的问题。

提示

当你只有单一来源的简单效果时,直接使用伪方块伪世界边界实体元数据即可,不需要引入幻象会话的额外复杂度。