Skip to content

build export zh

laurel Lin edited this page Aug 22, 2026 · 2 revisions

src/build/export.ts — 导出轨道模型

导出层:把当前工作区轨道大组(名 = 工作区名)下的各分组,按四种模式(new_java / classic_java / bedrock / obj)导出到用户指定文件夹。

导出配置用与「生成」类似的单页大对话框收集(左侧配置 / 右侧每张纹理的资源路径):导出模式 / 命名空间 / 轨道 id 由用户填写;导出根目录 = 资源包 assets/{命名空间} 所在目录(所有文件写到这里,归类为 models/ textures/ blockstates/);模型资源路径 = blockstates 引用模型用的 {命名空间}:path/file 的 path(默认 block/track/{轨道id}),每张纹理也各有自己的资源路径。所有路径字段都可手动编辑并预置 默认值;文件内引用直接用这些资源路径。

文件写入用 Blockbench 的 scoped require('fs', { scope })(桌面端,首次会请求「访问文件夹」权限); Node 冒烟测试里用 global.require 桩替换。无法导出的判定与各格式序列化在纯逻辑层 src/logic/export.ts。

常量

export const TRACK_PARENT_NAME = '机械动力轨道';  // 轨道大组(父分组)名

类型

export interface ExportOptions {
	mode: ExportMode;
	namespace: string;
	trackId: string;
	root: string;        // 导出根目录(资源包 assets/{命名空间} 所在目录)
	modelPath: string;   // 模型资源路径(blockstates 引用模型用的 {命名空间}:path/file 的 path)
	texturePaths: Record<string, string>;  // texture key → 纹理资源路径
}

// 冒烟测试驱动导出对话框的钩子(真实 Blockbench 不依赖它)
export interface ExportDriver {
	setMode(mode: ExportMode): void;
	setNamespace(v: string): void;
	setTrackId(v: string): void;
	setRoot(v: string): void;
	setModelPath(v: string): void;
	setTexturePath(key: string, v: string): void;
	confirm(): boolean;
	getState(): ExportFormState;
}

样式注入

// 注入 / 卸载时清理导出对话框样式(有 document 时;Node 冒烟测试安全跳过)
export function injectExportStyles(): void;
export function disposeExportStyles(): void;

导出对话框

// 导出配置对话框(两列,路径字段可编辑 + 「浏览…」/「重置」按钮);返回 null 表示取消
export function promptExportOptions(
	defaultTrackId: string,
	textures: ExportTexture[]
): Promise<ExportOptions | null>;

导出主流程

// 在当前工作区查找轨道大组(名 = 工作区名)
export function findTrackGroup(): Group | null;

// 把一个分组的体块/网格烘焙成单一合并网格的 OBJ + MTL(单一 o 对象,Forge 可读),纹理经
// usemtl m_<key> + MTL map_Kd {ns}:block/track/{id}/{res} 绑定;坐标为方块单位(px/16)
export function exportGroupAsObj(opts: {
	group: Group;
	mtlName: string;
	namespace: string;
	trackId: string;
	texInfos: ExportTexture[];
	keyOf: Map<Texture, string>;
	texturePathOf?: Record<string, string>;
}): { obj: string; mtl: string };

// 把轨道大组下的各分组按 mode 导出到配置目录:Java → 元素模型 JSON + 纹理(无法导出的回退 OBJ);
// obj → 全部分组烘焙为合并 OBJ 网格(.obj + .mtl + forge:obj 引用 JSON);bedrock → minecraft:geometry
// + blocks.json + 纹理(无法导出的回退 OBJ)。Java/OBJ 写 blockstates 到 root,基岩版写 blocks.json。
// 返回统计信息(写出的文件、跳过的分组、警告)。
export function writeTrackExport(opts: ExportOptions & {
	subgroups: Group[];
	texInfos: ExportTexture[];
	keyOf: Map<Texture, string>;
}): { files: number; skipped: string[]; warnings: string[] };

// 导出主流程:找大组 → 收集纹理 → 大对话框 → 写文件 → 汇总
export async function runTrackExport(): Promise<void>;

← 返回中文接口文档

Clone this wiki locally