UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

305 lines (304 loc) 11.5 kB
"use strict"; // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. Object.defineProperty(exports, "__esModule", { value: true }); exports.COMMON_SCRIPT_TYPES = exports.ScriptModuleInfoProvider = exports.SCRIPT_MODULES = exports.ModuleStability = void 0; /** * ScriptModuleInfo - Minecraft Script API module information * * Contains version information, API documentation, and metadata for * Minecraft Script API modules. */ /** * Script module stability level */ var ModuleStability; (function (ModuleStability) { ModuleStability["Stable"] = "stable"; ModuleStability["Beta"] = "beta"; ModuleStability["Internal"] = "internal"; })(ModuleStability || (exports.ModuleStability = ModuleStability = {})); /** * Known Minecraft Script API modules */ exports.SCRIPT_MODULES = [ { name: "@minecraft/server", latestStableVersion: "1.17.0", latestBetaVersion: "1.18.0-beta", minMinecraftVersion: "1.20.0", description: "Core Minecraft server APIs for entities, blocks, dimensions, and world manipulation", stability: ModuleStability.Stable, typesPackage: "@minecraft/server", docsUrl: "https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server/minecraft-server", }, { name: "@minecraft/server-ui", latestStableVersion: "1.4.0", latestBetaVersion: "1.5.0-beta", minMinecraftVersion: "1.20.0", description: "UI APIs for creating forms, dialogs, and player interactions", stability: ModuleStability.Stable, typesPackage: "@minecraft/server-ui", docsUrl: "https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-ui/minecraft-server-ui", }, { name: "@minecraft/server-admin", latestStableVersion: "1.0.0-beta", latestBetaVersion: "1.0.0-beta", minMinecraftVersion: "1.20.0", description: "Administrative APIs for Bedrock Dedicated Server", stability: ModuleStability.Beta, typesPackage: "@minecraft/server-admin", docsUrl: "https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-admin/minecraft-server-admin", }, { name: "@minecraft/server-gametest", latestStableVersion: "1.0.0-beta", latestBetaVersion: "1.0.0-beta", minMinecraftVersion: "1.20.0", description: "GameTest Framework APIs for automated testing", stability: ModuleStability.Beta, typesPackage: "@minecraft/server-gametest", docsUrl: "https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-gametest/minecraft-server-gametest", }, { name: "@minecraft/server-net", latestStableVersion: "1.0.0-beta", latestBetaVersion: "1.0.0-beta", minMinecraftVersion: "1.20.0", description: "Networking APIs for HTTP requests (Dedicated Server only)", stability: ModuleStability.Beta, typesPackage: "@minecraft/server-net", docsUrl: "https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-net/minecraft-server-net", }, { name: "@minecraft/server-editor", latestStableVersion: "0.1.0-beta", latestBetaVersion: "0.1.0-beta", minMinecraftVersion: "1.21.0", description: "Editor extension APIs for Minecraft Editor", stability: ModuleStability.Beta, typesPackage: "@minecraft/server-editor", docsUrl: "https://learn.microsoft.com/minecraft/creator/documents/editoroverview", }, { name: "@minecraft/vanilla-data", latestStableVersion: "1.20.80", latestBetaVersion: "1.21.40", minMinecraftVersion: "1.20.0", description: "Type definitions for vanilla Minecraft identifiers (blocks, items, entities)", stability: ModuleStability.Stable, typesPackage: "@minecraft/vanilla-data", docsUrl: "https://www.npmjs.com/package/@minecraft/vanilla-data", }, { name: "@minecraft/common", latestStableVersion: "1.2.0", latestBetaVersion: "1.2.0", minMinecraftVersion: "1.20.0", description: "Common types and utilities used across Minecraft modules", stability: ModuleStability.Stable, typesPackage: "@minecraft/common", docsUrl: "https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/common/minecraft-common", }, { name: "@minecraft/debug-utilities", latestStableVersion: "1.0.0-beta", latestBetaVersion: "1.0.0-beta", minMinecraftVersion: "1.21.0", description: "Debugging utilities for script development", stability: ModuleStability.Beta, typesPackage: "@minecraft/debug-utilities", docsUrl: "https://learn.microsoft.com/minecraft/creator/scriptapi/", }, ]; /** * Utility class for script module information */ class ScriptModuleInfoProvider { static moduleMap = null; /** * Get module map (lazy initialization) */ static getModuleMap() { if (!this.moduleMap) { this.moduleMap = new Map(); for (const module of exports.SCRIPT_MODULES) { this.moduleMap.set(module.name, module); } } return this.moduleMap; } /** * Get info for a specific module */ static getModuleInfo(moduleName) { return this.getModuleMap().get(moduleName); } /** * Gets the latest version for a Minecraft module. * @param moduleName Module name (with or without @minecraft/ prefix) * @param preferBeta If true, returns the latest beta version; otherwise returns stable * @returns The version string, or undefined if module is not known */ static getLatestVersion(moduleName, preferBeta = true) { // Normalize: add @minecraft/ prefix if not present const fullName = moduleName.startsWith("@minecraft/") ? moduleName : `@minecraft/${moduleName}`; const info = this.getModuleInfo(fullName); if (!info) { return undefined; } return preferBeta ? info.latestBetaVersion : info.latestStableVersion; } /** * Gets version info for a Minecraft module. * @param moduleName Module name (with or without @minecraft/ prefix) * @returns Version info object, or undefined if module is not known */ static getVersionInfo(moduleName) { // Normalize: add @minecraft/ prefix if not present const fullName = moduleName.startsWith("@minecraft/") ? moduleName : `@minecraft/${moduleName}`; const info = this.getModuleInfo(fullName); if (!info) { return undefined; } return { latestStableVersion: info.latestStableVersion, latestBetaVersion: info.latestBetaVersion, minMinecraftVersion: info.minMinecraftVersion, }; } /** * Get all module names */ static getAllModuleNames() { return exports.SCRIPT_MODULES.map((m) => m.name); } /** * Check if a module name is a valid Minecraft module */ static isMinecraftModule(moduleName) { return this.getModuleMap().has(moduleName); } /** * Parse a module version from package.json dependency */ static parseModuleVersion(versionSpec) { // Handle version specs like "^1.0.0", "~1.0.0", "1.0.0-beta", etc. const cleanVersion = versionSpec.replace(/^[\^~>=<]+/, "").trim(); const isBeta = cleanVersion.includes("beta") || cleanVersion.includes("alpha"); return { version: cleanVersion, isBeta }; } /** * Check if a module version is outdated */ static isVersionOutdated(moduleName, currentVersion) { const info = this.getModuleInfo(moduleName); if (!info) { return { isOutdated: false, latestVersion: currentVersion, isBetaAvailable: false }; } const { version, isBeta } = this.parseModuleVersion(currentVersion); const targetVersion = isBeta ? info.latestBetaVersion : info.latestStableVersion; // Simple version comparison (works for semver) const isOutdated = this.compareVersions(version, targetVersion) < 0; const isBetaAvailable = this.compareVersions(info.latestStableVersion, info.latestBetaVersion) < 0; return { isOutdated, latestVersion: targetVersion, isBetaAvailable, }; } /** * Compare two semver versions * Returns: -1 if a < b, 0 if a == b, 1 if a > b */ static compareVersions(a, b) { // Strip beta/alpha suffixes for comparison const cleanA = a.replace(/-.*$/, ""); const cleanB = b.replace(/-.*$/, ""); const partsA = cleanA.split(".").map((n) => parseInt(n, 10) || 0); const partsB = cleanB.split(".").map((n) => parseInt(n, 10) || 0); for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) { const numA = partsA[i] || 0; const numB = partsB[i] || 0; if (numA < numB) return -1; if (numA > numB) return 1; } // If base versions are equal, non-beta > beta const isBetaA = a.includes("beta") || a.includes("alpha"); const isBetaB = b.includes("beta") || b.includes("alpha"); if (isBetaA && !isBetaB) return -1; if (!isBetaA && isBetaB) return 1; return 0; } /** * Get recommended dependency entries for manifest.json */ static getRecommendedDependency(moduleName, useBeta = false) { const info = this.getModuleInfo(moduleName); if (!info) { return null; } return { module_name: moduleName, version: useBeta ? info.latestBetaVersion : info.latestStableVersion, }; } } exports.ScriptModuleInfoProvider = ScriptModuleInfoProvider; /** * Common Script API types that need special handling */ exports.COMMON_SCRIPT_TYPES = { // Core types world: { module: "@minecraft/server", description: "The global World object - access to dimensions, players, and world state", }, system: { module: "@minecraft/server", description: "The System object - timing, events, and script lifecycle", }, Entity: { module: "@minecraft/server", description: "Base class for all entities (players, mobs, items)", }, Player: { module: "@minecraft/server", description: "Represents a player in the world", }, Block: { module: "@minecraft/server", description: "Represents a block in the world", }, Dimension: { module: "@minecraft/server", description: "Represents a dimension (overworld, nether, end)", }, ItemStack: { module: "@minecraft/server", description: "Represents an item stack", }, Vector3: { module: "@minecraft/server", description: "3D vector with x, y, z coordinates", }, // UI types ActionFormData: { module: "@minecraft/server-ui", description: "Button-based form for player selection", }, MessageFormData: { module: "@minecraft/server-ui", description: "Simple message with two buttons", }, ModalFormData: { module: "@minecraft/server-ui", description: "Complex form with multiple input types", }, };