WhitelisterTool

基本信息

属性 值
类名 mytown.entities.tools.WhitelisterTool
文件 src/main/java/mytown/entities/tools/WhitelisterTool.java
行数 134
继承 extends myessentials.utils.Tool
启用版本 Minecraft 1.7.10

功能

白名单选取工具。类注释 A tool that selects a block to add it to whitelists for protection. 手持工具右键某方块,把该方块 + 指定 flag 加入 BlockWhitelist。

字段

字段 初值 说明
owner — 由构造器传入 Resident owner
flagType FlagType.ACCESS 要豁免的 flag

构造器 WhitelisterTool(Resident owner)。

关键实现

Town town = MyTownUtils.getTownAtPosition(bp.getDim(), bp.getX() >> 4, bp.getZ() >> 4);
if (!hasPermission(town, bp)) return;
if (flagType == null) { ... }

hasPermission(town, bp) 传的是方块坐标(含 y), 与 PlotSelectionTool 的 hasPermission(town) 不同 —— 白名单是方块级例外,粒度更细。

实现要点

⚠️ flagType 默认是 FlagType.ACCESS,不是任意 flag。 切换 flag 的入口是命令参数,运行中可被设为 null(源码显式判空并另行处理)。

⚠️ 只有带 WHITELISTABLE 标记的 flag 才有意义 —— FlagType 中仅 3 个具备:ACCESS、PICKUP、ACTIVATE (见 FlagType)。 Commands 的 flagCompletionWhitelist 补全也只提供这 3 个, 其他 flag 无法通过命令设为白名单 flag。

⚠️ 本工具是唯一一个三个命令层都能装载的工具:

命令类 装载处
CommandsEveryone 2 处(行 332、317)
CommandsAssistant 1 处(行 332)
CommandsAdmin 1 处(行 980)

⚠️ 坐标换算同样用 >> 4 查城镇,但白名单本身记录方块坐标(含 y), 存进 BlockWhitelists 表。

相关条目