Repository navigation
build export zh
laurel Lin edited this page Aug 22, 2026
·
2 revisions
导出层:把当前工作区轨道大组(名 = 工作区名)下的各分组,按四种模式(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>;← 返回中文接口文档