feat: extended description and required versions (#119)

This commit is contained in:
/home/neo
2026-07-07 17:10:20 +03:00
committed by GitHub
parent b8c448dab8
commit f46453f1cd
2 changed files with 59 additions and 27 deletions
+34 -2
View File
@@ -25,6 +25,7 @@ import {
type CustomEdition, type CustomEdition,
} from "../../services/TauriService"; } from "../../services/TauriService";
import { PluginManager } from "../../plugins/PluginManager"; import { PluginManager } from "../../plugins/PluginManager";
import { BASE_EDITIONS } from "../../hooks/useGameManager";
const REGISTRY_URL = const REGISTRY_URL =
"https://raw.githubusercontent.com/LCE-Hub/LCE-Workshop/refs/heads/main/registry.json"; "https://raw.githubusercontent.com/LCE-Hub/LCE-Workshop/refs/heads/main/registry.json";
const VERSIONS_URL = const VERSIONS_URL =
@@ -75,6 +76,7 @@ interface RegistryPackage {
permissions?: string[]; permissions?: string[];
files?: string[]; files?: string[];
dependencies?: string[]; dependencies?: string[];
required_versions?: string[];
} }
interface ServerListing { interface ServerListing {
@@ -1095,6 +1097,8 @@ const WorkshopView = memo(function WorkshopView({
<PackageModal <PackageModal
pkg={selectedPkg} pkg={selectedPkg}
allPackages={allPackages} allPackages={allPackages}
versionPackages={versionPackages}
customEditions={config.customEditions || []}
installedPkgs={installedPkgs} installedPkgs={installedPkgs}
onClose={closeModal} onClose={closeModal}
playPressSound={playPressSound} playPressSound={playPressSound}
@@ -1237,6 +1241,8 @@ function PackageCard({
function PackageModal({ function PackageModal({
pkg, pkg,
allPackages, allPackages,
versionPackages,
customEditions,
installedPkgs, installedPkgs,
onClose, onClose,
playPressSound, playPressSound,
@@ -1252,6 +1258,8 @@ function PackageModal({
}: { }: {
pkg: RegistryPackage; pkg: RegistryPackage;
allPackages: RegistryPackage[]; allPackages: RegistryPackage[];
versionPackages: RegistryPackage[];
customEditions: CustomEdition[];
installedPkgs: InstalledWorkshopPackage[]; installedPkgs: InstalledWorkshopPackage[];
onClose: () => void; onClose: () => void;
playPressSound: () => void; playPressSound: () => void;
@@ -1668,12 +1676,13 @@ function PackageModal({
))} ))}
</div> </div>
</div> </div>
</div>
{pkg.dependencies && pkg.dependencies.length > 0 && ( {pkg.dependencies && pkg.dependencies.length > 0 && (
<div className="flex flex-col gap-1.5 mt-4 pt-4 border-t border-[#333]"> <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"> <span className="text-[10px] text-[#FFAA33] mc-text-shadow uppercase tracking-[0.2em] font-bold">
Required Dependencies Required Dependencies
</span> </span>
<div className="flex flex-wrap gap-1.5"> <div className="flex flex-wrap gap-1.5 mt-1">
{pkg.dependencies.map((depId) => { {pkg.dependencies.map((depId) => {
const dep = allPackages.find((p) => p.id === depId); const dep = allPackages.find((p) => p.id === depId);
const isDepInstalled = installedPkgs.some((p) => p.packageId === depId); const isDepInstalled = installedPkgs.some((p) => p.packageId === depId);
@@ -1694,7 +1703,30 @@ function PackageModal({
</div> </div>
</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>
</div>
)}
{pkg.zips && Object.keys(pkg.zips).length > 0 && ( {pkg.zips && Object.keys(pkg.zips).length > 0 && (
<div className="flex flex-col gap-3 pt-4 border-t border-[#333]"> <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"> <span className="text-[10px] text-[#666] mc-text-shadow uppercase tracking-[0.2em] font-bold">
+1 -1
View File
@@ -25,7 +25,7 @@ async function imageUrlToBase64(url: string): Promise<string> {
reader.readAsDataURL(blob); reader.readAsDataURL(blob);
}); });
} }
const BASE_EDITIONS = [ export const BASE_EDITIONS = [
{ {
id: "legacy_evolved", id: "legacy_evolved",
name: "neoLegacy", name: "neoLegacy",