Войти или зарегистрироваться

командой менять цвет ника над головой и в списке с игроками.

  • Автор темы Автор темы FlozIK
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

FlozIK

Активный участник
Баллы
61
Имя в Minecraft
MrFloz
Создаю плагин и хочу чтоб командой я мог менять цвет ника над головой и в списке с игроками. Это я сделал, но после того как я протестил две команды - admin(включить золотой ник) и deadmin(выключить золотой ник), я решил сделать одну. Вот нерабочий код:
Код:
public boolean onCommand(CommandSender e, Command cmd, String label, String[] args)
    {
        if(cmd.getName().equalsIgnoreCase("admin"))
        {
            Player p = (Player) e;
            if ((e instanceof Player ))
            {
                if(ЧТО-ТО == true)
                {
                    p.getPlayer().setScoreboard(board);
                    team.removePlayer(p.getPlayer());
                    p.sendMessage(ChatColor.GRAY + "Вы успешно исключены из группы" + ChatColor.GOLD + " admin!");
                }
               
               
                if(ЧТО-ТО == false)
                {
                    p.getPlayer().setScoreboard(board);
                    team.addPlayer(p.getPlayer());
                    p.sendMessage(ChatColor.GRAY + "Вы успешно добавлены в группу" + ChatColor.GOLD + " admin!");
                }
            }
            else
            {
                log.info("This command can write player only!!");
            }
            return true;
        }
        return false;
    }

Я понимаю, что заместо что должен быть код проверяющий есть ли игрок в команде или нет.
Вот, на всякий случай код ScoreBoard'a в методе onEnable:
Код:
        board = Bukkit.getScoreboardManager().getNewScoreboard();
        team = board.registerNewTeam("Red");
        team.setPrefix(ChatColor.GOLD+"");
        team.setCanSeeFriendlyInvisibles(false);
        team.setAllowFriendlyFire(true);
 
Что именно не работает, что пишет, подключайся отладчиком и делай дебаг.
 
Я ещё полный нуб...... Он просто включает золотой ник. А выключать не хочет.
Нахождение игрока в scoreboard я сделал, но появилась другая проблема. Так как я сделал всё через if, то после того, как метод проверяет есть ли игрок в команде и делает его с золотым ником, второй метод возвращает всё на круги своя. Новый код:
Код:
public boolean onCommand(CommandSender e, Command cmd, String label, String[] args)
    {
        Player p = (Player) e;
        if(cmd.getName().equalsIgnoreCase("admin"))
        {
            if ((e instanceof Player ))
            {
                if(team.hasPlayer(p) == false)
                {
                    p.getPlayer().setScoreboard(board);
                    team.removePlayer(p.getPlayer());
                    p.sendMessage(getConfig().getString("YouAdmin"));
                }
               
               
                if(team.hasPlayer(p) == true)
                {
                    p.getPlayer().setScoreboard(board);
                    team.addPlayer(p.getPlayer());
                    p.sendMessage(getConfig().getString("YouNotAdmin"));
                }
            }
            else
            {
                log.info("This command can write player only!!");
            }
            return true;
        }
        return false;
    }
 
Я ещё полный нуб...... Он просто включает золотой ник. А выключать не хочет.
Нахождение игрока в scoreboard я сделал, но появилась другая проблема. Так как я сделал всё через if, то после того, как метод проверяет есть ли игрок в команде и делает его с золотым ником, второй метод возвращает всё на круги своя. Новый код:
Код:
public boolean onCommand(CommandSender e, Command cmd, String label, String[] args)
    {
        Player p = (Player) e;
        if(cmd.getName().equalsIgnoreCase("admin"))
        {
            if ((e instanceof Player ))
            {
                if(team.hasPlayer(p) == false)
                {
                    p.getPlayer().setScoreboard(board);
                    team.removePlayer(p.getPlayer());
                    p.sendMessage(getConfig().getString("YouAdmin"));
                }
              
              
                if(team.hasPlayer(p) == true)
                {
                    p.getPlayer().setScoreboard(board);
                    team.addPlayer(p.getPlayer());
                    p.sendMessage(getConfig().getString("YouNotAdmin"));
                }
            }
            else
            {
                log.info("This command can write player only!!");
            }
            return true;
        }
        return false;
    }

