185 lines
6.8 KiB
Java
185 lines
6.8 KiB
Java
package com.loki.lochat;
|
||
|
||
import com.loki.lochat.api.service.IgnoreService;
|
||
import com.loki.lochat.api.service.MuteService;
|
||
import com.loki.lochat.api.service.NickService;
|
||
import com.loki.lochat.commands.*;
|
||
import com.loki.lochat.config.ConfigManager;
|
||
import com.loki.lochat.config.MessageConfig;
|
||
import com.loki.lochat.core.registry.ServiceRegistry;
|
||
import com.loki.lochat.gradient.GradientModule;
|
||
import com.loki.lochat.integrations.DiscordIntegration;
|
||
import com.loki.lochat.integrations.LibertyBansHook;
|
||
import com.loki.lochat.integrations.PlaceholderAPIHook;
|
||
import com.loki.lochat.core.filter.AdvancedMessageFilter;
|
||
import com.loki.lochat.listener.ChatEventListener;
|
||
import com.loki.lochat.listener.DiscordEventListener;
|
||
import com.loki.lochat.listener.PlayerEventListener;
|
||
import com.loki.lochat.managers.AutoMessageManager;
|
||
import com.loki.lochat.managers.CustomCommandManager;
|
||
import org.bukkit.Bukkit;
|
||
import org.bukkit.plugin.java.JavaPlugin;
|
||
|
||
/**
|
||
* Главный класс плагина LoChat
|
||
* Использует SOLID архитектуру с Dependency Injection через ServiceRegistry
|
||
*/
|
||
public final class LoChat extends JavaPlugin {
|
||
|
||
private static LoChat instance;
|
||
private ServiceRegistry serviceRegistry;
|
||
private ConfigManager configManager;
|
||
private MessageConfig messageConfig;
|
||
private GradientModule gradientModule;
|
||
private AutoMessageManager autoMessageManager;
|
||
private CustomCommandManager customCommandManager;
|
||
private DiscordIntegration discordIntegration;
|
||
private CommandManager commandManager;
|
||
private AdvancedMessageFilter advancedMessageFilter;
|
||
|
||
// Геттеры
|
||
public static LoChat getInstance() {
|
||
return instance;
|
||
}
|
||
|
||
@Override
|
||
public void onEnable() {
|
||
instance = this;
|
||
getLogger().info("Загрузка LoChat v" + getPluginMeta().getVersion() + " для Paper/Folia " + Bukkit.getMinecraftVersion() + "...");
|
||
|
||
// Конфиги
|
||
configManager = new ConfigManager(this);
|
||
messageConfig = new MessageConfig(this);
|
||
|
||
// Service Registry (SOLID DI) - с зависимостями
|
||
serviceRegistry = ServiceRegistry.createWithDeps(this, configManager, messageConfig);
|
||
getLogger().info("ServiceRegistry инициализирован (SOLID DI)");
|
||
|
||
// Менеджеры
|
||
customCommandManager = CustomCommandManager.create(this);
|
||
autoMessageManager = new AutoMessageManager(this);
|
||
|
||
// Интеграции
|
||
initIntegrations();
|
||
|
||
// Команды и слушатели
|
||
commandManager = new CommandManager(this);
|
||
commandManager.registerCommands();
|
||
registerListeners();
|
||
registerPluginChannels();
|
||
|
||
// Автосообщения
|
||
autoMessageManager.start();
|
||
|
||
getLogger().info("LoChat успешно запущен!");
|
||
}
|
||
|
||
@Override
|
||
public void onDisable() {
|
||
if (autoMessageManager != null) autoMessageManager.stop();
|
||
|
||
// Сохраняем статистику
|
||
com.loki.lochat.api.service.PlayerDataService pds = serviceRegistry.get(com.loki.lochat.api.service.PlayerDataService.class);
|
||
if (pds != null) pds.saveAll();
|
||
|
||
// Сохранение данных через сервисы
|
||
IgnoreService ignoreService = serviceRegistry.get(IgnoreService.class);
|
||
if (ignoreService != null) ignoreService.save();
|
||
|
||
MuteService muteService = serviceRegistry.get(MuteService.class);
|
||
if (muteService != null) muteService.save();
|
||
|
||
NickService nickService = serviceRegistry.get(NickService.class);
|
||
if (nickService != null) nickService.save();
|
||
|
||
// Останавливаем Discord executor
|
||
if (discordIntegration != null) discordIntegration.shutdown();
|
||
|
||
if (gradientModule != null) gradientModule.shutdown();
|
||
getLogger().info("LoChat отключен!");
|
||
}
|
||
|
||
private void initIntegrations() {
|
||
// Discord интеграция
|
||
discordIntegration = new DiscordIntegration(this);
|
||
|
||
// Gradient модуль
|
||
gradientModule = new GradientModule(this);
|
||
if (gradientModule.init()) {
|
||
getLogger().info("Gradient модуль (LoPreff) загружен!");
|
||
}
|
||
|
||
// LibertyBans
|
||
new LibertyBansHook(this);
|
||
|
||
// PlaceholderAPI
|
||
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
|
||
new PlaceholderAPIHook(this).register();
|
||
getLogger().info("PlaceholderAPI подключен!");
|
||
}
|
||
}
|
||
|
||
// Старый метод регистрации команд - заменен на CommandManager
|
||
/*
|
||
private void registerCommands() {
|
||
// Код перенесен в CommandManager для лучшей организации
|
||
}
|
||
*/
|
||
|
||
private void registerListeners() {
|
||
// Создаём один экземпляр фильтра и передаём в оба листенера — flood/spam трекеры общие
|
||
advancedMessageFilter = new AdvancedMessageFilter(getConfig(), this);
|
||
getServer().getPluginManager().registerEvents(new ChatEventListener(this, serviceRegistry, advancedMessageFilter), this);
|
||
getServer().getPluginManager().registerEvents(new PlayerEventListener(serviceRegistry, advancedMessageFilter), this);
|
||
|
||
// Discord listener
|
||
if (discordIntegration.isEnabled()) {
|
||
getServer().getPluginManager().registerEvents(new DiscordEventListener(discordIntegration), this);
|
||
getLogger().info("Discord event listener registered");
|
||
}
|
||
|
||
getLogger().info("Слушатели зарегистрированы (новая архитектура)");
|
||
}
|
||
|
||
private void registerPluginChannels() {
|
||
getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
|
||
getLogger().info("BungeeCord plugin messaging channel registered");
|
||
}
|
||
|
||
public void reload() {
|
||
configManager.reload();
|
||
messageConfig.reload();
|
||
autoMessageManager.reload();
|
||
if (gradientModule != null) gradientModule.reload();
|
||
if (customCommandManager != null) customCommandManager.reload();
|
||
if (discordIntegration != null) discordIntegration.reload();
|
||
}
|
||
|
||
public ServiceRegistry getServiceRegistry() {
|
||
return serviceRegistry;
|
||
}
|
||
|
||
public ConfigManager getConfigManager() {
|
||
return configManager;
|
||
}
|
||
|
||
public MessageConfig getMessageConfig() {
|
||
return messageConfig;
|
||
}
|
||
|
||
public GradientModule getGradientModule() {
|
||
return gradientModule;
|
||
}
|
||
|
||
public CustomCommandManager getCustomCommandManager() {
|
||
return customCommandManager;
|
||
}
|
||
|
||
public CommandManager getCommandManager() {
|
||
return commandManager;
|
||
}
|
||
|
||
public DiscordIntegration getDiscordIntegration() {
|
||
return discordIntegration;
|
||
}
|
||
}
|