LoParkour/TODO.md
2026-03-07 15:59:12 +01:00

7.8 KiB
Raw Blame History

LoParkour — TODO

Обновлено: 2026-03-07

Легенда

  • 🔴 Критично — баг/краш/не компилируется
  • 🟡 Важно — фича заявлена но не работает
  • 🟢 Планово — улучшение
  • ✅ Готово

🔴 Критично

# Баг Файл Что сделать
✅ BOM в ParkourGenerator.java ломает компиляцию ParkourGenerator.java ✅ Удалён через Python
✅ generator.score → generator.state.score PAPIHook.java, ParkourSettingsMenu.java ✅ Исправлено
✅ ParkourUser.joinCount удалён LoParkour.java ✅ Использован UserRegistry.getJoinCount()
✅ PlayerSettingsManager.OptionContainer не public PlayerSettingsManager.java ✅ Сделан public
✅ Option.PARTICLE_DATA.data() не существует EffectManager.java ✅ Убран .data()
✅ ParticleUtil.circle() неправильные параметры EffectManager.java ✅ Исправлено на (Location, Particle, int, int)
✅ PotionEffectType.JUMP и SLOW удалены в Paper 1.20.5+ GravityShiftMode.java ✅ Оставлены старые названия для 1.20.4 (JUMP, SLOW)
✅ ElytraMode создаёт обычный ParkourGenerator ElytraMode.java ✅ Создан ElytraGenerator extends ParkourGenerator
✅ SpeedrunMode: таймеры runLater продолжают тикать после reset() SpeedrunMode.java ✅ Хранятся ScheduledTask, отменяются в reset()

🟡 Важно — фичи есть в коде, но не работают

# Фича Файл Что сделать
✅ HardcoreMode: collectedRewards не очищается при падении HardcoreMode.java ✅ Добавлен player.collectedRewards.clear() в fall()
✅ JumpValidator создан но нигде не вызывается BlockPlacer.java ✅ Добавлен retry-loop в selectNext() (до 10 попыток)
✅ JumpType enum создан но не интегрирован в генератор BlockPlacer.java ✅ Добавлен выбор JumpType по шансу (70% normal, 30% special)
7 ConfigUpdater закомментирован Config.java ✅ Написан ConfigUpdater.java, подключён в Config.update()
✅ GravityShiftMode: нет визуала при смене эффекта GravityShiftMode.java ✅ Добавлены Title + Sound + партиклы PORTAL

🟢 Планово — дуэли

DuelMode

  • DuelMode implements Mode — режим дуэли
  • DuelSession extends Session — два игрока, отдельные острова
  • /lp duel <игрок> — вызов на дуэль, запрос истекает через 30 сек
  • Форматы: Race (кто первый до N очков), Survival (3 жизни), Time Attack (60 сек кто больше)
  • Scoreboard показывает счёт обоих в реальном времени
  • ActionBar: Opponent: 34 pts во время игры
  • При падении противника — уведомление
  • Победитель получает награды через систему Rewards
  • Лидерборд дуэлей (W/L)
  • Кнопка реванша после окончания

🟢 Планово

# Фича Файл Что сделать
✅ Ghost система не интегрирована ghost/ ✅ Подключен GhostRecorder к GeneratorLifecycle
✅ Удалить мёртвые stub-файлы generator/, корень ✅ Удалены: Command.java, Events.java, BlockSelector.java, ScoreManager.java, GeneratorTick.java
✅ ElytraMode: кольца из партиклов + детекция пролёта ElytraMode.java ✅ BoundingBox check в tick(), +2 очка за пролёт
✅ ElytraMode: cooldown на фейерверки ElytraMode.java ✅ Счётчик + ActionBar сообщение
✅ RaceMode RaceMode.java ✅ Кто первый наберёт N очков, time-based leaderboard
✅ CoopMode CoopMode.java ✅ Общий счёт нескольких игроков, трекинг вклада
✅ Реорганизация generator/ по подпакетам generator/ ✅ Создана структура: jump/, lifecycle/, effect/

🏗️ ✅ Реорганизация generator/ — ГОТОВО

Новая структура по логическим группам:

generator/
├── ParkourGenerator.java     ← главный класс (183 строки)
├── GeneratorState.java        ← данные генератора
├── GeneratorOption.java       ← enum опций
├── Profile.java               ← профиль настроек
├── Island.java                ← остров спавна
│
├── jump/                      ← всё про прыжки и размещение блоков
│   ├── BlockPlacer.java       (166 строк)
│   ├── JumpDirector.java
│   ├── JumpOffsetGenerator.java
│   ├── JumpValidator.java
│   └── JumpType.java
│
├── lifecycle/                 ← жизненный цикл: тик, падение, очистка
│   └── GeneratorLifecycle.java
│
└── effect/                    ← визуальные эффекты
    └── EffectManager.java

Результат:

  • ✅ Все файлы перемещены через smartRelocate (импорты обновлены автоматически)
  • ✅ Удалены мёртвые stub-файлы
  • ✅ Проект компилируется без ошибок
  • ✅ Структура стала логичнее и понятнее

✅ Уже готово (архитектура)

  • Все критические баги из предыдущих сессий исправлены (UUID, SQL race, PreparedStatement, Leaderboard, Scoreboard, World NPE)
  • ParkourGenerator разбит: GeneratorState + GeneratorLifecycle + BlockPlacer + EffectManager
  • Option делегирует в SqlOptions / ParticleOptions / GenerationOptions
  • Option.SQL_URL/PORT/DB/USERNAME/PASSWORD/PREFIX — forwarding-поля добавлены
  • GenerationOptions — все новые пути защищены isPath() проверками
  • LoParkourCommand разбит на PlayerCommandHandler + AdminCommandHandler + SchematicCommandHandler
  • Events разбит на 3 listener'а
  • StorageSQL разбит на SQLConnectionManager + SQLQueryExecutor + SQLMigrationManager
  • ✅ Проект компилируется без ошибок (исправлены все баги после рефакторинга)

🎮 Чек-лист перед релизом

  • ./gradlew build без ошибок
  • Запуск сервера без ошибок в консоли
  • Паркур: прыжки, счёт, рекорд работают
  • Scoreboard обновляется
  • Все меню открываются
  • SQL: данные сохраняются и читаются
  • Партиклы и звук в каждом режиме
  • Все 5 режимов запускаются без ошибок