You've already forked AstralRinth
forked from didirus/AstralRinth
Neoforge support (#653)
This commit is contained in:
6
Cargo.lock
generated
6
Cargo.lock
generated
@@ -4609,7 +4609,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "theseus"
|
name = "theseus"
|
||||||
version = "0.5.2"
|
version = "0.5.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-recursion",
|
"async-recursion",
|
||||||
"async-tungstenite",
|
"async-tungstenite",
|
||||||
@@ -4655,7 +4655,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "theseus_cli"
|
name = "theseus_cli"
|
||||||
version = "0.5.2"
|
version = "0.5.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"argh",
|
"argh",
|
||||||
"color-eyre",
|
"color-eyre",
|
||||||
@@ -4682,7 +4682,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "theseus_gui"
|
name = "theseus_gui"
|
||||||
version = "0.5.2"
|
version = "0.5.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"cocoa",
|
"cocoa",
|
||||||
|
|||||||
@@ -33,3 +33,11 @@ pub async fn get_quilt_versions() -> crate::Result<Manifest> {
|
|||||||
|
|
||||||
Ok(tags)
|
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)
|
||||||
|
}
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ pub enum EnvType {
|
|||||||
#[serde(rename_all = "kebab-case")]
|
#[serde(rename_all = "kebab-case")]
|
||||||
pub enum PackDependency {
|
pub enum PackDependency {
|
||||||
Forge,
|
Forge,
|
||||||
|
NeoForge,
|
||||||
FabricLoader,
|
FabricLoader,
|
||||||
QuiltLoader,
|
QuiltLoader,
|
||||||
Minecraft,
|
Minecraft,
|
||||||
@@ -323,6 +324,10 @@ pub async fn set_profile_information(
|
|||||||
mod_loader = Some(ModLoader::Forge);
|
mod_loader = Some(ModLoader::Forge);
|
||||||
loader_version = Some(value);
|
loader_version = Some(value);
|
||||||
}
|
}
|
||||||
|
PackDependency::NeoForge => {
|
||||||
|
mod_loader = Some(ModLoader::NeoForge);
|
||||||
|
loader_version = Some(value);
|
||||||
|
}
|
||||||
PackDependency::FabricLoader => {
|
PackDependency::FabricLoader => {
|
||||||
mod_loader = Some(ModLoader::Fabric);
|
mod_loader = Some(ModLoader::Fabric);
|
||||||
loader_version = Some(value);
|
loader_version = Some(value);
|
||||||
|
|||||||
@@ -180,6 +180,7 @@ pub(crate) async fn get_loader_version_from_loader(
|
|||||||
ModLoader::Forge => &metadata.forge,
|
ModLoader::Forge => &metadata.forge,
|
||||||
ModLoader::Fabric => &metadata.fabric,
|
ModLoader::Fabric => &metadata.fabric,
|
||||||
ModLoader::Quilt => &metadata.quilt,
|
ModLoader::Quilt => &metadata.quilt,
|
||||||
|
ModLoader::NeoForge => &metadata.neoforge,
|
||||||
_ => {
|
_ => {
|
||||||
return Err(
|
return Err(
|
||||||
ProfileCreationError::NoManifest(loader.to_string()).into()
|
ProfileCreationError::NoManifest(loader.to_string()).into()
|
||||||
|
|||||||
@@ -1049,7 +1049,7 @@ fn sanitize_loader_version_string(s: &str, loader: PackDependency) -> &str {
|
|||||||
// If two or more, take the second
|
// If two or more, take the second
|
||||||
// If one, take the first
|
// If one, take the first
|
||||||
// If none, take the whole thing
|
// If none, take the whole thing
|
||||||
PackDependency::Forge => {
|
PackDependency::Forge | PackDependency::NeoForge => {
|
||||||
let mut split: std::str::Split<'_, char> = s.split('-');
|
let mut split: std::str::Split<'_, char> = s.split('-');
|
||||||
match split.next() {
|
match split.next() {
|
||||||
Some(first) => match split.next() {
|
Some(first) => match split.next() {
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ pub struct Metadata {
|
|||||||
pub forge: LoaderManifest,
|
pub forge: LoaderManifest,
|
||||||
pub fabric: LoaderManifest,
|
pub fabric: LoaderManifest,
|
||||||
pub quilt: LoaderManifest,
|
pub quilt: LoaderManifest,
|
||||||
|
pub neoforge: LoaderManifest,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Metadata {
|
impl Metadata {
|
||||||
@@ -26,7 +27,7 @@ impl Metadata {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn fetch() -> crate::Result<Self> {
|
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 {
|
async {
|
||||||
let url = Self::get_manifest("minecraft");
|
let url = Self::get_manifest("minecraft");
|
||||||
fetch_version_manifest(Some(&url)).await
|
fetch_version_manifest(Some(&url)).await
|
||||||
@@ -42,6 +43,10 @@ impl Metadata {
|
|||||||
async {
|
async {
|
||||||
let url = Self::get_manifest("quilt");
|
let url = Self::get_manifest("quilt");
|
||||||
fetch_loader_manifest(&url).await
|
fetch_loader_manifest(&url).await
|
||||||
|
},
|
||||||
|
async {
|
||||||
|
let url = Self::get_manifest("neo");
|
||||||
|
fetch_loader_manifest(&url).await
|
||||||
}
|
}
|
||||||
}?;
|
}?;
|
||||||
|
|
||||||
@@ -50,6 +55,7 @@ impl Metadata {
|
|||||||
forge,
|
forge,
|
||||||
fabric,
|
fabric,
|
||||||
quilt,
|
quilt,
|
||||||
|
neoforge,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -205,6 +205,7 @@ pub enum ModLoader {
|
|||||||
Forge,
|
Forge,
|
||||||
Fabric,
|
Fabric,
|
||||||
Quilt,
|
Quilt,
|
||||||
|
NeoForge,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl std::fmt::Display for ModLoader {
|
impl std::fmt::Display for ModLoader {
|
||||||
@@ -214,6 +215,7 @@ impl std::fmt::Display for ModLoader {
|
|||||||
Self::Forge => "Forge",
|
Self::Forge => "Forge",
|
||||||
Self::Fabric => "Fabric",
|
Self::Fabric => "Fabric",
|
||||||
Self::Quilt => "Quilt",
|
Self::Quilt => "Quilt",
|
||||||
|
Self::NeoForge => "NeoForge",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -225,6 +227,7 @@ impl ModLoader {
|
|||||||
Self::Forge => "forge",
|
Self::Forge => "forge",
|
||||||
Self::Fabric => "fabric",
|
Self::Fabric => "fabric",
|
||||||
Self::Quilt => "quilt",
|
Self::Quilt => "quilt",
|
||||||
|
Self::NeoForge => "neoforge",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -364,6 +364,8 @@ fn modloader_from_str(it: &str) -> core::result::Result<ModLoader, String> {
|
|||||||
"vanilla" => Ok(ModLoader::Vanilla),
|
"vanilla" => Ok(ModLoader::Vanilla),
|
||||||
"forge" => Ok(ModLoader::Forge),
|
"forge" => Ok(ModLoader::Forge),
|
||||||
"fabric" => Ok(ModLoader::Fabric),
|
"fabric" => Ok(ModLoader::Fabric),
|
||||||
|
"quilt" => Ok(ModLoader::Quilt),
|
||||||
|
"neoforge" => Ok(ModLoader::NeoForge),
|
||||||
_ => Err(String::from("Invalid modloader: {it}")),
|
_ => Err(String::from("Invalid modloader: {it}")),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ pub fn init<R: tauri::Runtime>() -> tauri::plugin::TauriPlugin<R> {
|
|||||||
metadata_get_fabric_versions,
|
metadata_get_fabric_versions,
|
||||||
metadata_get_forge_versions,
|
metadata_get_forge_versions,
|
||||||
metadata_get_quilt_versions,
|
metadata_get_quilt_versions,
|
||||||
|
metadata_get_neoforge_versions,
|
||||||
])
|
])
|
||||||
.build()
|
.build()
|
||||||
}
|
}
|
||||||
@@ -36,3 +37,9 @@ pub async fn metadata_get_forge_versions() -> Result<Manifest> {
|
|||||||
pub async fn metadata_get_quilt_versions() -> Result<Manifest> {
|
pub async fn metadata_get_quilt_versions() -> Result<Manifest> {
|
||||||
Ok(theseus::metadata::get_quilt_versions().await?)
|
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?)
|
||||||
|
}
|
||||||
|
|||||||
@@ -216,6 +216,7 @@ import {
|
|||||||
get_fabric_versions,
|
get_fabric_versions,
|
||||||
get_forge_versions,
|
get_forge_versions,
|
||||||
get_quilt_versions,
|
get_quilt_versions,
|
||||||
|
get_neoforge_versions,
|
||||||
} from '@/helpers/metadata'
|
} from '@/helpers/metadata'
|
||||||
import { handleError } from '@/store/notifications.js'
|
import { handleError } from '@/store/notifications.js'
|
||||||
import Multiselect from 'vue-multiselect'
|
import Multiselect from 'vue-multiselect'
|
||||||
@@ -293,21 +294,28 @@ onUnmounted(() => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const [fabric_versions, forge_versions, quilt_versions, all_game_versions, loaders] =
|
const [
|
||||||
await Promise.all([
|
fabric_versions,
|
||||||
get_fabric_versions().then(shallowRef).catch(handleError),
|
forge_versions,
|
||||||
get_forge_versions().then(shallowRef).catch(handleError),
|
quilt_versions,
|
||||||
get_quilt_versions().then(shallowRef).catch(handleError),
|
neoforge_versions,
|
||||||
get_game_versions().then(shallowRef).catch(handleError),
|
all_game_versions,
|
||||||
get_loaders()
|
loaders,
|
||||||
.then((value) =>
|
] = await Promise.all([
|
||||||
value
|
get_fabric_versions().then(shallowRef).catch(handleError),
|
||||||
.filter((item) => item.supported_project_types.includes('modpack'))
|
get_forge_versions().then(shallowRef).catch(handleError),
|
||||||
.map((item) => item.name.toLowerCase())
|
get_quilt_versions().then(shallowRef).catch(handleError),
|
||||||
)
|
get_neoforge_versions().then(shallowRef).catch(handleError),
|
||||||
.then(ref)
|
get_game_versions().then(shallowRef).catch(handleError),
|
||||||
.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')
|
loaders.value.unshift('vanilla')
|
||||||
|
|
||||||
const game_versions = computed(() => {
|
const game_versions = computed(() => {
|
||||||
@@ -320,6 +328,8 @@ const game_versions = computed(() => {
|
|||||||
defaultVal &= forge_versions.value.gameVersions.some((x) => item.id === x.id)
|
defaultVal &= forge_versions.value.gameVersions.some((x) => item.id === x.id)
|
||||||
} else if (loader.value === 'quilt') {
|
} else if (loader.value === 'quilt') {
|
||||||
defaultVal &= quilt_versions.value.gameVersions.some((x) => item.id === x.id)
|
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
|
return defaultVal
|
||||||
@@ -394,6 +404,10 @@ const selectable_versions = computed(() => {
|
|||||||
.loaders.map((item) => item.id)
|
.loaders.map((item) => item.id)
|
||||||
} else if (loader.value === 'quilt') {
|
} else if (loader.value === 'quilt') {
|
||||||
return quilt_versions.value.gameVersions[0].loaders.map((item) => item.id)
|
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 []
|
return []
|
||||||
|
|||||||
@@ -29,3 +29,11 @@ export async function get_quilt_versions() {
|
|||||||
console.log('Getting quilt versions', c)
|
console.log('Getting quilt versions', c)
|
||||||
return 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
|
||||||
|
}
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ async function refreshSearch() {
|
|||||||
formattedFacets.push(orFacets.value)
|
formattedFacets.push(orFacets.value)
|
||||||
} else if (projectType.value === 'mod') {
|
} else if (projectType.value === 'mod') {
|
||||||
formattedFacets.push(
|
formattedFacets.push(
|
||||||
['forge', 'fabric', 'quilt'].map((x) => `categories:'${encodeURIComponent(x)}'`)
|
['forge', 'fabric', 'quilt', 'neoforge'].map((x) => `categories:'${encodeURIComponent(x)}'`)
|
||||||
)
|
)
|
||||||
} else if (projectType.value === 'datapack') {
|
} else if (projectType.value === 'datapack') {
|
||||||
formattedFacets.push(['datapack'].map((x) => `categories:'${encodeURIComponent(x)}'`))
|
formattedFacets.push(['datapack'].map((x) => `categories:'${encodeURIComponent(x)}'`))
|
||||||
@@ -601,7 +601,7 @@ onUnmounted(() => unlistenOffline())
|
|||||||
v-for="loader in loaders.filter(
|
v-for="loader in loaders.filter(
|
||||||
(l) =>
|
(l) =>
|
||||||
(projectType !== 'mod' && l.supported_project_types?.includes(projectType)) ||
|
(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"
|
:key="loader"
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -61,7 +61,7 @@
|
|||||||
<div class="pages-list">
|
<div class="pages-list">
|
||||||
<RouterLink :to="`/instance/${encodeURIComponent($route.params.id)}/`" class="btn">
|
<RouterLink :to="`/instance/${encodeURIComponent($route.params.id)}/`" class="btn">
|
||||||
<BoxIcon />
|
<BoxIcon />
|
||||||
Mods
|
Content
|
||||||
</RouterLink>
|
</RouterLink>
|
||||||
<RouterLink :to="`/instance/${encodeURIComponent($route.params.id)}/logs`" class="btn">
|
<RouterLink :to="`/instance/${encodeURIComponent($route.params.id)}/logs`" class="btn">
|
||||||
<FileIcon />
|
<FileIcon />
|
||||||
|
|||||||
@@ -405,7 +405,12 @@ import { get } from '@/helpers/settings.js'
|
|||||||
import JavaSelector from '@/components/ui/JavaSelector.vue'
|
import JavaSelector from '@/components/ui/JavaSelector.vue'
|
||||||
import { convertFileSrc } from '@tauri-apps/api/tauri'
|
import { convertFileSrc } from '@tauri-apps/api/tauri'
|
||||||
import { open } from '@tauri-apps/api/dialog'
|
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 { get_game_versions, get_loaders } from '@/helpers/tags.js'
|
||||||
import { handleError } from '@/store/notifications.js'
|
import { handleError } from '@/store/notifications.js'
|
||||||
import { mixpanel_track } from '@/helpers/mixpanel'
|
import { mixpanel_track } from '@/helpers/mixpanel'
|
||||||
@@ -618,21 +623,28 @@ async function removeProfile() {
|
|||||||
const changeVersionsModal = ref(null)
|
const changeVersionsModal = ref(null)
|
||||||
const showSnapshots = ref(false)
|
const showSnapshots = ref(false)
|
||||||
|
|
||||||
const [fabric_versions, forge_versions, quilt_versions, all_game_versions, loaders] =
|
const [
|
||||||
await Promise.all([
|
fabric_versions,
|
||||||
get_fabric_versions().then(shallowRef).catch(handleError),
|
forge_versions,
|
||||||
get_forge_versions().then(shallowRef).catch(handleError),
|
quilt_versions,
|
||||||
get_quilt_versions().then(shallowRef).catch(handleError),
|
neoforge_versions,
|
||||||
get_game_versions().then(shallowRef).catch(handleError),
|
all_game_versions,
|
||||||
get_loaders()
|
loaders,
|
||||||
.then((value) =>
|
] = await Promise.all([
|
||||||
value
|
get_fabric_versions().then(shallowRef).catch(handleError),
|
||||||
.filter((item) => item.supported_project_types.includes('modpack'))
|
get_forge_versions().then(shallowRef).catch(handleError),
|
||||||
.map((item) => item.name.toLowerCase())
|
get_quilt_versions().then(shallowRef).catch(handleError),
|
||||||
)
|
get_neoforge_versions().then(shallowRef).catch(handleError),
|
||||||
.then(ref)
|
get_game_versions().then(shallowRef).catch(handleError),
|
||||||
.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')
|
loaders.value.unshift('vanilla')
|
||||||
|
|
||||||
const loader = ref(props.instance.metadata.loader)
|
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)
|
defaultVal &= forge_versions.value.gameVersions.some((x) => item.version === x.id)
|
||||||
} else if (loader.value === 'quilt') {
|
} else if (loader.value === 'quilt') {
|
||||||
defaultVal &= quilt_versions.value.gameVersions.some((x) => item.version === x.id)
|
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
|
return defaultVal
|
||||||
@@ -662,6 +676,9 @@ const selectableLoaderVersions = computed(() => {
|
|||||||
return forge_versions.value.gameVersions.find((item) => item.id === gameVersion.value).loaders
|
return forge_versions.value.gameVersions.find((item) => item.id === gameVersion.value).loaders
|
||||||
} else if (loader.value === 'quilt') {
|
} else if (loader.value === 'quilt') {
|
||||||
return quilt_versions.value.gameVersions[0].loaders
|
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 []
|
return []
|
||||||
@@ -683,7 +700,7 @@ const isChanged = computed(() => {
|
|||||||
return (
|
return (
|
||||||
loader.value != props.instance.metadata.loader ||
|
loader.value != props.instance.metadata.loader ||
|
||||||
gameVersion.value != props.instance.metadata.game_version ||
|
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)
|
JSON.stringify(props.instance.metadata.loader_version)
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user