SecurityCache(appeng.me.cache.SecurityCache)
基本信息
| 属性 | 值 |
|---|---|
| 源码 | appeng/me/cache/SecurityCache.java |
| 类声明行号 | 37 |
| 实现接口 | appeng.api.networking.security.ISecurityGrid |
| 注册 | core/Registration.java:550(键 ISecurityGrid.class) |
| 构造器 | :47 |
职责
全网权限判定。回答两个问题:这网归谁(owner)、某玩家能不能做某操作。
判定入口
| 方法 | 行号 |
|---|---|
hasPermission(EntityPlayer, SecurityPermissions) |
121 |
hasPermission(int playerID, SecurityPermissions) |
131 |
getOwner() |
153 |
getSecurityKey() |
61 |
isAvailable() |
115 |
SecurityPermissions 枚举定义在 appeng/api/networking/security/(不在本分片)。
事件订阅
updatePermissions(MENetworkSecurityChange)(:52)—— 带
@MENetworkEventSubscribe,由 NetworkEventBus 反射注册。
OP 白名单(静态,全局)
| 方法 | 行号 | 性质 |
|---|---|---|
registerOpPlayer(GameProfile) |
164 | static |
unregisterOpPlayer(GameProfile) |
168 | static |
isPlayerOP(GameProfile) |
172 | static |
⚠️ 这三个是全局静态的,不随网走。OP 身份是玩家属性,不是网络属性。
刻意不实现 split / join
onSplit(:106)、onJoin(:109)、populateGridStorage(:112)
都是空 {}。
设计含义:权限跟着节点走(owner 由方块携带),不跟着 IGridStorage 走。
拆网时每半边各自重新从自己的节点收集 owner,而不是从共享存储复制。
见 GridStorage 的分裂契约。
与方块维度的关系
权限数据的存储在安全站方块里,读取方是
me/storage/SecurityInventory.java:36(构造器接收 TileSecurity)。
- 安全站方块:方块安全站
- 开关:AEFeature.Security
- 审计日志开关:AEFeature.LogSecurityAudits
- 建边审计发生在 GridConnection,本 cache 不参与