Ticker (事件总线订阅)
基本信息
| 属性 | 值 |
|---|---|
| 类 | mypermissions.core.handlers.Ticker |
| 单例 | Ticker.instance |
| 总线 | FMLCommonHandler.bus() + MinecraftForge.EVENT_BUS(都在 preInit 注册) |
功能
只对内置权限系统(MyPermissionsBridge)生效,做两件事:
- 玩家登录时把 UUID 添加到容器(不存在则用默认组新建,存在则校准
lastPlayerName),必要时saveUsers()。 - 命令执行 hook:
CommandEvent触发后用对应 Bridge 查权限,不通过则setCanceled(true)并把commands.generic.permission异常附上。
事件
PlayerEvent.PlayerLoggedInEvent (HIGHEST)
| 行为 | 备注 |
|---|---|
若 manager instanceof MyPermissionsBridge |
否则整段跳过 |
manager.users.get(uuid) == null |
manager.users.add(uuid)(绑定默认组) + updateLastPlayerName(uuid) + saveUsers() |
| 已存在 | 若 updateLastPlayerName 返回 true 才 saveUsers() |
CommandEvent (HIGHEST)
| 条件 | 行为 |
|---|---|
manager 不是 MyPermissionsBridge 或 sender 不是 EntityPlayer |
跳过 |
CommandManager.getPermForCommand(commandName) |
拿到权限节点;为 null 则用兜底 cmd.<commandName> |
user.hasPermission(perm) |
不通过 → ev.setCanceled(true) + ev.exception = new CommandException("commands.generic.permission") |
相关条目
- MyPermissions (主 mod 类) - 注册本实例
- User -
users.add(uuid)/hasPermission - PermissionProxy - 决定 manager 类型
- CommandManager - 提供
getPermForCommand