refactor: apply 'one folder = one purpose' rule to overflowed packages

- Split by sub-purpose: storage/sql -> schema/+query/+repo/, adaptive/core ->
  calc/+metrics/+model/, command/admin -> ops/+support/, api/event ->
  session/+score/+generation/, menu/core -> screen/, config/core -> merge/,
  config/options -> section/, player/service -> ui/, hook/papi -> resolver/
  (done), mode/impl -> solo/+multi/+barrier/ (done)
- Move util/gui migration stubs -> menu/gui; lpschem POJOs -> pojo/
- Cross-package classes made public (signatures unchanged); fixed imports
- docs/ARCHITECTURE.md + TODO.md updated
- Build green: checkstyle 0 errors, PMD 34
This commit is contained in:
loki5512344 2026-08-05 18:50:39 +02:00
parent 81788e71ed
commit de47bce56e
Signed by: boba
GPG key ID: 253067914055423B
88 changed files with 228 additions and 167 deletions

View file

@ -140,20 +140,35 @@ dev.loki.loparkour
└── util/ # Общие утилиты: gui/, item/, misc/, particle/, text/, world/
```
### Текущее состояние (после пилотной реструктуризации)
### Текущее состояние (после реструктуризации)
Правило «одна папка = одна цель» применено к 3 пилотным областям (остальные — в работе):
Правило «одна папка = одна цель» применено к переполненным пакетам:
- **`command/`** — `core/` (LoParkourCommand, CommandRouter, CommandTabCompleter — вход/роутинг/табы),
`player/` (PlayerCommandHandler, JoinCommandExecutor, LeaderboardCommandExecutor),
`util/` (CommandUtil), `admin/`, `schematic/`.
`util/` (CommandUtil), `player/` (PlayerCommandHandler, Join, Leaderboard), `admin/` (`ops/` — Force*/Reset/
RecoverInventory, `support/` — TargetResolver, Responses), `schematic/` (одна цель — схематик-команды).
- **`mode/impl/`** — `solo/` (DefaultMode, SpeedrunMode, GravityShiftMode), `multi/` (CoopMode, RaceMode,
SpectatorMode), `barrier/` (InvisibleBarrierMode, BarrierGenerator, BarrierRenderer).
- **`hook/papi/`** — `PAPIHook`+`PlaceholderDispatcher` (вход/диспатч), `resolver/` (Global/Player/ScoreRank
резолверы + PlaceholderFormatters).
- **`storage/sql/`** — корень (StorageSQL, SQLConnectionManager, SQLDataMapper), `schema/` (SQLSchemaManager,
SQLMigrationManager), `query/` (SQLQueryBuilder, SQLQueryExecutor), `repo/` (SQLPlayerRepository,
SQLScoreRepository).
- **`adaptive/core/`** — корень (AdaptiveDifficulty, MetricsCollector), `calc/` (DifficultyCalculator/
Adjuster/SkillAnalyzer), `metrics/` (MetricEventCollector, MetricsCacheStore, JumpTimingTracker), `model/`
(DifficultyWeights).
- **`api/event/`** — `session/` (Join/Leave/Spectate), `score/` (Score/Fall), `generation/` (Block/Schematic).
- **`config/core/`** — корень (Config, ConfigLoader, ConfigAccessor), `merge/` (ConfigUpdater,
ConfigMergeParser, ConfigMergeProcessor).
- **`config/options/`** — корень (Option, OptionGeneral), `section/` (Generation/Particles/SQL/Styles).
- **`player/service/`** — корень (UserRegistry, PlayerSettingsManager, BungeeUtil), `ui/` (ParkourHotbar,
ScoreboardManager).
- **`menu/core/`** — корень (LPMenu, Menus, MenuStub), `screen/` (MainMenu, DynamicMenu, ParkourOption);
`util/gui/` переехали в **`menu/gui/`** (GUI migration-стабы).
- **`schematic/legacy/lpschem/`** — `LPSchematicLegacy` + `pojo/` (5 Gson-моделей).
Пересекающие пакеты классы стали `public` (JoinCommandExecutor, LeaderboardCommandExecutor, CommandUtil,
резолверы) — сигнатуры методов не менялись, только видимость.
Пересекающие пакеты классы стали `public` (сигнатуры методов не менялись, только видимость). Оставшиеся
папки с 4–6 файлами — цельные по смыслу (jump-расчёты, block-placement, player-core, pojo и т.п.) — не дробятся.
## Карта миграции