Last active
October 14, 2024 10:22
-
-
Save RainWarrior/0618131f51b8d37b80a6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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 |
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)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
It would be great to have a tutorial explain how to properly create custom transforms for inventory rendering.