10 KiB
10 KiB
LoParkour — TODO & Roadmap
Принципы: KISS · DRY · SOLID
Версия: 1.3.0 → 2.0.0
Обновлено: 2026-03-05
📊 Статус миграции vilib → LoLib 2.0
✅ МИГРАЦИЯ ЗАВЕРШЕНА (2026-03-01)
- Файлов изменено: 120+
- Строк кода: 3000+
- Ошибок исправлено: 250+
- Размер jar: 655 КБ
- Все меню работают
- Схематики работают
Легенда
- 🔴 Критично — баги/краши, нужно прямо сейчас
- 🟡 Важно — неработающие фичи
- 🟢 Планово — улучшения и новые фичи
- ✅ Готово
🔴 Критично
| # | Задача | Файл | Статус |
|---|---|---|---|
| 1 | GUIManager.init() не вызывался — клики не отменялись | LoParkour.java |
✅ |
| 2 | SQL race condition: CREATE TABLE до connect() | StorageSQL.java |
✅ |
| 3 | PreparedStatement leak в sendQuery() | StorageSQL.java |
✅ |
| 4 | Leaderboard читал данные до готовности SQL | Leaderboard.java |
✅ |
| 5 | Scoreboard не назначался игроку / обновление отключено | ParkourUser.java |
✅ |
| 6 | Только 16 уникальных entries в scoreboard (§0..§f) | ParkourUser.java |
✅ |
| 7 | NPE в World.setup() если createWorld() упал | World.java |
✅ |
| 8 | World.world не обновлялся при крэш-рестарте | World.java |
✅ |
| 9 | UUID сравнивался через == вместо .equals() | ParkourUser.java |
✅ |
| 10 | Async world creation вызывалось не на main thread | LoParkour.java |
✅ |
| 11 | StorageSQL.close() не проверяет connection == null | StorageSQL.java |
✅ |
🟡 Важно — неработающие фичи
Партиклы
Файл: generator/ParkourGenerator.java → generator/EffectManager.java
- Реализован базовый DOT/CIRCLE/BOX через
EffectManager - Протестировать все три режима в игре
- Убедиться что
ParticleUtil.circle()принимаетList<Player>
ConfigUpdater
Файл: config/Config.java
- Раскомментировать
ConfigUpdater.update(...)(закомментировано с TODO) - Убедиться что
ignoredSectionsправильно пробрасываются
SpeedrunMode — блоки не синхронизированы с генератором
Файл: mode/SpeedrunMode.java
- Переопределить
tick()вSpeedrunGenerator - Блоки должны исчезать через
history, а не независимо
HardcoreMode — сброс наград при падении
Файл: mode/HardcoreMode.java
- Переопределить
reset()вHardcoreGenerator - Очищать
player.collectedRewardsприregenerate=true
🟢 Планово — новые фичи
ElytraMode — кольца
Файл: mode/ElytraMode.java
ElytraGenerator extends ParkourGenerator— генерировать кольца из партиклов- Детекция пролёта через кольцо (bounding box check в tick)
- Cooldown на фейерверки (буст)
GravityShiftMode — визуальные эффекты
Файл: mode/GravityShiftMode.java
- Title при смене эффекта
- Партиклы PORTAL при смене
- Звук при смене
Валидация прыжков
Файл: generator/ParkourGenerator.java
- Включить
JUMP_VALIDATION_ENABLEDиз конфига вselectNext() - Retry-loop: до 10 попыток если прыжок невозможен
- Использовать уже существующий
JumpValidator
Специальные прыжки
Файл: generator/JumpType.java (создать)
- neo-jump (4 блока по диагонали)
- head-hitter (блок над головой)
- Интегрировать в
selectBlocks()через шанс из конфига
Ghost система
Файл: ghost/
- Протестировать
GhostRecorderиGhostPlayer - Включить в конфиге
ghost-mode.enabled: true - Команда
/lp ghost <on|off>
Мультиплеер режимы
- RaceMode (гонка — кто первый наберёт N очков)
- CoopMode (кооператив — общий счёт)
Локализация режимов
Файлы: locales/en.yml, locales/ru.yml
- gravity-shift: название эффекта,
effect-applied - elytra:
ring-passed,boost-ready,boost-cooldown - hardcore:
rewards-lost
✅ Архитектурный рефакторинг — завершён
| Что сделано | Результат |
|---|---|
Command.java → удалён (дубликат) |
LoParkourCommand.java — единственный файл |
LoParkourCommand.java (528 строк) |
command/PlayerCommandHandler + AdminCommandHandler + SchematicCommandHandler + тонкий роутер |
Events.java (268 строк) |
listener/PlayerConnectionListener + ParkourRestrictionListener + SchematicWandListener |
ParkourGenerator.java (666 строк) |
Делегирует в EffectManager + GeneratorTick |
Option.java (247 строк) |
SqlOptions + ParticleOptions + GenerationOptions + тонкий Option |
| GUI-паттерн (13 меню) | Исправлены на правильный create() API |
| Scoreboard | Полная реализация через Team prefix API |
| SQL инициализация | pendingTableCreations queue + onConnectCallbacks |
🎮 Чек-лист перед релизом
./gradlew buildбез ошибок и предупреждений- Запуск сервера без ошибок в консоли
- Паркур создаётся и работает (прыжки, счёт, рекорд)
- Скорборд обновляется во время игры
- Все меню открываются корректно
- SQL: таблицы создаются, данные сохраняются/читаются
- Схематики: save → reload → paste работает
- Лидерборд: запись и чтение рекордов
- Частицы и звук работают в каждом режиме
/lp forcejoin,forceleave,reset,recoverinventory
🔧 План рефакторинга больших файлов
Проблемные файлы (>200 строк):
generator/ParkourGenerator.java(306) → разбить на 3 файлаstorage/StorageSQL.java(248) → разбить на 2 файлаsession/Session.java(236) → разбить на 2 файлаplayer/ParkourUser.java(220) → разбить на 2 файлаplayer/ParkourPlayer.java(202) → разбить на 2 файла
1. ParkourGenerator.java → 3 файла
generator/
├── ParkourGenerator.java (150) - координация
├── GeneratorState.java (80) - состояние (score, history)
└── GeneratorLifecycle.java (80) - tick, reset, fall
2. StorageSQL.java → 2 файла
storage/
├── SQLConnection.java (120) - управление подключением
└── SQLRepository.java (130) - CRUD операции
3. Session.java → 2 файла
session/
├── Session.java (120) - основная логика
└── SessionMembers.java (120) - управление участниками
4. ParkourUser.java → 2 файла
player/
├── ParkourUser.java (120) - базовый user
└── UserScoreboard.java (100) - scoreboard логика
5. ParkourPlayer.java → 2 файла
player/
├── ParkourPlayer.java (120) - gameplay
└── PlayerSettings.java (80) - настройки
🎨 Новые фичи (Фаза 3-6)
Визуальные темы
public enum VisualTheme {
NEON, // неоновые блоки + яркие партиклы
NATURE, // трава, листья, цветы
SPACE, // космос, звёзды
UNDERWATER,// вода, кораллы
HELL // нижний мир, лава
}
Combo система
- Множитель очков за последовательные прыжки (x2, x3... x10)
- Визуальный индикатор combo
- Combo break при падении
- Бонусные очки за высокий combo
Специальные прыжки
- Neo-jump - 4 блока по диагонали (5% шанс)
- Head-hitter - блок над головой (10% шанс)
- Ladder jump - прыжок на лестницу (15% шанс)
Replay система
- Запись последнего прохождения
- Просмотр replay с камерой
- Экспорт/импорт replay файлов
- Замедление/ускорение воспроизведения
📅 Временная шкала (6-7 недель)
| Фаза | Задачи | Время |
|---|---|---|
| 0 | Критические баги | 1-2 дня |
| 1 | Рефакторинг файлов | 1 неделя |
| 2 | Исправление фич | 1 неделя |
| 3 | Новые режимы | 2 недели |
| 4 | Визуал (темы, combo) | 1 неделя |
| 5 | Ghost система | 3 дня |
| 6 | Replay система | 1 неделя |
🎯 Критерии релиза 2.0.0
- ✅ Все файлы < 200 строк
- ✅ 5+ режимов игры
- ✅ Ghost система активна
- ✅ Визуальные темы
- ✅ Combo система
- ✅ Replay система
- ✅ Специальные прыжки