SafemodeHandler
基本信息
| 属性 | 值 |
|---|---|
| 类名 | mytown.handlers.SafemodeHandler |
| 文件 | src/main/java/mytown/handlers/SafemodeHandler.java |
| 启用版本 | Minecraft 1.7.10 |
功能
安全模式 —— 当数据层出错(如数据库连不上)时,禁止玩家进入服务器, 避免在没有保护的环境里活动导致损失。
由 Mod 入口 注册到 FML bus。
状态
private static boolean safemode = false;
静态布尔,初值 false。类注释在 kickPlayers() 上:
Kicks all players that can't bypass safemode (mytown.adm.safemode) ——
即拥有 mytown.adm.safemode 权限者可豁免。
关键方法
| 方法 | 说明 |
|---|---|
onPlayerLoggedIn(PlayerLoggedInEvent) |
@SubscribeEvent(priority = EventPriority.HIGHEST);safemode 为真且玩家是 EntityPlayerMP 时踢出 |
kickPlayers() |
遍历 MinecraftServer.getServer().getConfigurationManager().playerEntityList,踢掉所有无豁免权限的在线玩家 |
实现要点
⚠️ 安全模式当前无法被自动触发。
Mod 入口 的 serverStarting 中,启用安全模式的那一行
是被注释掉的(MyTown.java:116):
// SafemodeHandler.setSafemode(!DatasourceProxy.start(config));
因此实际只有 /mytownadmin safemode 命令能改变状态
(见 CommandsAdmin)。
把它描述成「数据库故障时自动进入安全模式」是不实描述 ——
自动路径的代码不存在。
⚠️ 事件用 EventPriority.HIGHEST,确保在其他 mod 的登录处理之前踢人。
⚠️ 踢出消息取自 Config 的 safeModeMessage,
默认 MyTown is in safe mode. Please tell a server admin!。
相关条目
- Mod 入口 - 注册与被注释掉的启用行
- CommandsAdmin -
/mytownadmin safemode - Config -
safeModeMessage