refactor: Remove emoji system and chat filters, implement SOLID architecture
This commit is contained in:
parent
16a5e09118
commit
74482851aa
72 changed files with 2654 additions and 1287 deletions
13
src/main/java/com/loki/lochat/api/ChatService.java
Normal file
13
src/main/java/com/loki/lochat/api/ChatService.java
Normal 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);
|
||||
}
|
||||
13
src/main/java/com/loki/lochat/api/CooldownService.java
Normal file
13
src/main/java/com/loki/lochat/api/CooldownService.java
Normal 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);
|
||||
}
|
||||
14
src/main/java/com/loki/lochat/api/MessageFilter.java
Normal file
14
src/main/java/com/loki/lochat/api/MessageFilter.java
Normal 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);
|
||||
}
|
||||
15
src/main/java/com/loki/lochat/api/MuteService.java
Normal file
15
src/main/java/com/loki/lochat/api/MuteService.java
Normal 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);
|
||||
}
|
||||
15
src/main/java/com/loki/lochat/api/filter/MessageFilter.java
Normal file
15
src/main/java/com/loki/lochat/api/filter/MessageFilter.java
Normal 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);
|
||||
}
|
||||
15
src/main/java/com/loki/lochat/api/service/ChatService.java
Normal file
15
src/main/java/com/loki/lochat/api/service/ChatService.java
Normal 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);
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
51
src/main/java/com/loki/lochat/api/service/IgnoreService.java
Normal file
51
src/main/java/com/loki/lochat/api/service/IgnoreService.java
Normal 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();
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
42
src/main/java/com/loki/lochat/api/service/MuteService.java
Normal file
42
src/main/java/com/loki/lochat/api/service/MuteService.java
Normal 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();
|
||||
}
|
||||
29
src/main/java/com/loki/lochat/api/service/PMService.java
Normal file
29
src/main/java/com/loki/lochat/api/service/PMService.java
Normal 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);
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
package com.loki.lochat.api.service;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Сервис для работы с данными игроков
|
||||
*/
|
||||
public interface PlayerDataService {
|
||||
void clearPlayerData(UUID player);
|
||||
void saveAll();
|
||||
}
|
||||
35
src/main/java/com/loki/lochat/api/service/SpyService.java
Normal file
35
src/main/java/com/loki/lochat/api/service/SpyService.java
Normal 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);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue