Try looking in the ItemStack class for a method or looking around in the minecraft or forge source code that has to deal with ItemStacks like the Container classes or ItemStackHandler class.
Mojang however has outright stated that Forge is better than anything that they could make, though this was a while ago. But the Java edition as of now(presumably ever) will not get a Modding API. There are plans for bedrock edition to receive a Modding API.
Instead of new ModelResourceLocation(Item#getRegistryName(), "inventory"); you will have to do new ModelResourceLocation(new ResourceLocation(modid, "folder/itemregistryname (without the modid)"), "inventory");
When you register your Item models.
LivingSpawnEvent.CheckSpawn is used to determine if an Entity can naturally spawn. Anything forced like the summon command or a spawn egg isn't confined to this. If you need to change something about an entity that is not your creation use the EntityJoinWorldEvent or EntityConstructingEvent.
I have no idea. I didn't make the mod, nor do I know how they changed their code or when. But it happened to you in both 1.4.5 and 1.5.0-9... So maybe 1.4.2 will work for you. Until they fix it from your issue on github you will have to stick with 1.4.2
Diesieben provided you with possible solutions instead of why it was happening. He already knew it was a problem with their code. He is a busy man so he doesn't have time to look for a reason why something is happening in a specific manner, like I just had too.
It's a problem with there code. They are assuming the player exists at a time when the player doesn't yet exist. This causes Minecraft to crash with the exception you currently have. Post an issue on their github here.
If I'm understanding you correctly, here is my solution. Instead of making an IRecipeFactory that only works for this specific recipe/nbt data. Make a IRecipeFactory that handles all NBT data.
First off you should never interact with any of the registries in the ForgeRegistries class. You should instead use the Event called Register<type> and pass the Object type you want to register ie Register<Item>. The numerical I'd is abstracted away from modders as it is much better and easier for humans to deal with strings such as the registry name of an Item. Instead of a "magic number".
This isn't a problem. You are just skipping the vital part of this method.
k is the ID of the biome gotten from the BiomeProvider. With successful reflection and replacement of the BiomeProvider field you will be able to fully decide which biome gets placed where by overriding BiomeProvider#getBiome within your BiomeProvider class. You also need to register your Biomes as there own biomes in order for this to truly work.