Changes between Version 8 and Version 9 of CustomBlocks


Ignore:
Timestamp:
07/24/22 21:21:22 (2 years ago)
Author:
admin
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CustomBlocks

    v8 v9  
    2525
    2626= Creating Custom Block Definition Files =
     27
     28Custom Block Definition Files are tables in the form of CSV files that describe basic properties such as lighting, colouring, and the block properties it has:
     29
     30== Basic format ==
     31
     32The files should be CSV files with the following properties:
     33
     34* Filename extension: `csv`
     35* Encoding: UTF-8 without a BOM
     36* Field separator: comma
     37* The first row should contain the field names
     38* String values should be quoted with double quotes
     39* Boolean values should be either `true` or `false`
     40
     41== Columns ==
     42
     43The data should contain the following columns:
     44
     45| Column          | Mandatory | Type    | Description                                                                                                                                                                                                             |
     46|-----------------|-----------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
     47| `name`          | *         | String  | The namespace and name of the block separated by a colon ("ID" or "resource location")                                                                                                                                  |
     48| `discriminator` |           | String  | An optional discriminator to discriminate multiple rows with the same `name`                                                                                                                                            |
     49| `properties`    | *         | String  | A comma-separated list of the names and types of all the properties this block can have. See below for details                                                                                                          |
     50| `opacity`       | *         | Integer | The opacity of the block (how much light it blocks), from 0 (fully transparent) to 15 (fully opaque)                                                                                                                    |
     51| `receivesLight` | *         | Boolean | Whether the block should be lit itself, despite being fully opaque (e.g. stair blocks, slabs, etc.). Only applies to fully opaque blocks; should be set to `false` for other blocks                                     |
     52| `insubstantial` | *         | Boolean | Whether the block should be considered insubstantial. See below for details                                                                                                                                             |
     53| `resource`      | *         | Boolean | Whether the block should be considered an ore or resource. These are replaced with `minecraft:stone` by the "remove resources" Merge option                                                                             |
     54| `tileEntity`    | *         | Boolean | Whether the block is a tile/block entity                                                                                                                                                                                |
     55| `tileEntityId`  |           | Boolean | If `tileEntity` is `true`: the ID of the corresponding behaviour. This is often, but not always, the same as `name`                                                                                                     |
     56| `treeRelated`   | *         | Boolean | Whether the block is part of trees, or attached to trees. These are removed by the "remove trees" Merge option                                                                                                          |
     57| `vegetation`    | *         | Boolean | Whether the block is a plant, other than `treeRelated`. These are removed by the "remove vegetation" Merge option                                                                                                       |
     58| `blockLight`    | *         | Integer | How much block light the block emits, from 0 - 15                                                                                                                                                                       |
     59| `natural`       | *         | Boolean | Whether the block should be considered natural as opposed to being man-made. Chunks with blocks that are _not_ `natural` have the Read Only layer applied during Import                                                 |
     60| `watery`        | *         | Boolean | Whether the block is always flooded with water, regardless of its properties (e.g. water plants)                                                                                                                        |
     61| `colour`        |           | Hex     | The colour in which the block should be rendered in the editor view, as a hexidecimal number in `aarrggbb` format, where `aa` should always be `ff` (opaque). When not specified, the block will be rendered in magenta |
     62
     63== Discriminator ==
     64
     65The discriminator is used if a block occurs multiple times with the same name but different values (e.g. a different
     66`blockLight`). It consists of a comma-separated list of key-value pairs (separated by equals signs) describing the
     67property names and values of blocks to which this row should apply. It should only contain the discriminating properties
     68(those whose value actually determines which row applies).
     69
     70Examples: `berries=false` or `waterlogged=true,pickles=3`.
     71
     72**NOTE:** when using this field, the block must of course occur at least twice with the same `name`, and you must make
     73sure that all possible permutations of the discriminating properties are covered by exactly one row! In other words: it
     74must not be possible for no rows to match, or for more than one row to match.
     75
     76== Properties ==
     77
     78These are all the properties and their types and values that the block can have. It consists of a comma-separated list
     79of property definitions. A property definition consist of the property name, a colon, and a type definition. The type
     80definition should be one of:
     81
     82`b`: a boolean
     83
     84`i[n-m]`: an integer, where `n` is the minimum value and `m` is the maximum value
     85
     86`e[val1;val2;...]`: an enumeration, where `val1,val2,...` is a semicolon-separated list of possible values
     87
     88Examples: `facing:e[north;south;west;east],powered:b,face:e[floor;wall;ceiling]` or `distance:i[1-7],persistent:b`.
     89
     90== Insubstantial blocks ==
     91
     92An "insubstantial" block is an inconsequential block that players would presumably not mind being summarily removed or
     93replaced. Usually it is non-blocking (players walk through it) and it implies that it cannot support anything solid. It
     94encompasses things like grass, flowers, water and snow, for example.
     95
     96More concretely for WorldPainter, a block being
     97insubstantial has the following consequences:
     98
     99* It will be replaced by other blocks (substantial or not, except air blocks) when placing Custom Objects or when Merging
     100* It will not block the placement of Custom Objects by default
     101* Trees and Custom Objects will not be placed on it by default
     102* The Frost layer will not deposit snow on it
     103* Custom Ground Cover layers will not be placed on it
     104
     105== Snow ==
     106
     107For a block to be eligible to have snow placed on it by the Frost layer, make sure that it is both fully opaque
     108(`opacity` is `15`) and not insubstantial (`insubstantial` is `false`).