Complex Block Models

Complex Block Models add variety to the game, and when creating them, you have a massive array of possibilities to work with. You control everything from the shape of the bounding box, to the position of the textures on each face. As such, this tutorial will most likely be a lengthy one, so pay close attention.

Overview
Here's how this tutorial is going to be set up:
 * Using parent vanilla models
 * Creating a custom model using Json files
 * Links to some modelling programs

How block models work
Every block in the game is made up of a series of cuboids, small cubes about an eighth the size of a full block by default. These cuboids are assigned a 3D vector position in the world, a rotation, and a size. There a few different ways to generate these cuboids: You can either manually define the bounding box, and give numerical arrays of data in the code, you can set a parent model that can only be re-textured, not remodeled, or you can download software and model a cube, export it, and have the program generate a Json file that you can put in your mod files. The third option is the fastest and most efficient, but I'm going to show you how to use the first two methods.

Using parent models
Consider the following Json file from the block we made in the block creation tutorial: {   "parent": "block/cube_all", "textures": { "all": ":blocks/test_block" } } At the very top, we have the "parent" model, which is defined as a regular cube or "cube_all." Simply put, this line sets the parent model as a regular six-sided cube. You can change this, and we'll talk about that in a bit. On the group below that, we assign the textures to the faces we want based on the parent model, (see Multi-Texturing Blocks tutorial).

You can use just about any block in the game, including the 2D planes (the grass model, for example is just two textured planes perpendicular to each other). to use as a parent model.

Creating a custom model from code
/missing

Creating a custom model from software
Mr. Crayfish's Modelling Software