From 232f2cf462265d9abd6fe9822ce001eabdee5e9d Mon Sep 17 00:00:00 2001 From: geracosta Date: Sun, 23 Aug 2026 14:29:46 -0300 Subject: [PATCH] Add per-minute net worth series Net worth is already read from the entity state on every interval tick but only the final value survives into the blob. Emit it as networth_t next to gold_t, so the API can serve a net worth curve instead of a single number. Replays that don't expose the field leave the array empty, same as camps_stacked_t. --- src/main/java/opendota/CreateParsedDataBlob.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/opendota/CreateParsedDataBlob.java b/src/main/java/opendota/CreateParsedDataBlob.java index 77b38818..98f20681 100644 --- a/src/main/java/opendota/CreateParsedDataBlob.java +++ b/src/main/java/opendota/CreateParsedDataBlob.java @@ -51,6 +51,7 @@ class PlayerData { public List lh_t = new ArrayList<>(); public List dn_t = new ArrayList<>(); public List xp_t = new ArrayList<>(); + public List networth_t = new ArrayList<>(); public List camps_stacked_t = new ArrayList<>(); public List hero_damage_t = new ArrayList<>(); public List hero_healing_t = new ArrayList<>(); @@ -1330,6 +1331,10 @@ private void handleInterval(Entry e, List output, Metadata meta) { addIntervalData(e, output, meta, "xp_t", e.xp); addIntervalData(e, output, meta, "lh_t", e.lh); addIntervalData(e, output, meta, "dn_t", e.denies); + if (e.networth != null) { + // not present in old replays; leave the array empty rather than filling with nulls + addIntervalData(e, output, meta, "networth_t", e.networth); + } if (e.camps_stacked != null) { // not present in old replays; leave the array empty rather than filling with nulls addIntervalData(e, output, meta, "camps_stacked_t", e.camps_stacked); @@ -1606,7 +1611,7 @@ private void handlePosDataTeamfight(Entry e, TeamfightPlayer player) { // Helper methods private boolean isArrayField(String type) { - return Arrays.asList("times", "gold_t", "lh_t", "dn_t", "xp_t", + return Arrays.asList("times", "gold_t", "lh_t", "dn_t", "xp_t", "networth_t", "camps_stacked_t", "hero_damage_t", "hero_healing_t", "obs_log", "sen_log", "obs_left_log", "sen_left_log", "purchase_log", "kills_log", "buyback_log", "runes_log", "connection_log", "neutral_tokens_log", @@ -1646,6 +1651,8 @@ private List getPlayerIntegerList(PlayerData player, String type) { return player.dn_t; case "xp_t": return player.xp_t; + case "networth_t": + return player.networth_t; case "camps_stacked_t": return player.camps_stacked_t; case "hero_damage_t":