-
Notifications
You must be signed in to change notification settings - Fork 0
Creating Profile v3
Soft Imprints loads profiles from resource assets.
Path format: assets/<namespace>/imprint_profiles/<profile_id>.json
Example: assets/my_pack/imprint_profiles/mud.json
Each profile is a single JSON object.
A v3 profile can contain these top-level sections:
| Field | Required |
|---|---|
version |
Recommended |
supported_blocks |
Recommended |
surface |
No |
layers |
Yes |
texture_sets |
Yes |
resolution |
No |
decay |
No |
priority |
No |
preview |
No |
Some optional sections use default behavior when omitted.
The following sections describe each group of fields in detail.
version declares the profile schema version.
Example:
"version": 3
Use version: 3 for new profiles.
Older profile schemas are migrated in memory when possible.
Profiles with a newer schema version than the installed mod supports are rejected.
For compatibility rules, see Schema Versions.
supported_blocks assigns the profile to blocks.
When a block matches this list, Soft Imprints can use this profile for imprints on that block.
Format: array of block ids
Example:
["minecraft:mud"]
A profile without supported_blocks can still load, but it will not be assigned to any block by default.
This is useful only for advanced setups where another resolver or integration selects the profile manually.
If multiple profiles support the same block, Soft Imprints uses profile priority to choose which one wins.
See Priority.
surface controls how the base surface under the imprint is rendered.
Example:
"surface": {
"mode": "repaint",
"zero_layer_source": "surface"
}| Field | Default | Values |
|---|---|---|
mode |
repaint |
repaint, overlay
|
zero_layer_source |
surface |
surface, profile
|
repaint replaces the original top face and redraws the surface with imprint layers.
overlay keeps the original block model and draws imprints slightly above the surface.
zero_layer_source is used by repaint mode:
-
surfaceuses the block's current top texture as the base. -
profileusestexture_sets.zero_layerfrom this profile.
layers describes imprint depth layers.
Each layer has a numeric value. This value is written into the imprint map and matched with textures from texture_sets.
Lower values are deeper. 0 means no imprint.
Example:
"layers": [
{
"value": 1,
"enable": true,
"expand": 0,
"inner_jitter": 0.0,
"outer_jitter": 0.05,
"erosion": 0.25
},
{
"value": 2,
"enable": true,
"expand": 2,
"inner_jitter": 0.0,
"outer_jitter": 0.4,
"erosion": 0.1
}
]| Field | Required | Values | Description |
|---|---|---|---|
value |
Yes |
1-127
|
Layer id. Must match texture keys in texture_sets.textures_by_value. |
enable |
Yes |
true, false
|
Whether this layer is used. |
expand |
No | integer | Expands this layer outward. |
inner_jitter |
No |
0.0-1.0
|
Adds noise along the inner edge of this layer. |
outer_jitter |
No |
0.0-1.0
|
Adds noise along the outer edge of this layer. |
erosion |
No |
0.0-1.0
|
Randomly removes cells from this layer. |
Every enabled layer must have a matching texture entry in each texture set.
Layer values determine depth order. Mod sorts layers by value. Lower values are deeper.
texture_sets defines the textures used by the profile.
A profile can provide multiple texture sets. The player can switch between them in the config screen.
Example:
"texture_sets": {
"selected": "standard",
"zero_layer": "minecraft:block/snow",
"textures_by_value": {
"standard": {
"1": "my_pack:block/imprints/mud/sets/standard_mud_layer_1",
"2": "my_pack:block/imprints/mud/sets/standard_mud_layer_2"
},
"wet": {
"1": "my_pack:block/imprints/mud/sets/wet_mud_layer_1",
"2": "my_pack:block/imprints/mud/sets/wet_mud_layer_2"
}
}
}
| Field | Required | Description |
|---|---|---|
selected |
Yes | Default texture set id. Must exist in textures_by_value. |
zero_layer |
Yes | Base/fallback texture. Used by surface.zero_layer_source: profile and as preview fallback. |
textures_by_value |
Yes | Texture sets mapped by set id. |
Inside textures_by_value, each texture set maps layer values to block texture ids.
Layer values must match layers[].value.
Texture ids should not include .png.
For example, this texture id:
my_pack:block/imprints/mud/sets/standard_mud_layer_1
points to this file:
assets/my_pack/textures/block/imprints/mud/sets/standard_mud_layer_1.png
decay controls whether imprints from this profile disappear over time.
A profile without a decay section does not decay.
Decay also requires the global decay switch in the mod settings to be enabled(config part - not related to profiles).
Example:
"decay": {
"enabled": true,
"grace_seconds": 30,
"ramp_seconds": 30,
"chance": 0.04,
"depth_bias": 0.5
}| Field | Required | Default | Description |
|---|---|---|---|
enabled |
Yes | false |
Enables decay for this profile. |
grace_seconds |
No | 30 |
Time before imprints start decaying. |
ramp_seconds |
No | 30 |
Time over which decay reaches full speed after the grace period. |
chance |
No | 0.04 |
Base chance for an edge cell to step one layer shallower. |
depth_bias |
No | 0.5 |
How much deeper layers resist decay. |
priority decides which profile wins when multiple profiles support the same block.
Higher priority wins.
Default: 100
Example: "priority": 150
If two profiles have the same priority, Soft Imprints uses a stable fallback order based on the profile source key.
Use priority when you want a profile to override another profile for the same block.
For example, a resource pack profile with priority 150 will win over a default profile with priority 100.
preview defines optional assets used by the config UI.
If preview is omitted, Soft Imprints uses texture_sets.zero_layer as the preview base and icon.
Example:
"preview": {
"base": "my_pack:block/imprints/mud/mud_base",
"icon": "my_pack:icon/mud/mud_icon",
"landing_sound": "minecraft:block.mud.place"
}| Field | Required | Default | Description |
|---|---|---|---|
base |
No | texture_sets.zero_layer |
Base texture used in the profile preview. It is block texture id. |
icon |
No | texture_sets.zero_layer |
Icon used in profile selectors. It is a GUI sprite id. |
landing_sound |
No | none | Sound event played by profile UI interactions. |
Texture ids should not include .png.
Sound ids should point to existing Minecraft or resource-pack sound events.
Profiles and texture sets can have translated display names.
Add translations to your resource pack language file:
assets/<namespace>/lang/en_us.json
Example:
{
"imprint_profile.my_pack.mud": "Mud",
"imprint_profile.my_pack.mud.standard": "Standard",
"imprint_profile.my_pack.mud.wet": "Wet",
"imprint_pack.my_pack": "My Imprint Pack"
}| Key | Description |
|---|---|
imprint_profile.<namespace>.<profile_id> |
Profile display name. |
imprint_profile.<namespace>.<profile_id>.<texture_set_id> |
Texture set display name. |
imprint_pack.<namespace> |
Profile pack/group display name. |
For the profile id my_pack:mud, the profile translation key is:
imprint_profile.my_pack.mud
For the texture set wet, the texture set translation key is:
imprint_profile.my_pack.mud.wet
If a translation is missing, Minecraft will show the raw translation key.
This example adds imprints for minecraft:mud.
{
"version": 3,
"supported_blocks": [
"minecraft:mud"
],
"surface": {
"mode": "repaint",
"zero_layer_source": "surface"
},
"texture_sets": {
"selected": "standard",
"zero_layer": "minecraft:block/mud",
"textures_by_value": {
"standard": {
"1": "my_pack:block/imprints/mud/sets/standard_mud_layer_1",
"2": "my_pack:block/imprints/mud/sets/standard_mud_layer_2"
},
"wet": {
"1": "my_pack:block/imprints/mud/sets/wet_mud_layer_1",
"2": "my_pack:block/imprints/mud/sets/wet_mud_layer_2"
}
}
},
"preview": {
"base": "my_pack:block/imprints/mud/mud_base",
"icon": "my_pack:icon/mud/mud_icon"
"landing_sound": "minecraft:block.mud.place"
},
"decay": {
"enabled": true,
"grace_seconds": 30,
"ramp_seconds": 30,
"chance": 0.04,
"depth_bias": 0.5
},
"layers": [
{
"value": 1,
"enable": true,
"expand": 0,
"inner_jitter": 0.0,
"outer_jitter": 0.05,
"erosion": 0.25
},
{
"value": 2,
"enable": true,
"expand": 2,
"inner_jitter": 0.0,
"outer_jitter": 0.4,
"erosion": 0.1
}
]
}This profile expects texture files such as:
assets/my_pack/textures/block/imprints/mud/standard_layer_1.png
assets/my_pack/textures/block/imprints/mud/wet_layer_1.png
assets/my_pack/textures/block/imprints/mud/preview_base.png
assets/my_pack/textures/icon/mud.png
Recommended structure for a my_pack:mud profile:
assets/
└── my_pack/
├── imprint_profiles/
│ └── mud.json
├── lang/
│ └── en_us.json
└── textures/
├── block/
│ └── imprints/
│ └── mud/
│ ├── mud_base.png
│ └── sets/
│ ├── standard_mud_layer_1.png
│ ├── standard_mud_layer_2.png
│ ├── wet_mud_layer_1.png
│ └── wet_mud_layer_2.png
└── gui/
└── sprites/
└── icon/
└── mud/
└── mud_icon.png