Interval notation in the config

Discussion in 'Plugin Development' started by Jnorr44, Jun 4, 2013.

Thread Status:
Not open for further replies.
  1. Offline

    Jnorr44

    Alright, so I have this in my config.yml:

    Code:
    wolfLevels:
        - [5, 5] 100%
        - [11, 11] 100%
        - [15, 15] 100%
        - [18, 18] 100%
    # Used to define wolf levels in the game. The brackets used are for mathematical interval notation.
    # Ex: - "[20, 23) 50%"
    # A '[' bracket makes the number given included, while a '(' bracket does not include the number shown.
    Here is the code I use to parse interval notation and the percentage:

    Code:
        public static Integer[] parseIntervalNotation(String line) {
            List<Integer> listLevels = new ArrayList<Integer>();
            int includingStart = line.indexOf("[");
            int notIncludingStart = line.indexOf("(");
            int includingEnd = line.indexOf("]");
            int notIncludingEnd = line.indexOf(")");
            boolean startIncludes = includingStart != -1;
            boolean endIncludes = includingEnd != -1;
            String[] integers = line.substring((startIncludes) ? includingStart : notIncludingStart, (endIncludes) ? includingEnd : notIncludingEnd).split(Pattern.quote(","));
            int start = Integer.parseInt(integers[0]);
            int end = Integer.parseInt(integers[1]);
            for (int i = start; i <= end; i++) {
                listLevels.add(i);
            }
            return (Integer[]) listLevels.toArray();
        }
     
        public static int parsePercentage(String line) {
            HashMap<Integer, Integer> digits = new HashMap<Integer, Integer>();
            int signIndex = line.indexOf("%");
            for (int i = 1; i <= 3; i++) {
                char beforeSign = line.charAt(signIndex - i);
                if (!Character.isDigit(beforeSign)) {
                    break;
                }
                digits.put((int) beforeSign, i - 1);
            }
            int percent = 0;
            for (Integer digit : digits.keySet()) {
                int zeros = digits.get(digit);
                percent += digit * Math.pow(10, zeros);
            }
            return percent;
        }
    Now, the problem should not be with that. As far as I can tell, it's actually with the snakeyaml parsing that CB uses.

    Error:
    Code:
    2013-06-04 18:17:22 [SEVERE] Cannot load plugins\Ablockalypse\config.yml
    org.bukkit.configuration.InvalidConfigurationException: while parsing a block collection
    in "<string>", line 43, column 6:
            - [5, 5] 100%
            ^
    expected <block end>, but found Scalar
    in "<string>", line 43, column 15:
            - [5, 5] 100%
                      ^
     
        at org.bukkit.configuration.file.YamlConfiguration.loadFromString(YamlConfiguration.java:55)
        at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:138)
        at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:105)
        at org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(YamlConfiguration.java:175)
        at org.bukkit.plugin.java.JavaPlugin.reloadConfig(JavaPlugin.java:117)
        at org.bukkit.plugin.java.JavaPlugin.getConfig(JavaPlugin.java:111)
        at com.github.enumerated.Setting.<init>(Setting.java:83)
        at com.github.enumerated.Setting.<clinit>(Setting.java:11)
        at com.github.Ablockalypse.update(Ablockalypse.java:143)
        at com.github.Ablockalypse.onEnable(Ablockalypse.java:162)
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:217)
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:457)
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:381)
        at org.bukkit.craftbukkit.v1_5_R2.CraftServer.loadPlugin(CraftServer.java:282)
        at org.bukkit.craftbukkit.v1_5_R2.CraftServer.enablePlugins(CraftServer.java:264)
        at net.minecraft.server.v1_5_R2.MinecraftServer.j(MinecraftServer.java:303)
        at net.minecraft.server.v1_5_R2.MinecraftServer.e(MinecraftServer.java:282)
        at net.minecraft.server.v1_5_R2.MinecraftServer.a(MinecraftServer.java:242)
        at net.minecraft.server.v1_5_R2.DedicatedServer.init(DedicatedServer.java:150)
        at net.minecraft.server.v1_5_R2.MinecraftServer.run(MinecraftServer.java:381)
        at net.minecraft.server.v1_5_R2.ThreadServerApplication.run(SourceFile:573)
    Caused by: while parsing a block collection
    in "<string>", line 43, column 6:
            - [5, 5] 100%
            ^
    expected <block end>, but found Scalar
    in "<string>", line 43, column 15:
            - [5, 5] 100%
                      ^
     
        at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockSequenceEntry.produce(ParserImpl.java:519)
        at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:161)
        at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:146)
        at org.yaml.snakeyaml.composer.Composer.composeSequenceNode(Composer.java:203)
        at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:158)
        at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:237)
        at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:160)
        at org.yaml.snakeyaml.composer.Composer.composeDocument(Composer.java:123)
        at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:106)
        at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:121)
        at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:480)
        at org.yaml.snakeyaml.Yaml.load(Yaml.java:399)
        at org.bukkit.configuration.file.YamlConfiguration.loadFromString(YamlConfiguration.java:53)
        ... 20 more
    So, I need some way to get the interval notation working, or some way to change the config to allow for multiple levels to be selected using very little writing. I would much prefer to use interval notation, since it is a mathematical standard.

    Any ideas anyone?
    Thanks
     
  2. Offline

    Ultimate_n00b

    Your code is a copy of your config? lol wut?
     
  3. Offline

    Jnorr44

    Nuts, copy/paste mistake haha. Fixing...
     
  4. Offline

    Ultimate_n00b

    wolfLevels:
    - '[5, 5] 100%'
    - '[11, 11] 100%'
    - '[15, 15] 100%'
    - '[18, 18] 100%'
    Try that, I think since you had spaces it wasn't working.
     
  5. Offline

    Jnorr44

    Didn't work, still in trouble on this one.
     
Thread Status:
Not open for further replies.

Share This Page