package Thexiaoyu.xynb;
import Thexiaoyu.xYLogin.events.PlayerKickEvent;
import Thexiaoyu.xYLogin.events.PlayerLoginEvent;
import Thexiaoyu.xYLogin.events.PlayerLogoutEvent;
import Thexiaoyu.xYLogin.events.PlayerRegisterEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
/**
* 在你的插件中监听 XYLogin 事件的示例
*
* 使用方法:
* 1. 在你的插件中添加这个监听器类
* 2. 在 plugin.yml 中添加 depend: [xYLogin] 或 softdepend: [xYLogin]
* 3. 在主类的 onEnable() 中注册监听器:
* getServer().getPluginManager().registerEvents(new XYLoginEventListener(this), this);
*/
public class XYLoginEventListener implements Listener {
private final YourPlugin plugin;
public XYLoginEventListener(YourPlugin plugin) {
this.plugin = plugin;
}
/**
* 监听玩家登录事件
*
* @param event 登录事件
*/
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerLogin(PlayerLoginEvent event) {
String playerName = event.getPlayer().getName();
// 获取登录类型
switch (event.getLoginType()) {
case NORMAL:
plugin.getLogger().info(playerName + " 通过密码登录");
break;
case FORCE:
plugin.getLogger().info(playerName + " 被管理员强制登录");
break;
case SESSION:
plugin.getLogger().info(playerName + " 通过会话自动登录");
break;
}
// 可以取消登录
// if (某个条件) {
// event.setCancelled(true);
// event.setCancelReason("你的账号被冻结");
// }
}
/**
* 监听玩家注册事件
*
* @param event 注册事件
*/
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerRegister(PlayerRegisterEvent event) {
String playerName = event.getPlayer().getName();
plugin.getLogger().info(playerName + " 注册了新账号");
// 可以取消注册
// if (玩家名字不符合规则) {
// event.setCancelled(true);
// event.setCancelReason("用户名不符合规则");
// }
}
/**
* 监听玩家登出事件
*
* @param event 登出事件
*/
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerLogout(PlayerLogoutEvent event) {
String playerName = event.getPlayer().getName();
// 获取登出原因
switch (event.getReason()) {
case QUIT:
plugin.getLogger().info(playerName + " 正常退出");
break;
case SESSION_TIMEOUT:
plugin.getLogger().info(playerName + " 会话超时");
break;
case KICKED:
plugin.getLogger().info(playerName + " 被踢出");
break;
case PLUGIN_RELOAD:
plugin.getLogger().info(playerName + " 因插件重载而登出");
break;
case MANUAL:
plugin.getLogger().info(playerName + " 手动登出");
break;
}
}
/**
* 监听玩家被踢出事件
*
* @param event 踢出事件
*/
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerKick(PlayerKickEvent event) {
String playerName = event.getPlayer().getName();
// 获取踢出原因
switch (event.getReason()) {
case LOGIN_TIMEOUT:
plugin.getLogger().info(playerName + " 因登录超时被踢出");
break;
case TOO_MANY_ATTEMPTS:
plugin.getLogger().info(playerName + " 因密码错误次数过多被踢出");
break;
case NOT_LOGGED_IN:
plugin.getLogger().info(playerName + " 因未登录尝试操作被踢出");
break;
case SESSION_EXPIRED:
plugin.getLogger().info(playerName + " 因会话过期被踢出");
break;
case ADMIN_KICK:
plugin.getLogger().info(playerName + " 被管理员踢出");
break;
case OTHER:
plugin.getLogger().info(playerName + " 因其他原因被踢出");
break;
}
}
/**
* 高优先级监听 - 在其他插件之前处理
*/
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerLoginHighest(PlayerLoginEvent event) {
// 这个方法会在 NORMAL 优先级之前执行
// 适合用于必须优先处理的逻辑
}
/**
* 低优先级监听 - 在其他插件之后处理
*/
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerLoginLowest(PlayerLoginEvent event) {
// 这个方法会在其他优先级之后执行
// 适合用于日志记录、统计等不影响主要逻辑的操作
}
}