UNPKG

minecraft-utils-shared

Version:

Shared utils for Minecraft Bedrock / Forge development related utilities.

219 lines (204 loc) 8.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _os = _interopRequireDefault(require("os")); var _path = _interopRequireDefault(require("path")); var _child_process = require("child_process"); var _component = _interopRequireDefault(require("./component.cjs")); var _default_path = _interopRequireDefault(require("./../utils/default_path.cjs")); var _normalizer = _interopRequireDefault(require("./../helper/normalizer.cjs")); var _toml_file = _interopRequireDefault(require("./../formats/toml_file.cjs")); var _translation = _interopRequireDefault(require("./../utils/translation.cjs")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * @file Minecraft Utils Shared - Project Config * @license Apache-2.0 * @author Markus@Bordihn.de (Markus Bordihn) */ const configVersion = '0.0.1'; /** * @enum */ const gameType = Object.freeze({ BEDROCK: 'bedrock', FORGE: 'forge', UNKNOWN: 'unknown' }); /** * @enum */ const type = Object.freeze({ ADD_ON: 'add-on', BEHAVIOR_PACK: 'behavior_pack', MOD: 'mod', RESOURCE_PACK: 'resource_pack', SKIN_PACK: 'skin_pack', UNKNOWN: 'unknown' }); // Relative Path converter const toRelativePath = folderPath => { if (_path.default.isAbsolute(folderPath)) { return _path.default.relative(projectPath, folderPath); } return folderPath; }; const gitAuthor = (0, _child_process.spawnSync)('git', ['config', 'user.name'], { shell: true }).stdout.toString().split('\n')[0].trim() || ''; const author = gitAuthor || process.env.USER || _os.default.userInfo().username || 'Author Name'; const projectId = 'new_project'; const projectPath = process.cwd(); const possibleNamespacePrefix = _translation.default.language.substring(0, 2).toLocaleLowerCase() || 'net'; const classPath = _default_path.default.forge.modPath ? _default_path.default.forge.modPath : _path.default.join(projectPath, ...'src/main/java/net/example'.split('/')); // Get java project className const className = _default_path.default.forge.modMainClassFile ? _path.default.parse(_default_path.default.forge.modMainClassFile).name : 'NewModClassName'; // Get java project namespace from java path. let namespace = ''; if (_default_path.default.forge.javaPath && _default_path.default.forge.modPath) { namespace = _default_path.default.forge.modPath.replace(_default_path.default.forge.javaPath, '').replace(/[\\/\\]+/gm, '.'); if (namespace.startsWith('.')) { namespace = namespace.slice(1); } } else { namespace = process.env.npm_package_config_project_namespace || `${possibleNamespacePrefix}.${_normalizer.default.normalizeModId(author)}.${projectId}` || 'net.example'; } // Get mod details from mods.toml, if any. let modDescription = ''; let modId = projectId; let modName = 'minecraft-utils-shared'; if (_default_path.default.forge.modFile) { const modDefinitionFile = _toml_file.default.read(_default_path.default.forge.modFile); if (modDefinitionFile && modDefinitionFile.mods && modDefinitionFile.mods.length == 1) { const modDefinition = modDefinitionFile.mods[0]; if (modDefinition.description) { modDescription = modDefinition.description; } if (modDefinition.modId) { modId = modDefinition.modId; } if (modDefinition.displayName) { modName = modDefinition.displayName; } } } // Assets and data path const assetsPath = _path.default.join(projectPath, ...('src/main/resources/assets/' + modId || projectId).split('/')); const dataPath = _path.default.join(projectPath, ...('src/main/resources/data/' + modId || projectId).split('/')); // GameType and Project type const projectGameType = _default_path.default.forge.modFile ? gameType.FORGE : gameType.UNKNOWN; const projectType = _default_path.default.forge.modFile && _default_path.default.forge.javaPath ? type.MOD : type.UNKNOWN; const config = { author: author, id: projectId, component: _component.default.type.PROJECT, configVersion: configVersion, gameType: projectGameType, type: projectType, license: 'MIT', bedrock: { behaviorPack: { description: 'Behavior Pack for ' + (process.env.npm_package_config_project_name || process.env.npm_package_name || 'New cool items') }, resourcePack: { description: 'Resource Pack for ' + (process.env.npm_package_config_project_name || process.env.npm_package_name || 'New cool items') }, skinPack: { description: 'Skin Pack for ' + (process.env.npm_package_config_project_name || process.env.npm_package_name || 'New cool skins') }, folderName: _normalizer.default.normalizePathName(process.env.npm_package_config_project_folder_name) || _normalizer.default.normalizePathName(process.env.npm_package_config_project_name) || _normalizer.default.normalizePathName(process.env.npm_package_name) || 'New_cool_items' }, forge: { assetsPath: toRelativePath(assetsPath), className: className, classPath: toRelativePath(classPath), dataPath: toRelativePath(dataPath), description: modDescription, namespace: namespace, templatePath: '', templatesPath: '', vendorName: `${_normalizer.default.normalizeVendorName(author)}` }, placeholder: { Author: author, ModId: modId, ModName: modName, assetsPath: toRelativePath(assetsPath), classPath: toRelativePath(classPath), dataPath: toRelativePath(dataPath), packageNamespace: namespace }, name: process.env.npm_package_config_project_name || process.env.npm_package_name || 'New Project', minEngineVersion: '1.17.1', misc: {}, version: process.env.npm_package_version || '1.0.0' }; /** * @param {Object} options * @param {string} name * @param {gameType} projectGameType * @returns {Object} */ const normalize = (options, name, projectGameType) => { const normalizedOptions = Object.assign({}, config); // Handle bedrock, forge and misc specific options. for (const [key, value] of Object.entries(options)) { if (key.startsWith('bedrock.behaviorPack.')) { normalizedOptions['bedrock']['behaviorPack'][key.replace('bedrock.behaviorPack.', '')] = value; } else if (key.startsWith('bedrock.resourcePack.')) { normalizedOptions['bedrock']['resourcePack'][key.replace('bedrock.resourcePack.', '')] = value; } else if (key.startsWith('bedrock.skinPack.')) { normalizedOptions['bedrock']['skinPack'][key.replace('bedrock.skinPack.', '')] = value; } else if (key.startsWith('bedrock.')) { normalizedOptions['bedrock'][key.replace('bedrock.', '')] = value; } else if (key.startsWith('forge.')) { normalizedOptions['forge'][key.replace('forge.', '')] = value; } else if (key.startsWith('misc.')) { normalizedOptions['misc'][key.replace('misc.', '')] = value; } else { normalizedOptions[key] = value; } } // Setting default options. if (name) { normalizedOptions.name = name; } if (projectGameType) { normalizedOptions.gameType = projectGameType; } // Add Forge specific adjustments if (options['forge.namespace']) { normalizedOptions.forge.classPath = toRelativePath(_path.default.join(process.cwd(), 'src', 'main', 'java', ...options['forge.namespace'].split('.'))); } if (options.id) { normalizedOptions.forge.assetsPath = toRelativePath(_path.default.join(process.cwd(), 'src', 'main', 'resources', 'assets', options.id)); } if (!options.placeholder) { normalizedOptions.placeholder = getPlaceholders(normalizedOptions); } return _component.default.sortObjectByKeys(normalizedOptions); }; /** * @param {object} options * @returns */ const getPlaceholders = options => { const result = { Author: options.author, ModId: options.id, ModName: options.name, assetsPath: toRelativePath(options.forge.assetsPath || ''), classPath: toRelativePath(options.forge.classPath || ''), dataPath: toRelativePath(options.forge.dataPath || ''), packageNamespace: options.forge.namespace }; return result; }; var _default = { config, normalize, gameType, type }; exports.default = _default;