Modding:Block Json Properties: Difference between revisions

From Vintage Story Wiki
Fix BlockEntityBehaviors link
(Fix BlockEntityBehaviors link)
(14 intermediate revisions by 4 users not shown)
Line 2: Line 2:
== Overview ==
== Overview ==
A complete list of all available properties
A complete list of all available properties
Definitions:
'''Key''' - The name of the property, which should be used as it appears in the column.
'''Value''' - A component of a property.
'''Array''' - A list of objects or values that can be referenced in code.
'''String''' - A sequence of characters that can be used as an identifier in code. Essentially a word that can be referenced and assigned to something. Generally does not use numbers.
'''Boolean''' - A true or false value, essentially "on" or "off".
'''Int''' - An integer, or whole number. Cannot use decimal values.
'''Float''' - A decimal, specifically one that does not exceed more than 1 significant digit
'''Object''' - This is a bit more complex, but essentially objects are the items, blocks and entities that can be interacted with. In most cases, when an "object" type appears it means you must use a specific item variant code, which follows the "itemcode-variant_1-variant_2-variant_n" style of naming.


<table id="treeviewtable" class="table table-bordered tt-table" style='table-layout: fixed'>
<table id="treeviewtable" class="table table-bordered tt-table" style='table-layout: fixed'>
Line 60: Line 79:
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:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
code: "bowl",
variantgroups: [
variantgroups: [
{ code:"type", states: ["raw", "burned"] },
{ code:"type", states: ["raw", "burned"] },
Line 72: Line 92:


<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
code: "barrel",
variantgroups: [
variantgroups: [
{ code:"state", states: ["closed", "opened"] },
{ code:"state", states: ["closed", "opened"] },
Line 94: Line 115:
----
----


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.  
Furthermore there are other ways of combining groups together. So far we covered the default combination mode, which is <code>Multiply</code> (the total count of variants is the product of all states). There are two other methods, Add 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 the <code>Add</code> combination mode used in this example of a flowerpot block:


<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
code: "flowerpot",
variantgroups: [
variantgroups: [
{ code: "type", states: ["raw"] },
{ code: "type", states: ["raw"] },
{ code: "empty", states: ["empty"], combine: "additive" },
{ code: "empty", states: ["empty"], combine: "Add" },
{ code: "flower", loadFromProperties: "block/flower", combine: "additive" },
{ code: "flower", loadFromProperties: "block/flower", combine: "Add" },
{ code: "mushroom", loadFromProperties: "block/mushroom", combine: "additive" },
{ code: "mushroom", loadFromProperties: "block/mushroom", combine: "Add" },
{ code: "sapling", loadFromProperties: "block/wood", combine: "additive" },
{ code: "sapling", loadFromProperties: "block/wood", combine: "Add" },
],
],
</syntaxhighlight>
</syntaxhighlight>
Line 110: Line 132:
The variants are <code>flowerpot-raw</code>, <code>flowerpot-empty</code>, <code>flowerpot-{all flowers}</code>, <code>flowerpot-{all mushrooms}</code> and <code>flowerpot-{all saplings}</code>.
The variants are <code>flowerpot-raw</code>, <code>flowerpot-empty</code>, <code>flowerpot-{all flowers}</code>, <code>flowerpot-{all mushrooms}</code> and <code>flowerpot-{all saplings}</code>.


<code>Additive</code> mode could also be called separate, since it defines a variant separate from all the other groups:
<code>Add</code> mode could also be called separate, since it defines a variant separate from all the other groups:


<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
code: "thingy",
variantgroups: [
variantgroups: [
{ code: "something", states: ["same", "different"] },
{ code: "something", states: ["same", "different"] },
{ code: "type", states: ["raw", "baked"] },
{ code: "type", states: ["raw", "baked"] },
{ code: "empty", states: ["red", "green"], "combine": "additive" },
{ code: "empty", states: ["red", "green"], "combine": "Add" },
],
],
</syntaxhighlight>
</syntaxhighlight>


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>thingy-same-raw</code>, <code>thingy-same-baked</code>, <code>thingy-different-raw</code>, <code>thingy-different-baked</code>, <code>thingy-red</code> and <code>thingy-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:
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 this example of a lowerbody asset:


<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
Line 134: Line 157:
</syntaxhighlight>
</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).  
The parameter <code>onVariant</code> specifies which variant group (by using that groups <code>code</code>) to target and the <code>code</code> specifies which of the target variant groups <code>states</code> (only one) to selectively combine with, ignoring all other variants without that specific state.  


Using this will result items called <code>clothes-lowerbody-aristocrat-leggings</code>, <code>clothes-lowerbody-dirty-linen-trousers</code>, etc.
Using this will result items called <code>clothes-lowerbody-aristocrat-leggings</code>, <code>clothes-lowerbody-dirty-linen-trousers</code>, etc.
'''Variant group placeholder:'''
Since Vintagestory v1.8 it is also possible to use the variantgroups codes as placeholders (<code>{variant_group_code}</code>) in for example paths to textures.:
<syntaxhighlight lang="json">
code: "axe",
variantgroups: [
{ code: "metal", states: ["copper", "tinbronze", "bismuthbronze", "blackbronze", "gold", "silver", "iron" ] },
],
textures: {
"metal": { base: "block/metal/ingot/{metal}" },
"wood": { base: "item/tool/material/wood" }
},
</syntaxhighlight>
Now the <code>metal</code> texture path will change based on the variant. For example the variant <code>axe-copper</code> will use <code>block/metal/ingot/copper</code> as its <code>metal</code> texture.


     </td>
     </td>
Line 199: Line 238:
</syntaxhighlight>
</syntaxhighlight>


Since Vintagestory v1.8 it is also possible to use the variantgroup as a placeholder:
    </td>
  </tr>
<tr>
  <td scope="row"><div class="tt" data-tt-id="p_allowedVariants" data-tt-parent="root">allowedVariants</div></td>
  <td>array of strings</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_allowedVariants_info" data-tt-parent="p_allowedVariants" data-invisible="true"></div></td>
    <td colspan="4">
By using the <code>allowedVariants</code> you can specify which variants you want to be generated. Looks at this example of different armor parts (uses both <code>allowedVariants</code> and <code>skipVariants</code>):
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
code: "armor",
variantgroups: [
variantgroups: [
{ code: "metal", states: ["copper", "tinbronze", "bismuthbronze", "blackbronze", "gold", "silver", "iron" ] },
{ code: "bodypart", states: ["head", "body", "legs"] },
{ code: "construction",  states: [
"improvised",
"jerkin",
"lamellar",
"sewn",
"brigandine",
"chain",
"scale",
"plate"
]},
{ code: "material", states: [
"wood",
"leather",
"linen",
"copper",
"tinbronze",
"bismuthbronze",
"blackbronze",
"iron",
"steel",
"gold",
"silver"
]},
],
skipVariants: [
"armor-*-brigandine-leather",
"armor-*-brigandine-linen",
"armor-*-brigandine-wood",
"armor-*-brigandine-gold",
"armor-*-brigandine-silver",
"armor-*-chain-leather",
"armor-*-chain-linen",
"armor-*-chain-wood",
"armor-*-scale-leather",
"armor-*-scale-linen",
"armor-*-scale-wood",
"armor-*-scale-gold",
"armor-*-scale-silver",
"armor-*-plate-leather",
"armor-*-plate-linen",
"armor-*-plate-wood",
"armor-*-sewn-wood",
],
],
textures: {
allowedVariants: [
"metal": { base: "block/metal/ingot/{metal}" },
"armor-body-improvised-wood",
"wood": { base: "item/tool/material/wood" }
},
"armor-body-jerkin-leather",
</syntaxhighlight>
"armor-legs-jerkin-leather",
</td>
"armor-*-lamellar-wood",
"armor-*-lamellar-copper",
"armor-*-lamellar-tinbronze",
"armor-*-lamellar-bismuthbronze",
"armor-*-lamellar-blackbronze",
 
"armor-*-sewn-linen",
"armor-*-sewn-leather",
"armor-*-scale-*",
"armor-*-chain-*",
"armor-*-plate-*",
"armor-*-brigandine-*",
],</syntaxhighlight>
 
The wildcard char '''<code>*</code>''' stands for anything, and can be used to target many variants with one string instead of having to write them all down.
    </td>
   </tr>
   </tr>
  <tr>
  <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>
<tr>
   <td scope="row"><div class="tt" data-tt-id="p_enabled" data-tt-parent="root">skipVariants</div></td>
   <td scope="row"><div class="tt" data-tt-id="p_skipVariants" data-tt-parent="root">skipVariants</div></td>
   <td>array of object</td>
   <td>array of strings</td>
   <td>-</td>
   <td>-</td>
   <td>Similar to allowedVariants, but instead skips the creation of listed variants rather than assigning which are allowed. </td>
   <td>Similar to allowedVariants, but instead skips the creation of listed variants rather than assigning which are allowed. </td>
   <td>armor</td>
   <td>armor</td>
</tr>
</tr>
<tr>
    <td scope="row"><div class="tt" data-tt-id="p_skipVariants_info" data-tt-parent="p_skipVariants" data-invisible="true"></div></td>
    <td colspan="4">
By using the <code>skipVariants</code> you can specify which variants you do NOT want to be generated. For an example look above under <code>allowedVariants</code> which shows both <code>allowedVariants</code> and <code>skipVariants</code> in use at the same time.
    </td>
  </tr>
   <tr>
   <tr>
     <td colspan="5" style='font-size: 14pt; border-bottom: 2pt solid black; padding-left: 100px;'><b>Specific</b></td>
     <td colspan="5" style='font-size: 14pt; border-bottom: 2pt solid black; padding-left: 100px;'><b>Specific</b></td>
Line 274: Line 386:
Block entity behaviors are expanded capabilities that regular behaviors cannot accomplish. At the moment they are only used for Mechanical Power blocks, but if you're looking to make your own you can look through the existing files at the Vintage Story Github [https://github.com/anegostudios/vssurvivalmod/tree/master/Systems/MechanicalPower/BlockEntityBehavior here ].
Block entity behaviors are expanded capabilities that regular behaviors cannot accomplish. At the moment they are only used for Mechanical Power blocks, but if you're looking to make your own you can look through the existing files at the Vintage Story Github [https://github.com/anegostudios/vssurvivalmod/tree/master/Systems/MechanicalPower/BlockEntityBehavior here ].


To see all of the current block entity behaviors in the game see [[Json:block:behaviors|All Block Behaviors]].
To see all of the current block entity behaviors in the game see [[Modding:Block_Entity_Behaviors|All Block Entity Behaviors]].
</td>
</td>
   </tr>
   </tr>
Line 847: Line 959:
   </tr>
   </tr>
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_cprops_gstages" data-tt-parent="p_cropprops">grwothStages</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_cprops_gstages" data-tt-parent="p_cropprops">growthStages</div></td>
     <td>number</td>
     <td>number</td>
     <td>-</td>
     <td>-</td>
Line 940: Line 1,052:
},
},
</syntaxhighlight>
</syntaxhighlight>
</td>
</td>
   </tr>
   </tr>
Line 982: Line 1,092:
</syntaxhighlight>
</syntaxhighlight>
</td>
</td>
  </tr>
<tr>
    <td scope="row"><div class="tt" data-tt-id="p_cprops_gstages" data-tt-parent="root">liquidCode</div></td>
    <td>string</td>
    <td>-</td>
    <td>An identifier for other liquids to utilize during collisions.</td>
    <td>lava, water</td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 1,017: Line 1,134:
</syntaxhighlight>
</syntaxhighlight>
</td>
</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_creativestacks" data-tt-parent="root">CreativeInventoryStacks</div></td>
    <td>-</td>
    <td>-</td>
    <td>If you want to add itemstacks with custom attributes to the creative inventory, add them to this list.</td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_notincreative" data-tt-parent="root">notCreateveInventoryStacks</div></td>
    <td>-</td>
    <td>-</td>
    <td>Prevents the variant from being included in the creative inventory.</td>
    <td>tapestry</td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 1,205: Line 1,336:
   </tr>
   </tr>
  <tr>
  <tr>
     <td colspan="5" style='font-size: 14pt; border-bottom: 2pt solid black; padding-left: 100px;'><b>Attributes</b></td>
    <td scope="row"><div class="tt" data-tt-id="p_transprops" data-tt-parent="root">transitionableProps</div></td>
    <td>-</td>
    <td>-</td>
    <td>Can be used to transition an item to another item or block.</td>
    <td>redmeat, hide</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_tprops_type" data-tt-parent="p_transprops">type</div></td>
    <td>-</td>
    <td>-</td>
    <td>The type of transition method to utilize.</td>
    <td>redmeat, hide</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_tprops_type_cure" data-tt-parent="p_tprops_type">Cure</div></td>
    <td>string</td>
    <td>-</td>
    <td>Will "cure" an item by showing percent progress until cured.</td>
    <td>hide</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_tprops_type_perish" data-tt-parent="p_tprops_type">Perish</div></td>
    <td>string</td>
    <td>-</td>
    <td>Will gradually reduce the saturation of a food item once it's fresh period has passed, eventually converting into the product item (usually rot).</td>
    <td>hide</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_tprops_fresh" data-tt-parent="p_transprops">freshHours</div></td>
    <td>number (hours)</td>
    <td>-</td>
    <td>An optional "fresh" period that must pass before the transition time starts. With food, this is the period of time that saturation is not affected.</td>
    <td>bread, vegetable, redmeat</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_tprops_ttime" data-tt-parent="p_transprops">transitionHours</div></td>
    <td>number (hours)</td>
    <td>-</td>
    <td>Number of hours before the item transitions into a different item.</td>
    <td>redmeat, hide</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_tprops_stack" data-tt-parent="p_transprops">transitionedStack</div></td>
    <td>object (item or block)</td>
    <td>-</td>
    <td>The item or block that the item will transition into.</td>
    <td>redmeat, hide</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_tprops_ratio" data-tt-parent="p_transprops">transitionRatio</div></td>
    <td>number</td>
    <td>-</td>
    <td>The quantity of the item that will be consumed after the transition period.</td>
    <td>redmeat, hide</td>
  </tr>
<tr>
     <td colspan="5" style='font-size: 14pt; border-bottom: 2pt solid black; padding-left: 100px;'><b>Attributes</b></td>
   </tr>
   </tr>
  <tr>
  <tr>
Line 1,595: Line 1,782:
     </syntaxhighlight>
     </syntaxhighlight>
  </tr>
  </tr>
<tr>
<td scope="row"><div class="tt" data-tt-id="p_attributes_render" data-tt-parent="root">(Rendering Attributes)</div></td>
<td colspan="4">
Attributes that define additional rendering information.
</tr>
<tr>
<td scope="row"><div class="tt" data-tt-id="p_attributes_misc" data-tt-parent="root">(Misc Attributes)</div></td>
<td colspan="4">
Miscellaneous, unsorted attributes.
</tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_unstableplace" data-tt-parent="p_attributes_misc">allowUnstablePlacement</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_quantityslots" data-tt-parent="p_attributes_contain">quantitySlots</div></td>
     <td>boolean</td>
     <td>number</td>
    <td>-</td>
    <td>The number of slots a generic container has.</td>
    <td>chest, storagevessel</td>
</tr>
<tr>
    <td scope="row"><div class="tt" data-tt-id="p_alist_requiredunits" data-tt-parent="p_attributes_contain">requiredUnits</div></td>
    <td>number</td>
     <td>-</td>
     <td>-</td>
     <td>If the block has the "unstable" behavior, this allows it to be generated in positions that it can fall from.</td>
     <td>The number of units required to fill a tool mold with molten metal.</td>
     <td>sand, gravel</td>  
     <td>toolmold</td>  
  </tr>
</tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_bfeed" data-tt-parent="p_attributes_misc">beeFeed</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_retrieveonly" data-tt-parent="p_attributes_contain">retrieveOnly</div></td>
     <td>boolean</td>
     <td>boolean</td>
     <td>-</td>
     <td>-</td>
     <td>Whether or not the block is a viable source of bee feeding (IE a flower).</td>
     <td>If true, makes it so that a container can only be taken from and cannot be used to store new items.</td>
     <td>all crops, bigberrybush, flower, smallberrybush</td>  
     <td>lootvessel</td>  
  </tr>
</tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_butterflyfeed" data-tt-parent="p_attributes_misc">butterflyFeed</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_servingcapacity" data-tt-parent="p_attributes_contain">servingCapacity</div></td>
     <td>boolean</td>
     <td>number</td>
     <td>-</td>
     <td>-</td>
     <td>Whether or not the block will attract butterflies.</td>
     <td>The number of servings of a meal a block can hold.</td>
     <td>all crops, bigberrybush, flower, smallberrybush</td>  
     <td>crock, bowl</td>  
  </tr>
</tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_bradius" data-tt-parent="p_attributes_misc">blastRadius</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_shelvable" data-tt-parent="p_attributes_contain">shelvable</div></td>
     <td>number</td>
     <td>boolean</td>
    <td>-</td>
    <td>Used by bombs to determine the radius of the blast.</td>
    <td>oreblastingbomb</td>
  </tr>
<tr>
    <td scope="row"><div class="tt" data-tt-id="p_alist_btype" data-tt-parent="p_attributes_misc">blastType</div></td>
    <td>number, 0, 1 or 2</td>
     <td>-</td>
     <td>-</td>
     <td>Used by bombs to determine what type of blocks are broken.</td>
     <td>If true, allows the block to be placed on a shelf.</td>
     <td>oreblastingbomb</td>
     <td>crystal-small, seashell</td>  
  </tr>
<tr>
  <td scope="row"><div class="tt" data-tt-id="p_btype_info" data-tt-parent="p_alist_btype" data-invisible="true"></div></td>
  <td colspan="4">
  ''0 = Destroys ores, 1 = Destroys stone, 2 = Damages only entities.''
  </tr>
  </tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_canchisel" data-tt-parent="p_attributes_misc">canChisel</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_sitheight" data-tt-parent="p_attributes_contain">sitHeight</div></td>
     <td>boolean</td>
     <td>number (decimal)</td>
     <td>-</td>
     <td>-</td>
     <td>If true, allows the block to be chiseled.</td>
     <td>Used by flower pots to determine how high the incorporated block should be rendered.</td>
     <td>rock, all slabs</td>  
     <td>flowerpot, planter</td>  
  </tr>
  </tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_" data-tt-parent="p_attributes_misc">canFallSideways</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_spoilmultiplier" data-tt-parent="p_attributes_contain">spoilSpeedMulByFoodCat</div></td>
     <td>-</td>
     <td>-</td>
     <td>-</td>
     <td>-</td>
     <td>If true, allows a block to move sideways when it falls.</td>
     <td>Used to make food spoil slower or faster when stored in a container.</td>
     <td>gravel</td>  
     <td>storagevessel</td>  
  </tr>
  </tr>
  <tr>
<tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_fromcbox" data-tt-parent="p_attributes_misc">chiselShapeFromCollisionBox</div></td>
<td scope="row"><div class="tt" data-tt-id="p_spoilspeed_info" data-tt-parent="p_alist_spoilmultiplier" data-invisible="true"></div></td>
     <td>boolean</td>
<td colspan="4">
The clay storage vessel is a good example of this:
<syntaxhighlight lang="json">
spoilSpeedMulByFoodCat: {
  "normal": {
    "vegetable": 0.75,
    "grain": 0.5
  }
},
</syntaxhighlight>
</tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_storagetype" data-tt-parent="p_attributes_contain">storageType</div></td>
     <td>Number (Storage Flag)</td>
     <td>-</td>
     <td>-</td>
     <td>If true, uses the collision box as the starting point for chiseling.</td>
     <td>The storage flag of the container, which can limit what types of items or blocks can be stored within it.</td>
     <td>most stairs, all slabs</td>  
     <td>storagevessel</td>  
  </tr>
  </tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_convertfrom" data-tt-parent="p_attributes_misc">convertFrom</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_storagetype" data-tt-parent="p_attributes_contain">textureMapping</div></td>
     <td>block</td>
     <td>-</td>
     <td>-</td>
     <td>-</td>
     <td>If a block converts to another block, this is the block that can be converted.</td>
     <td>A more complex method of texturing block shapes with multiple content combinations. Used primarily with the pot to texture the food contents.</td>
     <td>carcass</td>  
     <td>pot</td>  
  </tr>
  </tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_convertto" data-tt-parent="p_attributes_misc">convertTo</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_types" data-tt-parent="p_attributes_contain">types</div></td>
     <td>block</td>
     <td>-</td>
     <td>-</td>
     <td>-</td>
     <td>If a block converts to another block, this is the block that it will turn into.</td>
     <td>A secondary method of variant categorization used by containers to help with assigning attributes.</td>
     <td>carcass</td>  
     <td>chest</td>  
  </tr>
  </tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_delaysunlight" data-tt-parent="p_attributes_misc">delayGrowthBelowSunlight</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_varaintbygroup" data-tt-parent="p_attributes_contain">variantByGroup</div></td>
     <td>number</td>
     <td>-</td>
     <td>-</td>
     <td>-</td>
     <td>Used by the farmland block to delay growth when sunlight is below the given value.</td>
     <td>Used by generic containers to group types by a specific variant. "side" is used since it is a common variant of all the types.</td>
     <td>farmland</td>  
     <td>chest</td>  
  </tr>
  </tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_tooldrop" data-tt-parent="p_attributes_misc">drop</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_varaintbygroupinv" data-tt-parent="p_attributes_contain">variantByGroupInventory</div></td>
     <td>-</td>
     <td>-</td>
     <td>-</td>
     <td>-</td>
     <td>Used by the toolMold block to determine what item it drops, not to be confused with the '''drops''' property.</td>
     <td>A subtype inventory name that can be assigned to types (usually this is "null").</td>
     <td>toolMold</td>  
     <td>chest</td>  
  </tr>
  </tr>
<tr>
<tr>
    <td scope="row"><div class="tt" data-tt-id="p_alist_fencecon" data-tt-parent="p_attributes_misc">fenceConnect</div></td>
  <td scope="row"><div class="tt" data-tt-id="p_alist_waterprops" data-tt-parent="p_attributes_contain">waterTightContainerProps</div></td>
     <td>boolean</td>
  <td>-</td>
  <td>-</td>
  <td>This contains all the liquid properties of an block, generally determining how it is stored and used with a bucket. '''Keep in mind this is not generally used for blocks, as most liquids that use this property are items, even if they come from a source block'''.</td>
  <td>water</td>
</tr>
<tr>
  <td scope="row"><div class="tt" data-tt-id="p_alist_liquidcontain" data-tt-parent="p_alist_waterprops">containable</div></td>
  <td>boolean</td>
  <td>-</td>
  <td>If true, the liquid can be placed into liquid containers, such as barrels and buckets.</td>
  <td>water</td>
</tr>
<tr>
  <td scope="row"><div class="tt" data-tt-id="p_alist_iperlitre" data-tt-parent="p_alist_waterprops">itemsPerLitre</div></td>
  <td>number (int)</td>
  <td>-</td>
  <td>The number of itemstack items required to make a litre of liquid. Generally this value is 1:1, but concentrated items like honey can be 4:1.</td>
  <td>water</td>
</tr>
<tr>
  <td scope="row"><div class="tt" data-tt-id="p_alist_liqtex" data-tt-parent="p_alist_waterprops">texture</div></td>
  <td>Path to Texture</td>
  <td>-</td>
  <td>A "block" texture given to a liquid when it's rendered in containers or other items.</td>
  <td>waterportion, honeyportion</td>
</tr>
<tr>
  <td scope="row"><div class="tt" data-tt-id="p_alist_spill" data-tt-parent="p_alist_waterprops">allowSpill</div></td>
  <td>boolean</td>
  <td>-</td>
  <td>If true, allows the player to use the Ctr + Right Click function to "spill" the liquid from a container. The whenSpilled property determines what happens if this is true.</td>
  <td>waterportion, limewater</td>
</tr>
<tr>
  <td scope="row"><div class="tt" data-tt-id="p_alist_tindex" data-tt-parent="p_alist_waterprops">tintIndex</div></td>
     <td>integer</td>
    <td>0</td>
    <td>Tints the color of the item if it's ever drawn as a block: '''''0''''' for no tint, '''''1''''' for plant climate tint, '''''2''''' for water climate tint.</td>
     <td>-</td>
     <td>-</td>
    <td>Can be used to prevent a solid block from connecting to fences.</td>
  <td>waterportion, limewater</td>
    <td>-</td>  
</tr>
</tr>
<tr>
<tr>
  <td scope="row"><div class="tt" data-tt-id="p_alist_whenfill" data-tt-parent="p_alist_waterprops">whenFilled</div></td>
    <td scope="row"><div class="tt" data-tt-id="p_alist_growthblock" data-tt-parent="p_attributes_misc">growthBlockLayer</div></td>
  <td>Item or Block Code</td>
    <td>string</td>
  <td>-</td>
    <td>-</td>
  <td>Determines what is stored in a liquid container when interacted with.</td>
    <td>Determines what layers of a block will grow grass, currently only uses "l1soilwithgrass", which grows grass on the first layer only.</td>
  <td>water</td>
    <td>soil</td>  
</tr>
</tr>
<tr>
<tr>
  <td scope="row"><div class="tt" data-tt-id="p_alist_whenspill" data-tt-parent="p_alist_waterprops">whenSpilled</div></td>
    <td scope="row"><div class="tt" data-tt-id="p_alist_glightlevel" data-tt-parent="p_attributes_misc">growthLightLevel</div></td>
  <td>-</td>
    <td>-</td>
  <td>-</td>
    <td>-</td>
  <td>Determines what happens when the "spill" interaction is used. Only works if the allowSpill property is set to true.</td>
    <td>Used by the soil block to determine what light level is required for it to grow grass on.</td>
  <td>waterportion, limewater</td>
    <td>soil</td>  
</tr>
</tr>
<tr>
<tr>
  <td scope="row"><div class="tt" data-tt-id="p_alist_spillact" data-tt-parent="p_alist_whenspill">action</div></td>
    <td scope="row"><div class="tt" data-tt-id="p_alist_gamehours" data-tt-parent="p_attributes_misc">inGameHours</div></td>
  <td>string</td>
    <td>number</td>
  <td>-</td>
    <td>-</td>
  <td>Code identifier that determines what happens when the liquid is spilled from a container.</td>
    <td>If a block converts to another block, this is the amount of time required for it to convert.</td>
  <td>waterportion, limewater</td>
    <td>carcass</td>  
</tr>
</tr>
<tr>
  <td scope="row"><div class="tt" data-tt-id="p_alist_spillblock" data-tt-parent="p_alist_spillact">PlaceBlock</div></td>
  <td>-</td>
  <td>-</td>
  <td>Places a block at the spilled location.</td>
  <td>waterportion</td>
</tr>
<tr>
  <td scope="row"><div class="tt" data-tt-id="p_alist_spillitem" data-tt-parent="p_alist_spillact">DropContents</div></td>
  <td>-</td>
  <td>-</td>
  <td>Drops an item at the location. If the item is a liquid it will disappear immediately with a "splash" particle effect.</td>
  <td>limeportion</td>
</tr>
 
<tr>
  <td scope="row"><div class="tt" data-tt-id="p_alist_spillstack" data-tt-parent="p_alist_whenspill">stack</div></td>
  <td>-</td>
  <td>-</td>
  <td>The block or item dropped when spilled. if the "PlaceBlock" action is chosen a block is placed, if "DropContents" is used an item is generated.</td>
  <td>waterportion, limewater</td>
</tr>
<tr>
  <td scope="row"><div class="tt" data-tt-id="p_alist_sfilllevel" data-tt-parent="p_alist_whenspill">stackByFillLevel</div></td>
  <td>-</td>
  <td>-</td>
  <td>Allows for different blocks or items to be placed based on the level of the liquid in the container.</td>
  <td>waterportion, limewater</td>
</tr>
<tr>
<td scope="row"><div class="tt" data-tt-id="p_attributes_info" data-tt-parent="p_alist_waterprops" data-invisible="true"></div></td>
<td colspan="4">
 
We'll look at an example of how this property is utilized by water block:
 
<syntaxhighlight lang="json">
waterTightContainerProps: {
  containable: true,
  itemsPerLitre: 1,
  whenFilled: { stack: { type: "item", code: "waterportion" } }
}
</syntaxhighlight>
 
As we can see, most of the watertight properties are not used by the block, that's because most of them are used by the item equivalent "waterportion".  
</tr>
 
<tr>
<td scope="row"><div class="tt" data-tt-id="p_attributes_render" data-tt-parent="root">(Rendering Attributes)</div></td>
<td colspan="4">
Attributes that define additional rendering information.
</tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_injurerad" data-tt-parent="p_attributes_misc">injureRadius</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_tintinventory" data-tt-parent="p_attributes_render">ignoreTintInventory</div></td>
     <td>number</td>
     <td>boolean</td>
     <td>-</td>
     <td>-</td>
     <td>Used by bombs to determine the radius that it will cause injury to entities.</td>
     <td>If true, does not apply texture tints to the block model as an inventory item.</td>
     <td>oreblastingbomb</td>  
     <td>soil</td>  
</tr>
  </tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_lossplevel" data-tt-parent="p_attributes_misc">lossPerLevel</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_mechpower" data-tt-parent="p_attributes_render">mechancialPower</div></td>
    <td>boolean</td>
     <td>-</td>
     <td>-</td>
    <td>A special category of values reserved for mechanical power. Currently only "renderer" is used by the angled gears block to determine which combination of gears to render.</td>
    <td>angledgears</td>
  </tr>
<tr>
    <td scope="row"><div class="tt" data-tt-id="p_alist_pushvec" data-tt-parent="p_attributes_render">pushVector</div></td>
    <td>vector coordinates</td>
     <td>-</td>
     <td>-</td>
     <td>Used in combination with '''delayGrowthBelowSunlight''' to determine how much growth progression is lost per light level.</td>
     <td>Allows the vector shape of a block to be altered for slopes.</td>
     <td>farmland</td>  
     <td>lava, water</td>  
</tr>
  </tr>
<tr>
<td scope="row"><div class="tt" data-tt-id="p_attributes_misc" data-tt-parent="root">(Misc Attributes)</div></td>
<td colspan="4">
Miscellaneous, unsorted attributes.
</tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_mechpower" data-tt-parent="p_attributes_misc">mechanicalPower</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_unstableplace" data-tt-parent="p_attributes_misc">allowUnstablePlacement</div></td>
    <td>boolean</td>
     <td>-</td>
     <td>-</td>
     <td>-</td>
     <td>If the block has the "unstable" behavior, this allows it to be generated in positions that it can fall from.</td>
    <td>Used by the angled gear block to determine how to render gears in the different orientations.</td>
     <td>sand, gravel</td>  
     <td>angledgears</td>  
  </tr>
</tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_downvariant" data-tt-parent="p_attributes_misc">noDownVariant</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_bfeed" data-tt-parent="p_attributes_misc">beeFeed</div></td>
     <td>-</td>
     <td>boolean</td>
     <td>-</td>
     <td>-</td>
     <td>When giving a block variants based off the orientation library, this can be used to prevent a "down" variant from being used.</td>
     <td>Whether or not the block is a viable source of bee feeding (IE a flower).</td>
     <td>-</td>  
     <td>all crops, bigberrybush, flower, smallberrybush</td>  
</tr>
  </tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_blockbelow" data-tt-parent="p_attributes_misc">placeBelowBlockCode</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_butterflyfeed" data-tt-parent="p_attributes_misc">butterflyFeed</div></td>
    <td>block</td>
    <td>-</td>
    <td>Used by the '''BlockSoilDeposit''' class to place specific blocks beneath it during world generation.</td>
    <td>clay, peat</td>
</tr>
<tr>
    <td scope="row"><div class="tt" data-tt-id="p_alist_preventdecay" data-tt-parent="p_attributes_misc">preventsDecay</div></td>
     <td>boolean</td>
     <td>boolean</td>
     <td>-</td>
     <td>-</td>
     <td>If true, prevents nearby leaves from "decaying", IE disappearing.</td>
     <td>Whether or not the block will attract butterflies.</td>
     <td>log, soil</td>  
     <td>all crops, bigberrybush, flower, smallberrybush</td>  
</tr>
  </tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_rotateint" data-tt-parent="p_attributes_misc">rotatableInterval</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_bradius" data-tt-parent="p_attributes_misc">blastRadius</div></td>
     <td>string</td>
     <td>number</td>
     <td>-</td>
     <td>-</td>
     <td>Gives some blocks additional rotation properties when placed (currently "22.5degnot45deg" and "22.tdeg" are the only two options).</td>
     <td>Used by bombs to determine the radius of the blast.</td>
     <td>chest</td>  
     <td>oreblastingbomb</td>  
</tr>
  </tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_grasspread" data-tt-parent="p_attributes_misc">spreadGrass</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_btype" data-tt-parent="p_attributes_misc">blastType</div></td>
     <td>boolean</td>
     <td>number, 0, 1 or 2</td>
     <td>-</td>
     <td>-</td>
     <td>If true, can spread grass to other soil blocks.</td>
     <td>Used by bombs to determine what type of blocks are broken.</td>
     <td>-</td>  
     <td>oreblastingbomb</td>
  </tr>
<tr>
  <td scope="row"><div class="tt" data-tt-id="p_btype_info" data-tt-parent="p_alist_btype" data-invisible="true"></div></td>
  <td colspan="4">
  ''0 = Destroys ores, 1 = Destroys stone, 2 = Damages only entities.''
  </tr>
  </tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_stackable" data-tt-parent="p_attributes_misc">stackable</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_canchisel" data-tt-parent="p_attributes_misc">canChisel</div></td>
     <td>boolean</td>
     <td>boolean</td>
     <td>-</td>
     <td>-</td>
     <td>Used by berry bushes to determine whether they can be stacked atop each other.</td>
     <td>If true, allows the block to be chiseled.</td>
     <td>-</td>  
     <td>rock, all slabs</td>  
  </tr>
  </tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_growchance" data-tt-parent="p_attributes_misc">tallGrassGrowChance</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_" data-tt-parent="p_attributes_misc">canFallSideways</div></td>
     <td>number (decimal)</td>
     <td>-</td>
     <td>-</td>
     <td>-</td>
     <td>Used by the soil block to determine how often it will grow tall grass on top of it.</td>
     <td>If true, allows a block to move sideways when it falls.</td>
     <td>clay, peat, soil</td>  
     <td>gravel</td>  
  </tr>
  </tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_temp" data-tt-parent="p_attributes_misc">temperature</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_fromcbox" data-tt-parent="p_attributes_misc">chiselShapeFromCollisionBox</div></td>
    <td>boolean</td>
     <td>-</td>
     <td>-</td>
     <td>-</td>
     <td>If true, uses the collision box as the starting point for chiseling.</td>
    <td>Used by liquids to determine the temperature of the core block.</td>
     <td>most stairs, all slabs</td>  
     <td>lava</td>  
  </tr>
  </tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_temploss" data-tt-parent="p_attributes_misc">tempLossPerMeter</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_convertfrom" data-tt-parent="p_attributes_misc">convertFrom</div></td>
     <td>number</td>
     <td>block</td>
     <td>-</td>
     <td>-</td>
     <td>How much temperature is lost for a liquid as it moves away from a source block.</td>
     <td>If a block converts to another block, this is the block that can be converted.</td>
     <td>lava</td>  
     <td>carcass</td>  
  </tr>
  </tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_tickgrowth" data-tt-parent="p_attributes_misc">tickGrowthProbability</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_convertto" data-tt-parent="p_attributes_misc">convertTo</div></td>
     <td>number (decimal)</td>
     <td>block</td>
     <td>-</td>
     <td>-</td>
     <td>Used by crops to determine how often it will randomly progress its growth stage per tick.</td>
     <td>If a block converts to another block, this is the block that it will turn into.</td>
     <td>all crops</td>  
     <td>carcass</td>  
  </tr>
  </tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_tooltrans" data-tt-parent="p_attributes_misc">toolTransforms</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_delaysunlight" data-tt-parent="p_attributes_misc">delayGrowthBelowSunlight</div></td>
    <td>number</td>
     <td>-</td>
     <td>-</td>
    <td>-</td>
     <td>Used by the farmland block to delay growth when sunlight is below the given value.</td>
     <td>Used to set default transformation on the toolrack, though all tools generally use their own.</td>
     <td>farmland</td>  
     <td>toolrack</td>  
  </tr>
  </tr>
  <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_weedblock" data-tt-parent="p_attributes_misc">weedBlockCodes</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_tooldrop" data-tt-parent="p_attributes_misc">drop</div></td>
     <td>-</td>
     <td>-</td>
     <td>-</td>
     <td>-</td>
     <td>Used by the farmland block to determine what "weeds" can grow on it.</td>
     <td>Used by the toolMold block to determine what item it drops, not to be confused with the '''drops''' property.</td>
     <td>farmland</td>  
     <td>toolMold</td>  
  </tr>
  </tr>
  <tr>
<tr>
     <td scope="row"><div class="tt" data-tt-id="p_weedblock_info" data-tt-parent="p_alist_weedblock" data-invisible="true"></div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_fencecon" data-tt-parent="p_attributes_misc">fenceConnect</div></td>
     <td colspan="4">
     <td>boolean</td>
We can see here that this property allows tallgrass and horsetails to grow on farmland with varying degrees of likelihood:
     <td>-</td>
     <syntaxhighlight lang="json">
    <td>Can be used to prevent a solid block from connecting to fences.</td>
weedBlockCodes: [
     <td>-</td>  
{ code: "tallgrass-veryshort", chance: 1 },
</tr>
{ code: "tallgrass-short", chance: 1 },
<tr>
{ code: "tallgrass-mediumshort", chance: 1 },
  <td scope="row"><div class="tt" data-tt-id="p_alist_grinding" data-tt-parent="p_attributes_misc">grindingProps</div></td>
{ code: "tallgrass-medium", chance: 1 },
  <td>-</td>
{ code: "flower-horsetail", chance: 0.2 },
  <td>-</td>
]
  <td>Gives the block a grinding recipe in a quern.</td>
    </syntaxhighlight>
  <td>ore-ungraded</td>
  </tr>
</tr>
  <tr>
<tr>
     <td colspan="5" style='font-size: 14pt; border-bottom: 2pt solid black; padding-left: 100px;'><b>Rendering</b></td>
  <td scope="row"><div class="tt" data-tt-id="p_gprops_type" data-tt-parent="p_alist_grinding">type</div></td>
  </tr>
  <td>object</td>
  <tr>
  <td>-</td>
    <td scope="row"><div class="tt" data-tt-id="p_textures" data-tt-parent="root">textures</div></td>
  <td>Type of stack produced, either a <code>block</code> or <code>item</code>.</td>
    <td>key: string, value: object</td>
  <td>-</td>
    <td></td>
</tr>
    <td>The texture definitions for the block as seen in the world, when dropped on the ground or held in the hand. Within a mod, to refer to a texture from the base game, prefix the path with "game:" (i.e. base: "game:path/to/texture") </td>
<tr>
  </tr>
  <td scope="row"><div class="tt" data-tt-id="p_gprops_code" data-tt-parent="p_alist_grinding">code</div></td>
  <tr>
  <td>string</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>-</td>
    <td colspan="4">{{:json:block:texture}}</td>
  <td>Name of the item or block produced by the recipe.''</td>
  </tr>
  <td>ore-ungraded</td>
  <tr>
</tr>
     <td scope="row"><div class="tt" data-tt-id="p_texturesinventory" data-tt-parent="root">texturesinventory</div></td>
<tr>
     <td>key: string, value: object</td>
  <td scope="row"><div class="tt" data-tt-id="p_gprops_stacksize" data-tt-parent="p_alist_grinding">stacksize</div></td>
     <td></td>
  <td>number</td>
     <td>The texture definitions for the block as seen in the player inventory. Overrides the textures.</td>
  <td>-</td>
  </tr>
  <td>The amount of the output produced after grinding.''</td>
  <tr>
  <td>ore-ungraded</td>
     <td scope="row"><div class="tt" data-tt-id="p_shape" data-tt-parent="root">shape</div></td>
</tr>
    <td>object</td>
<tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_growthblock" data-tt-parent="p_attributes_misc">growthBlockLayer</div></td>
     <td>string</td>
     <td>-</td>
     <td>Determines what layers of a block will grow grass, currently only uses "l1soilwithgrass", which grows grass on the first layer only.</td>
    <td>soil</td>
</tr>
<tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_glightlevel" data-tt-parent="p_attributes_misc">growthLightLevel</div></td>
     <td>-</td>
     <td>-</td>
    <td>For the json drawtype, the shape definition of the block as shown in the world, dropped on the ground or held in hand.</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_base" data-tt-parent="p_shape">base</div></td>
    <td></td>
    <td></td>
    <td>The path to the shape json file, the base dir is ''assets/shapes/''.</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_rotateX" data-tt-parent="p_shape">rotatex</div></td>
    <td>float</td>
    <td>0</td>
    <td>Only 90 degree rotations are possible.</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_rotateY" data-tt-parent="p_shape">rotatey</div></td>
    <td>float</td>
    <td>0</td>
    <td>Only 90 degree rotations are possible.</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_rotateZ" data-tt-parent="p_shape">rotatez</div></td>
    <td>float</td>
    <td>0</td>
    <td>Only 90 degree rotations are possible.</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_shapeinventory" data-tt-parent="root">shapeinventory</div></td>
    <td>object</td>
     <td>-</td>
     <td>-</td>
     <td>For the json drawtype, the shape definition of the block as shown in the players inventory.</td>
     <td>Used by the soil block to determine what light level is required for it to grow grass on.</td>
  </tr>
    <td>soil</td>
  <tr>
</tr>
     <td scope="row"><div class="tt" data-tt-id="p_drawtype" data-tt-parent="root">drawtype</div></td>
<tr>
     <td>string</td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_gamehours" data-tt-parent="p_attributes_misc">inGameHours</div></td>
     <td>&quot;cube&quot;</td>
     <td>number</td>
     <td>Determines how the block is tesselated, select JSON for being able to use custom JSON Models. The other values are hardcoded methods of tesselating the block.</td>
     <td>-</td>
  </tr>
     <td>If a block converts to another block, this is the amount of time required for it to convert.</td>
  <tr>
    <td>carcass</td>
     <td scope="row"><div class="tt" data-tt-id="p_blockLayer_1" data-tt-parent="p_drawtype">blockLayer_1</div></td>
</tr>
     <td></td>
<tr>
     <td>0</td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_injurerad" data-tt-parent="p_attributes_misc">injureRadius</div></td>
     <td></td>
     <td>number</td>
  </tr>
     <td>-</td>
  <tr>
     <td>Used by bombs to determine the radius that it will cause injury to entities.</td>
     <td scope="row"><div class="tt" data-tt-id="p_blockLayer_2" data-tt-parent="p_drawtype">blockLayer_2</div></td>
    <td>oreblastingbomb</td>  
     <td></td>
</tr>
     <td>1</td>
<tr>
     <td></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_lossplevel" data-tt-parent="p_attributes_misc">lossPerLevel</div></td>
  </tr>
     <td>-</td>
  <tr>
     <td>-</td>
     <td scope="row"><div class="tt" data-tt-id="p_blockLayer_3" data-tt-parent="p_drawtype">blockLayer_3</div></td>
     <td>Used in combination with '''delayGrowthBelowSunlight''' to determine how much growth progression is lost per light level.</td>
     <td></td>
    <td>farmland</td>
     <td>2</td>
</tr>
     <td></td>
<tr>
  </tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_mechpower" data-tt-parent="p_attributes_misc">mechanicalPower</div></td>
  <tr>
     <td>-</td>
     <td scope="row"><div class="tt" data-tt-id="p_blockLayer_4" data-tt-parent="p_drawtype">blockLayer_4</div></td>
     <td>-</td>
     <td></td>
     <td>Used by the angled gear block to determine how to render gears in the different orientations.</td>
     <td>3</td>
    <td>angledgears</td>  
     <td></td>
</tr>
  </tr>
<tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_downvariant" data-tt-parent="p_attributes_misc">noDownVariant</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_blockLayer_5" data-tt-parent="p_drawtype">blockLayer_5</div></td>
     <td>-</td>
     <td></td>
     <td>-</td>
     <td>4</td>
     <td>When giving a block variants based off the orientation library, this can be used to prevent a "down" variant from being used.</td>
     <td></td>
    <td>-</td>  
  </tr>
</tr>
  <tr>
<tr>
     <td scope="row"><div class="tt" data-tt-id="p_blockLayer_6" data-tt-parent="p_drawtype">blockLayer_6</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_blockbelow" data-tt-parent="p_attributes_misc">placeBelowBlockCode</div></td>
     <td></td>
     <td>block</td>
     <td>5</td>
    <td>-</td>
     <td></td>
     <td>Used by the '''BlockSoilDeposit''' class to place specific blocks beneath it during world generation.</td>
  </tr>
     <td>clay, peat</td>  
  <tr>
</tr>
     <td scope="row"><div class="tt" data-tt-id="p_blockLayer_7" data-tt-parent="p_drawtype">blockLayer_7</div></td>
<tr>
     <td></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_preventdecay" data-tt-parent="p_attributes_misc">preventsDecay</div></td>
     <td>6</td>
     <td>boolean</td>
     <td></td>
     <td>-</td>
  </tr>
     <td>If true, prevents nearby leaves from "decaying", IE disappearing.</td>
  <tr>
    <td>log, soil</td>
     <td scope="row"><div class="tt" data-tt-id="p_json" data-tt-parent="p_drawtype">json</div></td>
</tr>
     <td></td>
<tr>
     <td>7</td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_rotateint" data-tt-parent="p_attributes_misc">rotatableInterval</div></td>
     <td>Will draw a json model.</td>
     <td>string</td>
  </tr>
     <td>-</td>
  <tr>
     <td>Gives some blocks additional rotation properties when placed (currently "22.5degnot45deg" and "22.tdeg" are the only two options).</td>
     <td scope="row"><div class="tt" data-tt-id="p_empty" data-tt-parent="p_drawtype">empty</div></td>
    <td>chest</td>
     <td></td>
</tr>
     <td>8</td>
<tr>
     <td>Nothing will be drawn.</td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_sleepefficiency" data-tt-parent="p_attributes_misc">sleepEfficiency</div></td>
  </tr>
     <td>number (decimal)</td>
  <tr>
     <td>-</td>
     <td scope="row"><div class="tt" data-tt-id="p_cube" data-tt-parent="p_drawtype">cube</div></td>
     <td>Determines how long a player can sleep in a bed, based off a ratio of 12 hours. (ratio = #maxhours/12).</td>
     <td></td>
    <td>-</td>
     <td>9</td>
</tr>
     <td>Draws an ordinary cube.</td>
<tr>
  </tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_grasspread" data-tt-parent="p_attributes_misc">spreadGrass</div></td>
  <tr>
     <td>boolean</td>
     <td scope="row"><div class="tt" data-tt-id="p_cross" data-tt-parent="p_drawtype">cross</div></td>
     <td>-</td>
     <td></td>
     <td>If true, can spread grass to other soil blocks.</td>
     <td>10</td>
    <td>-</td>
     <td></td>
</tr>
  </tr>
<tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_stackable" data-tt-parent="p_attributes_misc">stackable</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_transparent" data-tt-parent="p_drawtype">transparent</div></td>
     <td>boolean</td>
     <td></td>
     <td>-</td>
     <td>11</td>
     <td>Used by berry bushes to determine whether they can be stacked atop each other.</td>
     <td></td>
    <td>-</td>
  </tr>
</tr>
  <tr>
<tr>
    <td scope="row"><div class="tt" data-tt-id="p_liquid" data-tt-parent="p_drawtype">liquid</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_growchance" data-tt-parent="p_attributes_misc">tallGrassGrowChance</div></td>
     <td></td>
     <td>number (decimal)</td>
     <td>12</td>
     <td>-</td>
     <td></td>
     <td>Used by the soil block to determine how often it will grow tall grass on top of it.</td>
  </tr>
    <td>clay, peat, soil</td>  
  <tr>
</tr>
     <td scope="row"><div class="tt" data-tt-id="p_crossandsnowlayer" data-tt-parent="p_drawtype">crossandsnowlayer</div></td>
<tr>
     <td></td>
     <td scope="row"><div class="tt" data-tt-id="p_alist_temp" data-tt-parent="p_attributes_misc">temperature</div></td>
     <td>13</td>
     <td>-</td>
     <td></td>
     <td>-</td>
  </tr>
     <td>Used by liquids to determine the temperature of the core block.</td>
  <tr>
    <td>lava</td>  
     <td scope="row"><div class="tt" data-tt-id="p_renderpass" data-tt-parent="root">renderpass</div></td>
</tr>
     <td>string</td>
<tr>
     <td>&quot;opaque&quot;</td>
    <td scope="row"><div class="tt" data-tt-id="p_alist_temploss" data-tt-parent="p_attributes_misc">tempLossPerMeter</div></td>
     <td>Determines how the block will be drawn.</td>
     <td>number</td>
  </tr>
    <td>-</td>
     <td>How much temperature is lost for a liquid as it moves away from a source block.</td>
     <td>lava</td>  
</tr>
<tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_tickgrowth" data-tt-parent="p_attributes_misc">tickGrowthProbability</div></td>
     <td>number (decimal)</td>
     <td>-</td>
     <td>Used by crops to determine how often it will randomly progress its growth stage per tick.</td>
    <td>all crops</td>  
</tr>
<tr>
     <td scope="row"><div class="tt" data-tt-id="p_alist_tooltrans" data-tt-parent="p_attributes_misc">toolTransforms</div></td>
     <td>-</td>
     <td>-</td>
     <td>Used to set default transformation on the toolrack, though all tools generally use their own.</td>
    <td>toolrack</td>
</tr>
<tr>
    <td scope="row"><div class="tt" data-tt-id="p_alist_weedblock" data-tt-parent="p_attributes_misc">weedBlockCodes</div></td>
    <td>-</td>
    <td>-</td>
    <td>Used by the farmland block to determine what "weeds" can grow on it.</td>
    <td>farmland</td>
</tr>
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_opaque" data-tt-parent="p_renderpass">opaque</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_weedblock_info" data-tt-parent="p_alist_weedblock" data-invisible="true"></div></td>
     <td></td>
     <td colspan="4">
     <td>0</td>
We can see here that this property allows tallgrass and horsetails to grow on farmland with varying degrees of likelihood:
     <td>Used for solid blocks with no half transparency.</td>
     <syntaxhighlight lang="json">
   </tr>
weedBlockCodes: [
{ code: "tallgrass-veryshort", chance: 1 },
{ code: "tallgrass-short", chance: 1 },
{ code: "tallgrass-mediumshort", chance: 1 },
{ code: "tallgrass-medium", chance: 1 },
{ code: "flower-horsetail", chance: 0.2 },
]
     </syntaxhighlight>
   </tr>
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_opaquenocull" data-tt-parent="p_renderpass">opaquenocull</div></td>
     <td colspan="5" style='font-size: 14pt; border-bottom: 2pt solid black; padding-left: 100px;'><b>Rendering</b></td>
    <td></td>
    <td>1</td>
    <td>Used for non-solid single faced blocks, such as tall grass.</td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_transparent" data-tt-parent="p_renderpass">transparent</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_textures" data-tt-parent="root">textures</div></td>
    <td>key: string, value: object</td>
     <td></td>
     <td></td>
     <td>2</td>
     <td>The texture definitions for the block as seen in the world, when dropped on the ground or held in the hand. Within a mod, to refer to a texture from the base game, prefix the path with "game:" (i.e. base: "game:path/to/texture") </td>
     <td>Use for solid halftransparent blocks, such as glass</td>
     <td>all blocks</td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_liquid" data-tt-parent="p_renderpass">liquid</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></td>
     <td colspan="4">{{:json:block:texture}}</td>
    <td>3</td>
     <td>Used for liquids, produces waves.</td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_topsoil" data-tt-parent="p_renderpass">topsoil</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_texturesinventory" data-tt-parent="root">texturesinventory</div></td>
    <td>key: string, value: object</td>
     <td></td>
     <td></td>
     <td>4</td>
    <td>The texture definitions for the block as seen in the player inventory. Overrides the textures.</td>
     <td>Used for grass covered blocks. Allows for a smooth transition from grass to soil, while still allowing climate tinting of grass.</td>
    <td>-</td>
   </tr>
  </tr>
   <tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_ambientocclusion" data-tt-parent="root">ambientocclusion</div></td>
    <td scope="row"><div class="tt" data-tt-id="p_shape" data-tt-parent="root">shape</div></td>
     <td>boolean</td>
    <td>object</td>
     <td>true</td>
    <td>-</td>
     <td>If ambient occlusion will be applied to the block.</td>
    <td>For the json drawtype, the shape definition of the block as shown in the world, dropped on the ground or held in hand.</td>
   </tr>
    <td>Barrel, firepit</td>
  <tr>
  </tr>
     <td scope="row"><div class="tt" data-tt-id="p_tintindex" data-tt-parent="root">tintindex</div></td>
  <tr>
     <td>integer</td>
    <td scope="row"><div class="tt" data-tt-id="p_base" data-tt-parent="p_shape">base</div></td>
     <td>0</td>
    <td></td>
     <td>'''''0''''' for no tint, '''''1''''' for plant climate tint, '''''2''''' for water climate tint.</td>
    <td></td>
     <td>-</td>
    <td>The path to the shape json file, the base dir is ''assets/shapes/''.</td>
   </tr>
    <td>-</td>
   <tr>
  </tr>
     <td scope="row"><div class="tt" data-tt-id="p_renderflags" data-tt-parent="root">renderflags</div></td>
  <tr>
     <td>0 ... 255</td>
    <td scope="row"><div class="tt" data-tt-id="p_rotateX" data-tt-parent="p_shape">rotatex</div></td>
     <td>0</td>
    <td>float</td>
     <td>8 bits that are sent to the graphics card for each vertex of the blocks shape. The lower 3 bits are currently used for altering the vertexes z-depth to fix a bunch of z-fighting issues.</td>
    <td>0</td>
     <td>-</td>
    <td>Only 90 degree rotations are possible.</td>
   </tr>
    <td>-</td>
   <tr>
  </tr>
     <td scope="row"><div class="tt" data-tt-id="p_facecullmode" data-tt-parent="root">facecullmode</div></td>
  <tr>
     <td>string</td>
    <td scope="row"><div class="tt" data-tt-id="p_rotateY" data-tt-parent="p_shape">rotatey</div></td>
     <td>&quot;default&quot;</td>
    <td>float</td>
     <td>Determines which sides of the blocks should be rendered.</td>
    <td>0</td>
     <td>-</td>
    <td>Only 90 degree rotations are possible.</td>
   </tr>
    <td>-</td>
   <tr>
  </tr>
     <td scope="row"><div class="tt" data-tt-id="p_facecullmode_default" data-tt-parent="p_facecullmode">default</div></td>
  <tr>
     <td></td>
    <td scope="row"><div class="tt" data-tt-id="p_rotateZ" data-tt-parent="p_shape">rotatez</div></td>
     <td>0</td>
    <td>float</td>
    <td>0</td>
    <td>Only 90 degree rotations are possible.</td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_shapeinventory" data-tt-parent="root">shapeinventory</div></td>
    <td>object</td>
    <td>-</td>
    <td>For the json drawtype, the shape definition of the block as shown in the players inventory.</td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_drawtype" data-tt-parent="root">drawtype</div></td>
    <td>string</td>
    <td>&quot;cube&quot;</td>
    <td>Determines how the block is tesselated, select JSON for being able to use custom JSON Models. The other values are hardcoded methods of tesselating the block.</td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_blockLayer_1" data-tt-parent="p_drawtype">blockLayer_1</div></td>
    <td></td>
    <td>0</td>
    <td></td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_blockLayer_2" data-tt-parent="p_drawtype">blockLayer_2</div></td>
    <td></td>
    <td>1</td>
    <td></td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_blockLayer_3" data-tt-parent="p_drawtype">blockLayer_3</div></td>
    <td></td>
    <td>2</td>
    <td></td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_blockLayer_4" data-tt-parent="p_drawtype">blockLayer_4</div></td>
    <td></td>
    <td>3</td>
    <td></td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_blockLayer_5" data-tt-parent="p_drawtype">blockLayer_5</div></td>
    <td></td>
    <td>4</td>
    <td></td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_blockLayer_6" data-tt-parent="p_drawtype">blockLayer_6</div></td>
    <td></td>
    <td>5</td>
    <td></td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_blockLayer_7" data-tt-parent="p_drawtype">blockLayer_7</div></td>
    <td></td>
    <td>6</td>
    <td></td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_json" data-tt-parent="p_drawtype">json</div></td>
    <td></td>
    <td>7</td>
    <td>Will draw a json model.</td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_empty" data-tt-parent="p_drawtype">empty</div></td>
    <td></td>
    <td>8</td>
    <td>Nothing will be drawn.</td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_cube" data-tt-parent="p_drawtype">cube</div></td>
    <td></td>
    <td>9</td>
    <td>Draws an ordinary cube.</td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_cross" data-tt-parent="p_drawtype">cross</div></td>
    <td></td>
    <td>10</td>
    <td></td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_transparent" data-tt-parent="p_drawtype">transparent</div></td>
    <td></td>
    <td>11</td>
    <td></td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_liquid" data-tt-parent="p_drawtype">liquid</div></td>
    <td></td>
    <td>12</td>
    <td></td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_crossandsnowlayer" data-tt-parent="p_drawtype">crossandsnowlayer</div></td>
    <td></td>
    <td>13</td>
    <td></td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_renderpass" data-tt-parent="root">renderpass</div></td>
    <td>string</td>
    <td>&quot;opaque&quot;</td>
    <td>Determines how the block will be drawn.</td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_opaque" data-tt-parent="p_renderpass">opaque</div></td>
    <td></td>
    <td>0</td>
    <td>Used for solid blocks with no half transparency.</td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_opaquenocull" data-tt-parent="p_renderpass">opaquenocull</div></td>
    <td></td>
    <td>1</td>
    <td>Used for non-solid single faced blocks, such as tall grass.</td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_transparent" data-tt-parent="p_renderpass">transparent</div></td>
    <td></td>
    <td>2</td>
    <td>Use for solid halftransparent blocks, such as glass</td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_liquid" data-tt-parent="p_renderpass">liquid</div></td>
    <td></td>
    <td>3</td>
    <td>Used for liquids, produces waves.</td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_topsoil" data-tt-parent="p_renderpass">topsoil</div></td>
    <td></td>
     <td>4</td>
     <td>Used for grass covered blocks. Allows for a smooth transition from grass to soil, while still allowing climate tinting of grass.</td>
    <td>-</td>
   </tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_ambientocclusion" data-tt-parent="root">ambientocclusion</div></td>
     <td>boolean</td>
     <td>true</td>
     <td>If ambient occlusion will be applied to the block.</td>
    <td>-</td>
   </tr>
  <tr>
     <td scope="row"><div class="tt" data-tt-id="p_tintindex" data-tt-parent="root">tintindex</div></td>
     <td>integer</td>
     <td>0</td>
     <td>'''''0''''' for no tint, '''''1''''' for plant climate tint, '''''2''''' for water climate tint.</td>
     <td>-</td>
   </tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_renderflags" data-tt-parent="root">renderflags</div></td>
     <td>0 ... 255</td>
     <td>0</td>
     <td>8 bits that are sent to the graphics card for each vertex of the blocks shape. The lower 3 bits are currently used for altering the vertexes z-depth to fix a bunch of z-fighting issues.</td>
     <td>-</td>
   </tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_facecullmode" data-tt-parent="root">facecullmode</div></td>
     <td>string</td>
     <td>&quot;default&quot;</td>
     <td>Determines which sides of the blocks should be rendered.</td>
     <td>-</td>
   </tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_facecullmode_default" data-tt-parent="p_facecullmode">default</div></td>
     <td></td>
     <td>0</td>
     <td>Culls faces if they are opaque faces adjacent to opaque faces.</td>
     <td>Culls faces if they are opaque faces adjacent to opaque faces.</td>
     <td>-</td>
     <td>-</td>
Line 2,106: Line 2,585:
     <td>-</td>
     <td>-</td>
     <td>Determines if given block face is fully opaque. If yes, the opposite face of the adjacent block will not be drawn for efficiency reasons.</td>
     <td>Determines if given block face is fully opaque. If yes, the opposite face of the adjacent block will not be drawn for efficiency reasons.</td>
    <td>-</td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td scope="row">
     <td scope="row"><div class="tt" data-tt-id="p_sideopauqe_info" data-tt-parent="p_sideopaque" data-invisible="true"></div></td>
        <div class="tt" data-tt-id="p_sideopaque_all" data-tt-parent="p_sideopaque">all</div><br>
    <td colspan="4">
<div class="tt" data-tt-id="p_sideopaque_horizontals" data-tt-parent="p_sideopaque">horizontals</div><br>
Sides include: ''all; horizontals, verticals; east, west, up, down, north, south''.
<div class="tt" data-tt-id="p_sideopaque_verticals" data-tt-parent="p_sideopaque">verticals</div><br>
        <div class="tt" data-tt-id="p_sideopaque_east" data-tt-parent="p_sideopaque">east</div><br>
        <div class="tt" data-tt-id="p_sideopaque_west" data-tt-parent="p_sideopaque">west</div><br>
        <div class="tt" data-tt-id="p_sideopaque_up" data-tt-parent="p_sideopaque">up</div><br>
        <div class="tt" data-tt-id="p_sideopaque_down" data-tt-parent="p_sideopaque">down</div><br>
        <div class="tt" data-tt-id="p_sideopaque_north" data-tt-parent="p_sideopaque">north</div><br>
        <div class="tt" data-tt-id="p_sideopaque_south" data-tt-parent="p_sideopaque">south</div>
    </td>
    <td></td>
    <td></td>
    <td></td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 2,128: Line 2,597:
     <td>-</td>
     <td>-</td>
     <td>If AmbientOcclusion will be applied for each side.</td>
     <td>If AmbientOcclusion will be applied for each side.</td>
    <td>-</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_ao_info" data-tt-parent="p_sideao" data-invisible="true"></div></td>
    <td colspan="4">
Sides include: ''all; horizontals, verticals; east, west, up, down, north, south''.
  </tr>
<tr>
    <td scope="row"><div class="tt" data-tt-id="p_sideemitao" data-tt-parent="root">sideEmitAo</div></td>
    <td>key: string, value: boolean</td>
    <td>-</td>
    <td>Defines which of the 6 block neighbours should receive AO if this block is in front of them.</td>
    <td>-</td>
   </tr>
   </tr>
  <tr>
  <tr>
     <td scope="row">
     <td scope="row"><div class="tt" data-tt-id="p_sideemitao_info" data-tt-parent="p_sideemitao" data-invisible="true"></div></td>
        <div class="tt" data-tt-id="p_sideao_all" data-tt-parent="p_sideao">all</div><br>
    <td colspan="4">
<div class="tt" data-tt-id="p_sideao_horizontals" data-tt-parent="p_sideao">horizontals</div><br>
Sides include: ''all; horizontals, verticals; east, west, up, down, north, south''.
<div class="tt" data-tt-id="p_sideao_verticals" data-tt-parent="p_sideao">verticals</div><br>
        <div class="tt" data-tt-id="p_sideao_east" data-tt-parent="p_sideao">east</div><br>
        <div class="tt" data-tt-id="p_sideao_west" data-tt-parent="p_sideao">west</div><br>
        <div class="tt" data-tt-id="p_sideao_up" data-tt-parent="p_sideao">up</div><br>
        <div class="tt" data-tt-id="p_sideao_down" data-tt-parent="p_sideao">down</div><br>
        <div class="tt" data-tt-id="p_sideao_north" data-tt-parent="p_sideao">north</div><br>
        <div class="tt" data-tt-id="p_sideao_south" data-tt-parent="p_sideao">south</div>
    </td>
    <td></td>
    <td></td>
    <td></td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 2,149: Line 2,620:
     <td>key: string, value: boolean</td>
     <td>key: string, value: boolean</td>
     <td>-</td>
     <td>-</td>
     <td>Determins if given block side is solid. If true, other blocks like torches can be attached to it.</td>
     <td>Determines if given block side is solid. If true, other blocks like torches can be attached to it.</td>
<td>all stairs</td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td scope="row">
     <td scope="row"><div class="tt" data-tt-id="p_sidesolid_info" data-tt-parent="p_sidesolid" data-invisible="true"></div></td>
        <div class="tt" data-tt-id="p_sidesolid_all" data-tt-parent="p_sidesolid">all</div><br>
    <td colspan="4">
<div class="tt" data-tt-id="p_sidesolid_horizontals" data-tt-parent="p_sidesolid">horizontals</div><br>
Sides include: ''all; horizontals, verticals; east, west, up, down, north, south''.
<div class="tt" data-tt-id="p_sidesolid_verticals" data-tt-parent="p_sidesolid">verticals</div><br>
        <div class="tt" data-tt-id="p_sidesolid_east" data-tt-parent="p_sidesolid">east</div><br>
        <div class="tt" data-tt-id="p_sidesolid_west" data-tt-parent="p_sidesolid">west</div><br>
        <div class="tt" data-tt-id="p_sidesolid_up" data-tt-parent="p_sidesolid">up</div><br>
        <div class="tt" data-tt-id="p_sidesolid_down" data-tt-parent="p_sidesolid">down</div><br>
        <div class="tt" data-tt-id="p_sidesolid_north" data-tt-parent="p_sidesolid">north</div><br>
        <div class="tt" data-tt-id="p_sidesolid_south" data-tt-parent="p_sidesolid">south</div>
    </td>
    <td></td>
    <td></td>
    <td></td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 2,175: Line 2,636:
   </tr>
   </tr>
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_randomrotations" data-tt-parent="root">randomRotations</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_randomrotations" data-tt-parent="root">randomizeRotations</div></td>
     <td>boolean</td>
     <td>boolean</td>
     <td>false</td>
     <td>false</td>
     <td>If true then the block will be randomly rotated when placed.</td>
     <td>If true then the block will be randomly rotated when placed. Note: Many random rotated blocks in one chunk will slow down block placement updates. You can increase efficieny by defining alternate shapes with random rotations instead.</td>
     <td>flower</td>
     <td>flower</td>
   </tr>
   </tr>
Confirmedusers, editor
749

edits