Now all you need to do I think is call markDirty() in your add/remove methods. You will have an easy time adding more recipes if you use ItemStacks instead of ints BTW.
A couple things on instead of implementing ITileEntityProvider just override hasTileEntity(IBlockState state) and createTileEntity(IBlockAccess(might be World) world, IBlockState state). Next are you sure those particles are not spawning put some printlns in the if else chain.
Yes because you are passing a null item instead of an initialized one. Also item registration should really be done in the preInit method and instead of using Minecraft...getItemModelMesher(...) use ModelLoader.setCustomModelResourceLocation(...).