Page 18 · Native Runtime

Native Runtime Exposure

DAI 3.0 now exposes far more of Minecraft's physical/runtime layer directly to JSON. The guiding rule is simple: registry-static shells restart when Minecraft requires it; lifecycle behavior remains hot-reloadable whenever possible.

Native registry targets

itemReal Item IDs plus Mojang Data Components and lifecycle events.
blockReal Block IDs with physical properties, states, shapes, redstone and callbacks.
entityReal EntityType IDs with native hitboxes, AI/runtime, gameplay events and rider seats.
effectReal MobEffect IDs with category/color/tick cadence.
potionReal Potion IDs composed from authored effects.
particleReal SimpleParticleType IDs with resource-pack textures and client physics.

Native block shell

The block object is registry-static. Shapes use six 0–16 coordinates: [minX,minY,minZ,maxX,maxY,maxZ].

{
  "registry_backed": true,
  "native_registry": "block",
  "block": {
    "hardness": 2.0,
    "explosion_resistance": 10.0,
    "sound": "metal",
    "luminance": 15,
    "friction": 0.6,
    "speed_factor": 1.15,
    "jump_factor": 1.0,
    "no_occlusion": false,
    "no_collision": false,
    "emissive_rendering": true,
    "states": ["powered", "horizontal_facing", "boolean:active", "int:charge:0:3"],
    "collision_shape": [0,0,0,16,8,16],
    "redstone_signal": 0,
    "redstone_state": "powered",
    "climbable": false,
    "scheduled_tick_delay": 0
  },
  "events": {
    "place": "action:demo:placed", "break": "action:demo:broken",
    "use": "action:demo:used", "attack": "action:demo:attacked",
    "neighbor_changed": "action:demo:neighbor", "redstone_changed": "action:demo:redstone",
    "entity_inside": "action:demo:inside", "step": "action:demo:step",
    "random_tick": "action:demo:random", "scheduled_tick": "action:demo:scheduled"
  }
}

Item lifecycle

DAI content events now receive server lifecycle hooks for use, use_on_block, interact_entity, attack_entity, use_start, use_tick, use_release, use_finish, inventory_tick, equip, unequip, drop and pickup. Static item data should still prefer the open components map.

Entity lifecycle + riding

Under entity.gameplay.events, native entities can dispatch spawn, tick, hurt, damage_dealt, death, kill, attacked, interact, jump, fall, target_acquired, target_lost, passenger_added, passenger_removed, mounted, dismounted, mount and dismount. gameplay.faction, dialogue and loot are live runtime metadata. Rider seats are strings under entity.riding.seats, e.g. "0 0.8 -0.2".

Projectile runtime

stats.projectile_speed and stats.gravity now drive physics. The projectile specialization adds drag, lifetime, hit radius, damage, knockback, pierce, ricochet, homing, return and collision policy.

"stats": { "projectile_speed": 3.0, "gravity": 0.03 },
"projectile": {
  "drag": 0.01, "lifetime": 120, "hit_radius": 0.35,
  "damage": 6, "knockback": 0.25, "pierce": 1, "ricochets": 2,
  "homing_radius": 12, "homing_strength": 0.08,
  "return_to_owner": true, "return_after_ticks": 24,
  "hit_owner": false, "hit_allies": false,
  "collide_blocks": true, "collide_entities": true
}

Projectile events: spawn, tick, hit_block, ricochet, hit_entity, pierce, return, expire.

Vehicles

dai_vehicles now reads real client movement/look input on the server. Match carrier to the ridden entity type and configure numbers: acceleration, reverse_acceleration, max_speed, reverse_speed, drag, braking, turn_rate, strafe_factor, jump_velocity and boost_multiplier. Flags include camera_steering, allow_reverse, allow_jump, gravity and lock_driver_pitch. Events include tick and boost.

Standalone portal + interaction volumes

data/<namespace>/dai_portals/*.json no longer needs a mob host. Volume definitions use target or numeric x/y/z, properties.shape (box or sphere), width/height/depth/radius, dimension and required/forbidden tags. Portals add destination, destination_target/to, affects, cooldown and preserve flags. dai_interactives use the same volume vocabulary and dispatch enter/tick/exit/use/attack.

Particles, effects and potions

Registry-backed particles own a real particle type ID; the resource pack supplies the texture. Particle settings cover emitter shape/count/spread/speed/radius and render lifetime/gravity/friction/scale/color/alpha/full-bright/collision. Registry-backed effects create native MobEffect IDs with category/color/tick interval and apply/start/tick/remove/end events. Potions compose effect strings in the form "namespace:effect duration amplifier".

Fluid behavior

dai_fluids remains carrier-based for the block/fluid identity but now adds live entity physics: drag, vertical_drag, buoyancy, damage/damage_interval, extinguish, temporary no_gravity, and enter/tick/exit events.

Restart boundary: adding/removing native registry IDs or changing registry-static shells (block states/properties, effect/potion/particle identity, entity type dimensions, item static components) requires a restart. Events and most runtime behavior are designed to reload without rebuilding Minecraft's frozen registries.