LoChat/MIGRATION_PLAN.md
loki5512344 2d79d2a91d chore: update .gitignore and build.gradle.kts for local server testing
- Added entries to .gitignore for local Paper test server and API documentation.
- Included the run-paper plugin in build.gradle.kts for local server execution.
- Configured runServer task with Minecraft version 1.21.4 for testing.
2026-04-01 16:09:15 +02:00

90 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# План миграции команд на новую архитектуру
> **Статус (актуально для репозитория):** централизованная регистрация в `CommandManager` и раскладка по пакетам **уже внедрены**. Ниже — что сделано и что остаётся опциональной доработкой.
**Что осталось по плану:** миграция команд **завершена**. Дальше — по желанию: перевести оставшиеся `CommandExecutor` на `PlayerCommand`/`AdminCommand`, добавить тесты/ручной регресс, короткую доку «как добавить команду».
## Что уже сделано
### Архитектура
- `commands/base/BaseCommand`, `PlayerCommand`, `AdminCommand`
- `CommandManager` — единая точка регистрации (`reg` / `regTab` / `registerBaseCommand`)
### Пакеты (фактическая структура)
| Пакет | Назначение |
|--------|------------|
| `commands/chat/` | глобальный / локальный чат (`g`, `l`) |
| `commands/messaging/` | ЛС, игнор (`msg`, `reply`, `ignore`, `unignore`, `ignorelist`) |
| `commands/moderation/` | муты, варны, баны (`lmute`, `lunmute`, `lmutelist`, `lmutehistory`, `lmuteblame`, `warn`, `silentwarn`, `lban`, `lunban`) |
| `commands/nick/` | ник, инфо (`nick`, `playerinfo`) |
| `commands/admin/` | админ-утилиты (`announce`, `chatspy`, `clearchat`, `clearchatconfig`, `lochat`, `lochatreload`, `discordadmin`); в репозитории также есть `HubCommand.java` (проверьте `plugin.yml`, если нужна команда хаба) |
| `commands/rp/` | RP (`me`, `try`, `do`, `roll`) |
| Корень `commands/` | `CustomCommandsCommand`, `CustomCommand` |
Папки `social/` в проекте нет — социальные команды лежат в `messaging/` и `nick/`.
### Регистрация в `CommandManager` (выполнено)
- [x] Этап 1 — чат: `GlobalChatCommand`, `LocalChatCommand`
- [x] Этап 2 — ЛС: `MsgCommand`, `ReplyCommand`
- [x] Этап 3 — социальное: `IgnoreCommand`, `UnignoreCommand`, `IgnoreListCommand`, `NickCommand` (+ `PlayerInfoCommand`)
- [x] Этап 4 — модерация: все перечисленные в таблице пакета `moderation/`
- [x] Этап 5 — админ: `AnnounceCommand`, `ClearChatCommand`, `ClearChatConfigCommand`, `ChatSpyCommand`, `LoChatCommand`, `ReloadConfigCommand`, `DiscordCommand`
- [x] Этап 6 — `CustomCommandsCommand` и движок кастомных команд
## Что ещё можно сделать (не блокирует работу)
### Унификация базового класса
Многие команды по-прежнему реализуют `CommandExecutor` напрямую, а не `PlayerCommand` / `AdminCommand`. Имеет смысл постепенно переводить на базовые классы там, где это убирает дублирование проверок и сообщений.
### Тесты и ручная проверка
- [ ] Стабильные сценарии для приоритетных команд (чат, ЛС, муты) — ручные или автотесты
- [ ] Проверка TabCompleter на зарегистрированных командах с `regTab`
### Документация
- [ ] Короткий `CONTRIBUTING` или раздел в README: как добавить команду через `CommandManager` и `plugin.yml`
## Процесс миграции одной команды (если рефакторите дальше)
### 1. Новая команда на базовом классе
```java
public class NewCommand extends PlayerCommand {
public NewCommand(LoChat plugin) {
super(plugin);
}
@Override
protected boolean executePlayerCommand(Player player, Command command,
String label, String[] args) {
return true;
}
}
```
### 2. Проверки
- Поведение и права
- Сообщения из `MessagesConfig` / конфигов
- TabCompleter при необходимости
### 3. Регистрация
В `CommandManager`: `reg("name", new NewCommand(plugin))` или `regTab`, плюс запись в `plugin.yml`.
### 4. Удаление старого кода
После замены — удалить старый класс и неиспользуемые импорты.
## Чек-лист для команды
- [ ] Корректный базовый класс или явный `CommandExecutor` с единым стилем обработки ошибок
- [ ] Права из `plugin.yml`
- [ ] Сообщения из конфигурации
- [ ] Валидация аргументов
- [ ] TabCompleter при необходимости
## Ожидаемые эффекты от доведения до единого стиля
- Меньше дублирования проверок отправителя и прав
- Проще добавлять новые команды
- Проще сопровождать код при едином паттерне
---
**Следующие шаги (по желанию):** выбрать 2–3 самых «шумных» по коду команды → перевести на `PlayerCommand`/`AdminCommand` → добавить минимальные тесты или чек-лист ручной регрессии.