Помогите Код не видит ники из yml?

pro100koder

Активный участник
Пользователь
Баллы
76
Краткая суть проблемы на 2-х скринах в конце темы!!!!!!!


Название немного непонятное, т. к. я не знаю, как её лучше назвать. Суть проблемы в чём: писал я анти-чит, точнее голосовой бан. (сказал, что игрок читер, ещё несколько игроков так же сказали - игрок забанен. Не надо говорить про "асечки".) Как всё должно работать: игрок пишет /cheat ник 2игрока, 2 игрок заносится в базу (пока что на yml, временно.) и тот, кто на него репорт кидал. Так же заносится в ArrayList. Если игрок 2 раз попытается кинуть репорт - не должно получаться. Но что мы видим на самом деле: всё работает нормально, при перезапуске в лист игроки добавляются нормально, но вот есть проблема: игроки могут повторно кидать репорт. При чём все старые почему-то становятся невидимыми! Сделал очень много тестовых сообщений... Не понимаю, почему оно так происходит. Вот код самой команды, которая кидает репорт:
Код:
public class cheat implements CommandExecutor {
    ArrayList<String> pclist = main.pclist;
    ArrayList<ArrayList<String>> pcll = main.pcll;
    @SuppressWarnings("unused")
    private main plugin;
    public cheat(main plugin) {
        this.plugin = plugin;
    }

    @Override
    public boolean onCommand(CommandSender send, Command command, String label, String[] args) {
        if(args.length == 0){
            send.sendMessage(ChatColor.YELLOW + "На кого вы хотите сделать донос? " + ChatColor.AQUA + "/cheat НИК");
            return true;
        }
        if(args.length >= 2){
            send.sendMessage(ChatColor.YELLOW + "Если вы нашли много читеров, доносите о них по одному. " + ChatColor.AQUA + "/cheat НИК");
            return true;
        }
        String name = args[0];
        Player p = Bukkit.getPlayerExact(name);
        if(p==null){send.sendMessage(ChatColor.YELLOW + "Этот игрок не в сети/не существует/не на этом сервере(миниигре).");return true;}
        if(name.equalsIgnoreCase(send.getName())){send.sendMessage(ChatColor.RED + "Вы хотите донести на самого себя?");return true;}
        if(p!=null){
            for(int i=0;i<pclist.size();i++){
                send.sendMessage("pclist:"+pclist.get(i));
            }
            for(int i=0;i<pcll.size();i++){
                send.sendMessage("pcll:"+pcll.get(i));
            }
            send.sendMessage("p:"+p);
            for(int i=0;i<pclist.size();i++){
                send.sendMessage(i+" scanned");
                if(pclist.get(i) == p.getName()){
                    send.sendMessage("founded!");
                    p.sendMessage("Ты уже в базе");
                    for(int a=0;a<pcll.get(i).size();a++){
                        if(pcll.get(i).get(a) == send.getName()){
                            send.sendMessage(ChatColor.RED + "Вы уже делали донос на этого игрока. Если вы будете делать слишком много доносов, вас забанят, а доносы будут отклонены.");
                            return true;
                        }
                    }
                    send.sendMessage(ChatColor.YELLOW + "Вы успешно отправили донос на игрока " + ChatColor.RED + "" + p.getName() + ", который уже числится в базе подозреваемых читеров. За ним будет вестись повышенная слежка.");
                    p.sendMessage(ChatColor.YELLOW + "" + send.getName() + ChatColor.RED + " Подозревает вас в читах. " + ChatColor.DARK_RED + "Возможность обвинить игрока в лже-доносе невозможна для вас." + send.getName());
                    pcll.get(i).add(send.getName());
                    return true;
                }
            }
            send.sendMessage(ChatColor.YELLOW + "Вы успешно отправили донос на игрока " + ChatColor.RED + "" + p.getName() + ".");
            p.sendMessage(ChatColor.YELLOW + "" + send.getName() + ChatColor.RED + " Подозревает вас в читах. Если вы не являетесь читером, обвините этого игрока в лже-доносе. " + ChatColor.YELLOW + "/fake " + send.getName());
            pclist.add(p.getName());
            ArrayList<String> who = new ArrayList<String>();
            who.add(send.getName());
            pcll.add(who);
        }
        return true;
    }

}
Вот код из гл. класса, где происходят все действия с yml.
Код:
onEnable(){
saveDefaultConfig();
        for (String b : getConfig().getConfigurationSection("Cheaters").getKeys(false)) {
            pclist.add(getConfig().getString("Cheaters." + b + ".player"));
            ArrayList<String> pc = new ArrayList<String>();
            for(int i=0;i<20;i++){
                if(getConfig().getString("Cheaters." + b + ".reportby" + i) != null){
                    pc.add(getConfig().getString("Cheaters." + b + ".reportby" + i));
                }
            }
            pcll.add(pc);
        }
        saveConfig();
    }
