- Fix locale 'true' bug with sanitization at all levels: * ConfigAccessor.getString() - force String.valueOf() * Option.java - sanitize LANG defaults from config * PlayerSettingsManager - sanitize on settings load * SQLDataMapper - sanitize on SQL load * StorageDisk - sanitize on JSON load * SQLMigrationManager - SQL migration to fix DB - Fix parkour first block position: * Island.java - spawn 6 blocks forward + 1 up from center * GeneratorCleanup.java - same position after fall/reset - Add spawn-location config option at top of config.yml
7 KiB
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 (2-3 часа)
План:
- Создать
GravityShiftMode.java - Создать
GravityShiftGenerator extends ParkourGenerator - Счётчик прыжков, каждые N прыжков - случайный эффект
- Эффекты: jump-boost, speed, slowness, levitation
- Зарегистрировать в
Modes.java
HardcoreMode (1-2 часа)
План:
- Создать
HardcoreMode.java - Создать
HardcoreGenerator extends ParkourGenerator - Переопределить
fall()- сброситьcollectedRewards - Зарегистрировать в
Modes.java
Исправления от 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