Skip to content

Commit

Permalink
fix: fabric mod import & use experience
Browse files Browse the repository at this point in the history
  • Loading branch information
ci010 committed Jul 13, 2020
1 parent 59f0519 commit 166ea65
Show file tree
Hide file tree
Showing 9 changed files with 47 additions and 18 deletions.
6 changes: 3 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
"@xmcl/forge-site-parser": "2.0.5",
"@xmcl/gamesetting": "2.0.1",
"@xmcl/installer": "2.9.2",
"@xmcl/mod-parser": "2.0.7",
"@xmcl/mod-parser": "2.0.8",
"@xmcl/model": "1.0.13",
"@xmcl/nbt": "2.0.3",
"@xmcl/resource-manager": "2.0.2",
Expand Down
17 changes: 14 additions & 3 deletions src/main/service/DiagnoseService.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { exists, missing } from '@main/util/fs';
import { isResourcePackResource } from '@main/util/resource';
import { FabricResource } from '@main/util/resource';
import { Issue, IssueReport } from '@universal/store/modules/diagnose';
import { EMPTY_JAVA } from '@universal/store/modules/java';
import { LocalVersion } from '@universal/store/modules/version';
Expand All @@ -8,6 +8,7 @@ import { MinecraftFolder } from '@xmcl/core';
import { Diagnosis, Installer } from '@xmcl/installer';
import { InstallProfile } from '@xmcl/installer/minecraft';
import { Forge } from '@xmcl/mod-parser';
import { ModMetadata } from '@xmcl/mod-parser/fabric';
import { PackMeta } from '@xmcl/resourcepack';
import { readJSON } from 'fs-extra';
import { ArtifactVersion, VersionRange } from 'maven-artifact-version';
Expand Down Expand Up @@ -271,11 +272,12 @@ export default class DiagnoseService extends Service {
const resolvedMcVersion = ArtifactVersion.of(mcversion);
const pattern = /^\[.+\]$/;

const tree: Pick<IssueReport, 'unknownMod' | 'incompatibleMod' | 'requireForge' | 'requireFabric'> = {
const tree: Pick<IssueReport, 'unknownMod' | 'incompatibleMod' | 'requireForge' | 'requireFabric' | 'requireFabricAPI'> = {
unknownMod: [],
incompatibleMod: [],
requireForge: [],
requireFabric: [],
requireFabricAPI: [],
};
let forgeMods = mods.filter(m => !!m && m.type === 'forge');
for (let mod of forgeMods) {
Expand Down Expand Up @@ -305,11 +307,20 @@ export default class DiagnoseService extends Service {
}
}

let fabricMods = mods.filter(m => m.type === 'fabric');
let fabricMods = mods.filter(m => m.type === 'fabric') as FabricResource[];
if (fabricMods.length > 0) {
if (!version.fabricLoader || !version.yarn) {
tree.requireFabric.push({});
}
for (let mod of fabricMods) {
let fabMetadata = mod.metadata as ModMetadata;
if (fabMetadata.depends) {
let fabApiVer = (fabMetadata.depends as any)['fabric-api-base'];
if (fabApiVer && !fabricMods.some(m => m.metadata.id === 'fabric')) {
tree.requireFabricAPI.push({ version: fabApiVer, name: mod.name });
}
}
}
}

Object.assign(report, tree);
Expand Down
4 changes: 4 additions & 0 deletions src/renderer/assets/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,10 @@
"": "Require fabric to run with Fabric Mod!",
"message": "Please a fabric version in version setting"
},
"requireFabricAPI": {
"": "Require fabric API {version} to run the {name}!",
"message": "Either download fabric API or enable it in Mod Settings"
},
"requireForge": {
"": "Require forge to run with Forge Mod!",
"message": "Please a forge version in version setting"
Expand Down
4 changes: 4 additions & 0 deletions src/renderer/assets/locales/zh-CN.json
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,10 @@
"": "请启用 Fabric 来运行 Fabric 的 Mod",
"message": "请在版本设置页面选择一个合适的 Fabric 版本"
},
"requireFabricAPI": {
"": "请安装 FabricAPI {version} 来运行 {name}",
"message": "请去 Curseforge 下载,如果已经下载了可以去 Mod 设置页面启用 Fabric API"
},
"requireForge": {
"": "请启用 Forge 来运行 Forge 的 Mod",
"message": "请在版本设置页面选择一个合适的 Forge 版本"
Expand Down
2 changes: 1 addition & 1 deletion src/renderer/hooks/useInstanceMod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ export function useInstanceMods() {
modItem.description = resource.metadata.description ?? '';
modItem.acceptVersion = '[*]';
modItem.acceptLoaderVersion = '';
modItem.type = 'liteloader';
modItem.type = 'fabric';
return modItem;
}
modItem.type = 'liteloader';
Expand Down
4 changes: 2 additions & 2 deletions src/renderer/hooks/useResource.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import unknownPack from '@/assets/unknown_pack.png';
import { CurseforgeModpackResource, ForgeResource, LiteloaderResource, ResourcePackResource, SaveResource } from '@universal/util/resource';
import { CurseforgeModpackResource, ForgeResource, LiteloaderResource, ResourcePackResource, SaveResource, FabricResource } from '@universal/util/resource';
import { requireTrue } from '@universal/util/assert';
import { computed, Ref, ref } from '@vue/composition-api';
import { useServiceOnly } from './useService';
Expand All @@ -13,7 +13,7 @@ export function useResourceOperation() {

/* eslint-disable import/export */
export function useResource(domain: 'mods'): {
resources: Ref<Array<ForgeResource | LiteloaderResource>>;
resources: Ref<Array<ForgeResource | LiteloaderResource | FabricResource>>;
} & ReturnType<typeof useResourceOperation>;
export function useResource(domain: 'resourcepacks'): {
resources: Ref<Array<ResourcePackResource>>;
Expand Down
24 changes: 16 additions & 8 deletions src/renderer/windows/main/hooks/useIssues.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Issue, IssueType } from '@universal/store/modules/diagnose';
import { useService, useRouter } from '@/hooks';
import { useService, useRouter, useInstanceMods, useResource } from '@/hooks';
import { useDialog } from '.';
import { useJavaWizardDialog } from './useDialog';

Expand All @@ -8,6 +8,8 @@ export function useIssueHandler() {
const { replace } = useRouter();
const { show: showJavaDialog, javaIssue } = useJavaWizardDialog();
const { show: showModDialog } = useDialog('download-missing-mods');
const { deploy } = useService('InstanceResourceService');
const { resources } = useResource('mods');

const handlerRegistry: Record<string, () => void> = {};

Expand All @@ -29,18 +31,24 @@ export function useIssueHandler() {
});
register('requireForge', () => replace('/version-setting'));
register('requireFabric', () => replace('/version-setting'));
register('requireFabricAPI', () => {
let fabric = resources.value.find((r) => r.type === 'fabric' && r.metadata.id === 'fabric');
if (fabric) {
deploy([fabric]);
} else {
replace('/curseforge/mc-mods/306612');
}
});

function fix(issue: Issue, issues: readonly Issue[]) {
console.log(`Fix issue ${issue.id}`);
if (issue.autofix) {
let handler = handlerRegistry[issue.id];
if (handler) {
handler();
} else if (issue.autofix) {
fixIssue(issues);
} else {
let handler = handlerRegistry[issue.id];
if (handler) {
handler();
} else {
console.error(`Cannot fix the issue ${issue.id} as it's not implemented`);
}
console.error(`Cannot fix the issue ${issue.id} as it's not implemented`);
}
}
return { fix };
Expand Down
2 changes: 2 additions & 0 deletions src/universal/store/modules/diagnose.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ interface State {

requireForge: Registry<{}, false, true>;
requireFabric: Registry<{}, false, true>;
requireFabricAPI: Registry<{ version: string; name: string }, false, true>;

badInstall: Registry<{ minecraft: string; version: string; installProfile: InstallProfile }>;

Expand Down Expand Up @@ -109,6 +110,7 @@ const mod: DiagnoseModule = {

requireFabric: { fixing: false, autofix: false, optional: true, actived: [] },
requireForge: { fixing: false, autofix: false, optional: true, actived: [] },
requireFabricAPI: { fixing: false, autofix: false, optional: true, actived: [] },
},
},
getters: {
Expand Down

0 comments on commit 166ea65

Please sign in to comment.