Commit graph

18 commits

Author SHA1 Message Date
8c8046a4f5
feat: personal run replays (ghost system)
- GhostData: worldName field, format v4; GhostManager stores last N runs per player (ghosts/<uuid>/<ts>.ghost)
- GhostService: per-player recording (start on run start, every tick, finalize on fall), gated by ghost-mode.enabled + per-player toggle
- PlayerGhost: packet-based fake-player NPC with viewer skin (NMS via remapNms gradle task, reflection send, graceful degradation)
- GhostReplay: teleport viewer to run start, replay frames via PlayerGhost, restore on finish
- /lp replay [index] command + tab completion; settings menu ghost_recording toggle (persisted disk/SQL)
- config: ghost-mode.{enabled,max-runs}, remove dead show-top/transparency + GHOST_* statics
- tests: GhostData v4 round-trip, GhostManager eviction/ordering, yawToFixed (79 total)
2026-08-06 13:13:59 +02:00
3b5d3d97d5
feat: elytra firework boost, obstacle mode, duels menu, tests
- ElytraBoost: one-shot firework boost (v*0.7+dir*0.6, FIREWORKS_SPARK,
  rocket sounds) on entering ascending section + sustained thrust; Particle.
  FIREWORK doesn't exist in spigot-api 1.20.4 -> FIREWORKS_SPARK
- ObstacleGenerator (client-side obstacles: PILLARS/LINES/HOLE_IN_WALL/
  CIRCLE/DIAMOND via ClientBlockChanger.sendNow) + ObstacleMode + locales
- DuelsMenu (lists open duels sessions, click to join) + /parkour duels
  command + tab completion + locales play.multi.duels.{name,menu_empty}
- Tests: ElytraSection/PointType/KnotDirector/SingleDuelsGenerator (15 new)
- checkstyle 0/0 (main+test), PMD 0, 41 tests pass
2026-08-05 21:49:11 +02:00
5707cf2d24
feat: duels player colors + elytra sub-modes (M-level)
- Add ParkourGenerator.selectBlockData() hook (forced course material);
  BlockSelector checks it first; SingleDuelsGenerator overrides to use the
  player's color (16 concrete colors) and forces only DEFAULT block type
- Elytra sub-modes: SpeedDemonGenerator (max-speed score), MinSpeedGenerator
  (min-speed check, reset on 6 slow ticks), TimeTrialGenerator (score cap),
  CloseGenerator (FLAT rings); + SpeedDemon/MinSpeed/TimeTrial/Close modes,
  registration, locales play.elytra.*, config mode-settings.*
- Config.getDouble(path, default) + ConfigAccessor overload
- checkstyle 0/0, PMD 0, build green
2026-08-05 21:32:54 +02:00
acb884b70b
feat: add Duels mode (MultiMode, generator-per-player)
- duels/: DuelsMode (MultiMode), DuelsGenerator (owner: per-player
  SingleDuelsGenerator map, allowJoining, goal), SingleDuelsGenerator
  (getPlayers()=List.of(own player) -> independent course/score; score
  reaches goal -> win), DuelsCountdown (10s countdown + race start)
- win(): sorted scoreboard, victory/loss titles, return to default after 10s;
  leave() only removePlayer (no Coop recursion)
- config modes.duels.{enabled,max-players,goal,island-distance}, locales
  play.multi.duels.* (ru/en), registered in Modes/PluginBootstrap
- checkstyle 0/0, PMD 0, build green
2026-08-05 21:16:00 +02:00
8fde1b579b
feat: add Elytra mode (basic S-level)
- elytra/section/: ElytraSection (5 knots + cubic spline via commons-math3),
  ElytraKnotDirector (dx~N(75,15), dy bias, dz~N(0,35)), ElytraPointType
  (CIRCLE Bresenham / FLAT), ClientBlockChanger (client-side sendBlockChanges,
  forward-limit min(vd,8))