Ну а с чего это вдруг должно нормально работать?
Если ты потом team.removePlayer делаешь, что позволяет зайти во второй if?

Ты похоже, даже код свой не понимаешь.
 
Я это понял поздно. Точнее только сейчас, а как распутать эту путаницу я не знаю.
 
Я это понял поздно. Точнее только сейчас, а как распутать эту путаницу я не знаю.
Учись базовым принципам программирования, делай простенькие задачи, вырабатывай мышление и не будет проблем.
 
И ещё забыл сказать, я с Джавой уже работал, моды создавал. Сейчас решил по создавать плагины.
 
if(team.hasPlayer(p) == false)

Вижу хорошие моды создавал -_-

И еще, подумай слегка, как же hasPlayer() будет true, если ты removePlayer() делаешь?
 
И еще, подумай слегка, как же hasPlayer() будет true, если ты removePlayer() делаешь?
Вглядись внимательней. Он удаляет игрока из команды, когда его там нет и добавляет, когда есть.
Вижу хорошие моды создавал -_-
Да какие моды? Открыл гайд, скопировал код, поменял названия/текстуры и всё, "я делал моды!!!11"
 
Вглядись внимательней. Он удаляет игрока из команды, когда его там нет и добавляет, когда есть.

Да какие моды? Открыл гайд, скопировал код, поменял названия/текстуры и всё, "я делал моды!!!11"
А, точняк. В общем попутал свои false и true в if().

В общем как-то так:
Код:
                if(team.hasPlayer(p))
                {
                    p.getPlayer().setScoreboard(board);
                    team.removePlayer(p.getPlayer());
                    p.sendMessage(getConfig().getString("YouAdmin"));
                }
                else
                {
                    p.getPlayer().setScoreboard(board);
                    team.addPlayer(p.getPlayer());
                    p.sendMessage(getConfig().getString("YouNotAdmin"));
                }

Или хрен знает вообще xD
 
Проще взять TagAPI и работать с ним
 
Создаю плагин и хочу чтоб командой я мог менять цвет ника над головой и в списке с игроками. Это я сделал, но после того как я протестил две команды - admin(включить золотой ник) и deadmin(выключить золотой ник), я решил сделать одну. Вот нерабочий код:
Код:
public boolean onCommand(CommandSender e, Command cmd, String label, String[] args)
    {
        if(cmd.getName().equalsIgnoreCase("admin"))
        {
            Player p = (Player) e;
            if ((e instanceof Player ))
            {
                if(ЧТО-ТО == true)
                {
                    p.getPlayer().setScoreboard(board);
                    team.removePlayer(p.getPlayer());
                    p.sendMessage(ChatColor.GRAY + "Вы успешно исключены из группы" + ChatColor.GOLD + " admin!");
                }
              
              
                if(ЧТО-ТО == false)
                {
                    p.getPlayer().setScoreboard(board);
                    team.addPlayer(p.getPlayer());
                    p.sendMessage(ChatColor.GRAY + "Вы успешно добавлены в группу" + ChatColor.GOLD + " admin!");
                }
            }
            else
            {
                log.info("This command can write player only!!");
            }
            return true;
        }
        return false;
    }

Я понимаю, что заместо что должен быть код проверяющий есть ли игрок в команде или нет.
Вот, на всякий случай код ScoreBoard'a в методе onEnable:
Код:
        board = Bukkit.getScoreboardManager().getNewScoreboard();
        team = board.registerNewTeam("Red");
        team.setPrefix(ChatColor.GOLD+"");
        team.setCanSeeFriendlyInvisibles(false);
        team.setAllowFriendlyFire(true);
1)Наверно сначало if ((e instanceof Player )), а потом Player p = (Player) e;
2)getScoreboard().getScoreboardMain() - это для того чтобы получить minecraft бордю если вдруг поможет)
 
Всё работает, тему закрывайте.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх