357 lines
17 KiB
Markdown
357 lines
17 KiB
Markdown
# 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. Ghost blocks фикс ✅
|
||
- `BlockUpdateUtil.java` — утилита для отправки пакетов обновления блоков
|
||
- `sendBlockUpdate()` — обновить один блок для всех видящих игроков
|
||
- `sendRegionUpdate()` — batch-обновление для кубоидного региона
|
||
- `sendLocationsUpdate()` — эффективное обновление для списка позиций
|
||
- `refreshChunks()` — полный resync чанков при необходимости
|
||
- `findSafeTeleportLocation()` — найти безопасную позицию без задыхания
|
||
- `BukkitBlockSetter` — отправляет пакеты после установки блоков
|
||
- `MineResetHandler.teleportPlayers()` — телепортирует в безопасную позицию
|
||
|
||
**Проблема:** Ghost blocks (невидимые блоки) возникают при быстрой установке блоков, когда сервер не отправляет пакеты клиенту.
|
||
**Решение:** Принудительная отправка `player.sendBlockChange()` после установки блоков.
|
||
|
||
### 8. 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
|
||
│ ├── teleport/
|
||
│ │ └── TeleportConfig.java
|
||
│ ├── ui/
|
||
│ │ └── UIConfig.java
|
||
│ ├── loader/ ← ✅ SPLIT FROM ConfigLoader
|
||
│ │ ├── BlockConfigLoader.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 история
|
||
|
||
- `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
|
||
Система конфигурации полностью переписана!* 🎉
|