env.json is a Minecraft Library introducing a new sub json file extension format, with the goal of redirecting minecraft resources to other ones based on the environment context.
env.json doesn't provide these redirections directly, but only the operations around env.json files and their resource reload management.
There is currently two official implementations of env.json:
Mod Identifier: env-driven-assets.
Environments: Client
Applies env.json operations to Minecraft Vanilla asset types.
Mod Identifier: env-driven-data.
Environments: Common & Server
Applies env.json operations to Minecraft Vanilla data types.
[
{
"rules": [ // the primary set of rules, is an "any" type
{
"type": "sequence", // all rules in the sequence must pass
"rule": [] // the rules
},
{
"type": "any", // passes if at least one rule passes
"rule": [] // the rules
},
{
"type": "not", // reverses the rule
"rule": { // the rule
"type": "...",
"rule": "..."
}
},
{
"type": "dimension", // passes if the current dimension matches this one
"rule": "minecraft:overworld" // the dimension, can also be a tag
},
{
"type": "biome", // passes if the current biome matches this one
"rule": "minecraft:plains" // the biome, can also be a tag
},
{
"type": "x_coord", // passes if the following operations on the x-axis are valid
"rule": {
"comparator": "==", // must be <, >, ==, <=, >=, =< or =>
"value": "100" // must be an integer
}
},
{
"type": "y_coord", // passes if the following operations on the y-axis are valid
"rule": {
"comparator": "==", // must be <, >, ==, <=, >=, =< or =>
"value": "100" // must be an integer
}
},
{
"type": "z_coord", // passes if the following operations on the z-axis are valid
"rule": {
"comparator": "==", // must be <, >, ==, <=, >=, =< or =>
"value": "100" // must be an integer
}
},
{
"type": "submerged", // passes if the current context is surrounded by water or not
"rule": true // true for "if it is submerged" and false for "if it is not submerged"
},
{
"type": "sky", // passes if the context is above the sky limit, at or below
"rule": "at" // must be "above", "at" or "below"
},
{
"type": "water", // passes if the context is above the water level, at or below
"rule": "at" // must be "above", "at" or "below"
},
{
"type": "void", // passes if the context is above the void limit, at or below
"rule": "at" // must be "above", "at" or "below"
}
],
"result": "minecraft:block/stone" // the redirected resource
}
]
The file must be registered under this format: redirected_resource_name-redirected_resource_extension.env.json
.
In your build.gradle
repositories {
// ...
maven { url 'https://jitpack.io' }
}
// ...
dependencies {
// ...
modImplementation "com.mmodding:env.json:${theMostBeautifulVersionYouCanFind}"
}
You can now get your EnvJson
object from a Resource
object thanks to ExtendedResource#of(Resource)#getEnvJson
or parse it with EnvJson#parse(Path)
or EnvJson#parse(InputStream)
.
[<img src="https://github.com/MModding/env.json/blob/main/external/promo/badge.png?raw=true" width="256" alt="Requires env.json">](https://modrinth.com/mod/env.json)