UNPKG

minecraft-utils-shared

Version:

Shared utils for Minecraft Bedrock / Forge development related utilities.

265 lines (251 loc) 8.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _compareVersions = _interopRequireDefault(require("compare-versions")); var _item_config = _interopRequireDefault(require("../../default/item_config.cjs")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * @file Minecraft Utils Shared - Item Config Generator * @license Apache-2.0 * @author Markus@Bordihn.de (Markus Bordihn) */ /** * @param {Object} itemOptions * @returns {Object} Item Definition */ const getItemConfig = (itemOptions = {}) => { const options = _item_config.default.normalize(itemOptions); const result = { format_version: options.bedrock.formatVersion, 'minecraft:item': { description: { identifier: options.id, category: options.category || _item_config.default.category.ITEM }, components: {} } }; // Adding meta data for format version >= 1.16.100 if (_compareVersions.default.compare(options.bedrock.formatVersion, '1.16.100', '>=')) { // Handles icon and name specific options result['minecraft:item'].components['minecraft:icon'] = { texture: options.itemName }; // Handles general options if (options.renderOffsets) { result['minecraft:item'].components['minecraft:render_offsets'] = { main_hand: [0, 0, 0], off_hand: [0, 0, 0] }; } if (options.useAnimation) { result['minecraft:item'].components['minecraft:use_animation'] = options.use_animation; } } // Handle general options if (options.attributes) { handleGeneralOptions(result, options); } // Handle item type specific component options console.log('Item generator:', options); if (options.armor) { handleArmorType(result, options); } if (options.digger) { handleDiggerOptions(result, options); } if (options.food) { handleFoodType(result, options); } if (options.fuel) { handleFuelOptions(result, options); } if (options.projectile) { handleProjectileOptions(result, options); } if (options.throwable) { handleThrowableOptions(result, options); } if (options.weapon) { handleWeaponOptions(result, options); } return result; }; /** * @param {Object} result * @param {Object} options */ const handleGeneralOptions = (result, options) => { if (options.attributes.useDuration) { result['minecraft:item'].components['minecraft:use_duration'] = parseInt(options.attributes.useDuration); } if (options.attributes.damage) { result['minecraft:item'].components['minecraft:damage'] = parseInt(options.attributes.damage); } if (options.attributes.foil) { result['minecraft:item'].components['minecraft:foil'] = options.attributes.foil || false; } if (options.attributes.handEquipped) { result['minecraft:item'].components['minecraft:hand_equipped'] = true; } if (options.attributes.maxStackSize) { result['minecraft:item'].components['minecraft:max_stack_size'] = parseInt(options.attributes.maxStackSize); } if (options.attributes.renderOffset) { result['minecraft:item'].components['minecraft:render_offsets'] = options.attributes.renderOffset; } }; /** * @param {Object} result * @param {Object} options */ const handleArmorType = (result, options) => { result['minecraft:item'].components['minecraft:armor'] = { protection: parseInt(options.armor.protection) }; if (options.armor.textureType) { result['minecraft:item'].components['minecraft:armor'].texture_type = options.armor.textureType; } switch (options.variation) { case 'boots': result['minecraft:item'].components['minecraft:creative_category'] = { parent: 'itemGroup.name.boots' }; result['minecraft:item'].components['minecraft:enchantable'] = { value: 14, slot: 'armor_feet' }; result['minecraft:item'].components['minecraft:render_offsets'] = 'boots'; result['minecraft:item'].components['minecraft:wearable'] = { slot: 'slot.armor.feet' }; break; case 'chestplate': result['minecraft:item'].components['minecraft:creative_category'] = { parent: 'itemGroup.name.chestplate' }; result['minecraft:item'].components['minecraft:enchantable'] = { value: 14, slot: 'armor_torso' }; result['minecraft:item'].components['minecraft:render_offsets'] = 'chestplates'; result['minecraft:item'].components['minecraft:wearable'] = { slot: 'slot.armor.chest' }; break; case 'helmet': result['minecraft:item'].components['minecraft:creative_category'] = { parent: 'itemGroup.name.helmet' }; result['minecraft:item'].components['minecraft:enchantable'] = { value: 14, slot: 'armor_head' }; result['minecraft:item'].components['minecraft:wearable'] = { slot: 'slot.armor.head' }; break; case 'leggings': result['minecraft:item'].components['minecraft:creative_category'] = { parent: 'itemGroup.name.leggings' }; result['minecraft:item'].components['minecraft:enchantable'] = { value: 14, slot: 'armor_legs' }; result['minecraft:item'].components['minecraft:render_offsets'] = 'leggings'; result['minecraft:item'].components['minecraft:wearable'] = { slot: 'slot.armor.legs' }; break; } }; /** * @param {Object} result * @param {Object} options */ const handleDiggerOptions = (result, options) => { result['minecraft:item'].components['minecraft:digger'] = { use_efficiency: options.digger.useEfficiency || false }; if (options.digger.destroySpeeds) { result['minecraft:item'].components['minecraft:digger'].destroy_speeds = []; } if (options.digger.onDig) { result['minecraft:item'].components['minecraft:digger'].on_dig = ''; } }; /** * @param {Object} result * @param {Object} options */ const handleFoodType = (result, options) => { result['minecraft:item'].components['minecraft:food'] = { can_always_eat: options.can_always_eat || false, nutrition: parseInt(options.nutrition), saturation_modifier: options.saturation_modifier || 'normal', using_converts_to: options.using_converts_to || '' }; if (options.effects) { result['minecraft:item'].components['minecraft:food'].effects = []; } }; /** * @param {Object} result * @param {Object} options */ const handleFuelOptions = (result, options) => { result['minecraft:item'].components['minecraft:fuel'] = { duration: parseInt(options.fuel.duration) }; }; /** * @param {Object} result * @param {Object} options */ const handleProjectileOptions = (result, options) => { result['minecraft:item'].components['minecraft:projectile'] = { projectile_entity: options.projectile.projectileEntity || 'minecraft:arrow', minimum_critical_power: options.projectile.minimumCriticalPower || 1 }; }; /** * @param {Object} result * @param {Object} options */ const handleThrowableOptions = (result, options) => { result['minecraft:item'].components['minecraft:throwable'] = { do_swing_animation: options.throwable.doSwingAnimation || false, launch_power_scale: parseFloat(options.throwable.launchPowerScale) || 1.0, max_draw_duration: parseFloat(options.throwable.maxDrawDuration) || 0.0, max_launch_power: parseFloat(options.throwable.maxLaunchPower) || 1.0, min_draw_duration: parseFloat(options.throwable.minDrawDuration) || 0.0, scale_power_by_draw_duration: options.throwable.scalePowerByDrawDuration || false }; result['minecraft:item'].components['minecraft:projectile'] = { projectile_entity: 'minecraft:arrow', minimum_critical_power: 1 }; }; /** * @param {Object} result * @param {Object} options */ const handleWeaponOptions = (result, options) => { result['minecraft:item'].components['minecraft:weapon'] = {}; if (options.weapon.onHitBlock) { result['minecraft:item'].components['minecraft:weapon'].on_hit_block = options.weapon.onHitBlock; } if (options.weapon.onHurtEntity) { result['minecraft:item'].components['minecraft:weapon'].on_hurt_entity = options.weapon.onHurtEntity; } if (options.weapon.onNotHurtEntity) { result['minecraft:item'].components['minecraft:weapon'].on_not_hurt_entity = options.weapon.onNotHurtEntity; } }; var _default = { getItemConfig }; exports.default = _default;