Solved ArrayIndexOutOfBoundException with my minigame plugin!

Discussion in 'Plugin Development' started by ostylk, Apr 5, 2014.

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

    ostylk

    Hey,
    I decided to make a minigame plugin.A BowBash minigame and started to make my Arena.java and the ArenaManager.java I make two methods
    Code:java
    1. saveArena(Arena a)
    and
    Code:java
    1. createArena(Location locRed, Location locBlue, String name)
    it returns the created arena!Now when I do this
    Code:java
    1. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
    2. Player p = (Player)sender;
    3. if(cmd.getName().equalsIgnoreCase("bb")){
    4. if(args.length == 0){
    5. return false;
    6. }else{
    7. if(args[0].equalsIgnoreCase("create")){
    8. [B]manager.saveArena(manager.createArena(p.getLocation(), locBlue, args[1]));[/B]
    9. return true;
    10. }
    11. if(args[0].equalsIgnoreCase("blau")){
    12. locBlue = new Location(p.getLocation().getWorld(), p.getLocation().getX(), p.getLocation().getY(), p.getLocation().getZ());
    13. }
    14. return false;
    15. }
    16. }
    17. return false;
    18. }
    I got an NullPointerException on the line 29(manager.saveArena(manager.createArena(p.getLocation(), locBlue, args[1])); )
    I post now all classes and the error message!Sorry for my english because nobody is perfekt :D!

    Arena.java
    Code:java
    1. package de.ki.ostylk.bowbashing;
    2.  
    3. import java.util.ArrayList;
    4. import java.util.List;
    5.  
    6. import org.bukkit.Location;
    7. import org.bukkit.entity.Player;
    8.  
    9. public class Arena {
    10. private String name;
    11. private Location locBlue;
    12. private Location locRed;
    13. private final int MAXPLAYER = 8;
    14. List<String> playersRed;
    15. List<String> playersBlue;
    16. public Arena(String name, Location locBlue, Location locRed){
    17. this.name = name;
    18. this.locBlue = locBlue;
    19. this.locRed = locRed;
    20. playersRed = new ArrayList<String>();
    21. playersBlue = new ArrayList<String>();
    22. }
    23. public String getName(){
    24. return name;
    25. }
    26. public Location getLocRed(){
    27. return locRed;
    28. }
    29. public Location getLocBlue(){
    30. return locBlue;
    31. }
    32. public int getMaxPlayer(){
    33. return MAXPLAYER;
    34. }
    35. public List<String> getRed(){
    36. return this.playersRed;
    37. }
    38. public List<String> getBlue(){
    39. return this.playersBlue;
    40. }
    41. public void addRed(Player p){
    42. this.playersRed.add(p.getName());
    43. }
    44. public void addBlue(Player p){
    45. this.playersBlue.add(p.getName());
    46. }
    47. }
    48.  


    ArenaManager.java
    Code:java
    1. package de.ki.ostylk.bowbashing;
    2.  
    3. import java.util.ArrayList;
    4. import java.util.HashMap;
    5. import java.util.List;
    6. import java.util.Map;
    7.  
    8. import org.bukkit.Bukkit;
    9. import org.bukkit.Location;
    10.  
    11.  
    12. public class ArenaManager {
    13. private static ArenaManager am;
    14. List<Arena> arenas = new ArrayList<Arena>();
    15. public Map<String, Location> locs = new HashMap<String, Location>();
    16. public ArenaManager(){}
    17. public static ArenaManager getManager(){
    18. if(am == null)
    19. am = new ArenaManager();
    20. return am;
    21. }
    22. public Arena createArena(Location locRed, Location locBlue, String name){
    23. Arena a = new Arena(name, locBlue, locRed);
    24. arenas.add(a);
    25. return a;
    26. }
    27. public void saveArena(Arena a){
    28. BowBash.cfg.set("Arena." + a.getName() + ".Red.X", a.getLocRed().getX());
    29. BowBash.cfg.set("Arena." + a.getName() + ".Red.Y", a.getLocRed().getY());
    30. BowBash.cfg.set("Arena." + a.getName() + ".Red.Z", a.getLocRed().getZ());
    31. BowBash.cfg.set("Arena." + a.getName() + ".Red.Welt", a.getLocRed().getWorld().getName());
    32.  
    33. BowBash.cfg.set("Arena." + a.getName() + ".Blue.X", a.getLocBlue().getX());
    34. BowBash.cfg.set("Arena." + a.getName() + ".Blue.Y", a.getLocBlue().getY());
    35. BowBash.cfg.set("Arena." + a.getName() + ".Blue.Z", a.getLocBlue().getZ());
    36. BowBash.cfg.set("Arena." + a.getName() + ".Blue.Welt", a.getLocBlue().getWorld().getName());
    37.  
    38. BowBash.cfg.set("Arena." + a.getName() + ".Name", a.getName());
    39. }
    40. public void loadArenas(){
    41. for(String name : BowBash.cfg.getConfigurationSection("Arena").getKeys(false)){
    42.  
    43. String arenaName = BowBash.cfg.getString("Arena." + name + ".Name");
    44.  
    45.  
    46. int xRed = BowBash.cfg.getInt("Arena." + name + ".Red.X");
    47. int yRed = BowBash.cfg.getInt("Arena." + name + ".Red.Y");
    48. int zRed = BowBash.cfg.getInt("Arena." + name + ".Red.Z");
    49. String weltRot = BowBash.cfg.getString("Arena." + name + "Red.Welt");
    50. Location locRed = new Location(Bukkit.getWorld(weltRot), xRed, yRed, zRed);
    51.  
    52. int xBlue = BowBash.cfg.getInt("Arena." + name + ".Blue.X");
    53. int yBlue = BowBash.cfg.getInt("Arena." + name + ".Blue.Y");
    54. int zBlue = BowBash.cfg.getInt("Arena." + name + ".Blue.Z");
    55. String weltBlau = BowBash.cfg.getString("Arena." + name + "Blue.Welt");
    56. Location locBlue = new Location(Bukkit.getWorld(weltBlau), xBlue, yBlue, zBlue);
    57.  
    58. Arena a;
    59. a = new Arena(arenaName, locBlue, locRed);
    60. arenas.add(a);
    61. }
    62. }
    63. }
    64.  


    BowBash.java
    Code:java
    1. package de.ki.ostylk.bowbashing;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.Location;
    5. import org.bukkit.command.Command;
    6. import org.bukkit.command.CommandSender;
    7. import org.bukkit.configuration.file.FileConfiguration;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.plugin.java.JavaPlugin;
    10.  
    11. public class BowBash extends JavaPlugin{
    12. static FileConfiguration cfg;
    13. Location locBlue;
    14. private ArenaManager manager = ArenaManager.getManager();
    15. public void onEnable(){
    16. manager.loadArenas();
    17. this.saveConfig();
    18. }
    19. public void onDisable(){
    20. this.saveConfig();
    21. }
    22. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
    23. Player p = (Player)sender;
    24. if(cmd.getName().equalsIgnoreCase("bb")){
    25. if(args.length == 0){
    26. return false;
    27. }else{
    28. if(args[0].equalsIgnoreCase("create")){
    29. manager.saveArena(manager.createArena(p.getLocation(), locBlue, args[1]));
    30. return true;
    31. }
    32. if(args[0].equalsIgnoreCase("blau")){
    33. locBlue = new Location(p.getLocation().getWorld(), p.getLocation().getX(), p.getLocation().getY(), p.getLocation().getZ());
    34. }
    35. return false;
    36. }
    37. }
    38. return false;
    39. }
    40. }
    41.  

    if needed the plugin.yml

    Code:
    name: BowBashing
    author: ostylk
    version: 1.0
    main: de.ki.ostylk.bowbashing.BowBash
     
    commands:
      bb:
        description: Hauptkommando
        usage: /bb <arg> <operation>
    And the Exception
    Code:
    [08:47:56 ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'bb'
    in plugin BowBashing v1.0
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[cra
    ftbukkit.jar:git-Bukkit-1.7.2-R0.2-35-gc449391-b3004jnks]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:19
    9) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-35-gc449391-b3004jnks]
            at org.bukkit.craftbukkit.v1_7_R1.CraftServer.dispatchCommand(CraftServe
    r.java:543) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-35-gc449391-b3004jnks]
            at net.minecraft.server.v1_7_R1.PlayerConnection.handleCommand(PlayerCon
    nection.java:932) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-35-gc449391-b3004jnks]
            at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java
    :814) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-35-gc449391-b3004jnks]
            at net.minecraft.server.v1_7_R1.PacketPlayInChat.a(PacketPlayInChat.java
    :28) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-35-gc449391-b3004jnks]
            at net.minecraft.server.v1_7_R1.PacketPlayInChat.handle(PacketPlayInChat
    .java:47) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-35-gc449391-b3004jnks]
            at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:146
    ) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-35-gc449391-b3004jnks]
            at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [craf
    tbukkit.jar:git-Bukkit-1.7.2-R0.2-35-gc449391-b3004jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:6
    55) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-35-gc449391-b3004jnks]
            at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:2
    50) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-35-gc449391-b3004jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:5
    45) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-35-gc449391-b3004jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java
    :457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-35-gc449391-b3004jnks]
            at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:6
    17) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-35-gc449391-b3004jnks]
    Caused by: java.lang.NullPointerException
            at de.ki.ostylk.bowbashing.ArenaManager.saveArena(ArenaManager.java:28)
    ~[?:?]
            at de.ki.ostylk.bowbashing.BowBash.onCommand(BowBash.java:29) ~[?:?]
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[cra
    ftbukkit.jar:git-Bukkit-1.7.2-R0.2-35-gc449391-b3004jnks]
            ... 13 more
     
  2. Offline

    CoderMusgrove

    Would you please post the NullPointerException error message?
     
  3. Offline

    ostylk

    Oh I forgot xD!It's on the first post!

    Anyone know it?

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 7, 2016
  4. Offline

    deivisxm

    ostylk I dont think you declared BowBash in your arena manager. atleast i dont see it
     
  5. Offline

    ostylk

    @deivisxmWhat do you mean with declare?I got an ArrayIndexOutOfBoundException!
     
  6. Offline

    Giant

    your issue as actually here:
    Code:
    BowBash.cfg.set("Arena." + a.getName() + ".Red.X", a.getLocRed().getX());
    Which I suspect is related to "BowBash.cfg" never having been set.

    He is accessing BowBash statically, it does not need to be declared in the ArenaManager class.
     
    CoderMusgrove likes this.
  7. Offline

    deivisxm

    @ostylkin your error i see null pointer exception. i mean for example BowBash bb = new BowBash(); . Altrough since BowBash is main class i would rather do: private final BowBash bb;
     
  8. Offline

    BillyGalbreath

    BowBash.cfg.set("Arena." + a.getName() + ".Red.X", a.getLocRed().getX());

    Try logging to console that a.getLocRed() to see if its null. I suspect that your error is trying to .getX() on a null object.
     
  9. Offline

    Blackveil

    manager.saveArena(manager.createArena(p.getLocation(), locBlue, args[1]));
    How about you try to use manager.createArena() before you use manager.saveArena(), now I don't know for sure, but I'm thinking you're getting your NullPointerException because you are saving AND creating an arena at the same time, these should be done seperately in my opinion.
     
  10. Offline

    ostylk

    Blackveil BillyGalbreath deivisxm Giant It works! I gave to the ArenaManager class the bowbash class as a reference

    Code:java
    1. public static ArenaManager getManager(BowBash instance){
    2. if(am == null)
    3. am = new ArenaManager();
    4. plugin = instance;
    5. return am;
    6. }

    And replaced all BowBash.cfg with plugin.cfg! Then I wrote in the onEnable() method
    Code:java
    1. cfg = getConfig();
    And in the onCommand method I saved the Arena object in a variable "a" and saved this!
    Code:java
    1. Arena a = manager.createArena(p.getLocation(), locBlue, args[1]);
    2. manager.saveArena(a);

    Now it works! Thx to all!
     
Thread Status:
Not open for further replies.

Share This Page