LoMines/todo.md

17 KiB
Raw Blame History

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

📋 Текущий прогресс

  • Phase 1: Структура проекта и конфигурация ✅
  • Phase 2: Core классы и handlers ✅
  • Phase 3: BlockSetter — тип по Map<String, Double> и prefix ✅
  • Phase 4: Команды — разбито на 4 класса ✅
  • Phase 5: Рефакторинг больших файлов ✅
  • Phase 6: Организация папок (все ≤6 файлов) ✅
  • Phase 7: Утилиты и хелперы ✅
  • Phase 8: Рефакторинг пакетов com.loki → dev.loki ✅
  • Phase 9: Полная перепись системы конфигурации ✅
  • Phase 10: Обновление core классов для новой системы ✅
  • Phase 11: Обновление handlers для новой конфигурации ✅
  • Phase 12: Автодополнение команд (tab completer) ✅
  • Phase 13: GUI редакторы - главное меню ✅ (под-редакторы 0/5)
  • Phase 14: WorldGuard авто-создание регионов ✅
  • Phase 15: Интеграции PlaceholderAPI, Oraxen, ItemsAdder

🎯 Следующие шаги

✅ Приоритет 1: Интеграция новой конфигурации (ВЫПОЛНЕНО)

  • Обновить Mine.java — использовать новые RegionConfig, BlockConfig
  • Обновить Mines.java — использовать новый ConfigLoader
  • Обновить MineFileManager.java — миграция на новый loader
  • Обновить MineRepository.java — работа с новым MineConfig
  • Обновить BukkitBlockSetter.java — использовать BlockKey
  • Обновить все handlers — ActionBarHandler, MineBlockHandler, MineResetHandler, MineRewardHandler
  • Обновить команды — MaskCommands
  • Добавить автодополнение — LoMinesTabCompleter

Приоритет 2: Интеграции с плагинами

  1. Включить OraxenBlockSetter.java — использовать BlockKey.Oraxen
  2. Включить ItemsAdderBlockSetter.java — использовать BlockKey.ItemsAdder
  3. PlaceholderAPI интеграция

Приоритет 3: GUI редакторы (Частично ✅)

  • 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 интеграции

🐛 Технический долг

🔴 Критический (нужно сделать)

  • Обновить Mine.java для использования новой конфигурации ✅
  • Обновить 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
Система конфигурации полностью переписана!
🎉