@nodecraft/rendermite 1.1.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/README.md +27 -2
  2. package/assets/builtin/renderchest/models/block/banner_standing.json +225 -0
  3. package/assets/builtin/renderchest/models/block/banner_wall.json +155 -0
  4. package/assets/builtin/renderchest/models/block/bed_foot.json +44 -0
  5. package/assets/builtin/renderchest/models/block/bed_head.json +44 -0
  6. package/assets/builtin/renderchest/models/block/chest_left.json +182 -0
  7. package/assets/builtin/renderchest/models/block/chest_right.json +182 -0
  8. package/assets/builtin/renderchest/models/block/copper_golem_statue.json +709 -0
  9. package/assets/builtin/renderchest/models/block/fluid.json +83 -0
  10. package/assets/builtin/renderchest/models/block/fluid_tinted.json +89 -0
  11. package/assets/builtin/renderchest/models/block/hanging_sign.json +54 -0
  12. package/assets/builtin/renderchest/models/block/standing_sign.json +32 -0
  13. package/assets/builtin/renderchest/models/block/wall_sign.json +19 -0
  14. package/dist/atlas/registry.js +1 -1
  15. package/dist/atlas/sources.js +1 -1
  16. package/dist/atlas-pack-CoOih7By.js +130 -0
  17. package/dist/atlas-pack-DRTrWcSU.d.ts +41 -0
  18. package/dist/block-entities-BbS1kv0m.js +481 -0
  19. package/dist/blocks/atlas-pack.d.ts +2 -0
  20. package/dist/blocks/atlas-pack.js +2 -0
  21. package/dist/blocks/block-entities.d.ts +93 -0
  22. package/dist/blocks/block-entities.js +2 -0
  23. package/dist/blocks/blockstate-eval.d.ts +2 -0
  24. package/dist/blocks/blockstate-eval.js +2 -0
  25. package/dist/blocks/cli.d.ts +9 -0
  26. package/dist/blocks/cli.js +2 -0
  27. package/dist/blocks/export.d.ts +2 -0
  28. package/dist/blocks/export.js +2 -0
  29. package/dist/blocks/obj-mesh.d.ts +2 -0
  30. package/dist/blocks/obj-mesh.js +2 -0
  31. package/dist/blocks/tints.d.ts +2 -0
  32. package/dist/blocks/tints.js +2 -0
  33. package/dist/{blockstate-CdstnW2-.js → blockstate-DVb8Mhxc.js} +1 -1
  34. package/dist/blockstate-eval-Ckjlyxn4.js +231 -0
  35. package/dist/blockstate-eval-DDArZs1P.d.ts +107 -0
  36. package/dist/cli-D7_oUuPT.js +161 -0
  37. package/dist/cli.js +9 -7
  38. package/dist/{descriptor-DWebtkI1.js → descriptor-BVIoEpPO.js} +3 -3
  39. package/dist/{discovery-B9aqV_Rz.js → discovery-CsZu08re.js} +1 -1
  40. package/dist/dynamic/generators.js +1 -1
  41. package/dist/{entity-fallback-Cu22uEIK.js → entity-fallback-DNO0Ta9C.js} +3 -155
  42. package/dist/entity-textures-DFRIVdF1.js +209 -0
  43. package/dist/export-BIpqNU3H.d.ts +44 -0
  44. package/dist/export-DxREy3qA.js +701 -0
  45. package/dist/{face-cQ-pVHoe.d.ts → face-BKwkeTps.d.ts} +1 -1
  46. package/dist/{fluid-bucket-BzoLofB_.js → fluid-bucket-B-I4ZYHl.js} +1 -1
  47. package/dist/{generators-BlG4KmtP.js → generators-BCZVlWig.js} +1 -1
  48. package/dist/{geo-w9HHIrb5.js → geo-BguldlU-.js} +5 -5
  49. package/dist/{geometry-w0yQbzDZ.d.ts → geometry-Bkur58Vi.d.ts} +1 -1
  50. package/dist/index.d.ts +10 -5
  51. package/dist/index.js +21 -16
  52. package/dist/{item-styles-upgEO1yP.js → item-styles-DjYRdyHi.js} +1 -1
  53. package/dist/items/blockstate.js +1 -1
  54. package/dist/items/discovery.js +1 -1
  55. package/dist/{jar-D9z-X7tA.js → jar-5aLDI0nT.js} +2 -2
  56. package/dist/{legacy-reshape-C05SfAPR.js → legacy-reshape-CcdstKyI.js} +2 -2
  57. package/dist/{legacy-tints-B09J0Rxh.js → legacy-tints-l-541wgI.js} +1 -1
  58. package/dist/{loader-CWsTZgrk.js → loader-BvLcevlN.js} +100 -9
  59. package/dist/{loader-Lb0ZeILz.js → loader-C18GpurU.js} +1 -1
  60. package/dist/{loader-DD83d80u.d.ts → loader-C_1_amsq.d.ts} +18 -1
  61. package/dist/{locator-ycZzh_6z.js → locator-COMEtEn9.js} +23 -1
  62. package/dist/{manager-CkletR5K.js → manager-CYbAkWuT.js} +2 -2
  63. package/dist/models/loader.d.ts +1 -1
  64. package/dist/models/loader.js +1 -1
  65. package/dist/models/types.d.ts +1 -1
  66. package/dist/{models-BKxGkPS7.js → models-CQwcTZcg.js} +1 -1
  67. package/dist/mods/models.js +1 -1
  68. package/dist/mods/prepare.js +1 -1
  69. package/dist/mods/synthesize.js +1 -1
  70. package/dist/mods/tints.js +1 -1
  71. package/dist/{renderer-DB1Oe7xs.js → obj-BEjq3_Ao.js} +234 -234
  72. package/dist/obj-mesh-C6Sp4Ysc.d.ts +41 -0
  73. package/dist/obj-mesh-CiHiqrlm.js +97 -0
  74. package/dist/output/item-styles.js +1 -1
  75. package/dist/{pipeline-Bp6amYz_.d.ts → pipeline-BDvXcw20.d.ts} +1 -1
  76. package/dist/{pipeline-CgJaVpoL.js → pipeline-DRMsBiod.js} +14 -14
  77. package/dist/{prepare-D56Z-9cg.js → prepare-B8oPdGYz.js} +5 -5
  78. package/dist/{prepare-Cc8QZ3j0.js → prepare-C95vjt_o.js} +5 -5
  79. package/dist/{registry-DS5PZ57l.js → registry-DlduyjtM.js} +2 -2
  80. package/dist/render/entity-fallback.d.ts +3 -3
  81. package/dist/render/entity-fallback.js +1 -1
  82. package/dist/render/face.d.ts +1 -1
  83. package/dist/render/face.js +1 -1
  84. package/dist/render/fluid-bucket.js +1 -1
  85. package/dist/render/geo.d.ts +2 -2
  86. package/dist/render/geo.js +1 -1
  87. package/dist/render/geometry.d.ts +1 -1
  88. package/dist/render/legacy-tints.d.ts +1 -1
  89. package/dist/render/legacy-tints.js +1 -1
  90. package/dist/render/obj.d.ts +10 -3
  91. package/dist/render/obj.js +2 -2
  92. package/dist/render/pipeline.d.ts +1 -1
  93. package/dist/render/pipeline.js +1 -1
  94. package/dist/render/renderer.d.ts +1 -1
  95. package/dist/render/renderer.js +1 -1
  96. package/dist/render/tints.d.ts +1 -1
  97. package/dist/render/tints.js +1 -1
  98. package/dist/{renderer-C79EQDSn.d.ts → renderer-U20hnhbi.d.ts} +2 -2
  99. package/dist/resources/descriptor.js +1 -1
  100. package/dist/resources/entity-textures.d.ts +51 -0
  101. package/dist/resources/entity-textures.js +2 -0
  102. package/dist/resources/jar.js +1 -1
  103. package/dist/resources/locator.js +1 -1
  104. package/dist/resources/manager.js +1 -1
  105. package/dist/resources/synthetic.js +1 -1
  106. package/dist/{run-uq8_hUx9.d.ts → run-CvIqiZ6T.d.ts} +1 -1
  107. package/dist/{run-BPfpBZyZ.js → run-D2S_W5As.js} +10 -7
  108. package/dist/run.d.ts +1 -1
  109. package/dist/run.js +1 -1
  110. package/dist/{sources-Bxk-WOzH.js → sources-BlUriDCs.js} +1 -1
  111. package/dist/{synthesize-3Q0aaOnK.js → synthesize-jTjVjPAt.js} +2 -2
  112. package/dist/{synthetic-ZAUjXT7E.js → synthetic-rc9BPT4P.js} +0 -0
  113. package/dist/textures/loader.js +1 -1
  114. package/dist/tints-2k3ZhkY3.d.ts +41 -0
  115. package/dist/{tints-3VI_2SNy.js → tints-B3WQcPtx.js} +1 -1
  116. package/dist/{tints-Do9Sh3dg.d.ts → tints-DqhgFi8a.d.ts} +1 -1
  117. package/dist/tints-a9FWZLma.js +176 -0
  118. package/dist/{tints-CebmvjmP.js → tints-nxtGrqv5.js} +3 -3
  119. package/dist/{types-DpRSF9Vj.d.ts → types-qlp3I8_-.d.ts} +11 -0
  120. package/dist/versions/download.js +1 -1
  121. package/dist/versions/legacy-reshape.js +1 -1
  122. package/dist/versions/prepare.js +1 -1
  123. package/dist/workers/render-worker.d.ts +1 -1
  124. package/dist/workers/render-worker.js +2 -2
  125. package/package.json +1 -1
  126. package/dist/{download-D9aARBFp.js → download-1wAfrGKx.js} +1 -1
  127. package/dist/{face-CMJ3b3Ae.js → face-CKHboPfh.js} +1 -1
