package me.dw1e.kbm; import me.dw1e.kbm.api.KnockbackManagerAPI; import me.dw1e.kbm.commands.KBMCommandHandler; import me.dw1e.kbm.config.ConfigManager; import me.dw1e.kbm.data.PlayerDataManager; import me.dw1e.kbm.listeners.PacketListener; import me.dw1e.kbm.listeners.PlayerEventListener; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.plugin.java.JavaPlugin; public final class KnockbackManager extends JavaPlugin { private static KnockbackManager instance; private ConfigManager configManager; private PlayerDataManager playerDataManager; private KnockbackManagerAPI api; private PacketListener packetListener; private int serverTick; private final String pluginPrefix = ChatColor.DARK_GRAY + "[" + ChatColor.YELLOW + "KBM" + ChatColor.DARK_GRAY + "] "; @Override public void onEnable() { instance = this; if (!getDescription().getName().equals("KnockbackManager") || !getDescription().getAuthors().contains("dw1e")) { getLogger().severe("检测到插件信息篡改,已停止运行!"); Bukkit.getPluginManager().disablePlugin(this); return; } this.configManager = new ConfigManager(this); this.playerDataManager = new PlayerDataManager(); this.api = new KnockbackManagerAPIImpl(this); this.configManager.loadConfigs(Bukkit.getConsoleSender()); this.playerDataManager.registerAllPlayers(); getCommand("kbm").setExecutor(new KBMCommandHandler(this)); Bukkit.getPluginManager().registerEvents(new PlayerEventListener(this), this); Bukkit.getScheduler().runTaskTimer(this, () -> serverTick++, 0L, 1L); setupProtocolLib(); getLogger().info("Knockback Manager 已启用!"); } @Override public void onDisable() { if (packetListener != null) { packetListener.unregister(); } if (playerDataManager != null) { playerDataManager.clearAllData(); } instance = null; getLogger().info("Knockback Manager 已禁用!"); } private void setupProtocolLib() { org.bukkit.plugin.Plugin protocolLib = Bukkit.getPluginManager().getPlugin("ProtocolLib"); if (protocolLib != null && protocolLib.isEnabled()) { String version = protocolLib.getDescription().getVersion(); try { int minorVersion = Integer.parseInt(version.split("\\.")[1]); if (minorVersion < 5) { logMessage(ChatColor.RED + "不支持的 ProtocolLib 版本: " + ChatColor.YELLOW + version + ChatColor.RED + ", 请使用 5.0.0 或之后的版本, Misplace 模块将不会启用!"); } else { logMessage(ChatColor.GREEN + "检测到 ProtocolLib " + ChatColor.YELLOW + version + ChatColor.GREEN + ", 已启用 Misplace 模块!"); this.packetListener = new PacketListener(this); this.packetListener.register(); } } catch (Exception e) { logMessage(ChatColor.RED + "解析 ProtocolLib 版本时出错, Misplace 模块将不会启用!"); } } else { logMessage(ChatColor.RED + "未检测到 ProtocolLib 安装/运行, Misplace 模块将不会启用!"); } } public void logMessage(String message) { Bukkit.getConsoleSender().sendMessage(pluginPrefix + message); } // Getters public static KnockbackManager getInstance() { return instance; } public ConfigManager getConfigManager() { return configManager; } public PlayerDataManager getPlayerDataManager() { return playerDataManager; } public KnockbackManagerAPI getAPI() { return api; } public int getServerTick() { return serverTick; } public String getPluginPrefix() { return pluginPrefix; } }