You can register IRecipes just fine, but you need to reference them from a JSON recipe file.
To register a custom IRecipe you need to get a RecipeType usingRecipeType.get (look at VanillaRecipeTypes).
You also need to register a custom IRecipeSerializer using RecipeSerializers.register. RecipeSerializers also contain the registering of all vanilla serializers.
To use your custom IRecipe, set the type of your recipe to the ResourceLocation you specified from YourIRecipeSerializer#getName.
You don't. When the data changes on in the GUI, you send a packet from the client to the server containing the new information. The server will receive that packet and pass it to the packet handler together with the player, where you can verify if the data is correct (to prevent cheating) and set the capability data.
You don't have to with Java 8+.
@DcZipPL don't provide copy/paste code like that. He doesn't learn anything from it and it's actually wrong in multiple places. @TheHex create your Items in a RegistryEvent.Register<Item> event handler instead of a static initializer.
https://github.com/MinecraftForge/MinecraftForge/issues/5545
As Lex said, the current fluid system is completely broken, and they won't add support until 1.14. So you can try to figure out how to use the vanilla system, otherwise you're out of luck.
Mojang obfuscates the vanilla source code. Forge uses a tool called MCP which supplies names for each variable/method/parameter. However, those names are supplied by the community, which is why there are consistency issues throughout the code.
Why did you comment out the "apply plugin: 'forge'"? It needs to be there.
Also, stop modding for 1.7.10. It's not supported anymore because of its age.
So it's actually the same as before (gradlew setup) however I think something got corrupted because a clean clone and fresh setup works again.
EDIT: It was caused by the Gradle daemon getting locked up. This has now been fixed in the newest ForgeGradle version.