java.lang.NullPointerException

Discussion in 'Spigot Plugin Development' started by SkelletonX, Sep 5, 2017.

  1. error: https://pastebin.com/0Kqy0qAF

    erro in video:

    GladiadorManager.java: https://pastebin.com/VMyUiMrx

    error happens during, when will select the gladiators (it's a tag).

    line 188: for(Player p : gladiadores){
    line 186: private void sendMessageList3(List<String> mensagens, Clan vencedor, List<Player> gladiadores, Player mito){
    line 133: sendMessageList3(config.getStringList("Mensagens_Player.Anuncio_Fim"), vencedor, gladiadores, mito);
     
  2. You never set 'gladiadores' to a 'new ArrayList<>()', so it's always null. Try setting it to that in the declaration:

    Code (Java):
    public List<Player> gladiadores = new ArrayList<>();
     
  3. @__null

    Code (Text):
    [00:45:10] [Server thread/WARN]: [GladiadorReloaded] Task #77 for GladiadorReloaded v1.0 generated an exception
    java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
        at java.util.ArrayList.rangeCheck(Unknown Source) ~[?:1.8.0_144]
        at java.util.ArrayList.get(Unknown Source) ~[?:1.8.0_144]
        at me.skelletonx.br.GladiadorReloaded.manager.GladiadorManager$2.run(GladiadorManager.java:104) ~[?:?]
        at org.bukkit.craftbukkit.v1_9_R1.scheduler.CraftTask.run(CraftTask.java:53) ~[craftbukkit-1.9-R0.1-SNAPSHOT-latest.jar:git-Bukkit-44216f1]
        at org.bukkit.craftbukkit.v1_9_R1.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:349) [craftbukkit-1.9-R0.1-SNAPSHOT-latest.jar:git-Bukkit-44216f1]
        at net.minecraft.server.v1_9_R1.MinecraftServer.D(MinecraftServer.java:686) [craftbukkit-1.9-R0.1-SNAPSHOT-latest.jar:git-Bukkit-44216f1]
        at net.minecraft.server.v1_9_R1.DedicatedServer.D(DedicatedServer.java:361) [craftbukkit-1.9-R0.1-SNAPSHOT-latest.jar:git-Bukkit-44216f1]
        at net.minecraft.server.v1_9_R1.MinecraftServer.C(MinecraftServer.java:635) [craftbukkit-1.9-R0.1-SNAPSHOT-latest.jar:git-Bukkit-44216f1]
        at net.minecraft.server.v1_9_R1.MinecraftServer.run(MinecraftServer.java:539) [craftbukkit-1.9-R0.1-SNAPSHOT-latest.jar:git-Bukkit-44216f1]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_144]
     
  4. Photon

    Supporter

    Please post your current code with English documentation. You try to get the index 1 of an ArrayList, even though it has the size of one, thus the max. allowed index to access is 0.
     
  5. @Photon this?
    Code (Text):
    package me.skelletonx.br.GladiadorReloaded.manager;
     
    import java.util.List;
     
    import net.sacredlabyrinth.phaed.simpleclans.Clan;
    import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
     
    import org.bukkit.Bukkit;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.scheduler.BukkitScheduler;
     
    import me.skelletonx.br.GladiadorReloaded.Gladiador;
    import me.skelletonx.br.GladiadorReloaded.VariaveisGlobais;
     
    public class GladiadorManager {
     
        private Gladiador hg = Gladiador.getGladiador();
        private final FileConfiguration config = hg.getConfig();
        private TeleportesManager tm = new TeleportesManager();
        private VariaveisGlobais vg = hg.vg;
        public int id1, id2;
        public Clan vencedor;
        public List<Player> gladiadores = new ArrayList<>();
        public Player mito;
     
        public void iniciarAnuncios(){
            vg.isAberto = true;
            vg.isOcorrendo = true;
            vg.resetVariaveisSemIS();
            BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
            id1 = scheduler.scheduleSyncRepeatingTask(hg, new Runnable() {
                @Override
                public void run() {
                    if(vg.quantMensagens >= 0){
                        for (String s : config.getStringList("Mensagens_Player.Anuncio_Aberto")) {
                            hg.getServer().broadcastMessage(s.replace("&", "§").replace("<preco>", String.valueOf(vg.precoParaParticipar)).replace("<limite>", String.valueOf(vg.limiteDeMembros)).replace("<players>", String.valueOf(vg.todosParticipantes.size())).replace("<clans>", String.valueOf(vg.clans.keySet().size())));
                        }
                        vg.quantMensagens -= 1;
                    }else{
                        if(vg.clans.keySet().size() >= 1){ //2
                            for(String tags : vg.clans.keySet()){
                                while(vg.clans.get(tags) > 30){
                                    Clan c = hg.core.getClanManager().getClan(tags);
                                    List<ClanPlayer> p = c.getOnlineMembers();
                                    int valor = (int) (Math.random() * vg.clans.get(tags) + 1);
                                    ClanPlayer a = p.get(valor);
                                    Player remove = hg.getServer().getPlayer(a.getName());
                                    vg.todosParticipantes.remove(remove);
                                    remove.teleport(tm.getTeleportSaida());
                                    remove.sendMessage(config.getString("Mensagens_Player.kickado").replace("&", "§"));
                                    removePlayerInClanList(tags);
                                }
                            }
                            iniciarAnuncios2();
                        }else{
                            sendMessageList4(config.getStringList("Mensagens_Player.Anuncio_Cancelado"), "Sem clans suficientes!");
                            for(Player p : vg.todosParticipantes){
                                p.teleport(tm.getTeleportSaida());
                            }
                            vg.resetVariaveis();
                        }
                        hg.getServer().getScheduler().cancelTask(id1);
                    }
                }
            }, 0, config.getInt("Gladiador.Anuncio_Tempo_Entre_As_Mensagens") * 20L);
        }
     
        public void iniciarAnuncios2(){
            vg.isAberto = false;
            BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
            id2 = scheduler.scheduleSyncRepeatingTask(hg, new Runnable() {
                @Override
                public void run() {
                    if(vg.isOcorrendo){
                     
                        //Deixa o mundo sempre de noite
                        if(vg.isNoite){
                            hg.getServer().getWorld(config.getString("Localizacoes.Spawn_Entrada.World")).setTime(17000);
                        }
                     
                        //Deixa o mundo sem chuva
                        if(vg.isChuvendo){
                            hg.getServer().getWorld(config.getString("Localizacoes.Spawn_Entrada.World")).setWeatherDuration(0);
                        }
                     
                        //Verifica se tem apenas um clan no gladiador
                        if(vg.clans.keySet().size() == 1){
                         
                            //Pega o clan vencedor
                            for(String venc : vg.clans.keySet()){
                                vencedor = hg.core.getClanManager().getClan(venc);
                                vg.isOcorrendo = false;
                            }
                         
                            //Define os gladiadores
                            if(vg.isGladiadorEnable){
                                while(vg.quantGladiadores != vg.quantGladiadoresAdicionados){
                                    gladiadores.clear();
                                    int valor = (int) (Math.random() * vencedor.getOnlineMembers().size() + 1);
                                    ClanPlayer parti = vencedor.getOnlineMembers().get(valor);
                                    gladiadores.add(hg.getServer().getPlayer(parti.getName()));
                                    vg.quantGladiadoresAdicionados = vg.quantGladiadoresAdicionados + 1;
                                    System.out.println("12 " + gladiadores + "Or " + parti.getName());
                                    for(Player pa : gladiadores){
                                        config.set("Gladiador_Tag.Jogador_Com_A_Tag_Atual", pa.getName());
                                        hg.saveConfig();
                                    }
     
                                }
                            }
                         
                            //Define o mito
                            if(vg.isMitoEnable){
                                int valor = (int) (Math.random() * vencedor.getOnlineMembers().size() + 1);
                                ClanPlayer parti = vencedor.getOnlineMembers().get(valor);
                                mito = hg.getServer().getPlayer(parti.getName());
                                config.set("Mito_Tag.Jogador_Com_A_Tag_Atual", mito.getName());
                                hg.saveConfig();
                            }
                         
                        }else if(vg.clans.keySet().isEmpty()){
                            cancelarEvento("Evento sem vencedores");
                        }else{
                            sendMessageList2(config.getStringList("Mensagens_Player.Anuncio_Iniciado"));
                            for(String s : vg.clans.keySet()){
                                Clan c = hg.core.getClanManager().getClan(s);
                                c.setFriendlyFire(false);
                            }
                        }
                     
                    }else{
                        sendMessageList3(config.getStringList("Mensagens_Player.Anuncio_Fim"), vencedor, gladiadores, mito);
                        for(ClanPlayer cp : vencedor.getOnlineMembers()){
                            hg.economy.depositPlayer(cp.getName(), vg.premioParaCada);
                        }
                        for(ClanPlayer cp : vencedor.getLeaders()){
                            hg.economy.depositPlayer(cp.getName(), vg.premioParaLider);
                        }
                        for(Player p : vg.todosParticipantes){
                            p.teleport(tm.getTeleportSaida());
                        }
                        vg.resetVariaveis();
                        hg.getServer().getScheduler().cancelTask(id2);
                    }
                }
            }, 0, config.getInt("Gladiador.Anuncio_Tempo_Entre_As_Mensagens") * 20L);
        }
     
        public void cancelarEvento(String motivo){
            sendMessageList4(config.getStringList("Mensagens_Player.Anuncio_Cancelado"), motivo);
            hg.getServer().getScheduler().cancelTask(id1);
            hg.getServer().getScheduler().cancelTask(id2);
            for(Player p : vg.todosParticipantes){
                p.teleport(tm.getTeleportSaida());
            }
            vg.resetVariaveis();
        }
     
        private void sendMessageList2(List<String> mensagens){
            StringBuilder builder = new StringBuilder();
            for(String clans : vg.clans.keySet()){
                Clan clann = hg.core.getClanManager().getClan(clans);
                if(builder.toString().isEmpty()){
                    builder.append(clann.getColorTag());
                }else{
                    builder.append("§0, " + clann.getColorTag());
                }
            }
            for (String s : mensagens) {
                hg.getServer().broadcastMessage(s.replace("&", "§").replace("<preco>", String.valueOf(vg.precoParaParticipar)).replace("<limite>", String.valueOf(vg.limiteDeMembros)).replace("<players>", String.valueOf(vg.todosParticipantes.size())).replace("<clans>", builder.toString()));
            }
            /*StringBuilder builder = new StringBuilder();
            for (String s : mensagens) {
                for(String clans : vg.clans.keySet()){
                    if(builder.toString().isEmpty()){
                        builder.append(clans);
                    }else{
                        builder.append("§0, " + clans);
                    }
                }
                 hg.getServer().broadcastMessage(s.replace("&", "§").replace("<preco>", String.valueOf(vg.precoParaParticipar)).replace("<limite>", String.valueOf(vg.limiteDeMembros)).replace("<players>", String.valueOf(vg.todosParticipantes.size())).replace("<clans>", builder.toString()));
            }*/
        }
     
        private void sendMessageList3(List<String> mensagens, Clan vencedor, List<Player> gladiadores, Player mito){
            for (String s : mensagens) {
                for(Player p : gladiadores){
                    if(mito != null){
                        if(gladiadores != null){
                            hg.getServer().broadcastMessage(s.replace("&", "§").replace("<vencedor>", vencedor.getColorTag()).replace("<gladiadores>", p.getName()).replace("<mito>", mito.getName()));
                        }else{
                            hg.getServer().broadcastMessage(s.replace("&", "§").replace("<vencedor>", vencedor.getColorTag()).replace("<mito>", mito.getName()));
                        }
                    }else{
                        hg.getServer().broadcastMessage(s.replace("&", "§").replace("<vencedor>", vencedor.getColorTag()).replace("<gladiadores>", p.getName()));
                    }
                }
            }
        }
     
        private void sendMessageList4(List<String> mensagens, String motivo){
            for (String s : mensagens) {
                hg.getServer().broadcastMessage(s.replace("&", "§").replace("<motivo>", motivo));
            }
        }
     
        public void addPlayerInClanList(String clan){
            if(vg.clans.containsKey(clan)){
                vg.clans.put(clan, vg.clans.get(clan) + 1);
            }else{
                vg.clans.put(clan, 1);
            }
        }
     
        public void removePlayerInClanList(String clan){
            if(vg.clans.containsKey(clan)){
                if(vg.clans.get(clan) >= 2){
                    vg.clans.put(clan, vg.clans.get(clan) - 1);
                }else{
                    vg.clans.remove(clan);
                }
            }
        }
        public void addClanInClanList(String clan){
            if(!vg.clans.containsKey(clan)){
                vg.clans.put(clan, 1);
            }
        }
     
        public void removeClanInClanList(String clan){
            if(!vg.clans.containsKey(clan)){
                vg.clans.remove(clan);
            }
        }
     
    }
     
  6. Note that an array length of 1 means that you only have the indice 0.
     
  7. @Blutkrone
    how can i fix the error, first time i use array!
     
  8. When accessing an array dont start counting at the "1" indice, also when you iterate over an array you use the condition "indice < length" because an array with n elements will have the indices 0,1,2,...,n-1
     
  9. Photon

    Supporter

    He doesn't even use an array, it is the internal array of an ArrayList, as shown in the stacktrace @Blutkrone
    @SkelletonX please write and comment code in English, especially if you want help, we are not going to put all your code into a translator.
     
  10. The "language" of the code has no bearing on the error... variable names still function the same, it's not that difficult to read...

    My guess is your error lies in this code here:
    Code (Text):
    int valor = (int) (Math.random() * vencedor.getOnlineMembers().size() + 1);
    ClanPlayer parti = vencedor.getOnlineMembers().get(valor);
    Your code is attempting to get a value that is not in the list - your list only has one value, and "valor" in this is 1. Lists start counting at 0, so 1 is not a valid index, and #get(int) throws an error.

    Try removing the +1. If that does not work, I'd recommend you switch to https://docs.oracle.com/javase/7/docs/api/java/util/Random.html#nextInt(int). If you pass it the size of your list, it will always return a number that is a valid index (because 0 is inclusive and the number you provide as the max is exclusive). You will have to store a random object somewhere, though, creating a new one every time is gross.
     

Share This Page