Solved NullPointerException on getData();

Discussion in 'Spigot Plugin Development' started by darkshadow22mc, Jun 1, 2016.

Thread Status:
Not open for further replies.
  1. That is completely fine, but your "Methods" are just copying and pasting stuff randomly, without really understanding what any of it does.

    I am just saying it will be much faster (and easier) for you to find a guide to java basics and good practices and read up on it, instead of asking for help for every little thing here.
     
  2. I've asked a total of 6 times and I've helped upon 20. Are you kidding me?

    EDIT: Anyways, this is going off-topic. Could someone tell me a solution (in my opinion the best way of learning) instead of tell me "learn Java"?
     
  3. Small things like permissions and ChatColors can just be factored out as variables, leaving a huge amount of duplicate code, which can be extracted into (f.e) a class with some constructor parameters.

    And the API isn't bad, it's likely a mistake you made after altering the code shown.

    As for your issue, first clean up your code, then pop in some debug (printing stuff to your log) and figure out what is null (you already got a line number, so debug variables and returned values). Then debug what should be initialising that (returned) variable, and what's leading to it not being initialised.

    The issue at hand isn't terribly hard to spot, but simply telling you won't teach you any debugging either :p.
     
  4. Could someone help me?
     
  5. Several people told you how to easily fix it, you just want to make zero effort and get spoonfed solutions. That will not work when you move on to stuff beyond simple beginner projects.
     
  6. At the end I've developed th
    Code (Text):
    package perks;

    import java.util.Arrays;
    import java.util.List;

    import net.md_5.bungee.api.ChatColor;

    import org.bukkit.Bukkit;
    import org.bukkit.Material;
    import org.bukkit.entity.Player;
    import org.bukkit.event.inventory.ClickType;
    import org.bukkit.inventory.Inventory;

    import com.colonelhedgehog.menuapi.components.ActionListener;
    import com.colonelhedgehog.menuapi.components.Coordinates;
    import com.colonelhedgehog.menuapi.components.Menu;
    import com.colonelhedgehog.menuapi.components.MenuObject;

    import core.Nexus;

    public class ChatColorMethods {
       
        Nexus nexus;
       
        public Menu menu;
        public Inventory inventory;
        public String[] permissions = new String[15];
        public MenuObject[] items = new MenuObject[15];
        public String[] items_name = new String[15];
        public Coordinates[] items_coordinates = new Coordinates[15];
       
        public void createInventory(Player p){

            inventory = Bukkit.createInventory(p, 54, "§3§lChatColor Selector");
            menu = new Menu(inventory);
           
        }
       
        public boolean getPermission(Player p, int colorcode){
            permissions[0] = "odin.cc.dark_blue";
            permissions[1] = "odin.cc.dark_green";
            permissions[2] = "odin.cc.dark_aqua";
            permissions[3] = "odin.cc.dark_red";
            permissions[4] = "odin.cc.dark_purple";
            permissions[5] = "odin.cc.gold";
            permissions[6] = "odin.cc.blue";
            permissions[7] = "odin.cc.green";
            permissions[8] = "odin.cc.aqua";
            permissions[9] = "odin.cc.red";
            permissions[10] = "odin.cc.purple";
            permissions[11] = "odin.cc.yellow";
            permissions[12] = "odin.cc.white";
            permissions[13] = "odin.cc.reset";
           
            if(p.hasPermission(permissions[colorcode]) || p.isOp()){
                return true;
            }else{
                return false;
            }
        }
        public void setMenuItem(Player p, Material icon, byte data ,String name, int x, int y){
            int idItem = 0;
            int idCoord = 0;
            int idName = 0;
            for(int i = 0; i <= 13; i++){
                if(items_name[i] != null){
                    idName = i;
                    break;
                }
            }
            for(int i = 0; i <= 13; i++){
                if(items[i] != null){
                    idItem = i;
                }
            }
            for(int i = 0; i <= 13; i++){
                if(items_coordinates[i] != null){
                    idCoord = i;
                    break;
                }
            }
            items_name[idName] = name;
            List<String> lore = null;
            for(int i = 0; i <= permissions.length; i++){
                if(getPermission(p, i)){
                    lore = Arrays.asList("§8Left click to change your Chat Color.");
                }else{
                    lore = Arrays.asList("§cYou don't have permission to this Chat Color.");
                }
            }
            items[idItem] = new MenuObject(icon, data, name, lore);
            items_coordinates[idCoord] = new Coordinates(menu, x, y);
            menu.setMenuObjectAt(items_coordinates[idCoord], items[idItem]);
        }
        public void resetData(Player p){
            nexus.getData().getStringList("colors.dark_blue").remove(p.getName());
            nexus.getData().getStringList("colors.dark_green").remove(p.getName());
            nexus.getData().getStringList("colors.dark_aqua").remove(p.getName());
            nexus.getData().getStringList("colors.dark_red").remove(p.getName());
            nexus.getData().getStringList("colors.dark_purple").remove(p.getName());
            nexus.getData().getStringList("colors.gold").remove(p.getName());
            nexus.getData().getStringList("colors.blue").remove(p.getName());
            nexus.getData().getStringList("colors.green").remove(p.getName());
            nexus.getData().getStringList("colors.aqua").remove(p.getName());
            nexus.getData().getStringList("colors.red").remove(p.getName());
            nexus.getData().getStringList("colors.purple").remove(p.getName());
            nexus.getData().getStringList("colors.yellow").remove(p.getName());
            nexus.getData().getStringList("colors.white").remove(p.getName());
            nexus.saveData();
        }
        public void executeChange(Player p){
           
            menu.openForPlayer(p);
            for(int i = 0; i <= items.length; i++){
                if(items[i] != null){
                    items[i].setActionListener(new ActionListener() {
                        @Override
                        public void onClick(ClickType click, MenuObject menuobject, Player p) {
                           
                            if(click == ClickType.LEFT){
                                int a = 1;
                                if(menuobject.toItemStack().getItemMeta().getDisplayName().equalsIgnoreCase(items_name[a])){
                                    if(getPermission(p, a)){
                                        if(permissions[a] == permissions[0]){
                                            nexus.getData().getStringList("colors.dark_blue").add(p.getName());
                                            resetData(p);
                                        }else if(permissions[a] == permissions[1]){
                                            nexus.getData().getStringList("colors.dark_green").add(p.getName());
                                            resetData(p);
                                        }else if(permissions[a] == permissions[2]){
                                            nexus.getData().getStringList("colors.dark_aqua").add(p.getName());
                                            resetData(p);
                                        }else if(permissions[a] == permissions[3]){
                                            nexus.getData().getStringList("colors.dark_red").add(p.getName());
                                            resetData(p);
                                        }else if(permissions[a] == permissions[4]){
                                            nexus.getData().getStringList("colors.dark_purple").add(p.getName());
                                            resetData(p);
                                        }else if(permissions[a] == permissions[5]){
                                            nexus.getData().getStringList("colors.gold").add(p.getName());
                                            resetData(p);
                                        }else if(permissions[a] == permissions[6]){
                                            nexus.getData().getStringList("colors.blue").add(p.getName());
                                            resetData(p);
                                        }else if(permissions[a] == permissions[7]){
                                            nexus.getData().getStringList("colors.green").add(p.getName());
                                            resetData(p);
                                        }else if(permissions[a] == permissions[8]){
                                            nexus.getData().getStringList("colors.aqua").add(p.getName());
                                            resetData(p);
                                        }else if(permissions[a] == permissions[9]){
                                            nexus.getData().getStringList("colors.red").add(p.getName());
                                            resetData(p);
                                        }else if(permissions[a] == permissions[10]){
                                            nexus.getData().getStringList("colors.purple").add(p.getName());
                                            resetData(p);
                                        }else if(permissions[a] == permissions[11]){
                                            nexus.getData().getStringList("colors.yellow").add(p.getName());
                                            resetData(p);
                                        }else if(permissions[a] == permissions[12]){
                                            nexus.getData().getStringList("colors.white").add(p.getName());
                                            resetData(p);
                                        }else if(permissions[a] == permissions[13]){
                                            resetData(p);
                                        }
                                        nexus.saveData();
                                    }else{
                                        p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cYou don't have permissions. Buy it at&6 http://odinserver.enjin.com/shop/"));
                                    }
                                }
                                a++;
                            }
                       
                        }
                    });
                }else{
                    break;
                }
               
            }
           
        }
       
    }
     
    With my own ways, with my knoledges. Could you tell me the why of this error?

    Code (Text):
    [22:20:13 ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'cc'
    in plugin OdiNServer v1.0
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spi
    got-1.8.3.jar:git-Spigot-15fa8e1-17a3db7]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:14
    1) ~[spigot-1.8.3.jar:git-Spigot-15fa8e1-17a3db7]
            at org.bukkit.craftbukkit.v1_8_R1.CraftServer.dispatchCommand(CraftServe
    r.java:646) ~[spigot-1.8.3.jar:git-Spigot-15fa8e1-17a3db7]
            at net.minecraft.server.v1_8_R1.PlayerConnection.handleCommand(PlayerCon
    nection.java:1115) [spigot-1.8.3.jar:git-Spigot-15fa8e1-17a3db7]
            at net.minecraft.server.v1_8_R1.PlayerConnection.a(PlayerConnection.java
    :950) [spigot-1.8.3.jar:git-Spigot-15fa8e1-17a3db7]
            at net.minecraft.server.v1_8_R1.PacketPlayInChat.a(PacketPlayInChat.java
    :26) [spigot-1.8.3.jar:git-Spigot-15fa8e1-17a3db7]
            at net.minecraft.server.v1_8_R1.PacketPlayInChat.a(PacketPlayInChat.java
    :53) [spigot-1.8.3.jar:git-Spigot-15fa8e1-17a3db7]
            at net.minecraft.server.v1_8_R1.PacketHandleTask.run(SourceFile:13) [spi
    got-1.8.3.jar:git-Spigot-15fa8e1-17a3db7]
            at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [
    ?:1.8.0_91]
            at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_91]
            at net.minecraft.server.v1_8_R1.MinecraftServer.z(MinecraftServer.java:6
    96) [spigot-1.8.3.jar:git-Spigot-15fa8e1-17a3db7]
            at net.minecraft.server.v1_8_R1.DedicatedServer.z(DedicatedServer.java:3
    16) [spigot-1.8.3.jar:git-Spigot-15fa8e1-17a3db7]
            at net.minecraft.server.v1_8_R1.MinecraftServer.y(MinecraftServer.java:6
    34) [spigot-1.8.3.jar:git-Spigot-15fa8e1-17a3db7]
            at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java
    :537) [spigot-1.8.3.jar:git-Spigot-15fa8e1-17a3db7]
            at java.lang.Thread.run(Unknown Source) [?:1.8.0_91]
    Caused by: java.lang.IllegalArgumentException: Permission name cannot be null
            at org.bukkit.permissions.PermissibleBase.isPermissionSet(PermissibleBas
    e.java:50) ~[spigot-1.8.3.jar:git-Spigot-15fa8e1-17a3db7]
            at ru.tehkode.permissions.bukkit.regexperms.PermissiblePEX.hasPermission
    (PermissiblePEX.java:135) ~[?:?]
            at org.bukkit.craftbukkit.v1_8_R1.entity.CraftHumanEntity.hasPermission(
    CraftHumanEntity.java:102) ~[spigot-1.8.3.jar:git-Spigot-15fa8e1-17a3db7]
            at perks.ChatColorMethods.getPermission(ChatColorMethods.java:55) ~[?:?]

            at perks.ChatColorMethods.setMenuItem(ChatColorMethods.java:85) ~[?:?]
            at perks.ChatColorCommand.onCommand(ChatColorCommand.java:31) ~[?:?]
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spi
    got-1.8.3.jar:git-Spigot-15fa8e1-17a3db7]
            ... 14 more
    And yes, I know that it's because a permission name can't be null. But in my code I've prepared the Index to the max. amount of permissions required, so it can't be the problem. I hope you understand that I don't know how to fix this problem.
     
  7. permissions is a String[15], it only has entries 0 through 13 initialized.

    Arrays are not like lists, their size is fixed unless you reassign them and all objects in the array are initialized to null if no initializer-list is provided.

    An initializer-list is like:
    Code (Java):
    String[] strings = new String[]
        {
            "one",
            "two",
            "potato"
        };
        // this creates a new array of strings, length 3, with each value initialized.
     
    When to use arrays, arraylists, or hashtables:

    Arrays are good for fixed-sized data, when you need to store stuff that will not change very much - they take up less memory than lists

    ArrayLists (and basic Lists) support adding and removing entries to change their length, they are just an array internally, which is copied to a twice-as-big array if it run out of room. Use these if you need to loop over data a lot, and add/remove entries.

    HashMap and HashSet are good for looking up specific pieces of data, but not as good for looping over the whole contents. Use these for stuff like storing player information that needs to be retrieved a lot.

    This explains in more detail, and is very helpful for optimizing the speed of your data storage.
    http://stackoverflow.com/questions/21974361/what-java-collection-should-i-use
     
  8. Thanks, but at the end it was just a confusion with < and >. Now I have a strange error that doesn't detects the click. I can't understand why isn't working. Also the console doesn't throws any stack trace. Should I use the classical getServer().getConsoleSender().sendMessage("WORK"); ?


    Code (Text):
    public void executeChange(Player p){
           
            menu.openForPlayer(p);
            for(int i = 0; i <= items.length; i++){
                int x = i;
                if(items[i] != null){
                    items[i].setActionListener(new ActionListener() {
                        @Override
                        public void onClick(ClickType click, MenuObject menuobject, Player p) {
                           
                            if(click == ClickType.LEFT){
                                if(menuobject.toItemStack().getItemMeta().getDisplayName() == items_name[x]){
                                    if(getPermission(p, x)){
                                        if(permissions[x] == permissions[0]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.dark_blue").add(p.getName());
                                        }else if(permissions[x] == permissions[1]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.dark_green").add(p.getName());
                                        }else if(permissions[x] == permissions[2]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.dark_aqua").add(p.getName());
                                        }else if(permissions[x] == permissions[3]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.dark_red").add(p.getName());
                                        }else if(permissions[x] == permissions[4]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.dark_purple").add(p.getName());
                                        }else if(permissions[x] == permissions[5]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.gold").add(p.getName());
                                        }else if(permissions[x] == permissions[6]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.blue").add(p.getName());
                                        }else if(permissions[x] == permissions[7]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.green").add(p.getName());
                                        }else if(permissions[x] == permissions[8]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.aqua").add(p.getName());
                                        }else if(permissions[x] == permissions[9]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.red").add(p.getName());
                                        }else if(permissions[x] == permissions[10]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.purple").add(p.getName());
                                        }else if(permissions[x] == permissions[11]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.yellow").add(p.getName());
                                        }else if(permissions[x] == permissions[12]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.white").add(p.getName());
                                        }else if(permissions[x] == permissions[13]){
                                            resetData(p);
                                        }
                                        nexus.saveData();
                                        menu.close(p);
                                    }else{
                                        p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cYou don't have permissions. Buy it at&6 http://odinserver.enjin.com/shop/"));
                                    }
                                }
                            }
                       
                        }
                    });
                }else{
                    break;
                }
            }
           
        }
     
  9. Yes, you should. put debug messages around every if() or other condition, check the value of variables, ect. Visualizing the flow of code makes it easy to find out where it is going wrong, it is often something unexpected.
     
  10. Ok, I did it and this is the result:
    Code (Text):
    public void executeChange(Player p){
         
            menu.openForPlayer(p);
            for(int i = 0; i <= items.length; i++){
                Bukkit.getServer().getConsoleSender().sendMessage("ChatColor "+i+ " initialized.");
                int x = i;
                if(items[i] != null){
                    Bukkit.getServer().getConsoleSender().sendMessage("Item "+i+" don't have a actionlistener.");
                    items[i].setActionListener(new ActionListener() {
                        @Override
                        public void onClick(ClickType click, MenuObject menuobject, Player p) {
                            Bukkit.getServer().getConsoleSender().sendMessage("ActionListener builder for "+x+" initializated.");
    On console:
    Code (Text):
    [00:03:45 INFO]: ChatColor 0 initialized.
    [00:03:45 INFO]: Item 0 don't have a actionlistener.
    [00:03:45 INFO]: ChatColor 1 initialized.
    It jumps all the setActionListener:

    Code (Text):
    items[i].setActionListener(new ActionListener() {
                        @Override
                        public void onClick(ClickType click, MenuObject menuobject, Player p) {
                            Bukkit.getServer().getConsoleSender().sendMessage("ActionListener builder for "+x+" initializated.");
                            if(click == ClickType.LEFT){
                                if(menuobject.toItemStack().getItemMeta().getDisplayName() == items_name[x]){
                                    Bukkit.getServer().getConsoleSender().sendMessage("Item name for "+x+" with name "+items_name[x]+" creating");
                                    if(getPermission(p, x)){
                                        if(permissions[x] == permissions[0]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.dark_blue").add(p.getName());
                                        }else if(permissions[x] == permissions[1]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.dark_green").add(p.getName());
                                        }else if(permissions[x] == permissions[2]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.dark_aqua").add(p.getName());
                                        }else if(permissions[x] == permissions[3]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.dark_red").add(p.getName());
                                        }else if(permissions[x] == permissions[4]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.dark_purple").add(p.getName());
                                        }else if(permissions[x] == permissions[5]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.gold").add(p.getName());
                                        }else if(permissions[x] == permissions[6]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.blue").add(p.getName());
                                        }else if(permissions[x] == permissions[7]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.green").add(p.getName());
                                        }else if(permissions[x] == permissions[8]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.aqua").add(p.getName());
                                        }else if(permissions[x] == permissions[9]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.red").add(p.getName());
                                        }else if(permissions[x] == permissions[10]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.purple").add(p.getName());
                                        }else if(permissions[x] == permissions[11]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.yellow").add(p.getName());
                                        }else if(permissions[x] == permissions[12]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.white").add(p.getName());
                                        }else if(permissions[x] == permissions[13]){
                                            resetData(p);
                                        }
                                        nexus.saveData();
                                        menu.close(p);
                                    }else{
                                        p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cYou don't have permissions. Buy it at&6 http://odinserver.enjin.com/shop/"));
                                    }
                                }
                            }
                     
                        }
                    });
    EDIT: It seems like it also detects items (items[1]) as null, but I think is good...
    All the code:

    Code (Text):
    package perks;

    import java.util.Arrays;
    import java.util.List;

    import net.md_5.bungee.api.ChatColor;

    import org.bukkit.Bukkit;
    import org.bukkit.Material;
    import org.bukkit.entity.Player;
    import org.bukkit.event.inventory.ClickType;
    import org.bukkit.inventory.Inventory;

    import com.colonelhedgehog.menuapi.components.ActionListener;
    import com.colonelhedgehog.menuapi.components.Coordinates;
    import com.colonelhedgehog.menuapi.components.Menu;
    import com.colonelhedgehog.menuapi.components.MenuObject;

    import core.Nexus;

    public class ChatColorMethods {
       
        Nexus nexus;
       
        public Menu menu;
        public Inventory inventory;
        public String[] permissions = new String[15];
        public MenuObject[] items = new MenuObject[15];
        public String[] items_name = new String[15];
        public Coordinates[] items_coordinates = new Coordinates[15];
       
        public void createInventory(Player p){

            inventory = Bukkit.createInventory(p, 54, "§3§lChatColor Selector");
            menu = new Menu(inventory);
           
        }
       
        public boolean getPermission(Player p, int colorcode){
            permissions[0] = "odin.cc.dark_blue";
            permissions[1] = "odin.cc.dark_green";
            permissions[2] = "odin.cc.dark_aqua";
            permissions[3] = "odin.cc.dark_red";
            permissions[4] = "odin.cc.dark_purple";
            permissions[5] = "odin.cc.gold";
            permissions[6] = "odin.cc.blue";
            permissions[7] = "odin.cc.green";
            permissions[8] = "odin.cc.aqua";
            permissions[9] = "odin.cc.red";
            permissions[10] = "odin.cc.purple";
            permissions[11] = "odin.cc.yellow";
            permissions[12] = "odin.cc.white";
            permissions[13] = "odin.cc.reset";
           
            if(p.hasPermission(permissions[colorcode]) || p.isOp()){
                return true;
            }else{
                return false;
            }
        }
        public void setMenuItem(Player p, Material icon, byte data ,String name, int x, int y){
            int idItem = 0;
            int idCoord = 0;
            int idName = 0;
            for(int i = 0; i <= 13; i++){
                if(items_name[i] != null){
                    idName = i;
                    break;
                }
            }
            for(int i = 0; i <= 13; i++){
                if(items[i] != null){
                    idItem = i;
                }
            }
            for(int i = 0; i <= 13; i++){
                if(items_coordinates[i] != null){
                    idCoord = i;
                    break;
                }
            }
            items_name[idName] = name;
            List<String> lore = null;
            for(int i = 0; i >= permissions.length; i++){
                if(getPermission(p, i)){
                    lore = Arrays.asList("§8Left click to change your Chat Color.");
                }else{
                    lore = Arrays.asList("§cYou don't have permission to this Chat Color.");
                }
            }
            items[idItem] = new MenuObject(icon, data, name, lore);
            items_coordinates[idCoord] = new Coordinates(menu, x, y);
            menu.setMenuObjectAt(items_coordinates[idCoord], items[idItem]);
        }
        public void resetData(Player p){
            nexus.getData().getStringList("colors.dark_blue").remove(p.getName());
            nexus.getData().getStringList("colors.dark_green").remove(p.getName());
            nexus.getData().getStringList("colors.dark_aqua").remove(p.getName());
            nexus.getData().getStringList("colors.dark_red").remove(p.getName());
            nexus.getData().getStringList("colors.dark_purple").remove(p.getName());
            nexus.getData().getStringList("colors.gold").remove(p.getName());
            nexus.getData().getStringList("colors.blue").remove(p.getName());
            nexus.getData().getStringList("colors.green").remove(p.getName());
            nexus.getData().getStringList("colors.aqua").remove(p.getName());
            nexus.getData().getStringList("colors.red").remove(p.getName());
            nexus.getData().getStringList("colors.purple").remove(p.getName());
            nexus.getData().getStringList("colors.yellow").remove(p.getName());
            nexus.getData().getStringList("colors.white").remove(p.getName());
            nexus.saveData();
        }
        public void executeChange(Player p){
           
            menu.openForPlayer(p);
            for(int i = 0; i <= items.length; i++){
                Bukkit.getServer().getConsoleSender().sendMessage("ChatColor "+i+ " initialized.");
                int x = i;
                if(items[i] != null){
                    Bukkit.getServer().getConsoleSender().sendMessage("Item "+i+" don't have a actionlistener.");
                    items[i].setActionListener(new ActionListener() {
                        @Override
                        public void onClick(ClickType click, MenuObject menuobject, Player p) {
                            Bukkit.getServer().getConsoleSender().sendMessage("ActionListener builder for "+x+" initializated.");
                            if(click == ClickType.LEFT){
                                if(menuobject.toItemStack().getItemMeta().getDisplayName() == items_name[x]){
                                    Bukkit.getServer().getConsoleSender().sendMessage("Item name for "+x+" with name "+items_name[x]+" creating");
                                    if(getPermission(p, x)){
                                        if(permissions[x] == permissions[0]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.dark_blue").add(p.getName());
                                        }else if(permissions[x] == permissions[1]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.dark_green").add(p.getName());
                                        }else if(permissions[x] == permissions[2]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.dark_aqua").add(p.getName());
                                        }else if(permissions[x] == permissions[3]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.dark_red").add(p.getName());
                                        }else if(permissions[x] == permissions[4]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.dark_purple").add(p.getName());
                                        }else if(permissions[x] == permissions[5]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.gold").add(p.getName());
                                        }else if(permissions[x] == permissions[6]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.blue").add(p.getName());
                                        }else if(permissions[x] == permissions[7]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.green").add(p.getName());
                                        }else if(permissions[x] == permissions[8]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.aqua").add(p.getName());
                                        }else if(permissions[x] == permissions[9]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.red").add(p.getName());
                                        }else if(permissions[x] == permissions[10]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.purple").add(p.getName());
                                        }else if(permissions[x] == permissions[11]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.yellow").add(p.getName());
                                        }else if(permissions[x] == permissions[12]){
                                            resetData(p);
                                            nexus.getData().getStringList("colors.white").add(p.getName());
                                        }else if(permissions[x] == permissions[13]){
                                            resetData(p);
                                        }
                                        nexus.saveData();
                                        menu.close(p);
                                    }else{
                                        p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cYou don't have permissions. Buy it at&6 http://odinserver.enjin.com/shop/"));
                                    }
                                }
                            }
                       
                        }
                    });
                }else{
                    break;
                }
            }
           
        }
       
    }
     
    I'm confused... don't know how to continue.
     
  11. Wait, wait, are you trying to put event handlers inside an array..?

    You should only ever have one class that implements Listener per plugin, ever. Your listener also has to be registered with bukkit, or it just has no idea it exists.

    Bukkit handles events in a really weird, bad way using reflection, and actually checks every single registered listener for each event every time an event is thrown.

    A better way to do this is make one eventhandler that takes the actual event, and then loops over and calls the other code in your classes.
     
  12. This isn't a normal Array. I'm using MenuAPI as I said in the 1st thread.
    If you look at the full code items is the name of a MenuObject
     
  13. Only one class? I use multiple classes, and I am fine. If I had to put all the listeners in one class, it would exceed 4k lines (in my plugin). From what I saw, using multiple classes that implement listener is fine. Having a class for ONE event handler is just stupid.
     
  14. I'm using just one class because I'm doing an ActionListener that variates if is one item or other one. Just look at the code above.
     
    • Like Like x 1
  15. You wont see code errors, but it will cause measurable lag to the server.
    It is not stupid at all, it is mandatory. I explained why.

    You can split it up into other classes by calling methods in them, just DO NOT make them implement Listener.
     
  16. So... what about my problem?
     
  17. That is not how anonymous classes work.
     
  18. Oh, God. Then what I'm doing wrong? I have spent almost 3 days working on a feature that isn't so hard for you.Please, tell me what I'm doing wrong.
     
Thread Status:
Not open for further replies.