Почему не работает нормально if(...) {...} ? 1.6

Доброго времени суток, слушайте, не понимаю, написал вроде правильно if, а он нормально работать отказывается. В общем, цель такова, есть предмет Рулетка (строительная, типо технический мод), если её нет в руке и она есть в инвентаре, то надо её зарендерить на ремне. А если она есть в руке, то перестать рендерить. Вот как выглядит мой код: 
Код:
       if(mc.thePlayer.inventory.hasItem(ModCore.Ruletka.itemID)){ //Она есть в инвентаре
            if(mc.thePlayer.inventory.getCurrentItem().getItem() != ModCore.Ruletka){ //Её нет в руке
            GL11.glPushMatrix();
            this.mc.getTextureManager().bindTexture(modelbRuletkatex);
            main.bipedBody.postRender(0.0625F);
            Ruletka.render_all(0.0625F);
            GL11.glPopMatrix();
            }
        }

Вроде работает, ладно, но когда я ставлю в хотбаре на пустой слот, то ничего не рендериться. Да и в консоль начинает отправляться по несколько тысяч сообщений [INFO] [STDOUT] ... Пытался делать дополнительную проверку "в руке ничего нет?" и в ней ещё делать рендер для проверки 
Код:
if(mc.thePlayer.inventory.getCurrentItem().getItem() == null) {...}

Но нет, не рендерит. Может я не так спрашиваю? Как прописать if(в руке ничего нет){}? Подскажите пожалуйста, буду благодарен.
 
Если тебе нужно чтобы руки были пусты, то это равно нулю (== null).
[merge_posts_bbcode]Добавлено: 11.01.2015 03:40:03[/merge_posts_bbcode]

Не в руке, но в инверторе... Хм... Не понимаю если честно.

[merge_posts_bbcode]Добавлено: 11.01.2015 03:42:05[/merge_posts_bbcode]

И у тебя переменная с большой буквы.
 
Рулетка типо не выделена окошком выбора в хот баре и рулетка находится у игрока в инвентаре
[merge_posts_bbcode]Добавлено: 11.01.2015 03:44:00[/merge_posts_bbcode]

Для примера можно взять BackTools, но мне не нужно так заморачиваться, мне просто нужно сделать это для одного предмета
 
Так я кое-что не правильно подсказал:
Нужно сначала проверить такое условие:
Код:
mc.thePlayer.inventory.getCurrentItem() == null
Это значит рука пуста, а если рука пуста, то его ".getItem()" будет бесполезен (и в некоторых случаи краш может быть).
 
А в java есть ли такая вещь, кроме "и" - &&, "или" -? Типо если есть можно - if(в руках ничего нет "или" в руках нет рулетки) { рендерим рулетку на ремешке}
[merge_posts_bbcode]Добавлено: 11.01.2015 04:50:13[/merge_posts_bbcode]

Пфф... вот я дебил, "или" это || ... я и не знал всё это время
 
А не проще было во вложенном условии проверять не то, что рулетки нет в руке, а то, что она есть? Тогда в else, попадают все остальные возможные варианты и там то ты и прописываешь рендер на ремне.
 
Алелуя братья, по моему способу сработало [font=Verdana, Helvetica, Arial, sans-serif]if(в руках ничего нет "или" в руках нет рулетки) { рендерим рулетку на ремешке} (перед этим проверив на её присутствие в инвентаре)[/font]
[merge_posts_bbcode]Добавлено: 11.01.2015 04:53:47[/merge_posts_bbcode]

Nao, кстати у тебя тоже идея хороша, где ты раньше был? D Спасибо, попробую и по такому варианту, мне кажется он намного меньше моего. Тему можно закрыть.

[merge_posts_bbcode]Добавлено: 11.01.2015 04:54:34[/merge_posts_bbcode]

timaxa007, спасибо за ценные подсказки!
 
Лол ) всего-то надо было загуглить. А еще лучше, прочитать пару-тройку вводных глав из любой общеобразовательной книжки по Java. Там почти всегда для людей незнакомых с дискретной математикой объясняют такие операторы как "и", "или", "не" и другие вариации, но и этих трех хватило бы. Пригодится не только в коде, но и в учебе, и даже в редстоун схемах.
 
