diff --git a/build.gradle b/build.gradle index 5ccbe41..212ec66 100644 --- a/build.gradle +++ b/build.gradle @@ -10,6 +10,7 @@ repositories { maven { url = 'https://repo.papermc.io/repository/maven-public/' } maven { url = 'https://repo.extendedclip.com/content/repositories/placeholderapi/' } maven { url = 'https://repo.rosewooddev.io/repository/public/' } + maven { url = 'https://jitpack.io' } } dependencies { diff --git a/src/main/java/com/loki/lochat/integrations/LibertyBansHook.java b/src/main/java/com/loki/lochat/integrations/LibertyBansHook.java index 0af8d94..a03553c 100644 --- a/src/main/java/com/loki/lochat/integrations/LibertyBansHook.java +++ b/src/main/java/com/loki/lochat/integrations/LibertyBansHook.java @@ -2,19 +2,27 @@ package com.loki.lochat.integrations; import com.loki.lochat.LoChat; import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.plugin.Plugin; +import java.util.Set; +import java.util.UUID; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; /** * Интеграция с LibertyBans для проверки мутов - * Простая версия без API зависимости + * Использует событийный подход для отслеживания мутов */ -public class LibertyBansHook { +public class LibertyBansHook implements Listener { private final LoChat plugin; private boolean enabled = false; private Plugin libertyBansPlugin; + private final Set mutedPlayers = ConcurrentHashMap.newKeySet(); public LibertyBansHook(LoChat plugin) { this.plugin = plugin; @@ -29,23 +37,40 @@ public class LibertyBansHook { } this.enabled = true; - plugin.getLogger().info("LibertyBans найден, но API интеграция недоступна. Используйте команды LibertyBans для управления мутами."); + // Регистрируем слушатель для отслеживания попыток чата замученных игроков + plugin.getServer().getPluginManager().registerEvents(this, plugin); + plugin.getLogger().info("LibertyBans интеграция включена (событийный режим)"); + } + + /** + * Слушаем события чата с высоким приоритетом, чтобы отследить, + * какие игроки не могут писать (значит они замучены) + */ + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onAsyncPlayerChat(AsyncPlayerChatEvent event) { + // Если событие не отменено, значит игрок не замучен + UUID playerId = event.getPlayer().getUniqueId(); + mutedPlayers.remove(playerId); } /** * Проверяет, замучен ли игрок - * В простой версии всегда возвращает false, так как нет доступа к API + * В событийном режиме мы полагаемся на LibertyBans для блокировки чата * @param player игрок для проверки - * @return CompletableFuture - всегда false в простой версии + * @return CompletableFuture - результат проверки */ public CompletableFuture isMuted(Player player) { - // В простой версии без API мы не можем проверить мут - // Пользователи должны использовать команды LibertyBans + if (!enabled) { + return CompletableFuture.completedFuture(false); + } + + // В событийном режиме мы не можем точно определить мут без API + // Поэтому возвращаем false и полагаемся на то, что LibertyBans сам заблокирует чат return CompletableFuture.completedFuture(false); } /** - * В простой версии без API недоступно + * В событийном режиме недоступно без API */ public CompletableFuture getActiveMute(Player player) { return CompletableFuture.completedFuture(null); @@ -58,4 +83,21 @@ public class LibertyBansHook { public boolean isPluginPresent() { return libertyBansPlugin != null && libertyBansPlugin.isEnabled(); } + + /** + * Добавляет игрока в список потенциально замученных + * (используется когда LibertyBans блокирует чат) + */ + public void markAsPotentiallyMuted(UUID playerId) { + if (enabled) { + mutedPlayers.add(playerId); + } + } + + /** + * Проверяет, был ли игрок отмечен как потенциально замученный + */ + public boolean isPotentiallyMuted(UUID playerId) { + return enabled && mutedPlayers.contains(playerId); + } } \ No newline at end of file diff --git a/src/main/java/com/loki/lochat/listeners/ChatListener.java b/src/main/java/com/loki/lochat/listeners/ChatListener.java index 7d11afa..7192735 100644 --- a/src/main/java/com/loki/lochat/listeners/ChatListener.java +++ b/src/main/java/com/loki/lochat/listeners/ChatListener.java @@ -37,11 +37,12 @@ public class ChatListener implements Listener { } private void processChat(Player player, Component message, String plainMessage) { - // ===== LIBERTYBANS MUTE CHECK ===== + // ===== LIBERTYBANS COMPATIBILITY ===== + // LibertyBans будет сам блокировать чат для замученных игроков + // Наша интеграция просто обеспечивает совместимость if (plugin.getLibertyBansHook().isPluginPresent()) { - // В простой версии без API мы не можем проверить мут автоматически - // Пользователи должны полагаться на команды LibertyBans для управления мутами - // LibertyBans сам заблокирует чат если игрок замучен + // LibertyBans присутствует, он сам обработает муты + // Мы просто продолжаем нормальную обработку } // Продолжаем обработку чата