项目迁移
Some checks failed
CI/CD / Code Check (push) Has been cancelled
CI/CD / Build Windows (push) Has been cancelled

This commit is contained in:
2026-03-14 21:11:59 +08:00
commit 4654f36202
153 changed files with 55923 additions and 0 deletions

View File

@@ -0,0 +1,275 @@
import {
useMediaQuery
} from "./chunk-FX5VEOLN.js";
import {
computed,
ref,
shallowRef,
watch
} from "./chunk-VIGQSUQT.js";
// ../node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/index.js
import "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/styles/fonts.css";
// ../node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/without-fonts.js
import "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/styles/vars.css";
import "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/styles/base.css";
import "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/styles/icons.css";
import "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/styles/utils.css";
import "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/styles/components/custom-block.css";
import "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code.css";
import "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code-group.css";
import "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css";
import "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/styles/components/vp-sponsor.css";
import VPBadge from "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue";
import Layout from "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/Layout.vue";
import { default as default2 } from "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue";
import { default as default3 } from "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/components/VPButton.vue";
import { default as default4 } from "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/components/VPDocAsideSponsors.vue";
import { default as default5 } from "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/components/VPFeatures.vue";
import { default as default6 } from "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/components/VPHomeContent.vue";
import { default as default7 } from "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/components/VPHomeFeatures.vue";
import { default as default8 } from "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/components/VPHomeHero.vue";
import { default as default9 } from "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/components/VPHomeSponsors.vue";
import { default as default10 } from "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/components/VPImage.vue";
import { default as default11 } from "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/components/VPLink.vue";
import { default as default12 } from "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/components/VPNavBarSearch.vue";
import { default as default13 } from "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/components/VPSocialLink.vue";
import { default as default14 } from "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/components/VPSocialLinks.vue";
import { default as default15 } from "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/components/VPSponsors.vue";
import { default as default16 } from "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/components/VPTeamMembers.vue";
import { default as default17 } from "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/components/VPTeamPage.vue";
import { default as default18 } from "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageSection.vue";
import { default as default19 } from "D:/Users/Grace-X/Desktop/DeEarthX-CE/node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageTitle.vue";
// ../node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/composables/local-nav.js
import { onContentUpdated } from "vitepress";
// ../node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/composables/outline.js
import { getScrollOffset } from "vitepress";
// ../node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/support/utils.js
import { withBase } from "vitepress";
// ../node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/composables/data.js
import { useData as useData$ } from "vitepress";
var useData = useData$;
// ../node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/support/utils.js
function ensureStartingSlash(path) {
return path.startsWith("/") ? path : `/${path}`;
}
// ../node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/support/sidebar.js
function getSidebar(_sidebar, path) {
if (Array.isArray(_sidebar))
return addBase(_sidebar);
if (_sidebar == null)
return [];
path = ensureStartingSlash(path);
const dir = Object.keys(_sidebar).sort((a, b) => {
return b.split("/").length - a.split("/").length;
}).find((dir2) => {
return path.startsWith(ensureStartingSlash(dir2));
});
const sidebar = dir ? _sidebar[dir] : [];
return Array.isArray(sidebar) ? addBase(sidebar) : addBase(sidebar.items, sidebar.base);
}
function getSidebarGroups(sidebar) {
const groups = [];
let lastGroupIndex = 0;
for (const index in sidebar) {
const item = sidebar[index];
if (item.items) {
lastGroupIndex = groups.push(item);
continue;
}
if (!groups[lastGroupIndex]) {
groups.push({ items: [] });
}
groups[lastGroupIndex].items.push(item);
}
return groups;
}
function addBase(items, _base) {
return [...items].map((_item) => {
const item = { ..._item };
const base = item.base || _base;
if (base && item.link)
item.link = base + item.link;
if (item.items)
item.items = addBase(item.items, base);
return item;
});
}
// ../node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/composables/sidebar.js
function useSidebar() {
const { frontmatter, page, theme: theme2 } = useData();
const is960 = useMediaQuery("(min-width: 960px)");
const isOpen = ref(false);
const _sidebar = computed(() => {
const sidebarConfig = theme2.value.sidebar;
const relativePath = page.value.relativePath;
return sidebarConfig ? getSidebar(sidebarConfig, relativePath) : [];
});
const sidebar = ref(_sidebar.value);
watch(_sidebar, (next, prev) => {
if (JSON.stringify(next) !== JSON.stringify(prev))
sidebar.value = _sidebar.value;
});
const hasSidebar = computed(() => {
return frontmatter.value.sidebar !== false && sidebar.value.length > 0 && frontmatter.value.layout !== "home";
});
const leftAside = computed(() => {
if (hasAside)
return frontmatter.value.aside == null ? theme2.value.aside === "left" : frontmatter.value.aside === "left";
return false;
});
const hasAside = computed(() => {
if (frontmatter.value.layout === "home")
return false;
if (frontmatter.value.aside != null)
return !!frontmatter.value.aside;
return theme2.value.aside !== false;
});
const isSidebarEnabled = computed(() => hasSidebar.value && is960.value);
const sidebarGroups = computed(() => {
return hasSidebar.value ? getSidebarGroups(sidebar.value) : [];
});
function open() {
isOpen.value = true;
}
function close() {
isOpen.value = false;
}
function toggle() {
isOpen.value ? close() : open();
}
return {
isOpen,
sidebar,
sidebarGroups,
hasSidebar,
hasAside,
leftAside,
isSidebarEnabled,
open,
close,
toggle
};
}
// ../node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/composables/outline.js
var ignoreRE = /\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/;
var resolvedHeaders = [];
function getHeaders(range) {
const headers = [
...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")
].filter((el) => el.id && el.hasChildNodes()).map((el) => {
const level = Number(el.tagName[1]);
return {
element: el,
title: serializeHeader(el),
link: "#" + el.id,
level
};
});
return resolveHeaders(headers, range);
}
function serializeHeader(h) {
let ret = "";
for (const node of h.childNodes) {
if (node.nodeType === 1) {
if (ignoreRE.test(node.className))
continue;
ret += node.textContent;
} else if (node.nodeType === 3) {
ret += node.textContent;
}
}
return ret.trim();
}
function resolveHeaders(headers, range) {
if (range === false) {
return [];
}
const levelsRange = (typeof range === "object" && !Array.isArray(range) ? range.level : range) || 2;
const [high, low] = typeof levelsRange === "number" ? [levelsRange, levelsRange] : levelsRange === "deep" ? [2, 6] : levelsRange;
return buildTree(headers, high, low);
}
function buildTree(data, min, max) {
resolvedHeaders.length = 0;
const result = [];
const stack = [];
data.forEach((item) => {
const node = { ...item, children: [] };
let parent = stack[stack.length - 1];
while (parent && parent.level >= node.level) {
stack.pop();
parent = stack[stack.length - 1];
}
if (node.element.classList.contains("ignore-header") || parent && "shouldIgnore" in parent) {
stack.push({ level: node.level, shouldIgnore: true });
return;
}
if (node.level > max || node.level < min)
return;
resolvedHeaders.push({ element: node.element, link: node.link });
if (parent)
parent.children.push(node);
else
result.push(node);
stack.push(node);
});
return result;
}
// ../node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/composables/local-nav.js
function useLocalNav() {
const { theme: theme2, frontmatter } = useData();
const headers = shallowRef([]);
const hasLocalNav = computed(() => {
return headers.value.length > 0;
});
onContentUpdated(() => {
headers.value = getHeaders(frontmatter.value.outline ?? theme2.value.outline);
});
return {
headers,
hasLocalNav
};
}
// ../node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/without-fonts.js
var theme = {
Layout,
enhanceApp: ({ app }) => {
app.component("Badge", VPBadge);
}
};
var without_fonts_default = theme;
export {
default2 as VPBadge,
default3 as VPButton,
default4 as VPDocAsideSponsors,
default5 as VPFeatures,
default6 as VPHomeContent,
default7 as VPHomeFeatures,
default8 as VPHomeHero,
default9 as VPHomeSponsors,
default10 as VPImage,
default11 as VPLink,
default12 as VPNavBarSearch,
default13 as VPSocialLink,
default14 as VPSocialLinks,
default15 as VPSponsors,
default16 as VPTeamMembers,
default17 as VPTeamPage,
default18 as VPTeamPageSection,
default19 as VPTeamPageTitle,
without_fonts_default as default,
useLocalNav,
useSidebar
};
//# sourceMappingURL=@theme_index.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,40 @@
{
"hash": "6976e0a7",
"configHash": "16b5e256",
"lockfileHash": "b21b0169",
"browserHash": "1a32ef31",
"optimized": {
"vue": {
"src": "../../../../node_modules/.pnpm/vue@3.5.29_typescript@5.9.3/node_modules/vue/dist/vue.runtime.esm-bundler.js",
"file": "vue.js",
"fileHash": "7e923f01",
"needsInterop": false
},
"vitepress > @vue/devtools-api": {
"src": "../../../../node_modules/.pnpm/@vue+devtools-api@7.7.9/node_modules/@vue/devtools-api/dist/index.js",
"file": "vitepress___@vue_devtools-api.js",
"fileHash": "0373f16c",
"needsInterop": false
},
"vitepress > @vueuse/core": {
"src": "../../../../node_modules/.pnpm/@vueuse+core@12.8.2_typescript@5.9.3/node_modules/@vueuse/core/index.mjs",
"file": "vitepress___@vueuse_core.js",
"fileHash": "67853364",
"needsInterop": false
},
"@theme/index": {
"src": "../../../../node_modules/.pnpm/vitepress@1.6.4_@algolia+cl_b21953e64bdc687d6358312771661039/node_modules/vitepress/dist/client/theme-default/index.js",
"file": "@theme_index.js",
"fileHash": "58797fc7",
"needsInterop": false
}
},
"chunks": {
"chunk-FX5VEOLN": {
"file": "chunk-FX5VEOLN.js"
},
"chunk-VIGQSUQT": {
"file": "chunk-VIGQSUQT.js"
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,3 @@
{
"type": "module"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,583 @@
import {
DefaultMagicKeysAliasMap,
StorageSerializers,
TransitionPresets,
assert,
breakpointsAntDesign,
breakpointsBootstrapV5,
breakpointsElement,
breakpointsMasterCss,
breakpointsPrimeFlex,
breakpointsQuasar,
breakpointsSematic,
breakpointsTailwind,
breakpointsVuetify,
breakpointsVuetifyV2,
breakpointsVuetifyV3,
bypassFilter,
camelize,
clamp,
cloneFnJSON,
computedAsync,
computedEager,
computedInject,
computedWithControl,
containsProp,
controlledRef,
createEventHook,
createFetch,
createFilterWrapper,
createGlobalState,
createInjectionState,
createRef,
createReusableTemplate,
createSharedComposable,
createSingletonPromise,
createTemplatePromise,
createUnrefFn,
customStorageEventName,
debounceFilter,
defaultDocument,
defaultLocation,
defaultNavigator,
defaultWindow,
executeTransition,
extendRef,
formatDate,
formatTimeAgo,
get,
getLifeCycleTarget,
getSSRHandler,
hasOwn,
hyphenate,
identity,
increaseWithUnit,
injectLocal,
invoke,
isClient,
isDef,
isDefined,
isIOS,
isObject,
isWorker,
makeDestructurable,
mapGamepadToXbox360Controller,
noop,
normalizeDate,
notNullish,
now,
objectEntries,
objectOmit,
objectPick,
onClickOutside,
onElementRemoval,
onKeyDown,
onKeyPressed,
onKeyStroke,
onKeyUp,
onLongPress,
onStartTyping,
pausableFilter,
promiseTimeout,
provideLocal,
provideSSRWidth,
pxValue,
rand,
reactify,
reactifyObject,
reactiveComputed,
reactiveOmit,
reactivePick,
refAutoReset,
refDebounced,
refDefault,
refThrottled,
refWithControl,
resolveRef,
resolveUnref,
set,
setSSRHandler,
syncRef,
syncRefs,
templateRef,
throttleFilter,
timestamp,
toArray,
toReactive,
toRef,
toRefs,
toValue,
tryOnBeforeMount,
tryOnBeforeUnmount,
tryOnMounted,
tryOnScopeDispose,
tryOnUnmounted,
unrefElement,
until,
useActiveElement,
useAnimate,
useArrayDifference,
useArrayEvery,
useArrayFilter,
useArrayFind,
useArrayFindIndex,
useArrayFindLast,
useArrayIncludes,
useArrayJoin,
useArrayMap,
useArrayReduce,
useArraySome,
useArrayUnique,
useAsyncQueue,
useAsyncState,
useBase64,
useBattery,
useBluetooth,
useBreakpoints,
useBroadcastChannel,
useBrowserLocation,
useCached,
useClipboard,
useClipboardItems,
useCloned,
useColorMode,
useConfirmDialog,
useCountdown,
useCounter,
useCssVar,
useCurrentElement,
useCycleList,
useDark,
useDateFormat,
useDebounceFn,
useDebouncedRefHistory,
useDeviceMotion,
useDeviceOrientation,
useDevicePixelRatio,
useDevicesList,
useDisplayMedia,
useDocumentVisibility,
useDraggable,
useDropZone,
useElementBounding,
useElementByPoint,
useElementHover,
useElementSize,
useElementVisibility,
useEventBus,
useEventListener,
useEventSource,
useEyeDropper,
useFavicon,
useFetch,
useFileDialog,
useFileSystemAccess,
useFocus,
useFocusWithin,
useFps,
useFullscreen,
useGamepad,
useGeolocation,
useIdle,
useImage,
useInfiniteScroll,
useIntersectionObserver,
useInterval,
useIntervalFn,
useKeyModifier,
useLastChanged,
useLocalStorage,
useMagicKeys,
useManualRefHistory,
useMediaControls,
useMediaQuery,
useMemoize,
useMemory,
useMounted,
useMouse,
useMouseInElement,
useMousePressed,
useMutationObserver,
useNavigatorLanguage,
useNetwork,
useNow,
useObjectUrl,
useOffsetPagination,
useOnline,
usePageLeave,
useParallax,
useParentElement,
usePerformanceObserver,
usePermission,
usePointer,
usePointerLock,
usePointerSwipe,
usePreferredColorScheme,
usePreferredContrast,
usePreferredDark,
usePreferredLanguages,
usePreferredReducedMotion,
usePreferredReducedTransparency,
usePrevious,
useRafFn,
useRefHistory,
useResizeObserver,
useSSRWidth,
useScreenOrientation,
useScreenSafeArea,
useScriptTag,
useScroll,
useScrollLock,
useSessionStorage,
useShare,
useSorted,
useSpeechRecognition,
useSpeechSynthesis,
useStepper,
useStorage,
useStorageAsync,
useStyleTag,
useSupported,
useSwipe,
useTemplateRefsList,
useTextDirection,
useTextSelection,
useTextareaAutosize,
useThrottleFn,
useThrottledRefHistory,
useTimeAgo,
useTimeout,
useTimeoutFn,
useTimeoutPoll,
useTimestamp,
useTitle,
useToNumber,
useToString,
useToggle,
useTransition,
useUrlSearchParams,
useUserMedia,
useVModel,
useVModels,
useVibrate,
useVirtualList,
useWakeLock,
useWebNotification,
useWebSocket,
useWebWorker,
useWebWorkerFn,
useWindowFocus,
useWindowScroll,
useWindowSize,
watchArray,
watchAtMost,
watchDebounced,
watchDeep,
watchIgnorable,
watchImmediate,
watchOnce,
watchPausable,
watchThrottled,
watchTriggerable,
watchWithFilter,
whenever
} from "./chunk-FX5VEOLN.js";
import "./chunk-VIGQSUQT.js";
export {
DefaultMagicKeysAliasMap,
StorageSerializers,
TransitionPresets,
assert,
computedAsync as asyncComputed,
refAutoReset as autoResetRef,
breakpointsAntDesign,
breakpointsBootstrapV5,
breakpointsElement,
breakpointsMasterCss,
breakpointsPrimeFlex,
breakpointsQuasar,
breakpointsSematic,
breakpointsTailwind,
breakpointsVuetify,
breakpointsVuetifyV2,
breakpointsVuetifyV3,
bypassFilter,
camelize,
clamp,
cloneFnJSON,
computedAsync,
computedEager,
computedInject,
computedWithControl,
containsProp,
computedWithControl as controlledComputed,
controlledRef,
createEventHook,
createFetch,
createFilterWrapper,
createGlobalState,
createInjectionState,
reactify as createReactiveFn,
createRef,
createReusableTemplate,
createSharedComposable,
createSingletonPromise,
createTemplatePromise,
createUnrefFn,
customStorageEventName,
debounceFilter,
refDebounced as debouncedRef,
watchDebounced as debouncedWatch,
defaultDocument,
defaultLocation,
defaultNavigator,
defaultWindow,
computedEager as eagerComputed,
executeTransition,
extendRef,
formatDate,
formatTimeAgo,
get,
getLifeCycleTarget,
getSSRHandler,
hasOwn,
hyphenate,
identity,
watchIgnorable as ignorableWatch,
increaseWithUnit,
injectLocal,
invoke,
isClient,
isDef,
isDefined,
isIOS,
isObject,
isWorker,
makeDestructurable,
mapGamepadToXbox360Controller,
noop,
normalizeDate,
notNullish,
now,
objectEntries,
objectOmit,
objectPick,
onClickOutside,
onElementRemoval,
onKeyDown,
onKeyPressed,
onKeyStroke,
onKeyUp,
onLongPress,
onStartTyping,
pausableFilter,
watchPausable as pausableWatch,
promiseTimeout,
provideLocal,
provideSSRWidth,
pxValue,
rand,
reactify,
reactifyObject,
reactiveComputed,
reactiveOmit,
reactivePick,
refAutoReset,
refDebounced,
refDefault,
refThrottled,
refWithControl,
resolveRef,
resolveUnref,
set,
setSSRHandler,
syncRef,
syncRefs,
templateRef,
throttleFilter,
refThrottled as throttledRef,
watchThrottled as throttledWatch,
timestamp,
toArray,
toReactive,
toRef,
toRefs,
toValue,
tryOnBeforeMount,
tryOnBeforeUnmount,
tryOnMounted,
tryOnScopeDispose,
tryOnUnmounted,
unrefElement,
until,
useActiveElement,
useAnimate,
useArrayDifference,
useArrayEvery,
useArrayFilter,
useArrayFind,
useArrayFindIndex,
useArrayFindLast,
useArrayIncludes,
useArrayJoin,
useArrayMap,
useArrayReduce,
useArraySome,
useArrayUnique,
useAsyncQueue,
useAsyncState,
useBase64,
useBattery,
useBluetooth,
useBreakpoints,
useBroadcastChannel,
useBrowserLocation,
useCached,
useClipboard,
useClipboardItems,
useCloned,
useColorMode,
useConfirmDialog,
useCountdown,
useCounter,
useCssVar,
useCurrentElement,
useCycleList,
useDark,
useDateFormat,
refDebounced as useDebounce,
useDebounceFn,
useDebouncedRefHistory,
useDeviceMotion,
useDeviceOrientation,
useDevicePixelRatio,
useDevicesList,
useDisplayMedia,
useDocumentVisibility,
useDraggable,
useDropZone,
useElementBounding,
useElementByPoint,
useElementHover,
useElementSize,
useElementVisibility,
useEventBus,
useEventListener,
useEventSource,
useEyeDropper,
useFavicon,
useFetch,
useFileDialog,
useFileSystemAccess,
useFocus,
useFocusWithin,
useFps,
useFullscreen,
useGamepad,
useGeolocation,
useIdle,
useImage,
useInfiniteScroll,
useIntersectionObserver,
useInterval,
useIntervalFn,
useKeyModifier,
useLastChanged,
useLocalStorage,
useMagicKeys,
useManualRefHistory,
useMediaControls,
useMediaQuery,
useMemoize,
useMemory,
useMounted,
useMouse,
useMouseInElement,
useMousePressed,
useMutationObserver,
useNavigatorLanguage,
useNetwork,
useNow,
useObjectUrl,
useOffsetPagination,
useOnline,
usePageLeave,
useParallax,
useParentElement,
usePerformanceObserver,
usePermission,
usePointer,
usePointerLock,
usePointerSwipe,
usePreferredColorScheme,
usePreferredContrast,
usePreferredDark,
usePreferredLanguages,
usePreferredReducedMotion,
usePreferredReducedTransparency,
usePrevious,
useRafFn,
useRefHistory,
useResizeObserver,
useSSRWidth,
useScreenOrientation,
useScreenSafeArea,
useScriptTag,
useScroll,
useScrollLock,
useSessionStorage,
useShare,
useSorted,
useSpeechRecognition,
useSpeechSynthesis,
useStepper,
useStorage,
useStorageAsync,
useStyleTag,
useSupported,
useSwipe,
useTemplateRefsList,
useTextDirection,
useTextSelection,
useTextareaAutosize,
refThrottled as useThrottle,
useThrottleFn,
useThrottledRefHistory,
useTimeAgo,
useTimeout,
useTimeoutFn,
useTimeoutPoll,
useTimestamp,
useTitle,
useToNumber,
useToString,
useToggle,
useTransition,
useUrlSearchParams,
useUserMedia,
useVModel,
useVModels,
useVibrate,
useVirtualList,
useWakeLock,
useWebNotification,
useWebSocket,
useWebWorker,
useWebWorkerFn,
useWindowFocus,
useWindowScroll,
useWindowSize,
watchArray,
watchAtMost,
watchDebounced,
watchDeep,
watchIgnorable,
watchImmediate,
watchOnce,
watchPausable,
watchThrottled,
watchTriggerable,
watchWithFilter,
whenever
};
//# sourceMappingURL=vitepress___@vueuse_core.js.map

View File

@@ -0,0 +1,7 @@
{
"version": 3,
"sources": [],
"sourcesContent": [],
"mappings": "",
"names": []
}

347
word/.vitepress/cache/deps/vue.js vendored Normal file
View File

@@ -0,0 +1,347 @@
import {
BaseTransition,
BaseTransitionPropsValidators,
Comment,
DeprecationTypes,
EffectScope,
ErrorCodes,
ErrorTypeStrings,
Fragment,
KeepAlive,
ReactiveEffect,
Static,
Suspense,
Teleport,
Text,
TrackOpTypes,
Transition,
TransitionGroup,
TriggerOpTypes,
VueElement,
assertNumber,
callWithAsyncErrorHandling,
callWithErrorHandling,
camelize,
capitalize,
cloneVNode,
compatUtils,
compile,
computed,
createApp,
createBaseVNode,
createBlock,
createCommentVNode,
createElementBlock,
createHydrationRenderer,
createPropsRestProxy,
createRenderer,
createSSRApp,
createSlots,
createStaticVNode,
createTextVNode,
createVNode,
customRef,
defineAsyncComponent,
defineComponent,
defineCustomElement,
defineEmits,
defineExpose,
defineModel,
defineOptions,
defineProps,
defineSSRCustomElement,
defineSlots,
devtools,
effect,
effectScope,
getCurrentInstance,
getCurrentScope,
getCurrentWatcher,
getTransitionRawChildren,
guardReactiveProps,
h,
handleError,
hasInjectionContext,
hydrate,
hydrateOnIdle,
hydrateOnInteraction,
hydrateOnMediaQuery,
hydrateOnVisible,
initCustomFormatter,
initDirectivesForSSR,
inject,
isMemoSame,
isProxy,
isReactive,
isReadonly,
isRef,
isRuntimeOnly,
isShallow,
isVNode,
markRaw,
mergeDefaults,
mergeModels,
mergeProps,
nextTick,
nodeOps,
normalizeClass,
normalizeProps,
normalizeStyle,
onActivated,
onBeforeMount,
onBeforeUnmount,
onBeforeUpdate,
onDeactivated,
onErrorCaptured,
onMounted,
onRenderTracked,
onRenderTriggered,
onScopeDispose,
onServerPrefetch,
onUnmounted,
onUpdated,
onWatcherCleanup,
openBlock,
patchProp,
popScopeId,
provide,
proxyRefs,
pushScopeId,
queuePostFlushCb,
reactive,
readonly,
ref,
registerRuntimeCompiler,
render,
renderList,
renderSlot,
resolveComponent,
resolveDirective,
resolveDynamicComponent,
resolveFilter,
resolveTransitionHooks,
setBlockTracking,
setDevtoolsHook,
setTransitionHooks,
shallowReactive,
shallowReadonly,
shallowRef,
ssrContextKey,
ssrUtils,
stop,
toDisplayString,
toHandlerKey,
toHandlers,
toRaw,
toRef,
toRefs,
toValue,
transformVNodeArgs,
triggerRef,
unref,
useAttrs,
useCssModule,
useCssVars,
useHost,
useId,
useModel,
useSSRContext,
useShadowRoot,
useSlots,
useTemplateRef,
useTransitionState,
vModelCheckbox,
vModelDynamic,
vModelRadio,
vModelSelect,
vModelText,
vShow,
version,
warn,
watch,
watchEffect,
watchPostEffect,
watchSyncEffect,
withAsyncContext,
withCtx,
withDefaults,
withDirectives,
withKeys,
withMemo,
withModifiers,
withScopeId
} from "./chunk-VIGQSUQT.js";
export {
BaseTransition,
BaseTransitionPropsValidators,
Comment,
DeprecationTypes,
EffectScope,
ErrorCodes,
ErrorTypeStrings,
Fragment,
KeepAlive,
ReactiveEffect,
Static,
Suspense,
Teleport,
Text,
TrackOpTypes,
Transition,
TransitionGroup,
TriggerOpTypes,
VueElement,
assertNumber,
callWithAsyncErrorHandling,
callWithErrorHandling,
camelize,
capitalize,
cloneVNode,
compatUtils,
compile,
computed,
createApp,
createBlock,
createCommentVNode,
createElementBlock,
createBaseVNode as createElementVNode,
createHydrationRenderer,
createPropsRestProxy,
createRenderer,
createSSRApp,
createSlots,
createStaticVNode,
createTextVNode,
createVNode,
customRef,
defineAsyncComponent,
defineComponent,
defineCustomElement,
defineEmits,
defineExpose,
defineModel,
defineOptions,
defineProps,
defineSSRCustomElement,
defineSlots,
devtools,
effect,
effectScope,
getCurrentInstance,
getCurrentScope,
getCurrentWatcher,
getTransitionRawChildren,
guardReactiveProps,
h,
handleError,
hasInjectionContext,
hydrate,
hydrateOnIdle,
hydrateOnInteraction,
hydrateOnMediaQuery,
hydrateOnVisible,
initCustomFormatter,
initDirectivesForSSR,
inject,
isMemoSame,
isProxy,
isReactive,
isReadonly,
isRef,
isRuntimeOnly,
isShallow,
isVNode,
markRaw,
mergeDefaults,
mergeModels,
mergeProps,
nextTick,
nodeOps,
normalizeClass,
normalizeProps,
normalizeStyle,
onActivated,
onBeforeMount,
onBeforeUnmount,
onBeforeUpdate,
onDeactivated,
onErrorCaptured,
onMounted,
onRenderTracked,
onRenderTriggered,
onScopeDispose,
onServerPrefetch,
onUnmounted,
onUpdated,
onWatcherCleanup,
openBlock,
patchProp,
popScopeId,
provide,
proxyRefs,
pushScopeId,
queuePostFlushCb,
reactive,
readonly,
ref,
registerRuntimeCompiler,
render,
renderList,
renderSlot,
resolveComponent,
resolveDirective,
resolveDynamicComponent,
resolveFilter,
resolveTransitionHooks,
setBlockTracking,
setDevtoolsHook,
setTransitionHooks,
shallowReactive,
shallowReadonly,
shallowRef,
ssrContextKey,
ssrUtils,
stop,
toDisplayString,
toHandlerKey,
toHandlers,
toRaw,
toRef,
toRefs,
toValue,
transformVNodeArgs,
triggerRef,
unref,
useAttrs,
useCssModule,
useCssVars,
useHost,
useId,
useModel,
useSSRContext,
useShadowRoot,
useSlots,
useTemplateRef,
useTransitionState,
vModelCheckbox,
vModelDynamic,
vModelRadio,
vModelSelect,
vModelText,
vShow,
version,
warn,
watch,
watchEffect,
watchPostEffect,
watchSyncEffect,
withAsyncContext,
withCtx,
withDefaults,
withDirectives,
withKeys,
withMemo,
withModifiers,
withScopeId
};
//# sourceMappingURL=vue.js.map

7
word/.vitepress/cache/deps/vue.js.map vendored Normal file
View File

@@ -0,0 +1,7 @@
{
"version": 3,
"sources": [],
"sourcesContent": [],
"mappings": "",
"names": []
}

View File

@@ -0,0 +1,46 @@
import { defineConfig } from 'vitepress'
// https://vitepress.dev/reference/site-config
export default defineConfig({
title: "DeEarthX-CE",
description: "DeEarthX-CE 项目文档",
themeConfig: {
// https://vitepress.dev/reference/default-theme-config
nav: [
{ text: '首页', link: '/' },
{ text: '文档', link: '/guide/introduction' },
{ text: 'API', link: '/api/core' },
{ text: '贡献', link: '/contributing' }
],
sidebar: {
'/guide/': [
{
text: '指南',
items: [
{ text: '项目介绍', link: '/guide/introduction' },
{ text: '安装指南', link: '/guide/installation' },
{ text: '使用教程', link: '/guide/usage' },
{ text: '模板编写教程', link: '/guide/template-tutorial' },
{ text: '常见问题', link: '/guide/faq' },
{ text: '开发者指南', link: '/guide/developer' }
]
}
],
'/api/': [
{
text: 'API 文档',
items: [
{ text: '核心模块', link: '/api/core' },
{ text: '后端 API', link: '/api/backend' },
{ text: '前端 API', link: '/api/frontend' }
]
}
]
},
socialLinks: [
{ icon: 'github', link: 'https://github.com' }
]
}
})

49
word/api-examples.md Normal file
View File

@@ -0,0 +1,49 @@
---
outline: deep
---
# Runtime API Examples
This page demonstrates usage of some of the runtime APIs provided by VitePress.
The main `useData()` API can be used to access site, theme, and page data for the current page. It works in both `.md` and `.vue` files:
```md
<script setup>
import { useData } from 'vitepress'
const { theme, page, frontmatter } = useData()
</script>
## Results
### Theme Data
<pre>{{ theme }}</pre>
### Page Data
<pre>{{ page }}</pre>
### Page Frontmatter
<pre>{{ frontmatter }}</pre>
```
<script setup>
import { useData } from 'vitepress'
const { site, theme, page, frontmatter } = useData()
</script>
## Results
### Theme Data
<pre>{{ theme }}</pre>
### Page Data
<pre>{{ page }}</pre>
### Page Frontmatter
<pre>{{ frontmatter }}</pre>
## More
Check out the documentation for the [full list of runtime APIs](https://vitepress.dev/reference/runtime-api#usedata).

314
word/api/backend.md Normal file
View File

@@ -0,0 +1,314 @@
# 后端 API
## 概述
DeEarthX-CE 的后端模块使用 TypeScript 开发,提供了核心功能和 API 接口。本章节将详细介绍后端模块的 API 接口。
## 模块结构
后端模块包含以下主要目录:
- `dearth/` - 核心功能模块
- `modloader/` - 模组加载器相关功能
- `platform/` - 平台集成模块
- `template/` - 模板管理模块
- `utils/` - 工具函数
## 核心模块
### dearth/strategies
包含各种模组过滤策略:
- `DexpubFilter.ts` - Dexpub 过滤策略
- `HashFilter.ts` - 基于哈希值的过滤策略
- `MixinFilter.ts` - 混合过滤策略
- `ModrinthFilter.ts` - Modrinth 过滤策略
### dearth/ModCheckService.ts
**功能**:负责检查模组的有效性和兼容性
**方法**
- `checkMod(modPath: string): Promise<ModInfo>`
- **参数**`modPath` - 模组文件路径
- **返回值**:模组信息对象
- **描述**:检查模组的基本信息和兼容性
- `checkModCompatibility(modInfo: ModInfo, gameVersion: string, modloader: string): Promise<boolean>`
- **参数**
- `modInfo` - 模组信息对象
- `gameVersion` - 游戏版本
- `modloader` - 模组加载器
- **返回值**:是否兼容
- **描述**:检查模组与指定游戏版本和加载器的兼容性
### dearth/ModFilterService.ts
**功能**:负责根据不同策略过滤模组
**方法**
- `filterMods(mods: ModInfo[], strategy: FilterStrategy): Promise<ModInfo[]>`
- **参数**
- `mods` - 模组信息数组
- `strategy` - 过滤策略
- **返回值**:过滤后的模组数组
- **描述**:根据指定策略过滤模组
- `registerFilterStrategy(name: string, strategy: FilterStrategy): void`
- **参数**
- `name` - 策略名称
- `strategy` - 过滤策略对象
- **返回值**:无
- **描述**:注册新的过滤策略
## 模组加载器模块
### modloader/fabric.ts
**功能**:处理 Fabric 模组加载器相关操作
**方法**
- `detectFabricMod(modPath: string): Promise<boolean>`
- **参数**`modPath` - 模组文件路径
- **返回值**:是否为 Fabric 模组
- **描述**:检测指定文件是否为 Fabric 模组
- `getFabricModInfo(modPath: string): Promise<ModInfo>`
- **参数**`modPath` - 模组文件路径
- **返回值**:模组信息对象
- **描述**:获取 Fabric 模组的详细信息
### modloader/forge.ts
**功能**:处理 Forge 模组加载器相关操作
**方法**
- `detectForgeMod(modPath: string): Promise<boolean>`
- **参数**`modPath` - 模组文件路径
- **返回值**:是否为 Forge 模组
- **描述**:检测指定文件是否为 Forge 模组
- `getForgeModInfo(modPath: string): Promise<ModInfo>`
- **参数**`modPath` - 模组文件路径
- **返回值**:模组信息对象
- **描述**:获取 Forge 模组的详细信息
### modloader/neoforge.ts
**功能**:处理 NeoForge 模组加载器相关操作
**方法**
- `detectNeoForgeMod(modPath: string): Promise<boolean>`
- **参数**`modPath` - 模组文件路径
- **返回值**:是否为 NeoForge 模组
- **描述**:检测指定文件是否为 NeoForge 模组
- `getNeoForgeModInfo(modPath: string): Promise<ModInfo>`
- **参数**`modPath` - 模组文件路径
- **返回值**:模组信息对象
- **描述**:获取 NeoForge 模组的详细信息
## 平台集成模块
### platform/curseforge.ts
**功能**:与 CurseForge API 交互
**方法**
- `searchMods(query: string, gameVersion: string): Promise<ModInfo[]>`
- **参数**
- `query` - 搜索关键词
- `gameVersion` - 游戏版本
- **返回值**:搜索结果数组
- **描述**:在 CurseForge 上搜索模组
- `getModDetails(modId: string): Promise<ModInfo>`
- **参数**`modId` - 模组ID
- **返回值**:模组详细信息
- **描述**:获取模组的详细信息
- `downloadMod(modId: string, fileId: string, destination: string): Promise<boolean>`
- **参数**
- `modId` - 模组ID
- `fileId` - 文件ID
- `destination` - 下载目标路径
- **返回值**:是否下载成功
- **描述**:下载指定模组文件
### platform/modrinth.ts
**功能**:与 Modrinth API 交互
**方法**
- `searchMods(query: string, gameVersion: string): Promise<ModInfo[]>`
- **参数**
- `query` - 搜索关键词
- `gameVersion` - 游戏版本
- **返回值**:搜索结果数组
- **描述**:在 Modrinth 上搜索模组
- `getModDetails(modId: string): Promise<ModInfo>`
- **参数**`modId` - 模组ID
- **返回值**:模组详细信息
- **描述**:获取模组的详细信息
- `downloadMod(modId: string, versionId: string, destination: string): Promise<boolean>`
- **参数**
- `modId` - 模组ID
- `versionId` - 版本ID
- `destination` - 下载目标路径
- **返回值**:是否下载成功
- **描述**:下载指定模组文件
## 模板管理模块
### template/TemplateManager.ts
**功能**:负责模板的创建、管理和应用
**方法**
- `createTemplate(name: string, description: string, mods: ModInfo[]): Promise<Template>`
- **参数**
- `name` - 模板名称
- `description` - 模板描述
- `mods` - 模组信息数组
- **返回值**:创建的模板对象
- **描述**:创建新的模组包模板
- `getTemplate(templateId: string): Promise<Template>`
- **参数**`templateId` - 模板ID
- **返回值**:模板对象
- **描述**:获取指定模板的详细信息
- `listTemplates(): Promise<Template[]>`
- **参数**:无
- **返回值**:模板数组
- **描述**:获取所有模板列表
- `updateTemplate(templateId: string, updates: Partial<Template>): Promise<Template>`
- **参数**
- `templateId` - 模板ID
- `updates` - 更新内容
- **返回值**:更新后的模板对象
- **描述**:更新模板信息
- `deleteTemplate(templateId: string): Promise<boolean>`
- **参数**`templateId` - 模板ID
- **返回值**:是否删除成功
- **描述**:删除指定模板
- `applyTemplate(templateId: string, targetDir: string): Promise<boolean>`
- **参数**
- `templateId` - 模板ID
- `targetDir` - 目标目录
- **返回值**:是否应用成功
- **描述**:将模板应用到指定目录
- `exportTemplate(templateId: string, exportPath: string): Promise<boolean>`
- **参数**
- `templateId` - 模板ID
- `exportPath` - 导出路径
- **返回值**:是否导出成功
- **描述**:导出模板为文件
- `importTemplate(templatePath: string): Promise<Template>`
- **参数**`templatePath` - 模板文件路径
- **返回值**:导入的模板对象
- **描述**:从文件导入模板
## 工具模块
### utils/FileExtractor.ts
**功能**:负责从模组文件中提取信息
**方法**
- `extractModInfo(jarPath: string): Promise<ModInfo>`
- **参数**`jarPath` - 模组JAR文件路径
- **返回值**:模组信息对象
- **描述**从JAR文件中提取模组信息
- `extractManifest(jarPath: string): Promise<any>`
- **参数**`jarPath` - 模组JAR文件路径
- **返回值**:模组清单对象
- **描述**从JAR文件中提取模组清单
### utils/FileOperator.ts
**功能**:负责文件操作
**方法**
- `copyFile(source: string, destination: string): Promise<boolean>`
- **参数**
- `source` - 源文件路径
- `destination` - 目标文件路径
- **返回值**:是否复制成功
- **描述**:复制文件
- `deleteFile(path: string): Promise<boolean>`
- **参数**`path` - 文件路径
- **返回值**:是否删除成功
- **描述**:删除文件
- `createDirectory(path: string): Promise<boolean>`
- **参数**`path` - 目录路径
- **返回值**:是否创建成功
- **描述**:创建目录
- `listFiles(path: string): Promise<string[]>`
- **参数**`path` - 目录路径
- **返回值**:文件路径数组
- **描述**:列出目录中的文件
### utils/jar-parser.ts
**功能**负责解析JAR文件
**方法**
- `parseJar(jarPath: string): Promise<JarContent>`
- **参数**`jarPath` - JAR文件路径
- **返回值**JAR内容对象
- **描述**解析JAR文件内容
- `extractFile(jarPath: string, filePath: string, destination: string): Promise<boolean>`
- **参数**
- `jarPath` - JAR文件路径
- `filePath` - JAR内部文件路径
- `destination` - 提取目标路径
- **返回值**:是否提取成功
- **描述**从JAR文件中提取指定文件
## 主入口
### main.ts
**功能**:后端应用的主入口
**方法**
- `startServer(): Promise<void>`
- **参数**:无
- **返回值**:无
- **描述**:启动后端服务器
- `stopServer(): Promise<void>`
- **参数**:无
- **返回值**:无
- **描述**:停止后端服务器
- `getServerStatus(): ServerStatus`
- **参数**:无
- **返回值**:服务器状态对象
- **描述**:获取服务器状态

185
word/api/core.md Normal file
View File

@@ -0,0 +1,185 @@
# 核心模块 API
## 概述
DeEarthX-CE 的核心模块提供了应用的基础功能,包括模组管理、模板管理、平台集成等。本章节将详细介绍核心模块的 API 接口。
## 核心类
### ModCheckService
**功能**:负责检查模组的有效性和兼容性
**方法**
- `checkMod(modPath: string): Promise<ModInfo>`
- **参数**`modPath` - 模组文件路径
- **返回值**:模组信息对象
- **描述**:检查模组的基本信息和兼容性
- `checkModCompatibility(modInfo: ModInfo, gameVersion: string, modloader: string): Promise<boolean>`
- **参数**
- `modInfo` - 模组信息对象
- `gameVersion` - 游戏版本
- `modloader` - 模组加载器
- **返回值**:是否兼容
- **描述**:检查模组与指定游戏版本和加载器的兼容性
### ModFilterService
**功能**:负责根据不同策略过滤模组
**方法**
- `filterMods(mods: ModInfo[], strategy: FilterStrategy): Promise<ModInfo[]>`
- **参数**
- `mods` - 模组信息数组
- `strategy` - 过滤策略
- **返回值**:过滤后的模组数组
- **描述**:根据指定策略过滤模组
- `registerFilterStrategy(name: string, strategy: FilterStrategy): void`
- **参数**
- `name` - 策略名称
- `strategy` - 过滤策略对象
- **返回值**:无
- **描述**:注册新的过滤策略
### TemplateManager
**功能**:负责模板的创建、管理和应用
**方法**
- `createTemplate(name: string, description: string, mods: ModInfo[]): Promise<Template>`
- **参数**
- `name` - 模板名称
- `description` - 模板描述
- `mods` - 模组信息数组
- **返回值**:创建的模板对象
- **描述**:创建新的模组包模板
- `applyTemplate(templateId: string, targetDir: string): Promise<boolean>`
- **参数**
- `templateId` - 模板ID
- `targetDir` - 目标目录
- **返回值**:是否应用成功
- **描述**:将模板应用到指定目录
- `exportTemplate(templateId: string, exportPath: string): Promise<boolean>`
- **参数**
- `templateId` - 模板ID
- `exportPath` - 导出路径
- **返回值**:是否导出成功
- **描述**:导出模板为文件
## 工具类
### FileExtractor
**功能**:负责从模组文件中提取信息
**方法**
- `extractModInfo(jarPath: string): Promise<ModInfo>`
- **参数**`jarPath` - 模组JAR文件路径
- **返回值**:模组信息对象
- **描述**从JAR文件中提取模组信息
### FileOperator
**功能**:负责文件操作
**方法**
- `copyFile(source: string, destination: string): Promise<boolean>`
- **参数**
- `source` - 源文件路径
- `destination` - 目标文件路径
- **返回值**:是否复制成功
- **描述**:复制文件
- `deleteFile(path: string): Promise<boolean>`
- **参数**`path` - 文件路径
- **返回值**:是否删除成功
- **描述**:删除文件
## 平台集成
### CurseForgeClient
**功能**:与 CurseForge API 交互
**方法**
- `searchMods(query: string, gameVersion: string): Promise<ModInfo[]>`
- **参数**
- `query` - 搜索关键词
- `gameVersion` - 游戏版本
- **返回值**:搜索结果数组
- **描述**:在 CurseForge 上搜索模组
- `getModDetails(modId: string): Promise<ModInfo>`
- **参数**`modId` - 模组ID
- **返回值**:模组详细信息
- **描述**:获取模组的详细信息
### ModrinthClient
**功能**:与 Modrinth API 交互
**方法**
- `searchMods(query: string, gameVersion: string): Promise<ModInfo[]>`
- **参数**
- `query` - 搜索关键词
- `gameVersion` - 游戏版本
- **返回值**:搜索结果数组
- **描述**:在 Modrinth 上搜索模组
- `getModDetails(modId: string): Promise<ModInfo>`
- **参数**`modId` - 模组ID
- **返回值**:模组详细信息
- **描述**:获取模组的详细信息
## 类型定义
### ModInfo
```typescript
interface ModInfo {
id: string;
name: string;
version: string;
description: string;
authors: string[];
gameVersions: string[];
modLoaders: string[];
dependencies: string[];
fileSize: number;
hash: string;
source: string; // curseforge, modrinth, local
}
```
### Template
```typescript
interface Template {
id: string;
name: string;
description: string;
mods: ModInfo[];
createdAt: string;
updatedAt: string;
}
```
### FilterStrategy
```typescript
interface FilterStrategy {
name: string;
filter: (mod: ModInfo) => boolean;
}
```

243
word/api/frontend.md Normal file
View File

@@ -0,0 +1,243 @@
# 前端 API
## 概述
DeEarthX-CE 的前端模块使用 Vue 3 + Vite 开发,提供了用户界面和与后端的交互功能。本章节将详细介绍前端模块的 API 接口。
## 项目结构
前端模块包含以下主要目录:
- `src/components/` - 组件目录
- `src/views/` - 页面视图目录
- `src/utils/` - 工具函数目录
- `src/assets/` - 资源文件目录
- `lang/` - 语言文件目录
## 组件
### ModeSelector.vue
**功能**:模式选择组件,用于选择不同的操作模式
**属性**
- `modes` - 模式数组,包含模式名称和图标
- `selectedMode` - 当前选中的模式
- `@mode-change` - 模式变更事件
**方法**
- `selectMode(mode: string): void` - 选择指定模式
### ProgressCard.vue
**功能**:进度卡片组件,用于显示操作进度
**属性**
- `title` - 卡片标题
- `progress` - 进度值0-100
- `status` - 状态loading, success, error
- `message` - 状态消息
**方法**
- `updateProgress(progress: number): void` - 更新进度
- `setStatus(status: string, message: string): void` - 更新状态
### StepIndicator.vue
**功能**:步骤指示器组件,用于显示多步骤操作的进度
**属性**
- `steps` - 步骤数组
- `currentStep` - 当前步骤索引
**方法**
- `goToStep(step: number): void` - 跳转到指定步骤
### WebSocketHandler.vue
**功能**WebSocket 处理组件,用于与后端进行实时通信
**属性**
- `url` - WebSocket 服务器 URL
- `@message` - 接收消息事件
- `@connected` - 连接成功事件
- `@disconnected` - 连接断开事件
**方法**
- `sendMessage(data: any): void` - 发送消息
- `connect(): void` - 建立连接
- `disconnect(): void` - 断开连接
## 页面视图
### Main.vue
**功能**:主页面组件
**方法**
- `initializeApp(): void` - 初始化应用
- `loadUserSettings(): void` - 加载用户设置
- `handleModeChange(mode: string): void` - 处理模式变更
### DeEarthView.vue
**功能**DeEarth 模式页面
**方法**
- `loadMods(): void` - 加载模组列表
- `addMod(): void` - 添加模组
- `removeMod(modId: string): void` - 移除模组
- `toggleMod(modId: string): void` - 切换模组状态
### GalaxyView.vue
**功能**Galaxy 模式页面
**方法**
- `loadTemplates(): void` - 加载模板列表
- `createTemplate(): void` - 创建模板
- `applyTemplate(templateId: string): void` - 应用模板
- `exportTemplate(templateId: string): void` - 导出模板
### SettingView.vue
**功能**:设置页面
**方法**
- `loadSettings(): void` - 加载设置
- `saveSettings(): void` - 保存设置
- `changeLanguage(language: string): void` - 更改语言
### AboutView.vue
**功能**:关于页面
**方法**
- `loadVersionInfo(): void` - 加载版本信息
- `checkForUpdates(): void` - 检查更新
### TemplateView.vue
**功能**:模板管理页面
**方法**
- `loadTemplates(): void` - 加载模板列表
- `createTemplate(): void` - 创建模板
- `editTemplate(templateId: string): void` - 编辑模板
- `deleteTemplate(templateId: string): void` - 删除模板
### ErrorView.vue
**功能**:错误页面
**属性**
- `error` - 错误信息
**方法**
- `retry(): void` - 重试操作
- `goHome(): void` - 返回首页
## 工具函数
### axios.ts
**功能**HTTP 请求工具
**方法**
- `get<T>(url: string, params?: any): Promise<T>` - 发送 GET 请求
- `post<T>(url: string, data?: any): Promise<T>` - 发送 POST 请求
- `put<T>(url: string, data?: any): Promise<T>` - 发送 PUT 请求
- `delete<T>(url: string): Promise<T>` - 发送 DELETE 请求
### i18n.ts
**功能**:国际化工具
**方法**
- `loadLanguage(language: string): Promise<void>` - 加载指定语言
- `t(key: string): string` - 翻译指定键
- `getCurrentLanguage(): string` - 获取当前语言
### router.ts
**功能**:路由工具
**方法**
- `navigateTo(path: string): void` - 导航到指定路径
- `goBack(): void` - 返回上一页
- `getCurrentRoute(): string` - 获取当前路由
## 状态管理
前端使用 Vue 的响应式系统进行状态管理,主要状态包括:
- `mods` - 模组列表
- `templates` - 模板列表
- `settings` - 用户设置
- `currentMode` - 当前模式
- `isLoading` - 加载状态
- `error` - 错误信息
## API 调用
前端通过以下方式与后端进行交互:
1. **HTTP 请求**:使用 axios 发送 RESTful API 请求
2. **WebSocket**:使用 WebSocketHandler 组件进行实时通信
3. **本地存储**:使用 localStorage 存储用户设置和缓存数据
## 语言支持
前端支持多种语言,语言文件位于 `lang/` 目录:
- `zh_cn.json` - 简体中文
- `zh_tw.json` - 繁体中文
- `zh_hk.json` - 香港中文
- `en_us.json` - 英文
- `ja_jp.json` - 日文
- `fr_fr.json` - 法文
- `es_es.json` - 西班牙文
- `de_de.json` - 德文
## 主题与样式
前端使用 Tailwind CSS 进行样式管理,支持响应式布局和主题定制。
## 构建与部署
### 开发模式
```bash
npm run dev
```
### 构建生产版本
```bash
npm run build
```
### 预览生产版本
```bash
npm run preview
```

205
word/contributing.md Normal file
View File

@@ -0,0 +1,205 @@
# 贡献指南
## 概述
感谢您对 DeEarthX-CE 项目的关注和支持!我们欢迎来自社区的贡献,包括代码提交、问题报告、功能建议等。本指南将帮助您了解如何参与项目开发。
## 开发环境设置
### 前提条件
在开始贡献之前,请确保您的系统满足以下要求:
- **Node.js**v16.0+(推荐使用最新稳定版)
- **pnpm**v8.0+(包管理器)
- **Rust**:最新稳定版(用于 Tauri 构建)
- **Git**:用于版本控制
### 克隆仓库
```bash
git clone https://github.com/yourusername/DeEarthX-CE.git
cd DeEarthX-CE
```
### 安装依赖
```bash
pnpm install
```
### 启动开发服务器
```bash
# 启动前端开发服务器
pnpm run dev
# 启动后端开发服务器(如果需要)
pnpm run backend:dev
```
## 代码规范
### 代码风格
- **TypeScript**:使用 TypeScript 官方推荐的代码风格
- **Vue**:遵循 Vue 3 风格指南
- **Rust**:遵循 Rust 官方代码风格
### 提交规范
我们使用 Conventional Commits 规范进行提交信息的编写:
```
<type>(<scope>): <description>
[optional body]
[optional footer(s)]
```
**类型**
- `feat`:新功能
- `fix`:修复 bug
- `docs`:文档更新
- `style`:代码风格调整
- `refactor`:代码重构
- `test`:测试相关
- `chore`:构建、依赖等杂项
## 开发流程
### 分支管理
- `main`:主分支,包含稳定版本
- `develop`:开发分支,包含最新开发内容
- `feature/xxx`:功能分支,用于开发新功能
- `fix/xxx`:修复分支,用于修复 bug
### 开发步骤
1. **创建分支**:从 `develop` 分支创建新的功能或修复分支
2. **开发代码**:实现功能或修复 bug
3. **运行测试**:确保代码通过所有测试
4. **提交代码**:使用规范的提交信息
5. **创建 PR**:向 `develop` 分支提交 Pull Request
6. **代码审查**:等待项目维护者的代码审查
7. **合并代码**:审查通过后,代码将被合并到 `develop` 分支
## 测试
### 运行测试
```bash
# 运行前端测试
pnpm run test:frontend
# 运行后端测试
pnpm run test:backend
# 运行所有测试
pnpm run test
```
### 测试规范
- 为新功能编写单元测试
- 为 bug 修复编写回归测试
- 确保测试覆盖主要功能和边缘情况
## 文档
### 文档更新
- 更新 API 文档以反映代码变更
- 更新用户文档以反映功能变更
- 确保文档与代码保持同步
### 文档规范
- 使用 Markdown 格式
- 保持文档结构清晰
- 提供详细的使用示例
## 问题报告
如果您发现了 bug 或有功能建议,请在 GitHub Issues 页面提交:
1. **搜索现有问题**:确保问题尚未被报告
2. **创建新问题**:提供详细的问题描述
3. **添加标签**:为问题添加适当的标签
4. **提供复现步骤**:详细说明如何复现 bug
5. **提供环境信息**包括操作系统、Node.js 版本等
## 功能请求
如果您有新功能的想法,请在 GitHub Issues 页面提交功能请求:
1. **搜索现有请求**:确保功能尚未被请求
2. **创建新请求**:提供详细的功能描述
3. **添加标签**:为请求添加 `feature` 标签
4. **说明功能价值**:解释该功能对用户的价值
5. **提供实现建议**:如果有实现思路,欢迎分享
## 代码审查
### 审查流程
1. **接收 PR**:项目维护者接收 Pull Request
2. **代码审查**:审查代码质量、风格和功能
3. **提供反馈**:提出改进建议
4. **修改代码**:根据反馈修改代码
5. **合并 PR**:审查通过后合并代码
### 审查标准
- **代码质量**:代码是否清晰、高效
- **功能完整性**:是否实现了所有需求
- **测试覆盖**:是否有足够的测试
- **文档更新**:是否更新了相关文档
- **兼容性**:是否与现有代码兼容
## 发布流程
### 版本号规范
我们使用语义化版本号Semantic Versioning
```
MAJOR.MINOR.PATCH
```
- `MAJOR`:不兼容的 API 变更
- `MINOR`:向后兼容的功能添加
- `PATCH`:向后兼容的 bug 修复
### 发布步骤
1. **更新版本号**:在 `package.json` 和相关文件中更新版本号
2. **更新 CHANGELOG**:记录版本变更内容
3. **构建项目**:确保项目能够正常构建
4. **运行测试**:确保所有测试通过
5. **创建发布**:在 GitHub 上创建新的发布
6. **部署**:部署到相关平台
## 行为准则
我们希望所有参与者能够遵循以下行为准则:
- **尊重他人**:尊重所有社区成员,无论其背景如何
- **建设性沟通**:使用友好、建设性的语言进行沟通
- **包容多样性**:欢迎不同背景和观点的贡献者
- **专注于项目**:讨论应集中在项目相关的话题上
- **解决冲突**:以积极的方式解决冲突
## 联系方式
如果您有任何问题或需要帮助,可以通过以下方式联系我们:
- **GitHub Issues**:用于问题报告和功能请求
- **Discord**:用于实时讨论和社区交流
- **Email**:用于重要事项的沟通
## 致谢
感谢所有为 DeEarthX-CE 项目做出贡献的开发者和社区成员!您的贡献是项目成功的关键。

305
word/guide/developer.md Normal file
View File

@@ -0,0 +1,305 @@
# 开发者指南
## 概述
本指南旨在帮助开发者理解 DeEarthX-CE 项目的架构和开发流程,以便能够顺利地为项目做出贡献。
## 项目架构
DeEarthX-CE 采用前后端分离架构:
- **后端**:使用 TypeScript 开发,提供核心功能和 API
- **前端**:使用 Vue 3 + Vite 开发,提供用户界面
- **打包工具**:使用 Tauri 打包为桌面应用
## 目录结构
### 后端目录结构
```
backend/
├── src/
│ ├── dearth/ # 核心功能模块
│ │ ├── strategies/ # 模组过滤策略
│ │ ├── utils/ # 工具函数
│ │ ├── ModCheckService.ts # 模组检查服务
│ │ ├── ModFilterService.ts # 模组过滤服务
│ │ └── index.ts # 核心模块入口
│ ├── modloader/ # 模组加载器相关功能
│ ├── platform/ # 平台集成模块
│ ├── template/ # 模板管理模块
│ ├── utils/ # 通用工具函数
│ ├── Dex.ts # 核心类
│ ├── core.ts # 核心功能
│ ├── galaxy.ts # Galaxy 模式功能
│ └── main.ts # 主入口
├── package.json # 后端依赖
└── tsconfig.json # TypeScript 配置
```
### 前端目录结构
```
front/
├── src/
│ ├── components/ # 组件
│ ├── views/ # 页面视图
│ ├── utils/ # 工具函数
│ ├── assets/ # 资源文件
│ ├── App.vue # 根组件
│ └── main.ts # 主入口
├── lang/ # 语言文件
├── public/ # 静态资源
├── src-tauri/ # Tauri 配置
├── package.json # 前端依赖
└── vite.config.ts # Vite 配置
```
## 开发环境设置
### 前提条件
- **Node.js**v16.0+(推荐使用最新稳定版)
- **pnpm**v8.0+(包管理器)
- **Rust**:最新稳定版(用于 Tauri 构建)
- **Git**:用于版本控制
### 安装依赖
```bash
# 安装项目依赖
pnpm install
# 安装后端依赖
cd backend
pnpm install
# 安装前端依赖
cd ../front
pnpm install
```
### 启动开发服务器
```bash
# 启动前端开发服务器
cd front
pnpm run dev
# 启动后端开发服务器
cd ../backend
pnpm run dev
```
## 核心模块开发
### 模组检查服务
`ModCheckService` 负责检查模组的有效性和兼容性:
- **主要功能**:检查模组文件、验证模组信息、检测兼容性
- **关键方法**
- `checkMod()`:检查模组的基本信息
- `checkModCompatibility()`:检查模组与游戏版本的兼容性
### 模组过滤服务
`ModFilterService` 负责根据不同策略过滤模组:
- **主要功能**:注册过滤策略、执行模组过滤
- **关键方法**
- `filterMods()`:根据策略过滤模组
- `registerFilterStrategy()`:注册新的过滤策略
### 模板管理服务
`TemplateManager` 负责模板的创建、管理和应用:
- **主要功能**:创建模板、应用模板、导出模板
- **关键方法**
- `createTemplate()`:创建新模板
- `applyTemplate()`:应用模板到指定目录
- `exportTemplate()`:导出模板为文件
## 平台集成开发
### CurseForge 集成
- **功能**:与 CurseForge API 交互,搜索和下载模组
- **关键方法**
- `searchMods()`:搜索模组
- `getModDetails()`:获取模组详情
- `downloadMod()`:下载模组文件
### Modrinth 集成
- **功能**:与 Modrinth API 交互,搜索和下载模组
- **关键方法**
- `searchMods()`:搜索模组
- `getModDetails()`:获取模组详情
- `downloadMod()`:下载模组文件
## 前端开发
### 组件开发
- **组件结构**:使用 Vue 3 Composition API
- **样式管理**:使用 Tailwind CSS
- **状态管理**:使用 Vue 的响应式系统
### 页面开发
- **Main.vue**:主页面,包含模式选择
- **DeEarthView.vue**DeEarth 模式页面,用于模组管理
- **GalaxyView.vue**Galaxy 模式页面,用于模板管理
- **SettingView.vue**:设置页面
- **AboutView.vue**:关于页面
## API 开发
### 后端 API
- **RESTful API**:提供模组管理、模板管理等功能
- **WebSocket API**:提供实时通信功能
### 前端 API 调用
- **HTTP 请求**:使用 axios 发送 API 请求
- **WebSocket**:使用 WebSocketHandler 组件进行实时通信
## 测试
### 单元测试
```bash
# 运行后端单元测试
cd backend
pnpm run test
# 运行前端单元测试
cd ../front
pnpm run test
```
### 集成测试
- **API 测试**:测试后端 API 的功能
- **端到端测试**:测试完整的用户流程
## 构建与部署
### 构建应用
```bash
# 构建前端
cd front
pnpm run build
# 构建后端
cd ../backend
pnpm run build
# 构建桌面应用
cd ..
pnpm run tauri build
```
### 部署
- **桌面应用**:分发构建后的安装包
- **文档**:部署到 GitHub Pages 或其他静态网站托管服务
## 代码规范
### TypeScript 规范
- 使用 TypeScript 官方推荐的代码风格
- 为所有函数和变量添加类型注解
- 使用接口定义复杂类型
### Vue 规范
- 遵循 Vue 3 风格指南
- 使用 Composition API
- 组件命名使用 PascalCase
### Rust 规范
- 遵循 Rust 官方代码风格
- 使用 `cargo fmt` 格式化代码
- 为公共 API 添加文档注释
## 调试技巧
### 后端调试
- 使用 VS Code 的 TypeScript 调试功能
- 查看日志输出
- 使用 `console.log()``debugger` 语句
### 前端调试
- 使用浏览器的开发者工具
- 查看控制台输出
- 使用 Vue DevTools 扩展
### Tauri 调试
- 使用 `tauri dev` 启动开发模式
- 查看 Tauri 日志
- 使用 Rust 调试工具
## 常见问题
### 依赖冲突
- 检查 package.json 中的依赖版本
- 使用 pnpm 管理依赖
- 运行 `pnpm dedupe` 解决依赖冲突
### 构建失败
- 检查 Node.js 和 Rust 版本
- 确保所有依赖都已正确安装
- 查看构建日志获取详细错误信息
### API 调用失败
- 检查网络连接
- 验证 API 端点是否正确
- 查看服务器日志获取详细错误信息
## 贡献流程
1. ** Fork 仓库**:在 GitHub 上 fork 项目仓库
2. **克隆仓库**:克隆 fork 后的仓库到本地
3. **创建分支**:从 develop 分支创建新的功能分支
4. **开发代码**:实现功能或修复 bug
5. **运行测试**:确保代码通过所有测试
6. **提交代码**:使用规范的提交信息
7. **创建 PR**:向 develop 分支提交 Pull Request
8. **代码审查**:等待项目维护者的代码审查
9. **合并代码**:审查通过后,代码将被合并到 develop 分支
## 技术栈
- **后端**TypeScript、Node.js
- **前端**Vue 3、Vite、Tailwind CSS
- **打包**Tauri
- **测试**Jest、Vitest
- **版本控制**Git
- **包管理**pnpm
## 学习资源
- **Vue 3 文档**https://v3.vuejs.org/
- **TypeScript 文档**https://www.typescriptlang.org/docs/
- **Tauri 文档**https://tauri.studio/docs/
- **Rust 文档**https://doc.rust-lang.org/
- **Tailwind CSS 文档**https://tailwindcss.com/docs/
## 联系方式
- **GitHub Issues**:用于问题报告和功能请求
- **Discord**:用于实时讨论和社区交流
- **Email**:用于重要事项的沟通

97
word/guide/faq.md Normal file
View File

@@ -0,0 +1,97 @@
# 常见问题
## 基本问题
### DeEarthX-CE 是什么?
DeEarthX-CE 是一个功能强大的 Minecraft 模组管理工具,旨在简化模组的安装、更新和管理流程。它支持多个模组平台,提供智能的模组过滤功能,并允许用户创建和管理模组包模板。
### DeEarthX-CE 支持哪些平台?
DeEarthX-CE 支持 Windows 10/11、macOS 10.15+ 和 Linux (Ubuntu 20.04+) 操作系统。
### DeEarthX-CE 是免费的吗?
是的DeEarthX-CE 是一个开源项目,完全免费使用。
## 安装问题
### 安装过程中出现错误怎么办?
- 检查是否满足系统要求
- 尝试以管理员身份运行安装程序
- 查看安装日志获取详细错误信息
- 访问 GitHub Issues 页面寻求帮助
### 安装后无法启动应用怎么办?
- 检查是否满足系统要求
- 尝试以管理员身份运行
- 查看应用日志获取详细错误信息
- 重新安装应用
## 模组管理问题
### 如何添加模组?
1. 在左侧导航栏点击「模组管理」
2. 点击「添加模组」按钮
3. 选择模组来源本地文件、CurseForge 或 Modrinth
4. 选择要安装的模组并点击「安装」
### 模组安装失败怎么办?
- 检查网络连接
- 确认模组与当前游戏版本兼容
- 检查模组是否需要特定的依赖
- 查看应用日志获取详细错误信息
### 如何解决模组冲突?
1. 在左侧导航栏点击「高级工具」
2. 点击「检测冲突」按钮
3. 等待检测完成
4. 查看检测结果并处理冲突:
- 禁用冲突的模组
- 更新模组到兼容版本
- 寻找替代模组
## 模板管理问题
### 如何创建模板?
1. 在左侧导航栏点击「模板管理」
2. 点击「创建模板」按钮
3. 输入模板名称和描述
4. 选择要包含的模组
5. 点击「保存」完成创建
### 模板应用失败怎么办?
- 检查目标游戏目录权限
- 确认模板与目标游戏版本兼容
- 查看应用日志获取详细错误信息
## 其他问题
### 如何更改语言?
1. 在顶部导航栏点击「设置」
2. 选择「语言」选项
3. 从下拉菜单中选择要使用的语言
4. 点击「保存」应用更改
### 如何更新 DeEarthX-CE
- 自动更新:应用会定期检查更新并提示安装
- 手动更新:访问 GitHub Releases 页面下载最新版本并安装
### 如何贡献代码?
请参考「贡献」部分的文档,了解如何参与项目开发。
### 遇到其他问题怎么办?
- 查看应用日志获取详细错误信息
- 访问 GitHub Issues 页面提交问题
- 加入社区 Discord 服务器寻求帮助

View File

@@ -0,0 +1,82 @@
# 安装指南
## 系统要求
在安装 DeEarthX-CE 之前,请确保您的系统满足以下要求:
- **操作系统**Windows
- **内存**:至少 4GB RAM
- **存储空间**:至少 1GB 可用空间
- **Java**:开服模式需要 Java 环境(上传模式不需要)
- **Node.js**v16.0+(仅开发环境需要)
- **Rust**:最新稳定版(仅开发环境需要)
## 安装方法
### 从安装包安装
1. 直接下载安装包
2. 运行安装程序并按照提示完成安装
3. 启动 DeEarthX-CE 应用
**注意**:建议不要安装在 C 盘,避免权限问题。
### 从源代码构建
如果您需要从源代码构建 DeEarthX-CE请按照以下步骤操作
1. **克隆仓库**
```bash
git clone https://github.com/yourusername/DeEarthX-CE.git
cd DeEarthX-CE
```
2. **安装依赖**
```bash
pnpm install
```
3. **构建项目**
```bash
pnpm run build
```
4. **启动开发服务器**(可选)
```bash
pnpm run dev
```
5. **打包应用**
```bash
pnpm run tauri build
```
## 首次启动
首次启动 DeEarthX-CE 时,您会直接进入主界面,可以开始使用以下功能:
1. 选择工作模式(开服模式或上传模式)
2. 上传整合包文件
3. 查看和管理模板
语言设置可以在设置页面中随时更改。
## 常见安装问题
### 无法启动应用
- 检查是否满足系统要求
- 尝试以管理员身份运行
- 查看应用日志获取详细错误信息
### 模组平台连接失败
- 检查网络连接
- 确认防火墙未阻止应用访问网络
- 尝试更新应用到最新版本
### 权限错误
- 确保应用有足够的权限访问 Minecraft 目录
- 在 Windows 上尝试以管理员身份运行
- 在 macOS 上检查应用权限设置

View File

@@ -0,0 +1,40 @@
# 项目介绍
## 什么是 DeEarthX-CE
DeEarthX-CE 是一个功能强大的 Minecraft 整合包服务端制作工具,旨在简化客户端整合包到服务端的转换过程,同时提供模组管理和模板系统功能。
## 核心功能
- **整合包支持**:支持 CurseForge、Modrinth、MCBBS 等多个平台的整合包
- **智能模组处理**:自动区分客户端和服务端模组,保留服务端需要的,剔除客户端专用的(光影、材质包等)
- **双工作模式**
- 开服模式:下载服务端和模组加载器,完整生成服务端
- 上传模式:只做模组筛选,不下载服务端文件
- **多模组加载器支持**:支持 Forge、NeoForge、Fabric
- **版本兼容**:支持 Minecraft 1.16.5 到最新版本
- **模板管理**
- 创建、编辑、删除本地模板
- 导入/导出模板
- 模板商店,支持从远程下载模板
- 智能下载速度测试,选择最快的下载链接
- **多语言支持**:内置多种语言支持,满足不同地区用户的需求
- **用户友好界面**:直观的图形界面,降低使用门槛
## 技术架构
DeEarthX-CE 采用前后端分离架构:
- **后端**:使用 TypeScript + Node.js 开发Express 提供 Web 服务WebSocket 实时通信,使用 Node.js SEA 打包为独立 exe
- **前端**:使用 Vue 3 + TypeScript 开发Tauri 2 桌面框架Ant Design Vue UI 组件Tailwind CSS 样式
## 适用场景
- 服务器管理员快速将客户端整合包转换为服务端
- 模组开发者测试不同版本的模组兼容性
- 模组包制作者创建和分享模组包
- 普通玩家管理个人模组集合和模板
## 项目状态
DeEarthX-CE 目前处于积极开发阶段,欢迎社区贡献和反馈。

View File

@@ -0,0 +1,743 @@
# 模板编写教程
## 什么是模板
模板是 DeEarthX-CE 中的一种功能,用于快速创建具有特定配置的服务器环境。模板可以包含预设的模组、配置文件、脚本和其他服务器文件,使您能够快速部署标准化的服务器设置,无需每次都手动配置。
### 模板的优势
- **快速部署**:使用模板可以在几分钟内搭建好一个完整的服务器环境
- **标准化配置**:确保所有服务器都使用相同的配置,减少人为错误
- **易于维护**:集中管理模板,更新模板后所有使用该模板的服务器都能受益
- **便于分享**:可以轻松导出和分享模板,让其他人快速搭建相同的服务器环境
## 模板的详细结构
一个完整的模板包含以下结构:
```
templates/
└── template-name/ # 模板目录,名称应简洁明了
├── metadata.json # 模板元数据文件
└── data/ # 模板文件目录
├── mods/ # 模组文件目录
├── config/ # 配置文件目录
├── scripts/ # 脚本文件目录
├── plugins/ # 插件文件目录(如果使用 Bukkit/Spigot 等)
├── server.properties # 服务器属性文件
├── eula.txt # 最终用户许可协议
├── README.txt # 模板说明文件
└── ... # 其他服务器相关文件
```
### metadata.json 文件详解
`metadata.json` 文件包含模板的基本信息,是模板的核心文件,必须存在且格式正确:
```json
{
"name": "生存服务器模板", #
"version": "1.0.0", #
"description": "适用于生存模式的服务器模板,包含基础模组和优化配置", #
"author": "DeEarthX-CE", #
"created": "2026-03-09", # YYYY-MM-DD
"type": "template" # "template"
}
```
**字段说明**
- `name`:模板的显示名称,会在 DeEarthX-CE 界面中显示
- `version`模板的版本号建议遵循语义化版本规范MAJOR.MINOR.PATCH
- `description`:模板的详细描述,应说明模板的用途、包含的内容和适用场景
- `author`:模板的作者名称
- `created`:模板的创建日期,格式为 YYYY-MM-DD
- `type`:模板类型,固定为 "template",用于 DeEarthX-CE 识别
### data 目录详解
`data` 目录包含服务器的所有文件,是模板的核心内容:
#### 1. mods 目录
用于存放模组文件(.jar根据服务器类型和版本放置相应的模组
- **Fabric 服务器**:需要放置 fabric-api 和其他 Fabric 模组
- **Forge 服务器**:需要放置 Forge 模组
- **NeoForge 服务器**:需要放置 NeoForge 模组
#### 2. config 目录
用于存放配置文件,包括:
- 模组配置文件(.toml, .json, .cfg 等)
- 服务器配置文件
- 插件配置文件
#### 3. scripts 目录
用于存放启动脚本和其他脚本文件:
- `start.bat`Windows 启动脚本
- `start.sh`Linux/Mac 启动脚本
- 其他自定义脚本
#### 4. server.properties 文件
服务器的核心配置文件,包含服务器的基本设置:
```properties
# 服务器基本设置
server-name=DeEarthX Server
motd=Welcome to DeEarthX Server!
gamemode=survival
difficulty=normal
# 服务器网络设置
server-port=25565
max-players=20
# 服务器功能设置
spawn-protection=16
enable-command-block=true
pvp=true
# 世界设置
level-name=world
seed=
generate-structures=true
# 性能设置
view-distance=10
max-build-height=256
simulation-distance=10
# 其他设置
enable-rcon=false
rcon.password=
```
#### 5. eula.txt 文件
最终用户许可协议,必须设置为 `eula=true` 才能启动服务器:
```
eula=true
```
#### 6. README.txt 文件
模板的说明文件,建议包含以下内容:
- 模板的用途和特点
- 包含的模组和插件
- 使用方法
- 注意事项
- 更新日志
## 创建模板的详细方法
### 方法一:通过 DeEarthX-CE 界面创建
1. **打开模板管理界面**
- 启动 DeEarthX-CE
- 在左侧导航栏点击「模板管理」
2. **创建新模板**
- 点击「创建模板」按钮
- 在弹出的对话框中填写模板信息:
- **模板名称**:输入一个简洁明了的名称
- **版本号**:输入初始版本号,如 "1.0.0"
- **描述**:输入详细的模板描述
- **作者**:输入您的名称
- 点击「确认」按钮
3. **编辑模板内容**
- 模板创建完成后,在模板列表中找到新创建的模板
- 点击「打开文件夹」按钮
- 在打开的文件夹中,将您的服务器文件复制到 `data` 目录
- 确保目录结构正确,包含所有必要的文件
4. **验证模板**
- 关闭文件夹,返回 DeEarthX-CE 界面
- 刷新模板列表,确保新模板显示正确
- 点击「编辑」按钮,确认模板信息无误
### 方法二:手动创建模板
1. **定位 templates 目录**
- 打开文件浏览器
- 导航到 DeEarthX-CE 的安装目录
- 找到 `templates` 文件夹
2. **创建模板目录**
-`templates` 目录中创建一个新文件夹,命名为您的模板名称
- 文件夹名称应简洁明了,避免使用特殊字符
3. **创建 metadata.json 文件**
- 在模板目录中创建 `metadata.json` 文件
- 填写模板信息,确保格式正确
- 保存文件
4. **创建 data 目录**
- 在模板目录中创建 `data` 目录
-`data` 目录中创建必要的子目录(如 `mods`, `config` 等)
5. **添加服务器文件**
- 将您的服务器文件复制到相应的目录中
- 确保包含所有必要的文件,如 `server.properties`, `eula.txt`
6. **验证模板**
- 重启 DeEarthX-CE
- 打开模板管理界面,确保新模板显示在列表中
- 检查模板信息和文件结构是否正确
## 编辑模板的详细步骤
### 修改模板信息
1. **打开模板管理界面**
- 在左侧导航栏点击「模板管理」
2. **选择要编辑的模板**
- 在模板列表中找到要编辑的模板
- 点击模板卡片
3. **修改模板信息**
- 点击「编辑」按钮
- 在弹出的对话框中修改模板信息:
- 可以修改名称、版本号、描述和作者
- 点击「保存」按钮应用更改
### 修改模板文件
1. **打开模板文件夹**
- 在模板管理界面中找到要编辑的模板
- 点击「打开文件夹」按钮
2. **修改文件**
- 在打开的文件夹中,修改 `data` 目录中的文件
- 可以添加、删除或修改任何文件
3. **保存更改**
- 保存所有修改的文件
- 关闭文件夹
4. **验证更改**
- 返回 DeEarthX-CE 界面
- 刷新模板列表
- 确认模板文件已更新
## 模板最佳实践
### 命名规范
- **模板名称**:应简洁明了,反映模板的用途,如 "生存服务器模板"、"模组包服务器模板"
- **版本号**应遵循语义化版本规范MAJOR.MINOR.PATCH
- MAJOR重大更改不兼容的 API 变更
- MINOR功能性新增向后兼容
- PATCHbug 修复,向后兼容
- **目录名称**:应使用小写字母,单词之间用连字符或下划线分隔,如 "survival-server"、"modpack-server"
### 文件组织
- **保持目录结构一致**:遵循标准 Minecraft 服务器目录结构
- **分类存放文件**
- 模组文件放在 `data/mods` 目录
- 配置文件放在 `data/config` 目录
- 脚本文件放在 `data/scripts` 目录
- 插件文件放在 `data/plugins` 目录(如果使用 Bukkit/Spigot 等)
- **使用子目录**:对于复杂的模板,可以在 `config` 目录中为不同的模组创建子目录
### 内容建议
- **包含必要的文件**
- `server.properties`:服务器基本配置
- `eula.txt`:设置为 `eula=true`
- `README.txt`:模板说明
- 必要的模组和插件
- 启动脚本(`start.bat``start.sh`
- **模组管理**
- 选择稳定版本的模组
- 确保模组之间兼容
- 包含模组的依赖项
- 定期更新模组版本
- **配置优化**
- 优化服务器性能配置
- 根据服务器类型和规模调整配置参数
- 提供合理的默认配置
- **文档完善**
-`README.txt` 中详细说明模板的使用方法
- 列出模板包含的模组和插件
- 提供故障排除指南
- 记录更新日志
### 测试建议
- **本地测试**:在本地环境中测试模板,确保服务器能够正常启动
- **功能测试**:测试模板中的所有功能,确保模组和插件正常工作
- **性能测试**:测试服务器在不同负载下的性能
- **兼容性测试**:测试模板与不同版本的 Minecraft 客户端的兼容性
## 详细模板示例
### 示例一:基础生存服务器模板
```
templates/
basic-survival-server/
├── metadata.json
└── data/
├── mods/
│ ├── fabric-api-0.90.4+1.20.1.jar # Fabric API
│ ├── lithium-0.11.2.jar # 性能优化模组
│ ├── phosphor-0.8.2+1.20.1.jar # 照明优化
│ └── sodium-0.4.10+build.27.jar # 渲染优化
├── config/
│ ├── lithium.toml # Lithium 配置
│ └── sodium-options.json # Sodium 配置
├── scripts/
│ ├── start.bat # Windows 启动脚本
│ └── start.sh # Linux/Mac 启动脚本
├── server.properties # 服务器配置
├── eula.txt # 最终用户许可协议
└── README.txt # 模板说明
```
**metadata.json**
```json
{
"name": "基础生存服务器模板",
"version": "1.0.0",
"description": "适用于生存模式的基础服务器模板,包含性能优化模组和基本配置",
"author": "DeEarthX-CE",
"created": "2026-03-09",
"type": "template"
}
```
**README.txt**
```
# 基础生存服务器模板
## 模板说明
这是一个适用于 Minecraft 1.20.1 版本的基础生存服务器模板,包含以下内容:
### 包含的模组
- Fabric API 0.90.4+1.20.1
- Lithium 0.11.2 (性能优化)
- Phosphor 0.8.2+1.20.1 (照明优化)
- Sodium 0.4.10+build.27 (渲染优化)
### 使用方法
1. 使用 DeEarthX-CE 应用此模板
2. 运行 start.bat (Windows) 或 start.sh (Linux/Mac) 启动服务器
3. 首次启动会生成世界文件
4. 服务器默认端口25565
### 配置说明
- 服务器模式:生存
- 难度:普通
- 最大玩家数20
- 查看距离10
- 模拟距离10
### 注意事项
- 确保已安装 Java 17 或更高版本
- 首次启动服务器时会自动生成世界文件
- 如需修改服务器配置,请编辑 server.properties 文件
### 更新日志
- v1.0.0:初始版本
```
### 示例二:模组包服务器模板
```
templates/
modpack-server/
├── metadata.json
└── data/
├── mods/
│ ├── fabric-api-0.90.4+1.20.1.jar # Fabric API
│ ├── lithium-0.11.2.jar # 性能优化
│ ├── sodium-0.4.10+build.27.jar # 渲染优化
│ ├── iris-1.6.4.jar # 光影支持
│ ├── create-0.5.1.f.jar # Create 模组
│ ├── immersive-engineering-1.20.1-10.2.1-177.jar # 沉浸工程
│ └── thermal-foundation-1.20.1-11.1.0.38.jar # 热力基础
├── config/
│ ├── create.toml # Create 配置
│ ├── immersiveengineering.cfg # 沉浸工程配置
│ ├── thermalfoundation-common.toml # 热力基础配置
│ └── sodium-options.json # Sodium 配置
├── scripts/
│ ├── start.bat # Windows 启动脚本
│ └── start.sh # Linux/Mac 启动脚本
├── server.properties # 服务器配置
├── eula.txt # 最终用户许可协议
└── README.txt # 模板说明
```
**metadata.json**
```json
{
"name": "模组包服务器模板",
"version": "1.0.0",
"description": "包含 Create、沉浸工程和热力系列模组的服务器模板适用于科技向玩法",
"author": "DeEarthX-CE",
"created": "2026-03-09",
"type": "template"
}
```
**README.txt**
```
# 模组包服务器模板
## 模板说明
这是一个适用于 Minecraft 1.20.1 版本的模组包服务器模板,包含以下内容:
### 包含的模组
- Fabric API 0.90.4+1.20.1
- Lithium 0.11.2 (性能优化)
- Sodium 0.4.10+build.27 (渲染优化)
- Iris 1.6.4 (光影支持)
- Create 0.5.1.f (机械mod)
- Immersive Engineering 1.20.1-10.2.1-177 (工业mod)
- Thermal Foundation 1.20.1-11.1.0.38 (热力系列)
### 使用方法
1. 使用 DeEarthX-CE 应用此模板
2. 运行 start.bat (Windows) 或 start.sh (Linux/Mac) 启动服务器
3. 首次启动会生成世界文件和配置文件
4. 服务器默认端口25565
### 配置说明
- 服务器模式:生存
- 难度:普通
- 最大玩家数30
- 查看距离12
- 模拟距离10
### 注意事项
- 确保已安装 Java 17 或更高版本
- 首次启动服务器时会自动生成世界文件和配置文件
- 如需修改服务器配置,请编辑 server.properties 文件
- 如需修改模组配置,请编辑 config 目录中的相应文件
### 推荐客户端模组
- Fabric API
- Sodium
- Iris
- Create
- Immersive Engineering
- Thermal Foundation
### 更新日志
- v1.0.0:初始版本
```
### 示例三: Bukkit/Spigot 服务器模板
```
templates/
bukkit-server/
├── metadata.json
└── data/
├── plugins/
│ ├── EssentialsX-2.20.1.jar # 基础插件
│ ├── LuckPerms-5.4.108.jar # 权限管理
│ ├── WorldEdit-7.2.14.jar # 世界编辑
│ └── WorldGuard-7.0.9.jar # 世界保护
├── config/
│ ├── Essentials/ # Essentials 配置
│ ├── LuckPerms/ # LuckPerms 配置
│ └── WorldGuard/ # WorldGuard 配置
├── scripts/
│ ├── start.bat # Windows 启动脚本
│ └── start.sh # Linux/Mac 启动脚本
├── server.properties # 服务器配置
├── eula.txt # 最终用户许可协议
└── README.txt # 模板说明
```
**metadata.json**
```json
{
"name": "Bukkit服务器模板",
"version": "1.0.0",
"description": "包含基础插件的 Bukkit/Spigot 服务器模板,适用于生存和创造模式",
"author": "DeEarthX-CE",
"created": "2026-03-09",
"type": "template"
}
```
**README.txt**
```
# Bukkit服务器模板
## 模板说明
这是一个适用于 Minecraft 1.20.1 版本的 Bukkit/Spigot 服务器模板,包含以下内容:
### 包含的插件
- EssentialsX 2.20.1 (基础插件)
- LuckPerms 5.4.108 (权限管理)
- WorldEdit 7.2.14 (世界编辑)
- WorldGuard 7.0.9 (世界保护)
### 使用方法
1. 使用 DeEarthX-CE 应用此模板
2. 运行 start.bat (Windows) 或 start.sh (Linux/Mac) 启动服务器
3. 首次启动会生成世界文件和配置文件
4. 服务器默认端口25565
### 配置说明
- 服务器模式:生存
- 难度:普通
- 最大玩家数50
- 查看距离10
- 模拟距离10
### 注意事项
- 确保已安装 Java 17 或更高版本
- 首次启动服务器时会自动生成世界文件和配置文件
- 如需修改服务器配置,请编辑 server.properties 文件
- 如需修改插件配置,请编辑 config 目录中的相应文件
### 插件说明
- EssentialsX提供基础命令和功能
- LuckPerms管理用户权限
- WorldEdit用于编辑世界
- WorldGuard保护世界区域
### 更新日志
- v1.0.0:初始版本
```
## 常见问题详细解答
### 模板不显示在列表中
**可能原因**
- `metadata.json` 文件格式错误
- 模板目录结构不符合要求
- DeEarthX-CE 未正确加载模板
**解决方案**
1. **检查 metadata.json 文件**
- 确保文件格式正确,使用有效的 JSON 格式
- 确保包含所有必要的字段name, version, description, author, created, type
- 确保字段值格式正确,特别是 created 字段的日期格式
2. **检查目录结构**
- 确保模板目录包含 metadata.json 文件
- 确保模板目录包含 data 子目录
- 确保 data 目录结构符合要求
3. **重启 DeEarthX-CE**
- 关闭 DeEarthX-CE
- 重新启动 DeEarthX-CE
- 打开模板管理界面,查看模板是否显示
4. **检查文件权限**
- 确保模板目录和文件具有正确的权限
- 确保 DeEarthX-CE 可以读取模板文件
### 应用模板失败
**可能原因**
- 模板中的文件不完整
- 模板中的模组版本与服务器版本不兼容
- 服务器目录权限不足
- 磁盘空间不足
**解决方案**
1. **检查模板文件**
- 确保模板包含所有必要的文件
- 确保文件路径正确
- 确保文件内容完整
2. **检查模组兼容性**
- 确保模板中的模组版本与服务器版本兼容
- 确保模组之间相互兼容
- 确保包含所有必要的依赖模组
3. **检查服务器目录**
- 确保服务器目录存在
- 确保服务器目录具有写入权限
- 确保磁盘空间充足
4. **查看错误日志**
- 查看 DeEarthX-CE 的日志文件
- 查看服务器启动日志
- 根据错误信息进行排查
### 如何分享模板
**步骤**
1. **导出模板**
- 在模板管理界面选择要分享的模板
- 点击「导出模板」按钮
- 选择保存位置
- 等待导出完成
2. **分享模板**
- 将导出的文件发送给其他用户
- 可以通过邮件、云存储或其他方式分享
3. **导入模板**
- 其他用户打开 DeEarthX-CE
- 点击「导入模板」按钮
- 选择导出的模板文件
- 等待导入完成
- 模板将显示在模板列表中
### 如何更新模板
**步骤**
1. **修改模板**
- 编辑模板信息(名称、版本号、描述等)
- 修改模板文件(添加、删除或更新文件)
2. **更新版本号**
- 根据修改的程度更新版本号:
- 小修改(如配置调整):更新 PATCH 版本(如 1.0.1
- 功能性修改(如添加模组):更新 MINOR 版本(如 1.1.0
- 重大修改(如更改服务器类型):更新 MAJOR 版本(如 2.0.0
3. **测试更新**
- 在本地环境中测试更新后的模板
- 确保服务器能够正常启动
- 确保所有功能正常工作
4. **分享更新**
- 导出更新后的模板
- 分享给其他用户
- 提供更新日志,说明更改内容
### 如何优化模板性能
**优化建议**
1. **模组选择**
- 选择性能友好的模组
- 避免使用过多的模组
- 定期更新模组到最新版本
2. **服务器配置**
- 调整 server.properties 中的性能参数
- 合理设置 view-distance 和 simulation-distance
- 启用适当的世界生成设置
3. **JVM 配置**
- 在启动脚本中添加适当的 JVM 参数
- 根据服务器硬件配置调整内存分配
- 使用垃圾收集器优化参数
4. **世界管理**
- 定期清理未使用的区块
- 限制世界大小
- 使用世界预生成工具
## 模板使用场景
### 场景一:快速部署服务器
**适用情况**
- 需要快速搭建一个标准服务器
- 避免手动配置的繁琐过程
- 确保服务器配置一致
**使用方法**
1. 选择适合的模板
2. 应用模板到目标目录
3. 启动服务器
### 场景二:标准化服务器配置
**适用情况**
- 管理多个服务器
- 确保所有服务器使用相同的配置
- 简化服务器维护
**使用方法**
1. 创建一个标准模板
2. 应用模板到所有服务器
3. 更新模板后,重新应用到所有服务器
### 场景三:分享服务器配置
**适用情况**
- 与朋友分享服务器设置
- 发布服务器配置方案
- 备份服务器配置
**使用方法**
1. 创建并测试模板
2. 导出模板
3. 分享给其他用户
### 场景四:测试新模组
**适用情况**
- 测试新模组的兼容性
- 测试模组的性能影响
- 测试模组的功能
**使用方法**
1. 创建一个测试模板
2. 添加要测试的模组
3. 应用模板并启动服务器
4. 测试模组功能
## 模板商店
### 什么是模板商店
模板商店是 DeEarthX-CE 提供的一个功能,允许用户浏览、下载和安装由社区或官方提供的预设模板。这些模板经过精心配置,可以直接应用于您的服务器。
### 访问模板商店
1. **打开模板管理界面**
- 在导航栏点击「模板管理」
- 切换到「模板商店」标签页
2. **浏览模板**
- 查看可用的模板列表
- 每个模板显示名称、大小和描述
3. **安装模板**
- 点击模板卡片上的「安装」按钮
- 系统会自动测试多个下载链接的速度
- 选择最快的链接进行下载
- 等待下载和安装完成
- 安装的模板会出现在本地模板列表中
### 模板商店的优势
- **快速获取优质模板**:无需手动创建,直接使用社区或官方提供的模板
- **智能下载**:自动测试下载链接速度,选择最快的链接
- **定期更新**:模板商店中的模板会定期更新,确保兼容性和安全性
- **多样化选择**:提供不同类型和用途的模板,满足各种需求
## 总结
模板是 DeEarthX-CE 中非常强大的功能,可以帮助您快速部署标准化的服务器环境。通过本教程,您应该已经了解了:
- 模板的基本概念和优势
- 模板的详细结构和文件格式
- 创建模板的两种方法(通过界面和手动)
- 编辑模板的详细步骤
- 模板的最佳实践和命名规范
- 详细的模板示例
- 常见问题的解决方案
- 模板的使用场景
- 模板商店的使用方法和优势
如果您有任何问题或需要进一步的帮助,请参考常见问题部分或联系技术支持。祝您使用 DeEarthX-CE 创建和管理模板愉快!

84
word/guide/usage.md Normal file
View File

@@ -0,0 +1,84 @@
# 使用教程
## 基本操作
### 启动应用
1. 双击桌面图标或从开始菜单启动 DeEarthX-CE
2. 等待应用加载完成
3. 进入主界面
### 界面介绍
DeEarthX-CE 主界面包含以下主要部分:
- **顶部导航栏**:包含不同功能模块的切换按钮
- **主内容区**:显示当前功能的详细内容
## 整合包转换
### 开服模式
1. 在主界面选择「开服模式」
2. 上传整合包文件
3. 等待系统自动处理:
- 分析整合包内容
- 区分客户端和服务端模组
- 下载服务端文件和模组加载器
- 生成完整的服务端
4. 下载生成的服务端文件
### 上传模式
1. 在主界面选择「上传模式」
2. 上传整合包文件
3. 等待系统自动处理:
- 分析整合包内容
- 区分客户端和服务端模组
4. 下载筛选后的服务端文件
## 模板管理
### 本地模板管理
1. 在导航栏点击「模板管理」
2. 在「本地模板」标签页中:
- **创建模板**:点击「创建模板」按钮,输入模板名称、版本、描述和作者
- **编辑模板**:选择模板,点击「编辑」按钮修改模板信息
- **删除模板**:选择模板,点击「删除」按钮移除模板
- **导出模板**:选择模板,点击「导出」按钮下载模板文件
- **打开模板文件夹**:选择模板,点击「打开文件夹」按钮查看模板文件
### 导入模板
1. 在模板管理页面点击「导入模板」按钮
2. 选择模板文件(.zip格式
3. 等待导入完成
4. 导入的模板会出现在本地模板列表中
### 模板商店
1. 在模板管理页面切换到「模板商店」标签页
2. 浏览可用的模板
3. 点击模板卡片上的「安装」按钮
4. 系统会自动测试下载链接速度并选择最快的链接
5. 等待下载和安装完成
6. 安装的模板会出现在本地模板列表中
## 多语言设置
1. 在导航栏点击「设置」
2. 从语言下拉菜单中选择要使用的语言
3. 系统会立即应用语言更改
## 高级功能
### 下载速度测试
- 当从模板商店下载模板时,系统会自动测试多个下载链接的速度
- 选择最快的链接进行下载,确保下载速度最优
### 实时进度显示
- 所有操作(上传、处理、下载)都有实时进度显示
- 可以查看当前操作的详细进度和状态

33
word/index.md Normal file
View File

@@ -0,0 +1,33 @@
---
# https://vitepress.dev/reference/default-theme-home-page
layout: home
hero:
name: "DeEarthX-CE"
text: "Minecraft 整合包服务端制作工具"
tagline: 简单、高效的 Minecraft 整合包到服务端转换解决方案
actions:
- theme: brand
text: 开始使用
link: /guide/introduction
- theme: alt
text: API 文档
link: /api/core
features:
- title: 多平台支持
details: 支持 CurseForge、Modrinth、MCBBS 等多个模组平台
- title: 智能模组处理
details: 自动区分客户端和服务端模组,保留服务端需要的
- title: 双工作模式
details: 开服模式(完整生成服务端)和上传模式(仅筛选模组)
- title: 多加载器支持
details: 支持 Forge、NeoForge、Fabric 模组加载器
- title: 模板管理
details: 创建、编辑、导入/导出模板,支持模板商店
- title: 智能下载
details: 自动测试下载链接速度,选择最快的链接
- title: 多语言支持
details: 支持中文、英文等多种语言
---

85
word/markdown-examples.md Normal file
View File

@@ -0,0 +1,85 @@
# Markdown Extension Examples
This page demonstrates some of the built-in markdown extensions provided by VitePress.
## Syntax Highlighting
VitePress provides Syntax Highlighting powered by [Shiki](https://github.com/shikijs/shiki), with additional features like line-highlighting:
**Input**
````md
```js{4}
export default {
data () {
return {
msg: 'Highlighted!'
}
}
}
```
````
**Output**
```js{4}
export default {
data () {
return {
msg: 'Highlighted!'
}
}
}
```
## Custom Containers
**Input**
```md
::: info
This is an info box.
:::
::: tip
This is a tip.
:::
::: warning
This is a warning.
:::
::: danger
This is a dangerous warning.
:::
::: details
This is a details block.
:::
```
**Output**
::: info
This is an info box.
:::
::: tip
This is a tip.
:::
::: warning
This is a warning.
:::
::: danger
This is a dangerous warning.
:::
::: details
This is a details block.
:::
## More
Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown).

10
word/package.json Normal file
View File

@@ -0,0 +1,10 @@
{
"scripts": {
"docs:dev": "vitepress dev",
"docs:build": "vitepress build",
"docs:preview": "vitepress preview"
},
"devDependencies": {
"vitepress": "^1.6.4"
}
}