[1.9+]Помогите найти ошибку!

904
19
321
Доброго времени суток!
Собственно, гвоздь программы onUseItem. Мне нужно проверить клик ПКМ по любому блоку кроме песка и выдать итем. Если же над блоком находится вода то, вне зависимости какой блок, выдавать итем №2. Но мой способ не работает, и я уже час не могу понять почему.
Помогите, если не трудно.
Код:
package ru.reglaps.reals.items;

import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;

public class Leaf extends DefaultItem{

    public Leaf(String NAME, int SCOUNT, String RNAME) {
        super(NAME, SCOUNT, RNAME);
    }
    
    @Override
    public float getStrVsBlock(ItemStack stack, IBlockState state) {
        Material material = state.getMaterial();
        return material != null ? 0.0F : 0.0F;
        
    }
    
    @Override
    public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
        
        int x = pos.getX();int y = pos.getY();int z = pos.getZ();
        if(stack.stackSize < 2) {
            if(world.getBlockState(new BlockPos(x, y++, z)) == Blocks.WATER) {
                player.inventory.removeStackFromSlot(player.inventory.getSlotFor(player.inventory.getCurrentItem()));
                player.inventory.addItemStackToInventory(new ItemStack(RegistryItem.WetLeaf));
            }
            else if(world.getBlockState(pos) != Blocks.SAND) {
                player.inventory.removeStackFromSlot(player.inventory.getSlotFor(player.inventory.getCurrentItem()));
                player.inventory.addItemStackToInventory(new ItemStack(RegistryItem.CrumpledLeaf));
            }
        }
        else if(world.getBlockState(new BlockPos(x, y++, z)) == Blocks.WATER) {
            --stack.stackSize;
            player.inventory.addItemStackToInventory(new ItemStack(RegistryItem.WetLeaf));
        }
        else if(world.getBlockState(pos) != Blocks.SAND) {
            --stack.stackSize;
            player.inventory.addItemStackToInventory(new ItemStack(RegistryItem.CrumpledLeaf));
        }
        
        return EnumActionResult.SUCCESS;
    }
[merge_posts_bbcode]Добавлено: 24.07.2016 23:28:33[/merge_posts_bbcode]

Условий много потому, что если просто при клике ПКМ выполнять --stack.stackSize, то в конце концов уйдёт в отрицательные числа.

[merge_posts_bbcode]Добавлено: 24.07.2016 23:30:50[/merge_posts_bbcode]

Поэтому я дополнительно проверяю, что если stackSize меньше двойки, то удаляю весь оставшийся стак...

[merge_posts_bbcode]Добавлено: 24.07.2016 23:37:39[/merge_posts_bbcode]

Ох, неужели никто не знает? Вся проблема в том что я не могу установить именно проверку блоков, то-есть getBlockState! Не то что-бы его не видит... Просто почему-то игнорирует. Всегда выдаёт один итем - crumpledLeaf, независимо от того где и какой блок находится.
[merge_posts_bbcode]Добавлено: 24.07.2016 23:53:12[/merge_posts_bbcode]

Ну ок, раз никто не знает, буду выдавать wetLeaf через другое событие...
З.Ы
Вопрос не по теме.
Как заспавнить энтити итем, а то я толком не разобрался. Вернее спавнить обычных энтити я умею, а как задать какой-то итем для EntityItem. Пытался пользоваться world.spawnEntityInWorld();
 
Сверху