Configuration String reading problem

Discussion in 'Plugin Development' started by np15isntboss, Dec 1, 2013.

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

    np15isntboss

    Hello! Thanks for looking to help me. I am currently developing a plugin. It is going to be a private message plugin. So when the user uses /private <player> <message> It will send a message to the player provided. It will come up on the receiving player's screen as <sender>: <message>. I want to be able to allow the player to set that in the config file. I will then replace <sender> with the sender's name. The problem is that if you try to do this.getConfig().getString("from") it sends errors if the string contains any non alphabetic or numeric characters such as < or -. How would i get any characters from the config?

    Note: I will add the method that replaces color codes with ChatColors and <sender> with the sender after i get it to work.
    Code Examples:
    Usage of getConfig().getString():
    Code:java
    1. recipient.sendMessage(this.getConfig().getString("from") + message);


    Error in console:
    Code:
    [WARNING] Unexpected exception while parsing console command "private $console Hello"
    org.bukkit.command.CommandException: Unhandled exception executing command 'private' in plugin Tell v1.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46)
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:192)
        at org.bukkit.craftbukkit.v1_6_R3.CraftServer.dispatchCommand(CraftServer.java:528)
        at org.bukkit.craftbukkit.v1_6_R3.CraftServer.dispatchServerCommand(CraftServer.java:515)
        at net.minecraft.server.v1_6_R3.DedicatedServer.as(DedicatedServer.java:263)
        at net.minecraft.server.v1_6_R3.DedicatedServer.t(DedicatedServer.java:228)
        at net.minecraft.server.v1_6_R3.MinecraftServer.s(MinecraftServer.java:488)
        at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java:421)
        at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:583)
    Caused by: java.lang.NullPointerException
        at com.gmail.np15isntboss.Tell.Tell.onCommand(Tell.java:31)
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
        ... 8 more
    
     
  2. Offline

    M0n0clink

    np15isntboss

    This ?

    Code:java
    1. recipient.sendMessage("<" + this.getConfig().getString("from") + ">" + message);
    2.  
     
  3. Offline

    fireblast709

    np15isntboss What is line 31 in Tell.java? (a larger code snippet is preferred)
     
  4. Offline

    np15isntboss

    Sorry for not adding more code and I think I may have copied the wrong error message >.>

    Revised Code (hopefully enough this time :) ):

    Plugin Class:
    Code:java
    1. package com.gmail.np15isntboss.SimpleMessages;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.ChatColor;
    5. import org.bukkit.command.Command;
    6. import org.bukkit.command.CommandSender;
    7. import org.bukkit.entity.Player;
    8. import org.bukkit.plugin.PluginDescriptionFile;
    9. import org.bukkit.plugin.java.JavaPlugin;
    10.  
    11. public class SimpleMessages extends JavaPlugin
    12. {
    13.  
    14. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
    15. {
    16. if (cmd.getName().equalsIgnoreCase("private"))
    17. {
    18. if (args.length < 2)
    19. {
    20. sender.sendMessage(ChatColor.DARK_RED + "Usage: /private <player> <message>");
    21. return false;
    22. }
    23. processCommandPrivate(sender, args);
    24. return false;
    25. }
    26. return false;
    27. }
    28.  
    29. public void processCommandPrivate(CommandSender sender, String[] args)
    30. {
    31. Player recipient = Bukkit.getPlayer(args[0]);
    32. String message = "";
    33. for (int x = 0; x < args.length; x++)
    34. {
    35. if (x != 0)
    36. message += " " + args[x];
    37. }
    38. message = getColors(message);
    39. if (args[0].equalsIgnoreCase("$console"))
    40. getLogger().info(sender.getName() + ":" + message + " " + getConfig().getString("ending"));
    41. else
    42. recipient.sendMessage(this.getConfig().getString("from") + message);
    43. }
    44.  
    45. public String getColors(String input)
    46. {
    47. String output = input.replaceAll("&0", ChatColor.BLACK + "");
    48. output = output.replaceAll("&1", ChatColor.DARK_BLUE + "");
    49. output = output.replaceAll("&2", ChatColor.DARK_GREEN + "");
    50. output = output.replaceAll("&3", ChatColor.DARK_AQUA + "");
    51. output = output.replaceAll("&4", ChatColor.DARK_RED + "");
    52. output = output.replaceAll("&5", ChatColor.DARK_PURPLE + "");
    53. output = output.replaceAll("&6", ChatColor.GOLD + "");
    54. output = output.replaceAll("&7", ChatColor.GRAY + "");
    55. output = output.replaceAll("&8", ChatColor.DARK_GRAY + "");
    56. output = output.replaceAll("&9", ChatColor.BLUE + "");
    57.  
    58. output = output.replaceAll("&a", ChatColor.GREEN + "");
    59. output = output.replaceAll("&b", ChatColor.AQUA + "");
    60. output = output.replaceAll("&c", ChatColor.RED + "");
    61. output = output.replaceAll("&d", ChatColor.LIGHT_PURPLE + "");
    62. output = output.replaceAll("&e", ChatColor.YELLOW + "");
    63. output = output.replaceAll("&f", ChatColor.WHITE + "");
    64. output = output.replaceAll("&k", ChatColor.MAGIC + "");
    65. output = output.replaceAll("&l", ChatColor.BOLD + "");
    66. output = output.replaceAll("&m", ChatColor.STRIKETHROUGH + "");
    67. output = output.replaceAll("&n", ChatColor.UNDERLINE + "");
    68. output = output.replaceAll("&o", ChatColor.ITALIC + "");
    69. output = output.replaceAll("&r", ChatColor.RESET + "");
    70.  
    71. output = output.replaceAll("&A", ChatColor.GREEN + "");
    72. output = output.replaceAll("&B", ChatColor.AQUA + "");
    73. output = output.replaceAll("&C", ChatColor.RED + "");
    74. output = output.replaceAll("&D", ChatColor.LIGHT_PURPLE + "");
    75. output = output.replaceAll("&E", ChatColor.YELLOW + "");
    76. output = output.replaceAll("&F", ChatColor.WHITE + "");
    77. output = output.replaceAll("&K", ChatColor.MAGIC + "");
    78. output = output.replaceAll("&L", ChatColor.BOLD + "");
    79. output = output.replaceAll("&M", ChatColor.STRIKETHROUGH + "");
    80. output = output.replaceAll("&N", ChatColor.UNDERLINE + "");
    81. output = output.replaceAll("&o", ChatColor.ITALIC + "");
    82. output = output.replaceAll("&R", ChatColor.RESET + "");
    83. return output;
    84. }
    85.  
    86.  
    87. @Override
    88. public void onEnable()
    89. {
    90. PluginDescriptionFile pdf = this.getDescription();
    91. getLogger().info(pdf.getName() + " version " + pdf.getVersion() + " by " + pdf.getAuthors() + " has been enabled!");
    92. this.getConfig().options().copyDefaults(true);
    93. saveDefaultConfig();
    94. }
    95.  
    96. @Override
    97. public void onDisable()
    98. {
    99. PluginDescriptionFile pdf = this.getDescription();
    100. getLogger().info(pdf.getName() + " version " + pdf.getVersion() + " by " + pdf.getAuthors() + " has been disabled!");
    101. }
    102. }


    Config File:
    Code:
    from: &7<sender>:&6 
    Error Message (real this time):
    Code:
    31:07 [INFO] [SimpleMessages] SimpleMessages version 2.6 by [Np15isntboss] has been enabled!
    2013-12-02 16:31:07 [SEVERE] Cannot load plugins\SimpleMessages\config.yml
    org.bukkit.configuration.InvalidConfigurationException: mapping values are not allowed here
    in "<string>", line 13, column 18:
          from: <sender>:
                        ^
     
        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.gmail.np15isntboss.SimpleMessages.SimpleMessages.onEnable(SimpleMessages.java:92)
        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_6_R3.CraftServer.loadPlugin(CraftServer.java:284)
        at org.bukkit.craftbukkit.v1_6_R3.CraftServer.enablePlugins(CraftServer.java:266)
        at net.minecraft.server.v1_6_R3.MinecraftServer.l(MinecraftServer.java:315)
        at net.minecraft.server.v1_6_R3.MinecraftServer.f(MinecraftServer.java:292)
        at net.minecraft.server.v1_6_R3.MinecraftServer.a(MinecraftServer.java:252)
        at net.minecraft.server.v1_6_R3.DedicatedServer.init(DedicatedServer.java:152)
        at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java:393)
        at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:583)
    Caused by: mapping values are not allowed here
    in "<string>", line 13, column 18:
          from: <sender>:
                        ^
     
        at org.yaml.snakeyaml.scanner.ScannerImpl.fetchValue(ScannerImpl.java:733)
        at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:305)
        at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:179)
        at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockMappingKey.produce(ParserImpl.java:563)
        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.composeMappingNode(Composer.java:230)
        at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:160)
        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)
        ... 17 more
    2013-12-02 16:31:07 [SEVERE] Cannot load configuration from stream
    org.bukkit.configuration.InvalidConfigurationException: while scanning an anchor
    in "<string>", line 1, column 7:
        from: &7<sender>:&6
              ^
    expected alphabetic or numeric character, but found <(60)
    in "<string>", line 1, column 9:
        from: &7<sender>:&6
                ^
     
        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.YamlConfiguration.loadConfiguration(YamlConfiguration.java:202)
        at org.bukkit.plugin.java.JavaPlugin.reloadConfig(JavaPlugin.java:121)
        at org.bukkit.plugin.java.JavaPlugin.getConfig(JavaPlugin.java:111)
        at com.gmail.np15isntboss.SimpleMessages.SimpleMessages.onEnable(SimpleMessages.java:92)
        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_6_R3.CraftServer.loadPlugin(CraftServer.java:284)
        at org.bukkit.craftbukkit.v1_6_R3.CraftServer.enablePlugins(CraftServer.java:266)
        at net.minecraft.server.v1_6_R3.MinecraftServer.l(MinecraftServer.java:315)
        at net.minecraft.server.v1_6_R3.MinecraftServer.f(MinecraftServer.java:292)
        at net.minecraft.server.v1_6_R3.MinecraftServer.a(MinecraftServer.java:252)
        at net.minecraft.server.v1_6_R3.DedicatedServer.init(DedicatedServer.java:152)
        at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java:393)
        at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:583)
    Caused by: while scanning an anchor
    in "<string>", line 1, column 7:
        from: &7<sender>:&6
              ^
    expected alphabetic or numeric character, but found <(60)
    in "<string>", line 1, column 9:
        from: &7<sender>:&6
                ^
     
        at org.yaml.snakeyaml.scanner.ScannerImpl.scanAnchor(ScannerImpl.java:1169)
        at org.yaml.snakeyaml.scanner.ScannerImpl.fetchAnchor(ScannerImpl.java:782)
        at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:315)
        at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:179)
        at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockMappingValue.produce(ParserImpl.java:591)
        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.composeNode(Composer.java:133)
        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)
        ... 16 more
    fireblast709 M0n0clink Thanks for helping!
     
  5. Offline

    fireblast709

    np15isntboss : is a YAML character, try wrapping the whole thing in ''
    Code:
    from: '&7<sender>:&6'
     
  6. Offline

    M0n0clink

  7. Offline

    np15isntboss

    fireblast709 M0n0clink OMG. I am so stupid. :) Thanks for all your help again. If you ever need anything feel free to PM me.
     
Thread Status:
Not open for further replies.

Share This Page