TemporaWand
基本信息
| 属性 | 值 |
|---|---|
| 类名 | com.colen.tempora.items.TemporaWand |
| 注册名 | admin_wand(CommonProxy.java:32) |
| 本地化名 | tempora_wand(setUnlocalizedName) |
| 堆叠上限 | 1 |
| 创造栏 | CreativeTabs.tabTools |
| 纹理 | tempora:tempora_wand |
| 权限 | 仅 OP(PlayerUtils.isPlayerOp) |
功能
管理员「取证棒」:右键方块某个面,查询该坐标在所有 logger 中的历史事件。
行为
| 方法 | 行为 |
|---|---|
onBlockStartBreak |
左键破坏方块 → 查询该坐标事件;随后取消破坏(返回 true)并在服务端 markBlockForUpdate 强制刷新 |
onItemUse |
右键 → 取被点击面的相邻方块坐标;客户端只造一个临时区域渲染出盒子并返回 false;服务端执行查询并返回 true |
- 客户端分支构造
TemporaWorldRegion,setRenderMode(RegionRenderMode.TEMPORA_WAND),setRenderStartTimeMs(System.currentTimeMillis()),UUID 随机生成,加入ClientRegionStore。 checkSpot对非 OP 玩家:向所有 OP 广播player.tempora_wand.unauthorised并LOG.warn记下坐标与维度。
实现要点
- ⚠️ 注册名
admin_wand与本地化名tempora_wand不一致,配方 / 数据包用前者,lang key 用后者。 - 左键与右键都被用作查询,此物品不能破坏任何方块。
onBlockStartBreak里isServerSide()判断写了两遍(TemporaWand.java:47与:51),第一次包住checkSpot,第二次包住markBlockForUpdate。- 单击时
onBlockStartBreak返回true取消破坏,与onItemUse返回true的语义不同(后者阻止放置)。
相关条目
- CommonProxy - 注册位置
- TemporaWorldRegion - 客户端临时区域
- RegionRenderMode - 渲染模式枚举
- ClientRegionStore - 区域存储