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

128 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`
- ✅ **Проект компилируется без ошибок** (исправлены все баги после рефакторинга)
---
## 🎮 Чек-лист перед релизом
- [x] `./gradlew build` без ошибок
- [ ] Запуск сервера без ошибок в консоли
- [ ] Паркур: прыжки, счёт, рекорд работают
- [ ] Scoreboard обновляется
- [ ] Все меню открываются
- [ ] SQL: данные сохраняются и читаются
- [ ] Партиклы и звук в каждом режиме
- [ ] Все 5 режимов запускаются без ошибок