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

@ -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;
/**

View file

@ -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;
/**

View file

@ -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;
/**

View file

@ -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;

View file

@ -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;

View file

@ -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<UUID, Block> lastBlockCache;
private final Map<UUID, Long> 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);
}

View file

@ -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);
}
}

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;
/**

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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));
}
}

View file

@ -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();

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;
/**

View file

@ -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<String> readLines(@NotNull InputStream is) throws IOException {
public List<String> readLines(@NotNull InputStream is) throws IOException {
try (var r = new BufferedReader(new InputStreamReader(is))) {
return r.lines().toList();
}
}
@NotNull
List<String> readLines(@NotNull File file) throws IOException {
public List<String> readLines(@NotNull File file) throws IOException {
return Files.readAllLines(file.toPath());
}
@NotNull
Map<String, String> extractFullPathValues(@NotNull List<String> lines) {
public Map<String, String> extractFullPathValues(@NotNull List<String> lines) {
Map<String, String> values = new LinkedHashMap<>();
Deque<String> 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<String> stack, int indent, int prevIndent) {
public static int popToLevel(@NotNull Deque<String> 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<String> stack, @NotNull String leaf) {
public static String resolvePath(@NotNull Deque<String> 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) {
}
}

View file

@ -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();

View file

@ -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;

View file

@ -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;

View file

@ -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;
/**

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -1,4 +1,4 @@
package dev.loki.loparkour.config.options;
package dev.loki.loparkour.config.options.section;
import dev.loki.loparkour.config.core.Config;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;
/**

View file

@ -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 {

View file

@ -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<Player> 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<Player> predicate
) {}
}

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;
/**

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;
/**

View file

@ -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 {

View file

@ -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 {

View file

@ -1,4 +1,4 @@
package dev.loki.loparkour.schematic.legacy.lpschem;
package dev.loki.loparkour.schematic.legacy.lpschem.pojo;
import java.util.List;

View file

@ -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 {

View file

@ -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 {

View file

@ -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;

View file

@ -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;
/**

View file

@ -1,4 +1,4 @@
package dev.loki.loparkour.storage.sql;
package dev.loki.loparkour.storage.sql.query;
import org.jetbrains.annotations.NotNull;

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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<UUID, Score> readScores(@NotNull SQLConnectionManager manager, @NotNull String mode) {
public static Map<UUID, Score> 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<UUID, Score> scores) {
if (!manager.isConnected() || scores.isEmpty()) {

View file

@ -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;
}

View file

@ -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);