mirror of
https://github.com/LCE-Hub/LCE-Emerald-Launcher.git
synced 2026-07-15 23:10:48 +00:00
feat: extended description and required versions (#119)
This commit is contained in:
@@ -25,6 +25,7 @@ import {
|
||||
type CustomEdition,
|
||||
} from "../../services/TauriService";
|
||||
import { PluginManager } from "../../plugins/PluginManager";
|
||||
import { BASE_EDITIONS } from "../../hooks/useGameManager";
|
||||
const REGISTRY_URL =
|
||||
"https://raw.githubusercontent.com/LCE-Hub/LCE-Workshop/refs/heads/main/registry.json";
|
||||
const VERSIONS_URL =
|
||||
@@ -75,6 +76,7 @@ interface RegistryPackage {
|
||||
permissions?: string[];
|
||||
files?: string[];
|
||||
dependencies?: string[];
|
||||
required_versions?: string[];
|
||||
}
|
||||
|
||||
interface ServerListing {
|
||||
@@ -1095,6 +1097,8 @@ const WorkshopView = memo(function WorkshopView({
|
||||
<PackageModal
|
||||
pkg={selectedPkg}
|
||||
allPackages={allPackages}
|
||||
versionPackages={versionPackages}
|
||||
customEditions={config.customEditions || []}
|
||||
installedPkgs={installedPkgs}
|
||||
onClose={closeModal}
|
||||
playPressSound={playPressSound}
|
||||
@@ -1237,6 +1241,8 @@ function PackageCard({
|
||||
function PackageModal({
|
||||
pkg,
|
||||
allPackages,
|
||||
versionPackages,
|
||||
customEditions,
|
||||
installedPkgs,
|
||||
onClose,
|
||||
playPressSound,
|
||||
@@ -1252,6 +1258,8 @@ function PackageModal({
|
||||
}: {
|
||||
pkg: RegistryPackage;
|
||||
allPackages: RegistryPackage[];
|
||||
versionPackages: RegistryPackage[];
|
||||
customEditions: CustomEdition[];
|
||||
installedPkgs: InstalledWorkshopPackage[];
|
||||
onClose: () => void;
|
||||
playPressSound: () => void;
|
||||
@@ -1668,33 +1676,57 @@ function PackageModal({
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
{pkg.dependencies && pkg.dependencies.length > 0 && (
|
||||
<div className="flex flex-col gap-1.5 mt-4 pt-4 border-t border-[#333]">
|
||||
<span className="text-[10px] text-[#FFAA33] mc-text-shadow uppercase tracking-[0.2em] font-bold">
|
||||
Required Dependencies
|
||||
</span>
|
||||
<div className="flex flex-wrap gap-1.5">
|
||||
{pkg.dependencies.map((depId) => {
|
||||
const dep = allPackages.find((p) => p.id === depId);
|
||||
const isDepInstalled = installedPkgs.some((p) => p.packageId === depId);
|
||||
return (
|
||||
<span
|
||||
key={depId}
|
||||
className={`text-[10px] border px-2 py-0.5 mc-text-shadow uppercase tracking-widest ${
|
||||
isDepInstalled
|
||||
? "bg-[#003300] border-[#55FF55]/60 text-[#55FF55]"
|
||||
: "bg-black/60 border-[#FF8800]/40 text-[#FFAA33]"
|
||||
}`}
|
||||
>
|
||||
{dep?.name || depId}
|
||||
{isDepInstalled ? " (installed)" : ""}
|
||||
</span>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
{pkg.dependencies && pkg.dependencies.length > 0 && (
|
||||
<div className="flex flex-col gap-1.5 pt-4 border-t border-[#333]">
|
||||
<span className="text-[10px] text-[#FFAA33] mc-text-shadow uppercase tracking-[0.2em] font-bold">
|
||||
Required Dependencies
|
||||
</span>
|
||||
<div className="flex flex-wrap gap-1.5 mt-1">
|
||||
{pkg.dependencies.map((depId) => {
|
||||
const dep = allPackages.find((p) => p.id === depId);
|
||||
const isDepInstalled = installedPkgs.some((p) => p.packageId === depId);
|
||||
return (
|
||||
<span
|
||||
key={depId}
|
||||
className={`text-[10px] border px-2 py-0.5 mc-text-shadow uppercase tracking-widest ${
|
||||
isDepInstalled
|
||||
? "bg-[#003300] border-[#55FF55]/60 text-[#55FF55]"
|
||||
: "bg-black/60 border-[#FF8800]/40 text-[#FFAA33]"
|
||||
}`}
|
||||
>
|
||||
{dep?.name || depId}
|
||||
{isDepInstalled ? " (installed)" : ""}
|
||||
</span>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
{pkg.required_versions && pkg.required_versions.length > 0 && (
|
||||
<div className="flex flex-col gap-1.5 pt-4 border-t border-[#333]">
|
||||
<span className="text-[10px] text-[#55AAFF] mc-text-shadow uppercase tracking-[0.2em] font-bold">
|
||||
Required Editions
|
||||
</span>
|
||||
<div className="flex flex-wrap gap-1.5 mt-1">
|
||||
{pkg.required_versions.map((verId) => {
|
||||
const builtin = BASE_EDITIONS.find((e) => e.id === verId);
|
||||
const versionPkg = versionPackages.find((v) => v.id === verId);
|
||||
const customEd = customEditions.find((e) => e.id === verId);
|
||||
const displayName = builtin?.name || customEd?.name || versionPkg?.name;
|
||||
if (!displayName) return null;
|
||||
return (
|
||||
<span
|
||||
key={verId}
|
||||
className="text-[10px] bg-black/60 border border-[#55AAFF]/40 px-2 py-0.5 text-[#55AAFF] mc-text-shadow uppercase tracking-widest"
|
||||
>
|
||||
{displayName}
|
||||
</span>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
{pkg.zips && Object.keys(pkg.zips).length > 0 && (
|
||||
<div className="flex flex-col gap-3 pt-4 border-t border-[#333]">
|
||||
<span className="text-[10px] text-[#666] mc-text-shadow uppercase tracking-[0.2em] font-bold">
|
||||
|
||||
@@ -25,7 +25,7 @@ async function imageUrlToBase64(url: string): Promise<string> {
|
||||
reader.readAsDataURL(blob);
|
||||
});
|
||||
}
|
||||
const BASE_EDITIONS = [
|
||||
export const BASE_EDITIONS = [
|
||||
{
|
||||
id: "legacy_evolved",
|
||||
name: "neoLegacy",
|
||||
|
||||
Reference in New Issue
Block a user