@@ -1,8 +1,8 @@
1
- import { n as ResourceLocator } from "./locator-ycZzh_6z.js";
2
- import { n as LayeredResourceManager, t as FolderResourceManager } from "./manager-CkletR5K.js";
3
- import { n as MapResourceManager, t as KindFilteredResourceManager } from "./synthetic-ZAUjXT7E.js";
4
- import { t as JarResourceManager } from "./jar-D9z-X7tA.js";
5
- import { t as reshapeLegacyAssets } from "./legacy-reshape-C05SfAPR.js";
1
+ import { n as ResourceLocator } from "./locator-COMEtEn9.js";
2
+ import { n as LayeredResourceManager, t as FolderResourceManager } from "./manager-CYbAkWuT.js";
3
+ import { n as MapResourceManager, t as KindFilteredResourceManager } from "./synthetic-rc9BPT4P.js";
4
+ import { t as JarResourceManager } from "./jar-5aLDI0nT.js";
5
+ import { t as reshapeLegacyAssets } from "./legacy-reshape-CcdstKyI.js";
6
6
  //#region src/versions/prepare.ts
7
7
  /**
8
8
  * Version-era detection and asset preparation, replacing the file-tree surgery
@@ -1,5 +1,5 @@
1
- import { n as ResourceLocator } from "./locator-ycZzh_6z.js";
2
- import { o as createAtlasResolver, r as PalettedPermutationsSource, s as parseAtlasSources } from "./sources-Bxk-WOzH.js";
1
+ import { n as ResourceLocator } from "./locator-COMEtEn9.js";
2
+ import { o as createAtlasResolver, r as PalettedPermutationsSource, s as parseAtlasSources } from "./sources-BlUriDCs.js";
3
3
  //#region src/atlas/registry.ts
4
4
  /**
5
5
  * Collects every `atlases/*.json` across namespaces into one resolver.
@@ -1,9 +1,9 @@
1
1
  import { a as ResourceManager } from "../manager-Cv1NeFyF.js";
2
2
  import { i as TextureLoader } from "../loader-Myy22TDL.js";
3
- import { t as ModelLoader } from "../loader-DD83d80u.js";
3
+ import { t as ModelLoader } from "../loader-C_1_amsq.js";
4
4
  import { n as FloatTexture } from "../blend-8lnfxtLe.js";
5
- import { r as TintColor } from "../face-cQ-pVHoe.js";
6
- import { i as RenderOptions } from "../renderer-C79EQDSn.js";
5
+ import { r as TintColor } from "../face-BKwkeTps.js";
6
+ import { i as RenderOptions } from "../renderer-U20hnhbi.js";
7
7
  //#region src/render/entity-fallback.d.ts
8
8
  /** The dye name a `<dye>_<thing>` mod item is prefixed with, or null. */
