1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Как убрать отображение первого аргумента?

Тема в разделе "Разработка плагинов для новичков", создана пользователем TelePuzik, 13 сен 2020.

  1. Автор темы
    TelePuzik

    TelePuzik Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    op03
    Приветствую вас.

    При компиляции выдает ошибку:
    Не удается конвертировать тип данных String в Player.


    Код:
    package adminreport.main;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    
    public class Reply implements CommandExecutor{
    
        private Object plugin;
    
        public Reply(AdminReport adminReport) {
            this.plugin = plugin;
        }
    
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if(!sender.hasPermission("report.reply")) {
                sender.sendMessage(ChatColor.DARK_RED + "[Ошибка] "+ ChatColor.WHITE +"У Вас нет прав.");
                return true;
            }
            if(args.length < 2) {
                sender.sendMessage(ChatColor.DARK_RED + "[Ошибка] "+ ChatColor.WHITE +"Недостаточно аргументов.");
                return true;
            }
    
            Player user = args[0];
            String username = user.getName();
            String adminname = sender.getName();
            String message = String.join(" ", args);
            if(sender.hasPermission("report.reply")) {
            sender.sendMessage(ChatColor.GREEN+"[PM] "+ChatColor.WHITE+"Администратор "+ChatColor.GREEN+adminname+ChatColor.WHITE+" для "+ChatColor.GREEN+username+ChatColor.WHITE+":");
            sender.sendMessage("- "+message);
        
            user.sendMessage(ChatColor.GREEN+"[PM] "+ChatColor.WHITE+"Администратор "+ChatColor.GREEN+adminname+ChatColor.WHITE+" ответил "+ChatColor.GREEN+"Вам"+ChatColor.WHITE+":");
            user.sendMessage("- "+message);
            return true;
            }
            return false;
          
        }
    }
    
    Мне нужно было сделать так, чтобы переменная username была указана на выводе сообщения:
    C этим я разобрался

    Но если указать эту переменную (username) в функции sendMessage, то это вызывало ошибку.
    Для устранения мне понадобилось указать вместо username указать user, это помогло избавиться от проблемы, как сразу возникла следующая:







     
    Последнее редактирование: 13 сен 2020
  2. Автор темы
    TelePuzik

    TelePuzik Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    op03
    Все, разобрался.

    Поправил эти строки:

    Код:
    String user = args[0];
            Player username = Bukkit.getPlayer(user);
            String adminname = sender.getName();
            String message = String.join(" ", args);
            if(sender.hasPermission("report.reply")) {
            sender.sendMessage(ChatColor.GREEN+"[PM] "+ChatColor.WHITE+"Администратор "+ChatColor.GREEN+adminname+ChatColor.WHITE+" для "+ChatColor.GREEN+user+ChatColor.WHITE+":");
            sender.sendMessage("- "+message);
       
            username.sendMessage(ChatColor.GREEN+"[PM] "+ChatColor.WHITE+"Администратор "+ChatColor.GREEN+adminname+ChatColor.WHITE+" ответил "+ChatColor.GREEN+"Вам"+ChatColor.WHITE+":");
            username.sendMessage("- "+message);
    Но теперь возникла новая проблема. Её описал чуть ниже
     
    Последнее редактирование: 13 сен 2020
  3. Vieprog

    Vieprog Новичок Пользователь

    Баллы:
    6
    plugin.getServer().getPlayer(nickname);
     
  4. Автор темы
    TelePuzik

    TelePuzik Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    op03
    При отправке сообщения игроку от имени администратора, текст содержит первый, второй и все дальнейшие аргументы, но мне нужно, чтобы в строке с текстом не отображался только первый.

    Моя голова не додумалась, каким образом это можно реализовать.
    Видео для наглядности выложил в том числе:
     
  5. Vieprog

    Vieprog Новичок Пользователь

    Баллы:
    6
    Код:
    StringBuilder sb=new StringBuilder();
    for (int fora=1; fora<args.lenght; fora++) {
     sb.append(args[fora]);
    message=sb.toString();
    
     
    Последнее редактирование: 13 сен 2020
  6. Stas021

    Stas021 Новичок Пользователь

    Баллы:
    16
    Зачем лишняя проверка?
    Можно сделать int fora = 1 и убрать лишний if
     
  7. Vieprog

    Vieprog Новичок Пользователь

    Баллы:
    6
    Извиняюсь, так и хотел сделать, задумался о своем. :whistle:
     
  8. Автор темы
    TelePuzik

    TelePuzik Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    op03
    Это конечно все замечательно, но у меня появилось новая ошибка

    Строка:
    Код:
    for (int fora=0; fora<args.lenght; fora++)
    Что обозначает fora++?
    fora - это переменная, а два плюса?
     
  9. Автор темы
    TelePuzik

    TelePuzik Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    op03
    Все, вроде разобрался, тестирую
     
  10. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    После чтения переменная увеличивается на 1.
     
  11. Автор темы
    TelePuzik

    TelePuzik Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    op03
    Все заработало, благодарю всех за великую помощь!
    Не представляю даже, как бы я без вас справился : )

    Если кто-то может, посоветуйте руководство по Java
     
  12. Автор темы
    TelePuzik

    TelePuzik Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    op03
    Спасибо за объяснение!
     
  13. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Я начинал с "Java 8. Руководство для начинающих" Герберта Шилдта.
     
  14. Vieprog

    Vieprog Новичок Пользователь

    Баллы:
    6
    Эккель, Философия Java отличная книга
     
  15. Автор темы
    TelePuzik

    TelePuzik Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    op03
    Благодарю за советы!
     
  16. Автор темы
    TelePuzik

    TelePuzik Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    op03
    И снова приветствую всех)

    При тестировании плагина, я заметил, что слова слипаются с друг-другом
    Пытался провести опыт с этими строчками, но ничего из этого не вышло
    Код:
            sb.append(args[fora]);
            }
            }
            String message=sb.toString();

    Вот видео для наглядности, что именно происходит при отправке сообщения:

     
  17. Vieprog

    Vieprog Новичок Пользователь

    Баллы:
    6
    sb.append(args[fora]+" ");
     
  18. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    sb.append(args[fora]).append(" ") // Добавляем пробел после каждого аргумента
    String message=sb.substring(0, sb.length() - 1)) // Удаляем последний пробел
     
  19. Vieprog

    Vieprog Новичок Пользователь

    Баллы:
    6
    Если в дальнейшем первый аргумент не будет браться из args, то можно args[0]=""; И отправлять аргс, чтобы меньше парева.
     
  20. Автор темы
    TelePuzik

    TelePuzik Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    op03
    Все, пока вопросов не осталось!
    Подпишусь на вас, как благодарность, по иному даже не знаю, как я могу еще отблагодарить
    И за одно темы ваши посмотрю
     

Поделиться этой страницей