Задать вопрос
@keborg

Плагин майнкрафт работает неправильно, что не так?

Я хотел сделать плагин, который пишет заданному игроку, что тот стал оператором (фейковым), но это не так работает
Код:
public class FakeOPCMD implements CommandExecutor {


    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        String player1;

        try {
            player1 = args[0];
        } catch (ArrayIndexOutOfBoundsException e) {
            sender.sendMessage(ChatColor.RED + "Wrong command!");
            return true;
        }
        Player m_player = Bukkit.getPlayer(player1);
        if (m_player == null) {
            sender.sendMessage(ChatColor.RED + "Player not found!");
            return true;
        }


        m_player.sendMessage(ChatColor.GRAY + "[Console: Opped " + m_player.getName() + "]");
        sender.sendMessage(ChatColor.GREEN + "Fake message sent!");
        return true;
    }
}

То есть ты вводишь команду: /fop ник
Но если я введу /fop, и потом введу первую букву своего ника, то он отправит мне сообщение о том что я оператор
Кароч, кто не понял: как пофиксить то что бы надо было вводить полностью ник, а не так что одну букву ввёл и всё заработало

И ещё вопрос: как эту фразу: Console: Opped...
Сделать курсивной, как это делается по настоящему

Импорты есть, просто тут не написал
И если можно, то поподробней
  • Вопрос задан
  • 91 просмотр
Подписаться 1 Средний 11 комментариев
Решения вопроса 1
Denkuwus
@Denkuwus
15 y.o
public class FakeOpCommandExecutor implements CommandExecutor {
  @Override
  public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (args.length != 1) {
      sender.sendMessage("Incorrect command usage. Usage: /fop <player>");
      return true;
    }

    String targetPlayerName = args[0];
    Player targetPlayer = Bukkit.getPlayerExact(targetPlayerName);
    if (targetPlayer == null) {
      sender.sendMessage("Player '" + targetPlayerName + "' not found. Please enter the full player name.");
      return true;
    }

    targetPlayer.setOp(true);
    sender.sendMessage("Player '" + targetPlayerName + "' is now operator!");
    return true;
  }
}


Этот код проверит количество аргументов, переданных команде, и, если оно не равно 1 (имя целевого игрока), отправит отправителю сообщение о правильном использовании команды. Затем он попытается получить объект игрока для указанного игрока, используя метод Bukkit.getPlayerExact. Этот метод вернет объект игрока только в том случае, если имя игрока точно соответствует указанному имени. Если игрок не найден, отправителю будет отправлено сообщение о том, что игрок не найден и что необходимо ввести полное имя игрока. Если игрок найден, он установит его статус оператора в true и отправит сообщение отправителю, указывающее, что игрок теперь является поддельным оператором.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Сбер Москва
от 300 000 до 350 000 ₽
DIGITAL SECTOR Краснодар
от 250 000 до 450 000 ₽
Сбер Санкт-Петербург
До 350 000 ₽