Solved Custom /msg plugin - Internal error upon typing only /msg. Please help!

Discussion in 'Plugin Development' started by redcanoe, Aug 19, 2014.

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

    redcanoe

    Hey bukkit folks,

    I am trying to make my own custom /msg plugin (well I already have, but I'm trying to fix it up now.)

    Upon typing /msg or the alias /m, you see an internal-error in game. Why is this code not working? It should say "Usage: blah blah" like it does in the code.

    Thanks in advance!

    Code:java
    1. int i;
    2. if ((commandLabel.equalsIgnoreCase("m")) || (commandLabel.equals("msg")))
    3. {
    4. Player r = Bukkit.getServer().getPlayer(args[0]);
    5. if (args.length == 0)
    6. {
    7. p.sendMessage(ChatColor.GOLD + "[ArcaneMessage]" + ChatColor.WHITE + " Usage: /msg <player> <message>");
    8. return true;
    9. }
    10. else if (args.length == 1)
    11. {
    12. p.sendMessage(ChatColor.GOLD + "[ArcaneMessage]" + ChatColor.WHITE + " You must enter a message!");
    13. }
    14. else if (r != null)
    15. {
    16. String message = "";
    17. for (i = 1; i < args.length; i++) {
    18. message = message + args[i] + " ";
    19. }
    20. p.sendMessage(ChatColor.GOLD + "[To: " + r.getName() + "] " + ChatColor.GRAY + message);
    21. r.sendMessage(ChatColor.GOLD + "[From: " + p.getName() + "] " + ChatColor.GRAY + message);[/i]
     
  2. Offline

    SpaceManiac

    You don't check if args.length == 0 until after you've already tried to access args[0]. If the condition is true you've already errored out, if it's false nothing happens. You have to put the check before you access args.
     
  3. Offline

    redcanoe

    SpaceManiac pardon my ignorance, but how do I do that? I moved the if args.length == 0 all around the code and it didn't do anything for me.
     
  4. Offline

    _Filip

  5. Offline

    Konato_K

    Move Player r = Bukkit.getServer().getPlayer(args[0]); AFTER you know the length is not 0, you can even put it outse the if-else, so you don't need to do it in args==1 and r!=null
    Code:java
    1. if (args.length == 0)
    2. { p.sendMessage(ChatColor.GOLD + "[ArcaneMessage]" + ChatColor.WHITE + " Usage: /msg <player> <message>");
    3. return true;
    4. }
    5. Player r = Bukkit.getServer().getPlayer(args[0]);
    6. if (args.length == 1)
    7. { p.sendMessage(ChatColor.GOLD + "[ArcaneMessage]" + ChatColor.WHITE + " You must enter a message!");
    8. }
     
  6. Offline

    DamnHippo

    redcanoe, Here is my custom "/msg"

    Code:java
    1. Player player = (Player) sender;
    2. if (cmd.getName().equalsIgnoreCase("msg")) {
    3. if (args.length < 2) {
    4. player.sendMessage("§cUsage: /msg (Player) (Msg)");
    5. return true;
    6. }
    7. if (Main.chatList.contains(player.getName())){
    8. player.sendMessage("§cYou can't use '/msg' while muted.");
    9. return true;
    10. }
    11. String pName = args[0];
    12. @SuppressWarnings("deprecation")
    13. Player target = Bukkit.getPlayer(pName);
    14. if (target == null) {
    15. player.sendMessage("§cPlayer §4" + args[0]
    16. + " §cwas not found.");
    17. return true;
    18. } else {
    19. String message = "";
    20. for (int i = 1; i < args.length; i++) {
    21. message = message + (i > 1 ? " " : "") + args[i];
    22.  
    23. }
    24. player.sendMessage("§9[MSG] To: §f" + target.getName() + "§9: §7" + message);
    25. target.sendMessage("§e[MSG] From: §f" + player.getName() + "§e: §7" + message);
    26. return true;
    27. }
    28. }
    29. return false;
    30. }
    31. }[/i]


    Feel free to edit it to how you wan't it to look.
     
  7. Offline

    redcanoe

    Konato_K, exactly what I needed, a little bit of hand holding.

    Thanks a lot!
     
Thread Status:
Not open for further replies.

Share This Page