onDisable(){
for (int i=0;i<pclist.size();i++) {
            getConfig().set("Cheaters."+i+".player", pclist.get(i));
            for(int a=0;a<pcll.get(i).size();a++){
                getConfig().set("Cheaters."+i+".reportby"+a, pcll.get(i).get(a));
            }
            saveConfig();
    }
}
Вот вывод в чате от 1 раз команды
Вот вывод после 2 попытки
Я надеюсь, что не взорвал никому мозг...
 
Код:
public class cheat implements CommandExecutor {
    ArrayList<String> pclist = main.pclist;
    ArrayList<ArrayList<String>> pcll = main.pcll;
    @SuppressWarnings("unused")
    private main plugin;
    public cheat(main plugin) {
        this.plugin = plugin;
    }

    @Override
    public boolean onCommand(CommandSender send, Command command, String label, String[] args) {
        if(args.length == 0){
            send.sendMessage(ChatColor.YELLOW + "На кого вы хотите сделать донос? " + ChatColor.AQUA + "/cheat НИК");
            return true;
        }
        if(args.length >= 2){
            send.sendMessage(ChatColor.YELLOW + "Если вы нашли много читеров, доносите о них по одному. " + ChatColor.AQUA + "/cheat НИК");
            return true;
        }
        String name = args[0];
        Player p = Bukkit.getPlayerExact(name);
        if(p==null){send.sendMessage(ChatColor.YELLOW + "Этот игрок не в сети/не существует/не на этом сервере(миниигре).");return true;}
        if(name.equalsIgnoreCase(send.getName())){send.sendMessage(ChatColor.RED + "Вы хотите донести на самого себя?");return true;}
        if(p!=null){
            for(int i=0;i<pclist.size();i++){
                send.sendMessage("pclist:"+pclist.get(i));
            }
            for(int i=0;i<pcll.size();i++){
                send.sendMessage("pcll:"+pcll.get(i));
            }
            send.sendMessage("p:"+p);
            for(int i=0;i<pclist.size();i++){
                send.sendMessage(i+" scanned");
                if(pclist.get(i) == p.getName()){ //замени свое == на equalsIgnoreCase, и почитай про сравнивание объектов и примитивных типов данных
                    send.sendMessage("founded!");
                    p.sendMessage("Ты уже в базе");
                    for(int a=0;a<pcll.get(i).size();a++){
                        if(pcll.get(i).get(a) == send.getName()){
                            send.sendMessage(ChatColor.RED + "Вы уже делали донос на этого игрока. Если вы будете делать слишком много доносов, вас забанят, а доносы будут отклонены.");
                            return true;
                        }
                    }
                    send.sendMessage(ChatColor.YELLOW + "Вы успешно отправили донос на игрока " + ChatColor.RED + "" + p.getName() + ", который уже числится в базе подозреваемых читеров. За ним будет вестись повышенная слежка.");
                    p.sendMessage(ChatColor.YELLOW + "" + send.getName() + ChatColor.RED + " Подозревает вас в читах. " + ChatColor.DARK_RED + "Возможность обвинить игрока в лже-доносе невозможна для вас." + send.getName());
                    pcll.get(i).add(send.getName());
                    return true;
                }
            }
            send.sendMessage(ChatColor.YELLOW + "Вы успешно отправили донос на игрока " + ChatColor.RED + "" + p.getName() + ".");
            p.sendMessage(ChatColor.YELLOW + "" + send.getName() + ChatColor.RED + " Подозревает вас в читах. Если вы не являетесь читером, обвините этого игрока в лже-доносе. " + ChatColor.YELLOW + "/fake " + send.getName());
            pclist.add(p.getName());
            ArrayList<String> who = new ArrayList<String>();
            who.add(send.getName());
            pcll.add(who);
        }
        return true;
    }

}

В коде написан коммент, прочитай его
 
И вообще строки сравниваются методами equals и equalsIgnoreCase, никогда не сравнивай их ==
 
И вообще строки сравниваются методами equals и equalsIgnoreCase, никогда не сравнивай их ==
Н-да, тут вина моих старых школо-модов, когда я нифига не умел делать, и делал всё по гайдикам с ютуба... Вот тут по привычке проглядел, и поставил "==", хотя, если присмотреться, то в коде я уже использовал equlasIgnoreCase(), но тут забыл.
 
Назад
Верх