Skip to content

Commit 7562d52

Browse files
committed
Fix old snapshot and year.drop versioning detection for NeoForge
Signed-off-by: kPherox <[email protected]>
1 parent efcc0d8 commit 7562d52

File tree

1 file changed

+31
-8
lines changed

1 file changed

+31
-8
lines changed

apps/daedalus_client/src/forge.rs

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -143,22 +143,45 @@ pub async fn fetch_neo(
143143
game_version: "1.20.1".to_string(), // All NeoForge Forge versions are for 1.20.1
144144
})
145145
}).chain(neo_versions.versioning.versions.version.into_iter().map(|loader_version| {
146-
let mut parts = loader_version.split('.');
146+
let mut parts = loader_version.split('+');
147+
let version = parts.next().ok_or_else(
148+
|| crate::ErrorKind::InvalidInput(format!("Unable to find game version for NeoForge {loader_version}"))
149+
)?;
150+
151+
let mut version_parts = version.split('.');
147152

148-
// NeoForge Forge versions are in this format: 20.2.29-beta, 20.6.119
153+
// NeoForge Forge versions are in this format: 20.2.29-beta, 20.6.119, 0.25w14craftmine.3-beta, 26.1.0.0-alpha.1+snapshot-1
149154
// Where the first number is the major MC version, the second is the minor MC version, and the third is the NeoForge version
150-
let major = parts.next().ok_or_else(
155+
let major = version_parts.next().ok_or_else(
151156
|| crate::ErrorKind::InvalidInput(format!("Unable to find major game version for NeoForge {loader_version}"))
152157
)?;
153158

154-
let minor = parts.next().ok_or_else(
159+
let minor = version_parts.next().ok_or_else(
155160
|| crate::ErrorKind::InvalidInput(format!("Unable to find minor game version for NeoForge {loader_version}"))
156161
)?;
157162

158-
let game_version = if minor == "0" {
159-
format!("1.{major}")
160-
} else {
161-
format!("1.{major}.{minor}")
163+
let game_version = match major {
164+
"0" => minor.to_string(),
165+
"20"|"21" => if minor == "0" {
166+
format!("1.{major}")
167+
} else {
168+
format!("1.{major}.{minor}")
169+
},
170+
_ => {
171+
let patch = version_parts.next().ok_or_else(
172+
|| crate::ErrorKind::InvalidInput(format!("Unable to find patch game version for NeoForge {loader_version}"))
173+
)?;
174+
let v = if patch == "0" {
175+
format!("{major}.{minor}")
176+
} else {
177+
format!("{major}.{minor}.{patch}")
178+
};
179+
if let Some(suffix) = parts.next() {
180+
format!("{v}-{suffix}")
181+
} else {
182+
v
183+
}
184+
},
162185
};
163186

164187
Ok(ForgeVersion {

0 commit comments

Comments
 (0)