Проверка наличия предмета в инвентаре игрока и получение инстанса первого

Версия Minecraft
1.7.10

Sainthozier

Стрелочник
627
11
371
Всем привет.

Собственно всё в теме. Проверяю наличие так - player.inventory.hasItem(Items.MyItem). Если есть варианты получше, рад буду выслушать и узнать что-то новое. Проверяю именно на айтем, т.к. вычитал где-то на форджовском форуме, что проверять на ItemStack не всегда правильно. Так вроде бы работает, меня вполне устраивает. Но как теперь получить экземпляр проверяемого предмета? Хочу засетить пару нбт тегов. Думал, что нужно пройтись по всем слотам и проверять, но тогда первая проверка player.inventory.hasItem(Items.MyItem) не нужна ведь уже по сути... Хотя можно будет потом получить номер слота в котором находится нужный предмет и достать его методом getStackInSlot()? Мне кажется, что я думаю в нужном направлении, но всё равно что-то не так.

Подскажите, пожалуйста, как правильнее проверить наличие айтема в инвентаре и получить этот айтем для дальнейших манипуляций над ним.
 
Решение
Посмотри как это реализовано...
Java:
    public boolean hasItem(Item item) {
    
        int i = this.func_146029_c(item);
        
        return i >= 0;
    }
    
    private int func_146029_c(Item item) {
    
        for (int i = 0; i < this.mainInventory.length; ++i) {
        
            if (this.mainInventory[i] != null && this.mainInventory[i].getItem() == item) {
                
                return i;
            }
        }

        return - 1;
    }

Помоему ответ на вопрос как получить индекс слота напрашивается сам собой.
243
28
202
Посмотри как это реализовано...
Java:
    public boolean hasItem(Item item) {
    
        int i = this.func_146029_c(item);
        
        return i >= 0;
    }
    
    private int func_146029_c(Item item) {
    
        for (int i = 0; i < this.mainInventory.length; ++i) {
        
            if (this.mainInventory[i] != null && this.mainInventory[i].getItem() == item) {
                
                return i;
            }
        }

        return - 1;
    }

Помоему ответ на вопрос как получить индекс слота напрашивается сам собой.
 
Сверху