Как сделать чтобы после n-кликов по определённому блоку специальным предметом выдавался предмет

Версия Minecraft
1.12.2
31
0
Мне надо, чтобы когда игрок кликал по блоку(iron_dirt), к примеру, 15 раз спец. предметом(ItemWoodenExtractor) выдавался предмет (ItemMiksitDust)
Как это сделать? (буду не против ответа кодом)
 
Про саму выдачу я знаю, мне интересен сам подсчёт, так как я не знаю как юзать NBT
Попробовал сам что-то сделать, ничего не получилось
Java:
public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
    {
        if(worldIn.getBlockState(pos).getBlock() instanceof BlockIronDirt) {
            ItemStack item = player.getHeldItem(hand);
            item.damageItem(1, player);
            NBTTagCompound nbt = item.getTagCompound();
            String res = nbt.getString("clicks");
            Integer resint = Integer.valueOf(res);
            if(resint < 15) {
                String ress = res + 1;
                nbt.setString("clicks", ress);
                player.addItemStackToInventory(new ItemStack(Blocks.DIRT));
            } else if(resint == 15) {
                player.addItemStackToInventory(new ItemStack(Items.IRON_NUGGET));
            }
        }
        return EnumActionResult.SUCCESS;
    }
 

Вложения

  • crash-2019-12-19_16.48.10-client.txt
    6.6 KB · Просмотры: 1
Потому что в итемстаке NBTTagCompound по дефолту null, тебе надо чекать, есть ли он там, если нету, значит добавить, иначе взять тот, что есть. И не надо клики хранить в стринге, там есть setInteger. Ну а еще логика не верная. Надо сохранять в НБТ так же позицию блока и проверять сначала, по той же самой позиции ты кликаешь. Если позиция сменилать по сравнению с предыдущей, то тебе уже надо сбросить счетчик и начать считать с нуля, ибо ты кликаешь уже по другому блоку.
 
. Если позиция сменилать по сравнению с предыдущей, то тебе уже надо сбросить счетчик и начать считать с нуля
Мне не обязательно, чтобы клики были только по блоку на определённых коордах
тебе надо чекать, есть ли он там, если нету, значит добавить
Как это сделать?
 
Java:
if(!item.hasTagCompound()){
    NBTTagCompound nbt = new NBTTagCompound();
    nbt.setInteger("clicks", 1);
    //позиция блока еще, уже сам
    item.setTagCompound(nbt);
}else{
    //пок классике
}
Про названия не уверен, код на коленке написал.
Мне не обязательно, чтобы клики были только по блоку на определённых коордах
Тогда я кликну 5 раз по одному блоку, 10 раз по другому и мне выпадет предмет, что есть не совсем логично
 
Краш
Java:
@SideOnly(Side.CLIENT)
    public void addInformation(ItemStack stack, @Nullable World worldIn, List<String> tooltip, ITooltipFlag flagIn)
    {
        NBTTagCompound nbt = stack.getTagCompound();
        Integer lore = nbt.getInteger("clicks");
        tooltip.add(String.valueOf(lore));
    }
 

Вложения

  • crash-2019-12-19_17.31.56-client.txt
    5.2 KB · Просмотры: 0
Опять же,
Потому что в итемстаке NBTTagCompound по дефолту null, тебе надо чекать, есть ли он там, если нету, значит добавить, иначе взять тот, что есть.
И пиши просто int, без всяких Integer и прочего
 
Назад
Сверху