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 的语义不同(后者阻止放置)。
相关条目