aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMyles <mylesandmore9@gmail.com>2024-08-01 20:52:15 -0500
committerMyles <mylesandmore9@gmail.com>2024-08-01 20:52:15 -0500
commitd3c2467476f92ad3c5bcbe8fb5aa8b568c971518 (patch)
tree20dff1d8e255f36a8eab1d07f3e9ea976083e1fa /src/main/java
parent839be68b900d46d52899c224a779fa90d06d6c74 (diff)
downloadTumble-d3c2467476f92ad3c5bcbe8fb5aa8b568c971518.tar.gz
Tumble-d3c2467476f92ad3c5bcbe8fb5aa8b568c971518.tar.bz2
Tumble-d3c2467476f92ad3c5bcbe8fb5aa8b568c971518.zip
LayerManager bugfixes/improvements
- test and fix LayerManager - add layer and within-layer weights - add docs for layers.tml in readme
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/MylesAndMore/Tumble/Main.java11
-rw-r--r--src/main/java/com/MylesAndMore/Tumble/config/ArenaManager.java1
-rw-r--r--src/main/java/com/MylesAndMore/Tumble/config/LayerManager.java64
3 files changed, 61 insertions, 15 deletions
diff --git a/src/main/java/com/MylesAndMore/Tumble/Main.java b/src/main/java/com/MylesAndMore/Tumble/Main.java
index 56a46c1..b6fdb1f 100644
--- a/src/main/java/com/MylesAndMore/Tumble/Main.java
+++ b/src/main/java/com/MylesAndMore/Tumble/Main.java
@@ -10,6 +10,7 @@ import com.MylesAndMore.Tumble.game.Arena;
import org.bstats.bukkit.Metrics;
import org.bukkit.Bukkit;
+import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.Objects;
@@ -24,12 +25,18 @@ public class Main extends JavaPlugin {
LanguageManager.readConfig();
ConfigManager.readConfig();
ArenaManager.readConfig();
- LayerManager.readConfig();
+ try {
+ LayerManager.readConfig();
+ } catch (InvalidConfigurationException e) {
+ this.getLogger().severe(e.getMessage());
+ Bukkit.getServer().getPluginManager().disablePlugin(this);
+ return;
+ }
Objects.requireNonNull(this.getCommand("tumble")).setExecutor(new Tumble());
new Metrics(this, 16940);
- Bukkit.getServer().getLogger().info("[Tumble] Tumble successfully enabled!");
+ this.getLogger().info("Tumble successfully enabled!");
}
@Override
diff --git a/src/main/java/com/MylesAndMore/Tumble/config/ArenaManager.java b/src/main/java/com/MylesAndMore/Tumble/config/ArenaManager.java
index af85b9f..84f5595 100644
--- a/src/main/java/com/MylesAndMore/Tumble/config/ArenaManager.java
+++ b/src/main/java/com/MylesAndMore/Tumble/config/ArenaManager.java
@@ -61,6 +61,7 @@ public class ArenaManager {
arenas.put(arena.name, arena);
}
validate(); // Validate arenas
+ plugin.getLogger().info("arenas.yml: Loaded " + arenas.size() + (arenas.size() > 1 ? " arenas" : " arena"));
}
/**
diff --git a/src/main/java/com/MylesAndMore/Tumble/config/LayerManager.java b/src/main/java/com/MylesAndMore/Tumble/config/LayerManager.java
index f834a24..73b301f 100644
--- a/src/main/java/com/MylesAndMore/Tumble/config/LayerManager.java
+++ b/src/main/java/com/MylesAndMore/Tumble/config/LayerManager.java
@@ -3,16 +3,18 @@ package com.MylesAndMore.Tumble.config;
import com.MylesAndMore.Tumble.plugin.CustomConfig;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
+import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.FileConfiguration;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.Random;
import static com.MylesAndMore.Tumble.Main.plugin;
public class LayerManager {
- public static List<List<Material>> layers;
+ public static List<List<Material>> layers = new ArrayList<>();
private static final CustomConfig layersYml = new CustomConfig("layers.yml");
private static final FileConfiguration config = layersYml.getConfig();
@@ -20,22 +22,30 @@ public class LayerManager {
/**
* Read layers from layers.yml and populate this.layers
*/
- public static void readConfig() {
+ public static void readConfig() throws InvalidConfigurationException {
layersYml.saveDefaultConfig();
ConfigurationSection layersSection = config.getConfigurationSection("layers");
if (layersSection == null) {
- plugin.getLogger().warning("layers.yml is missing section 'layers'");
- return;
+ throw new InvalidConfigurationException("layers.yml is missing section 'layers'");
}
for (String layerPath : layersSection.getKeys(false)) {
List<Material> layer = readLayer(layerPath);
if (layer == null) {
- plugin.getLogger().warning("layers.yml: error loading layer at'"+layerPath+"'");
+ plugin.getLogger().warning("layers.yml: Failed to load layer '" + layerPath + "'");
} else {
- layers.add(layer);
+ int weight = getLayerWeight(layerPath);
+ for (int i = 0; i < weight; i++) {
+ layers.add(layer);
+ }
}
}
+
+ if (layers.isEmpty()) {
+ throw new InvalidConfigurationException("No layers were found in layers.yml");
+ }
+ int numLayers = layersSection.getKeys(false).size(); // Don't use layers.size() because it includes duplicates for weighted layers
+ plugin.getLogger().info("layers.yml: Loaded " + numLayers + (numLayers > 1 ? " layers" : " layer"));
}
/**
@@ -44,17 +54,45 @@ public class LayerManager {
* @return The list of materials for the layer to be composed of
*/
public static List<Material> readLayer(String path) {
- List<String> list = config.getStringList(path);
- List<Material> layer = new ArrayList<>();
- for (String entry : list) {
- Material tmp = Material.getMaterial(entry);
- if (tmp == null) {
+ List<Map<?, ?>> materialsSection = config.getMapList("layers." + path + ".materials");
+ if (materialsSection.isEmpty()) {
+ plugin.getLogger().warning("layers.yml: Layer '" + path + "' is missing section 'materials'");
+ return null;
+ }
+ List<Material> materials = new ArrayList<>();
+
+ for (Map<?, ?> materialMap : materialsSection) {
+ String matName = (String)materialMap.get("material");
+ Material mat = Material.getMaterial(matName);
+
+ Object weightObj = materialMap.get("weight");
+ int weight = 1;
+ if (weightObj != null) {
+ if (weightObj instanceof Integer) {
+ weight = (Integer)weightObj;
+ } else {
+ plugin.getLogger().warning("layers.yml: Invalid weight in layer '" + path + "'");
+ return null;
+ }
+ }
+ if (mat == null) {
+ plugin.getLogger().warning("layers.yml: Invalid material '" + matName + "' in layer '" + path + "'");
return null;
}
- layer.add(tmp);
+ if (weight < 1) {
+ plugin.getLogger().warning("layers.yml: Invalid weight '" + weight + "' in layer '" + path + "'");
+ return null;
+ }
+ for (int i = 0; i < weight; i++) {
+ materials.add(mat);
+ }
}
- return layer;
+ return materials;
+ }
+
+ public static int getLayerWeight(String path) {
+ return config.getInt("layers." + path + ".weight", 1);
}
public static List<Material> getRandom() {