diff --git a/.env.example b/.env.example index 6ed8b47..cb6ad2e 100644 --- a/.env.example +++ b/.env.example @@ -24,7 +24,9 @@ MC_SEED= # Server-side mods (Modrinth project slugs, comma-separated). # Auto-resolved to the newest compatible release on every container start. -MODRINTH_PROJECTS=fabric-api,easyauth,spark,lithium,ferrite-core +# Append ":beta" to allow beta-typed builds for a project (EasyAuth ships +# its 26.x builds as beta on Modrinth). +MODRINTH_PROJECTS=fabric-api,easyauth:beta,spark,lithium,ferrite-core # To run a full modpack instead, set its Modrinth slug (e.g. adrenaline) # and see docs/mods-and-modpacks.md before enabling. MODRINTH_MODPACK= diff --git a/dashboard/src/app/(panel)/mods/page.tsx b/dashboard/src/app/(panel)/mods/page.tsx index 63eda78..1a3b60d 100644 --- a/dashboard/src/app/(panel)/mods/page.tsx +++ b/dashboard/src/app/(panel)/mods/page.tsx @@ -31,6 +31,10 @@ type SearchHit = { const PROTECTED = new Set(["fabric-api", "easyauth"]); +// Managed entries may carry a version qualifier ("easyauth:beta") — compare +// by the base slug. +const baseSlug = (entry: string) => entry.split(":")[0].toLowerCase(); + export default function ModsPage() { const { data, refresh } = useApi("/api/mods", 0); const [query, setQuery] = useState(""); @@ -82,7 +86,7 @@ export default function ModsPage() { } }; - const managedSet = new Set((data?.managed ?? []).map((s) => s.toLowerCase())); + const managedSet = new Set((data?.managed ?? []).map(baseSlug)); return (
@@ -121,7 +125,7 @@ export default function ModsPage() { )} {hits?.length === 0 &&

No compatible mods found.

} {hits?.map((h) => { - const already = managedSet.has(h.slug.toLowerCase()); + const already = managedSet.has(baseSlug(h.slug)); return (
{h.icon_url ? ( @@ -166,13 +170,13 @@ export default function ModsPage() { {(data?.managed ?? []).map((slug) => (
  • {slug} - {PROTECTED.has(slug.toLowerCase()) && ( + {PROTECTED.has(baseSlug(slug)) && ( required )} - {!PROTECTED.has(slug.toLowerCase()) && ( + {!PROTECTED.has(baseSlug(slug)) && (