LoParkour/src/main/java/dev/loki/loparkour/config/options/Option.java
loki5512344 de47bce56e
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
2026-08-05 18:50:39 +02:00

180 lines
7.4 KiB
Java

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.screen.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;
import org.bukkit.Sound;
import org.bukkit.block.BlockFace;
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;
/**
* Facade for all config-derived constants.
* Delegates to specialized option classes in config.options package.
*/
public class Option {
private Option() {
}
// ── Initialization ────────────────────────────────────────────────────────
public static void init(boolean firstLoad) {
OptionSQL.init();
OptionParticles.init();
OptionGeneration.init();
OptionGeneral.init(firstLoad);
OptionGeneral.initOptions();
// Sync all fields to Option facade
syncFields();
OptionStyles.initStyles("styles.list", Config.CONFIG.fileConfiguration, RandomStyle::new)
.forEach(Registry::register);
}
// ── Direct field re-exports for backward compatibility ───────────────────
// SQL
public static boolean SQL;
public static String SQL_URL;
public static int SQL_PORT;
public static String SQL_DB;
public static String SQL_USERNAME;
public static String SQL_PASSWORD;
public static String SQL_PREFIX;
// Particles
public static ParticleShape PARTICLE_SHAPE;
public static Sound SOUND_TYPE;
public static int SOUND_PITCH;
public static int SOUND_VOLUME;
public static Particle PARTICLE_TYPE;
public static ParticleData<?> PARTICLE_DATA;
// Generation
public static double TYPE_NORMAL;
public static double TYPE_SPECIAL;
public static double TYPE_SCHEMATICS;
public static double SPECIAL_ICE;
public static double SPECIAL_SLAB;
public static double SPECIAL_PANE;
public static double SPECIAL_FENCE;
public static double NORMAL_DISTANCE_1;
public static double NORMAL_DISTANCE_2;
public static double NORMAL_DISTANCE_3;
public static double NORMAL_DISTANCE_4;
public static double NORMAL_HEIGHT_1;
public static double NORMAL_HEIGHT_0;
public static double NORMAL_HEIGHT_NEG1;
public static double NORMAL_HEIGHT_NEG2;
public static int MAX_Y;
public static int MIN_Y;
public static int BLOCK_CLEANUP_DISTANCE;
public static int CLEANUP_INTERVAL;
public static int TRAIL_KEEP_BEHIND;
public static boolean GHOST_MODE_ENABLED;
public static int GHOST_SHOW_TOP;
public static double GHOST_TRANSPARENCY;
public static boolean JUMP_VALIDATION_ENABLED;
public static double MAX_JUMP_DISTANCE;
public static double MAX_HORIZONTAL_DISTANCE;
public static double MAX_VERTICAL_UP;
public static double MAX_VERTICAL_DOWN;
public static boolean JUMP_TYPES_ENABLED;
public static Map<String, Boolean> JUMP_TYPE_ENABLED;
public static Map<String, Double> JUMP_TYPE_CHANCE;
// General
public static double BORDER_SIZE;
public static List<Integer> POSSIBLE_LEADS;
public static BlockFace HEADING;
public static Location GO_BACK_LOC;
public static Map<ParkourOption, Boolean> OPTIONS_ENABLED;
public static Map<ParkourOption, String> OPTIONS_DEFAULTS;
private static void syncFields() {
// SQL
SQL = OptionSQL.SQL;
SQL_URL = OptionSQL.SQL_URL;
SQL_PORT = OptionSQL.SQL_PORT;
SQL_DB = OptionSQL.SQL_DB;
SQL_USERNAME = OptionSQL.SQL_USERNAME;
SQL_PASSWORD = OptionSQL.SQL_PASSWORD;
SQL_PREFIX = OptionSQL.SQL_PREFIX;
// Particles
PARTICLE_SHAPE = OptionParticles.PARTICLE_SHAPE;
SOUND_TYPE = OptionParticles.SOUND_TYPE;
SOUND_PITCH = OptionParticles.SOUND_PITCH;
SOUND_VOLUME = OptionParticles.SOUND_VOLUME;
PARTICLE_TYPE = OptionParticles.PARTICLE_TYPE;
PARTICLE_DATA = OptionParticles.PARTICLE_DATA;
// Generation
TYPE_NORMAL = OptionGeneration.TYPE_NORMAL;
TYPE_SPECIAL = OptionGeneration.TYPE_SPECIAL;
TYPE_SCHEMATICS = OptionGeneration.TYPE_SCHEMATICS;
SPECIAL_ICE = OptionGeneration.SPECIAL_ICE;
SPECIAL_SLAB = OptionGeneration.SPECIAL_SLAB;
SPECIAL_PANE = OptionGeneration.SPECIAL_PANE;
SPECIAL_FENCE = OptionGeneration.SPECIAL_FENCE;
NORMAL_DISTANCE_1 = OptionGeneration.NORMAL_DISTANCE_1;
NORMAL_DISTANCE_2 = OptionGeneration.NORMAL_DISTANCE_2;
NORMAL_DISTANCE_3 = OptionGeneration.NORMAL_DISTANCE_3;
NORMAL_DISTANCE_4 = OptionGeneration.NORMAL_DISTANCE_4;
NORMAL_HEIGHT_1 = OptionGeneration.NORMAL_HEIGHT_1;
NORMAL_HEIGHT_0 = OptionGeneration.NORMAL_HEIGHT_0;
NORMAL_HEIGHT_NEG1 = OptionGeneration.NORMAL_HEIGHT_NEG1;
NORMAL_HEIGHT_NEG2 = OptionGeneration.NORMAL_HEIGHT_NEG2;
MAX_Y = OptionGeneration.MAX_Y;
MIN_Y = OptionGeneration.MIN_Y;
BLOCK_CLEANUP_DISTANCE = OptionGeneration.BLOCK_CLEANUP_DISTANCE;
CLEANUP_INTERVAL = OptionGeneration.CLEANUP_INTERVAL;
TRAIL_KEEP_BEHIND = OptionGeneration.TRAIL_KEEP_BEHIND;
GHOST_MODE_ENABLED = OptionGeneration.GHOST_MODE_ENABLED;
GHOST_SHOW_TOP = OptionGeneration.GHOST_SHOW_TOP;
GHOST_TRANSPARENCY = OptionGeneration.GHOST_TRANSPARENCY;
JUMP_VALIDATION_ENABLED = OptionGeneration.JUMP_VALIDATION_ENABLED;
MAX_JUMP_DISTANCE = OptionGeneration.MAX_JUMP_DISTANCE;
MAX_HORIZONTAL_DISTANCE = OptionGeneration.MAX_HORIZONTAL_DISTANCE;
MAX_VERTICAL_UP = OptionGeneration.MAX_VERTICAL_UP;
MAX_VERTICAL_DOWN = OptionGeneration.MAX_VERTICAL_DOWN;
JUMP_TYPES_ENABLED = OptionGeneration.JUMP_TYPES_ENABLED;
JUMP_TYPE_ENABLED = OptionGeneration.JUMP_TYPE_ENABLED;
JUMP_TYPE_CHANCE = OptionGeneration.JUMP_TYPE_CHANCE;
// General
BORDER_SIZE = OptionGeneral.BORDER_SIZE;
POSSIBLE_LEADS = OptionGeneral.POSSIBLE_LEADS;
HEADING = OptionGeneral.HEADING;
GO_BACK_LOC = OptionGeneral.GO_BACK_LOC;
OPTIONS_ENABLED = OptionGeneral.OPTIONS_ENABLED;
OPTIONS_DEFAULTS = OptionGeneral.OPTIONS_DEFAULTS;
}
/** @deprecated Use {@link OptionStyles#initStyles(String, FileConfiguration, BiFunction)} */
@Deprecated
public static Set<Style> initStyles(String path, FileConfiguration config,
BiFunction<String, List<Material>, Style> fn) {
return OptionStyles.initStyles(path, config, fn);
}
// ── Inner types ───────────────────────────────────────────────────────────
public enum ParticleShape { DOT, CIRCLE, BOX }
}