- elytra/generator/ElytraGenerator extends ParkourGenerator: own tick() (score by
  velocity.x while gliding, section lifecycle, fall detection, sustained boost in
  ascending sections), reset, spawn with elytra
- elytra/mode/ElytraMode: registered in Modes/PluginBootstrap, locale items ru/en
- build.gradle: commons-math3 3.6.1 + relocate
- checkstyle 0/0, PMD 0, build green (tests + shadowJar)
2026-08-05 20:45:01 +02:00
9f70e2e586
refactor: remove legacy .lpschem format (TODO 117)
- Delete schematic/legacy/lpschem/ (LPSchematicLegacy + 5 pojo Gson models)
- Delete schematic/convert/LpschemConverter and /lp schematic convert command
- Remove SchematicClipboardBuilder.fromLegacy, convert branches in dispatcher/
  tab-completer/help, locales (ru/en), SCHEMATICS.md and yml comments
- Kept only .schem (WorldEdit) + .nbt
- Build green: checkstyle 0 errors, PMD 33
2026-08-05 18:58:18 +02:00
2773db98cf feat: replace Elytra mode with Invisible Barrier mode 2026-07-06 11:24:09 +02:00
0079cbf54b fix: remove Hardcore mode, disable Elytra by default, add bug tracker
- Remove HardcoreMode (lose all rewards on fall)
- Disable Elytra mode in default config
- Add todo.md with 20 identified bugs
- Fix 3 remaining bugs: checkPlayerFall continue, removeTrailBlocks sync, scoredBlocks clear on fall
2026-06-08 14:40:22 +02:00
fd0ba2cc0e refactor: reorganize packages and replace LPSchematic with WorldEdit
Restructure core modules into subpackages (generator, schematic, config, session, etc.); add .schem/.nbt schematic pipeline, commands, adaptive stats skeleton, and bootstrap wiring.
2026-06-01 14:02:48 +02:00
loki
02ba1e4028 feat: add locale entries for GravityShift and Hardcore modes
- Update gravity-shift: change material to POTION, update description to reflect random potion effects
- Update hardcore: update description to clarify reward loss on fall
- Apply changes to both English and Russian locales
2026-04-09 14:19:20 +02:00
loki
46f7b794c6 Refactor admin command cooldown handling and update localization
- Updated cooldown handling in AdminCommandHandler to use localized messages.
- Added new method in Locales class to retrieve strings based on CommandSender type.
- Introduced cooldown messages in English and Russian localization files.
- Removed outdated DuelMode section from TODO.md and updated the last modified date.
2026-04-01 16:25:41 +02:00
loki
978f739045 fix jump slab 2026-03-17 13:36:23 +01:00
loki
d9eb747c1b new version 1.3.3 2026-03-10 12:39:21 +01:00
loki
2d5c5eea48 fix generator 30% 2026-03-07 15:59:12 +01:00
loki
d1dcf6ab57 fix and migrate 70% 2026-03-05 20:28:25 +01:00
loki
1b1d363f3b Add Elytra Parkour Mode (basic implementation)
- Created ElytraMode class with leaderboard support
- Auto-gives elytra and fireworks on mode start
- Added elytra mode config options
- Added Russian and English localization
- Integrated into mode selection menu
- TODO: Ring generation, boost system, collision detection
2026-02-25 13:10:10 +01:00
loki
56bf11822e v1.2.4: Fix colors, add Russian locale, remove update checker
- Fixed HEX color format conversion (&#RRGGBB -> <#RRGGBB>)
- Added full Russian translation (ru.yml)
- Added ru.yml to auto-copy on first run
- Removed UpdateChecker (old IP plugin remnant)
- Fixed Config.getChildren() deep parameter bug
- Updated plugin.yml version to use Gradle variable
2026-02-25 13:01:44 +01:00
loki
aecb03ccf8 Initial commit: LoParkour v1.1.0 2026-02-24 22:07:03 +01:00