Skip to main content

hypixel/models/
resources.rs

1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6use super::common::JsonObject;
7
8/// A network game definition, as returned by `resources/games`.
9#[derive(Debug, Clone, Deserialize, Serialize)]
10pub struct Game {
11    #[serde(default)]
12    pub id: i32,
13    #[serde(default)]
14    pub name: String,
15    #[serde(rename = "databaseName", default)]
16    pub database_name: String,
17    #[serde(rename = "modeNames", default)]
18    pub mode_names: HashMap<String, String>,
19    #[serde(default)]
20    pub retired: bool,
21    #[serde(default)]
22    pub legacy: bool,
23}
24
25/// The SkyBlock skills resource from `resources/skyblock/skills`.
26#[derive(Debug, Clone, Deserialize, Serialize)]
27pub struct SkillsResource {
28    #[serde(default)]
29    pub version: String,
30    #[serde(default)]
31    pub skills: HashMap<String, Skill>,
32}
33
34/// A single skill's definition, including its per-level XP table.
35#[derive(Debug, Clone, Deserialize, Serialize)]
36pub struct Skill {
37    #[serde(default)]
38    pub name: String,
39    #[serde(default)]
40    pub description: String,
41    #[serde(rename = "maxLevel", default)]
42    pub max_level: i32,
43    #[serde(default)]
44    pub levels: Vec<SkillLevel>,
45}
46
47/// One tier within a [`Skill`]'s level table.
48#[derive(Debug, Clone, Deserialize, Serialize)]
49pub struct SkillLevel {
50    #[serde(default)]
51    pub level: i32,
52    #[serde(rename = "totalExpRequired", default)]
53    pub total_exp_required: f64,
54    #[serde(default)]
55    pub unlocks: Vec<String>,
56}
57
58/// A SkyBlock item definition from `resources/skyblock/items`.
59#[derive(Debug, Clone, Deserialize, Serialize)]
60pub struct SkyBlockItem {
61    #[serde(default)]
62    pub id: String,
63    #[serde(default)]
64    pub material: Option<String>,
65    #[serde(default)]
66    pub name: Option<String>,
67    #[serde(default)]
68    pub tier: Option<String>,
69    #[serde(default)]
70    pub npc_sell_price: Option<f64>,
71    #[serde(default)]
72    pub category: Option<String>,
73    #[serde(flatten)]
74    pub extra: JsonObject,
75}
76
77/// The SkyBlock collections resource from `resources/skyblock/collections`.
78#[derive(Debug, Clone, Deserialize, Serialize)]
79pub struct CollectionsResource {
80    #[serde(default)]
81    pub version: String,
82    #[serde(default)]
83    pub collections: HashMap<String, Value>,
84}
85
86/// An active resource pack from `resources/packs`.
87#[derive(Debug, Clone, Deserialize, Serialize)]
88pub struct ResourcePack {
89    #[serde(default)]
90    pub id: String,
91    #[serde(rename = "deployId", default)]
92    pub deploy_id: String,
93    #[serde(rename = "lastUpdated", default)]
94    pub last_updated: i64,
95    #[serde(default)]
96    pub versions: Vec<ResourcePackVersion>,
97    #[serde(flatten)]
98    pub extra: JsonObject,
99}
100
101/// One built version of a [`ResourcePack`].
102#[derive(Debug, Clone, Deserialize, Serialize)]
103pub struct ResourcePackVersion {
104    #[serde(rename = "packFormat", default)]
105    pub pack_format: i32,
106    #[serde(default)]
107    pub hash: String,
108    #[serde(default)]
109    pub url: String,
110    #[serde(flatten)]
111    pub extra: JsonObject,
112}
113
114/// The current SkyBlock mayor and election state from `resources/skyblock/election`.
115#[derive(Debug, Clone, Deserialize, Serialize)]
116pub struct ElectionResource {
117    #[serde(default)]
118    pub mayor: Option<Value>,
119    #[serde(default)]
120    pub current: Option<Value>,
121}
122
123#[derive(Debug, Clone, Deserialize)]
124pub(crate) struct GamesResponse {
125    #[serde(default)]
126    pub games: HashMap<String, Game>,
127}
128
129#[derive(Debug, Clone, Deserialize)]
130pub(crate) struct ItemsResponse {
131    #[serde(default)]
132    pub items: Vec<SkyBlockItem>,
133}
134
135#[derive(Debug, Clone, Deserialize)]
136pub(crate) struct PacksResponse {
137    #[serde(default)]
138    pub packs: Vec<ResourcePack>,
139}