Не получается сравнить два ItemStack'а

Версия Minecraft
1.12.2
Нужно сравнить предмет в OFFHAND с другим предметом, и если OFFHAND = предмет, то вернуть успешное выполнение.
Я попробовал много разных вариантов, но все же остановился на этом.
Проблема в том, что даже если предмет в левой руке не тот, или его вообще нет - выполнение все равно успешное.
Java:
public class BeefCan extends ItemFood implements IHasModel
{
    public BeefCan(String name, int amount, float saturation, boolean isWolfFood)
    {
        super(amount, saturation, isWolfFood);
        this.setRegistryName(name);
        this.setUnlocalizedName(name);
        this.setCreativeTab(CreativeTabs.FOOD);
        ItemsRegister.ITEMS.add(this);
    }
//проверка
    public ActionResult<ItemStack> onItemRightClick(World worldIn, EntityPlayer playerIn) {
        ItemStack offhand = playerIn.getHeldItemOffhand();
        ItemStack mainhand = playerIn.getHeldItemMainhand();
        if (offhand!=(new ItemStack(ItemsRegister.OPENER))) {
        return new ActionResult<ItemStack>(EnumActionResult.FAIL, mainhand);
        } else {
        return new ActionResult<ItemStack>(EnumActionResult.SUCCESS, mainhand);
    } 
}
//-------
    @Override
    protected void onFoodEaten(ItemStack stack, World worldIn, EntityPlayer player)
    {  
        super.onFoodEaten(stack, worldIn, player);
        ItemStack emptycan = new ItemStack(ItemsRegister.EMPTY_CAN);
        player.addItemStackToInventory(emptycan);
    }
    @Override
    public void registerModels() {
        Main.proxy.registerItemRenderer(this, 0, "inventory");
    }
}
 
Действительно, дело было в параметрах. Я вчера потратил кучу времени из-за своей невнимательности...
Теперь есть нельзя, но проигрывается анимация действия
переделал EnumActionResult.SUCCESS в
return new ActionResult<ItemStack>(EnumActionResult.PASS, mainhand);
Однако, теперь если взять в offhand BeefCan, а в mainhand Opener, то BeefCan станет Opener'ом, а в mainhand будет лишь фантомный предмет (который исчезает при взаимодействии с ним).
Наверное, лучше пока оставить эту идею на потом.
 
7,099
324
1,510
Покажи какой код получился
 
Сейчас переделал, не думаю что сработает т.к. по сути ничего не поменялось
Java:
 @Override
     public ActionResult<ItemStack> onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) {
        ItemStack offhand = playerIn.getHeldItem(EnumHand.OFF_HAND);
        ItemStack mainhand = playerIn.getHeldItem(EnumHand.MAIN_HAND);
        if (!ItemStack.areItemStacksEqual(offhand, new ItemStack(ItemsRegister.OPENER))) {
            return new ActionResult<ItemStack>(EnumActionResult.FAIL, mainhand);
        }
        playerIn.canEat(true); //добавил
        return new  ActionResult<ItemStack>(EnumActionResult.SUCCESS, mainhand); //снова вернул SUCCESS т.к. точно так же сделано в ItemFood игры
        
    }
 
Если что, код открывашки. Тут же нет ничего такого, что может повлиять на результат
Java:
public class Opener extends Item implements IHasModel{
    public Opener (String name) {
        this.setRegistryName(name);
        this.setUnlocalizedName(name);
        this.setCreativeTab(CreativeTabs.TOOLS);
        this.setMaxStackSize(1);
        ItemsRegister.ITEMS.add(this);
    }
    
    
    @Override
    public void registerModels() {
        Main.proxy.registerItemRenderer(this, 0, "inventory");
    }
}
 
7,099
324
1,510
onItemRightClick вызывается для предмета в handIn руке, а возврат идет всегда для mainhand, типо. Это не нарушение логики?
 
Полное цитирование предыдущего сообщения запрещено
onItemRightClick вызывается для предмета в handIn руке, а возврат идет всегда для mainhand, типо. Это не нарушение логики?
Проблема с фантомным предметом решена, спасибо
Но я все равно не могу съесть эту чертову банку.
 
Сверху