refactor: Remove emoji system and chat filters, implement SOLID architecture

This commit is contained in:
loki5512344 2026-02-23 12:10:51 +01:00
parent 16a5e09118
commit 74482851aa
72 changed files with 2654 additions and 1287 deletions

View file

@ -0,0 +1,13 @@
package com.loki.lochat.api;
import org.bukkit.entity.Player;
/**
* Сервис для отправки сообщений в чат
*/
public interface ChatService {
void sendGlobalMessage(Player sender, Object message);
void sendLocalMessage(Player sender, Object message);
boolean toggleGlobalChat(java.util.UUID player);
boolean isGlobalChatDisabled(java.util.UUID player);
}

View file

@ -0,0 +1,13 @@
package com.loki.lochat.api;
import java.util.UUID;
/**
* Сервис для управления кулдаунами
*/
public interface CooldownService {
boolean isOnCooldown(UUID player, String type, int cooldownSeconds);
int getRemainingCooldown(UUID player, String type, int cooldownSeconds);
void setCooldown(UUID player, String type);
void removeCooldown(UUID player);
}

View file

@ -0,0 +1,14 @@
package com.loki.lochat.api;
import org.bukkit.entity.Player;
/**
* Интерфейс для фильтрации сообщений
*/
public interface MessageFilter {
/**
* Применить фильтр к сообщению
* @return отфильтрованное сообщение или null если заблокировано
*/
Object apply(Player player, Object message, String plainMessage);
}

View file

@ -0,0 +1,15 @@
package com.loki.lochat.api;
import java.util.UUID;
/**
* Сервис для управления мутами
*/
public interface MuteService {
void mute(UUID uuid, String playerName, long duration, String reason, String mutedBy);
boolean unmute(UUID uuid, String unmutedBy);
boolean isMuted(UUID uuid);
long getRemainingTime(UUID uuid);
String formatTime(long millis);
long parseTime(String timeStr);
}

View file

@ -0,0 +1,15 @@
package com.loki.lochat.api.filter;
import com.loki.lochat.data.model.ChatMessage;
import org.bukkit.entity.Player;
/**
* Интерфейс фильтра сообщений (Chain of Responsibility)
*/
public interface MessageFilter {
/**
* Применить фильтр к сообщению
* @return true если сообщение прошло фильтр, false если заблокировано
*/
boolean apply(Player player, ChatMessage message);
}

View file

@ -0,0 +1,15 @@
package com.loki.lochat.api.service;
import org.bukkit.entity.Player;
import java.util.UUID;
/**
* Сервис для отправки сообщений в чат
*/
public interface ChatService {
void sendGlobalMessage(Player sender, Object message);
void sendLocalMessage(Player sender, Object message);
boolean toggleGlobalChat(UUID player);
boolean isGlobalChatDisabled(UUID player);
}

View file

@ -0,0 +1,13 @@
package com.loki.lochat.api.service;
import java.util.UUID;
/**
* Сервис для управления кулдаунами
*/
public interface CooldownService {
boolean isOnCooldown(UUID player, String type, int cooldownSeconds);
int getRemainingCooldown(UUID player, String type, int cooldownSeconds);
void setCooldown(UUID player, String type);
void removeCooldown(UUID player);
}

View file

@ -0,0 +1,51 @@
package com.loki.lochat.api.service;
import java.util.Set;
import java.util.UUID;
/**
* Сервис для управления списком игнорируемых игроков
*/
public interface IgnoreService {
/**
* Проверяет, игнорирует ли игрок другого
*/
boolean isIgnoring(UUID player, UUID target);
/**
* Добавляет игрока в список игнорируемых
* @return true если успешно добавлен
*/
boolean addIgnore(UUID player, UUID target);
/**
* Удаляет игрока из списка игнорируемых
* @return true если успешно удалён
*/
boolean removeIgnore(UUID player, UUID target);
/**
* Получает список всех игнорируемых игроков
*/
Set<UUID> getIgnoredPlayers(UUID player);
/**
* Получает количество игнорируемых игроков
*/
int getIgnoredCount(UUID player);
/**
* Очищает список игнорируемых для игрока
*/
void clearIgnores(UUID player);
/**
* Сохраняет данные на диск
*/
void save();
/**
* Загружает данные с диска
*/
void load();
}

