UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

57 lines (56 loc) 2.64 kB
/** * ARCHITECTURE: RenderControllerResolver * * Resolves a Minecraft render controller into concrete geometry IDs, texture paths, * and tint colors by evaluating Molang expressions against an entity context. * * Pipeline: * IRenderController (from .render_controllers.json) * + EntityTypeResourceDefinition (texture/geometry key maps) * + IMolangContext (entity state: is_baby, variant, etc.) * → IRenderResolvedState (concrete geometry ID, texture paths, tint) * * Reference resolution: * "Texture.default" → look up "default" key in entity's textures map → "textures/entity/sheep/sheep" * "Geometry.baby" → look up "baby" key in entity's geometry map → "geometry.sheep.baby" * "Array.geos[query.is_sheared]" → evaluate index, look up in render controller arrays * * Related files: * - MolangEvaluator.ts — expression evaluation engine * - IMolangContext.ts — entity state context * - IRenderControllerSet.ts — render controller data structures * - IRenderResolvedState.ts — output interface * - EntityTypeResourceDefinition.ts — entity texture/geometry key maps */ import { IRenderController } from "./IRenderControllerSet"; import IMolangContext from "./IMolangContext"; import IRenderResolvedState from "./IRenderResolvedState"; export default class RenderControllerResolver { private _evaluator; constructor(); /** * Resolve a render controller to concrete geometry/texture/material values. * * @param rc The render controller data from the .render_controllers.json file * @param textureMap Entity's texture key map: {"default": "textures/entity/sheep/sheep", "baby": "..."} * @param geometryMap Entity's geometry key map: {"default": "geometry.sheep.v1.8", "sheared": "..."} * @param context Molang evaluation context (entity state) * @returns Resolved geometry ID, texture layers, and optional tint */ resolve(rc: IRenderController, textureMap: { [key: string]: string | undefined; }, geometryMap: { [key: string]: string | undefined; }, context: IMolangContext): IRenderResolvedState; /** * Resolve a reference like "Texture.default" or "Geometry.baby" to the actual * path/ID using the entity's key maps. */ private _resolveReference; /** * Build a flat Map<string, string[]> from the render controller's nested array definitions. * Converts: { textures: { "Array.skins": ["Texture.a", "Texture.b"] }, geometries: {...} } * To: Map { "Array.skins" → ["Texture.a", "Texture.b"], "Array.geos" → [...] } */ private _buildArrayMap; }