-
-
Save RainWarrior/0618131f51b8d37b80a6 to your computer and use it in GitHub Desktop.
| <blockstate> == { | |
| "forge_marker": 1, | |
| "defaults": <variant>, // optional, added to all variants | |
| "variants": { | |
| "<property>": { | |
| "<value>": <variant> // variant definition for the specified value of this property; variants for multiple values can be specified. | |
| }, | |
| "<variant name>": <variant>, // variant definition for the full variant string | |
| "<variant name>": [<variant1>, ...], // array of definitions for the full variant - result will be the random variant | |
| } | |
| } | |
| <variant> == { | |
| "model": "<model location>", | |
| "textures": { // remaps the <from> texture in the model to <to>; multiple remappings can be specified | |
| "<from>": "<to>" | |
| }, | |
| "x": <angle-90>, // vanilla rotation compatibility; only multiples of 90 degrees are supported, see vanilla specification | |
| "y": <angle-90>, | |
| "transform": <root-transform>, // transformations | |
| "uvlock": <bool>, // see vanilla specification | |
| "weight": <int>, // random weight, see vanilla specification | |
| // submodels: all stuff specified will be merged into the base model. If this is the root variant without the model - base will be chosen from one of the submodels. | |
| "submodel": "<model location>", | |
| "submodel": <variant>, | |
| "submodel": [<variant>, ...], | |
| "custom": { "<key>": <value> } // custom data that models can use | |
| } | |
| <root-transform> == <transform> | |
| <root-transform> == { | |
| "thirdperson": <transform>, | |
| "firstperson": <transform>, | |
| "gui": <transform>, | |
| "head": <transform>, | |
| // or any of the <transform> keys | |
| } | |
| <transform> == "<builtin string>" | |
| currently supported builtin strings: | |
| "identity" - identity transformation | |
| "forge:default-block" - default block transformation (example: stone) | |
| "forge:default-item" - default 2d item transformation (example: bucket) | |
| "forge:default-tool" - default 2d tool transformation (example: pickaxe) | |
| This may be expanded to something more generic in the future. | |
| <transform> == <matrix> | |
| <transform> == { "matrix": <matrix> } | |
| <matrix> == [ | |
| [<number>, <number>, <number>, <number>], | |
| [<number>, <number>, <number>, <number>], | |
| [<number>, <number>, <number>, <number>] | |
| ] | |
| 4x3 matrix (3x3 affine part + translation column) | |
| <transform> == { | |
| // all keys are optional | |
| "translation": [<number>, <number>, <number>], | |
| "rotation": <rotation>, | |
| "scale": [<number>, <number>, <number>], // per-axis scale | |
| "scale": <number>, // uniform scale | |
| "post-rotation": <rotation> | |
| } | |
| <rotation> == [<number>, <number>, <number>, <number>] | |
| Quaternion(x, y, z, w) | |
| <rotation> == {"<axis>": <number>} | |
| Rotation around the coordinate axis, in degrees. Value is unrestricted | |
| <rotation> == [{"<axis1>": <number>}, ...] | |
| Composition of rotations around multiple axes, in the specified order |
Is there a better documentation of this with more examples ? I can't figure this forge out for the life of me.
It would be great to have a tutorial explain how to properly create custom transforms for inventory rendering.
This is awesome information however one thing remains unclear to me. If i have a block that has 6 Properties that are correctly synced between the block and tile entity, How do i properly implement the blockstate where each of those Properties represents a different model within the block. I've tried separate Properties and i've tried nesting them. Each of the 6 properties can be true or false meaning there are 64 possible states (although in practice 2 of those states are impossible to place in world) Thanks in advance! :D
The <variant> object can also have the property "gui3d": <bool> (same effect as IBakedModel::isGui3D) and the property "smooth_lighting": <bool> (that replaces "ambientocclusion" in vanilla models)
Lines 6 and 7 seem to have incorrect indentation.
For variants, "x" and "y" can't be set to non-90 rotations? It would be preferable to allow this, since it's much simpler than having to specify the transform tag. (also, these rotate around the center of the block and TRSRs don't, IIRC.)