Ticker (事件总线订阅)

基本信息

属性 值
类 mypermissions.core.handlers.Ticker
单例 Ticker.instance
总线 FMLCommonHandler.bus() + MinecraftForge.EVENT_BUS(都在 preInit 注册)

功能

只对内置权限系统(MyPermissionsBridge)生效,做两件事:

  1. 玩家登录时把 UUID 添加到容器(不存在则用默认组新建,存在则校准 lastPlayerName),必要时 saveUsers()。
  2. 命令执行 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")

相关条目