Refactor: Restructure packages to follow KISS/SOLID principles - gui reorganized into mine/group/confirm/common, core into mine/service/common, command into admin/player/common, data/config/loader into block/entity/region/reward/system. All packages now follow max 6 files per folder rule. Extracted utility classes to reduce file sizes.
This commit is contained in:
parent
9692965a3e
commit
1b85bc5329
58 changed files with 1356 additions and 1364 deletions
|
|
@ -1,6 +1,13 @@
|
|||
package dev.loki.lomines.data.config;
|
||||
|
||||
import dev.loki.lomines.data.config.loader.*;
|
||||
import dev.loki.lomines.data.config.loader.block.BlockConfigLoader;
|
||||
import dev.loki.lomines.data.config.loader.entity.PlayerSpawnConfigLoader;
|
||||
import dev.loki.lomines.data.config.loader.entity.TeleportConfigLoader;
|
||||
import dev.loki.lomines.data.config.loader.region.RegionConfigLoader;
|
||||
import dev.loki.lomines.data.config.loader.region.WorldGuardConfigLoader;
|
||||
import dev.loki.lomines.data.config.loader.reset.ResetConfigLoader;
|
||||
import dev.loki.lomines.data.config.loader.reward.RewardConfigLoader;
|
||||
import dev.loki.lomines.data.config.loader.system.UIConfigLoader;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
||||
import java.io.IOException;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package dev.loki.lomines.data.config.loader;
|
||||
package dev.loki.lomines.data.config.loader.block;
|
||||
|
||||
import dev.loki.lomines.data.config.block.BlockConfig;
|
||||
import dev.loki.lomines.data.config.block.BlockKey;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package dev.loki.lomines.data.config.loader;
|
||||
package dev.loki.lomines.data.config.loader.entity;
|
||||
|
||||
import dev.loki.lomines.data.config.spawn.PlayerSpawnConfig;
|
||||
import dev.loki.lomines.util.location.LocationParser;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package dev.loki.lomines.data.config.loader;
|
||||
package dev.loki.lomines.data.config.loader.entity;
|
||||
|
||||
import dev.loki.lomines.data.config.teleport.TeleportConfig;
|
||||
import dev.loki.lomines.util.location.LocationParser;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package dev.loki.lomines.data.config.loader;
|
||||
package dev.loki.lomines.data.config.loader.region;
|
||||
|
||||
import dev.loki.lomines.data.config.region.RegionConfig;
|
||||
import dev.loki.lomines.util.location.LocationParser;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package dev.loki.lomines.data.config.loader;
|
||||
package dev.loki.lomines.data.config.loader.region;
|
||||
|
||||
import dev.loki.lomines.data.config.ConfigLoader;
|
||||
import dev.loki.lomines.integration.worldguard.WorldGuardConfig;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package dev.loki.lomines.data.config.loader;
|
||||
package dev.loki.lomines.data.config.loader.reward;
|
||||
|
||||
import dev.loki.lomines.data.config.block.BlockKey;
|
||||
import dev.loki.lomines.data.config.reward.RewardConfig;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package dev.loki.lomines.data.config.loader;
|
||||
package dev.loki.lomines.data.config.loader.system;
|
||||
|
||||
import dev.loki.lomines.data.config.reset.ResetConfig;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package dev.loki.lomines.data.config.loader;
|
||||
package dev.loki.lomines.data.config.loader.system;
|
||||
|
||||
import dev.loki.lomines.data.config.ui.UIConfig;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
package dev.loki.lomines.data.reward;
|
||||
|
||||
import dev.loki.lomines.data.config.parser.ConfigParseException;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Parses reward commands from configuration.
|
||||
*/
|
||||
final class RewardCommandParser {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
List<String> parseCommands(Map<String, Object> rewardMap) throws ConfigParseException {
|
||||
List<String> commands = new ArrayList<>();
|
||||
if (!rewardMap.containsKey("commands")) {
|
||||
return commands;
|
||||
}
|
||||
Object commandsObj = rewardMap.get("commands");
|
||||
if (!(commandsObj instanceof List)) {
|
||||
throw new ConfigParseException(
|
||||
"Invalid 'commands' type: expected list, got " +
|
||||
(commandsObj != null ? commandsObj.getClass().getSimpleName() : "null")
|
||||
);
|
||||
}
|
||||
List<String> commandsList = (List<String>) commandsObj;
|
||||
for (String command : commandsList) {
|
||||
if (command == null || command.trim().isEmpty()) {
|
||||
throw new ConfigParseException("Command cannot be null or empty");
|
||||
}
|
||||
commands.add(command);
|
||||
}
|
||||
return commands;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
package dev.loki.lomines.data.reward;
|
||||
|
||||
import dev.loki.lomines.data.config.parser.ConfigParseException;
|
||||
import dev.loki.lomines.util.ValidationUtils;
|
||||
import org.bukkit.Material;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Parses reward materials (blocks) from configuration.
|
||||
*/
|
||||
final class RewardMaterialParser {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Material> parseMaterials(Map<String, Object> rewardMap) throws ConfigParseException {
|
||||
if (!rewardMap.containsKey("blocks")) {
|
||||
throw new ConfigParseException("Missing required 'blocks' field in reward");
|
||||
}
|
||||
Object blocksObj = rewardMap.get("blocks");
|
||||
if (!(blocksObj instanceof List)) {
|
||||
throw new ConfigParseException(
|
||||
"Invalid 'blocks' type: expected list, got " +
|
||||
(blocksObj != null ? blocksObj.getClass().getSimpleName() : "null")
|
||||
);
|
||||
}
|
||||
List<String> blocksList = (List<String>) blocksObj;
|
||||
List<Material> materials = new ArrayList<>();
|
||||
for (String blockName : blocksList) {
|
||||
if (blockName == null || blockName.trim().isEmpty()) {
|
||||
throw new ConfigParseException("Block name cannot be null or empty");
|
||||
}
|
||||
try {
|
||||
Material material = ValidationUtils.validateMaterial(blockName);
|
||||
materials.add(material);
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new ConfigParseException(
|
||||
"Unknown material in reward blocks: '" + blockName + "'",
|
||||
e
|
||||
);
|
||||
}
|
||||
}
|
||||
return materials;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,9 +1,6 @@
|
|||
package dev.loki.lomines.data.reward;
|
||||
|
||||
import dev.loki.lomines.data.config.parser.ConfigParseException;
|
||||
import dev.loki.lomines.util.ValidationUtils;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
|
|
@ -18,18 +15,15 @@ import java.util.Map;
|
|||
public final class RewardParser {
|
||||
|
||||
private final RewardItemParser itemParser;
|
||||
private final RewardMaterialParser materialParser;
|
||||
private final RewardCommandParser commandParser;
|
||||
|
||||
public RewardParser() {
|
||||
this.itemParser = new RewardItemParser();
|
||||
this.materialParser = new RewardMaterialParser();
|
||||
this.commandParser = new RewardCommandParser();
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses all rewards from the YAML configuration.
|
||||
*
|
||||
* @param yaml the YAML configuration
|
||||
* @return list of parsed Reward objects
|
||||
* @throws ConfigParseException if reward configuration is invalid
|
||||
*/
|
||||
public List<Reward> parseRewards(YamlConfiguration yaml) throws ConfigParseException {
|
||||
List<Reward> rewards = new ArrayList<>();
|
||||
|
||||
|
|
@ -69,20 +63,13 @@ public final class RewardParser {
|
|||
return rewards;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses a single reward from a map configuration.
|
||||
*
|
||||
* @param rewardMap the reward configuration map
|
||||
* @return the parsed Reward object
|
||||
* @throws ConfigParseException if the reward configuration is invalid
|
||||
*/
|
||||
private Reward parseReward(Map<String, Object> rewardMap) throws ConfigParseException {
|
||||
double chance = parseRewardField(rewardMap, "chance", Double.class);
|
||||
boolean preventDrops = parseRewardField(rewardMap, "prevent-drops", Boolean.class, false);
|
||||
|
||||
List<Material> materials = parseRewardMaterials(rewardMap);
|
||||
var materials = materialParser.parseMaterials(rewardMap);
|
||||
List<ItemStack> items = parseRewardItems(rewardMap);
|
||||
List<String> commands = parseRewardCommands(rewardMap);
|
||||
List<String> commands = commandParser.parseCommands(rewardMap);
|
||||
|
||||
return new Reward(materials, chance, items, commands, preventDrops);
|
||||
}
|
||||
|
|
@ -137,38 +124,6 @@ public final class RewardParser {
|
|||
}
|
||||
}
|
||||
|
||||
private List<Material> parseRewardMaterials(Map<String, Object> rewardMap)
|
||||
throws ConfigParseException {
|
||||
if (!rewardMap.containsKey("blocks")) {
|
||||
throw new ConfigParseException("Missing required 'blocks' field in reward");
|
||||
}
|
||||
Object blocksObj = rewardMap.get("blocks");
|
||||
if (!(blocksObj instanceof List)) {
|
||||
throw new ConfigParseException(
|
||||
"Invalid 'blocks' type: expected list, got " +
|
||||
(blocksObj != null ? blocksObj.getClass().getSimpleName() : "null")
|
||||
);
|
||||
}
|
||||
@SuppressWarnings("unchecked")
|
||||
List<String> blocksList = (List<String>) blocksObj;
|
||||
List<Material> materials = new ArrayList<>();
|
||||
for (String blockName : blocksList) {
|
||||
if (blockName == null || blockName.trim().isEmpty()) {
|
||||
throw new ConfigParseException("Block name cannot be null or empty");
|
||||
}
|
||||
try {
|
||||
Material material = ValidationUtils.validateMaterial(blockName);
|
||||
materials.add(material);
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new ConfigParseException(
|
||||
"Unknown material in reward blocks: '" + blockName + "'",
|
||||
e
|
||||
);
|
||||
}
|
||||
}
|
||||
return materials;
|
||||
}
|
||||
|
||||
private List<ItemStack> parseRewardItems(Map<String, Object> rewardMap)
|
||||
throws ConfigParseException {
|
||||
List<ItemStack> items = new ArrayList<>();
|
||||
|
|
@ -197,28 +152,4 @@ public final class RewardParser {
|
|||
}
|
||||
return items;
|
||||
}
|
||||
|
||||
private List<String> parseRewardCommands(Map<String, Object> rewardMap)
|
||||
throws ConfigParseException {
|
||||
List<String> commands = new ArrayList<>();
|
||||
if (!rewardMap.containsKey("commands")) {
|
||||
return commands;
|
||||
}
|
||||
Object commandsObj = rewardMap.get("commands");
|
||||
if (!(commandsObj instanceof List)) {
|
||||
throw new ConfigParseException(
|
||||
"Invalid 'commands' type: expected list, got " +
|
||||
(commandsObj != null ? commandsObj.getClass().getSimpleName() : "null")
|
||||
);
|
||||
}
|
||||
@SuppressWarnings("unchecked")
|
||||
List<String> commandsList = (List<String>) commandsObj;
|
||||
for (String command : commandsList) {
|
||||
if (command == null || command.trim().isEmpty()) {
|
||||
throw new ConfigParseException("Command cannot be null or empty");
|
||||
}
|
||||
commands.add(command);
|
||||
}
|
||||
return commands;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue