refactor: reorganize packages and replace LPSchematic with WorldEdit

Restructure core modules into subpackages (generator, schematic, config, session, etc.); add .schem/.nbt schematic pipeline, commands, adaptive stats skeleton, and bootstrap wiring.
This commit is contained in:
loki5512344 2026-06-01 14:02:48 +02:00
parent 6ba6e5137d
commit fd0ba2cc0e
203 changed files with 5652 additions and 2367 deletions

View file

@ -1,4 +1,4 @@
package dev.loki.loparkour.config;
package dev.loki.loparkour.config.core;
import org.bukkit.configuration.file.FileConfiguration;
import org.jetbrains.annotations.NotNull;
@ -116,4 +116,4 @@ public enum Config {
public List<String> getChildren(@NotNull String path, boolean... deep) {
return accessor.getChildren(path, deep);
}
}
}

View file

@ -1,4 +1,4 @@
package dev.loki.loparkour.config;
package dev.loki.loparkour.config.core;
import dev.loki.loparkour.LoParkour;
import org.bukkit.configuration.ConfigurationSection;
@ -144,4 +144,4 @@ public class ConfigAccessor {
"Missing config path '" + path + "' in " + fileName + ". Using a safe default value.");
}
}
}
}

View file

@ -1,5 +1,7 @@
package dev.loki.loparkour.config;
package dev.loki.loparkour.config.core;
import dev.loki.loparkour.config.locale.Locales;
import dev.loki.loparkour.config.options.Option;
import dev.loki.loparkour.LoParkour;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
@ -55,9 +57,9 @@ public class ConfigLoader {
}
public static void initializeDependentSystems(boolean firstLoad) {
dev.loki.loparkour.reward.Rewards.init();
dev.loki.loparkour.reward.core.Rewards.init();
Locales.init();
dev.loki.loparkour.schematic.Schematics.init();
dev.loki.loparkour.schematic.registry.Schematics.init();
Option.init(firstLoad);
}

View file

@ -1,4 +1,4 @@
package dev.loki.loparkour.config;
package dev.loki.loparkour.config.core;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

View file

@ -1,4 +1,4 @@
package dev.loki.loparkour.config;
package dev.loki.loparkour.config.locale;
import org.bukkit.configuration.file.FileConfiguration;
import org.jetbrains.annotations.NotNull;

View file

@ -1,4 +1,4 @@
package dev.loki.loparkour.config;
package dev.loki.loparkour.config.locale;
import dev.loki.loparkour.LoParkour;
import org.bukkit.configuration.ConfigurationSection;

View file

@ -1,10 +1,12 @@
package dev.loki.loparkour.config;
package dev.loki.loparkour.config.locale;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.menu.ParkourOption;
import dev.loki.loparkour.player.ParkourUser;
import dev.loki.loparkour.util.Item;
import dev.loki.loparkour.util.Materials;
import dev.loki.loparkour.config.options.Option;
import dev.loki.loparkour.menu.core.ParkourOption;
import dev.loki.loparkour.player.core.ParkourUser;
import dev.loki.loparkour.util.text.ColorUtil;
import dev.loki.loparkour.util.item.Item;
import dev.loki.loparkour.util.item.Materials;
import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
@ -29,6 +31,7 @@ public class Locales {
public static void init() {
Map<String, FileConfiguration> loaded = LocaleLoader.loadAll();
cache.setLocales(loaded);
dev.loki.loparkour.command.schematic.SchematicCommandHandler.clearWandCache();
LoParkour.log("Locales loaded successfully (" + loaded.size() + " locales)");
}
@ -61,6 +64,24 @@ public class Locales {
return cache.cachedValue(locale, c -> c.getString(path), "");
}
/**
* Sends a colored message from locale. Safe for console ({@link #getString(CommandSender, String)}).
*/
public static void send(@NotNull CommandSender sender, @NotNull String path, Object... format) {
String message = getString(sender, path);
if (format.length > 0) {
message = message.formatted(format);
}
sender.sendMessage(ColorUtil.color(message));
}
/**
* Sends a colored message using the player's locale.
*/
public static void send(@NotNull Player player, @NotNull String path, Object... format) {
send((CommandSender) player, path, format);
}
@NotNull
public static List<String> getStringList(@NotNull String locale, @NotNull String path) {
return cache.cachedValue(locale, c -> c.getStringList(path), Collections.emptyList());
@ -107,11 +128,9 @@ public class Locales {
String name = applyReplacements(config.getString(namePath, ""), replace);
String lore = applyReplacements(config.getString(lorePath, ""), replace);
// Debug logging
if ("STONE".equals(material)) {
LoParkour.getPlugin().getLogger().warning("Material defaulted to STONE for path: " + path);
LoParkour.getPlugin().getLogger().warning(" Tried: " + materialPath + " = " + config.getString(materialPath));
LoParkour.getPlugin().getLogger().warning(" Available keys: " + config.getKeys(true));
if ("STONE".equals(material) && !config.contains(materialPath)) {
LoParkour.getPlugin().getLogger().warning(
"Missing locale key '%s' (material defaults to STONE)".formatted(materialPath));
}
Material mat = Materials.parse(material);

View file

@ -1,11 +1,12 @@
package dev.loki.loparkour.config;
package dev.loki.loparkour.config.options;
import dev.loki.loparkour.api.Registry;
import dev.loki.loparkour.api.core.Registry;
import dev.loki.loparkour.config.core.Config;
import dev.loki.loparkour.config.options.*;
import dev.loki.loparkour.menu.ParkourOption;
import dev.loki.loparkour.style.RandomStyle;
import dev.loki.loparkour.style.Style;
import dev.loki.loparkour.util.ParticleData;
import dev.loki.loparkour.menu.core.ParkourOption;
import dev.loki.loparkour.style.core.RandomStyle;
import dev.loki.loparkour.style.core.Style;
import dev.loki.loparkour.util.particle.ParticleData;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Particle;

View file

@ -1,8 +1,8 @@
package dev.loki.loparkour.config.options;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.config.Config;
import dev.loki.loparkour.menu.ParkourOption;
import dev.loki.loparkour.config.core.Config;
import dev.loki.loparkour.menu.core.ParkourOption;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;

View file

@ -1,7 +1,7 @@
package dev.loki.loparkour.config.options;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.config.Config;
import dev.loki.loparkour.config.core.Config;
import java.util.HashMap;
import java.util.Map;

View file

@ -1,9 +1,9 @@
package dev.loki.loparkour.config.options;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.config.Config;
import dev.loki.loparkour.config.Option;
import dev.loki.loparkour.util.ParticleData;
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,7 +1,7 @@
package dev.loki.loparkour.config.options;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.config.Config;
import dev.loki.loparkour.config.core.Config;
/**
* SQL database configuration options.

View file

@ -1,9 +1,9 @@
package dev.loki.loparkour.config.options;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.config.ConfigAccessor;
import dev.loki.loparkour.style.Style;
import dev.loki.loparkour.util.Materials;
import dev.loki.loparkour.config.core.ConfigAccessor;
import dev.loki.loparkour.style.core.Style;
import dev.loki.loparkour.util.item.Materials;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;