Override the
onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) {}
method of your Item. It's called every tick the Item is in the players inventory.
getActualState() is called whenever the block is rendered to get the correct state. For example, to load the right texture or the right model.
Code from the Vanillacode class "BlockRendererDispatcher->renderBlock".
Thats how I can see this in the code.
For the spreading you can also do this:
And I hope this solve your block texture problem:
I don't if just writing this instead the property name is enough.
The code above works for me.
"variants": {
"normal":[{}],
"inventory":[{}]
}