Illegal Repitition

Discussion in 'Plugin Development' started by gomeow, Nov 12, 2012.

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

    gomeow

    Code:
    17:10:38 [SEVERE] Error occurred while enabling ServerNotify v1.0 (Is it up to date?)
    java.util.regex.PatternSyntaxException: Illegal repetition
    {players}
        at java.util.regex.Pattern.error(Pattern.java:1713)
        at java.util.regex.Pattern.closure(Pattern.java:2775)
        at java.util.regex.Pattern.sequence(Pattern.java:1889)
        at java.util.regex.Pattern.expr(Pattern.java:1752)
        at java.util.regex.Pattern.compile(Pattern.java:1460)
        at java.util.regex.Pattern.<init>(Pattern.java:1133)
        at java.util.regex.Pattern.compile(Pattern.java:823)
        at java.lang.String.replaceAll(String.java:2189)
        at me.gomeow.servernotify.servernotify.onEnable(servernotify.java:39)
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:217)
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:374)
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:381)
        at org.bukkit.craftbukkit.CraftServer.loadPlugin(CraftServer.java:270)
        at org.bukkit.craftbukkit.CraftServer.enablePlugins(CraftServer.java:252)
        at net.minecraft.server.MinecraftServer.j(MinecraftServer.java:310)
        at net.minecraft.server.MinecraftServer.e(MinecraftServer.java:289)
        at net.minecraft.server.MinecraftServer.a(MinecraftServer.java:248)
        at net.minecraft.server.DedicatedServer.init(DedicatedServer.java:141)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:390)
        at net.minecraft.server.ThreadServerApplication.run(SourceFile:818)

    that is the error. The point is for it to replace {players} if found with a list of the players, but I get an error

    Code:java
    1. @Override
    2. public void onEnable() {
    3. saveDefaultConfig();
    4. final Set<String> messagekeys = this.getConfig().getConfigurationSection("Message").getKeys(false);
    5. final ArrayList<String> messages = new ArrayList<String>();
    6. for(String messageline : messagekeys) {
    7. messages.add(this.getConfig().getString("Message."+messageline));
    8. }
    9. for(String messages2 : messages) {
    10. if(messages2.toUpperCase().contains("{PLAYERS}")) {
    11. Player[] online = getServer().getOnlinePlayers();
    12. ArrayList<String> names = new ArrayList<String>();
    13. for(Player player : online) {
    14. names.add(player.getDisplayName());
    15. }
    16. String players = new String();
    17. for(String str : names) {
    18. if(!(str == names.get(names.size() - 1))) {
    19. players = players + str + ", ";
    20. }
    21. else {
    22. players = players + str;
    23. }
    24. }
    25. String newmessage = messages2.toLowerCase().replaceAll("{players}", players);
    26. messages.set(names.indexOf(messages2), newmessage);
    27.  
    28. }
    29. }
    30. Integer interval = this.getConfig().getInt("Interval");
    31. getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
    32.  
    33. @Override
    34. public void run() {
    35. for(String line : messages) {
    36. System.out.println(line);
    37. }
    38.  
    39.  
    40. }
    41.  
    42. }, 0L, interval * 20);
    43. }
     
  2. Offline

    reesylou

    The problem is that { is a reserved character for regex expressions, and used to specifiy the number of repetitions of a character. By using that, the contains thinks you are trying to allow "PLAYERS" number of repetitions (and obviously "PLAYERS" is not an integer.

    Choose a different pattern matching character for your templated text than {
     
  3. Offline

    gomeow

    So, if I change that to something like ||PLAYERS||, it should work fine?
     
  4. Offline

    reesylou

  5. Offline

    gomeow

    Ok, that part is fixed, now I get an ArrayOutOfIndex on line 26 though
     
  6. Offline

    Timr

    Please please please use .equals() or .equalsIgnoreCase() to compare Strings.
     
  7. Offline

    gomeow

    Where in here?
     
  8. Offline

    Timr

    Code:java
    1. if(!(str == names.get(names.size() - 1))) {}
     
Thread Status:
Not open for further replies.

Share This Page