9
9
  declare function dyeVariantName(id: string): string | null;
@@ -1,2 +1,2 @@
1
- import { a as spawnEggTints, i as renderEntityFallback, n as dyedVariantTint, r as renderDyedVariantFallback, t as dyeVariantName } from "../entity-fallback-Cu22uEIK.js";
1
+ import { a as spawnEggTints, i as renderEntityFallback, n as dyedVariantTint, r as renderDyedVariantFallback, t as dyeVariantName } from "../entity-fallback-DNO0Ta9C.js";
2
2
  export { dyeVariantName, dyedVariantTint, renderDyedVariantFallback, renderEntityFallback, spawnEggTints };
@@ -1,2 +1,2 @@
1
- import { a as faceMaxZ, i as createShadeCache, n as RenderableFace, o as renderFace, r as TintColor, t as FaceShadeCache } from "../face-cQ-pVHoe.js";
1
+ import { a as faceMaxZ, i as createShadeCache, n as RenderableFace, o as renderFace, r as TintColor, t as FaceShadeCache } from "../face-BKwkeTps.js";
2
2
  export { FaceShadeCache, RenderableFace, TintColor, createShadeCache, faceMaxZ, renderFace };
@@ -1,2 +1,2 @@
1
- import { n as faceMaxZ, r as renderFace, t as createShadeCache } from "../face-CMJ3b3Ae.js";
1
+ import { n as faceMaxZ, r as renderFace, t as createShadeCache } from "../face-CKHboPfh.js";
2
2
  export { createShadeCache, faceMaxZ, renderFace };
@@ -1,2 +1,2 @@
1
- import { t as paintBucketFluid } from "../fluid-bucket-BzoLofB_.js";
1
+ import { t as paintBucketFluid } from "../fluid-bucket-B-I4ZYHl.js";
2
2
  export { paintBucketFluid };
@@ -2,8 +2,8 @@ import { n as ResourceLocator } from "../locator-jDbdUeTd.js";
2
2
  import { a as ResourceManager } from "../manager-Cv1NeFyF.js";
3
3
  import { i as TextureLoader } from "../loader-Myy22TDL.js";
4
4
  import { n as FloatTexture } from "../blend-8lnfxtLe.js";
5
- import { n as FaceGeometry } from "../geometry-w0yQbzDZ.js";
6
- import { i as RenderOptions } from "../renderer-C79EQDSn.js";
5
+ import { n as FaceGeometry } from "../geometry-Bkur58Vi.js";
6
+ import { i as RenderOptions } from "../renderer-U20hnhbi.js";
7
7
  //#region src/render/geo.d.ts
