diff --git a/packages/host/src/Host.ts b/packages/host/src/Host.ts index f6f058b2..32c6ae4a 100644 --- a/packages/host/src/Host.ts +++ b/packages/host/src/Host.ts @@ -618,11 +618,14 @@ export default class Host extends lib.Link { } async fetchMods(mods: Iterable) { + // This is better than the previous hard coded names + // But it really shouldn't be a hard coded version either + const builtinModNames = lib.ModPack.getBuiltinMods("2.0").map(builtinMod => builtinMod.name); const modInfos: Promise[] = []; for (const mod of mods) { // XXX These mods ship with Factorio, but the list of mods may // change and should not be hardcoded here. - if (["core", "base"].includes(mod.name)) { + if (builtinModNames.includes(mod.name)) { continue; } modInfos.push(this.fetchMod(mod)); diff --git a/packages/host/src/export.ts b/packages/host/src/export.ts index f5f83528..c2f64099 100644 --- a/packages/host/src/export.ts +++ b/packages/host/src/export.ts @@ -103,7 +103,8 @@ async function loadFile(server: FactorioServer, modVersions: Map let [, mod, filePath] = match; - if (["core", "base"].includes(mod)) { + const builtinMods = lib.ModPack.getBuiltinMods(server.version!); + if (builtinMods.some(builtinMod => builtinMod.name === mod)) { try { return await fs.readFile(server.dataPath(mod, filePath)); } catch (err: any) { @@ -396,11 +397,15 @@ async function exportLocale( } } - let baseLocaleFilePath = server.dataPath("base", "locale", languageCode, "base.cfg"); - mergeLocale(lib.parse(await fs.readFile(baseLocaleFilePath, "utf8"))); + const builtinMods = lib.ModPack.getBuiltinMods(server.version!); + for (const builtinMod of builtinMods) { + const localeFilePath = server.dataPath(builtinMod.name, "locale", languageCode, `${builtinMod.name}.cfg`); + mergeLocale(lib.parse(await fs.readFile(localeFilePath, "utf8"))); + } + const builtinModNames = ["export", ...builtinMods.map(builtinMod => builtinMod.name)]; for (let mod of modOrder) { - if (["core", "base", "export"].includes(mod)) { + if (builtinModNames.includes(mod)) { continue; } diff --git a/packages/lib/src/data/ModPack.ts b/packages/lib/src/data/ModPack.ts index d8fa5b3a..4ad3e00e 100644 --- a/packages/lib/src/data/ModPack.ts +++ b/packages/lib/src/data/ModPack.ts @@ -173,8 +173,11 @@ export default class ModPack { if (json.updated_at_ms) { modPack.updatedAtMs = json.updated_at_ms; } if (json.is_deleted) { modPack.isDeleted = json.is_deleted; } - if (!modPack.mods.has("base")) { - modPack.mods.set("base", { name: "base", enabled: true, version: modPack.factorioVersion }); + const builtinMods = ModPack.getBuiltinMods(modPack.factorioVersion); + for (const builtinMod of builtinMods) { + if (!modPack.mods.has(builtinMod.name)) { + modPack.mods.set(builtinMod.name, builtinMod); + } } return modPack; @@ -379,4 +382,27 @@ export default class ModPack { this.settings[settingType].set(prototype.name, { value }); } } + + /** + * Returns an array of ModInfo containing all mods included in factorio + * + * @param factorioVersion - Factorio version to get the default mods for + * @return Built in mods for the given version + */ + static getBuiltinMods(factorioVersion: string) { + let defaultMods: ModRecord[] = [ + { name: "base", enabled: true, version: factorioVersion }, + ]; + + const integerVersion = integerFactorioVersion(factorioVersion); + if (integerVersion > integerFactorioVersion("1.2")) { + defaultMods = defaultMods.concat([ + { name: "elevated-rails", enabled: false, version: factorioVersion }, + { name: "quality", enabled: false, version: factorioVersion }, + { name: "space-age", enabled: false, version: factorioVersion }, + ]); + } + + return defaultMods; + } } diff --git a/packages/web_ui/src/components/ModPackViewPage.tsx b/packages/web_ui/src/components/ModPackViewPage.tsx index 7175ffd5..21108611 100644 --- a/packages/web_ui/src/components/ModPackViewPage.tsx +++ b/packages/web_ui/src/components/ModPackViewPage.tsx @@ -894,7 +894,9 @@ export default function ModPackViewPage() { changes={changes} onChange={pushChange} onRevert={revertChange} - builtInMods={["base", "core"]} + builtInMods={ + lib.ModPack.getBuiltinMods(modPack.factorioVersion).map(builtinMod => builtinMod.name) + } />