Use metadata instead. Every random updateTick, increase the metadata by 1, then display an icon based on the metadata.
What you're doing now is not going to work, as the Block class is a singleton.
Look for a case statement. There's one main one that takes the block ID and passes off the rendering for certain blocks in various ways. Grass may have its own, if not it falls into a standard cube renderer.
Ok i don't exactly know how to do this, so where is the grass block rendered?
Giant class called RenderBlocks.java, if I recall correctly. I don't recommend looking through it, it's not organized in a fashion that will help you.
You don't need to implement or use any packets to synch inventories.
My guess is that somewhere along the line you've improperly set up your gui / container / tileentity classes, but I wouldn't know where to look.
Fuck, you really can't look at vanilla to see how it handles it? Open BlockLeavesBase, BlockBreakable, BlockGlass, BlockPortal, BlockLeaves, or BlockIce and see how that block does it.
It's really simple, really obvious, and has a freaking javadoc about transparency and rendering.
Like the item function isMap() that is used by nothing (there's actually one reference, fairly obscure).
Maps rendering in item frames is handled by if(containedItem == Item.Map) which makes extending ItemMapBase for any reason a real annoyance.