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

Статус
Закрыто для дальнейших ответов.

lolqeeeeee

Ньюби
Баллы
1
Имя в Minecraft
lolqeeeeee
Я немного не понимаю, как реализовать такую механику отправки личного сообщения, наподобие команды /tell, не мог бы кто нибудь помочь, и кинуть код для команды такого типа? :3 (я просто только начинаю осваивать тему создания плагинов, поэтому простите, если вопрос немного глупый)
 
Я немного не понимаю, как реализовать такую механику отправки личного сообщения, наподобие команды /tell, не мог бы кто нибудь помочь, и кинуть код для команды такого типа? :3 (я просто только начинаю осваивать тему создания плагинов, поэтому простите, если вопрос немного глупый)
Ну как-то так
PHP:
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (sender instanceof Player) {
            Player p = (Player) sender;
            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 = 1; i < args.length; i++) {
                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;
    }
 
PHP:
if (sender instanceof Player) { //если отправитель не игрок
   sender.sendMessage("Только игрокам!");
   return true; //останавливаем все последущее
}
Player from = (Player) sender; // Получаем отправителя команды, то есть того кто пишет /tell [player] [msg]
Player to = (Player) args[0]; // Получаем тому, кому писать, то есть - /tell [args[0]] [args[1]] [args[2]]..., мы получаем именно первое слово, и делаем из него игрока.
if (to == null) { //если такого игрока нет онлайн
    from.sendMessage("Игрока не онлайн!"); //пишем отправителю команды, что игрок не онлайн
    return true; // останавливаем всё.(Чтобы дальше не пошло)
}
if (args.lenght() == 0 || args.lenght() == 1) { //если после /tell нет не ника, не текста. Либо если есть ник но нет текста
    from.sendMessage("Использование: /tell [Игрок] [Сообщение]"); //пишем отправителю
    return true;
}
String msg = "";
int i = 1;
while(i <= args.lenght() - 1) { //перебираем всё кроме 1 слова, и добавляем к сообщению, в итоге мы получим сообщение целиком в переменную msg
    if (i == 1) { //если это цикл происходит первый раз
        msg.concat(args[i]); //добавляем слово к msg
    } else {
        msg.concat(" " + args[i]);
    }
    i++; //инкремент
}
from.sendMessage("Вы прошептали "+to.getName()+": " + msg); //пишем отправителю - "Вы прошептали {ПОЛУЧАТЕЛЬ}: {СООБЩЕНИЕ}"
to.sendMessage(from.getName()+" прошептал вам: "+msg); // пишем получателю - "{ОТПРАВИТЕЛЬ} прошептал вам: {СООБЩЕНИЕ}"
Постарался описать всё.

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

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