8
8
  interface GeoCube {
9
9
  origin?: number[];
@@ -1,2 +1,2 @@
1
- import { i as renderGeo, n as geoToFaces, r as parseGeo, t as findGeoForItem } from "../geo-w9HHIrb5.js";
1
+ import { i as renderGeo, n as geoToFaces, r as parseGeo, t as findGeoForItem } from "../geo-BguldlU-.js";
2
2
  export { findGeoForItem, geoToFaces, parseGeo, renderGeo };
@@ -1,2 +1,2 @@
1
- import { i as buildElementFaces, n as FaceGeometry, r as applyElementRotation, t as FACE_NORMALS } from "../geometry-w0yQbzDZ.js";
1
+ import { i as buildElementFaces, n as FaceGeometry, r as applyElementRotation, t as FACE_NORMALS } from "../geometry-Bkur58Vi.js";
2
2
  export { FACE_NORMALS, FaceGeometry, applyElementRotation, buildElementFaces };
@@ -1,5 +1,5 @@
1
1
  import { i as TextureLoader } from "../loader-Myy22TDL.js";
2
- import { r as TintColor } from "../face-cQ-pVHoe.js";
2
+ import { r as TintColor } from "../face-BKwkeTps.js";
3
3
  //#region src/render/legacy-tints.d.ts
4
4
  /**
5
5
  * Tints for a model rendered without an item definition (pre-1.21.4 eras and
@@ -1,2 +1,2 @@
1
- import { t as legacyTintsForChain } from "../legacy-tints-B09J0Rxh.js";
1
+ import { t as legacyTintsForChain } from "../legacy-tints-l-541wgI.js";
2
2
  export { legacyTintsForChain };
@@ -1,9 +1,10 @@
1
+ import { n as ResourceLocator } from "../locator-jDbdUeTd.js";
1
2
  import { a as ResourceManager } from "../manager-Cv1NeFyF.js";
2
3
  import { i as TextureLoader } from "../loader-Myy22TDL.js";
3
- import { r as ResolvedModel } from "../loader-DD83d80u.js";
4
+ import { r as ResolvedModel } from "../loader-C_1_amsq.js";
4
5
  import { n as FloatTexture } from "../blend-8lnfxtLe.js";
5
6
  import { n as Vec3 } from "../vector-DRKRi4--.js";
6
- import { i as RenderOptions } from "../renderer-C79EQDSn.js";
7
+ import { i as RenderOptions } from "../renderer-U20hnhbi.js";
7
8
  //#region src/render/obj.d.ts
8
9
  interface ObjTriangle {
9
10
  positions: [Vec3, Vec3, Vec3];
@@ -21,6 +22,12 @@ interface ParsedObj {
21
22
  declare function parseObj(text: string, flipV: boolean): ParsedObj;
22
23
  /** map_Kd texture per material name out of an MTL library. */
23
24
  declare function parseMtl(text: string): Map<string, string>;
25
+ /**
26
+ * Resolve a material name to a texture locator: `#key` and MTL map_Kd values
27
+ * go through the model's texture map (Forge binds materials that way); bare
28
+ * names fall back to a direct locator.
29
+ */
30
+ declare function materialTexture(model: ResolvedModel, materials: Map<string, string>, material: string): ResourceLocator | null;
24
31
  declare function renderObjModel(model: ResolvedModel, resources: ResourceManager, textures: TextureLoader, options: RenderOptions): Promise<FloatTexture>;
25
32
  //#endregion
26
- export { parseMtl, parseObj, renderObjModel };
33
+ export { materialTexture, parseMtl, parseObj, renderObjModel };
@@ -1,2 +1,2 @@
1
- import { c as renderObjModel, o as parseMtl, s as parseObj } from "../renderer-DB1Oe7xs.js";
2
- export { parseMtl, parseObj, renderObjModel };
1
+ import { i as renderObjModel, n as parseMtl, r as parseObj, t as materialTexture } from "../obj-BEjq3_Ao.js";
2
+ export { materialTexture, parseMtl, parseObj, renderObjModel };
@@ -1,2 +1,2 @@
1
- import { i as RenderedFrames, n as ItemRenderOutcome, r as PipelineSettings, t as ItemPipeline } from "../pipeline-Bp6amYz_.js";
1
+ import { i as RenderedFrames, n as ItemRenderOutcome, r as PipelineSettings, t as ItemPipeline } from "../pipeline-BDvXcw20.js";
2
2
  export { ItemPipeline, ItemRenderOutcome, PipelineSettings, RenderedFrames };
@@ -1,2 +1,2 @@
1
- import { t as ItemPipeline } from "../pipeline-CgJaVpoL.js";
1
+ import { t as ItemPipeline } from "../pipeline-DRMsBiod.js";
2
2
  export { ItemPipeline };
@@ -1,2 +1,2 @@
1
- import { a as RenderedFrames, c as renderModel, i as RenderOptions, l as renderModelFrames, n as AnimationLimits, o as boxDownscale, r as ItemRenderError, s as pointResize, t as AnimationDiagnostics } from "../renderer-C79EQDSn.js";
1
+ import { a as RenderedFrames, c as renderModel, i as RenderOptions, l as renderModelFrames, n as AnimationLimits, o as boxDownscale, r as ItemRenderError, s as pointResize, t as AnimationDiagnostics } from "../renderer-U20hnhbi.js";
2
2
  export { AnimationDiagnostics, AnimationLimits, ItemRenderError, RenderOptions, RenderedFrames, boxDownscale, pointResize, renderModel, renderModelFrames };
@@ -1,2 +1,2 @@
1
- import { a as renderModelFrames, i as renderModel, n as boxDownscale, r as pointResize, t as ItemRenderError } from "../renderer-DB1Oe7xs.js";
1
+ import { a as ItemRenderError, c as renderModel, l as renderModelFrames, o as boxDownscale, s as pointResize } from "../obj-BEjq3_Ao.js";
2
2
  export { ItemRenderError, boxDownscale, pointResize, renderModel, renderModelFrames };
@@ -1,2 +1,2 @@
1
- import { a as resolveTint, i as parseTintValue, n as InvalidTinterDefinitionError, o as resolveTints, r as TintContext, t as DYE_COLORS } from "../tints-Do9Sh3dg.js";
1
+ import { a as resolveTint, i as parseTintValue, n as InvalidTinterDefinitionError, o as resolveTints, r as TintContext, t as DYE_COLORS } from "../tints-DqhgFi8a.js";
2
2
  export { DYE_COLORS, InvalidTinterDefinitionError, TintContext, parseTintValue, resolveTint, resolveTints };
@@ -1,2 +1,2 @@
1
- import { a as resolveTints, i as resolveTint, n as InvalidTinterDefinitionError, r as parseTintValue, t as DYE_COLORS } from "../tints-3VI_2SNy.js";
1
+ import { a as resolveTints, i as resolveTint, n as InvalidTinterDefinitionError, r as parseTintValue, t as DYE_COLORS } from "../tints-B3WQcPtx.js";
2
2
  export { DYE_COLORS, InvalidTinterDefinitionError, parseTintValue, resolveTint, resolveTints };
@@ -1,10 +1,10 @@
1
1
  import { a as ResourceManager } from "./manager-Cv1NeFyF.js";
2
2
  import { i as TextureLoader } from "./loader-Myy22TDL.js";
3
- import { r as ResolvedModel } from "./loader-DD83d80u.js";
3
+ import { r as ResolvedModel } from "./loader-C_1_amsq.js";
4
4
  import { n as FloatTexture } from "./blend-8lnfxtLe.js";
5
5
  import { t as Mat4 } from "./vector-DRKRi4--.js";
6
6
  import { a as LightingProfileName } from "./lighting-3FGRC3Af.js";
7
- import { r as TintColor } from "./face-cQ-pVHoe.js";
7
+ import { r as TintColor } from "./face-BKwkeTps.js";
8
8
  //#region src/render/renderer.d.ts
9
9
  interface AnimationLimits {
10
10
  /** Emitted frames per icon (default 128). */
@@ -1,2 +1,2 @@
1
- import { n as restoreResources, t as describeResources } from "../descriptor-DWebtkI1.js";
1
+ import { n as restoreResources, t as describeResources } from "../descriptor-BVIoEpPO.js";
2
2
  export { describeResources, restoreResources };
@@ -0,0 +1,51 @@
1
+ import { n as ResourceLocator } from "../locator-jDbdUeTd.js";
2
+ import { a as ResourceManager } from "../manager-Cv1NeFyF.js";
3
+ import { i as TextureLoader } from "../loader-Myy22TDL.js";
4
+ //#region src/resources/entity-textures.d.ts
5
+ declare function tokens(name: string): string[];
6
+ /** Vanilla DyeColor diffuse colors, keyed by the dye name mods prefix with. */
7
+ declare const DYE_COLORS: Record<string, number>;
8
+ /** Skin sheet sizes the mobheads pack has base geometry for. */
9
+ declare const HEAD_LAYOUTS: Record<string, string>;
10
+ /**
11
+ * The entity sheet for a mob, preferring a file named exactly after it. Sheets
12
+ * live at entity/<mob>.png or entity/<mob>/<mob>.png depending on the mod, and a
13
+ * head only ever wants the base skin — never a blink or armour overlay.
14
+ */
15
+ declare function findMobTexture(resources: ResourceManager, namespace: string, mob: string): Promise<ResourceLocator | null>;
16
+ /**
17
+ * Find the mod's own chest sheet for a chest-like item by token overlap over
18
+ * the FULL texture path — mods keep variant sheets in per-wood directories
19
+ * (quark's `quark_variant_chests/acacia/normal.png`), not just under entity/.
20
+ */
21
+ declare function findChestTexture(resources: ResourceManager, namespace: string, itemName: string): Promise<ResourceLocator | null>;
22
+ /** Find a full modded bed entity sheet, preferring every distinguishing item-name token. */
23
+ declare function findBedTexture(resources: ResourceManager, namespace: string, itemName: string): Promise<ResourceLocator | null>;
24
+ /**
25
+ * Whether a sheet is a whole skin rather than an overlay. Vanilla's shulker
26
+ * covers 44% of its sheet; a tier trim covers under 5%.
27
+ */
28
+ declare function coversSheet(textures: TextureLoader, locator: ResourceLocator): Promise<boolean>;
29
+ /**
30
+ * A mod's entity sheet for a kind, preferring the one its item name points at.
31
+ * Not restricted to `entity/`: lootr files its whole-skin sheets straight under
32
+ * `textures/` (`lootr:shulker`), and the caller gates on coverage anyway.
33
+ */
34
+ declare function findEntityTexture(resources: ResourceManager, namespace: string, itemName: string, kind: string): Promise<ResourceLocator | null>;
35
+ /**
36
+ * The still sprite for a fluid block. A fluid's two frames are `<name>_still`
37
+ * and `<name>_flow` by a convention every loader follows, but where they live
38
+ * is up to the mod — Create puts them under `fluid/`, Immersive Engineering
39
+ * under `block/fluid/`, Mekanism under `liquid/` — and the block is named for
40
+ * the fluid with a suffix the mod picks.
41
+ */
42
+ declare function findFluidStill(resources: ResourceManager, namespace: string, blockName: string): Promise<ResourceLocator | null>;
43
+ /**
44
+ * A sheet filed beside a fluid's still one — its flow frames, or the overlay
45
+ * drawn where it meets a solid face. Vanilla and most mods spell flow `_flow`;
46
+ * some spell it `_flowing`. Only water has an overlay, and deriving it as a
47
+ * sibling is what keeps lava from borrowing water's.
48
+ */
49
+ declare function findFluidSibling(resources: ResourceManager, still: ResourceLocator, suffixes: string[]): Promise<ResourceLocator | null>;
50
+ //#endregion
51
+ export { DYE_COLORS, HEAD_LAYOUTS, coversSheet, findBedTexture, findChestTexture, findEntityTexture, findFluidSibling, findFluidStill, findMobTexture, tokens };
@@ -0,0 +1,2 @@
1
+ import { a as findChestTexture, c as findFluidStill, i as findBedTexture, l as findMobTexture, n as HEAD_LAYOUTS, o as findEntityTexture, r as coversSheet, s as findFluidSibling, t as DYE_COLORS, u as tokens } from "../entity-textures-DFRIVdF1.js";
2
+ export { DYE_COLORS, HEAD_LAYOUTS, coversSheet, findBedTexture, findChestTexture, findEntityTexture, findFluidSibling, findFluidStill, findMobTexture, tokens };
@@ -1,2 +1,2 @@
1
- import { n as UnsafeJarError, r as isUnsafeEntryPath, t as JarResourceManager } from "../jar-D9z-X7tA.js";
1
+ import { n as UnsafeJarError, r as isUnsafeEntryPath, t as JarResourceManager } from "../jar-5aLDI0nT.js";
2
2
  export { JarResourceManager, UnsafeJarError, isUnsafeEntryPath };
@@ -1,2 +1,2 @@
1
- import { n as ResourceLocator, t as InvalidResourceLocatorError } from "../locator-ycZzh_6z.js";
1
+ import { n as ResourceLocator, t as InvalidResourceLocatorError } from "../locator-COMEtEn9.js";
2
2
  export { InvalidResourceLocatorError, ResourceLocator };
@@ -1,2 +1,2 @@
1
- import { n as LayeredResourceManager, r as ResourceKind, t as FolderResourceManager } from "../manager-CkletR5K.js";
1
+ import { n as LayeredResourceManager, r as ResourceKind, t as FolderResourceManager } from "../manager-CYbAkWuT.js";
2
2
  export { FolderResourceManager, LayeredResourceManager, ResourceKind };
@@ -1,2 +1,2 @@
1
- import { n as MapResourceManager, t as KindFilteredResourceManager } from "../synthetic-ZAUjXT7E.js";
1
+ import { n as MapResourceManager, t as KindFilteredResourceManager } from "../synthetic-rc9BPT4P.js";
2
2
  export { KindFilteredResourceManager, MapResourceManager };
@@ -1,6 +1,6 @@
1
1
  import { a as ResourceManager } from "./manager-Cv1NeFyF.js";
2
2
  import { a as LightingProfileName } from "./lighting-3FGRC3Af.js";
3
- import { n as AnimationLimits } from "./renderer-C79EQDSn.js";
3
+ import { n as AnimationLimits } from "./renderer-U20hnhbi.js";
4
4
  //#region src/run.d.ts
5
5
  interface RunOptions {
6
6
  resources: ResourceManager;
@@ -1,11 +1,13 @@
1
- import { n as ResourceLocator } from "./locator-ycZzh_6z.js";
2
- import { n as discoverItems } from "./discovery-B9aqV_Rz.js";
1
+ import { n as ResourceLocator } from "./locator-COMEtEn9.js";
2
+ import { n as LayeredResourceManager } from "./manager-CYbAkWuT.js";
3
+ import { t as curatedModelOverrides } from "./models-CQwcTZcg.js";
4
+ import { n as discoverItems } from "./discovery-CsZu08re.js";
3
5
  import { r as encodeRasterAsset } from "./encode-LR9wxigC.js";
4
- import { t as classifyItemStyle } from "./item-styles-upgEO1yP.js";
6
+ import { t as classifyItemStyle } from "./item-styles-DjYRdyHi.js";
5
7
  import { t as minifyStylesheet } from "./minify-bjMRmr5J.js";
6
8
  import { t as generateStylesheet } from "./stylesheet-CovT3B2S.js";
7
- import { t as ItemPipeline } from "./pipeline-CgJaVpoL.js";
8
- import { t as describeResources } from "./descriptor-DWebtkI1.js";
9
+ import { t as ItemPipeline } from "./pipeline-DRMsBiod.js";
10
+ import { t as describeResources } from "./descriptor-BVIoEpPO.js";
9
11
  import { t as WorkerRenderPool } from "./pool-CKGp1qup.js";
10
12
  import path from "node:path";
11
13
  import os from "node:os";
@@ -39,9 +41,10 @@ async function run(options) {
39
41
  lightingProfile,
40
42
  animation: options.animation
41
43
  };
44
+ const resourceTree = new LayeredResourceManager([curatedModelOverrides(), options.resources]);
42
45
  const concurrency = Math.max(1, options.concurrency ?? 8);
43
46
  const requestedWorkers = resolveWorkerCount(options.workers);
44
- const descriptor = requestedWorkers > 1 ? describeResources(options.resources) : null;
47
+ const descriptor = requestedWorkers > 1 ? describeResources(resourceTree) : null;
45
48
  const pool = descriptor ? new WorkerRenderPool({
46
49
  workerUrl: workerUrl(),
47
50
  workerData: {
@@ -53,7 +56,7 @@ async function run(options) {
53
56
  inFlight: concurrency
54
57
  }) : null;
55
58
  const usedWorkers = pool ? requestedWorkers : 1;
56
- const pipeline = await ItemPipeline.create(options.resources, settings).catch(async (err) => {
59
+ const pipeline = await ItemPipeline.create(resourceTree, settings).catch(async (err) => {
57
60
  await pool?.close();
58
61
  throw err;
59
62
  });
package/dist/run.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { l as evaluateItemModel } from "./definition-ricL7Jqf.js";
2
- import { i as run, n as RunOptions, r as RunResult, t as ItemFailure } from "./run-uq8_hUx9.js";
2
+ import { i as run, n as RunOptions, r as RunResult, t as ItemFailure } from "./run-CvIqiZ6T.js";
3
3
  export { ItemFailure, RunOptions, RunResult, evaluateItemModel, run };
package/dist/run.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import { o as evaluateItemModel } from "./definition-ColsvWrH.js";
2
- import { t as run } from "./run-BPfpBZyZ.js";
2
+ import { t as run } from "./run-D2S_W5As.js";
3
3
  export { evaluateItemModel, run };
@@ -1,4 +1,4 @@
1
- import { n as ResourceLocator } from "./locator-ycZzh_6z.js";
1
+ import { n as ResourceLocator } from "./locator-COMEtEn9.js";
2
2
  //#region src/atlas/sources.ts
3
3
  /**
4
4
  * Atlas texture sources (docs/research/renderchest-spec.md §6): directory,
@@ -1,5 +1,5 @@
1
- import { n as ResourceLocator } from "./locator-ycZzh_6z.js";
2
- import { n as MapResourceManager } from "./synthetic-ZAUjXT7E.js";
1
+ import { n as ResourceLocator } from "./locator-COMEtEn9.js";
2
+ import { n as MapResourceManager } from "./synthetic-rc9BPT4P.js";
3
3
  //#region src/mods/synthesize.ts
4
4
  /**
5
5
  * Model synthesis for mods that ship textures without item models, ported from
@@ -1,2 +1,2 @@
1
- import { n as TextureLoader, r as TextureResolutionError, t as AnimatedTexture } from "../loader-Lb0ZeILz.js";
1
+ import { n as TextureLoader, r as TextureResolutionError, t as AnimatedTexture } from "../loader-C18GpurU.js";
2
2
  export { AnimatedTexture, TextureLoader, TextureResolutionError };
@@ -0,0 +1,41 @@
1
+ import { a as ResourceManager } from "./manager-Cv1NeFyF.js";
2
+ import { i as TextureLoader } from "./loader-Myy22TDL.js";
3
+ //#region src/blocks/tints.d.ts
4
+ type BlockTint =
5
+ /** Sample the named colormap at the block's biome climate. */
6
+ {
7
+ kind: 'grass' | 'foliage' | 'dry_foliage';
8
+ } |
9
+ /** The biome's flat `water_color`. */
10
+ {
11
+ kind: 'water';
12
+ } | {
13
+ kind: 'constant';
14
+ color: string;
15
+ } |
16
+ /** Index a ramp by the named blockstate property's numeric value. */
17
+ {
18
+ kind: 'ramp';
19
+ ramp: 'redstone' | 'stem';
20
+ property: string;
21
+ };
22
+ interface BlockTintPack {
23
+ /** Plains-climate colours, the flat tint a v1 consumer applies everywhere. */
24
+ flat: Record<string, string>;
25
+ /** Colormap name → file inside the pack, for real biome tints later. */
26
+ colormaps: Record<string, string>;
27
+ ramps: Record<string, string[]>;
28
+ /** Block id → tintindex → semantics. */
29
+ blocks: Record<string, Record<string, BlockTint>>;
30
+ }
31
+ interface BuiltBlockTints {
32
+ pack: BlockTintPack;
33
+ /** Colormap PNGs to copy into the pack, keyed by their path inside it. */
34
+ files: Array<{
35
+ path: string;
36
+ data: Buffer;
37
+ }>;
38
+ }
39
+ declare function buildBlockTints(resources: ResourceManager, textures: TextureLoader): Promise<BuiltBlockTints>;
40
+ //#endregion
41
+ export { buildBlockTints as i, BlockTintPack as n, BuiltBlockTints as r, BlockTint as t };
@@ -1,4 +1,4 @@
1
- import { n as ResourceLocator } from "./locator-ycZzh_6z.js";
1
+ import { n as ResourceLocator } from "./locator-COMEtEn9.js";
2
2
  //#region src/render/tints.ts
3
3
  /**
4
4
  * Tint definition → color resolution for static icons, mirroring upstream's
@@ -1,5 +1,5 @@
1
1
  import { i as TextureLoader } from "./loader-Myy22TDL.js";
2
- import { r as TintColor } from "./face-cQ-pVHoe.js";
2
+ import { r as TintColor } from "./face-BKwkeTps.js";
3
3
  import { o as TintDefinition } from "./definition-ricL7Jqf.js";
4
4
  //#region src/render/tints.d.ts
5
5
  declare class InvalidTinterDefinitionError extends Error {}
@@ -0,0 +1,176 @@
1
+ import { n as ResourceLocator } from "./locator-COMEtEn9.js";
2
+ //#region src/blocks/tints.ts
3
+ /**
4
+ * Block tint semantics for the exported pack.
5
+ *
6
+ * Blocks, unlike items, state none of this in their assets — vanilla registers
7
+ * every tint in `BlockColors.createDefault()` in Java, so the mapping below is
8
+ * hand-maintained against that method. Anything not in it exports untinted, and
9
+ * `src/blocks/export.ts` records the gap in the failures sidecar so a missing
10
+ * entry is visible rather than silent.
11
+ *
12
+ * The colour *values* are not hand-written: grass and foliage are sampled from
13
+ * the version's own colormaps at plains' climate, so a pack always carries the
14
+ * colours that version ships. Real per-biome tints need a temperature/downfall
15
+ * table the assets do not contain; the colormaps ride along in the pack so that
16
+ * stays a refinement rather than a re-export.
17
+ */
18
+ /** Plains: the climate a v1 consumer tints everything at. */
19
+ const PLAINS_TEMPERATURE = .8;
20
+ const PLAINS_DOWNFALL = .4;
21
+ /** Plains' `water_color`, which lives in biome data rather than in assets. */
22
+ const PLAINS_WATER = "#3f76e4";
23
+ const GRASS_BLOCKS = [
24
+ "grass_block",
25
+ "short_grass",
26
+ "grass",
27
+ "fern",
28
+ "tall_grass",
29
+ "large_fern",
30
+ "potted_fern",
31
+ "sugar_cane"
32
+ ];
33
+ const FOLIAGE_BLOCKS = [
34
+ "oak_leaves",
35
+ "jungle_leaves",
36
+ "acacia_leaves",
37
+ "dark_oak_leaves",
38
+ "mangrove_leaves",
39
+ "vine"
40
+ ];
41
+ const WATER_BLOCKS = [
42
+ "water",
43
+ "bubble_column",
44
+ "cauldron",
45
+ "water_cauldron"
46
+ ];
47
+ /** Blocks whose tint vanilla hard-codes rather than reading from a colormap. */
48
+ const CONSTANT_TINTS = {
49
+ spruce_leaves: "#619961",
50
+ birch_leaves: "#80a755",
51
+ lily_pad: "#208030",
52
+ attached_melon_stem: "#e0c71c",
53
+ attached_pumpkin_stem: "#e0c71c"
54
+ };
55
+ /**
56
+ * `DyeColor.getTextureDiffuseColor`. A banner is one greyscale sheet the game
57
+ * multiplies by the dye, which is why 16 colours cost one model and 32 entries
58
+ * here rather than 32 models.
59
+ */
60
+ const DYE_TEXTURE_COLORS = {
61
+ white: "#f9fffe",
62
+ orange: "#f9801d",
63
+ magenta: "#c74ebd",
64
+ light_blue: "#3ab3da",
65
+ yellow: "#fed83d",
66
+ lime: "#80c71f",
67
+ pink: "#f38baa",
68
+ gray: "#474f52",
69
+ light_gray: "#9d9d97",
70
+ cyan: "#169c9c",
71
+ purple: "#8932b8",
72
+ blue: "#3c44aa",
73
+ brown: "#835432",
74
+ green: "#5e7c16",
75
+ red: "#b02e26",
76
+ black: "#1d1d21"
77
+ };
78
+ function hex(red, green, blue) {
79
+ return `#${[
80
+ red,
81
+ green,
82
+ blue
83
+ ].map((channel) => Math.round(channel).toString(16).padStart(2, "0")).join("")}`;
84
+ }
85
+ function clamp01(value) {
86
+ return Math.min(1, Math.max(0, value));
87
+ }
88
+ /** `RedStoneWireBlock.colorForPower`, for power levels 0–15. */
89
+ function redstoneRamp() {
90
+ return Array.from({ length: 16 }, (_, power) => {
91
+ const level = power / 15;
92
+ return hex((level * .6 + (level > 0 ? .4 : .3)) * 255, clamp01(level * level * .7 - .5) * 255, clamp01(level * level * .6 - .7) * 255);
93
+ });
94
+ }
95
+ /** The age ramp `BlockColors` registers for melon and pumpkin stems. */
96
+ function stemRamp() {
97
+ return Array.from({ length: 8 }, (_, age) => hex(age * 32, 255 - age * 8, age * 4));
98
+ }
99
+ /**
100
+ * Vanilla's colormap lookup (`GrassColor.get` / `FoliageColor.get`): a climate
101
+ * pair addresses the triangular half of a 256x256 map.
102
+ */
103
+ async function sampleColormap(textures, locator, temperature, downfall) {
104
+ const texture = await textures.load(locator).catch(() => null);
105
+ if (!texture) return null;
106
+ const x = Math.min(texture.width - 1, Math.floor((1 - temperature) * 255));
107
+ const offset = (Math.min(texture.height - 1, Math.floor((1 - downfall * temperature) * 255)) * texture.width + x) * 4;
108
+ return hex(texture.data[offset], texture.data[offset + 1], texture.data[offset + 2]);
109
+ }
110
+ async function buildBlockTints(resources, textures) {
111
+ const flat = { water: PLAINS_WATER };
112
+ const colormaps = {};
113
+ const files = [];
114
+ for (const name of [
115
+ "grass",
116
+ "foliage",
117
+ "dry_foliage"
118
+ ]) {
119
+ const locator = new ResourceLocator("minecraft", `colormap/${name}`);
120
+ const raw = await resources.getResource("texture", locator);
121
+ if (raw === null) continue;
122
+ const sampled = await sampleColormap(textures, locator, PLAINS_TEMPERATURE, PLAINS_DOWNFALL);
123
+ if (sampled !== null) flat[name] = sampled;
124
+ const file = `colormap/${name}.png`;
125
+ colormaps[name] = file;
126
+ files.push({
127
+ path: file,
128
+ data: raw
129
+ });
130
+ }
131
+ const blocks = {};
132
+ const put = (id, tint) => {
133
+ blocks[`minecraft:${id}`] = { 0: tint };
134
+ };
135
+ for (const id of GRASS_BLOCKS) put(id, { kind: "grass" });
136
+ for (const id of FOLIAGE_BLOCKS) put(id, { kind: "foliage" });
137
+ for (const id of WATER_BLOCKS) put(id, { kind: "water" });
138
+ for (const [id, color] of Object.entries(CONSTANT_TINTS)) put(id, {
139
+ kind: "constant",
140
+ color
141
+ });
142
+ for (const [colour, color] of Object.entries(DYE_TEXTURE_COLORS)) {
143
+ put(`${colour}_banner`, {
144
+ kind: "constant",
145
+ color
146
+ });
147
+ put(`${colour}_wall_banner`, {
148
+ kind: "constant",
149
+ color
150
+ });
151
+ }
152
+ put("redstone_wire", {
153
+ kind: "ramp",
154
+ ramp: "redstone",
155
+ property: "power"
156
+ });
157
+ for (const id of ["melon_stem", "pumpkin_stem"]) put(id, {
158
+ kind: "ramp",
159
+ ramp: "stem",
160
+ property: "age"
161
+ });
162
+ return {
163
+ pack: {
164
+ flat,
165
+ colormaps,
166
+ ramps: {
167
+ redstone: redstoneRamp(),
168
+ stem: stemRamp()
169
+ },
170
+ blocks
171
+ },
172
+ files
173
+ };
174
+ }
175
+ //#endregion
176
+ export { buildBlockTints as t };
@@ -1,8 +1,8 @@
1
1
  import { i as modTintPackPath } from "./builtin-WkWjATeh.js";
2
- import { n as ResourceLocator } from "./locator-ycZzh_6z.js";
3
- import { t as FolderResourceManager } from "./manager-CkletR5K.js";
2
+ import { n as ResourceLocator } from "./locator-COMEtEn9.js";
3
+ import { t as FolderResourceManager } from "./manager-CYbAkWuT.js";
4
+ import { n as MapResourceManager } from "./synthetic-rc9BPT4P.js";
4
5
  import { a as defaultProperties, o as evaluateItemModel } from "./definition-ColsvWrH.js";
5
- import { n as MapResourceManager } from "./synthetic-ZAUjXT7E.js";
6
6
  //#region src/mods/tints.ts
7
7
  /**
8
8
  * Tints for mod items whose colors live in client code rather than asset JSON.
@@ -38,6 +38,12 @@ interface ModelElementJson {
38
38
  from: Vec3;
39
39
  to: Vec3;
40
40
  rotation?: ElementRotationJson;
41
+ /**
42
+ * Ours, not vanilla: an extra angle about the element's own rotation axis,
43
+ * folded into `rotation.angle` by the loader. Supplementaries writes it on
44
+ * its awnings to get an arbitrary slant past vanilla's 22.5 steps.
45
+ */
46
+ extra_rotation?: number;
41
47
  shade?: boolean;
42
48
  light_emission?: number;
43
49
  /**
@@ -63,6 +69,11 @@ interface ModelJson {
63
69
  /** `front` renders items like flat sprites, `side` like blocks. */
64
70
  gui_light?: 'front' | 'side';
65
71
  display?: Partial<Record<DisplayPosition, DisplayTransformJson>>;
72
+ /**
73
+ * Loader extension (forge/neoforge): the render layer this model draws on,
74
+ * stated rather than inferred. Vanilla has no equivalent.
75
+ */
76
+ render_type?: string;
66
77
  /** name → locator or `#reference`. */
67
78
  textures?: Record<string, string>;
68
79
  elements?: ModelElementJson[];
@@ -1,2 +1,2 @@
1
- import { t as downloadClientJar } from "../download-D9aARBFp.js";
1
+ import { t as downloadClientJar } from "../download-1wAfrGKx.js";
2
2
  export { downloadClientJar };
@@ -1,2 +1,2 @@
1
- import { t as reshapeLegacyAssets } from "../legacy-reshape-C05SfAPR.js";
1
+ import { t as reshapeLegacyAssets } from "../legacy-reshape-CcdstKyI.js";
2
2
  export { reshapeLegacyAssets };