Merge pull request #8193 from horizon-rust/fix/native-mods-recursion-limit

🤖 Agent: queued (urgent: every native mod build fails on Nightly f42ef42, #8169). verify green, and a real native build of smp + voicechat-server passes the mixins step at this head. The only code change besides the attribute is control_mobs_at's json! split in two, same output.
This commit is contained in:
Ludovic Marie authored and GitHub committed 2026-11-03 15:16:07 +01:00
commit 294448014f
2 files changed
+23 -21

No files matched your search

+21 -20
View File
@@ -760,27 +760,28 @@ impl Game<'_> {
"sitting": m.extra.sitting,
"temper": m.extra.variant3,
"chested": m.extra.chested,
"head": m.extra.head.as_deref(),
"body": m.extra.body.as_deref(),
"warden": horizon_client::mobs::warden::describe(m),
"villager": horizon_client::mobs::villager::ext(m).map(|e| serde_json::json!({
"food_level": e.food_level,
"inventory": e.inventory.iter().map(|s| format!("{}x{}", s.count, s.item)).collect::<Vec<_>>(),
"gossips": e.gossips.len(),
"last_slept": e.last_slept,
"raid": e.raid,
})),
"raider": horizon_client::mobs::raider::state(m).map(|s| serde_json::json!({
"raid": s.raid_id,
"wave": s.wave,
"leader": s.patrol_leader,
"patrolling": s.patrolling,
"patrol_target": s.patrol_target,
"vehicle": m.extra.mount,
})),
});
// Drawn seated (Entity.isPassenger); set apart because the
// json! above is at the macro recursion limit.
// Set apart: one json! with every key goes past the default macro recursion
// limit, and horizon-client can't raise it (#8169).
state["head"] = m.extra.head.as_deref().into();
state["body"] = m.extra.body.as_deref().into();
state["warden"] = serde_json::json!(horizon_client::mobs::warden::describe(m));
state["villager"] = serde_json::json!(horizon_client::mobs::villager::ext(m).map(|e| serde_json::json!({
"food_level": e.food_level,
"inventory": e.inventory.iter().map(|s| format!("{}x{}", s.count, s.item)).collect::<Vec<_>>(),
"gossips": e.gossips.len(),
"last_slept": e.last_slept,
"raid": e.raid,
})));
state["raider"] = serde_json::json!(horizon_client::mobs::raider::state(m).map(|s| serde_json::json!({
"raid": s.raid_id,
"wave": s.wave,
"leader": s.patrol_leader,
"patrolling": s.patrolling,
"patrol_target": s.patrol_target,
"vehicle": m.extra.mount,
})));
// Drawn seated (Entity.isPassenger).
state["passenger"] = m.extra.passenger.into();
state["guardian_beam"] = serde_json::json!(horizon_client::mobs::guardian::beam(m, 0.0));
state
+2 -1
View File
@@ -1,5 +1,6 @@
//! Gameplay and startup, above the reusable client library.
#![recursion_limit = "256"]
// No `#![recursion_limit]` or other inner attribute horizon-mixins doesn't know here: the
// launcher's horizon-mixins then rejects every native mod targeting this crate (#8169).
#![forbid(unsafe_code)]
extern crate self as horizon_client;
pub use horizon_client_lib::*;