7.8 KiB
7.8 KiB
LoParkour — TODO
Обновлено: 2026-03-07
Легенда
- 🔴 Критично — баг/краш/не компилируется
- 🟡 Важно — фича заявлена но не работает
- 🟢 Планово — улучшение
- ✅ Готово
🔴 Критично
| # | Баг | Файл | Что сделать |
|---|---|---|---|
| ✅ | 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/ |
✅ Подключен GhostRecorder к GeneratorLifecycle |
|
| ✅ | generator/, корень |
✅ Удалены: Command.java, Events.java, BlockSelector.java, ScoreManager.java, GeneratorTick.java |
|
| ✅ | ElytraMode.java |
✅ BoundingBox check в tick(), +2 очка за пролёт |
|
| ✅ | ElytraMode.java |
✅ Счётчик + ActionBar сообщение | |
| ✅ | RaceMode.java |
✅ Кто первый наберёт N очков, time-based leaderboard | |
| ✅ | 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+EffectManagerOptionделегирует вSqlOptions/ParticleOptions/GenerationOptionsOption.SQL_URL/PORT/DB/USERNAME/PASSWORD/PREFIX— forwarding-поля добавленыGenerationOptions— все новые пути защищеныisPath()проверкамиLoParkourCommandразбит наPlayerCommandHandler+AdminCommandHandler+SchematicCommandHandlerEventsразбит на 3 listener'аStorageSQLразбит наSQLConnectionManager+SQLQueryExecutor+SQLMigrationManager- ✅ Проект компилируется без ошибок (исправлены все баги после рефакторинга)
🎮 Чек-лист перед релизом
./gradlew buildбез ошибок- Запуск сервера без ошибок в консоли
- Паркур: прыжки, счёт, рекорд работают
- Scoreboard обновляется
- Все меню открываются
- SQL: данные сохраняются и читаются
- Партиклы и звук в каждом режиме
- Все 5 режимов запускаются без ошибок