bedrock-development
Version:
APIs for creating and editing files related to Minecraft Bedrock development.
86 lines (85 loc) • 6.13 kB
JavaScript
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);
});
}