minecraft-utils-shared
Version:
Shared utils for Minecraft Bedrock / Forge development related utilities.
219 lines (204 loc) • 8.17 kB
JavaScript
;
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;