20 KiB
HubMC Essentials - План разработки
Архитектура проекта
src/main/java/org/itqop/HubmcEssentials/
├── HubmcEssentials.java # Main mod class
├── Config.java # Configuration
├── api/
│ ├── HubGWClient.java # HTTP client singleton (async)
│ ├── dto/ # Data Transfer Objects
│ │ ├── cooldown/
│ │ │ ├── CooldownCheckRequest.java
│ │ │ ├── CooldownCheckResponse.java
│ │ │ ├── CooldownCreateRequest.java
│ │ │ └── CooldownCreateResponse.java
│ │ ├── home/
│ │ │ ├── HomeData.java
│ │ │ ├── HomeCreateRequest.java
│ │ │ ├── HomeGetRequest.java
│ │ │ └── HomeListResponse.java
│ │ ├── warp/
│ │ │ ├── WarpData.java
│ │ │ ├── WarpCreateRequest.java
│ │ │ ├── WarpGetRequest.java
│ │ │ └── WarpListResponse.java
│ │ ├── teleport/
│ │ │ ├── TeleportHistoryEntry.java
│ │ │ └── TeleportHistoryRequest.java
│ │ └── kit/
│ │ ├── KitClaimRequest.java
│ │ └── KitClaimResponse.java
│ └── service/
│ ├── CooldownService.java # Cooldown API calls
│ ├── HomeService.java # Home API calls
│ ├── WarpService.java # Warp API calls
│ ├── TeleportService.java # Teleport history API calls
│ └── KitService.java # Kit API calls
├── command/
│ ├── CommandRegistry.java # Register all commands
│ ├── general/
│ │ ├── SpecCommand.java
│ │ ├── SetHomeCommand.java
│ │ ├── HomeCommand.java
│ │ ├── FlyCommand.java
│ │ ├── VanishCommand.java
│ │ ├── InvseeCommand.java
│ │ ├── EnderchestCommand.java
│ │ ├── KitCommand.java
│ │ ├── ClearCommand.java
│ │ ├── EcCommand.java
│ │ └── HatCommand.java
│ ├── vip/
│ │ ├── HealCommand.java
│ │ ├── FeedCommand.java
│ │ ├── RepairCommand.java
│ │ ├── NearCommand.java
│ │ ├── BackCommand.java
│ │ └── RtpCommand.java
│ ├── premium/
│ │ ├── WarpCommand.java
│ │ ├── RepairAllCommand.java
│ │ └── WorkbenchCommand.java
│ ├── deluxe/
│ │ ├── TopCommand.java
│ │ ├── PotCommand.java
│ │ ├── TimeCommand.java
│ │ └── WeatherCommand.java
│ └── teleport/
│ └── CustomTpCommand.java # Override /tp command
├── permission/
│ ├── PermissionManager.java # LuckPerms integration
│ └── PermissionNodes.java # Constants for permission nodes
├── util/
│ ├── MessageUtil.java # User messages (Russian)
│ ├── LocationUtil.java # Location/teleport utilities
│ ├── PlayerUtil.java # Player utilities
│ └── RetryUtil.java # Retry logic for API calls
└── storage/
└── LocationStorage.java # Store last location for /back
Этап 1: Базовая инфраструктура
1.1 Конфигурация
- Обновить
Config.java:- API base URL (String, default: "http://localhost:8000/api/v1")
- API key (String)
- Connection timeout (int, default: 2)
- Read timeout (int, default: 5)
- Max retries (int, default: 2)
- Enable debug logging (boolean, default: false)
1.2 Permission система
- Создать
PermissionNodes.javaс константами всех пермишенов - Создать
PermissionManager.java:- Метод
hasPermission(ServerPlayer, String)- проверка через LuckPerms - Метод
hasTier(ServerPlayer, String)- проверка tier (vip/premium/deluxe) - Метод
getPlayerTier(ServerPlayer)- получить высший tier игрока
- Метод
1.3 Утилиты
- Создать
MessageUtil.java:- Метод
sendError(ServerPlayer, String)- отправка сообщения об ошибке - Метод
sendSuccess(ServerPlayer, String)- отправка успешного сообщения - Метод
sendInfo(ServerPlayer, String)- информационное сообщение - Константы сообщений на русском
- Метод
- Создать
LocationUtil.java:- Метод
toJsonLocation(ServerPlayer)- конвертация позиции в JSON - Метод
teleportPlayer(ServerPlayer, world, x, y, z, yaw, pitch)- телепорт - Метод
getSafeYLocation(ServerLevel, x, z)- получить безопасную Y координату
- Метод
- Создать
PlayerUtil.java:- Метод
getPlayerByName(MinecraftServer, String)- поиск игрока по нику - Метод
isPlayerOnline(MinecraftServer, String)- проверка онлайн
- Метод
- Создать
RetryUtil.java:- Метод
retryAsync(Supplier<CompletableFuture<T>>, int maxRetries, Predicate<Throwable> shouldRetry) - Логика retry на 429/5xx ошибках
- Метод
Этап 2: API Client и сервисы
2.1 HTTP Client
- Создать
HubGWClient.java:- Singleton паттерн с
getInstance() - Инициализация
HttpClientс timeouts из Config - Circuit breaker для предотвращения спама логов
- Метод
refreshFromConfig()для обновления настроек - Базовый метод
makeRequest(method, path, body)возвращающийCompletableFuture<HttpResponse<String>> - Метод
baseBuilder(path)для создания HttpRequest с headers (X-API-Key) - Обработка ошибок с логированием
- Singleton паттерн с
2.2 DTO классы
Cooldowns
- Создать
CooldownCheckRequest.java(player_uuid, cooldown_type) - Создать
CooldownCheckResponse.java(is_active, expires_at, remaining_seconds) - Создать
CooldownCreateRequest.java(player_uuid, cooldown_type, cooldown_seconds OR expires_at) - Создать
CooldownCreateResponse.java(message)
Homes
- Создать
HomeData.java(id, player_uuid, name, world, x, y, z, yaw, pitch, is_public, created_at, updated_at) - Создать
HomeCreateRequest.java(player_uuid, name, world, x, y, z, yaw, pitch, is_public) - Создать
HomeGetRequest.java(player_uuid, name) - Создать
HomeListResponse.java(homes[], total)
Warps
- Создать
WarpData.java(id, name, world, x, y, z, yaw, pitch, is_public, description, created_at, updated_at) - Создать
WarpCreateRequest.java(name, world, x, y, z, yaw, pitch, is_public, description) - Создать
WarpGetRequest.java(name) - Создать
WarpListResponse.java(warps[], total, page, size, pages)
Teleport
- Создать
TeleportHistoryEntry.java(id, player_uuid, from_world, from_x/y/z, to_world, to_x/y/z, tp_type, target_name, created_at) - Создать
TeleportHistoryRequest.java(player_uuid, from_world, from_x/y/z, to_world, to_x/y/z, tp_type, target_name)
Kits
- Создать
KitClaimRequest.java(player_uuid, kit_name) - Создать
KitClaimResponse.java(success, message, cooldown_remaining)
2.3 Service классы
-
Создать
CooldownService.java:checkCooldown(playerUuid, cooldownType)→ CompletableFuturecreateCooldown(playerUuid, cooldownType, seconds)→ CompletableFuture- Использует HubGWClient для API вызовов
-
Создать
HomeService.java:createHome(request)→ CompletableFuturegetHome(playerUuid, name)→ CompletableFuturelistHomes(playerUuid)→ CompletableFuture
-
Создать
WarpService.java:createWarp(request)→ CompletableFuturegetWarp(name)→ CompletableFuturelistWarps()→ CompletableFuture
-
Создать
TeleportService.java:logTeleport(request)→ CompletableFuturegetHistory(playerUuid, limit)→ CompletableFuture<List>
-
Создать
KitService.java:claimKit(playerUuid, kitName)→ CompletableFuture
Этап 3: Команды - General (базовые)
3.1 Локальные команды (без API)
-
SpecCommand
/spec/spectator:- Проверка пермишена
hubmc.cmd.spec - Переключение gamemode на spectator/survival
- Проверка пермишена
-
FlyCommand
/fly:- Проверка пермишена
hubmc.cmd.fly - Включение/выключение полета
- Проверка пермишена
-
VanishCommand
/vanish:- Проверка пермишена
hubmc.cmd.vanish - Скрытие игрока от других (через NeoForge API)
- Проверка пермишена
-
InvseeCommand
/invsee <nick>:- Проверка пермишена
hubmc.cmd.invsee - Проверка что игрок онлайн
- Открытие инвентаря целевого игрока
- Проверка пермишена
-
EnderchestCommand
/enderchest <nick>:- Проверка пермишена
hubmc.cmd.enderchest - Проверка что игрок онлайн
- Открытие эндерчеста целевого игрока
- Проверка пермишена
3.2 API команды с cooldown
-
SetHomeCommand
/sethome [name]:- Проверка пермишена
hubmc.cmd.sethome - Получение текущей позиции
- Вызов
HomeService.createHome() - Обработка ответа (успех/ошибка)
- Проверка пермишена
-
HomeCommand
/home [name]:- Проверка пермишена
hubmc.cmd.home - Вызов
HomeService.getHome() - Телепортация на позицию дома
- Обработка 404 (дом не найден)
- Проверка пермишена
-
KitCommand
/kit <name>:- Проверка пермишена
hubmc.cmd.kit - Проверка tier пермишена для конкретного кита
- Проверка cooldown через
CooldownService.checkCooldown(uuid, "kit|<name>") - Если cooldown активен - показать сообщение "Команда доступна через N сек."
- Вызов
KitService.claimKit() - Установка cooldown через
CooldownService.createCooldown() - Выдача предметов игроку (items из API response)
- Проверка пермишена
-
ClearCommand
/clear:- Проверка пермишена
hubmc.cmd.clear - Проверка cooldown
"clear" - Очистка инвентаря
- Установка cooldown
- Проверка пермишена
-
EcCommand
/ec:- Проверка пермишена
hubmc.cmd.ec - Проверка cooldown
"ec" - Открытие enderchest
- Установка cooldown
- Проверка пермишена
-
HatCommand
/hat:- Проверка пермишена
hubmc.cmd.hat - Проверка cooldown
"hat" - Проверка что в руке предмет
- Замена головного слота на предмет из руки
- Установка cooldown
- Проверка пермишена
Этап 4: VIP команды
-
HealCommand
/heal:- Проверка
hubmc.cmd.heal - Проверка cooldown
"heal" - Восстановление здоровья и голода
- Установка cooldown
- Проверка
-
FeedCommand
/feed:- Проверка
hubmc.cmd.feed - Проверка cooldown
"feed" - Восстановление голода и saturation
- Установка cooldown
- Проверка
-
RepairCommand
/repair:- Проверка
hubmc.cmd.repair - Проверка cooldown
"repair" - Проверка что в руке инструмент/броня
- Ремонт предмета в руке
- Установка cooldown
- Проверка
-
NearCommand
/near [radius]:- Проверка
hubmc.cmd.near - Проверка cooldown
"near" - Поиск игроков в радиусе
- Вывод списка с расстояниями
- Установка cooldown
- Проверка
-
BackCommand
/back:- Проверка
hubmc.cmd.back - Проверка cooldown
"back" - Получение последней позиции из LocationStorage
- Телепортация
- Установка cooldown
- Проверка
-
RtpCommand
/rtp:- Проверка
hubmc.cmd.rtp - Проверка cooldown
"rtp" - Генерация случайной позиции (безопасной)
- Телепортация
- Установка cooldown
- Проверка
Этап 5: Premium команды
-
WarpCommand
/warp <create|list|delete|teleport> [name]:/warp create <name>-hubmc.cmd.warp.create, БЕЗ cooldown- Вызов
WarpService.createWarp()
- Вызов
/warp list- вывод списка warp'ов- Вызов
WarpService.listWarps()
- Вызов
/warp delete <name>- удаление warp'а (если есть права)/warp <name>- телепортация на warp
-
RepairAllCommand
/repair all:- Проверка
hubmc.cmd.repair.all - Проверка cooldown
"repair_all" - Ремонт всего инвентаря + броня
- Установка cooldown
- Проверка
-
WorkbenchCommand
/workbench:- Проверка
hubmc.cmd.workbench - БЕЗ cooldown
- Открытие crafting table GUI
- Проверка
Этап 6: Deluxe команды
-
TopCommand
/top:- Проверка
hubmc.cmd.top - Проверка cooldown
"top" - Поиск самого высокого блока по X/Z координатам игрока
- Телепортация на него
- Установка cooldown
- Проверка
-
PotCommand
/pot <effect> [duration] [amplifier]:- Проверка
hubmc.cmd.pot - Проверка cooldown
"pot" - Применение эффекта
- Установка cooldown
- Проверка
-
TimeCommand
/day/night/morning/evening:- Проверка
hubmc.cmd.time - Проверка cooldown
"time|day"/"time|night"/"time|morning"/"time|evening" - Установка времени суток в мире
- Установка cooldown
- Проверка
-
WeatherCommand
/weather <clear|storm|thunder>:- Проверка
hubmc.cmd.weather - БЕЗ cooldown
- Установка погоды
- Проверка
Этап 7: Custom /tp команда
- CustomTpCommand - переопределение
/tp:- Поддержка форматов:
/tp <player>- проверкаhubmc.cmd.tp, cooldown"tp|<targetNick>"/tp <player1> <player2>- проверкаhubmc.cmd.tp.others, cooldown"tp|<targetNick>"/tp <x> <y> <z>- проверкаhubmc.cmd.tp.coords, cooldown"tp|coords"
- Проверка cooldown через API
- Сохранение текущей позиции в LocationStorage для /back
- Выполнение телепортации
- ОБЯЗАТЕЛЬНО: Логирование в teleport history через
TeleportService.logTeleport()- Поля: player_uuid, from_world, from_x/y/z, to_world, to_x/y/z, tp_type, target_name
- Установка cooldown через API
- Поддержка форматов:
Этап 8: Интеграция и регистрация
-
LocationStorage - хранение последней позиции для /back:
- Map<UUID, LastLocation> в памяти
- Метод
saveLocation(player)- сохранить позицию - Метод
getLastLocation(player)- получить последнюю позицию - Автоматическое сохранение при телепортации
-
CommandRegistry:
- Регистрация всех команд в NeoForge
- Централизованное место для регистрации
-
HubmcEssentials.java:
- В
commonSetup():- Инициализация HubGWClient
- Инициализация всех сервисов
- Регистрация команд через CommandRegistry
- Логирование успешной инициализации
- В
Этап 9: Тестирование и отладка
-
Тестирование каждой команды:
- Проверка пермишенов
- Проверка cooldown системы
- Проверка API интеграции
- Проверка обработки ошибок (API недоступен)
- Проверка сообщений пользователю
-
Тестирование edge cases:
- Игрок не найден
- Игрок оффлайн
- HubGW API недоступен
- Неверные координаты
- Кит не существует
- Дом не найден
-
Логирование:
- Проверить что все ошибки логируются
- Circuit breaker работает (не спамит логи)
Этап 10: Финализация
- Обновить CLAUDE.md с актуальной информацией об архитектуре
- Проверить что все DTO классы properly serializable
- Проверить что все async операции правильно обрабатывают ошибки
- Финальный build и тест в игре
- Документация по конфигурации
Приоритеты разработки
P0 (критично):
- Базовая инфраструктура (Config, Permissions, Utils)
- HTTP Client и Services
- DTO классы
P1 (высокий): 4. General команды 5. VIP команды 6. Custom /tp с teleport history
P2 (средний): 7. Premium команды 8. Deluxe команды
P3 (низкий): 9. Тестирование 10. Финализация
Технические требования
- Все API вызовы АСИНХРОННЫЕ через
CompletableFuture - Все cooldown проверки ТОЛЬКО через HubGW API - никакого локального кеша
- Retry логика: 2 ретрая на 429/5xx ошибках
- Timeouts: 2s connect / 5s read
- Circuit breaker для предотвращения спама логов
- Все сообщения пользователю на русском языке
- При ошибке API - ОТКАЗАТЬ в выполнении команды
- LuckPerms интеграция для всех проверок пермишенов