diff --git a/TODO.md b/TODO.md
index 4e1f930..30f25fd 100644
--- a/TODO.md
+++ b/TODO.md
@@ -266,12 +266,13 @@ Checkstyle отработал `0 errors` (error-уровневые legacy-нар
> Leaderboard→LeaderboardRecords.
> Актуальные счётчики: **checkstyle 0 errors / 1413 warnings**, **PMD 34**. Пункты 132–138 — в силе.
>
-> ## ✅ ПРОГРЕСС-2 (правило «одна папка = одна цель» — пилоты применены)
-> Правило добавлено в `docs/ARCHITECTURE.md` (п.8 «Принципы проектирования»). Пилоты: `command/`
-> → core/ + util/ (player/ уже был), `mode/impl/` → solo/ + multi/ + barrier/, `hook/papi/` → resolver/.
-> Классы, пересекающие пакеты, стали public (сигнатуры не менялись). Остальные переполненные папки
-> (storage/sql, adaptive/core, api/event, menu/core, config/core|options, schematic/legacy/lpschem,
-> player/service, generator/*, util/gui и др.) — кандидаты на аналогичное разбиение по под-целям.
+> ## ✅ ПРОГРЕСС-2 (правило «одна папка = одна цель» — применено полностью)
+> Правило в `docs/ARCHITECTURE.md` (п.8). Выполнено разбиение переполненных пакетов: `command/`→core/+util/,
+> `mode/impl/`→solo/+multi/+barrier/, `hook/papi/`→resolver/, `storage/sql/`→schema/+query/+repo/,
+> `adaptive/core/`→calc/+metrics/+model/, `api/event/`→session/+score/+generation/, `config/core/`→merge/,
+> `config/options/`→section/, `player/service/`→ui/, `menu/core/`→screen/, `util/gui/`→`menu/gui/`,
+> `schematic/legacy/lpschem/`→pojo/. Пересекающие пакеты классы стали public (сигнатуры не менялись).
+> Сборка: **checkstyle 0 errors / 1413 warnings, PMD 34, build ✓**.
- **132. [C] Почистить `FinalLocalVariable` (legacy, ~1034 warning / 120 файлов).** Объявить локальные переменные `final`. Делать вместе с декомпозицией, а не отдельным проходом.
- **133. [C] Почистить `MagicNumber` (legacy, ~346 warning / 60 файлов).** Заменить магические числа на именованные константы (приоритет: конфиг- и стиль-коэффициенты, пороги сложности, тайминги).
diff --git a/config/checkstyle/suppressions.xml b/config/checkstyle/suppressions.xml
index 5fc5706..8ff3e68 100644
--- a/config/checkstyle/suppressions.xml
+++ b/config/checkstyle/suppressions.xml
@@ -33,7 +33,7 @@
Do not remove without a review of the intended behavior.
-->
-
+
@@ -60,8 +60,8 @@
-
-
+
+
@@ -70,7 +70,7 @@
-
+
diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md
index 6872265..8e1a0da 100644
--- a/docs/ARCHITECTURE.md
+++ b/docs/ARCHITECTURE.md
@@ -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 и т.п.) — не дробятся.
## Карта миграции
diff --git a/src/main/java/dev/loki/loparkour/adaptive/core/AdaptiveDifficulty.java b/src/main/java/dev/loki/loparkour/adaptive/core/AdaptiveDifficulty.java
index 407dbff..fd87215 100644
--- a/src/main/java/dev/loki/loparkour/adaptive/core/AdaptiveDifficulty.java
+++ b/src/main/java/dev/loki/loparkour/adaptive/core/AdaptiveDifficulty.java
@@ -7,6 +7,9 @@ import dev.loki.loparkour.generator.core.model.Profile;
import dev.loki.loparkour.player.core.ParkourPlayer;
import org.jetbrains.annotations.NotNull;
+import dev.loki.loparkour.adaptive.core.calc.DifficultyAdjuster;
+import dev.loki.loparkour.adaptive.core.calc.DifficultyCalculator;
+import dev.loki.loparkour.adaptive.core.calc.SkillAnalyzer;
import java.util.Set;
/**
diff --git a/src/main/java/dev/loki/loparkour/adaptive/core/MetricsCollector.java b/src/main/java/dev/loki/loparkour/adaptive/core/MetricsCollector.java
index 795d450..5d59bf6 100644
--- a/src/main/java/dev/loki/loparkour/adaptive/core/MetricsCollector.java
+++ b/src/main/java/dev/loki/loparkour/adaptive/core/MetricsCollector.java
@@ -10,6 +10,9 @@ import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import dev.loki.loparkour.adaptive.core.metrics.JumpTimingTracker;
+import dev.loki.loparkour.adaptive.core.metrics.MetricEventCollector;
+import dev.loki.loparkour.adaptive.core.metrics.MetricsCacheStore;
import java.util.UUID;
/**
diff --git a/src/main/java/dev/loki/loparkour/adaptive/core/DifficultyAdjuster.java b/src/main/java/dev/loki/loparkour/adaptive/core/calc/DifficultyAdjuster.java
similarity index 98%
rename from src/main/java/dev/loki/loparkour/adaptive/core/DifficultyAdjuster.java
rename to src/main/java/dev/loki/loparkour/adaptive/core/calc/DifficultyAdjuster.java
index c2abad0..6cf7dfa 100644
--- a/src/main/java/dev/loki/loparkour/adaptive/core/DifficultyAdjuster.java
+++ b/src/main/java/dev/loki/loparkour/adaptive/core/calc/DifficultyAdjuster.java
@@ -1,6 +1,7 @@
-package dev.loki.loparkour.adaptive.core;
+package dev.loki.loparkour.adaptive.core.calc;
import dev.loki.loparkour.generator.core.model.Profile;
+import dev.loki.loparkour.adaptive.core.model.DifficultyWeights;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/src/main/java/dev/loki/loparkour/adaptive/core/DifficultyCalculator.java b/src/main/java/dev/loki/loparkour/adaptive/core/calc/DifficultyCalculator.java
similarity index 99%
rename from src/main/java/dev/loki/loparkour/adaptive/core/DifficultyCalculator.java
rename to src/main/java/dev/loki/loparkour/adaptive/core/calc/DifficultyCalculator.java
index 645c6b4..40f551b 100644
--- a/src/main/java/dev/loki/loparkour/adaptive/core/DifficultyCalculator.java
+++ b/src/main/java/dev/loki/loparkour/adaptive/core/calc/DifficultyCalculator.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.adaptive.core;
+package dev.loki.loparkour.adaptive.core.calc;
import dev.loki.loparkour.adaptive.model.SkillRating;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/dev/loki/loparkour/adaptive/core/SkillAnalyzer.java b/src/main/java/dev/loki/loparkour/adaptive/core/calc/SkillAnalyzer.java
similarity index 99%
rename from src/main/java/dev/loki/loparkour/adaptive/core/SkillAnalyzer.java
rename to src/main/java/dev/loki/loparkour/adaptive/core/calc/SkillAnalyzer.java
index c664f12..3166fc6 100644
--- a/src/main/java/dev/loki/loparkour/adaptive/core/SkillAnalyzer.java
+++ b/src/main/java/dev/loki/loparkour/adaptive/core/calc/SkillAnalyzer.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.adaptive.core;
+package dev.loki.loparkour.adaptive.core.calc;
import dev.loki.loparkour.adaptive.model.PlayerMetrics;
import dev.loki.loparkour.adaptive.model.SkillRating;
diff --git a/src/main/java/dev/loki/loparkour/adaptive/core/JumpTimingTracker.java b/src/main/java/dev/loki/loparkour/adaptive/core/metrics/JumpTimingTracker.java
similarity index 73%
rename from src/main/java/dev/loki/loparkour/adaptive/core/JumpTimingTracker.java
rename to src/main/java/dev/loki/loparkour/adaptive/core/metrics/JumpTimingTracker.java
index 32cdf14..be1ef67 100644
--- a/src/main/java/dev/loki/loparkour/adaptive/core/JumpTimingTracker.java
+++ b/src/main/java/dev/loki/loparkour/adaptive/core/metrics/JumpTimingTracker.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.adaptive.core;
+package dev.loki.loparkour.adaptive.core.metrics;
import org.bukkit.block.Block;
import org.jetbrains.annotations.NotNull;
@@ -18,30 +18,30 @@ import java.util.concurrent.ConcurrentHashMap;
*
* Thread-safe: Uses ConcurrentHashMap for player caches.
*/
-class JumpTimingTracker {
+public class JumpTimingTracker {
private final Map lastBlockCache;
private final Map lastLandTimeCache;
- JumpTimingTracker() {
+ public JumpTimingTracker() {
this.lastBlockCache = new ConcurrentHashMap<>();
this.lastLandTimeCache = new ConcurrentHashMap<>();
}
@Nullable
- Long lastLandTime(@NotNull UUID playerUuid) {
+ public Long lastLandTime(@NotNull UUID playerUuid) {
return lastLandTimeCache.get(playerUuid);
}
- void markLand(@NotNull UUID playerUuid, long timeMillis) {
+ public void markLand(@NotNull UUID playerUuid, long timeMillis) {
lastLandTimeCache.put(playerUuid, timeMillis);
}
- void updateLastBlock(@NotNull UUID playerUuid, @NotNull Block block) {
+ public void updateLastBlock(@NotNull UUID playerUuid, @NotNull Block block) {
lastBlockCache.put(playerUuid, block);
}
- void unload(@NotNull UUID playerUuid) {
+ public void unload(@NotNull UUID playerUuid) {
lastBlockCache.remove(playerUuid);
lastLandTimeCache.remove(playerUuid);
}
diff --git a/src/main/java/dev/loki/loparkour/adaptive/core/MetricEventCollector.java b/src/main/java/dev/loki/loparkour/adaptive/core/metrics/MetricEventCollector.java
similarity index 77%
rename from src/main/java/dev/loki/loparkour/adaptive/core/MetricEventCollector.java
rename to src/main/java/dev/loki/loparkour/adaptive/core/metrics/MetricEventCollector.java
index b5085dc..b518823 100644
--- a/src/main/java/dev/loki/loparkour/adaptive/core/MetricEventCollector.java
+++ b/src/main/java/dev/loki/loparkour/adaptive/core/metrics/MetricEventCollector.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.adaptive.core;
+package dev.loki.loparkour.adaptive.core.metrics;
import dev.loki.loparkour.adaptive.model.PlayerMetrics;
import dev.loki.loparkour.generator.jump.calculation.JumpType;
@@ -17,19 +17,19 @@ import java.util.UUID;
* - Detect near-miss jumps (distance > 3.5 blocks)
* - Persist metrics when a player falls
*/
-class MetricEventCollector {
+public class MetricEventCollector {
private static final double NEAR_MISS_THRESHOLD = 3.5;
private final MetricsCacheStore cacheStore;
private final JumpTimingTracker timingTracker;
- MetricEventCollector(@NotNull MetricsCacheStore cacheStore, @NotNull JumpTimingTracker timingTracker) {
+ public MetricEventCollector(@NotNull MetricsCacheStore cacheStore, @NotNull JumpTimingTracker timingTracker) {
this.cacheStore = cacheStore;
this.timingTracker = timingTracker;
}
- void onBlockLand(@NotNull Player player, @NotNull Block block, double distance) {
+ public void onBlockLand(@NotNull Player player, @NotNull Block block, double distance) {
UUID uuid = player.getUniqueId();
PlayerMetrics metrics = cacheStore.getOrCreate(uuid);
@@ -47,17 +47,17 @@ class MetricEventCollector {
timingTracker.updateLastBlock(uuid, block);
}
- void onPlayerScore(@NotNull Player player, @NotNull Block block, double distance) {
+ public void onPlayerScore(@NotNull Player player, @NotNull Block block, double distance) {
onBlockLand(player, block, distance);
}
- void onPlayerFall(@NotNull Player player) {
+ public void onPlayerFall(@NotNull Player player) {
UUID uuid = player.getUniqueId();
PlayerMetrics metrics = cacheStore.getOrCreate(uuid);
cacheStore.save(metrics);
}
- void onJump(@NotNull Player player, @NotNull JumpType jumpType) {
+ public void onJump(@NotNull Player player, @NotNull JumpType jumpType) {
UUID uuid = player.getUniqueId();
PlayerMetrics metrics = cacheStore.getOrCreate(uuid);
@@ -68,7 +68,7 @@ class MetricEventCollector {
metrics.recordJump(jumpType.name().toLowerCase(), timeDiff);
}
- void unload(@NotNull UUID playerUuid) {
+ public void unload(@NotNull UUID playerUuid) {
timingTracker.unload(playerUuid);
}
}
\ No newline at end of file
diff --git a/src/main/java/dev/loki/loparkour/adaptive/core/MetricsCacheStore.java b/src/main/java/dev/loki/loparkour/adaptive/core/metrics/MetricsCacheStore.java
similarity index 81%
rename from src/main/java/dev/loki/loparkour/adaptive/core/MetricsCacheStore.java
rename to src/main/java/dev/loki/loparkour/adaptive/core/metrics/MetricsCacheStore.java
index aee1c3f..e1767ec 100644
--- a/src/main/java/dev/loki/loparkour/adaptive/core/MetricsCacheStore.java
+++ b/src/main/java/dev/loki/loparkour/adaptive/core/metrics/MetricsCacheStore.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.adaptive.core;
+package dev.loki.loparkour.adaptive.core.metrics;
import dev.loki.loparkour.adaptive.model.PlayerMetrics;
import dev.loki.loparkour.adaptive.storage.StatsRepository;
@@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap;
*
* Thread-safe: Uses ConcurrentHashMap for player metrics cache.
*/
-class MetricsCacheStore {
+public class MetricsCacheStore {
private static final long AUTO_SAVE_INTERVAL_TICKS = 20 * 60 * 5; // 5 minutes
@@ -31,14 +31,14 @@ class MetricsCacheStore {
private BukkitRunnable autoSaveTask;
- MetricsCacheStore(@NotNull Plugin plugin, @NotNull StatsRepository repository) {
+ public MetricsCacheStore(@NotNull Plugin plugin, @NotNull StatsRepository repository) {
this.plugin = plugin;
this.repository = repository;
this.metricsCache = new ConcurrentHashMap<>();
}
@NotNull
- PlayerMetrics getOrCreate(@NotNull UUID playerUuid) {
+ public PlayerMetrics getOrCreate(@NotNull UUID playerUuid) {
return metricsCache.computeIfAbsent(playerUuid, this::loadOrCreate);
}
@@ -50,33 +50,33 @@ class MetricsCacheStore {
return new PlayerMetrics(playerUuid);
}
- void save(@NotNull UUID playerUuid) {
+ public void save(@NotNull UUID playerUuid) {
PlayerMetrics metrics = metricsCache.get(playerUuid);
if (metrics != null) {
repository.saveMetrics(metrics);
}
}
- void save(@NotNull PlayerMetrics metrics) {
+ public void save(@NotNull PlayerMetrics metrics) {
repository.saveMetrics(metrics);
}
- void saveAll() {
+ public void saveAll() {
for (PlayerMetrics metrics : metricsCache.values()) {
repository.saveMetrics(metrics);
}
}
- void unload(@NotNull UUID playerUuid) {
+ public void unload(@NotNull UUID playerUuid) {
save(playerUuid);
metricsCache.remove(playerUuid);
}
- int size() {
+ public int size() {
return metricsCache.size();
}
- void startAutoSave() {
+ public void startAutoSave() {
if (autoSaveTask != null) {
autoSaveTask.cancel();
}
@@ -91,7 +91,7 @@ class MetricsCacheStore {
autoSaveTask.runTaskTimerAsynchronously(plugin, AUTO_SAVE_INTERVAL_TICKS, AUTO_SAVE_INTERVAL_TICKS);
}
- void stopAutoSave() {
+ public void stopAutoSave() {
if (autoSaveTask != null) {
autoSaveTask.cancel();
autoSaveTask = null;
diff --git a/src/main/java/dev/loki/loparkour/adaptive/core/DifficultyWeights.java b/src/main/java/dev/loki/loparkour/adaptive/core/model/DifficultyWeights.java
similarity index 91%
rename from src/main/java/dev/loki/loparkour/adaptive/core/DifficultyWeights.java
rename to src/main/java/dev/loki/loparkour/adaptive/core/model/DifficultyWeights.java
index 5cfbe46..c9560e9 100644
--- a/src/main/java/dev/loki/loparkour/adaptive/core/DifficultyWeights.java
+++ b/src/main/java/dev/loki/loparkour/adaptive/core/model/DifficultyWeights.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.adaptive.core;
+package dev.loki.loparkour.adaptive.core.model;
/**
* Calculates weight distributions for different difficulty levels.
@@ -6,7 +6,7 @@ package dev.loki.loparkour.adaptive.core;
*
* Thread-safe: Stateless, all methods are pure functions.
*/
-class DifficultyWeights {
+public class DifficultyWeights {
private DifficultyWeights() {
}
@@ -17,7 +17,7 @@ class DifficultyWeights {
* @param difficulty Target difficulty (0.0-1.0)
* @return Array of weights [dist1, dist2, dist3, dist4]
*/
- static double[] calculateDistanceWeights(double difficulty) {
+ public static double[] calculateDistanceWeights(double difficulty) {
double[] weights = new double[4];
if (difficulty < 0.3) {
@@ -55,7 +55,7 @@ class DifficultyWeights {
* @param difficulty Target difficulty (0.0-1.0)
* @return Array of weights [-1, 0, 1, 2]
*/
- static double[] calculateHeightWeights(double difficulty) {
+ public static double[] calculateHeightWeights(double difficulty) {
double[] weights = new double[4];
if (difficulty < 0.3) {
@@ -93,7 +93,7 @@ class DifficultyWeights {
* @param difficulty Target difficulty (0.0-1.0)
* @return Special block percentage (5.0-30.0)
*/
- static double calculateSpecialFrequency(double difficulty) {
+ public static double calculateSpecialFrequency(double difficulty) {
double minFrequency = 5.0;
double maxFrequency = 30.0;
return minFrequency + (maxFrequency - minFrequency) * difficulty;
diff --git a/src/main/java/dev/loki/loparkour/api/core/ParkourAPI.java b/src/main/java/dev/loki/loparkour/api/core/ParkourAPI.java
index 9827287..46d3a5b 100644
--- a/src/main/java/dev/loki/loparkour/api/core/ParkourAPI.java
+++ b/src/main/java/dev/loki/loparkour/api/core/ParkourAPI.java
@@ -1,6 +1,6 @@
package dev.loki.loparkour.api.core;
-import dev.loki.loparkour.api.event.ParkourBlockGenerateEvent;
+import dev.loki.loparkour.api.event.generation.ParkourBlockGenerateEvent;
import dev.loki.loparkour.player.core.ParkourPlayer;
import dev.loki.loparkour.player.core.ParkourUser;
import org.bukkit.entity.Player;
diff --git a/src/main/java/dev/loki/loparkour/api/event/ParkourBlockGenerateEvent.java b/src/main/java/dev/loki/loparkour/api/event/generation/ParkourBlockGenerateEvent.java
similarity index 95%
rename from src/main/java/dev/loki/loparkour/api/event/ParkourBlockGenerateEvent.java
rename to src/main/java/dev/loki/loparkour/api/event/generation/ParkourBlockGenerateEvent.java
index 482a370..9f2519c 100644
--- a/src/main/java/dev/loki/loparkour/api/event/ParkourBlockGenerateEvent.java
+++ b/src/main/java/dev/loki/loparkour/api/event/generation/ParkourBlockGenerateEvent.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.api.event;
+package dev.loki.loparkour.api.event.generation;
import dev.loki.loparkour.generator.core.coordinator.ParkourGenerator;
import dev.loki.loparkour.player.core.ParkourPlayer;
diff --git a/src/main/java/dev/loki/loparkour/api/event/ParkourSchematicGenerateEvent.java b/src/main/java/dev/loki/loparkour/api/event/generation/ParkourSchematicGenerateEvent.java
similarity index 95%
rename from src/main/java/dev/loki/loparkour/api/event/ParkourSchematicGenerateEvent.java
rename to src/main/java/dev/loki/loparkour/api/event/generation/ParkourSchematicGenerateEvent.java
index 8fcad78..8a95eb0 100644
--- a/src/main/java/dev/loki/loparkour/api/event/ParkourSchematicGenerateEvent.java
+++ b/src/main/java/dev/loki/loparkour/api/event/generation/ParkourSchematicGenerateEvent.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.api.event;
+package dev.loki.loparkour.api.event.generation;
import dev.loki.loparkour.generator.core.coordinator.ParkourGenerator;
import dev.loki.loparkour.player.core.ParkourPlayer;
diff --git a/src/main/java/dev/loki/loparkour/api/event/ParkourFallEvent.java b/src/main/java/dev/loki/loparkour/api/event/score/ParkourFallEvent.java
similarity index 94%
rename from src/main/java/dev/loki/loparkour/api/event/ParkourFallEvent.java
rename to src/main/java/dev/loki/loparkour/api/event/score/ParkourFallEvent.java
index 995dccb..15e99a4 100644
--- a/src/main/java/dev/loki/loparkour/api/event/ParkourFallEvent.java
+++ b/src/main/java/dev/loki/loparkour/api/event/score/ParkourFallEvent.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.api.event;
+package dev.loki.loparkour.api.event.score;
import dev.loki.loparkour.player.core.ParkourPlayer;
import org.bukkit.Bukkit;
diff --git a/src/main/java/dev/loki/loparkour/api/event/ParkourScoreEvent.java b/src/main/java/dev/loki/loparkour/api/event/score/ParkourScoreEvent.java
similarity index 94%
rename from src/main/java/dev/loki/loparkour/api/event/ParkourScoreEvent.java
rename to src/main/java/dev/loki/loparkour/api/event/score/ParkourScoreEvent.java
index aa43517..2571fc2 100644
--- a/src/main/java/dev/loki/loparkour/api/event/ParkourScoreEvent.java
+++ b/src/main/java/dev/loki/loparkour/api/event/score/ParkourScoreEvent.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.api.event;
+package dev.loki.loparkour.api.event.score;
import dev.loki.loparkour.player.core.ParkourPlayer;
import org.bukkit.Bukkit;
diff --git a/src/main/java/dev/loki/loparkour/api/event/ParkourJoinEvent.java b/src/main/java/dev/loki/loparkour/api/event/session/ParkourJoinEvent.java
similarity index 93%
rename from src/main/java/dev/loki/loparkour/api/event/ParkourJoinEvent.java
rename to src/main/java/dev/loki/loparkour/api/event/session/ParkourJoinEvent.java
index 322682c..0c666cc 100644
--- a/src/main/java/dev/loki/loparkour/api/event/ParkourJoinEvent.java
+++ b/src/main/java/dev/loki/loparkour/api/event/session/ParkourJoinEvent.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.api.event;
+package dev.loki.loparkour.api.event.session;
import dev.loki.loparkour.player.core.ParkourUser;
import org.bukkit.Bukkit;
diff --git a/src/main/java/dev/loki/loparkour/api/event/ParkourLeaveEvent.java b/src/main/java/dev/loki/loparkour/api/event/session/ParkourLeaveEvent.java
similarity index 93%
rename from src/main/java/dev/loki/loparkour/api/event/ParkourLeaveEvent.java
rename to src/main/java/dev/loki/loparkour/api/event/session/ParkourLeaveEvent.java
index 708f473..b8462d6 100644
--- a/src/main/java/dev/loki/loparkour/api/event/ParkourLeaveEvent.java
+++ b/src/main/java/dev/loki/loparkour/api/event/session/ParkourLeaveEvent.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.api.event;
+package dev.loki.loparkour.api.event.session;
import dev.loki.loparkour.player.core.ParkourUser;
import org.bukkit.Bukkit;
diff --git a/src/main/java/dev/loki/loparkour/api/event/ParkourSpectateEvent.java b/src/main/java/dev/loki/loparkour/api/event/session/ParkourSpectateEvent.java
similarity index 94%
rename from src/main/java/dev/loki/loparkour/api/event/ParkourSpectateEvent.java
rename to src/main/java/dev/loki/loparkour/api/event/session/ParkourSpectateEvent.java
index 4b06c47..1707a6a 100644
--- a/src/main/java/dev/loki/loparkour/api/event/ParkourSpectateEvent.java
+++ b/src/main/java/dev/loki/loparkour/api/event/session/ParkourSpectateEvent.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.api.event;
+package dev.loki.loparkour.api.event.session;
import dev.loki.loparkour.player.spectator.ParkourSpectator;
import org.bukkit.Bukkit;
diff --git a/src/main/java/dev/loki/loparkour/command/admin/AdminCommandHandler.java b/src/main/java/dev/loki/loparkour/command/admin/AdminCommandHandler.java
index 6165a04..23d29c0 100644
--- a/src/main/java/dev/loki/loparkour/command/admin/AdminCommandHandler.java
+++ b/src/main/java/dev/loki/loparkour/command/admin/AdminCommandHandler.java
@@ -2,10 +2,14 @@ package dev.loki.loparkour.command.admin;
import dev.loki.loparkour.command.player.PlayerCommandHandler;
import dev.loki.loparkour.command.schematic.SchematicCommandHandler;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
+import dev.loki.loparkour.command.admin.ops.ForceJoinExecutor;
+import dev.loki.loparkour.command.admin.ops.ForceLeaveExecutor;
+import dev.loki.loparkour.command.admin.ops.RecoverInventoryExecutor;
+import dev.loki.loparkour.command.admin.ops.ResetExecutor;
import org.jetbrains.annotations.Nullable;
/**
diff --git a/src/main/java/dev/loki/loparkour/command/admin/ForceJoinExecutor.java b/src/main/java/dev/loki/loparkour/command/admin/ops/ForceJoinExecutor.java
similarity index 83%
rename from src/main/java/dev/loki/loparkour/command/admin/ForceJoinExecutor.java
rename to src/main/java/dev/loki/loparkour/command/admin/ops/ForceJoinExecutor.java
index 15073c8..010e5f3 100644
--- a/src/main/java/dev/loki/loparkour/command/admin/ForceJoinExecutor.java
+++ b/src/main/java/dev/loki/loparkour/command/admin/ops/ForceJoinExecutor.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.command.admin;
+package dev.loki.loparkour.command.admin.ops;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.command.player.PlayerCommandHandler;
@@ -6,17 +6,19 @@ import dev.loki.loparkour.config.locale.Locales;
import dev.loki.loparkour.mode.base.Modes;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
+import dev.loki.loparkour.command.admin.support.AdminResponses;
+import dev.loki.loparkour.command.admin.support.AdminTargetResolver;
import org.bukkit.entity.Player;
-final class ForceJoinExecutor {
+public final class ForceJoinExecutor {
private final PlayerCommandHandler base;
- ForceJoinExecutor(PlayerCommandHandler base) {
+ public ForceJoinExecutor(PlayerCommandHandler base) {
this.base = base;
}
- void execute(String target, CommandSender sender) {
+ public void execute(String target, CommandSender sender) {
if (!base.cooldown(sender, "forcejoin", 2500, Locales.getString(sender, "admin.cooldown"))) {
return;
}
diff --git a/src/main/java/dev/loki/loparkour/command/admin/ForceLeaveExecutor.java b/src/main/java/dev/loki/loparkour/command/admin/ops/ForceLeaveExecutor.java
similarity index 84%
rename from src/main/java/dev/loki/loparkour/command/admin/ForceLeaveExecutor.java
rename to src/main/java/dev/loki/loparkour/command/admin/ops/ForceLeaveExecutor.java
index 55b153d..c2660b2 100644
--- a/src/main/java/dev/loki/loparkour/command/admin/ForceLeaveExecutor.java
+++ b/src/main/java/dev/loki/loparkour/command/admin/ops/ForceLeaveExecutor.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.command.admin;
+package dev.loki.loparkour.command.admin.ops;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.command.player.PlayerCommandHandler;
@@ -7,17 +7,18 @@ import dev.loki.loparkour.player.core.ParkourPlayer;
import dev.loki.loparkour.player.core.ParkourUser;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
+import dev.loki.loparkour.command.admin.support.AdminResponses;
import org.bukkit.entity.Player;
-final class ForceLeaveExecutor {
+public final class ForceLeaveExecutor {
private final PlayerCommandHandler base;
- ForceLeaveExecutor(PlayerCommandHandler base) {
+ public ForceLeaveExecutor(PlayerCommandHandler base) {
this.base = base;
}
- void execute(String target, CommandSender sender) {
+ public void execute(String target, CommandSender sender) {
if (!base.cooldown(sender, "forceleave", 2500, Locales.getString(sender, "admin.cooldown"))) {
return;
}
diff --git a/src/main/java/dev/loki/loparkour/command/admin/RecoverInventoryExecutor.java b/src/main/java/dev/loki/loparkour/command/admin/ops/RecoverInventoryExecutor.java
similarity index 82%
rename from src/main/java/dev/loki/loparkour/command/admin/RecoverInventoryExecutor.java
rename to src/main/java/dev/loki/loparkour/command/admin/ops/RecoverInventoryExecutor.java
index 895069d..232334a 100644
--- a/src/main/java/dev/loki/loparkour/command/admin/RecoverInventoryExecutor.java
+++ b/src/main/java/dev/loki/loparkour/command/admin/ops/RecoverInventoryExecutor.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.command.admin;
+package dev.loki.loparkour.command.admin.ops;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.command.player.PlayerCommandHandler;
@@ -6,17 +6,18 @@ import dev.loki.loparkour.config.locale.Locales;
import dev.loki.loparkour.player.data.InventoryData;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
+import dev.loki.loparkour.command.admin.support.AdminResponses;
import org.bukkit.entity.Player;
-final class RecoverInventoryExecutor {
+public final class RecoverInventoryExecutor {
private final PlayerCommandHandler base;
- RecoverInventoryExecutor(PlayerCommandHandler base) {
+ public RecoverInventoryExecutor(PlayerCommandHandler base) {
this.base = base;
}
- void execute(String target, CommandSender sender) {
+ public void execute(String target, CommandSender sender) {
if (!base.cooldown(sender, "recoverinventory", 2500, Locales.getString(sender, "admin.cooldown"))) {
return;
}
diff --git a/src/main/java/dev/loki/loparkour/command/admin/ResetExecutor.java b/src/main/java/dev/loki/loparkour/command/admin/ops/ResetExecutor.java
similarity index 83%
rename from src/main/java/dev/loki/loparkour/command/admin/ResetExecutor.java
rename to src/main/java/dev/loki/loparkour/command/admin/ops/ResetExecutor.java
index 63344b5..edf966b 100644
--- a/src/main/java/dev/loki/loparkour/command/admin/ResetExecutor.java
+++ b/src/main/java/dev/loki/loparkour/command/admin/ops/ResetExecutor.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.command.admin;
+package dev.loki.loparkour.command.admin.ops;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.api.core.Registry;
@@ -9,17 +9,19 @@ import dev.loki.loparkour.mode.base.Mode;
import org.bukkit.command.CommandSender;
import java.util.UUID;
+import dev.loki.loparkour.command.admin.support.AdminResponses;
+import dev.loki.loparkour.command.admin.support.AdminTargetResolver;
import java.util.function.Consumer;
-final class ResetExecutor {
+public final class ResetExecutor {
private final PlayerCommandHandler base;
- ResetExecutor(PlayerCommandHandler base) {
+ public ResetExecutor(PlayerCommandHandler base) {
this.base = base;
}
- void execute(String target, CommandSender sender) {
+ public void execute(String target, CommandSender sender) {
if (!base.cooldown(sender, "reset", 2500, Locales.getString(sender, "admin.cooldown"))) {
return;
}
diff --git a/src/main/java/dev/loki/loparkour/command/admin/AdminResponses.java b/src/main/java/dev/loki/loparkour/command/admin/support/AdminResponses.java
similarity index 55%
rename from src/main/java/dev/loki/loparkour/command/admin/AdminResponses.java
rename to src/main/java/dev/loki/loparkour/command/admin/support/AdminResponses.java
index eaf64be..2cdeecb 100644
--- a/src/main/java/dev/loki/loparkour/command/admin/AdminResponses.java
+++ b/src/main/java/dev/loki/loparkour/command/admin/support/AdminResponses.java
@@ -1,14 +1,14 @@
-package dev.loki.loparkour.command.admin;
+package dev.loki.loparkour.command.admin.support;
import dev.loki.loparkour.util.text.ColorUtil;
import org.bukkit.command.CommandSender;
-final class AdminResponses {
+public final class AdminResponses {
private AdminResponses() {
}
- static void send(CommandSender sender, String msg) {
+ public static void send(CommandSender sender, String msg) {
sender.sendMessage(ColorUtil.color(msg));
}
}
diff --git a/src/main/java/dev/loki/loparkour/command/admin/AdminTargetResolver.java b/src/main/java/dev/loki/loparkour/command/admin/support/AdminTargetResolver.java
similarity index 85%
rename from src/main/java/dev/loki/loparkour/command/admin/AdminTargetResolver.java
rename to src/main/java/dev/loki/loparkour/command/admin/support/AdminTargetResolver.java
index a24a5ae..21f3bf3 100644
--- a/src/main/java/dev/loki/loparkour/command/admin/AdminTargetResolver.java
+++ b/src/main/java/dev/loki/loparkour/command/admin/support/AdminTargetResolver.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.command.admin;
+package dev.loki.loparkour.command.admin.support;
import org.bukkit.command.BlockCommandSender;
import org.bukkit.Bukkit;
@@ -9,12 +9,12 @@ import org.bukkit.entity.Player;
import java.util.UUID;
-final class AdminTargetResolver {
+public final class AdminTargetResolver {
private AdminTargetResolver() {
}
- static Player findNearest(CommandSender sender) {
+ public static Player findNearest(CommandSender sender) {
Location from = sender instanceof Player p ? p.getLocation()
: sender instanceof BlockCommandSender b ? b.getBlock().getLocation()
: null;
@@ -28,7 +28,7 @@ final class AdminTargetResolver {
}
@SuppressWarnings("deprecation")
- static UUID resolveUUID(String input) {
+ public static UUID resolveUUID(String input) {
Player online = Bukkit.getPlayerExact(input);
if (online != null) {
return online.getUniqueId();
@@ -50,7 +50,7 @@ final class AdminTargetResolver {
}
}
- static String resolvePlayerName(String input, UUID uuid) {
+ public static String resolvePlayerName(String input, UUID uuid) {
Player online = Bukkit.getPlayerExact(input);
if (online != null) {
return online.getName();
diff --git a/src/main/java/dev/loki/loparkour/command/core/CommandRouter.java b/src/main/java/dev/loki/loparkour/command/core/CommandRouter.java
index aae2ee1..a3f06cd 100644
--- a/src/main/java/dev/loki/loparkour/command/core/CommandRouter.java
+++ b/src/main/java/dev/loki/loparkour/command/core/CommandRouter.java
@@ -7,7 +7,7 @@ import dev.loki.loparkour.command.player.PlayerCommandHandler;
import dev.loki.loparkour.command.schematic.SchematicCommandHandler;
import dev.loki.loparkour.command.util.CommandUtil;
import dev.loki.loparkour.config.locale.Locales;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/dev/loki/loparkour/command/core/CommandTabCompleter.java b/src/main/java/dev/loki/loparkour/command/core/CommandTabCompleter.java
index 7ffdefa..3be48b7 100644
--- a/src/main/java/dev/loki/loparkour/command/core/CommandTabCompleter.java
+++ b/src/main/java/dev/loki/loparkour/command/core/CommandTabCompleter.java
@@ -2,7 +2,7 @@ package dev.loki.loparkour.command.core;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.api.core.Registry;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import dev.loki.loparkour.player.core.ParkourPlayer;
import dev.loki.loparkour.schematic.core.SchematicManager;
import org.bukkit.Bukkit;
diff --git a/src/main/java/dev/loki/loparkour/command/player/JoinCommandExecutor.java b/src/main/java/dev/loki/loparkour/command/player/JoinCommandExecutor.java
index 182a3eb..75929c9 100644
--- a/src/main/java/dev/loki/loparkour/command/player/JoinCommandExecutor.java
+++ b/src/main/java/dev/loki/loparkour/command/player/JoinCommandExecutor.java
@@ -4,7 +4,7 @@ import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.api.core.Registry;
import dev.loki.loparkour.command.util.CommandUtil;
import dev.loki.loparkour.config.locale.Locales;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import dev.loki.loparkour.mode.base.Mode;
import dev.loki.loparkour.mode.base.Modes;
import dev.loki.loparkour.mode.base.MultiMode;
diff --git a/src/main/java/dev/loki/loparkour/command/player/LeaderboardCommandExecutor.java b/src/main/java/dev/loki/loparkour/command/player/LeaderboardCommandExecutor.java
index dc33254..f6f5883 100644
--- a/src/main/java/dev/loki/loparkour/command/player/LeaderboardCommandExecutor.java
+++ b/src/main/java/dev/loki/loparkour/command/player/LeaderboardCommandExecutor.java
@@ -5,7 +5,7 @@ import dev.loki.loparkour.command.util.CommandUtil;
import dev.loki.loparkour.config.locale.Locales;
import dev.loki.loparkour.leaderboard.core.Leaderboard;
import dev.loki.loparkour.menu.core.Menus;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import dev.loki.loparkour.mode.base.Mode;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
diff --git a/src/main/java/dev/loki/loparkour/command/player/PlayerCommandHandler.java b/src/main/java/dev/loki/loparkour/command/player/PlayerCommandHandler.java
index dde958d..70445bb 100644
--- a/src/main/java/dev/loki/loparkour/command/player/PlayerCommandHandler.java
+++ b/src/main/java/dev/loki/loparkour/command/player/PlayerCommandHandler.java
@@ -5,7 +5,7 @@ import dev.loki.loparkour.command.schematic.SchematicCommandHandler;
import dev.loki.loparkour.config.core.Config;
import dev.loki.loparkour.config.locale.Locales;
import dev.loki.loparkour.menu.core.Menus;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import dev.loki.loparkour.mode.base.Modes;
import dev.loki.loparkour.player.core.ParkourUser;
import dev.loki.loparkour.util.text.ColorUtil;
diff --git a/src/main/java/dev/loki/loparkour/command/schematic/SchematicWand.java b/src/main/java/dev/loki/loparkour/command/schematic/SchematicWand.java
index 8c0abea..783b1fa 100644
--- a/src/main/java/dev/loki/loparkour/command/schematic/SchematicWand.java
+++ b/src/main/java/dev/loki/loparkour/command/schematic/SchematicWand.java
@@ -2,7 +2,7 @@ package dev.loki.loparkour.command.schematic;
import dev.loki.loparkour.config.locale.Locales;
import dev.loki.loparkour.config.options.Option;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.bukkit.inventory.ItemStack;
diff --git a/src/main/java/dev/loki/loparkour/config/core/ConfigLoader.java b/src/main/java/dev/loki/loparkour/config/core/ConfigLoader.java
index c7840f9..c8c4f45 100644
--- a/src/main/java/dev/loki/loparkour/config/core/ConfigLoader.java
+++ b/src/main/java/dev/loki/loparkour/config/core/ConfigLoader.java
@@ -10,6 +10,7 @@ import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.util.List;
+import dev.loki.loparkour.config.core.merge.ConfigUpdater;
import java.util.logging.Logger;
/**
diff --git a/src/main/java/dev/loki/loparkour/config/core/ConfigMergeParser.java b/src/main/java/dev/loki/loparkour/config/core/merge/ConfigMergeParser.java
similarity index 78%
rename from src/main/java/dev/loki/loparkour/config/core/ConfigMergeParser.java
rename to src/main/java/dev/loki/loparkour/config/core/merge/ConfigMergeParser.java
index ec1c5e4..a295875 100644
--- a/src/main/java/dev/loki/loparkour/config/core/ConfigMergeParser.java
+++ b/src/main/java/dev/loki/loparkour/config/core/merge/ConfigMergeParser.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.config.core;
+package dev.loki.loparkour.config.core.merge;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -19,22 +19,22 @@ import java.util.Map;
* Reads YAML as raw lines and extracts the full path of each scalar value
* (e.g. "sql.enabled") so that user values can be matched against the template.
*/
-final class ConfigMergeParser {
+public final class ConfigMergeParser {
@NotNull
- List readLines(@NotNull InputStream is) throws IOException {
+ public List readLines(@NotNull InputStream is) throws IOException {
try (var r = new BufferedReader(new InputStreamReader(is))) {
return r.lines().toList();
}
}
@NotNull
- List readLines(@NotNull File file) throws IOException {
+ public List readLines(@NotNull File file) throws IOException {
return Files.readAllLines(file.toPath());
}
@NotNull
- Map extractFullPathValues(@NotNull List lines) {
+ public Map extractFullPathValues(@NotNull List lines) {
Map values = new LinkedHashMap<>();
Deque stack = new ArrayDeque<>();
int prevIndent = -1;
@@ -57,7 +57,7 @@ final class ConfigMergeParser {
}
@Nullable
- static LineTokens parseLine(@NotNull String line) {
+ public static LineTokens parseLine(@NotNull String line) {
if (isSkippable(line)) {
return null;
}
@@ -80,7 +80,7 @@ final class ConfigMergeParser {
return after.isEmpty() || after.startsWith("#");
}
- static int popToLevel(@NotNull Deque stack, int indent, int prevIndent) {
+ public static int popToLevel(@NotNull Deque stack, int indent, int prevIndent) {
while (prevIndent >= 0 && indent <= prevIndent) {
if (!stack.isEmpty()) {
stack.pop();
@@ -91,11 +91,11 @@ final class ConfigMergeParser {
}
@NotNull
- static String resolvePath(@NotNull Deque stack, @NotNull String leaf) {
+ public static String resolvePath(@NotNull Deque stack, @NotNull String leaf) {
return stack.isEmpty() ? leaf : String.join(".", stack) + "." + leaf;
}
- static int indentOf(@NotNull String line) {
+ public static int indentOf(@NotNull String line) {
int i = 0;
while (i < line.length() && line.charAt(i) == ' ') {
i++;
@@ -103,6 +103,6 @@ final class ConfigMergeParser {
return i;
}
- record LineTokens(String leaf, String after, int indent, boolean isSection) {
+ public record LineTokens(String leaf, String after, int indent, boolean isSection) {
}
}
\ No newline at end of file
diff --git a/src/main/java/dev/loki/loparkour/config/core/ConfigMergeProcessor.java b/src/main/java/dev/loki/loparkour/config/core/merge/ConfigMergeProcessor.java
similarity index 97%
rename from src/main/java/dev/loki/loparkour/config/core/ConfigMergeProcessor.java
rename to src/main/java/dev/loki/loparkour/config/core/merge/ConfigMergeProcessor.java
index b701699..663277e 100644
--- a/src/main/java/dev/loki/loparkour/config/core/ConfigMergeProcessor.java
+++ b/src/main/java/dev/loki/loparkour/config/core/merge/ConfigMergeProcessor.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.config.core;
+package dev.loki.loparkour.config.core.merge;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -18,7 +18,7 @@ import java.util.Set;
* Builds the merged file by walking the template and substituting any scalar
* value that the user has already customized, preserving comments and sections.
*/
-final class ConfigMergeProcessor {
+public final class ConfigMergeProcessor {
private final ConfigMergeParser parser = new ConfigMergeParser();
diff --git a/src/main/java/dev/loki/loparkour/config/core/ConfigUpdater.java b/src/main/java/dev/loki/loparkour/config/core/merge/ConfigUpdater.java
similarity index 98%
rename from src/main/java/dev/loki/loparkour/config/core/ConfigUpdater.java
rename to src/main/java/dev/loki/loparkour/config/core/merge/ConfigUpdater.java
index 1a28fca..91f4d3f 100644
--- a/src/main/java/dev/loki/loparkour/config/core/ConfigUpdater.java
+++ b/src/main/java/dev/loki/loparkour/config/core/merge/ConfigUpdater.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.config.core;
+package dev.loki.loparkour.config.core.merge;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/dev/loki/loparkour/config/locale/Locales.java b/src/main/java/dev/loki/loparkour/config/locale/Locales.java
index 550100d..fcd317d 100644
--- a/src/main/java/dev/loki/loparkour/config/locale/Locales.java
+++ b/src/main/java/dev/loki/loparkour/config/locale/Locales.java
@@ -2,7 +2,7 @@ package dev.loki.loparkour.config.locale;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.config.options.Option;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import dev.loki.loparkour.player.core.ParkourUser;
import dev.loki.loparkour.util.text.ColorUtil;
import dev.loki.loparkour.util.item.Item;
diff --git a/src/main/java/dev/loki/loparkour/config/options/Option.java b/src/main/java/dev/loki/loparkour/config/options/Option.java
index 2a65fab..ce94ad0 100644
--- a/src/main/java/dev/loki/loparkour/config/options/Option.java
+++ b/src/main/java/dev/loki/loparkour/config/options/Option.java
@@ -2,7 +2,7 @@ package dev.loki.loparkour.config.options;
import dev.loki.loparkour.api.core.Registry;
import dev.loki.loparkour.config.core.Config;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import dev.loki.loparkour.style.core.RandomStyle;
import dev.loki.loparkour.style.core.Style;
import dev.loki.loparkour.util.particle.ParticleData;
@@ -16,6 +16,10 @@ import org.bukkit.configuration.file.FileConfiguration;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import dev.loki.loparkour.config.options.section.OptionGeneration;
+import dev.loki.loparkour.config.options.section.OptionParticles;
+import dev.loki.loparkour.config.options.section.OptionSQL;
+import dev.loki.loparkour.config.options.section.OptionStyles;
import java.util.function.BiFunction;
/**
diff --git a/src/main/java/dev/loki/loparkour/config/options/OptionGeneral.java b/src/main/java/dev/loki/loparkour/config/options/OptionGeneral.java
index fbd8341..466d087 100644
--- a/src/main/java/dev/loki/loparkour/config/options/OptionGeneral.java
+++ b/src/main/java/dev/loki/loparkour/config/options/OptionGeneral.java
@@ -2,7 +2,7 @@ package dev.loki.loparkour.config.options;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.config.core.Config;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
diff --git a/src/main/java/dev/loki/loparkour/config/options/OptionGeneration.java b/src/main/java/dev/loki/loparkour/config/options/section/OptionGeneration.java
similarity index 99%
rename from src/main/java/dev/loki/loparkour/config/options/OptionGeneration.java
rename to src/main/java/dev/loki/loparkour/config/options/section/OptionGeneration.java
index f07eaf3..807c709 100644
--- a/src/main/java/dev/loki/loparkour/config/options/OptionGeneration.java
+++ b/src/main/java/dev/loki/loparkour/config/options/section/OptionGeneration.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.config.options;
+package dev.loki.loparkour.config.options.section;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.config.core.Config;
diff --git a/src/main/java/dev/loki/loparkour/config/options/OptionParticles.java b/src/main/java/dev/loki/loparkour/config/options/section/OptionParticles.java
similarity index 96%
rename from src/main/java/dev/loki/loparkour/config/options/OptionParticles.java
rename to src/main/java/dev/loki/loparkour/config/options/section/OptionParticles.java
index eb94847..1741f67 100644
--- a/src/main/java/dev/loki/loparkour/config/options/OptionParticles.java
+++ b/src/main/java/dev/loki/loparkour/config/options/section/OptionParticles.java
@@ -1,7 +1,8 @@
-package dev.loki.loparkour.config.options;
+package dev.loki.loparkour.config.options.section;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.config.core.Config;
+import dev.loki.loparkour.config.options.Option;
import dev.loki.loparkour.util.particle.ParticleData;
import org.bukkit.Particle;
import org.bukkit.Sound;
diff --git a/src/main/java/dev/loki/loparkour/config/options/OptionSQL.java b/src/main/java/dev/loki/loparkour/config/options/section/OptionSQL.java
similarity index 95%
rename from src/main/java/dev/loki/loparkour/config/options/OptionSQL.java
rename to src/main/java/dev/loki/loparkour/config/options/section/OptionSQL.java
index 03873e6..4e55d3f 100644
--- a/src/main/java/dev/loki/loparkour/config/options/OptionSQL.java
+++ b/src/main/java/dev/loki/loparkour/config/options/section/OptionSQL.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.config.options;
+package dev.loki.loparkour.config.options.section;
import dev.loki.loparkour.config.core.Config;
diff --git a/src/main/java/dev/loki/loparkour/config/options/OptionStyles.java b/src/main/java/dev/loki/loparkour/config/options/section/OptionStyles.java
similarity index 96%
rename from src/main/java/dev/loki/loparkour/config/options/OptionStyles.java
rename to src/main/java/dev/loki/loparkour/config/options/section/OptionStyles.java
index 70eab46..c2c494b 100644
--- a/src/main/java/dev/loki/loparkour/config/options/OptionStyles.java
+++ b/src/main/java/dev/loki/loparkour/config/options/section/OptionStyles.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.config.options;
+package dev.loki.loparkour.config.options.section;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.config.core.ConfigAccessor;
diff --git a/src/main/java/dev/loki/loparkour/generator/jump/placement/SchematicBlockPlacer.java b/src/main/java/dev/loki/loparkour/generator/jump/placement/SchematicBlockPlacer.java
index 6d71f77..d05d896 100644
--- a/src/main/java/dev/loki/loparkour/generator/jump/placement/SchematicBlockPlacer.java
+++ b/src/main/java/dev/loki/loparkour/generator/jump/placement/SchematicBlockPlacer.java
@@ -1,7 +1,7 @@
package dev.loki.loparkour.generator.jump.placement;
import dev.loki.loparkour.LoParkour;
-import dev.loki.loparkour.api.event.ParkourSchematicGenerateEvent;
+import dev.loki.loparkour.api.event.generation.ParkourSchematicGenerateEvent;
import dev.loki.loparkour.generator.core.coordinator.ParkourGenerator;
import dev.loki.loparkour.player.core.ParkourPlayer;
import dev.loki.loparkour.schematic.core.ParkourSchematic;
diff --git a/src/main/java/dev/loki/loparkour/generator/lifecycle/loop/LifecycleEventManager.java b/src/main/java/dev/loki/loparkour/generator/lifecycle/loop/LifecycleEventManager.java
index f1ae3db..180b6b4 100644
--- a/src/main/java/dev/loki/loparkour/generator/lifecycle/loop/LifecycleEventManager.java
+++ b/src/main/java/dev/loki/loparkour/generator/lifecycle/loop/LifecycleEventManager.java
@@ -1,7 +1,7 @@
package dev.loki.loparkour.generator.lifecycle.loop;
-import dev.loki.loparkour.api.event.ParkourFallEvent;
-import dev.loki.loparkour.api.event.ParkourScoreEvent;
+import dev.loki.loparkour.api.event.score.ParkourFallEvent;
+import dev.loki.loparkour.api.event.score.ParkourScoreEvent;
import dev.loki.loparkour.generator.core.coordinator.ParkourGenerator;
import dev.loki.loparkour.mode.base.Mode;
import dev.loki.loparkour.player.core.ParkourPlayer;
diff --git a/src/main/java/dev/loki/loparkour/listener/gameplay/ParkourRestrictionListener.java b/src/main/java/dev/loki/loparkour/listener/gameplay/ParkourRestrictionListener.java
index 6b66b40..08d0918 100644
--- a/src/main/java/dev/loki/loparkour/listener/gameplay/ParkourRestrictionListener.java
+++ b/src/main/java/dev/loki/loparkour/listener/gameplay/ParkourRestrictionListener.java
@@ -4,7 +4,7 @@ import dev.loki.loparkour.config.core.Config;
import dev.loki.loparkour.config.locale.Locales;
import dev.loki.loparkour.config.options.Option;
import dev.loki.loparkour.menu.core.Menus;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import dev.loki.loparkour.player.core.ParkourPlayer;
import dev.loki.loparkour.player.core.ParkourUser;
import dev.loki.loparkour.session.core.Session;
diff --git a/src/main/java/dev/loki/loparkour/listener/player/PlayerConnectionListener.java b/src/main/java/dev/loki/loparkour/listener/player/PlayerConnectionListener.java
index 786d387..6cb6f0d 100644
--- a/src/main/java/dev/loki/loparkour/listener/player/PlayerConnectionListener.java
+++ b/src/main/java/dev/loki/loparkour/listener/player/PlayerConnectionListener.java
@@ -1,7 +1,7 @@
package dev.loki.loparkour.listener.player;
import dev.loki.loparkour.config.core.Config;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import dev.loki.loparkour.mode.base.Modes;
import dev.loki.loparkour.player.core.ParkourUser;
import dev.loki.loparkour.world.core.World;
diff --git a/src/main/java/dev/loki/loparkour/menu/community/CommunityMenu.java b/src/main/java/dev/loki/loparkour/menu/community/CommunityMenu.java
index 13b5241..8111d5d 100644
--- a/src/main/java/dev/loki/loparkour/menu/community/CommunityMenu.java
+++ b/src/main/java/dev/loki/loparkour/menu/community/CommunityMenu.java
@@ -3,7 +3,7 @@ package dev.loki.loparkour.menu.community;
import dev.loki.loparkour.config.locale.Locales;
import dev.loki.loparkour.menu.core.LPMenu;
import dev.loki.loparkour.menu.core.Menus;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/dev/loki/loparkour/menu/community/LeaderboardsMenu.java b/src/main/java/dev/loki/loparkour/menu/community/LeaderboardsMenu.java
index 0acb688..9446d67 100644
--- a/src/main/java/dev/loki/loparkour/menu/community/LeaderboardsMenu.java
+++ b/src/main/java/dev/loki/loparkour/menu/community/LeaderboardsMenu.java
@@ -5,7 +5,7 @@ import dev.loki.loparkour.config.locale.Locales;
import dev.loki.loparkour.leaderboard.core.Leaderboard;
import dev.loki.loparkour.menu.core.LPMenu;
import dev.loki.loparkour.menu.core.Menus;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import dev.loki.loparkour.mode.base.Mode;
import dev.lolib.gui.InventoryGUI;
import org.bukkit.entity.Player;
diff --git a/src/main/java/dev/loki/loparkour/menu/community/SingleLeaderboardMenu.java b/src/main/java/dev/loki/loparkour/menu/community/SingleLeaderboardMenu.java
index 4c70424..54f16f7 100644
--- a/src/main/java/dev/loki/loparkour/menu/community/SingleLeaderboardMenu.java
+++ b/src/main/java/dev/loki/loparkour/menu/community/SingleLeaderboardMenu.java
@@ -4,7 +4,7 @@ import dev.loki.loparkour.config.locale.Locales;
import dev.loki.loparkour.leaderboard.core.Leaderboard;
import dev.loki.loparkour.leaderboard.model.Score;
import dev.loki.loparkour.menu.core.LPMenu;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import dev.loki.loparkour.mode.base.Mode;
import dev.loki.loparkour.player.core.ParkourUser;
import dev.lolib.gui.InventoryGUI;
diff --git a/src/main/java/dev/loki/loparkour/menu/core/LPMenu.java b/src/main/java/dev/loki/loparkour/menu/core/LPMenu.java
index af22a40..a6f1e40 100644
--- a/src/main/java/dev/loki/loparkour/menu/core/LPMenu.java
+++ b/src/main/java/dev/loki/loparkour/menu/core/LPMenu.java
@@ -8,6 +8,7 @@ import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/src/main/java/dev/loki/loparkour/menu/core/Menus.java b/src/main/java/dev/loki/loparkour/menu/core/Menus.java
index f261d3d..fc0ca47 100644
--- a/src/main/java/dev/loki/loparkour/menu/core/Menus.java
+++ b/src/main/java/dev/loki/loparkour/menu/core/Menus.java
@@ -10,6 +10,7 @@ import dev.loki.loparkour.menu.play.SingleMenu;
import dev.loki.loparkour.menu.play.SpectatorMenu;
import dev.loki.loparkour.menu.settings.LangMenu;
import dev.loki.loparkour.menu.settings.ParkourSettingsMenu;
+import dev.loki.loparkour.menu.core.screen.MainMenu;
import dev.loki.loparkour.menu.settings.SettingsMenu;
public final class Menus {
diff --git a/src/main/java/dev/loki/loparkour/menu/core/DynamicMenu.java b/src/main/java/dev/loki/loparkour/menu/core/screen/DynamicMenu.java
similarity index 95%
rename from src/main/java/dev/loki/loparkour/menu/core/DynamicMenu.java
rename to src/main/java/dev/loki/loparkour/menu/core/screen/DynamicMenu.java
index 86e4370..5e82849 100644
--- a/src/main/java/dev/loki/loparkour/menu/core/DynamicMenu.java
+++ b/src/main/java/dev/loki/loparkour/menu/core/screen/DynamicMenu.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.menu.core;
+package dev.loki.loparkour.menu.core.screen;
import dev.loki.loparkour.player.core.ParkourUser;
import org.bukkit.entity.Player;
@@ -33,7 +33,7 @@ public abstract class DynamicMenu {
/*
public void registerMainItem(
int row, int id,
- BiFunction<@NotNull Player, @Nullable ParkourUser, dev.loki.loparkour.util.gui.MenuItem> item,
+ BiFunction<@NotNull Player, @Nullable ParkourUser, dev.loki.loparkour.menu.gui.MenuItem> item,
Predicate shouldDisplay) {
if (id < 0 || row < 0 || row > 4) {
return;
@@ -82,7 +82,7 @@ public abstract class DynamicMenu {
*/
protected record ItemContainer(
int id,
- BiFunction<@NotNull Player, @Nullable ParkourUser, dev.loki.loparkour.util.gui.MenuItem> item,
+ BiFunction<@NotNull Player, @Nullable ParkourUser, dev.loki.loparkour.menu.gui.MenuItem> item,
Predicate predicate
) {}
}
diff --git a/src/main/java/dev/loki/loparkour/menu/core/MainMenu.java b/src/main/java/dev/loki/loparkour/menu/core/screen/MainMenu.java
similarity index 95%
rename from src/main/java/dev/loki/loparkour/menu/core/MainMenu.java
rename to src/main/java/dev/loki/loparkour/menu/core/screen/MainMenu.java
index e5e4d76..3c9caa0 100644
--- a/src/main/java/dev/loki/loparkour/menu/core/MainMenu.java
+++ b/src/main/java/dev/loki/loparkour/menu/core/screen/MainMenu.java
@@ -1,7 +1,9 @@
-package dev.loki.loparkour.menu.core;
+package dev.loki.loparkour.menu.core.screen;
import dev.loki.loparkour.config.core.Config;
import dev.loki.loparkour.config.locale.Locales;
+import dev.loki.loparkour.menu.core.LPMenu;
+import dev.loki.loparkour.menu.core.Menus;
import dev.loki.loparkour.player.core.ParkourUser;
import dev.lolib.gui.InventoryGUI;
import org.bukkit.entity.Player;
diff --git a/src/main/java/dev/loki/loparkour/menu/core/ParkourOption.java b/src/main/java/dev/loki/loparkour/menu/core/screen/ParkourOption.java
similarity index 98%
rename from src/main/java/dev/loki/loparkour/menu/core/ParkourOption.java
rename to src/main/java/dev/loki/loparkour/menu/core/screen/ParkourOption.java
index 6b0999c..e3c685a 100644
--- a/src/main/java/dev/loki/loparkour/menu/core/ParkourOption.java
+++ b/src/main/java/dev/loki/loparkour/menu/core/screen/ParkourOption.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.menu.core;
+package dev.loki.loparkour.menu.core.screen;
import dev.loki.loparkour.config.core.Config;
import dev.loki.loparkour.config.options.Option;
diff --git a/src/main/java/dev/loki/loparkour/util/gui/Menu.java b/src/main/java/dev/loki/loparkour/menu/gui/Menu.java
similarity index 94%
rename from src/main/java/dev/loki/loparkour/util/gui/Menu.java
rename to src/main/java/dev/loki/loparkour/menu/gui/Menu.java
index a442dbd..df26abc 100644
--- a/src/main/java/dev/loki/loparkour/util/gui/Menu.java
+++ b/src/main/java/dev/loki/loparkour/menu/gui/Menu.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.util.gui;
+package dev.loki.loparkour.menu.gui;
import dev.loki.loparkour.config.locale.Locales;
import dev.loki.loparkour.util.item.Item;
diff --git a/src/main/java/dev/loki/loparkour/util/gui/MenuItem.java b/src/main/java/dev/loki/loparkour/menu/gui/MenuItem.java
similarity index 90%
rename from src/main/java/dev/loki/loparkour/util/gui/MenuItem.java
rename to src/main/java/dev/loki/loparkour/menu/gui/MenuItem.java
index 4b9ff5a..42137d1 100644
--- a/src/main/java/dev/loki/loparkour/util/gui/MenuItem.java
+++ b/src/main/java/dev/loki/loparkour/menu/gui/MenuItem.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.util.gui;
+package dev.loki.loparkour.menu.gui;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/dev/loki/loparkour/util/gui/PagedMenu.java b/src/main/java/dev/loki/loparkour/menu/gui/PagedMenu.java
similarity index 96%
rename from src/main/java/dev/loki/loparkour/util/gui/PagedMenu.java
rename to src/main/java/dev/loki/loparkour/menu/gui/PagedMenu.java
index 726c641..326b3b5 100644
--- a/src/main/java/dev/loki/loparkour/util/gui/PagedMenu.java
+++ b/src/main/java/dev/loki/loparkour/menu/gui/PagedMenu.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.util.gui;
+package dev.loki.loparkour.menu.gui;
import dev.loki.loparkour.config.locale.Locales;
import dev.loki.loparkour.util.item.Item;
diff --git a/src/main/java/dev/loki/loparkour/util/gui/SliderItem.java b/src/main/java/dev/loki/loparkour/menu/gui/SliderItem.java
similarity index 91%
rename from src/main/java/dev/loki/loparkour/util/gui/SliderItem.java
rename to src/main/java/dev/loki/loparkour/menu/gui/SliderItem.java
index 6555837..0e409f3 100644
--- a/src/main/java/dev/loki/loparkour/util/gui/SliderItem.java
+++ b/src/main/java/dev/loki/loparkour/menu/gui/SliderItem.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.util.gui;
+package dev.loki.loparkour.menu.gui;
import dev.loki.loparkour.util.item.Item;
import org.bukkit.event.inventory.InventoryClickEvent;
diff --git a/src/main/java/dev/loki/loparkour/menu/lobby/LobbyMenu.java b/src/main/java/dev/loki/loparkour/menu/lobby/LobbyMenu.java
index 8c3d472..41179b6 100644
--- a/src/main/java/dev/loki/loparkour/menu/lobby/LobbyMenu.java
+++ b/src/main/java/dev/loki/loparkour/menu/lobby/LobbyMenu.java
@@ -3,7 +3,7 @@ package dev.loki.loparkour.menu.lobby;
import dev.loki.loparkour.config.locale.Locales;
import dev.loki.loparkour.menu.core.LPMenu;
import dev.loki.loparkour.menu.core.Menus;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import dev.loki.loparkour.player.core.ParkourUser;
import dev.loki.loparkour.session.core.Session;
import dev.loki.loparkour.util.text.ColorUtil;
diff --git a/src/main/java/dev/loki/loparkour/menu/play/PlayMenu.java b/src/main/java/dev/loki/loparkour/menu/play/PlayMenu.java
index c596626..139b46e 100644
--- a/src/main/java/dev/loki/loparkour/menu/play/PlayMenu.java
+++ b/src/main/java/dev/loki/loparkour/menu/play/PlayMenu.java
@@ -3,7 +3,7 @@ package dev.loki.loparkour.menu.play;
import dev.loki.loparkour.config.locale.Locales;
import dev.loki.loparkour.menu.core.LPMenu;
import dev.loki.loparkour.menu.core.Menus;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/dev/loki/loparkour/menu/settings/ParkourSettingsMenu.java b/src/main/java/dev/loki/loparkour/menu/settings/ParkourSettingsMenu.java
index bfcb9ab..911632d 100644
--- a/src/main/java/dev/loki/loparkour/menu/settings/ParkourSettingsMenu.java
+++ b/src/main/java/dev/loki/loparkour/menu/settings/ParkourSettingsMenu.java
@@ -5,7 +5,7 @@ import dev.loki.loparkour.config.core.Config;
import dev.loki.loparkour.config.locale.Locales;
import dev.loki.loparkour.menu.core.LPMenu;
import dev.loki.loparkour.menu.core.Menus;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import dev.loki.loparkour.player.core.ParkourPlayer;
import dev.loki.loparkour.style.core.Style;
import dev.loki.loparkour.util.text.ColorUtil;
diff --git a/src/main/java/dev/loki/loparkour/menu/settings/SettingsMenu.java b/src/main/java/dev/loki/loparkour/menu/settings/SettingsMenu.java
index 1a1a8fa..aebdd36 100644
--- a/src/main/java/dev/loki/loparkour/menu/settings/SettingsMenu.java
+++ b/src/main/java/dev/loki/loparkour/menu/settings/SettingsMenu.java
@@ -3,7 +3,7 @@ package dev.loki.loparkour.menu.settings;
import dev.loki.loparkour.config.locale.Locales;
import dev.loki.loparkour.menu.core.LPMenu;
import dev.loki.loparkour.menu.core.Menus;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import dev.loki.loparkour.player.core.ParkourPlayer;
import dev.loki.loparkour.player.core.ParkourUser;
import dev.lolib.gui.InventoryGUI;
diff --git a/src/main/java/dev/loki/loparkour/mode/impl/multi/SpectatorMode.java b/src/main/java/dev/loki/loparkour/mode/impl/multi/SpectatorMode.java
index ed2b78f..b93b7cd 100644
--- a/src/main/java/dev/loki/loparkour/mode/impl/multi/SpectatorMode.java
+++ b/src/main/java/dev/loki/loparkour/mode/impl/multi/SpectatorMode.java
@@ -5,7 +5,7 @@ import dev.loki.loparkour.mode.base.Mode;
import dev.loki.loparkour.config.locale.Locales;
import dev.loki.loparkour.leaderboard.core.Leaderboard;
import dev.loki.loparkour.menu.core.Menus;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import dev.loki.loparkour.player.spectator.ParkourSpectator;
import dev.loki.loparkour.player.core.ParkourUser;
import dev.loki.loparkour.session.core.Session;
diff --git a/src/main/java/dev/loki/loparkour/player/core/ParkourPlayer.java b/src/main/java/dev/loki/loparkour/player/core/ParkourPlayer.java
index 30083a9..eed720b 100644
--- a/src/main/java/dev/loki/loparkour/player/core/ParkourPlayer.java
+++ b/src/main/java/dev/loki/loparkour/player/core/ParkourPlayer.java
@@ -4,7 +4,7 @@ import com.google.gson.annotations.Expose;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.generator.core.coordinator.ParkourGenerator;
import dev.loki.loparkour.generator.core.model.Profile;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import dev.loki.loparkour.mode.base.MultiMode;
import dev.loki.loparkour.player.data.PreviousData;
import dev.loki.loparkour.player.service.PlayerSettingsManager;
diff --git a/src/main/java/dev/loki/loparkour/player/core/ParkourUser.java b/src/main/java/dev/loki/loparkour/player/core/ParkourUser.java
index 0576733..7d93205 100644
--- a/src/main/java/dev/loki/loparkour/player/core/ParkourUser.java
+++ b/src/main/java/dev/loki/loparkour/player/core/ParkourUser.java
@@ -1,12 +1,12 @@
package dev.loki.loparkour.player.core;
import dev.loki.loparkour.player.service.UserRegistry;
-import dev.loki.loparkour.player.service.ScoreboardManager;
+import dev.loki.loparkour.player.service.ui.ScoreboardManager;
import dev.loki.loparkour.config.locale.Locales;
import dev.loki.loparkour.config.options.Option;
import dev.loki.loparkour.generator.core.coordinator.ParkourGenerator;
import dev.loki.loparkour.hook.floodgate.FloodgateHook;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import dev.loki.loparkour.player.data.PreviousData;
import dev.loki.loparkour.session.core.Session;
import dev.loki.loparkour.util.text.ColorUtil;
diff --git a/src/main/java/dev/loki/loparkour/player/core/PlayerSpawnSetup.java b/src/main/java/dev/loki/loparkour/player/core/PlayerSpawnSetup.java
index 4fdbf65..b0e72fb 100644
--- a/src/main/java/dev/loki/loparkour/player/core/PlayerSpawnSetup.java
+++ b/src/main/java/dev/loki/loparkour/player/core/PlayerSpawnSetup.java
@@ -2,7 +2,7 @@ package dev.loki.loparkour.player.core;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.config.core.Config;
-import dev.loki.loparkour.player.service.ParkourHotbar;
+import dev.loki.loparkour.player.service.ui.ParkourHotbar;
import dev.lolib.scheduler.Scheduler;
import org.bukkit.GameMode;
import org.bukkit.Location;
diff --git a/src/main/java/dev/loki/loparkour/player/service/PlayerSettingsManager.java b/src/main/java/dev/loki/loparkour/player/service/PlayerSettingsManager.java
index 058b16e..f126ad8 100644
--- a/src/main/java/dev/loki/loparkour/player/service/PlayerSettingsManager.java
+++ b/src/main/java/dev/loki/loparkour/player/service/PlayerSettingsManager.java
@@ -2,7 +2,7 @@ package dev.loki.loparkour.player.service;
import dev.loki.loparkour.player.core.ParkourPlayer;
import dev.loki.loparkour.config.options.Option;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import java.util.ArrayList;
import java.util.Arrays;
diff --git a/src/main/java/dev/loki/loparkour/player/service/UserRegistry.java b/src/main/java/dev/loki/loparkour/player/service/UserRegistry.java
index 7524735..3a49e2e 100644
--- a/src/main/java/dev/loki/loparkour/player/service/UserRegistry.java
+++ b/src/main/java/dev/loki/loparkour/player/service/UserRegistry.java
@@ -2,8 +2,8 @@ package dev.loki.loparkour.player.service;
import dev.loki.loparkour.player.core.ParkourUser;
import dev.loki.loparkour.player.core.ParkourPlayer;
-import dev.loki.loparkour.api.event.ParkourJoinEvent;
-import dev.loki.loparkour.api.event.ParkourLeaveEvent;
+import dev.loki.loparkour.api.event.session.ParkourJoinEvent;
+import dev.loki.loparkour.api.event.session.ParkourLeaveEvent;
import dev.loki.loparkour.config.core.Config;
import dev.loki.loparkour.mode.base.Mode;
import dev.loki.loparkour.mode.base.Modes;
diff --git a/src/main/java/dev/loki/loparkour/player/service/ParkourHotbar.java b/src/main/java/dev/loki/loparkour/player/service/ui/ParkourHotbar.java
similarity index 92%
rename from src/main/java/dev/loki/loparkour/player/service/ParkourHotbar.java
rename to src/main/java/dev/loki/loparkour/player/service/ui/ParkourHotbar.java
index bf1715a..c6090b6 100644
--- a/src/main/java/dev/loki/loparkour/player/service/ParkourHotbar.java
+++ b/src/main/java/dev/loki/loparkour/player/service/ui/ParkourHotbar.java
@@ -1,9 +1,9 @@
-package dev.loki.loparkour.player.service;
+package dev.loki.loparkour.player.service.ui;
import dev.loki.loparkour.player.core.ParkourPlayer;
import dev.loki.loparkour.config.core.Config;
import dev.loki.loparkour.config.locale.Locales;
-import dev.loki.loparkour.menu.core.ParkourOption;
+import dev.loki.loparkour.menu.core.screen.ParkourOption;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/src/main/java/dev/loki/loparkour/player/service/ScoreboardManager.java b/src/main/java/dev/loki/loparkour/player/service/ui/ScoreboardManager.java
similarity index 99%
rename from src/main/java/dev/loki/loparkour/player/service/ScoreboardManager.java
rename to src/main/java/dev/loki/loparkour/player/service/ui/ScoreboardManager.java
index 5fb4cf1..ffb9c65 100644
--- a/src/main/java/dev/loki/loparkour/player/service/ScoreboardManager.java
+++ b/src/main/java/dev/loki/loparkour/player/service/ui/ScoreboardManager.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.player.service;
+package dev.loki.loparkour.player.service.ui;
import dev.loki.loparkour.config.locale.Locales;
import dev.loki.loparkour.generator.core.coordinator.ParkourGenerator;
diff --git a/src/main/java/dev/loki/loparkour/player/spectator/ParkourSpectator.java b/src/main/java/dev/loki/loparkour/player/spectator/ParkourSpectator.java
index a203355..b9d01ab 100644
--- a/src/main/java/dev/loki/loparkour/player/spectator/ParkourSpectator.java
+++ b/src/main/java/dev/loki/loparkour/player/spectator/ParkourSpectator.java
@@ -3,7 +3,7 @@ import dev.loki.loparkour.player.core.ParkourUser;
import dev.loki.loparkour.player.core.ParkourPlayer;
import dev.loki.loparkour.LoParkour;
-import dev.loki.loparkour.api.event.ParkourSpectateEvent;
+import dev.loki.loparkour.api.event.session.ParkourSpectateEvent;
import dev.loki.loparkour.config.locale.Locales;
import dev.loki.loparkour.player.data.PreviousData;
import dev.loki.loparkour.session.core.Session;
diff --git a/src/main/java/dev/loki/loparkour/schematic/convert/LpschemConverter.java b/src/main/java/dev/loki/loparkour/schematic/convert/LpschemConverter.java
index e38d75a..e8c72ef 100644
--- a/src/main/java/dev/loki/loparkour/schematic/convert/LpschemConverter.java
+++ b/src/main/java/dev/loki/loparkour/schematic/convert/LpschemConverter.java
@@ -4,7 +4,7 @@ import com.sk89q.worldedit.extent.clipboard.Clipboard;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.schematic.config.SchematicDifficultyConfig;
import dev.loki.loparkour.schematic.legacy.lpschem.LPSchematicLegacy;
-import dev.loki.loparkour.schematic.legacy.lpschem.SchematicMetadata;
+import dev.loki.loparkour.schematic.legacy.lpschem.pojo.SchematicMetadata;
import dev.loki.loparkour.schematic.schem.SchematicClipboardBuilder;
import dev.loki.loparkour.schematic.schem.SchemWriter;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/LPSchematicLegacy.java b/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/LPSchematicLegacy.java
index 7c121f5..bb2a896 100644
--- a/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/LPSchematicLegacy.java
+++ b/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/LPSchematicLegacy.java
@@ -10,6 +10,11 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;
+import dev.loki.loparkour.schematic.legacy.lpschem.pojo.SchematicDimensions;
+import dev.loki.loparkour.schematic.legacy.lpschem.pojo.SchematicLogic;
+import dev.loki.loparkour.schematic.legacy.lpschem.pojo.SchematicMarkers;
+import dev.loki.loparkour.schematic.legacy.lpschem.pojo.SchematicMetadata;
+import dev.loki.loparkour.schematic.legacy.lpschem.pojo.SchematicVisuals;
import java.util.zip.GZIPInputStream;
/**
diff --git a/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/SchematicDimensions.java b/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/pojo/SchematicDimensions.java
similarity index 72%
rename from src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/SchematicDimensions.java
rename to src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/pojo/SchematicDimensions.java
index b44a65f..c6fd758 100644
--- a/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/SchematicDimensions.java
+++ b/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/pojo/SchematicDimensions.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.schematic.legacy.lpschem;
+package dev.loki.loparkour.schematic.legacy.lpschem.pojo;
/** Gson POJO for legacy {@code .lpschem}. */
public class SchematicDimensions {
diff --git a/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/SchematicLogic.java b/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/pojo/SchematicLogic.java
similarity index 62%
rename from src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/SchematicLogic.java
rename to src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/pojo/SchematicLogic.java
index 4ab590f..4aed682 100644
--- a/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/SchematicLogic.java
+++ b/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/pojo/SchematicLogic.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.schematic.legacy.lpschem;
+package dev.loki.loparkour.schematic.legacy.lpschem.pojo;
/** Gson POJO for legacy {@code .lpschem} (optional section). */
public class SchematicLogic {
diff --git a/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/SchematicMarkers.java b/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/pojo/SchematicMarkers.java
similarity index 84%
rename from src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/SchematicMarkers.java
rename to src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/pojo/SchematicMarkers.java
index e4fceac..677789e 100644
--- a/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/SchematicMarkers.java
+++ b/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/pojo/SchematicMarkers.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.schematic.legacy.lpschem;
+package dev.loki.loparkour.schematic.legacy.lpschem.pojo;
import java.util.List;
diff --git a/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/SchematicMetadata.java b/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/pojo/SchematicMetadata.java
similarity index 85%
rename from src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/SchematicMetadata.java
rename to src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/pojo/SchematicMetadata.java
index 0d7c64e..676bfe6 100644
--- a/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/SchematicMetadata.java
+++ b/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/pojo/SchematicMetadata.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.schematic.legacy.lpschem;
+package dev.loki.loparkour.schematic.legacy.lpschem.pojo;
/** Gson POJO for legacy {@code .lpschem}. */
public class SchematicMetadata {
diff --git a/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/SchematicVisuals.java b/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/pojo/SchematicVisuals.java
similarity index 63%
rename from src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/SchematicVisuals.java
rename to src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/pojo/SchematicVisuals.java
index d1f9edb..edf1b19 100644
--- a/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/SchematicVisuals.java
+++ b/src/main/java/dev/loki/loparkour/schematic/legacy/lpschem/pojo/SchematicVisuals.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.schematic.legacy.lpschem;
+package dev.loki.loparkour.schematic.legacy.lpschem.pojo;
/** Gson POJO for legacy {@code .lpschem} (optional section). */
public class SchematicVisuals {
diff --git a/src/main/java/dev/loki/loparkour/schematic/schem/SchematicClipboardBuilder.java b/src/main/java/dev/loki/loparkour/schematic/schem/SchematicClipboardBuilder.java
index f8c3546..1628ceb 100644
--- a/src/main/java/dev/loki/loparkour/schematic/schem/SchematicClipboardBuilder.java
+++ b/src/main/java/dev/loki/loparkour/schematic/schem/SchematicClipboardBuilder.java
@@ -7,7 +7,7 @@ import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.regions.CuboidRegion;
import com.sk89q.worldedit.world.block.BlockState;
import dev.loki.loparkour.schematic.legacy.lpschem.LPSchematicLegacy;
-import dev.loki.loparkour.schematic.legacy.lpschem.SchematicDimensions;
+import dev.loki.loparkour.schematic.legacy.lpschem.pojo.SchematicDimensions;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.Block;
diff --git a/src/main/java/dev/loki/loparkour/storage/sql/StorageSQL.java b/src/main/java/dev/loki/loparkour/storage/sql/StorageSQL.java
index 2d03736..4df71f0 100644
--- a/src/main/java/dev/loki/loparkour/storage/sql/StorageSQL.java
+++ b/src/main/java/dev/loki/loparkour/storage/sql/StorageSQL.java
@@ -7,6 +7,9 @@ import org.jetbrains.annotations.NotNull;
import java.sql.SQLException;
import java.util.Map;
import java.util.UUID;
+import dev.loki.loparkour.storage.sql.repo.SQLPlayerRepository;
+import dev.loki.loparkour.storage.sql.repo.SQLScoreRepository;
+import dev.loki.loparkour.storage.sql.schema.SQLSchemaManager;
import java.util.logging.Logger;
/**
diff --git a/src/main/java/dev/loki/loparkour/storage/sql/SQLQueryBuilder.java b/src/main/java/dev/loki/loparkour/storage/sql/query/SQLQueryBuilder.java
similarity index 98%
rename from src/main/java/dev/loki/loparkour/storage/sql/SQLQueryBuilder.java
rename to src/main/java/dev/loki/loparkour/storage/sql/query/SQLQueryBuilder.java
index ff79628..d6f9a7d 100644
--- a/src/main/java/dev/loki/loparkour/storage/sql/SQLQueryBuilder.java
+++ b/src/main/java/dev/loki/loparkour/storage/sql/query/SQLQueryBuilder.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.storage.sql;
+package dev.loki.loparkour.storage.sql.query;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/dev/loki/loparkour/storage/sql/SQLQueryExecutor.java b/src/main/java/dev/loki/loparkour/storage/sql/query/SQLQueryExecutor.java
similarity index 94%
rename from src/main/java/dev/loki/loparkour/storage/sql/SQLQueryExecutor.java
rename to src/main/java/dev/loki/loparkour/storage/sql/query/SQLQueryExecutor.java
index 36a26e4..6459c88 100644
--- a/src/main/java/dev/loki/loparkour/storage/sql/SQLQueryExecutor.java
+++ b/src/main/java/dev/loki/loparkour/storage/sql/query/SQLQueryExecutor.java
@@ -1,9 +1,10 @@
-package dev.loki.loparkour.storage.sql;
+package dev.loki.loparkour.storage.sql.query;
import dev.loki.loparkour.LoParkour;
import java.sql.Connection;
import java.sql.PreparedStatement;
+import dev.loki.loparkour.storage.sql.SQLConnectionManager;
import java.sql.SQLException;
/**
@@ -14,11 +15,11 @@ import java.sql.SQLException;
*
* @since 5.0.0
*/
-class SQLQueryExecutor {
+public class SQLQueryExecutor {
private final SQLConnectionManager connectionManager;
- SQLQueryExecutor(SQLConnectionManager connectionManager) {
+ public SQLQueryExecutor(SQLConnectionManager connectionManager) {
this.connectionManager = connectionManager;
}
diff --git a/src/main/java/dev/loki/loparkour/storage/sql/SQLPlayerRepository.java b/src/main/java/dev/loki/loparkour/storage/sql/repo/SQLPlayerRepository.java
similarity index 77%
rename from src/main/java/dev/loki/loparkour/storage/sql/SQLPlayerRepository.java
rename to src/main/java/dev/loki/loparkour/storage/sql/repo/SQLPlayerRepository.java
index 26f92b2..8fe654c 100644
--- a/src/main/java/dev/loki/loparkour/storage/sql/SQLPlayerRepository.java
+++ b/src/main/java/dev/loki/loparkour/storage/sql/repo/SQLPlayerRepository.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.storage.sql;
+package dev.loki.loparkour.storage.sql.repo;
import dev.loki.loparkour.player.core.ParkourPlayer;
import org.jetbrains.annotations.NotNull;
@@ -7,19 +7,22 @@ import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
+import dev.loki.loparkour.storage.sql.SQLConnectionManager;
+import dev.loki.loparkour.storage.sql.SQLDataMapper;
+import dev.loki.loparkour.storage.sql.query.SQLQueryBuilder;
import java.util.logging.Logger;
/**
* CRUD for player data.
*/
-class SQLPlayerRepository {
+public class SQLPlayerRepository {
private static final Logger LOGGER = Logger.getLogger(SQLPlayerRepository.class.getName());
private SQLPlayerRepository() {
}
- static void readPlayer(@NotNull SQLConnectionManager manager, @NotNull ParkourPlayer player) {
+ public static void readPlayer(@NotNull SQLConnectionManager manager, @NotNull ParkourPlayer player) {
if (!manager.isConnected()) {
return;
}
@@ -43,7 +46,7 @@ class SQLPlayerRepository {
}
}
- static void writePlayer(@NotNull SQLConnectionManager manager, @NotNull ParkourPlayer player) {
+ public static void writePlayer(@NotNull SQLConnectionManager manager, @NotNull ParkourPlayer player) {
if (!manager.isConnected()) {
return;
}
diff --git a/src/main/java/dev/loki/loparkour/storage/sql/SQLScoreRepository.java b/src/main/java/dev/loki/loparkour/storage/sql/repo/SQLScoreRepository.java
similarity index 81%
rename from src/main/java/dev/loki/loparkour/storage/sql/SQLScoreRepository.java
rename to src/main/java/dev/loki/loparkour/storage/sql/repo/SQLScoreRepository.java
index f70a866..fe5738f 100644
--- a/src/main/java/dev/loki/loparkour/storage/sql/SQLScoreRepository.java
+++ b/src/main/java/dev/loki/loparkour/storage/sql/repo/SQLScoreRepository.java
@@ -1,4 +1,4 @@
-package dev.loki.loparkour.storage.sql;
+package dev.loki.loparkour.storage.sql.repo;
import dev.loki.loparkour.leaderboard.model.Score;
import org.jetbrains.annotations.NotNull;
@@ -9,12 +9,15 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Map;
import java.util.UUID;
+import dev.loki.loparkour.storage.sql.SQLConnectionManager;
+import dev.loki.loparkour.storage.sql.SQLDataMapper;
+import dev.loki.loparkour.storage.sql.query.SQLQueryBuilder;
import java.util.logging.Logger;
/**
* CRUD for leaderboard scores.
*/
-class SQLScoreRepository {
+public class SQLScoreRepository {
private static final Logger LOGGER = Logger.getLogger(SQLScoreRepository.class.getName());
@@ -22,7 +25,7 @@ class SQLScoreRepository {
}
@NotNull
- static Map readScores(@NotNull SQLConnectionManager manager, @NotNull String mode) {
+ public static Map readScores(@NotNull SQLConnectionManager manager, @NotNull String mode) {
if (!manager.isConnected()) {
return Map.of();
}
@@ -41,7 +44,7 @@ class SQLScoreRepository {
}
}
- static void writeScores(@NotNull SQLConnectionManager manager,
+ public static void writeScores(@NotNull SQLConnectionManager manager,
@NotNull String mode,
@NotNull Map scores) {
if (!manager.isConnected() || scores.isEmpty()) {
diff --git a/src/main/java/dev/loki/loparkour/storage/sql/SQLMigrationManager.java b/src/main/java/dev/loki/loparkour/storage/sql/schema/SQLMigrationManager.java
similarity index 93%
rename from src/main/java/dev/loki/loparkour/storage/sql/SQLMigrationManager.java
rename to src/main/java/dev/loki/loparkour/storage/sql/schema/SQLMigrationManager.java
index e1bf252..b902618 100644
--- a/src/main/java/dev/loki/loparkour/storage/sql/SQLMigrationManager.java
+++ b/src/main/java/dev/loki/loparkour/storage/sql/schema/SQLMigrationManager.java
@@ -1,5 +1,6 @@
-package dev.loki.loparkour.storage.sql;
+package dev.loki.loparkour.storage.sql.schema;
+import dev.loki.loparkour.storage.sql.query.SQLQueryExecutor;
import dev.loki.loparkour.config.options.Option;
/**
@@ -7,11 +8,11 @@ import dev.loki.loparkour.config.options.Option;
*
* @since 5.0.0
*/
-class SQLMigrationManager {
+public class SQLMigrationManager {
private final SQLQueryExecutor queryExecutor;
- SQLMigrationManager(SQLQueryExecutor queryExecutor) {
+ public SQLMigrationManager(SQLQueryExecutor queryExecutor) {
this.queryExecutor = queryExecutor;
}
diff --git a/src/main/java/dev/loki/loparkour/storage/sql/SQLSchemaManager.java b/src/main/java/dev/loki/loparkour/storage/sql/schema/SQLSchemaManager.java
similarity index 85%
rename from src/main/java/dev/loki/loparkour/storage/sql/SQLSchemaManager.java
rename to src/main/java/dev/loki/loparkour/storage/sql/schema/SQLSchemaManager.java
index b64c9c8..e79cb78 100644
--- a/src/main/java/dev/loki/loparkour/storage/sql/SQLSchemaManager.java
+++ b/src/main/java/dev/loki/loparkour/storage/sql/schema/SQLSchemaManager.java
@@ -1,15 +1,17 @@
-package dev.loki.loparkour.storage.sql;
+package dev.loki.loparkour.storage.sql.schema;
import org.jetbrains.annotations.NotNull;
import java.sql.Connection;
import java.sql.PreparedStatement;
+import dev.loki.loparkour.storage.sql.SQLConnectionManager;
+import dev.loki.loparkour.storage.sql.query.SQLQueryBuilder;
import java.sql.SQLException;
/**
* Creates the database schema (DDL) for parkour storage.
*/
-class SQLSchemaManager {
+public class SQLSchemaManager {
private static final String ADAPTIVE_STATS_TABLE = """
CREATE TABLE IF NOT EXISTS loparkour_player_stats (
@@ -28,7 +30,7 @@ class SQLSchemaManager {
private SQLSchemaManager() {
}
- static void createTables(@NotNull SQLConnectionManager manager, @NotNull String mode) throws SQLException {
+ public static void createTables(@NotNull SQLConnectionManager manager, @NotNull String mode) throws SQLException {
String tableName = SQLQueryBuilder.getTableName(mode);
try (Connection conn = manager.getConnection()) {
createScoresTable(conn, tableName);