Modding:Block Json Properties: Difference between revisions

From Vintage Story Wiki
Line 17: Line 17:
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="4" class="propHeader"><b>Core (no byType available)</b></td>
     <td colspan="5" style='font-size: 14pt; border-bottom: 2pt solid black; padding-left: 100px;'><b>Core (no byType available)</b></td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 27: Line 27:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_code_info" data-tt-parent="p_code" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_code_info" data-tt-parent="p_code" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
A '''domain prefix''' will be added dynamically depending on the location of the file. Every mod and VintageStory itself have a unique prefix.
A '''domain prefix''' will be added dynamically depending on the location of the file. Every mod and VintageStory itself have a unique prefix.


Line 44: Line 44:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_variantgroups" data-tt-parent="root">variantgroups</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_variantgroups" data-tt-parent="root">variantgroups</div></td>
     <td>array of object</td>
     <td>array of objects</td>
     <td>-</td>
     <td>-</td>
     <td>Allows you define multiple variants of the same block.</td>
     <td>Allows you define multiple variants of the same item.</td>
    <td>armor, ore-graded, plank, </td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_variantgroups_info" data-tt-parent="p_variantgroups" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_variantgroups_info" data-tt-parent="p_variantgroups" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
The variantgroups property allows you to define multiple variants of this block. All of them will have their unique pattern, which will be added to the block code.
The variantgroups property allows you to define multiple variants of this item. All of them will have their unique pattern, which will be added to the item code.


An easy example would be a bowl, which can either be raw or burned:
An easy example would be a bowl, which can either be raw or burned:
Line 60: Line 61:
</syntaxhighlight>
</syntaxhighlight>


Meaning there will be two blocks <code>bowl-raw</code> and <code>bowl-burned</code>.
Meaning there will be two variants <code>bowl-raw</code> and <code>bowl-burned</code>.


----
----
Line 77: Line 78:
----
----


