# 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 ### 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 ` для открытия редактора - Разрешение `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 ` для открытия редактора - Разрешение `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` и 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 ` — детальная информация - [ ] Добавить `/lm tp ` — телепортация - [ ] Добавить `/lm copy ` — копирование - [ ] Разбить большие 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 Система конфигурации полностью переписана!* 🎉