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!。

相关条目