@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...
Сделать курсивной, как это делается по настоящему

Импорты есть, просто тут не написал
И если можно, то поподробней
  • Вопрос задан
  • 82 просмотра
Решения вопроса 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 и отправит сообщение отправителю, указывающее, что игрок теперь является поддельным оператором.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы