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
This commit is contained in:
loki5512344 2026-08-05 21:49:11 +02:00
parent 5707cf2d24
commit 3b5d3d97d5
Signed by: boba
GPG key ID: 253067914055423B
19 changed files with 804 additions and 28 deletions

View file

@ -5,6 +5,7 @@ import dev.loki.loparkour.duels.DuelsMode;
import dev.loki.loparkour.elytra.mode.CloseMode;
import dev.loki.loparkour.elytra.mode.ElytraMode;
import dev.loki.loparkour.elytra.mode.MinSpeedMode;
import dev.loki.loparkour.elytra.mode.ObstacleMode;
import dev.loki.loparkour.elytra.mode.SpeedDemonMode;
import dev.loki.loparkour.elytra.mode.TimeTrialMode;
import dev.loki.loparkour.mode.impl.barrier.InvisibleBarrierMode;
@ -32,6 +33,7 @@ public final class Modes {
public static MinSpeedMode MIN_SPEED;
public static TimeTrialMode TIME_TRIAL;
public static CloseMode CLOSE;
public static ObstacleMode OBSTACLE;
public static DuelsMode DUELS;
public static void init() {
@ -47,6 +49,7 @@ public final class Modes {
MIN_SPEED = (MinSpeedMode) Registry.getMode("minspeed");
TIME_TRIAL = (TimeTrialMode) Registry.getMode("timetrial");
CLOSE = (CloseMode) Registry.getMode("close");
OBSTACLE = (ObstacleMode) Registry.getMode("obstacle");
DUELS = (DuelsMode) Registry.getMode("duels");
}
}