XYLogin —— 一款简单但功能强大的新起之秀的登录插件 [正版离线混存]  [Folia支持]

原创 闭源 XYLogin —— 一款简单但功能强大的新起之秀的登录插件 [正版离线混存] [Folia支持] 1.0.4 beta-1

请登录后获取
修复一些线程问题
如果你使用Folia那这个更新务必要更新
1. 密码安全性加强
2. 优化了一些问题
3. 修复上次下线点出现丢失的问题
4. 修复正版登录,离线混存问题。
1. 新增正版自动登录
2. 新增Folia支持
1. 修复了ForceUserLogin返回不正确问题
添加开发者事件
PlayerKickEvent
PlayerLoginEvent
PlayerRegisterEvent
PlayerLogoutEvent



Java:
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) {
        // 这个方法会在其他优先级之后执行
        // 适合用于日志记录、统计等不影响主要逻辑的操作
    }
}
后退
顶部 底部