Add built-in mute system with /lmute and /lunmute commands
- Added MuteManager for handling mutes with persistence (mutes.json) - Added /lmute <nick> <time> [-s] [reason] command - Added /lunmute <nick> [-s] command - Time formats: 1d, 2h, 30m, 60s, 0 for permanent - -s flag for silent mute/unmute (no broadcast) - Mute check integrated into ChatListener - Removed LibertyBans API dependency (using built-in system)
This commit is contained in:
parent
d44c5f811f
commit
c6175d9d61
7 changed files with 524 additions and 85 deletions
|
|
@ -2,102 +2,36 @@ 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 для проверки мутов
|
||||
* Использует событийный подход для отслеживания мутов
|
||||
* Заглушка для совместимости с LibertyBans
|
||||
* Теперь используется встроенная система мутов LoChat
|
||||
*/
|
||||
public class LibertyBansHook implements Listener {
|
||||
public class LibertyBansHook {
|
||||
|
||||
private final LoChat plugin;
|
||||
private boolean enabled = false;
|
||||
private Plugin libertyBansPlugin;
|
||||
private final Set<UUID> mutedPlayers = ConcurrentHashMap.newKeySet();
|
||||
|
||||
public LibertyBansHook(LoChat plugin) {
|
||||
this.plugin = plugin;
|
||||
initialize();
|
||||
}
|
||||
|
||||
private void initialize() {
|
||||
libertyBansPlugin = plugin.getServer().getPluginManager().getPlugin("LibertyBans");
|
||||
if (libertyBansPlugin == null || !libertyBansPlugin.isEnabled()) {
|
||||
plugin.getLogger().info("LibertyBans не найден, интеграция отключена");
|
||||
return;
|
||||
|
||||
// Проверяем наличие LibertyBans
|
||||
if (plugin.getServer().getPluginManager().getPlugin("LibertyBans") != null) {
|
||||
plugin.getLogger().info("LibertyBans обнаружен. Используйте встроенную систему мутов LoChat (/lmute, /lunmute)");
|
||||
}
|
||||
|
||||
this.enabled = true;
|
||||
// Регистрируем слушатель для отслеживания попыток чата замученных игроков
|
||||
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||
plugin.getLogger().info("LibertyBans интеграция включена (событийный режим)");
|
||||
}
|
||||
|
||||
/**
|
||||
* Слушаем события чата с высоким приоритетом, чтобы отследить,
|
||||
* какие игроки не могут писать (значит они замучены)
|
||||
* Проверяет, замучен ли игрок через встроенную систему LoChat
|
||||
*/
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onAsyncPlayerChat(AsyncPlayerChatEvent event) {
|
||||
// Если событие не отменено, значит игрок не замучен
|
||||
UUID playerId = event.getPlayer().getUniqueId();
|
||||
mutedPlayers.remove(playerId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет, замучен ли игрок
|
||||
* В событийном режиме мы полагаемся на LibertyBans для блокировки чата
|
||||
* @param player игрок для проверки
|
||||
* @return CompletableFuture<Boolean> - результат проверки
|
||||
*/
|
||||
public CompletableFuture<Boolean> isMuted(Player player) {
|
||||
if (!enabled) {
|
||||
return CompletableFuture.completedFuture(false);
|
||||
}
|
||||
|
||||
// В событийном режиме мы не можем точно определить мут без API
|
||||
// Поэтому возвращаем false и полагаемся на то, что LibertyBans сам заблокирует чат
|
||||
return CompletableFuture.completedFuture(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* В событийном режиме недоступно без API
|
||||
*/
|
||||
public CompletableFuture<Object> getActiveMute(Player player) {
|
||||
return CompletableFuture.completedFuture(null);
|
||||
public boolean isMuted(Player player) {
|
||||
return plugin.getMuteManager().isMuted(player.getUniqueId());
|
||||
}
|
||||
|
||||
public boolean isEnabled() {
|
||||
return enabled;
|
||||
return true; // Всегда используем встроенную систему
|
||||
}
|
||||
|
||||
public boolean isPluginPresent() {
|
||||
return libertyBansPlugin != null && libertyBansPlugin.isEnabled();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет игрока в список потенциально замученных
|
||||
* (используется когда LibertyBans блокирует чат)
|
||||
*/
|
||||
public void markAsPotentiallyMuted(UUID playerId) {
|
||||
if (enabled) {
|
||||
mutedPlayers.add(playerId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет, был ли игрок отмечен как потенциально замученный
|
||||
*/
|
||||
public boolean isPotentiallyMuted(UUID playerId) {
|
||||
return enabled && mutedPlayers.contains(playerId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue