UNPKG

bedrock-development

Version:

APIs for creating and editing files related to Minecraft Bedrock development.

86 lines (85 loc) 6.13 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var _a; import { Argument } from "commander"; import { Directories, copySourceFile, setFiles } from "../../file_manager.js"; import { v4 } from "uuid"; import { CommandMap } from "../command_map.js"; import { BehaviorManifest, ResourceManifest, SkinsManifest, WorldManifest } from "../../types/manifest.js"; CommandMap.addCommand("root.new.project", { parent: (_a = CommandMap.getCommandEntry("root.new")) === null || _a === void 0 ? void 0 : _a.command, commandOptions(command) { command .name("project") .description("creates a minecraft development project") .addArgument(new Argument("<name>", 'the project name, folders will be output as "behavior_packs/<name>_bp" and "behavior_packs/<name>_rp"')) .option("-d, --display <display name>", "A display name to be used in your lang file, if different from your folder names") .option("-a, --author <author name>", "The credits name as a team or an individual"); }, commandAction: triggerCreateNewProject, }); function triggerCreateNewProject(name, options) { var _a; return __awaiter(this, void 0, void 0, function* () { const bpFiles = []; const rpFiles = []; const rootFiles = []; const skinFiles = []; const bpUUID = v4(); const rpUUID = v4(); Directories.BEHAVIOR_PATH = `Content/world_template/behavior_packs/${name}_bp`; Directories.RESOURCE_PATH = `Content/world_template/resource_packs/${name}_rp`; const displayName = (_a = options.display) !== null && _a !== void 0 ? _a : name; // Create Default Behavior Pack Files const bpManifest = BehaviorManifest.createFromTemplate(); bpManifest.header.uuid = bpUUID; bpManifest.addDependencies([rpUUID], ["@minecraft/server", "@minecraft/server-ui"]); bpFiles.push(bpManifest.toFile(), { filePath: `${Directories.BEHAVIOR_PATH}texts/languages.json`, fileContents: JSON.stringify(["en_US"], null, '\t') }, { filePath: `${Directories.BEHAVIOR_PATH}texts/en_US.lang`, fileContents: `${`## BEHAVIOR PACK MANIFEST `.padEnd(118, '=')}\npack.name=${displayName}\npack.description=This behavior pack is required for ${displayName} to run properly.` }); copySourceFile('images/pack_icon.png', Directories.BEHAVIOR_PATH + 'pack_icon.png'); setFiles(bpFiles); // Create Default Resource Pack Files const rpManifest = ResourceManifest.createFromTemplate(); rpManifest.header.uuid = rpUUID; rpManifest.addDependencies([bpUUID]); rpFiles.push(rpManifest.toFile(), { filePath: `${Directories.RESOURCE_PATH}texts/languages.json`, fileContents: JSON.stringify(["en_US"], null, '\t') }, { filePath: `${Directories.RESOURCE_PATH}texts/en_US.lang`, fileContents: `${`## RESOURCE PACK MANIFEST `.padEnd(118, '=')}\npack.name=${displayName}\npack.description=This resource pack is required for ${displayName} to run properly.` }); copySourceFile('images/pack_icon.png', Directories.RESOURCE_PATH + 'pack_icon.png'); setFiles(rpFiles); // Create General Files const rootManifest = WorldManifest.createFromTemplate(); rootManifest.addAuthors([options.author]); rootFiles.push(rootManifest.toFile(), { filePath: `Content/world_template/world_behavior_packs.json`, fileContents: JSON.stringify([{ pack_id: bpUUID, version: [1, 0, 0] }], null, '\t') }, { filePath: `Content/world_template/world_resource_packs.json`, fileContents: JSON.stringify([{ pack_id: rpUUID, version: [1, 0, 0] }], null, '\t') }, { filePath: `Content/world_template/texts/languages.json`, fileContents: JSON.stringify(["en_US"], null, '\t') }, { filePath: `Content/world_template/texts/en_US.lang`, fileContents: `pack.name=${displayName}\npack.description=By ${options.author}` }, { filePath: `.vscode/launch.json`, fileContents: JSON.stringify({ version: "0.3.0", configurations: [ { type: "minecraft-js", request: "attach", name: "Debug with Minecraft", mode: "listen", targetModuleUuid: bpUUID, localRoot: `\${workspaceFolder}/Content/world_template/behavior_packs/${name}_bp/scripts/`, port: 19144 } ] }, null, '\t') }); setFiles(rootFiles); // Create Skin Pack Files const skinsManifest = SkinsManifest.createFromTemplate(); skinFiles.push(skinsManifest.toFile(), { filePath: `Content/skin_pack/skins.json`, fileContents: JSON.stringify({ serialize_name: options.author, localization_name: options.author, skins: [ { localization_name: "template", geometry: "geometry.humanoid.custom", texture: "template.png", type: "paid" } ] }, null, '\t') }, { filePath: `Content/skin_pack/texts/languages.json`, fileContents: JSON.stringify(["en_US"], null, '\t') }, { filePath: `Content/skin_pack/texts/en_US.lang`, fileContents: `skin.${options.author}.template=Template\nskinpack.${options.author}=${options.display}` }); copySourceFile('images/skin.png', 'Content/skin_pack/template.png'); setFiles(skinFiles); }); }