====== Adding Custom Resources ======
User-created content can be added to the Minecraft Transit Railway mod via resource packs. Currently, players can add the following:
* Texture variants for existing [[/trains|trains]]
* Blockbench models (BBmodel) for [[/trains|trains]]
* New textures and/or text for [[/railway_sign|railway signs]]
It is highly recommended to be familiar with [[https://minecraft.wiki/wiki/Tutorials/Creating_a_resource_pack|creating a resource pack]] before proceeding with this guide.
===== Resource Pack Format =====
The file ''mtr_custom_resources.json'' is the main file that will get loaded. This file defines custom content for the mod to register. It must be placed under the ''mtr'' namespace; in other words, it must have the file path of ''assets/mtr/mtr_custom_resources.json''.
==== Adding Texture Variants for Existing Trains ====
To add texture variants, the ''custom_trains'' JSON object should be added to ''mtr_custom_resouces.json''. Each JSON object under ''custom_trains'', representing a texture variant for a train, should have a unique key and serveral required entries.
| Key | Data Type | Description | Required? | Default value if not specified | Notes |
| --- | --- | --- | --- |
| `name` | String | The name to be shown on [dashboards](https://wiki.minecrafttransitrailway.com/mtr:dashboards) when selecting trains for a route | Required| N/A ||
| `color` | String (colour hex code) | The colour to be shown on [dashboards](https://wiki.minecrafttransitrailway.com/mtr:dashboards) when selecting trains for a route | Optional |Black (`#000000`)||
| `base_train_type` | String (train ID) | The train model to apply the texture on | Required(If bbmodel is not used.) | N/A | See [the trains page](https://wiki.minecrafttransitrailway.com/mtr:trains) for a list of train identifiers |
| `texture_id` | String (texture ID) | The [namespaced ID](https://minecraft.wiki/wiki/Namespaced_ID) of the texture file | Required |N/A||
| `description` | String | A brief description of this train can be added. Newline code (\n) available. | Optional |N/A||
| `wikipedia_article` | String | You can cite the English Wikipedia article. If it is too long, it will be omitted in the middle. | Optional |N/A||
| `train_barrier_id` | String | Train barriers will be installed at the end of the car. If not specified, it will not be displayed. | Optional |N/A||
| `gangway_connection_id` | String | Gangway will be placed at the end of the car. If not specified, a Gangway of SP1900 will be shown.| Optional |`mtr:textures/entity/sp1900`||
| `has_gangway_connection` | Boolean |Selects whether the gangway can be passed through if false, the gangway will be transparent and the `gangway_connection_id` specification will be ignored.| Optional|`true`||
| `door_animation_type` | String | The following door animations can be specified. Must be written in CAPITAL LETTERS.
STANDARD
STANDARD_SLOW
CONSTANT
PLUG_FAST
PLUG_SLOW
BOUNCY_1
BOUNCY_2
MLR
R179
R211| Optional|`STANDARD`|CONSTANT only 32 (max) regardless of train door width.|
| `model` | String | Specify BBmodel file by file path.| Required if BBmodel is used.|N/A||
| `model_properties` | String | Specify Model Properties file(.json) by file path.| Required if BBmodel is used.|N/A||
| `speed_sound_base_id` | String | Specifies the ID of a conventional running sound, which can be either the default train ID or one defined in sounds.json.|Optional|N/A|If not specified, the sound will be silent.|
| `speed_sound_count` |Number|Specify the number of ogg files in the acceleration or deceleration folder within the folder specified in speed_sound_base_id above. If not specified correctly, files above a certain speed will be silent.|Optional|The number of sounds specified by Train ID (if any)||
| `door_sound_base_id` | String | Specifies the ID of a conventional door sound, which can be either the default train ID or one defined in sounds.json.|Optional|N/A|If not specified, the sound will be silent.|
| `door_close_sound_time` |Number|Specifies the offset of the door sound; cannot be greater than 1 or less than 0 due to limitations on the MTR side.|Optional|`0.5`||
| `bve_sound_base_id` | String |Specifies the ID of a BVE sound, which can be either the default train ID or one defined in sounds.json. See here for how it is defined. [MTR:Custom_BVE_Train_Sound](https://wiki.minecrafttransitrailway.com/mtr:dev:custom_bve_sound)|Optional|N/A|If specified, conventional format sound will not be available.|
An example is shown below.
```
{
"custom_trains": {
"my_custom_train": {
"name": "My Custom SP1900 Train",
"color": "FEC5E5",
"base_train_type": "sp1900",
"texture_id": "mtr:custom_directory/custom_sp1900.png"
}
}
}
```
## Adding New Railway Sign Textures or Text
To add new [railway signs](https://github.com/jonafanho/Minecraft-Transit-Railway/wiki/Railway-Sign) textures or text, the `custom_signs` JSON object should be added to `mtr_custom_resouces.json`. Each JSON object under `custom_signs`, representing a new sign, should have a unique key and serveral required entries.
| Key | Data Type | Description | Required? |
| --- | --- | --- | --- |
| `texture_id` | String (texture ID) | The [namespaced ID](https://minecraft.wiki/wiki/Namespaced_ID) of the texture file | Required |
| `flip_texture` | Boolean | If `true`, the texture will be flipped horizontally | Optional |
| `custom_text` | String | If set, the text will be shown to the right of the image; the pipe character `\|` is supported, for example `客務中心\|Customer Service Centre` | Optional |
| `flip_custom_text` | Boolean | If `custom_text` is set and `flip_custom_text` is `true`, the text will be shown to the left of the image | Optional |
| `small` | Boolean | If `true`, the image will be rendered with a margin around it | Optional |
| `background_color` | String (colour hex code) | The colour for the backgound | Optional, defaults to the colour black if none specified |
An example is shown below.
```
{
"custom_signs": {
"my_custom_sign": {
"texture_id": "mtr:custom_directory/custom_sign.png",
"flip_texture": false,
"custom_text": "你好|Hello",
"flip_custom_text": false,
"small": true,
"background_color": "1167B1"
}
}
}
```
## Model Properties file
This section is currently unwritten.
The Model Properties file can be edited by the Resource Pack Creator or directly in a text editor, for example.
### basis
| Key | Data Type | Description | Notes |
| --- | --- | --- | --- |
| `transport_mode` | String | The following transport type can be specified. Must be written in CAPITAL LETTERS.
TRAIN
AIRPLAIN
CABLECAR
FERRY | Required |
| `length` | Number | Specifies the length of the car body. |Required|
| `width` | Number | Specifies the width of the car body. |Required|
| `door_max` | String | Specifies the door opening/closing width. If it is set to CONSTANT, the description is ignored. | Required |
### `part`
| Key | Data Type | Description | Notes |
| --- | --- | --- | --- |
| `name` | String | Specify the parts folder of BBmodel. Specifying a folder without a single cube may cause Minecraft to crash.| Required |
| `stage` | String | The following model attributes can be specified. Must be written in CAPITAL LETTERS.
EXTERIOR
INTERIOR
LIGHTS
ALWAYS_ON_LIGHTS
INTERIOR_TRANSLUCENT | Required|
| `mirror` | Boolean | Flip the model 180 degrees on the y-axis. | Optional, default is true |
| `skip_rendering_if_too_far` | Boolean | If set to true, models more than 2 chunks apart will not be displayed. | Optional, default is false |
## Verifying the Resource Pack
Use a [JSON validator](https://jsonlint.com/) to check for any syntax errors of the JSON files.
The resource pack (zip file) can be installed either clientside or as a server resource pack. If installed as a server resource pack, all players joining the server will be able to see the new additions after accepting the server resource pack.
[Download the example resource pack](https://github.com/jonafanho/Minecraft-Transit-Railway/blob/master/examples/MTR%20Custom%20Resources.zip?raw=true) to see a full example and to test out the functionality.