Additionally it is possible to refer to external lists that are found in the worldproperties folder, such as <code>block/rock</code>, which contains all states of all rock types. This used for <code>gravel</code>, <code>sand</code> and <code>rock</code>. It's a good way to keep everything organized:
Additionally it is possible to refer to external lists (used for blocks) that are found in the worldproperties folder, such as <code>block/rock</code>, which contains all states of all rock types. This used for <code>gravel</code>, <code>sand</code> and <code>rock</code>. It's a good way to keep everything organized:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
variantgroups: [
variantgroups: [
Line 89: Line 90:
----
----


Furthermore there are two ways of combining groups together. So far we covered the default combination mode, which is <code>multiplicative</code> (the total count of variants is the product of all states).
Furthermore there are other ways of combining groups together. So far we covered the default combination mode, which is <code>multiplicative</code> (the total count of variants is the product of all states). There are two other methods, Additive and SelectiveMultiply.
 
Let's take a look at the <code>additive</code> combination mode used in the flowerpot block:


Let's take a look at a different example (flowerpot), which uses the <code>additive</code> combination mode:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
variantgroups: [
variantgroups: [
Line 115: Line 117:


In this case, the result would be <code>same-raw</code>, <code>same-baked</code>, <code>different-raw</code>, <code>different-baked</code>, <code>red</code> and <code>green</code>
In this case, the result would be <code>same-raw</code>, <code>same-baked</code>, <code>different-raw</code>, <code>different-baked</code>, <code>red</code> and <code>green</code>
The third combination mode <code>"SelectiveMultiply"</code> which allows you to specify which variant groups you want to combine multiplicatively with. There are many examples of this in the clothing item JSONS, as shown below with the lowerbody asset:
<syntaxhighlight lang="json">
    code: "clothes",
    variantgroups: [
{ code: "category",  states: ["lowerbody"] },
{ code: "lowerbody", combine: "SelectiveMultiply", onVariant: "category", states: [
"aristocrat-leggings", "dirty-linen-trousers", "fine-trousers", "jailor-pants", "lackey-breeches", "merchant-pants", "messenger-trousers", "minstrel-pants", "noble-pants", "prince-breeches", "raindeer-trousers", "raw-hide-trousers", "shepherd-pants", "squire-pants", "steppe-shepherds-trousers", "tattered-peasent-gown", "torn-riding-pants", "warm-woolen-pants", "woolen-leggings", "workmans-gown"
        ] },
],
</syntaxhighlight>
The function <code>onVariant</code> specifies which variant group to selectively combine with, ignoring all other variants without it (in case some are combined additively).
Using this will result items called <code>clothes-lowerbody-aristocrat-leggings</code>, <code>clothes-lowerbody-dirty-linen-trousers</code>, etc.
     </td>
     </td>
   </tr>
   </tr>
Line 121: Line 140:
     <td>key: string; value: object</td>
     <td>key: string; value: object</td>
     <td>-</td>
     <td>-</td>
     <td>You can create properties for certain variants of the block.</td>
     <td>You can create properties for certain variants of the item.</td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_byType_info" data-tt-parent="p_byType" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_byType_info" data-tt-parent="p_byType" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
In order to define properties for specific variants you can add '''byType''' to the property name. This allows you to define it depending on the type and always follows the same syntax:
In order to define properties for specific variants you can add '''byType''' to the property name. This allows you to define it depending on the type and always follows the same syntax:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
Line 145: Line 164:
</syntaxhighlight>
</syntaxhighlight>


The char '''<code>*</code>''' stands for anything. In this case it ignores the code of the block.
The char '''<code>*</code>''' stands for anything. In this case it ignores the code of the item.


Furthermore this opens up even more possbilities for more advanced selectors like this one for doors:
Furthermore this opens up even more possbilities for more advanced selectors like this one for doors:
Line 179: Line 198:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
variantgroups: [
variantgroups: [
{ code: "type", states: ["normal", "bamboo"] },
{ code: "metal", states: ["copper", "tinbronze", "bismuthbronze", "blackbronze", "gold", "silver", "iron" ] },
],
],
textures: {
textures: {
horizontals: { base: "block/hay/{type}-side" },
"metal": { base: "block/metal/ingot/{metal}" },
verticals: { base: "block/hay/{type}-top" },
"wood": { base: "item/tool/material/wood" }  
},
},
</syntaxhighlight>
</syntaxhighlight>
Line 189: Line 208:
   </tr>
   </tr>
   <tr>
   <tr>
    <td colspan="4" class="propHeader"><b>Specific</b></td>
  <td scope="row"><div class="tt" data-tt-id="p_enabled" data-tt-parent="root">allowedVariants</div></td>
  <td>array of objects</td>
  <td>-</td>
  <td>Used to trim unnecessary items generated by combined variants. </td>
  <td>crystalizedore-graded, ore-graded, ore-ungraded</td>
</tr>
<tr>
  <td scope="row"><div class="tt" data-tt-id="p_enabled" data-tt-parent="root">skipVariants</div></td>
  <td>array of object</td>
  <td>-</td>
  <td>Similar to allowedVariants, but instead skips the creation of listed variants rather than assigning which are allowed. </td>
  <td>armor</td>
</tr>
  <tr>
    <td colspan="5" style='font-size: 14pt; border-bottom: 2pt solid black; padding-left: 100px;'><b>Specific</b></td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 199: Line 232:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_class_info" data-tt-parent="p_class" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_class_info" data-tt-parent="p_class" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
It can be used to open guis or adding other extra functionality to the block. A complete tutorial of how to add your own class to the game can be found [[Advanced Blocks|here]].
It can be used to open guis or adding other extra functionality to the block. A complete tutorial of how to add your own class to the game can be found [[Advanced Blocks|here]].
</td>
</td>
Line 211: Line 244:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_entityclass_info" data-tt-parent="p_entityclass" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_entityclass_info" data-tt-parent="p_entityclass" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
A chest for example uses the BlockEntity to store the inventory. A tutorial of creating your own entityclass can be found [[Block Entity|here]].
A chest for example uses the BlockEntity to store the inventory. A tutorial of creating your own entityclass can be found [[Block Entity|here]].
</td>
</td>
Line 223: Line 256:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_behaviors_info" data-tt-parent="p_behaviors" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_behaviors_info" data-tt-parent="p_behaviors" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
Here is an overview of most exisiting behaviors, if you want to create your own custom behavior you can read [[Adding Block Behavior]].
Here is an overview of most exisiting behaviors, if you want to create your own custom behavior you can read [[Adding Block Behavior]].
To see all of the current behaviors in the game see [[Json:block:behaviors|All Block Behaviors]]
To see all of the current behaviors in the game see [[Json:block:behaviors|All Block Behaviors]]
Line 257: Line 290:
  <div class="tt" data-tt-id="p_blockmaterial_other" data-tt-parent="p_blockmaterial">Other</div>
  <div class="tt" data-tt-id="p_blockmaterial_other" data-tt-parent="p_blockmaterial">Other</div>
</td>
</td>
     <td colspan="3" valign="top">
     <td colspan="4" valign="top">
Materials are hardcoded and currently only used to determine mining speed with a specific tool.
Materials are hardcoded and currently only used to determine mining speed with a specific tool.
</td>
</td>
Line 274: Line 307:
  <div class="tt" data-tt-id="p_matterstate_plasma" data-tt-parent="p_matterstate">plasma</div><br><br>
  <div class="tt" data-tt-id="p_matterstate_plasma" data-tt-parent="p_matterstate">plasma</div><br><br>
</td>
</td>
     <td colspan="3">
     <td colspan="4">
Used for special collision behavior and rendering. Currently used for:
Used for special collision behavior and rendering. Currently used for:


Line 294: Line 327:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_resistance_info" data-tt-parent="p_resistance" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_resistance_info" data-tt-parent="p_resistance" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
Same examples of resistance's values used in VintageStory:
Same examples of resistance's values used in VintageStory:
<table class="wikitable">
<table class="wikitable">
Line 340: Line 373:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_requiredminingtier_info" data-tt-parent="p_requiredminingtier" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_requiredminingtier_info" data-tt-parent="p_requiredminingtier" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
<table class="wikitable">
<table class="wikitable">
   <tr style="background-color: rgba(0,0,0,0.2);">
   <tr style="background-color: rgba(0,0,0,0.2);">
Line 389: Line 422:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_snowcoverage_info" data-tt-parent="p_snowcoverage" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_snowcoverage_info" data-tt-parent="p_snowcoverage" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
All none solid blocks can't be covered by snow unless it's defined different:
All none solid blocks can't be covered by snow unless it's defined different:
*Leaves (also branchy): '''true''',
*Leaves (also branchy): '''true''',
Line 403: Line 436:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_collisionbox_info" data-tt-parent="p_collisionbox" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_collisionbox_info" data-tt-parent="p_collisionbox" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
A '''half slab''' for example, has either a box going from 0,0,0 to 1,0.5,1 or going from 0,0.5,0 to 1,1,1, depending on whether it is a slab is down or up:
A '''half slab''' for example, has either a box going from 0,0,0 to 1,0.5,1 or going from 0,0.5,0 to 1,1,1, depending on whether it is a slab is down or up:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
Line 426: Line 459:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_collisionboxes_info" data-tt-parent="p_collisionboxes" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_collisionboxes_info" data-tt-parent="p_collisionboxes" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
A '''crate''' for example requires multiple collision boxes:
A '''crate''' for example requires multiple collision boxes:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
Line 449: Line 482:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_selectionbox_info" data-tt-parent="p_selectionbox" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_selectionbox_info" data-tt-parent="p_selectionbox" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
A '''half slab''' for example, has either a box going from 0,0,0 to 1,0.5,1 or going from 0,0.5,0 to 1,1,1, depending on whether it is a slab is down or up:
A '''half slab''' for example, has either a box going from 0,0,0 to 1,0.5,1 or going from 0,0.5,0 to 1,1,1, depending on whether it is a slab is down or up:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
Line 469: Line 502:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_selectionboxes_info" data-tt-parent="p_selectionboxes" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_selectionboxes_info" data-tt-parent="p_selectionboxes" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
A '''crate''' for example requires multiple selection boxes:
A '''crate''' for example requires multiple selection boxes:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
Line 492: Line 525:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_replaceable_info" data-tt-parent="p_replaceable" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_replaceable_info" data-tt-parent="p_replaceable" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
<table class="wikitable">
<table class="wikitable">
   <tr style="background-color: rgba(0,0,0,0.2);">
   <tr style="background-color: rgba(0,0,0,0.2);">
Line 533: Line 566:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_fertility_info" data-tt-parent="p_fertility" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_fertility_info" data-tt-parent="p_fertility" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
<table class="wikitable">
<table class="wikitable">
   <tr style="background-color: rgba(0,0,0,0.2);">
   <tr style="background-color: rgba(0,0,0,0.2);">
Line 562: Line 595:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_glowlevel_info" data-tt-parent="p_glowlevel" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_glowlevel_info" data-tt-parent="p_glowlevel" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
<table class="wikitable">
<table class="wikitable">
   <tr style="background-color: rgba(0,0,0,0.2);">
   <tr style="background-color: rgba(0,0,0,0.2);">
Line 605: Line 638:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_walkspeedmultiplier_info" data-tt-parent="p_walkspeedmultiplier" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_walkspeedmultiplier_info" data-tt-parent="p_walkspeedmultiplier" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
<table class="wikitable">
<table class="wikitable">
   <tr style="background-color: rgba(0,0,0,0.2);">
   <tr style="background-color: rgba(0,0,0,0.2);">
Line 630: Line 663:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_dragmultiplier_info" data-tt-parent="p_dragmultiplier" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_dragmultiplier_info" data-tt-parent="p_dragmultiplier" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
<table class="wikitable">
<table class="wikitable">
   <tr style="background-color: rgba(0,0,0,0.2);">
   <tr style="background-color: rgba(0,0,0,0.2);">
Line 651: Line 684:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_drops_info" data-tt-parent="p_drops" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_drops_info" data-tt-parent="p_drops" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">


'''Drop itself'''
'''Drop itself'''
Line 800: Line 833:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_particleproperties_info" data-tt-parent="p_particleproperties" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_particleproperties_info" data-tt-parent="p_particleproperties" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
{{:json:block:particle}}
{{:json:block:particle}}
</td>
</td>
Line 824: Line 857:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_sounds_walk" data-tt-parent="p_sounds">walk</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_sounds_walk" data-tt-parent="p_sounds">walk</div></td>
     <td colspan="3">An entity walks over it.</td>
     <td colspan="4">An entity walks over it.</td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_sounds_inside" data-tt-parent="p_sounds">inside</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_sounds_inside" data-tt-parent="p_sounds">inside</div></td>
     <td colspan="3">The player is inside the block.</td>
     <td colspan="4">The player is inside the block.</td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_sounds_break" data-tt-parent="p_sounds">break</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_sounds_break" data-tt-parent="p_sounds">break</div></td>
     <td colspan="3">Breaking the block.</td>
     <td colspan="4">Breaking the block.</td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_sounds_place" data-tt-parent="p_sounds">place</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_sounds_place" data-tt-parent="p_sounds">place</div></td>
     <td colspan="3">Placing the block.</td>
     <td colspan="4">Placing the block.</td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_sounds_hit" data-tt-parent="p_sounds">hit</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_sounds_hit" data-tt-parent="p_sounds">hit</div></td>
     <td colspan="3">While mining the block.</td>
     <td colspan="4">While mining the block.</td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_sounds_ambient" data-tt-parent="p_sounds">ambient</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_sounds_ambient" data-tt-parent="p_sounds">ambient</div></td>
     <td colspan="3">Played from time to time if the player is close to it.</td>
     <td colspan="4">Played from time to time if the player is close to it.</td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_sounds_info" data-tt-parent="p_sounds" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_sounds_info" data-tt-parent="p_sounds" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
'''Anvil''':
'''Anvil''':
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
Line 876: Line 909:
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="4" class="propHeader"><b>Common</b></td>
     <td colspan="5" style='font-size: 14pt; border-bottom: 2pt solid black; padding-left: 100px;'><b>Common</b></td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 886: Line 919:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_creativeinventory_info" data-tt-parent="p_creativeinventory" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_creativeinventory_info" data-tt-parent="p_creativeinventory" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
There are several tabs to you can add your stuff. Note that general should always be included, since it should contain everything.
There are several tabs to you can add your stuff. Note that general should always be included, since it should contain everything.


Line 935: Line 968:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_materialdensity_info" data-tt-parent="p_materialdensity" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_materialdensity_info" data-tt-parent="p_materialdensity" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
Water has a density of 1000, meaning everything below or equal will float on water. The same goes for lava which has a density of 5000.
Water has a density of 1000, meaning everything below or equal will float on water. The same goes for lava which has a density of 5000.
</td>
</td>
Line 947: Line 980:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_liquidselectable_info" data-tt-parent="p_liquidselectable" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_liquidselectable_info" data-tt-parent="p_liquidselectable" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
Used for buckets in order to fill it with water and to place waterlily on top of water.
Used for buckets in order to fill it with water and to place waterlily on top of water.
</td>
</td>
Line 971: Line 1,004:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_attributes_info" data-tt-parent="p_attributes" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_attributes_info" data-tt-parent="p_attributes" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
Extra attributes added to a block. Those are final and cannot be modified. It's a good way to keep things organized and and modifiable. The '''oreblastingbomb''' for example has attributes, which define its radius and type. These can be used by behaviors and blockentities:
Extra attributes added to a block. Those are final and cannot be modified. It's a good way to keep things organized and and modifiable. The '''oreblastingbomb''' for example has attributes, which define its radius and type. These can be used by behaviors and blockentities:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
Line 1,043: Line 1,076:
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_combustibleprops_info" data-tt-parent="p_combustibleprops" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_combustibleprops_info" data-tt-parent="p_combustibleprops" data-invisible="true"></div></td>
     <td colspan="3">
     <td colspan="4">
This property can be used to define a burning material. '''Plank''' for example can get on fire:
This property can be used to define a burning material. '''Plank''' for example can get on fire:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
Line 1,091: Line 1,124:
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="4" class="propHeader"><b>Rendering</b></td>
     <td colspan="5" style='font-size: 14pt; border-bottom: 2pt solid black; padding-left: 100px;'><b>Rendering</b></td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 1,101: Line 1,134:
   <tr>
   <tr>
     <td scope="row" valign="top"><div class="tt" data-tt-id="p_textures_base" data-tt-parent="p_textures">base</div><br><br><div class="tt" data-tt-id="p_textures_overlays" data-tt-parent="p_textures">overlays</div><br><br><div class="tt" data-tt-id="p_textures_base" data-tt-parent="p_textures">alternates</div></td>
     <td scope="row" valign="top"><div class="tt" data-tt-id="p_textures_base" data-tt-parent="p_textures">base</div><br><br><div class="tt" data-tt-id="p_textures_overlays" data-tt-parent="p_textures">overlays</div><br><br><div class="tt" data-tt-id="p_textures_base" data-tt-parent="p_textures">alternates</div></td>
     <td colspan="3">{{:json:block:texture}}</td>
     <td colspan="4">{{:json:block:texture}}</td>
   </tr>
   </tr>
   <tr>
   <tr>