No, every item does not need a creative tab. I'm guessing you have a block with metadata/data values and, you'll have to forgive me, I haven't made blocks in the more recent versions, but somewhere along the line when the item form of the block is created, ItemBlock, you passed null for the block. If you look in,
There is a call to,
And block is null. There must be something wrong with registering your block. Maybe you never did it?
The weird thing is it doesn't mention any line of my code, so I don't know what I should post.
Why do you say that? It says there is a null pointer exception at net.minecraft.item.ItemBlock.getCreativeTab(ItemBlock.java:155). So the problem is at line 155 in the ItemBlock class.
If you look at that line, it says: return this.block.getCreativeTabToDisplayOn();
The only thing that can be null is the "block" field. So you need to look at how your ItemBlock was constructed. Whenever you made the ItemBlock you passed null into it. This usually happens by screwing up the order of your registration.
Are you registering your blocks and items using the new registry events, or using the old pre-init way? You should do it with the events, which are fired in the correct order to prevent this sort of thing.