7.7 KiB
7.7 KiB
LoParkour — TODO
Обновлено: 2026-04-09.
Легенда
- 🔴 Критично — баг/краш/безопасность
- 🟡 Важно — заявлено, но не работает / серьёзные проблемы
- 🟢 Планово — улучшение / техдолг
- ✅ Готово
Текущие задачи (2026-04-09)
🔴 P0 — Критичные баги
| # | Задача | Статус |
|---|---|---|
| 1 | Баг с локалью 'true' в БД/конфиге |
✅ Исправлено (санитизация на всех уровнях) |
| 2 | Первый блок паркура генерится на платформе | ✅ Исправлено (6 блоков вперёд + 1 вверх) |
| 3 | ElytraMode полностью не работает | 🔴 КРИТИЧНО - отсутствуют классы |
🟡 P1 — Важные недоработки
| # | Задача | Статус |
|---|---|---|
| 4 | GravityShiftMode не реализован | ✅ Реализовано (случайные эффекты зелий) |
| 5 | HardcoreMode не реализован | ✅ Реализовано (сброс наград при падении) |
🟢 P2 — Проверка после исправлений
| # | Задача | Статус |
|---|---|---|
| 6 | DefaultMode после изменений Island.java | 🟢 Требует проверки |
| 7 | SpeedrunMode таймеры блоков | 🟢 Требует проверки |
| 8 | RaceMode прогресс-бар и финиш | 🟢 Требует проверки |
| 9 | CoopMode мультиплеер | 🟢 Требует проверки |
Детальный план исправления режимов
ElytraMode (4-6 часов)
Проблема: Отсутствуют классы, на которые ссылается ElytraGenerator:
ElytraConfig- загрузка настроек из config.ymlElytraRing- модель кольца (центр, радиус, направление)ElytraRingGenerator- генерация колец по траекторииElytraPhysics- проверка пролёта, падения, бустаElytraRenderer- отрисовка частицами
План:
- Создать
mode/elytra/ElytraConfig.java - Создать
mode/elytra/ElytraRing.java - Создать
mode/elytra/ElytraRingGenerator.java - Создать
mode/elytra/ElytraPhysics.java - Создать
mode/elytra/ElytraRenderer.java - Исправить
generateFirst()вElytraGenerator - Добавить выдачу элитры и фейерверков
✅ GravityShiftMode (реализовано 2026-04-09)
Реализация:
- ✅ Создан
mode/GravityShiftMode.javaс внутреннимGravityShiftGenerator - ✅ Счётчик прыжков на игрока, каждые N прыжков - случайный эффект
- ✅ Эффекты: jump-boost, speed, slowness, levitation (настраиваемые)
- ✅ Зарегистрирован в
Modes.javaиLoParkour.java - ✅ Добавлены локали (en.yml, ru.yml)
Коммиты:
159a4fd- feat: implement GravityShiftMode with random potion effectscf84789- fix: correct GravityShiftMode getMode() and documentation
✅ HardcoreMode (реализовано 2026-04-09)
Реализация:
- ✅ Создан
mode/HardcoreMode.javaс внутреннимHardcoreGenerator - ✅ Переопределён
fall()- очисткаcollectedRewardsдля всех игроков - ✅ Зарегистрирован в
Modes.javaиLoParkour.java - ✅ Добавлены локали (en.yml, ru.yml)
Коммиты:
64badce- feat: implement HardcoreMode with reward reset on fall191c1b9- feat: register HardcoreMode in Modes registry3690915- fix: register GravityShift and Hardcore modes in plugin
Исправления от 2026-04-09
✅ Баг с локалью
ConfigAccessor.getString()- форсирует String черезString.valueOf()Option.java:267-272- санитизация при загрузке дефолтов из конфигаPlayerSettingsManager.java:37-44- санитизация при загрузке настроекSQLDataMapper.java:87-95- санитизация при загрузке из SQLStorageDisk.java:90-106- санитизация при загрузке из JSONSQLMigrationManager.java:51-53- SQL миграция для исправления БД
✅ Первый блок паркура
Island.java:75-90- первый блок на 6 блоков вперёд + 1 вверх от центраGeneratorCleanup.java:110-127- после падения тоже 6 вперёд + 1 вверх
✅ Spawn location в конфиге
- Добавлены
spawn-locationиspawn-axesв начало config.yml
Главный план (стабилизация)
P0 — блокер загрузки или геймплей
| # | Задача | Статус |
|---|---|---|
| 1 | LoLib 3.x в classpath | ✅ build.gradle.kts → libs/lolib-3.0.0.jar |
| 2 | GeneratorCleanup — хвост только сзади по индексу в history |
✅ |
| 3 | Потокобезопасность history |
✅ synchronizedList, снимок при полном reset() |
P1 — важно
| # | Задача | Статус |
|---|---|---|
| 4 | Хотбар: клик по предмету | ✅ isSimilar в restriction listener |
| 5 | SQL readPlayer на корректном потоке |
✅ |
P2 — проверить после P0–P1
| # | Задача | Статус |
|---|---|---|
| 6 | LifecycleTickManager / cleanup / time UI |
✅ |
| 7 | Scoring в воздухе | ✅ документировано (стояние на блоке) |
Follow-up (сделано в коде)
- Leaderboard: sync-таймер; итерация/снимки без гонок с
synchronizedMap. - AdminCommandHandler: cooldown 2.5 с на
forcejoin,forceleave,reset,recoverinventory; при блокировке — сообщение. - SQLConnectionManager: HikariCP +
mysql-connector-jв shadow. - SQL password: если задана непустая
LOPARKOUR_SQL_PASSWORD, она перекрываетconfig.yml→sql.password. - World: валидация имени; папка через
getWorldContainer(); безопасное удаление; кик только если мир не null. - LoParkourCommand:
MultiModeдля join к другу; tab-complete; leaderboard без хака; «too many args». - PlayerCommandHandler:
/parkour leaderboardбез второго аргумента открывает меню лидербордов. - RandomStyle / ElytraGenerator: защита от пустых списков.
- InventoryData: новые сохранения в YAML; legacy binary читается один раз при миграции.
Чек-лист перед релизом
./gradlew build- Старт сервера,
/parkour, меню, один полный забег - SQL: при проде выставить
LOPARKOUR_SQL_PASSWORDна хосте - Проверить миграцию старых
.datинвентарей при первом заходе игрока - Протестировать все режимы: default, speedrun, race, coop, elytra, gravity-shift, hardcore