# Maid Model Pack Details
- This wiki applies to Touhou Little Maid mod in
1.12.2
or1.16.5
latest version; - Requires understanding of vanilla Minecraft's resource pack structure;
- Requires understanding of JSON format;
- Currently only supports models for 1.10.0 or 1.12.0 Bedrock Edition Model.
- For file editing software, we recommend
Visual Studio Code
, all related files requires to be saved usingUTF-8 without BOM
.
# Model Packs Structure
To better understand how to create model packs, we listed here the structure format for model packs
model pack folder
│
├─pack.mcmeta
├─pack.png
└─assets
└─my_model_pack
├─maid_model.json
├─lang
│ ├─en_us.lang
│ └─zh_cn.lang
├─models
│ └─entity
│ ├─cirno.json
│ └─daiyousei.json
└─textures
└─entity
├─cirno.png
└─daiyousei.png
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Model Packs Description Files
The file complete structure is as below, only the parts marked '(Required)' requires to be filled, you don't have to fill everything.
The model supports JSON files with comments, please use at your discretion.
{
// Model pack name (Required)
"pack_name": "Touhou Project Model Packs",
// Author list
"author": [
"TartaricAcid",
"SuccinicAcid"
],
// Description for model packs
"description": [
"Default Model Packs"
],
// Model pack version
"version": "1.0.0",
// Date creation for model pack
"date": "2019-07-14",
// Model pack icon, without this, the model pack will have no icon
"icon": "touhou_little_maid:textures/maid_icon.png",
// Model list (Required)
"model_list": [
{
// Model id, no duplication allowed (Required)
"model_id": "touhou_little_maid:hakurei_reimu",
// The path for the model, use the full resource path
"model": "touhou_little_maid:models/entity/hakurei_reimu.json",
// The path for the texture, use the full resource path
"texture": "touhou_little_maid:textures/entity/hakurei_reimu.png",
// The model size when rendering the item form, default is 1.0
"render_item_scale": 0.9,
// The size when render the entity, range is between 0.2~2.0, default is 1.0
"render_entity_scale": 0.75,
// Model name
"name": "Reimu Hakurei",
// The description for the model
"description": [
"Shrine Maiden of Hakurei"
],
// Animation script reference, without this part, model will have some default animations
// tlm-utils plugins can auto generate the correct animation reference based on the group name
"animation": [
"touhou_little_maid:animation/maid.default.js"
]
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
The example above listed all usable field, only the field with '(Required)' are needed, the rest can be omitted.
For simplicity, you could write a file like this:
{
// Model pack name (Required)
"pack_name": "Touhou Project Model Packs",
// Model list (Required)
"model_list": [
{
// Model id, no duplication allowed (Required)
"model_id": "touhou_little_maid:hakurei_reimu"
}
]
}
2
3
4
5
6
7
8
9
10
11
If we do not fill the field for model
or texture
, it will choose the default model and texture based on model_id
.
For the example above, model_id
is touhou_little_maid:hakurei_reimu
, then the model file will be hakurei_reimu.json
under models/entity
folder, the texture will be hakurei_reimu.png
under textures/entity
folder.
If we filled the field for model
or texture
, then the content has no limit, and can even share a model or texture for multiple characters.
# Animated Icon
Icon does not have size limit, supports both static and animated icons.
Any icon with a scale of 1:1 will be interpreted as static icon. Any long icon that is not 1:1 scale, will be displayed slowly with a 0.1 second interval, which creates the animated effect.
The image below is the icon in the mod, left is static icon, and right is the animated icon.
# Model Files
- This mod is using JSON files in Bedrock
1.10.0
or1.12.0
for model loading, the document can be exported via model building software Blockbench (opens new window), without additional edits. - There are many preset animations, you only need to name a specific group, and then the plugin will automatically generate the corresponding animation script reference when exporting the model. For all available names, please see the Preset Animation chapter.
- Model also support JavaScript custom animations, you can find the introduction in the custom animation chapter.
# Internationlization
As a game that are facing internationlization, part of the contents of model packs also have internationalization compability.
pack_name
anddescription
field in model packs support internationalization;name
anddescription
field in model list support internationalization.
The method of adding internationalization is pretty simple, just need to begin it using {
and end it using }
, the middle section is the internationlization key, and then followed by the corresponding language file.
For example we wrote the description as follow (taking just a small section)
"pack_name": "{pack.vanilla_touhou_model.name}",
"description": ["{pack.vanilla_touhou_model.desc}"]
2
and then under model pack namespace, in the lang
folder we create en_us.lang
file, and write the content below:
pack.vanilla_touhou_model.name=Vanilla Touhou Model
pack.vanilla_touhou_model.desc=Default Model Packs
2
We only added the English file, but if we want to support Chinese, we can create zh_cn.lang
file and write the content as below:
pack.vanilla_touhou_model.name=原版东方资源包
pack.vanilla_touhou_model.desc=默认的模型包
2
For the first example, if we did not fill the name
file, then the system will automatically create the local key based on model_id
, for example model_id
is touhou_little_maid:cushion
, then the generated language key is model.touhou_little_maid.cushion.name
.
description
file is not generated by default, you will need to fill that in.
# Compatibility Issue
Since models made by some authors are more unique, they may have some compability issues with maids' various addtional appearance parts. Here we address the issue with these non-standard models and how you can overcome it:
Issues | Solution |
---|---|
Uncoordinated animation | Write a custom JavaScript animation script |
Hold items are in incorrect position | Use positional group to define the position |
Disable showing hold items | As long as armLeft or armRight group does not exist, then the corresponding hold items will not be shown |
Backpack is in incorrect position | Use positional group to define the position |
Backpack, trolley, vehicles, broom, custom head | Write some fields as shown in the example below to close it |
{
"pack_name": "Touhou Project Pack",
"model_list": [{
"model_id": "touhou_little_maid:hakurei_reimu",
"show_backpack": false, // Prevent displaying of backpack
"show_custom_head": false, // Prevent displaying of maid's custom heads
"show_hata": false, // Prevent displaying of hata sasimono, deprecated in 1.16
"can_hold_trolley": false, // prevent maid to hold the trolley, deprecated in 1.16
"can_hold_vehicle": false, // Prevent maid to hold the vehicle, deprecated in 1.16
"can_riding_broom": false // Prevent maid to riding the broom, deprecated in 1.16
}]
}
2
3
4
5
6
7
8
9
10
11
12
# Maid Easter Eggs
We added maid naming easter egg function, specially named maid can use special models.
Writing easter egg script is pretty simple, the model will automatically detect it as easter egg models, and it won't show in skin menu.
# Normal Easter Eggs
Below is the script for normal naming easter egg. Under normal naming easter egg, maid only need to be named as shown in the tag
field to use the model.
{
"pack_name": "Touhou Project Model Pack",
"model_list": [{
"model_id": "touhou_little_maid:hakurei_reimu",
"easter_egg": {
"tag": "IKUN~"
}
}]
}
2
3
4
5
6
7
8
9
# Encrypted Easter Eggs
Below is the script for encrypted naming easter egg. For encrypted naming easter egg, maid has to be specially named, the naming has to be the same as SHA-1 value in the tag
below to use the model.
As the script below, when maid is named IKUN~
, because the characters' SHA-1 value is 6dadb86d91cc4c0c2c7860e1cb16cec01e1b6511
, same as tag
field, it will use said model.
{
"pack_name": "Touhou Project Model Pack",
"model_list": [{
"model_id": "touhou_little_maid:hakurei_reimu",
"easter_egg": {
"encrypt": true,
"tag": "6dadb86d91cc4c0c2c7860e1cb16cec01e1b6511"
}
}]
}
2
3
4
5
6
7
8
9
10
# Other Questions
# Z-fighting Issue
This is an issue with OpenGL itself, during the process of creating models if we used flat or two coinciding solids, we will have this issue.
For the issue of one flat cube, you can add texture to one of the sides and keep the others empty, it will solve the issue; for two coinciding cube, move the cube slightly, or delete the coinciding cube.
# Uppercase & Lowercase
In Minecraft, all the file names needs to be lowercase.