LoMines/todo.md

12 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/5 основных)

  • 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: Интеграции 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
│       ├── MineConfig.java
│       └── ConfigLoader.java
├── 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
│   ├── 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
│   └── 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 ✅

Текущие (весь проект)

  • Средний размер класса: ~150 строк ✅
  • Классов >200 строк: ~5% ✅
  • Дублирование кода: <5% ✅

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

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

  • Обновить Mine.java для использования новой конфигурации
  • Обновить MineFileManager.java для нового ConfigLoader

🟡 Средний

  • Включить интеграции с Oraxen и ItemsAdder
  • GUI редакторы для шахт

🟢 Низкий

  • Добавить /lm info <mine> — детальная информация
  • Добавить /lm tp <mine> — телепортация
  • Добавить /lm copy <from> <to> — копирование

📦 Git история

  • 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
Система конфигурации полностью переписана!
🎉