Thresholds
unreleasedMinecraft 26.3Fabric + NeoForge
A thresholdThresholdOne of the two scale edges that decide when the micro and macro mechanics run. A frame may move either edge for its entities.See also Micro, Macro is one of the two scale edges that decide when the tier mechanics run. A microMicroAn entity whose uniform scale is below its micro threshold. Micro entities climb walls and pass through bars, fences and bamboo when those flags are on.See also Threshold, Macro entity is below the micro edge; a macroMacroAn entity whose uniform scale is above its macro threshold. Macro entities trample fragile blocks, compress under low ceilings and make seismic footsteps when those flags are on.See also Threshold, Micro entity is above the macro edge. The server owns the edges and the mechanic flags, and sends the resolved answer to clients so movement prediction agrees on both sides.
The config file#
config/stature.jsonThe server creates the file with its defaults on first start. It is re-read by
/stature reload, not by vanilla /reload, because it is not datapack data.
{
"micro_threshold": 0.25,
"macro_threshold": 2.5,
"porous_traversal": true,
"surface_climbing": true,
"amplified_knockback": true,
"trampling": true,
"trample_max_per_scan": 8,
"trample_drops": true,
"seismic_footsteps": true,
"camera_shake_strength": 1.0,
"camera_shake_self_strength": 0.35,
"doorway_collision": true,
"projectile_scale": true,
"projectile_scale_strength": 1.0,
"projectile_scale_min": 0.25,
"projectile_scale_max": 4.0,
"projectile_damage_strength": 1.0,
"projectile_speed_strength": 0.5,
"item_pickup_range": true,
"item_pickup_range_strength": 1.0,
"item_pickup_range_min": 0.25,
"item_pickup_range_max": 4.0,
"riding_offset": true,
"riding_offset_strength": 1.0,
"riding_offset_min": 0.0625,
"riding_offset_max": 16.0,
"explosion_scale": true,
"explosion_scale_strength": 1.0,
"explosion_scale_min": 0.25,
"explosion_scale_max": 3.0,
"drops_scale": true,
"drops_scale_strength": 1.0,
"drops_scale_min": 1.0,
"drops_scale_max": 3.0,
"presets_enabled": true,
"presets_builtin": true,
"presets_disabled": [],
"presets_custom": {},
"relative_commands_enabled": true,
"self_shortcuts_enabled": true,
"self_command_permission_level": 2
}| Key | Default | What it does |
|---|---|---|
micro_threshold | 0.25 | The upper bound for a micro entity. Must be above 0 and below macro_threshold |
macro_threshold | 2.5 | The lower bound for a macro entity |
porous_traversal | true | Lets micro entities pass through fences, bars and bamboo |
surface_climbing | true | Lets micro entities climb a wall they are pressed against |
amplified_knockback | true | Lets the received-knockback channel follow the scale |
trampling | true | Lets macro entities break fragile blocks underfoot |
trample_max_per_scan | 8 | The most blocks one trample scan may destroy. A whole number of 1 or more |
trample_drops | true | Whether trampled blocks drop their items |
seismic_footsteps | true | Louder, deeper steps and camera shake for macro entities |
camera_shake_strength | 1.0 | Multiplier on all footstep camera shake, from 0 to 4. Zero turns shake off |
camera_shake_self_strength | 0.35 | Multiplier on the walker's own footstep shake, from 0 to 4. Zero turns self shake off |
doorway_collision | true | Compression damage for a macro entity whose head is inside a full block |
projectile_scale | true | Projectiles fired by a scaled entity inherit its size, hitbox, drawn model, damage and launch speed |
item_pickup_range | true | Items and experience orbs are picked up from the scaled reach |
riding_offset | true | A mount's passenger attachment follows the riding offset channel |
explosion_scale | true | Explosions with a living cause use the scaled radius |
drops_scale | true | Loot-table stack counts use the scaled count |
projectile_scale_strength | 1.0 | Multiplier on the followed projectile factor. 0 to 4 |
projectile_scale_min | 0.25 | Lower clamp on the projectile factor, including overrides. Above 0 |
projectile_scale_max | 4.0 | Upper clamp on the projectile factor. At least the minimum |
projectile_damage_strength | 1.0 | Linear damage strength: 1 + (factor - 1) * strength. 0 to 4 |
projectile_speed_strength | 0.5 | Launch-speed exponent: factor ^ strength. 0 to 2 |
item_pickup_range_strength | 1.0 | Multiplier on the followed pickup factor. 0 to 4 |
item_pickup_range_min | 0.25 | Lower clamp on the pickup factor. Above 0 |
item_pickup_range_max | 4.0 | Upper clamp on the pickup factor. At least the minimum |
riding_offset_strength | 1.0 | Multiplier on the followed seat factor. 0 to 4 |
riding_offset_min | 0.0625 | Lower clamp on the seat factor. The bottom of the scale envelope |
riding_offset_max | 16.0 | Upper clamp on the seat factor. The top of the scale envelope |
explosion_scale_strength | 1.0 | Multiplier on the followed explosion factor. 0 to 4 |
explosion_scale_min | 0.25 | Lower clamp on the explosion factor. Above 0 |
explosion_scale_max | 3.0 | Upper clamp on the explosion factor. At least the minimum |
drops_scale_strength | 1.0 | Multiplier on the followed drops factor. 0 to 4 |
drops_scale_min | 1.0 | Lower clamp on the drops factor. 1.0 means never less than vanilla |
drops_scale_max | 3.0 | Upper clamp on the drops factor. At least the minimum |
presets_enabled | true | Whether /stature preset and /stature preset list work |
presets_builtin | true | Whether the shipped presets are available |
presets_disabled | [] | Names removed after the built-ins and custom entries are merged |
presets_custom | Custom presets, and replacements for built-ins with the same name | |
relative_commands_enabled | true | Whether /stature grow and /stature shrink work |
self_shortcuts_enabled | true | Whether the target-less self forms are available |
self_command_permission_level | 2 | Permission level for the self-only forms, from 0 to 4 |
The five physical extras share one tuning familyChannel tuningThe server config family for a Stature-applied channel: an on/off flag, a strength multiplier and min/max clamps. Per-entity overrides and frames sit on top of it.See also Channel, Scale frame: an on/off flag, a strength multiplier and min/max clamps. The strength applies only to the followed value, while the clamps apply to an explicit override too, because they are a hitbox and explosion safety bound.
Presets and relative commands#
Presets are named sizes and shapes for /stature preset. The built-ins are tiny (0.25x), small
(0.5x), normal (1x), big (2x), giant (4x), titan (8x), and the shape presets tall
(0.75 x 1.5 x 0.75), slim (0.6 x 1.0 x 0.6) and wide (1.75 x 0.75 x 1.75). A size preset
changes only the uniform scale and keeps the current shape. A shape preset changes only the box
multipliers and keeps the current scale.
Custom entries live under presets_custom, keyed by the name the command takes. A bare number is
the short form of a size preset; an object may carry scale, shape or both:
"presets_custom": {
"kaiju": 6.0,
"lanky": {"shape": [0.7, 1.4, 0.7]},
"boss": {"scale": 3.0, "shape": [1.2, 1.1, 1.2]}
}scale and each shape multiplier must be between 0.0625 and 16. A name is one word of 1 to 32
letters, digits, dots, plus signs, hyphens or underscores. The three shape numbers are width,
height and depth multipliers, in the same order as /stature size. An entry with an out-of-range
number, a shape that is not exactly three numbers, or neither a size nor a shape is logged and
skipped; it never stops the server and never removes the other entries. Unknown fields inside an
entry are logged and ignored.
The merged list is built in this order:
- The built-ins, when
presets_builtinis true. - Every
presets_customentry. A name that already exists replaces the built-in value. presets_disabled, which removes names from the result. It wins over both the built-ins and a custom entry with the same name.
presets_enabled false switches the whole feature off. With it off, the command refuses with a
message naming the key, rather than disappearing without explanation. With presets_builtin false,
custom presets still work.
relative_commands_enabled false removes /stature grow and /stature shrink.
self_shortcuts_enabled false turns off the target-less set --self, preset --self, reset and
target-less grow/shrink forms; the target forms stay. The self forms ask for
self_command_permission_level, default 2. That level can be lowered without lowering the level-2
gate on every command that changes another entity. The level applies only to the self forms,
including get with no target and preset list, not to get <target>, reload, frame list or
the other target forms.
All of these keys are read by /stature reload, so a preset edit and a switch change need that
command. Vanilla /reload does not re-read the config file.
comment is accepted and ignored so an older default file does not log an unknown key. Any other
unknown key is logged and skipped. A malformed file is reported and the previous values are kept.
The two edges must satisfy 0 < micro < macro; a frame can move either edge for its entities.
An entity is micro when its uniform scale is strictly below its micro edge, and macro when it is strictly above its macro edge. The box's shape does not decide the tier, only the uniform scale does.
The M10 channel options#
The five feature flags above are also the per-entity switches: a frame may set one in its
thresholds object, or a resolved threshold packet can carry it. When a flag is false, the
matching channel returns exactly 1.0 and the game behaves as vanilla, even if an override is
stored. The override is kept for when the feature is switched back on.
Each feature has a numeric family in the same file:
<channel>_strengthmultiplies the followed value. It does not multiply an explicit per-entity override; an override is already a deliberate choice.<channel>_minand<channel>_maxclamp the final factor, including an override, because these factors can change hitboxes, explosion radii and drop counts. A minimum above its maximum keeps the previous pair.projectile_damage_strengthandprojectile_speed_strengthcontrol the two secondary effects of the projectile channel. Setting either to 0 leaves that part vanilla while the size still follows.drops_scale_mindefaults to 1.0 so a small entity never gets less loot than vanilla. Its channel exponent is 0.5, so the default count growth is a square root and the default maximum is 3x.
All of these values are in the same server config packet as the edges and flags. A joining client
gets them on login, /stature reload resends them, and the debug screen's config packet count is
unchanged. They are not per-frame numeric overrides; a frame sets an override through its
channels object instead.
Frame overrides#
A frame can override the edges and any flag for the entities it sizes:
"thresholds": {
"micro": 0.2,
"macro": 3.0,
"trampling": false
}A value the frame gives wins over the config file for that entity; a value it omits falls back to the file. The server resolves the whole answer and sends it to the clients tracking the entity, so a client never needs the frame registry to gate movement. A known flag with a non-boolean value fails the frame file; an unknown flag name is logged and skipped.
The mechanics#
All of these are off for an ordinary entity: the check is a flag lookup and a tier comparison, and nothing else runs.
Porous traversal#
A micro entity passes through fences, bars and bamboo as if their collision were empty. Glass panes stay solid on purpose: a window is a wall even to something small. Pathfinding reads the same shapes, so a micro mob routes through a fence instead of around it.
Surface climbing#
A micro entity that is pressed against a wall can climb it like a ladder. The check runs on both sides, so the client predicts the same climb the server allows.
Amplified knockback#
knockback_received follows the scale by default, at scale ^ -0.5, so a giant shrugs off a
shove and a small entity flies further. Turning the flag off makes the received factor exactly 1.0
unless it is overridden; it does not affect knockback_dealt, which still follows at
scale ^ 0.5.
Trampling#
A macro entity breaks fragile blocks underfoot:
- Leaves, crops and glass panes. Panes are matched through the
c:glass_panesconvention tag plus the two vanilla pane blocks, so modded panes count too. - The scan runs every fourth tick, staggered by entity id, and reads only the lower third of the box plus the block just below its feet. Leaves at head height are not something a foot touched.
- At most
trample_max_per_scanblocks break per scan.trample_dropsdecides whether they drop. - Every break asks the loader's permission seam first. A player must pass
mayBuild, the level'smayInteractcheck and the loader's break event, so spawn protection and claim mods can veto a break. A mob must pass the vanillamob_griefingrule and, on NeoForge, its own grief hooks.
Seismic footsteps#
A macro entity's steps are louder and deeper. The step volume is base * scale, capped at 4.0,
and the pitch is base / sqrt(scale). A footstep packet goes to players within
clamp(16 * volume, 16, 64) blocks, which follows vanilla's own 16-blocks-per-volume rule.
The camera shake reaches at most 48 blocks and falls off with distance squared. Its proximity
multiplier is min(scale / 2.5, 2.0), so 8x and 16x steps are equally strong. Nearby players
accumulate at most 0.6 trauma from a giant's steps; the walker's own camera accumulates at most
0.15. Before the config multipliers, the walker's step uses its own gentler curve,
0.18 * min(scale / 4, 1), which reaches its limit at the 4x giant preset and does not grow
further. The renderer turns trauma into at most 3 degrees of roll and 2 degrees of pitch, so the
capped amplitudes are 1.8 and 1.2 degrees for a nearby player and 0.45 and 0.3 degrees for the
giant itself. The two sources report their maximum rather than their sum, so a walker's own steps
never add on top of a nearby giant's.
camera_shake_strength multiplies both strengths and both caps, and
camera_shake_self_strength multiplies only the walker's own steps. Either can be set to 0, and
seismic_footsteps still switches the whole feature off. The shake is also multiplied by the
vanilla Screen Effect slider, so a player who has turned screen effects off feels nothing.
The vanilla walk bob is not amplified by scale: its amount is min(0.1, horizontal movement per tick), which is already at the 0.1 cap at normal walking speed. A giant's faster movement makes
the bob repeat more often, but its amplitude and the bobView toggle behave as they do at 1x.
Doorway compression#
Once per second, a macro entity whose eye is inside a full collision block takes 2.0 damage of
type stature:compression. The check skips crouching and swimming, because those poses already
shrank the box, and skips entities already inside a wall, so suffocation is not charged twice.
Compression bypasses armour and its death message says the entity was crushed by their own size.
Reloading and syncing#
/stature reload re-reads the config file, frames and rigs, then refreshes every entity's
resolved thresholds and resends the config to connected players. Vanilla /reload rebuilds the
frame and rig registries and refreshes the per-entity thresholds, but leaves the config file
alone. A joining player is sent the config values on login, and a framed entity's resolved values
are sent when the player starts tracking it and whenever the answer changes.