Neoforge support (#653)

This commit is contained in:
Geometrically
2023-08-21 17:39:39 -04:00
committed by GitHub
parent 7bea362503
commit 2d3baff031
14 changed files with 111 additions and 40 deletions

6
Cargo.lock generated
View File

@@ -4609,7 +4609,7 @@ dependencies = [
[[package]]
name = "theseus"
version = "0.5.2"
version = "0.5.3"
dependencies = [
"async-recursion",
"async-tungstenite",
@@ -4655,7 +4655,7 @@ dependencies = [
[[package]]
name = "theseus_cli"
version = "0.5.2"
version = "0.5.3"
dependencies = [
"argh",
"color-eyre",
@@ -4682,7 +4682,7 @@ dependencies = [
[[package]]
name = "theseus_gui"
version = "0.5.2"
version = "0.5.3"
dependencies = [
"chrono",
"cocoa",

View File

@@ -33,3 +33,11 @@ pub async fn get_quilt_versions() -> crate::Result<Manifest> {
Ok(tags)
}
#[tracing::instrument]
pub async fn get_neoforge_versions() -> crate::Result<Manifest> {
let state = State::get().await?;
let tags = state.metadata.read().await.neoforge.clone();
Ok(tags)
}

View File

@@ -69,6 +69,7 @@ pub enum EnvType {
#[serde(rename_all = "kebab-case")]
pub enum PackDependency {
Forge,
NeoForge,
FabricLoader,
QuiltLoader,
Minecraft,
@@ -323,6 +324,10 @@ pub async fn set_profile_information(
mod_loader = Some(ModLoader::Forge);
loader_version = Some(value);
}
PackDependency::NeoForge => {
mod_loader = Some(ModLoader::NeoForge);
loader_version = Some(value);
}
PackDependency::FabricLoader => {
mod_loader = Some(ModLoader::Fabric);
loader_version = Some(value);

View File

@@ -180,6 +180,7 @@ pub(crate) async fn get_loader_version_from_loader(
ModLoader::Forge => &metadata.forge,
ModLoader::Fabric => &metadata.fabric,
ModLoader::Quilt => &metadata.quilt,
ModLoader::NeoForge => &metadata.neoforge,
_ => {
return Err(
ProfileCreationError::NoManifest(loader.to_string()).into()

View File

@@ -1049,7 +1049,7 @@ fn sanitize_loader_version_string(s: &str, loader: PackDependency) -> &str {
// If two or more, take the second
// If one, take the first
// If none, take the whole thing
PackDependency::Forge => {
PackDependency::Forge | PackDependency::NeoForge => {
let mut split: std::str::Split<'_, char> = s.split('-');
match split.next() {
Some(first) => match split.next() {

View File

@@ -18,6 +18,7 @@ pub struct Metadata {
pub forge: LoaderManifest,
pub fabric: LoaderManifest,
pub quilt: LoaderManifest,
pub neoforge: LoaderManifest,
}
impl Metadata {
@@ -26,7 +27,7 @@ impl Metadata {
}
pub async fn fetch() -> crate::Result<Self> {
let (minecraft, forge, fabric, quilt) = tokio::try_join! {
let (minecraft, forge, fabric, quilt, neoforge) = tokio::try_join! {
async {
let url = Self::get_manifest("minecraft");
fetch_version_manifest(Some(&url)).await
@@ -42,6 +43,10 @@ impl Metadata {
async {
let url = Self::get_manifest("quilt");
fetch_loader_manifest(&url).await
},
async {
let url = Self::get_manifest("neo");
fetch_loader_manifest(&url).await
}
}?;
@@ -50,6 +55,7 @@ impl Metadata {
forge,
fabric,
quilt,
neoforge,
})
}

View File

@@ -205,6 +205,7 @@ pub enum ModLoader {
Forge,
Fabric,
Quilt,
NeoForge,
}
impl std::fmt::Display for ModLoader {
@@ -214,6 +215,7 @@ impl std::fmt::Display for ModLoader {
Self::Forge => "Forge",
Self::Fabric => "Fabric",
Self::Quilt => "Quilt",
Self::NeoForge => "NeoForge",
})
}
}
@@ -225,6 +227,7 @@ impl ModLoader {
Self::Forge => "forge",
Self::Fabric => "fabric",
Self::Quilt => "quilt",
Self::NeoForge => "neoforge",
}
}
}

View File

@@ -364,6 +364,8 @@ fn modloader_from_str(it: &str) -> core::result::Result<ModLoader, String> {
"vanilla" => Ok(ModLoader::Vanilla),
"forge" => Ok(ModLoader::Forge),
"fabric" => Ok(ModLoader::Fabric),
"quilt" => Ok(ModLoader::Quilt),
"neoforge" => Ok(ModLoader::NeoForge),
_ => Err(String::from("Invalid modloader: {it}")),
}
}

View File

@@ -9,6 +9,7 @@ pub fn init<R: tauri::Runtime>() -> tauri::plugin::TauriPlugin<R> {
metadata_get_fabric_versions,
metadata_get_forge_versions,
metadata_get_quilt_versions,
metadata_get_neoforge_versions,
])
.build()
}
@@ -36,3 +37,9 @@ pub async fn metadata_get_forge_versions() -> Result<Manifest> {
pub async fn metadata_get_quilt_versions() -> Result<Manifest> {
Ok(theseus::metadata::get_quilt_versions().await?)
}
/// Gets the quilt versions from daedalus
#[tauri::command]
pub async fn metadata_get_neoforge_versions() -> Result<Manifest> {
Ok(theseus::metadata::get_neoforge_versions().await?)
}

View File

@@ -216,6 +216,7 @@ import {
get_fabric_versions,
get_forge_versions,
get_quilt_versions,
get_neoforge_versions,
} from '@/helpers/metadata'
import { handleError } from '@/store/notifications.js'
import Multiselect from 'vue-multiselect'
@@ -293,21 +294,28 @@ onUnmounted(() => {
}
})
const [fabric_versions, forge_versions, quilt_versions, all_game_versions, loaders] =
await Promise.all([
get_fabric_versions().then(shallowRef).catch(handleError),
get_forge_versions().then(shallowRef).catch(handleError),
get_quilt_versions().then(shallowRef).catch(handleError),
get_game_versions().then(shallowRef).catch(handleError),
get_loaders()
.then((value) =>
value
.filter((item) => item.supported_project_types.includes('modpack'))
.map((item) => item.name.toLowerCase())
)
.then(ref)
.catch(handleError),
])
const [
fabric_versions,
forge_versions,
quilt_versions,
neoforge_versions,
all_game_versions,
loaders,
] = await Promise.all([
get_fabric_versions().then(shallowRef).catch(handleError),
get_forge_versions().then(shallowRef).catch(handleError),
get_quilt_versions().then(shallowRef).catch(handleError),
get_neoforge_versions().then(shallowRef).catch(handleError),
get_game_versions().then(shallowRef).catch(handleError),
get_loaders()
.then((value) =>
value
.filter((item) => item.supported_project_types.includes('modpack'))
.map((item) => item.name.toLowerCase())
)
.then(ref)
.catch(handleError),
])
loaders.value.unshift('vanilla')
const game_versions = computed(() => {
@@ -320,6 +328,8 @@ const game_versions = computed(() => {
defaultVal &= forge_versions.value.gameVersions.some((x) => item.id === x.id)
} else if (loader.value === 'quilt') {
defaultVal &= quilt_versions.value.gameVersions.some((x) => item.id === x.id)
} else if (loader.value === 'neoforge') {
defaultVal &= neoforge_versions.value.gameVersions.some((x) => item.id === x.id)
}
return defaultVal
@@ -394,6 +404,10 @@ const selectable_versions = computed(() => {
.loaders.map((item) => item.id)
} else if (loader.value === 'quilt') {
return quilt_versions.value.gameVersions[0].loaders.map((item) => item.id)
} else if (loader.value === 'neoforge') {
return neoforge_versions.value.gameVersions
.find((item) => item.id === game_version.value)
.loaders.map((item) => item.id)
}
}
return []

View File

@@ -29,3 +29,11 @@ export async function get_quilt_versions() {
console.log('Getting quilt versions', c)
return c
}
// Gets the neoforge versions from daedalus
// Returns Manifest
export async function get_neoforge_versions() {
const c = await invoke('plugin:metadata|metadata_get_neoforge_versions')
console.log('Getting neoforge versions', c)
return c
}

View File

@@ -179,7 +179,7 @@ async function refreshSearch() {
formattedFacets.push(orFacets.value)
} else if (projectType.value === 'mod') {
formattedFacets.push(
['forge', 'fabric', 'quilt'].map((x) => `categories:'${encodeURIComponent(x)}'`)
['forge', 'fabric', 'quilt', 'neoforge'].map((x) => `categories:'${encodeURIComponent(x)}'`)
)
} else if (projectType.value === 'datapack') {
formattedFacets.push(['datapack'].map((x) => `categories:'${encodeURIComponent(x)}'`))
@@ -601,7 +601,7 @@ onUnmounted(() => unlistenOffline())
v-for="loader in loaders.filter(
(l) =>
(projectType !== 'mod' && l.supported_project_types?.includes(projectType)) ||
(projectType === 'mod' && ['fabric', 'forge', 'quilt'].includes(l.name))
(projectType === 'mod' && ['fabric', 'forge', 'quilt', 'neoforge'].includes(l.name))
)"
:key="loader"
>

View File

@@ -61,7 +61,7 @@
<div class="pages-list">
<RouterLink :to="`/instance/${encodeURIComponent($route.params.id)}/`" class="btn">
<BoxIcon />
Mods
Content
</RouterLink>
<RouterLink :to="`/instance/${encodeURIComponent($route.params.id)}/logs`" class="btn">
<FileIcon />

View File

@@ -405,7 +405,12 @@ import { get } from '@/helpers/settings.js'
import JavaSelector from '@/components/ui/JavaSelector.vue'
import { convertFileSrc } from '@tauri-apps/api/tauri'
import { open } from '@tauri-apps/api/dialog'
import { get_fabric_versions, get_forge_versions, get_quilt_versions } from '@/helpers/metadata.js'
import {
get_fabric_versions,
get_forge_versions,
get_neoforge_versions,
get_quilt_versions,
} from '@/helpers/metadata.js'
import { get_game_versions, get_loaders } from '@/helpers/tags.js'
import { handleError } from '@/store/notifications.js'
import { mixpanel_track } from '@/helpers/mixpanel'
@@ -618,21 +623,28 @@ async function removeProfile() {
const changeVersionsModal = ref(null)
const showSnapshots = ref(false)
const [fabric_versions, forge_versions, quilt_versions, all_game_versions, loaders] =
await Promise.all([
get_fabric_versions().then(shallowRef).catch(handleError),
get_forge_versions().then(shallowRef).catch(handleError),
get_quilt_versions().then(shallowRef).catch(handleError),
get_game_versions().then(shallowRef).catch(handleError),
get_loaders()
.then((value) =>
value
.filter((item) => item.supported_project_types.includes('modpack'))
.map((item) => item.name.toLowerCase())
)
.then(ref)
.catch(handleError),
])
const [
fabric_versions,
forge_versions,
quilt_versions,
neoforge_versions,
all_game_versions,
loaders,
] = await Promise.all([
get_fabric_versions().then(shallowRef).catch(handleError),
get_forge_versions().then(shallowRef).catch(handleError),
get_quilt_versions().then(shallowRef).catch(handleError),
get_neoforge_versions().then(shallowRef).catch(handleError),
get_game_versions().then(shallowRef).catch(handleError),
get_loaders()
.then((value) =>
value
.filter((item) => item.supported_project_types.includes('modpack'))
.map((item) => item.name.toLowerCase())
)
.then(ref)
.catch(handleError),
])
loaders.value.unshift('vanilla')
const loader = ref(props.instance.metadata.loader)
@@ -647,6 +659,8 @@ const selectableGameVersions = computed(() => {
defaultVal &= forge_versions.value.gameVersions.some((x) => item.version === x.id)
} else if (loader.value === 'quilt') {
defaultVal &= quilt_versions.value.gameVersions.some((x) => item.version === x.id)
} else if (loader.value === 'neoforge') {
defaultVal &= neoforge_versions.value.gameVersions.some((x) => item.version === x.id)
}
return defaultVal
@@ -662,6 +676,9 @@ const selectableLoaderVersions = computed(() => {
return forge_versions.value.gameVersions.find((item) => item.id === gameVersion.value).loaders
} else if (loader.value === 'quilt') {
return quilt_versions.value.gameVersions[0].loaders
} else if (loader.value === 'neoforge') {
return neoforge_versions.value.gameVersions.find((item) => item.id === gameVersion.value)
.loaders
}
}
return []
@@ -683,7 +700,7 @@ const isChanged = computed(() => {
return (
loader.value != props.instance.metadata.loader ||
gameVersion.value != props.instance.metadata.game_version ||
JSON.stringify(selectableLoaderVersions.value[loaderVersionIndex.value]) !=
JSON.stringify(selectableLoaderVersions.value[loaderVersionIndex.value]) !==
JSON.stringify(props.instance.metadata.loader_version)
)
})