Solved IllegalArgumentsException

Discussion in 'Plugin Development' started by WesJD, Dec 6, 2014.

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

    WesJD

    Ok, so, I've been working on a plugin recently. I ran into this problem though still haven't figured out what's wrong? It's currently giving me the error that "n must be positive." Thing is, there is no "n" variable nor would/is it negative.

    This is what the stacktrace leads me to:

    Code:java
    1. public Player randomBluePlayer() {
    2. Player picked = tManager.blue.get(r.nextInt(tManager.blue.size()));
    3.  
    4. return picked;
    5. }
    6.  
    7. public Player randomRedPlayer() {
    8. Player picked = tManager.red.get(r.nextInt(tManager.red.size()));
    9.  
    10. return picked;
    11. }
     
  2. Offline

    Skionz

    WesJD n is the parameter in Random#nextInt()
    This is part of the source for the nextInt method
    Code:
    if (n <= 0)
        throw new IllegalArgumentException("n must be positive");
    So if your maps size is equal to 0 then the exception will be thrown.
     
    WesJD likes this.
  3. Offline

    WesJD

    Skionz Thing is, both map's size is equal to 1 or more...
     
  4. Offline

    Skionz

    WesJD Can your post the relevant classes?
     
  5. Offline

    WesJD

    Skionz
    Code:java
    1. kage me.Wes.bombattack;
    2.  
    3. import java.util.ArrayList;
    4. import java.util.Arrays;
    5. import java.util.List;
    6. import java.util.Random;
    7.  
    8. import org.bukkit.Bukkit;
    9. import org.bukkit.ChatColor;
    10. import org.bukkit.entity.Player;
    11. import org.bukkit.event.EventHandler;
    12. import org.bukkit.event.Listener;
    13. import org.bukkit.event.player.PlayerJoinEvent;
    14. import org.bukkit.event.player.PlayerQuitEvent;
    15.  
    16. public class TeamManager implements Listener {
    17.  
    18. List<Player> red = new ArrayList<Player>();
    19. List<Player> blue = new ArrayList<Player>();
    20. private Random r = new Random();
    21.  
    22. public void clearTeams() {
    23. red.clear();
    24. blue.clear();
    25. for(Player online : Bukkit.getOnlinePlayers()) {
    26. online.setPlayerListName(ChatColor.RED + online.getName());
    27. }
    28. }
    29.  
    30. @EventHandler
    31. public void onJoin(PlayerJoinEvent e) {
    32. Player p = e.getPlayer();
    33. p.sendMessage(blue.size() + " - " + red.size());
    34. if(red.size() > blue.size()) {
    35. blue.add(p);
    36. p.setPlayerListName(ChatColor.BLUE + p.getName());
    37. } else if(red.size() < blue.size()) {
    38. p.setPlayerListName(ChatColor.RED + p.getName());
    39. red.add(p);
    40. } else if(red.size() == blue.size()) {
    41. List<String> teams = Arrays.asList("RED", "BLUE");
    42.  
    43. String team = teams.get(r.nextInt(teams.size()));
    44.  
    45. if(team.equals("RED")) {
    46. red.add(p);
    47. p.setPlayerListName(ChatColor.RED + p.getName());
    48. } else if(team.equals("BLUE")) {
    49. p.setPlayerListName(ChatColor.BLUE + p.getName());
    50. blue.add(p);
    51. }
    52. }
    53. }
    54.  
    55. @EventHandler
    56. public void onLeave(PlayerQuitEvent e) {
    57. Player p = e.getPlayer();
    58. if(red.contains(p.getName())) {
    59. red.remove(p.getName());
    60. p.setPlayerListName(ChatColor.GRAY + p.getName());
    61. } else if(blue.contains(p.getName())) {
    62. blue.remove(p.getName());
    63. p.setPlayerListName(ChatColor.GRAY + p.getName());
    64. }
    65. }
    66. }
     
  6. Offline

    mythbusterma

    WesJD

    I would suggest adding debug statements to your code right before it executes that erroring line, to make certain that the teams are the size you're expecting.
     
  7. Offline

    WesJD

    mythbusterma
    Will do.

    EDIT: Hmm, gave me 0. Thing is, I made the debug messages on login too, and they gave me a correct value?

    Edit 2: I think I know the exact problem, it's creating a new instance of tManager.
     
Thread Status:
Not open for further replies.

Share This Page