diff options
| author | sowgro <tpoke.ferrari@gmail.com> | 2024-08-02 17:51:28 -0400 | 
|---|---|---|
| committer | sowgro <tpoke.ferrari@gmail.com> | 2024-08-02 17:51:28 -0400 | 
| commit | ec6245a466e285ac479bb1c5f32ec9d9aeaf65ec (patch) | |
| tree | db9624658014916b991b83a152ff2d72c999f835 | |
| parent | d3c2467476f92ad3c5bcbe8fb5aa8b568c971518 (diff) | |
| download | Tumble-ec6245a466e285ac479bb1c5f32ec9d9aeaf65ec.tar.gz Tumble-ec6245a466e285ac479bb1c5f32ec9d9aeaf65ec.tar.bz2 Tumble-ec6245a466e285ac479bb1c5f32ec9d9aeaf65ec.zip | |
Add compact material weight notation for layers.yml
| -rw-r--r-- | src/main/java/com/MylesAndMore/Tumble/Main.java | 10 | ||||
| -rw-r--r-- | src/main/java/com/MylesAndMore/Tumble/config/LayerManager.java | 114 | ||||
| -rw-r--r-- | src/main/resources/layers.yml | 313 | 
3 files changed, 196 insertions, 241 deletions
| diff --git a/src/main/java/com/MylesAndMore/Tumble/Main.java b/src/main/java/com/MylesAndMore/Tumble/Main.java index b6fdb1f..7cf3628 100644 --- a/src/main/java/com/MylesAndMore/Tumble/Main.java +++ b/src/main/java/com/MylesAndMore/Tumble/Main.java @@ -9,8 +9,6 @@ import com.MylesAndMore.Tumble.config.LayerManager;  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; @@ -25,13 +23,7 @@ public class Main extends JavaPlugin {          LanguageManager.readConfig();          ConfigManager.readConfig();          ArenaManager.readConfig(); -        try { -            LayerManager.readConfig(); -        } catch (InvalidConfigurationException e) { -            this.getLogger().severe(e.getMessage()); -            Bukkit.getServer().getPluginManager().disablePlugin(this); -            return; -        } +        LayerManager.readConfig();          Objects.requireNonNull(this.getCommand("tumble")).setExecutor(new Tumble());          new Metrics(this, 16940); diff --git a/src/main/java/com/MylesAndMore/Tumble/config/LayerManager.java b/src/main/java/com/MylesAndMore/Tumble/config/LayerManager.java index 73b301f..f20df6e 100644 --- a/src/main/java/com/MylesAndMore/Tumble/config/LayerManager.java +++ b/src/main/java/com/MylesAndMore/Tumble/config/LayerManager.java @@ -2,14 +2,10 @@ package com.MylesAndMore.Tumble.config;  import com.MylesAndMore.Tumble.plugin.CustomConfig;  import org.bukkit.Material; +import org.bukkit.configuration.Configuration;  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 java.util.*;  import static com.MylesAndMore.Tumble.Main.plugin; @@ -17,84 +13,100 @@ public class LayerManager {      public static List<List<Material>> layers = new ArrayList<>();      private static final CustomConfig layersYml = new CustomConfig("layers.yml"); -    private static final FileConfiguration config = layersYml.getConfig(); +    private static final Configuration config = layersYml.getConfig(); +    private static final Configuration defaultConfig = Objects.requireNonNull(config.getDefaults()); +    private static int layerCount = 0;      /**       * Read layers from layers.yml and populate this.layers       */ -    public static void readConfig() throws InvalidConfigurationException { +    public static void readConfig() {          layersYml.saveDefaultConfig(); -        ConfigurationSection layersSection = config.getConfigurationSection("layers"); -        if (layersSection == null) { -            throw new InvalidConfigurationException("layers.yml is missing section 'layers'"); +        readLayers(config.getConfigurationSection("layers")); +        if (layers.isEmpty()) { +            plugin.getLogger().warning("layers.yml: No layers were found, using defaults"); +            readLayers(defaultConfig.getConfigurationSection("layers"));          } -        for (String layerPath : layersSection.getKeys(false)) { -            List<Material> layer = readLayer(layerPath); + +        // Don't use layers.size() because it includes duplicates for weighted layers +        plugin.getLogger().info("layers.yml: Loaded " + layerCount + (layerCount == 1 ? " layer" : " layers")); +    } + +    public static void readLayers(ConfigurationSection section) { + +        if (section == null) { +            plugin.getLogger().warning("layers.yml is missing section 'layers', using defaults"); +            return; +        } + +        for (String layerPath : section.getKeys(false)) { +            ConfigurationSection layerSection = section.getConfigurationSection(layerPath); +            if (layerSection == null) { +                plugin.getLogger().warning("layers.yml: Layer '" + layerPath + "' is null"); +                continue; +            } +            List<Material> layer = readLayer(layerSection);              if (layer == null) {                  plugin.getLogger().warning("layers.yml: Failed to load layer '" + layerPath + "'"); -            } else { -                int weight = getLayerWeight(layerPath); -                for (int i = 0; i < weight; i++) { -                    layers.add(layer); -                } +                continue;              } -        } -        if (layers.isEmpty()) { -            throw new InvalidConfigurationException("No layers were found in layers.yml"); +            int weight = layerSection.getInt("layers." + layerPath + ".weight", 1); +            layerCount++; +            for (int i = 0; i < weight; i++) { +                layers.add(layer); +            }          } -        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"));      }      /**       * Read the list of materials for a layer. -     * @param path The path of the layer in the config +     * @param section The path of the layer in the config       * @return The list of materials for the layer to be composed of       */ -    public static List<Material> readLayer(String path) { -        List<Map<?, ?>> materialsSection = config.getMapList("layers." + path + ".materials"); -        if (materialsSection.isEmpty()) { -            plugin.getLogger().warning("layers.yml: Layer '" + path + "' is missing section 'materials'"); +    public static List<Material> readLayer(ConfigurationSection section) { + +        List<String> materialsList = section.getStringList("materials"); +        if (materialsList.isEmpty()) { +            plugin.getLogger().warning("layers.yml: Layer '" + section.getCurrentPath() + "' is missing section 'materials'");              return null;          } +          List<Material> materials = new ArrayList<>(); +        for (String s : materialsList) { +            String[] sp = s.split(" "); -        for (Map<?, ?> materialMap : materialsSection) { -            String matName = (String)materialMap.get("material"); +            if (sp.length < 1) { +                plugin.getLogger().warning("layers.yml: Invalid format in layer '" + section.getCurrentPath() + "'"); +                continue; +            } +            String matName = sp[0];              Material mat = Material.getMaterial(matName); +            if (mat == null) { +                plugin.getLogger().warning("layers.yml: Invalid material '" + matName + "' in layer '" + section.getCurrentPath() + "'"); +                continue; +            } -            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; +            int matWeight; +            if (sp.length < 2) { +                matWeight = 1; +            } else { +                try { +                    matWeight = Integer.parseInt(sp[1]); +                } catch (NumberFormatException e) { +                    plugin.getLogger().warning("layers.yml: Invalid weight '" + sp[1] + "' in layer '" + section.getCurrentPath() + "'"); +                    matWeight = 1;                  }              } -            if (mat == null) { -                plugin.getLogger().warning("layers.yml: Invalid material '" + matName + "' in layer '" + path + "'"); -                return null; -            } -            if (weight < 1) { -                plugin.getLogger().warning("layers.yml: Invalid weight '" + weight + "' in layer '" + path + "'"); -                return null; -            } -            for (int i = 0; i < weight; i++) { +            for (int i = 0; i < matWeight; i++) {                  materials.add(mat);              }          }          return materials;      } -    public static int getLayerWeight(String path) { -        return config.getInt("layers." + path + ".weight", 1); -    } -      public static List<Material> getRandom() {          return layers.get(new Random().nextInt(layers.size()));      } diff --git a/src/main/resources/layers.yml b/src/main/resources/layers.yml index ff0f353..d388759 100644 --- a/src/main/resources/layers.yml +++ b/src/main/resources/layers.yml @@ -2,231 +2,182 @@ layers:    ores:      weight: 5      materials: -      - material: COBBLESTONE -        weight: 5 -      - material: COAL_ORE -        weight: 3 -      - material: GRASS_BLOCK -        weight: 2 -      - material: IRON_ORE -      - material: GOLD_ORE -      - material: REDSTONE_ORE -      - material: EMERALD_ORE -      - material: LAPIS_ORE -      - material: DIAMOND_ORE -      - material: COBWEB +      - COBBLESTONE 5 +      - COAL_ORE 3 +      - GRASS_BLOCK 2 +      - IRON_ORE +      - GOLD_ORE +      - REDSTONE_ORE +      - EMERALD_ORE +      - LAPIS_ORE +      - DIAMOND_ORE +      - COBWEB    ore_blocks:      weight: 5      materials: -      - material: COAL_BLOCK -        weight: 4 -      - material: IRON_BLOCK -        weight: 3 -      - material: GOLD_BLOCK -        weight: 2 -      - material: REDSTONE_BLOCK -        weight: 2 -      - material: LAPIS_BLOCK -      - material: DIAMOND_BLOCK +      - COAL_BLOCK 4 +      - IRON_BLOCK 3 +      - GOLD_BLOCK 2 +      - REDSTONE_BLOCK 2 +      - LAPIS_BLOCK +      - DIAMOND_BLOCK    nether:      weight: 5      materials: -      - material: NETHERRACK -        weight: 6 -      - material: NETHER_BRICKS -        weight: 4 -      - material: NETHER_GOLD_ORE -        weight: 2 -      - material: NETHER_QUARTZ_ORE -        weight: 2 -      - material: CRIMSON_NYLIUM -      - material: WARPED_NYLIUM -      - material: CRACKED_NETHER_BRICKS -      - material: RED_NETHER_BRICKS -      - material: NETHER_WART_BLOCK -      - material: CRYING_OBSIDIAN -      - material: SHROOMLIGHT -      - material: BLACKSTONE -      - material: BASALT -      - material: SOUL_SAND +      - NETHERRACK 6 +      - NETHER_BRICKS 4 +      - NETHER_GOLD_ORE 2 +      - NETHER_QUARTZ_ORE 2 +      - CRIMSON_NYLIUM +      - WARPED_NYLIUM +      - CRACKED_NETHER_BRICKS +      - RED_NETHER_BRICKS +      - NETHER_WART_BLOCK +      - CRYING_OBSIDIAN +      - SHROOMLIGHT +      - BLACKSTONE +      - BASALT +      - SOUL_SAND    end:      weight: 5      materials: -      - material: END_STONE -        weight: 4 -      - material: END_STONE_BRICKS -        weight: 2 -      - material: PURPUR_BLOCK -        weight: 2 -      - material: PURPUR_PILLAR -      - material: OBSIDIAN -      - material: COBBLESTONE +      - END_STONE 4 +      - END_STONE_BRICKS 2 +      - PURPUR_BLOCK 2 +      - PURPUR_PILLAR +      - OBSIDIAN +      - COBBLESTONE    redstone:      weight: 4      materials: -      - material: REDSTONE_BLOCK -        weight: 2 -      - material: REDSTONE_LAMP -      - material: TARGET -      - material: SLIME_BLOCK -      - material: OBSERVER -      - material: DAYLIGHT_DETECTOR +      - REDSTONE_BLOCK 2 +      - REDSTONE_LAMP +      - TARGET +      - SLIME_BLOCK +      - OBSERVER +      - DAYLIGHT_DETECTOR    ocean:      weight: 4      materials: -      - material: PRISMARINE -        weight: 2 -      - material: DARK_PRISMARINE -      - material: PRISMARINE_BRICKS -      - material: PRISMARINE_BRICK_SLAB -      - material: BLUE_STAINED_GLASS -      - material: SEA_LANTERN -      - material: SPONGE -      - material: TUBE_CORAL_BLOCK -      - material: BRAIN_CORAL_BLOCK -      - material: BUBBLE_CORAL_BLOCK +      - PRISMARINE 2 +      - DARK_PRISMARINE +      - PRISMARINE_BRICKS +      - PRISMARINE_BRICK_SLAB +      - BLUE_STAINED_GLASS +      - SEA_LANTERN +      - SPONGE +      - TUBE_CORAL_BLOCK +      - BRAIN_CORAL_BLOCK +      - BUBBLE_CORAL_BLOCK    desert:      weight: 4      materials: -      - material: SANDSTONE -        weight: 2 -      - material: RED_SANDSTONE -        weight: 2 -      - material: CHISELED_SANDSTONE -      - material: SMOOTH_SANDSTONE -      - material: CUT_SANDSTONE -      - material: SANDSTONE_SLAB -      - material: RED_SANDSTONE_SLAB -      - material: RED_TERRACOTTA -      - material: ORANGE_TERRACOTTA -      - material: YELLOW_TERRACOTTA -      - material: TERRACOTTA +      - SANDSTONE 2 +      - RED_SANDSTONE 2 +      - CHISELED_SANDSTONE +      - SMOOTH_SANDSTONE +      - CUT_SANDSTONE +      - SANDSTONE_SLAB +      - RED_SANDSTONE_SLAB +      - RED_TERRACOTTA +      - ORANGE_TERRACOTTA +      - YELLOW_TERRACOTTA +      - TERRACOTTA    forest:      weight: 4      materials: -      - material: OAK_LEAVES -        weight: 2 -      - material: SPRUCE_LEAVES -        weight: 2 -      - material: ACACIA_LEAVES -        weight: 2 -      - material: OAK_LOG -      - material: SPRUCE_LOG -      - material: ACACIA_LOG -      - material: STRIPPED_OAK_LOG -      - material: STRIPPED_SPRUCE_LOG -      - material: STRIPPED_ACACIA_LOG -      - material: OAK_WOOD -      - material: SPRUCE_WOOD -      - material: ACACIA_WOOD +      - OAK_LEAVES 2 +      - SPRUCE_LEAVES 2 +      - ACACIA_LEAVES 2 +      - OAK_LOG +      - SPRUCE_LOG +      - ACACIA_LOG +      - STRIPPED_OAK_LOG +      - STRIPPED_SPRUCE_LOG +      - STRIPPED_ACACIA_LOG +      - OAK_WOOD +      - SPRUCE_WOOD +      - ACACIA_WOOD    jungle:      weight: 3      materials: -      - material: MOSSY_COBBLESTONE -        weight: 3 -      - material: COBBLESTONE -        weight: 2 -      - material: JUNGLE_LEAVES -        weight: 2 -      - material: JUNGLE_LOG -        weight: 2 -      - material: STRIPPED_JUNGLE_LOG -      - material: JUNGLE_WOOD -      - material: STRIPPED_JUNGLE_WOOD -      - material: JUNGLE_PLANKS -      - material: JUNGLE_SLAB +      - MOSSY_COBBLESTONE 3 +      - COBBLESTONE 2 +      - JUNGLE_LEAVES 2 +      - JUNGLE_LOG 2 +      - STRIPPED_JUNGLE_LOG +      - JUNGLE_WOOD +      - STRIPPED_JUNGLE_WOOD +      - JUNGLE_PLANKS +      - JUNGLE_SLAB    overworld:      weight: 3      materials: -      - material: DIRT -      - material: COARSE_DIRT -      - material: GRASS_BLOCK -      - material: DIRT_PATH -      - material: MYCELIUM -      - material: PODZOL -      - material: OAK_SLAB -      - material: BRICK_WALL -      - material: BRICK_STAIRS +      - DIRT +      - COARSE_DIRT +      - GRASS_BLOCK +      - GRASS_PATH +      - MYCELIUM +      - PODZOL +      - OAK_SLAB +      - BRICK_WALL +      - BRICK_STAIRS    terracotta:      weight: 3      materials: -      - material: PINK_TERRACOTTA -        weight: 2 -      - material: PURPLE_TERRACOTTA -        weight: 2 -      - material: GRAY_TERRACOTTA -        weight: 2 -      - material: BLUE_TERRACOTTA -        weight: 2 -      - material: LIGHT_BLUE_TERRACOTTA -        weight: 2 -      - material: WHITE_TERRACOTTA -        weight: 2 -      - material: BROWN_TERRACOTTA -        weight: 2 -      - material: GREEN_TERRACOTTA -        weight: 2 -      - material: YELLOW_TERRACOTTA -        weight: 2 -      - material: HONEYCOMB_BLOCK -        weight: 2 -      - material: WHITE_STAINED_GLASS +      - PINK_TERRACOTTA 2 +      - PURPLE_TERRACOTTA 2 +      - GRAY_TERRACOTTA 2 +      - BLUE_TERRACOTTA 2 +      - LIGHT_BLUE_TERRACOTTA 2 +      - WHITE_TERRACOTTA 2 +      - BROWN_TERRACOTTA 2 +      - GREEN_TERRACOTTA 2 +      - YELLOW_TERRACOTTA 2 +      - HONEYCOMB_BLOCK 2 +      - WHITE_STAINED_GLASS    glazed_terracotta:      weight: 3      materials: -      - material: PODZOL -        weight: 3 -      - material: YELLOW_GLAZED_TERRACOTTA -      - material: LIGHT_BLUE_GLAZED_TERRACOTTA -      - material: GRAY_GLAZED_TERRACOTTA +      - PODZOL 3 +      - YELLOW_GLAZED_TERRACOTTA +      - LIGHT_BLUE_GLAZED_TERRACOTTA +      - GRAY_GLAZED_TERRACOTTA    sticky:      weight: 3      materials: -      - material: WHITE_TERRACOTTA -        weight: 3 -      - material: BLUE_ICE -        weight: 3 -      - material: STONE_SLAB -        weight: 3 -      - material: SOUL_SOIL -        weight: 2 -      - material: GLOWSTONE -        weight: 2 -      - material: SLIME_BLOCK -      - material: HONEY_BLOCK +      - WHITE_TERRACOTTA 3 +      - BLUE_ICE 3 +      - STONE_SLAB 3 +      - SOUL_SOIL 2 +      - GLOWSTONE 2 +      - SLIME_BLOCK +      - HONEY_BLOCK    annoying_movement:      weight: 2      materials: -      - material: PACKED_ICE -        weight: 4 -      - material: JUKEBOX -        weight: 2 -      - material: TNT -        weight: 2 -      - material: LIGHT_BLUE_CONCRETE -        weight: 2 -      - material: GLASS -        weight: 2 -      - material: SMOOTH_STONE_SLAB -        weight: 2 -      - material: SOUL_SAND +      - PACKED_ICE 4 +      - JUKEBOX 2 +      - TNT 2 +      - LIGHT_BLUE_CONCRETE 2 +      - GLASS 2 +      - SMOOTH_STONE_SLAB 2 +      - SOUL_SAND    insanity:      weight: 2      materials: -      - material: OAK_PLANKS -      - material: OBSIDIAN -      - material: SPONGE -      - material: BEEHIVE -      - material: DRIED_KELP_BLOCK +      - OAK_PLANKS +      - OBSIDIAN +      - SPONGE +      - BEEHIVE +      - DRIED_KELP_BLOCK    glass:      weight: 1      materials: -      - material: GLASS -        weight: 30 -      - material: WHITE_STAINED_GLASS +      - GLASS 30 +      - WHITE_STAINED_GLASS -#  <NAME>: -#    weight: +#  <LAYER_NAME>: +#    weight: <LAYER_WEIGHT>  #    materials: -#      - material: -#        weight: +#      - <MATERIAL> <MATERIAL_WEIGHT> | 
