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

Помогите Как создать механику отправки сообщений как у команды /tell

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

Статус темы:
Закрыта.
  1. Автор темы
    lolqeeeeee

    lolqeeeeee Ньюби

    Баллы:
    1
    Имя в Minecraft:
    lolqeeeeee
    Я немного не понимаю, как реализовать такую механику отправки личного сообщения, наподобие команды /tell, не мог бы кто нибудь помочь, и кинуть код для команды такого типа? :3 (я просто только начинаю осваивать тему создания плагинов, поэтому простите, если вопрос немного глупый)
     
  2. LOVEC3327

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

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    Ну как-то так
    PHP:
        @Override
        
    public boolean onCommand(CommandSender senderCommand commandString labelString[] args) {
            if (
    sender instanceof Player) {
                
    Player p = (Playersender;
                if (
    args.length == 0) {
                    
    p.sendMessage("§7Введите никнейм игрока");
                    return 
    true;
                }
                if (
    p.getName().equalsIgnoreCase(args[0])) {
                    
    p.sendMessage("§7Вы не можете отправить личное сообщение самому себе!");
                    return 
    true;
                }
                
    Player target Bukkit.getPlayerExact(args[0]);
                if (
    target == null || !target.isOnline()) {
                    
    p.sendMessage("§7Игрок с таким никнеймом не найден!");
                    return 
    true;
                }
                if (
    args.length == 1) {
                    
    p.sendMessage("§7Введите текст сообщения!");
                    return 
    true;
                }
                
    StringBuilder message = new StringBuilder();
                for (
    int i 1args.lengthi++) {
                    
    message.append(args[i]).append(" ");
                }
                
    p.sendMessage("§7Вы отправили сообщение игроку §e" target.getName() + "§7: " message.toString());
                
    target.sendMessage("§7Игрок §e" p.getName() + "§7 отправил вам сообщение: " message.toString());
            }
            return 
    true;
        }
     
  3. Conorfish

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

    Баллы:
    76
    PHP:
    if (sender instanceof Player) { //если отправитель не игрок
       
    sender.sendMessage("Только игрокам!");
       return 
    true//останавливаем все последущее
    }
    Player from = (Playersender// Получаем отправителя команды, то есть того кто пишет /tell [player] [msg]
    Player to = (Playerargs[0]; // Получаем тому, кому писать, то есть - /tell [args[0]] [args[1]] [args[2]]..., мы получаем именно первое слово, и делаем из него игрока.
    if (to == null) { //если такого игрока нет онлайн
        
    from.sendMessage("Игрока не онлайн!"); //пишем отправителю команды, что игрок не онлайн
        
    return true// останавливаем всё.(Чтобы дальше не пошло)
    }
    if (
    args.lenght() == || args.lenght() == 1) { //если после /tell нет не ника, не текста. Либо если есть ник но нет текста
        
    from.sendMessage("Использование: /tell [Игрок] [Сообщение]"); //пишем отправителю
        
    return true;
    }
    String msg "";
    int i 1;
    while(
    <= args.lenght() - 1) { //перебираем всё кроме 1 слова, и добавляем к сообщению, в итоге мы получим сообщение целиком в переменную msg
        
    if (== 1) { //если это цикл происходит первый раз
            
    msg.concat(args[i]); //добавляем слово к msg
        
    } else {
            
    msg.concat(" " args[i]);
        }
        
    i++; //инкремент
    }
    from.sendMessage("Вы прошептали "+to.getName()+": " msg); //пишем отправителю - "Вы прошептали {ПОЛУЧАТЕЛЬ}: {СООБЩЕНИЕ}"
    to.sendMessage(from.getName()+" прошептал вам: "+msg); // пишем получателю - "{ОТПРАВИТЕЛЬ} прошептал вам: {СООБЩЕНИЕ}"
    Постарался описать всё.

    Про while можете исправлять, я знаю что скорей всего костыль, или типо того
     
  4. Автор темы
    lolqeeeeee

    lolqeeeeee Ньюби

    Баллы:
    1
    Имя в Minecraft:
    lolqeeeeee
    Спасибо всем большое, что помогли мне :)
     
  5. LOVEC3327

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

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    Тут не только цикл while исправлять
    Если отправитель игрок - вернет true и команда завершится. Условие задано неверно
    PHP:
    if (sender instanceof Player) { //если отправитель не игрок
       
    sender.sendMessage("Только игрокам!");
       return 
    true//останавливаем все последущее
    }
    Почему ты кастишь строку в Player?
    PHP:
    Player to = (Playerargs[0];
    Правильно будет так
    PHP:
    Player to Bukkit.getPlayerExact(args[0]);
    И чем тебе StringBuilder не угодил и цикл for? Нафига делать i <= args.length - 1, если можно сделать по-человечески и написать i < args.length. И откуда ты взял скобки после length, когда их там не должно быть
     
    Последнее редактирование: 3 ноя 2020
Статус темы:
Закрыта.

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