Ну да, давно пора мне почитать хоть какой-то материал по java... Хех, руки не доходят
 
Дам краткую справку по логическим операторам, по доброте душевной :)

| - логическое ИЛИ (дает false только тогда, когда оба субусловия по обе стороны от оператора дают false, но при этом, обязательно проверяет оба субусловия, не смотря на то, что если первое дает true, то можно сразу давать результат)
& - логическое И (итоговое условие будет давать true, только если оба субусловия по обе стороны от оператора дают true, как и предыдущий оператор проверяет оба субусловия всегда)
^ - логическое исключающее ИЛИ [XOR] (дает true, только если субусловия дают разный результат true + false или false + true)
&& - логическое И с быстрым вычислением (то же, что и &, но дает результат сразу, если первое условие false [я думаю ты уже понял, что раз оператор дает true только когда оба субусловия true, то после обнаружения false в первом субусловии дальше можно не париться и говорить false])
|| - логическое ИЛИ с быстрым вычислением (делает то же, что |, но выдает результат сразу, если первое субусловие true)
! - логическое отрицание (может быть более понятно будет назвать это инверсией, то бишь если условие true, то установка перед ним этого оператора превратит условие в false и наоборот)


Что можно делать на основе этих знаний?

Пример 1: тебе нужно выполнять какие-либо действия, если игрок бежит и при этом еще и прыгает
Код:
if ((бежит == true) && (прыгает == true)) {
    // действия
}

Пример 2: тебе нужно выполнять какие-либо действия, если над блоком есть вода, или он находится под открытым небом и при этом идет дождь
Код:
if ((надБлокомВода == true) || ((надБлокомСтолбВНебо == true) && (идетДождь == true)) {
    // действия
}

Пример 3: тебе нужно выполнять какие-либо действия, если твой моб одновременно и радостный и жрет кого-то, или же наоборот, он не радостный и "лапу сосет". Если же он ни кого не жрет, но всё равно радостный, или же грустно кого-то дожевывает, то действий делать не надо
Код:
if !((когоТоЖрет == true) ^ (радуется == true)) {
    // действия
}
 
Ого, Nao, спасибо, я многое из этого не знал, спасибо большое!
 
Ты из ума выжил, я не про это.
Зачем писать
Код:
if(field == true)
Если можно написать просто
Код:
if(field)
 
Dragon2488, если бы я написал if (флагТакой-то) {} то пришлось бы объяснять еще теорию про сами булевы переменные. А я такой цели не преследовал. Это уже затрагивает и курс дискретной математики и типы в Java. А если писать название действия и его результат, то всё наглядно.

Ты никогда не задумывался, почему в книгах примеры кода очень часто оторваны от реальности? Они нерациональны, не логичны, они просто показывают суть работы определенных механик и ничего больше. Именно из-за этого, люди у которых не было много практики после книг не могут писать нормальный адекватный код, так как они не видели реальных проектов. Для этого существуют отдельные книги про паттерны программирования, которые в свою очередь оторваны от самих языков программирования. Там в примерах показывается, как из стандартных языковых элементов сложить общепринятую, оптимальную конструкцию, которую априори должен понимать любой другой программист, чтобы решить какую-либо распространенную задачу. (конечно, понятие паттерна гораздо шире и в примере могут даже не содержаться языковые элементы, только логика проектирования и всё, но для объяснения данной ситуации возьмем выщербленный пример).

Так вот, мой пример был направлен только на наглядную демонстрацию работы логических операторов. Их можно было даже не по Java Convention писать, это скорее мой эстет внутренний сыграл.
[merge_posts_bbcode]Добавлено: 11.01.2015 15:44:59[/merge_posts_bbcode]

И да, ты можешь теперь рассказать человеку, почему можно писать if (flag) {} или же catch (IOExeption) {} и подобные вариации :)
 
Назад
Сверху