LoMines/todo.md

374 lines
18 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.

# LoMines - TODO List (Обновлено: 2026-05-31)
> **Статус проекта:** ✅ Система конфигурации полностью переписана
> **Базовая библиотека:** LoAPI (jar из `libs/lolib*.jar`, сейчас 3.0.0)
> **Версия Minecraft:** Paper 1.21.4
> **Java:** 21
> **Пакет:** dev.loki.lomines (изменен с com.loki)
---
## ✅ Что сделано сегодня (2026-05-31)
### 1. Рефакторинг пакетов ✅
- `com.loki` → `dev.loki`
- Все Java файлы обновлены
- `plugin.yml` обновлен
- Исправлены импорты в тестах
### 2. Полная перепись системы конфигурации ✅
- Section-based конфигурация с type-safe BlockKey
- Human-readable durations (5m, 30s, 2h)
- YAML inheritance через defaults.yml
- MiniMessage поддержка для форматирования
### 3. Обновление core классов ✅
- `Mine.java` — использует RegionConfig, BlockConfig, UIConfig
- `Mines.java` — использует новый ConfigLoader
- `MineFileManager.java` — создание конфигов с новой системой
- `MineRepository.java` — работа с новым MineConfig
- `MaskScanService.java` — использует BlockKey для маркеров
- `BukkitBlockSetter.java` — Map<BlockKey, Double>
### 4. Обновление обработчиков ✅
- `ActionBarHandler.java` — UIConfig с MiniMessage
- `MineBlockHandler.java` — ResetConfig
- `MineRewardHandler.java` — RewardConfig
- `MineResetHandler.java` — новые секции конфигурации
### 5. Автодополнение команд ✅
- `LoMinesTabCompleter.java` — tab completion для всех команд
- Подсказки для имён шахт, игроков, субкоманд
- Permission-based фильтрация
### 6. GUI редакторы ✅ (1/6 основных)
- `MineEditGui.java` — главный редактор шахты
- Просмотр всех секций конфигурации
- Навигация к под-редакторам (заглушки)
- Сохранение и удаление с подтверждением
- `ConfirmDeleteGui.java` — подтверждение удаления
- `MineEditGuiListener.java` — обработка кликов в GUI
- Команда `/lm edit <mine>` для открытия редактора
- Разрешение `lomines.admin.edit`
### 7. Player-spawn для застрявших игроков ✅
- `PlayerSpawnConfig.java` — настройка точки спавна для застрявших игроков
- `PlayerSpawnConfigLoader.java` — загрузка из YAML
- Обновлен `MineConfig`:
- `playerSpawn` — отдельная точка для телепорта застрявших
- `getSpawnForStuckPlayer()` — возвращает player-spawn или fallback на teleport
- Обновлен `MineResetHandler.teleportPlayers()`:
- Использует `player-spawn` если настроен
- Иначе использует `teleport` (backward compatibility)
- `findSafeTeleportLocation()` с ограничением вверх:
- Максимум 3 блока вверх (не телепортирует слишком высоко)
- Приоритет: соседние блоки (тот же Y) → вверх (max 3) → вниз → диагональ
### 8. Ghost blocks фикс ✅
- `BlockUpdateUtil.java` — утилита для отправки пакетов обновления блоков
- `sendBlockUpdate()` — обновить один блок для всех видящих игроков
- `sendRegionUpdate()` — batch-обновление для кубоидного региона
- `sendLocationsUpdate()` — эффективное обновление для списка позиций
- `refreshChunks()` — полный resync чанков при необходимости
- `findSafeTeleportLocation()` — найти безопасную позицию без задыхания
- `BukkitBlockSetter` — отправляет пакеты после установки блоков
- `MineResetHandler.teleportPlayers()` — телепортирует в безопасную позицию
**Проблема:** Ghost blocks (невидимые блоки) возникают при быстрой установке блоков, когда сервер не отправляет пакеты клиенту.
**Решение:** Принудительная отправка `player.sendBlockChange()` после установки блоков.
### 9. WorldGuard интеграция ✅
- `WorldGuardConfig.java` — настройки авто-регионов
- Шаблоны имён: `{mine_name}_{random_4}`, `{random_6}`, и т.д.
- Настройка владельцев и членов (name или uuid:xxx)
- Настройка флагов (passthrough, build, pvp, tnt, и т.д.)
- Включение/выключение авто-создания
- `WorldGuardRegionService.java` — создание/обновление/удаление регионов
- `WorldGuardFlagParser.java` — парсинг флагов из строк
- `WorldGuardConfigLoader.java` — загрузка из YAML
- Автоматическое создание региона при создании шахты
- Автоматическое удаление при удалении шахты
- Обновление при перезагрузке шахты
### 8. Рефакторинг больших файлов ✅
- `ConfigLoader.java`: 427 → 151 строк (split на 6 лоадеров)
- `WorldGuardRegionService.java`: split флаг-парсер
- Новые лоадеры: BlockConfigLoader, RegionConfigLoader, ResetConfigLoader, RewardConfigLoader, TeleportConfigLoader, UIConfigLoader
- `MineEditGui.java` — главный редактор шахты
- Просмотр всех секций конфигурации
- Навигация к под-редакторам (заглушки)
- Сохранение и удаление с подтверждением
- `ConfirmDeleteGui.java` — подтверждение удаления
- `MineEditGuiListener.java` — обработка кликов в GUI
- Команда `/lm edit <mine>` для открытия редактора
- Разрешение `lomines.admin.edit`
#### Новая архитектура (Section-based):
```
data/config/
├── block/
│ ├── BlockKey.java # Sealed interface: Vanilla, Oraxen, ItemsAdder
│ ├── BlockConfig.java # Type-safe block weights
│ └── FillMode.java # CUBOID / MASK
├── region/
│ └── RegionConfig.java # Cuboid regions
├── reset/
│ └── ResetConfig.java # Duration, triggers, commands
├── reward/
│ └── RewardConfig.java # ItemReward with MiniMessage
├── teleport/
│ └── TeleportConfig.java # Teleport on reset
├── ui/
│ └── UIConfig.java # Action bar, timer format
├── MineConfig.java # Composed record
└── ConfigLoader.java # Clean loader with YAML inheritance
```
#### Удалена старая система:
- ❌ `ConfigParser.java` (464 строк)
- ❌ `ConfigValidator.java` (валидация размазана)
- ❌ `ConfigSerializer.java` (сериализация размазана)
- ❌ `MineConfigBuilder.java` (builder внутри record)
- ❌ `parser/ConfigParseException.java`
- ❌ Старый `MineConfig.java` (17 полей)
#### Новые возможности:
- ✅ **Type-safe BlockKey** — sealed interface с Vanilla, Oraxen, ItemsAdder
- ✅ **Human-readable durations** — "5m", "30s", "2h", "1d"
- ✅ **YAML inheritance** — `defaults.yml` + перезапись в mine.yml
- ✅ **MiniMessage** — форматирование action bar и предметов
- ✅ **Immutable records** — все конфиги неизменяемы
- ✅ **Валидация на уровне конструктора** — fail-fast
---
## 📋 Текущий прогресс
- [x] **Phase 1:** Структура проекта и конфигурация ✅
- [x] **Phase 2:** Core классы и handlers ✅
- [x] **Phase 3:** BlockSetter — тип по `Map<String, Double>` и prefix ✅
- [x] **Phase 4:** Команды — разбито на 4 класса ✅
- [x] **Phase 5:** Рефакторинг больших файлов ✅
- [x] **Phase 6:** Организация папок (все ≤6 файлов) ✅
- [x] **Phase 7:** Утилиты и хелперы ✅
- [x] **Phase 8:** Рефакторинг пакетов com.loki → dev.loki ✅
- [x] **Phase 9:** Полная перепись системы конфигурации ✅
- [x] **Phase 10:** Обновление core классов для новой системы ✅
- [x] **Phase 11:** Обновление handlers для новой конфигурации ✅
- [x] **Phase 12:** Автодополнение команд (tab completer) ✅
- [x] **Phase 13:** GUI редакторы - главное меню ✅ (под-редакторы 0/5)
- [x] **Phase 14:** WorldGuard авто-создание регионов ✅
- [ ] **Phase 15:** Интеграции PlaceholderAPI, Oraxen, ItemsAdder
---
## 🎯 Следующие шаги
### ✅ Приоритет 1: Интеграция новой конфигурации (ВЫПОЛНЕНО)
- [x] Обновить `Mine.java` — использовать новые `RegionConfig`, `BlockConfig`
- [x] Обновить `Mines.java` — использовать новый `ConfigLoader`
- [x] Обновить `MineFileManager.java` — миграция на новый loader
- [x] Обновить `MineRepository.java` — работа с новым `MineConfig`
- [x] Обновить `BukkitBlockSetter.java` — использовать `BlockKey`
- [x] Обновить все handlers — ActionBarHandler, MineBlockHandler, MineResetHandler, MineRewardHandler
- [x] Обновить команды — MaskCommands
- [x] Добавить автодополнение — LoMinesTabCompleter
### Приоритет 2: Интеграции с плагинами
1. [ ] Включить `OraxenBlockSetter.java` — использовать `BlockKey.Oraxen`
2. [ ] Включить `ItemsAdderBlockSetter.java` — использовать `BlockKey.ItemsAdder`
3. [ ] PlaceholderAPI интеграция
### Приоритет 3: GUI редакторы (Частично ✅)
- [x] `MineEditGui` — главное меню редактора (просмотр + навигация)
- [ ] `BlockEditGui` — редактирование блоков и весов
- [ ] `ResetEditGui` — настройка таймеров и триггеров
- [ ] `RewardEditGui` — настройка наград
- [ ] `TeleportEditGui` — настройка телепорта
- [ ] `UIEditGui` — настройка action bar
---
## 📁 Структура проекта
```
dev.loki.lomines/
├── LoMinesPlugin.java
├── ComponentInitializer.java
├── RegistrationManager.java
├── command/
│ ├── AdminCommands.java
│ ├── PlayerCommands.java
│ ├── StatsCommands.java
│ └── MaskCommands.java
├── core/
│ ├── Mine.java
│ ├── Mines.java
│ ├── MineTicker.java
│ └── service/
│ ├── MineFileManager.java
│ ├── MineRepository.java
│ └── MaskScanService.java
├── data/
│ └── config/ ← ✅ ПЕРЕПИСАНО
│ ├── block/
│ │ ├── BlockKey.java
│ │ ├── BlockConfig.java
│ │ └── FillMode.java
│ ├── region/
│ │ └── RegionConfig.java
│ ├── reset/
│ │ └── ResetConfig.java
│ ├── reward/
│ │ └── RewardConfig.java
│ ├── spawn/ ← ✅ NEW: Player spawn config
│ │ └── PlayerSpawnConfig.java
│ ├── teleport/
│ │ └── TeleportConfig.java
│ ├── ui/
│ │ └── UIConfig.java
│ ├── loader/ ← ✅ SPLIT FROM ConfigLoader
│ │ ├── BlockConfigLoader.java
│ │ ├── PlayerSpawnConfigLoader.java
│ │ ├── RegionConfigLoader.java
│ │ ├── ResetConfigLoader.java
│ │ ├── RewardConfigLoader.java
│ │ ├── TeleportConfigLoader.java
│ │ ├── UIConfigLoader.java
│ │ └── WorldGuardConfigLoader.java
│ ├── MineConfig.java
│ └── ConfigLoader.java # 427 → 151 lines
├── handler/
│ ├── ActionBarHandler.java
│ ├── MineBlockHandler.java
│ ├── MineResetHandler.java
│ └── MineRewardHandler.java
├── block/
│ ├── BlockSetter.java
│ ├── BukkitBlockSetter.java
│ ├── OraxenBlockSetter.java.disabled
│ └── ItemsAdderBlockSetter.java.disabled
├── listener/
│ ├── BlockBreakListener.java
│ ├── PlayerInteractListener.java
│ ├── PlayerJoinListener.java
│ └── GroupGuiListener.java
├── util/
│ ├── ValidationUtils.java
│ ├── ErrorHandler.java
│ ├── MessageFormatter.java
│ ├── block/ ← ✅ NEW: Block utilities
│ │ └── BlockUpdateUtil.java # Fix ghost blocks, safe teleport
│ ├── format/
│ │ ├── ChunkUtils.java
│ │ └── TimeFormatter.java
│ ├── location/
│ │ ├── BlockKeys.java
│ │ ├── Cuboid.java
│ │ └── LocationParser.java
│ └── selection/
│ ├── MaskScanner.java
│ ├── Selection.java
│ └── SelectionManager.java
├── wand/
│ ├── GroupWandItem.java
│ ├── GroupWandManager.java
│ └── GroupWandSession.java
├── gui/
│ ├── GroupCreateGui.java
│ └── GroupCreateGuiHolder.java
├── integration/
│ ├── IntegrationManager.java
│ ├── worldguard/
│ │ ├── WorldGuardConfig.java # Шаблоны имён регионов, флаги
│ │ ├── WorldGuardFlagParser.java # Парсинг флагов WG
│ │ └── WorldGuardRegionService.java # Создание/удаление регионов
│ └── PlaceholderAPIIntegration.java.disabled
└── data/stats/
├── StatsManager.java
├── PlayerStats.java
├── Leaderboard.java
└── LeaderboardEntry.java
```
---
## 📝 Правила разработки
### Лимиты строк
- **Главный класс плагина:** ≤120 строк
- **Обычные классы:** ≤200 строк
- **Утилиты:** ≤150 строк
- **Секции конфигурации:** ≤100 строк
### Принципы
- **KISS:** Один метод = одна задача, вложенность ≤3 уровней
- **DRY:** Дублирование кода ≥3 раз → вынести в метод/класс
- **SOLID:** Каждый класс = одна ответственность
- **YAGNI:** Не добавлять функциональность "на будущее"
---
## 📊 Метрики качества
### Конфигурация (новая система)
- Средний размер секции: **~60 строк** ✅
- Количество полей на секцию: **≤8** ✅
- Валидация: **Constructor-time** ✅
- Типобезопасность: **Sealed interfaces + Records** ✅
### Текущие (весь проект)
- Средний размер класса: **~120 строк** ✅
- Классов >200 строк: **~3%** (GUI классы — допустимо) ✅
- Дублирование кода: **<5%** ✅
### Новые лоадеры конфигурации
- `BlockConfigLoader` — парсинг блоков и весов
- `RegionConfigLoader` — парсинг регионов из локаций
- `ResetConfigLoader` — парсинг настроек сброса
- `RewardConfigLoader` — парсинг наград
- `TeleportConfigLoader` — парсинг телепорта
- `UIConfigLoader` — парсинг UI настроек
- `WorldGuardConfigLoader` — парсинг WG интеграции
---
## 🐛 Технический долг
### 🔴 Критический (нужно сделать)
- [x] Обновить Mine.java для использования новой конфигурации ✅
- [x] Обновить MineFileManager.java для нового ConfigLoader ✅
### 🟡 Средний
- [ ] Включить интеграции с Oraxen и ItemsAdder
- [ ] GUI под-редакторы (BlockEditGui, RewardEditGui, и т.д.)
- [ ] PlaceholderAPI интеграция
### 🟢 Низкий
- [ ] Добавить `/lm info <mine>` — детальная информация
- [ ] Добавить `/lm tp <mine>` — телепортация
- [ ] Добавить `/lm copy <from> <to>` — копирование
- [ ] Разбить большие GUI файлы (>200 строк)
---
## 📦 Git история
- `bb2e47a` - feat: player-spawn config for stuck players, limit teleport height
- `0612465` - fix: ghost blocks and safe teleport location
- `3ba6f30` - feat: WorldGuard auto-region creation, split ConfigLoader
- `23d527e` - docs: update TODO with WorldGuard progress
- `75d7851` - feat: GUI editors (MineEditGui, ConfirmDeleteGui), tab completer
- `f1060f3` - refactor(config): complete rewrite of configuration system
- `f4e9458` - refactor: migrate package from com.loki to dev.loki
- `41924ea` - refactor: simplify LoMinesPlugin (220→109 lines)
- `1e29889` - refactor: split MineConfig and Mines classes
- `14daef3` - refactor: reorganize data/ and util/ into subpackages
- `2dc2543` - refactor: split MineCommands into separate command classes
- `5ddd6e9` - refactor: split ConfigParser into 3 classes
- `bd32b9f` - chore: initial commit - LoMines v3.0.0 base structure
---
*Последнее обновление: 2026-05-31
Добавлена настройка телепорта застрявших игроков!* 🎉