minecraft-utils-shared
Version:
Shared utils for Minecraft Bedrock / Forge development related utilities.
191 lines (181 loc) โข 5.12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _component = _interopRequireDefault(require("./component.cjs"));
var _normalizer = _interopRequireDefault(require("./../helper/normalizer.cjs"));
var _placeholder = _interopRequireDefault(require("./../utils/placeholder.cjs"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @file Minecraft Utils Shared - Block Config
* @license Apache-2.0
* @author Markus@Bordihn.de (Markus Bordihn)
*/
const configVersion = '1.0.0';
/**
* @enum
*/
const type = Object.freeze({
CUSTOM: 'custom',
DOOR: 'door',
FLOWER: 'flower',
GRASS: 'grass',
LIQUID: 'liquid',
ORE: 'ore',
ROD: 'rod',
SAPLING: 'sapling',
SIMPLE: 'simple',
TEMPLATE: 'template',
TEST: 'test',
TRAP_DOOR: 'trap_door'
});
/**
* @enum
*/
const typeIcon = {};
typeIcon[type.CUSTOM] = 'โ๏ธ';
typeIcon[type.GRASS] = '๐ฟ';
typeIcon[type.ORE] = '๐';
typeIcon[type.ROD] = 'โ';
typeIcon[type.SIMPLE] = '๐ฒ';
typeIcon[type.TEMPLATE] = '๐';
typeIcon[type.TEST] = '๐งช';
/**
* @enum
*/
const creativeTab = Object.freeze({
BUILDING_BLOCKS: 'TAB_BUILDING_BLOCKS',
COMBAT: 'TAB_COMBAT',
DECORATIONS: 'TAB_DECORATIONS',
FOOD: 'TAB_FOOD',
MISC: 'TAB_MISC',
REDSTONE: 'TAB_REDSTONE',
SEARCH: 'TAB_SEARCH',
TOOLS: 'TAB_TOOLS',
TRANSPORTATION: 'TAB_TRANSPORTATION'
});
const namespace = process.env.npm_package_config_project_namespace ? process.env.npm_package_config_project_namespace.split(/[\s.]+/).pop() : 'my_block';
const config = {
component: _component.default.type.BLOCK,
configVersion: configVersion,
id: 'my_block:new_custom_block',
blockName: 'new_custom_block',
type: type.CUSTOM,
name: 'New Custom Block',
namespace: namespace,
bedrock: {
formatVersion: '1.16.1'
},
forge: {
className: ''
},
placeholder: {
BlockClassName: '',
BLOCKNAME: 'NEWCUSTOMBLOCK',
BLOCK_NAME: 'NEW_CUSTOM_BLOCK',
BlockName: 'NewCustomBlock',
blockName: 'newCustomBlock',
block_name: 'new_custom_block',
blockname: 'newcustomblock',
CreativeTab: 'TAB_MISC',
SoundType: 'SoundType.METAL'
},
template: '',
description: '',
variation: '',
icon: 'new_custom_block',
attributes: {
soundType: 'SoundType.METAL'
},
events: {},
misc: {}
};
/**
* @param {string} blockType
* @returns {string} Emoji for the given block type.
*/
const getBlockTypeIcon = blockType => {
return typeIcon[blockType] || 'โ๏ธ';
};
/**
* @param {Object} options
* @param {string} name
* @param {blockType} blockType
* @param {string} variation
* @returns {Object}
*/
const normalize = (options, name, blockType, variation) => {
const normalizedOptions = Object.assign({}, config);
// Handle block specific options.
for (const [key, value] of Object.entries(options)) {
const identifier = key.includes('.') ? key.split('.')[0] + '.' : '';
const identifierKey = identifier ? identifier.split('.')[0] : '';
switch (identifier) {
case 'attributes.':
case 'bedrock.':
case 'forge.':
if (key.startsWith(identifier)) {
if (!normalizedOptions[identifierKey]) {
normalizedOptions[identifierKey] = {};
}
normalizedOptions[identifierKey][key.substring(identifier.length)] = value;
}
break;
default:
if (key.includes('.')) {
console.warn('Possible unsupported block option', key, 'with', value);
}
normalizedOptions[key] = value;
}
}
// Setting default options, if needed.
if (name) {
normalizedOptions.name = name;
}
if (blockType) {
normalizedOptions.type = blockType;
}
if (variation) {
normalizedOptions.variation = variation;
}
if (!options.blockName) {
normalizedOptions.blockName = _normalizer.default.normalizeName(normalizedOptions.name);
}
if (!options.id) {
normalizedOptions.id = _normalizer.default.normalizeBlockId(normalizedOptions.name, normalizedOptions.namespace.includes('.') ? normalizedOptions.namespace.split(/[\s.]+/).pop() : normalizedOptions.namespace);
}
if (!options.icon) {
normalizedOptions.icon = normalizedOptions.blockName;
}
if (!options.placeholder) {
normalizedOptions.placeholder = getPlaceholders(normalizedOptions);
}
return _component.default.sortObjectByKeys(normalizedOptions);
};
/**
* @param {object} options
* @returns
*/
const getPlaceholders = options => {
const name = _placeholder.default.getPlaceholderNames(options.name);
const result = {
BlockClassName: options.forge.className,
BLOCKNAME: name.PLACEHOLDERNAME,
BLOCK_NAME: name.PLACEHOLDER_NAME,
BlockName: name.PlaceholderName,
blockName: name.placeholderName,
block_name: name.placeholder_name,
blockname: name.placeholdername,
CreativeTab: creativeTab.MISC,
SoundType: options.attributes.soundType
};
return result;
};
var _default = {
config,
getBlockTypeIcon,
normalize,
type
};
exports.default = _default;