View file

@ -0,0 +1,37 @@
package com.loki.lochat.api.service;
import org.bukkit.entity.Player;
import java.util.Set;
/**
* Сервис для обработки упоминаний игроков в чате
*/
public interface MentionService {
/**
* Обрабатывает упоминания в сообщении
* @return сообщение с подсвеченными никами
*/
String processMentions(String message, Set<Player> mentionedPlayers);
/**
* Создаёт персонализированное сообщение для игрока
* Если его ник упомянут — выделяет его особым образом
*/
String getPersonalizedMessage(String message, Player viewer);
/**
* Проверяет, упомянут ли игрок в сообщении (по нику без @)
*/
boolean isPlayerMentioned(String message, Player player);
/**
* Уведомляет упомянутых игроков звуком
*/
void notifyMentioned(Set<Player> players);
/**
* Уведомляет игрока если его ник упомянут (без @)
*/
void notifyIfMentioned(String message, Player viewer, Player sender);
}

View file

@ -0,0 +1,14 @@
package com.loki.lochat.api.service;
import org.bukkit.entity.Player;
/**
* Сервис обработки сообщений
*/
public interface MessageService {
/**
* Обработать входящее сообщение чата
* @return true если сообщение обработано успешно
*/
boolean processMessage(Player player, String message);
}

View file

@ -0,0 +1,42 @@
package com.loki.lochat.api.service;
import com.loki.lochat.data.model.MuteData;
import org.bukkit.entity.Player;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/**
* Сервис для управления мутами
*/
public interface MuteService {
// Основные операции
void mute(UUID uuid, String playerName, long duration, String reason, String mutedBy);
boolean unmute(UUID uuid, String unmutedBy);
boolean isMuted(UUID uuid);
MuteData getMuteData(UUID uuid);
long getRemainingTime(UUID uuid);
// Утилиты времени
String formatTime(long millis);
long parseTime(String timeStr);
// Права доступа
long getMaxDuration(Player player);
boolean canMuteForDuration(Player player, long duration);
// История
List<MuteData.MuteHistoryEntry> getPlayerHistory(UUID uuid);
List<MuteData.MuteHistoryEntry> getMutesByOperator(String operatorName);
UUID getUUIDByName(String name);
// Список активных мутов
Map<UUID, MuteData> getActiveMutes();
// Форматирование сообщений
String formatMessage(String message, String player, String operator, String duration, String reason);
// Сохранение
void save();
}

View file

@ -0,0 +1,29 @@
package com.loki.lochat.api.service;
import java.util.Optional;
import java.util.UUID;
/**
* Сервис для управления личными сообщениями
*/
public interface PMService {
/**
* Устанавливает последнего собеседника для игрока
*/
void setLastConversation(UUID player, UUID target);
/**
* Получает последнего собеседника игрока
*/
Optional<UUID> getLastConversation(UUID player);
/**
* Удаляет информацию о последнем разговоре
*/
void removeConversation(UUID player);
/**
* Проверяет, есть ли у игрока активный разговор
*/
boolean hasConversation(UUID player);
}

View file

@ -0,0 +1,11 @@
package com.loki.lochat.api.service;
import java.util.UUID;
/**
* Сервис для работы с данными игроков
*/
public interface PlayerDataService {
void clearPlayerData(UUID player);
void saveAll();
}

View file

@ -0,0 +1,35 @@
package com.loki.lochat.api.service;
import net.kyori.adventure.text.Component;
import org.bukkit.entity.Player;
/**
* Сервис для шпионажа за чатом
*/
public interface SpyService {
/**
* Переключает режим шпиона для игрока
* @return true если шпион включен, false если выключен
*/
boolean toggleSpy(java.util.UUID player);
/**
* Проверяет, находится ли игрок в режиме шпиона
*/
boolean isSpying(java.util.UUID player);
/**
* Отправляет сообщение всем шпионам (для обычного чата)
*/
void sendToSpies(Player sender, Component message, boolean isGlobal);
/**
* Отправляет информацию о личном сообщении шпионам
*/
void broadcastPM(Player sender, Player receiver, String message);
/**
* Удаляет игрока из списка шпионов
*/
void removeSpy(java.util.UUID player);
}