-
Notifications
You must be signed in to change notification settings - Fork 47
Dimension Physics Data
Sable allows datapacks to specify custom physics parameters for dimensions. These are loaded from /data/<namespace>/dimension_physics/<name>.json.
dimension (required): The resource location of the dimension this config applies to.
priority (optional, default 1000): When multiple configs target the same dimension, the one with the highest priority wins. Sable's built-in defaults use priority 0, so any datapack config overrides them automatically.
base_gravity (optional, default [0.0, -11.0, 0.0]): Gravitational acceleration as a 3D vector in m/sec². The default pulls straight down at 11 m/s².
base_pressure (optional, default 1.0): The pressure multiplier applied everywhere in the dimension. Set to 0 for a vacuum. If pressure_function is also defined, the two combine.
pressure_function (optional): A list of bezier control points for controlling air pressure with altitude. Each point has altitude (y-level), value (pressure at that altitude), and slope (rate of change). Omit this field for uniform pressure at base_pressure.
universal_drag (optional, default 0.09): A flat drag coefficient applied to all motion in the dimension.
magnetic_north (optional, default [0.0, 0.0, 0.0]): Direction vector pointing toward magnetic north. [0, 0, 0] means no magnetic field.
A moon dimension with lower gravity, no drag, and no air pressure:
// /data/examplemod/dimension_physics/moon.json
{
"dimension": "examplemod:moon",
// Default priority of 1000
// Higher priority configs "win"
"priority": 1000,
// Modify the gravity to be low
"base_gravity": [0.0, -4.0, 0.0],
// No air pressure
"base_pressure": 0.0,
// No universal drag
"universal_drag": 0.0,
// No magnetic north
"magnetic_north": [0.0, 0.0, 0.0]
}Sable generates these configs for vanilla dimensions. They're shown here, with approximate values, for reference.
The pressure_function is a curve approximating an exponential decay, centered around sea level, clamped to at most 1.5 underground, with a 40-meter smooth drop-off at the build limit.
Overworld:
{
"dimension": "minecraft:overworld",
"priority": 0,
"universal_drag": 0.09,
"base_gravity": [0.0, -11.0, 0.0],
"base_pressure": 1.0,
"pressure_function": [
{ "altitude": -38.366277, "value": 1.5, "slope": -0.006 },
{ "altitude": 63.0, "value": 1.0, "slope": -0.004 },
{ "altitude": 263.0, "value": 0.449329, "slope": -0.001797 },
{ "altitude": 280.0, "value": 0.419786, "slope": -0.001679 },
{ "altitude": 320.0, "value": 0.0, "slope": -0.020989 }
],
"magnetic_north": [0.0, 0.0, 0.0]
}Nether:
{
"dimension": "minecraft:the_nether",
"priority": 0,
"universal_drag": 0.09,
"base_gravity": [0.0, -11.0, 0.0],
"base_pressure": 1.0,
"pressure_function": [
{ "altitude": 0.0, "value": 1.136553, "slope": -0.004546 },
{ "altitude": 32.0, "value": 1.0, "slope": -0.004 },
{ "altitude": 88.0, "value": 0.799315, "slope": -0.003197 },
{ "altitude": 128.0, "value": 0.0, "slope": -0.039966 }
],
"magnetic_north": [0.0, 0.0, 0.0]
}End:
{
"dimension": "minecraft:the_end",
"priority": 0,
"universal_drag": 0.09,
"base_gravity": [0.0, -11.0, 0.0],
"base_pressure": 1.0,
"pressure_function": [
{ "altitude": 0.0, "value": 1.0, "slope": -0.004 },
{ "altitude": 200.0, "value": 0.449329, "slope": -0.001797 },
{ "altitude": 216.0, "value": 0.421473, "slope": -0.001686 },
{ "altitude": 256.0, "value": 0.0, "slope": -0.021074 }
],
"magnetic_north": [0.0, 0.0, 0.0]
}