Помогите Как выполнить действие, если первый аргумент команды - help

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

_MCMaster_

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
DragOn4ik
Hi. Вопрос в названии темы.
Вы скажете - легко. if(args[0] == "help") {//действие}
Но не тут то было. Действие не выполняется, не учитывается return true, а начинается проверка следующего условия...
Отрывок из кода:
Код:
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if(command.getName().equalsIgnoreCase("fakechat")) {
        if(sender instanceof ConsoleCommandSender) {
            getLogger().info("Only for players. Use 'cfakechat'");
            return true;
        }
        Player player = (Player)sender;
        if(args.length == 0) {
            player.sendMessage(ChatColor.RED + "Не указан игрок!");
            return true;
        }
        if(args[0] == "help") { // если первый аргумент команды равен строке help
            player.sendMessage(ChatColor.GREEN + "Help"); // выводим сообщение "help"
            return true; //возвращаем true, тем самым останавливая выполнение команды.
        }
        if(player.getServer().getPlayerExact(args[0]) == null) {
            player.sendMessage(ChatColor.RED + "Игрока нет на сервере!");
            return true;
        }
При вызове команды /fakechat help, получаю "Игрока нет на сервере"... Странно... Как будто bukkit не видит условия if(args[0] == "help")...
Проблема решена. Решение - сравнивать через equals, вместо ==
 
Последнее редактирование:
Hi. Вопрос в названии темы.
Вы скажете - легко. if(args[0] == "help") {//действие}
Но не тут то было. Действие не выполняется, не учитывается return true, а начинается проверка следующего условия...
Отрывок из кода:
Код:
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if(command.getName().equalsIgnoreCase("fakechat")) {
        if(sender instanceof ConsoleCommandSender) {
            getLogger().info("Only for players. Use 'cfakechat'");
            return true;
        }
        Player player = (Player)sender;
        if(args.length == 0) {
            player.sendMessage(ChatColor.RED + "Не указан игрок!");
            return true;
        }
        if(args[0] == "help") { // если первый аргумент команды равен строке help
            player.sendMessage(ChatColor.GREEN + "Help"); // выводим сообщение "help"
            return true; //возвращаем true, тем самым останавливая выполнение команды.
        }
        if(player.getServer().getPlayerExact(args[0]) == null) {
            player.sendMessage(ChatColor.RED + "Игрока нет на сервере!");
            return true;
        }
При вызове команды /fakechat help, получаю "Игрока нет на сервере"... Странно... Как будто bukkit не видит условия if(args[0] == "help")...
Когда ты сравниваешь через "==", ты сравниваешь не сами обьекты как данные, а только ссылки на ячейки памяти, где эти обьекты хранятся. Допустим тебе передают args[0] в ячейке 0x01, а ты создаешь новую строчку "help" для сравнивания, она записывается в ячейку 0x02, потому 0x01 != 0x02. Сравнивай через equals. Для игнора регистра букв equalsIgnoreCase.

if (args[0].equalsIgnoreCase("help")) ...
 
Когда ты сравниваешь через "==", ты сравниваешь не сами обьекты как данные, а только ссылки на ячейки памяти, где эти обьекты хранятся. Допустим тебе передают args[0] в ячейке 0x01, а ты создаешь новую строчку "help" для сравнивания, она записывается в ячейку 0x02, потому 0x01 != 0x02. Сравнивай через equals. Для игнора регистра букв equalsIgnoreCase.

if (args[0].equalsIgnoreCase("help")) ...
Понятно, не знал такого аспекта. Спасибо)
* Виртуальный лайк @LuckyZeeRo *
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх