ellipog

Thresholds

unreleased

Minecraft 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.json

The 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
}
KeyDefaultWhat it does
micro_threshold0.25The upper bound for a micro entity. Must be above 0 and below macro_threshold
macro_threshold2.5The lower bound for a macro entity
porous_traversaltrueLets micro entities pass through fences, bars and bamboo
surface_climbingtrueLets micro entities climb a wall they are pressed against
amplified_knockbacktrueLets the received-knockback channel follow the scale
tramplingtrueLets macro entities break fragile blocks underfoot
trample_max_per_scan8The most blocks one trample scan may destroy. A whole number of 1 or more
trample_dropstrueWhether trampled blocks drop their items
seismic_footstepstrueLouder, deeper steps and camera shake for macro entities
camera_shake_strength1.0Multiplier on all footstep camera shake, from 0 to 4. Zero turns shake off
camera_shake_self_strength0.35Multiplier on the walker's own footstep shake, from 0 to 4. Zero turns self shake off
doorway_collisiontrueCompression damage for a macro entity whose head is inside a full block
projectile_scaletrueProjectiles fired by a scaled entity inherit its size, hitbox, drawn model, damage and launch speed
item_pickup_rangetrueItems and experience orbs are picked up from the scaled reach
riding_offsettrueA mount's passenger attachment follows the riding offset channel
explosion_scaletrueExplosions with a living cause use the scaled radius
drops_scaletrueLoot-table stack counts use the scaled count
projectile_scale_strength1.0Multiplier on the followed projectile factor. 0 to 4
projectile_scale_min0.25Lower clamp on the projectile factor, including overrides. Above 0
projectile_scale_max4.0Upper clamp on the projectile factor. At least the minimum
projectile_damage_strength1.0Linear damage strength: 1 + (factor - 1) * strength. 0 to 4
projectile_speed_strength0.5Launch-speed exponent: factor ^ strength. 0 to 2
item_pickup_range_strength1.0Multiplier on the followed pickup factor. 0 to 4
item_pickup_range_min0.25Lower clamp on the pickup factor. Above 0
item_pickup_range_max4.0Upper clamp on the pickup factor. At least the minimum
riding_offset_strength1.0Multiplier on the followed seat factor. 0 to 4
riding_offset_min0.0625Lower clamp on the seat factor. The bottom of the scale envelope
riding_offset_max16.0Upper clamp on the seat factor. The top of the scale envelope
explosion_scale_strength1.0Multiplier on the followed explosion factor. 0 to 4
explosion_scale_min0.25Lower clamp on the explosion factor. Above 0
explosion_scale_max3.0Upper clamp on the explosion factor. At least the minimum
drops_scale_strength1.0Multiplier on the followed drops factor. 0 to 4
drops_scale_min1.0Lower clamp on the drops factor. 1.0 means never less than vanilla
drops_scale_max3.0Upper clamp on the drops factor. At least the minimum
presets_enabledtrueWhether /stature preset and /stature preset list work
presets_builtintrueWhether the shipped presets are available
presets_disabled[]Names removed after the built-ins and custom entries are merged
presets_customCustom presets, and replacements for built-ins with the same name
relative_commands_enabledtrueWhether /stature grow and /stature shrink work
self_shortcuts_enabledtrueWhether the target-less self forms are available
self_command_permission_level2Permission 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:

  1. The built-ins, when presets_builtin is true.
  2. Every presets_custom entry. A name that already exists replaces the built-in value.
  3. 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>_strength multiplies the followed value. It does not multiply an explicit per-entity override; an override is already a deliberate choice.
  • <channel>_min and <channel>_max clamp 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_strength and projectile_speed_strength control the two secondary effects of the projectile channel. Setting either to 0 leaves that part vanilla while the size still follows.
  • drops_scale_min defaults 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_panes convention 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_scan blocks break per scan. trample_drops decides whether they drop.
  • Every break asks the loader's permission seam first. A player must pass mayBuild, the level's mayInteract check and the loader's break event, so spawn protection and claim mods can veto a break. A mob must pass the vanilla mob_griefing rule 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.

Support the workko-fi.com/ellipog