BlockWhitelist

基本信息

属性 值
类名 mytown.entities.BlockWhitelist
文件 src/main/java/mytown/entities/BlockWhitelist.java
行数 113
启用版本 Minecraft 1.7.10

功能

保护白名单例外 —— 允许在「本该被保护」的位置对某个特定 flag 执行操作。 典型用途:让居民能右键自己家城镇里的某个箱子(ACCESS), 但不能破坏它。

每个实例绑定 1 个坐标 + 1 个 FlagType:

public BlockWhitelist(int dim, int x, int y, int z, FlagType flagType)

字段与访问器

成员 说明
getDim() / getX() / getY() / getZ() 四个坐标分量(含 y,比 TownBlock 更细)
getFlagType() / setFlagType 绑定的 flag 类型
getDbID() / setDbID(int) 数据库主键
isDeleted() / delete() 软删除标记

⚠️ 白名单坐标是方块级(有 y),而城镇占用是区块级(无 y)。 两个粒度在本 mod 内并存,混用会出错。

BlockWhitelist.Container

extends ArrayList<BlockWhitelist>(未实现 IChatFormat,与 Flag.Container 等不同),提供两个坐标 + flagType 维度的重载:

方法 说明
contains(int dim, int x, int y, int z, FlagType flagType) 是否在白名单中
remove(int dim, int x, int y, int z, FlagType flagType) 移除

实现要点

  • delete() 采用软删除(置 isDeleted),而非从容器移除 —— 以便持久化删除动作。
  • 只有 WHITELISTABLE 的 flag 才有意义:FlagType 中仅 ACCESS、PICKUP、ACTIVATE 三项带该标记(见 FlagType)。 给其它 flag 加白名单不会被拒绝,因为 Commands 的 flagCompletionWhitelist 补全根本不提供这些选项。
  • 持久化到 BlockWhitelists 表,见 Schema。
  • 加载时机受 ProtectionParser 之前的 MyTownDatasource 初始化顺序约束。

相关条目