@minecraft/creator-tools
Version:
Minecraft Creator Tools command line and libraries.
57 lines (56 loc) • 2.64 kB
TypeScript
/**
* 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;
}