@nodecraft/rendermite 1.10.0 → 1.10.2

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 (81) hide show
  1. package/README.md +8 -7
  2. package/dist/{block-behaviour-BBslelpW.d.ts → block-behaviour-CzK3KVLx.d.ts} +2 -0
  3. package/dist/{block-overrides-XtxICunI.js → block-overrides-BhuJIxKC.js} +1 -1
  4. package/dist/blocks/block-behaviour.d.ts +1 -1
  5. package/dist/blocks/block-overrides.d.ts +1 -1
  6. package/dist/blocks/block-overrides.js +1 -1
  7. package/dist/blocks/cli.js +1 -1
  8. package/dist/blocks/ender-storage.d.ts +1 -1
  9. package/dist/blocks/ender-storage.js +1 -1
  10. package/dist/blocks/entities.d.ts +1 -1
  11. package/dist/blocks/entity-geo.js +1 -1
  12. package/dist/blocks/entity-models.d.ts +1 -1
  13. package/dist/blocks/entity-models.js +1 -1
  14. package/dist/blocks/entity-sizes.js +1 -1
  15. package/dist/blocks/export.js +1 -1
  16. package/dist/blocks/game-rules.js +1 -1
  17. package/dist/blocks/geo-blocks.d.ts +1 -1
  18. package/dist/blocks/geo-blocks.js +1 -1
  19. package/dist/blocks/item-sprites.d.ts +1 -1
  20. package/dist/blocks/light-bytecode.d.ts +1 -1
  21. package/dist/blocks/light-bytecode.js +1 -1
  22. package/dist/blocks/light-eval.d.ts +1 -1
  23. package/dist/blocks/light.d.ts +3 -1
  24. package/dist/blocks/light.js +1 -1
  25. package/dist/blocks/obj-mesh.js +1 -1
  26. package/dist/blocks/pack-format.d.ts +1 -1
  27. package/dist/blocks/sprite-sheet.d.ts +1 -1
  28. package/dist/blocks/sprite-sheet.js +1 -1
  29. package/dist/cached-BOX3n1Dl.js +54 -0
  30. package/dist/{cli-DwMPoX0I.js → cli--LNKFich.js} +1 -1
  31. package/dist/cli.js +2 -2
  32. package/dist/{compose-BGsNFR12.js → compose-CuIKcRpx.js} +1 -1
  33. package/dist/{encode-LR9wxigC.js → encode-TzYXOEId.js} +5 -4
  34. package/dist/{ender-storage-Dgomp6r2.js → ender-storage-CKDiYgYc.js} +1 -1
  35. package/dist/entities/mappings.js +1 -1
  36. package/dist/entities/model-code.js +1 -1
  37. package/dist/{entity-fallback-BucEf6WB.js → entity-fallback-BEzCbJq0.js} +1 -1
  38. package/dist/{entity-geo-DbTtMlPL.js → entity-geo-DcrcN8TE.js} +1 -1
  39. package/dist/{entity-models-vFl_EwfA.js → entity-models-D6AMLAy6.js} +3 -3
  40. package/dist/{entity-sizes-DspxgSUA.js → entity-sizes-Dmr4w0vu.js} +4 -3
  41. package/dist/{export-ArMmWuCC.js → export-Btg1y70w.js} +12 -10
  42. package/dist/{face-DbyyYmzp.js → face-D6SfTISC.js} +1 -1
  43. package/dist/{game-rules-BDPTopVW.js → game-rules-Dehe210A.js} +4 -3
  44. package/dist/{geo-BoDxwvz5.js → geo-BOYYFFQn.js} +3 -3
  45. package/dist/{geo-blocks-W79q5A0f.js → geo-blocks-BQqFfAQT.js} +1 -1
  46. package/dist/index.d.ts +1 -1
  47. package/dist/index.js +6 -6
  48. package/dist/{light-CZRA1pOj.js → light-BtV-VxAi.js} +26 -9
  49. package/dist/{light-bytecode-BqpQWqP7.js → light-bytecode-Bx3XLTRI.js} +45 -6
  50. package/dist/{light-eval-C0-kt0bp.d.ts → light-eval-B4q-aVcf.d.ts} +1 -1
  51. package/dist/{mappings-DEl_7xxQ.js → mappings-CTB7_uZa.js} +16 -1
  52. package/dist/{model-code-BmA5ilgt.js → model-code-C5Au_FKU.js} +4 -3
  53. package/dist/{obj-DPEK_xee.js → obj-NxBaySXt.js} +67 -33
  54. package/dist/{obj-mesh-BFhtTBXX.js → obj-mesh-BBSLG2Fv.js} +1 -1
  55. package/dist/output/encode.js +1 -1
  56. package/dist/output/item-styles.d.ts +1 -1
  57. package/dist/output/stylesheet.d.ts +1 -1
  58. package/dist/output/stylesheet.js +1 -1
  59. package/dist/pack.d.ts +2 -2
  60. package/dist/{pipeline-Q_185kY6.js → pipeline-CCfkRth7.js} +7 -6
  61. package/dist/{rasterizer-DcVJzkxz.js → rasterizer-M9Y7mn-W.js} +13 -5
  62. package/dist/read-ahead-BlSzTexs.js +31 -0
  63. package/dist/render/compose.js +1 -1
  64. package/dist/render/entity-fallback.js +1 -1
  65. package/dist/render/face.js +1 -1
  66. package/dist/render/geo.js +1 -1
  67. package/dist/render/obj.js +1 -1
  68. package/dist/render/pipeline.js +1 -1
  69. package/dist/render/rasterizer.js +1 -1
  70. package/dist/render/renderer.js +1 -1
  71. package/dist/resources/cached.d.ts +27 -0
  72. package/dist/resources/cached.js +2 -0
  73. package/dist/resources/read-ahead.d.ts +12 -0
  74. package/dist/resources/read-ahead.js +2 -0
  75. package/dist/{run-5yX5KRiI.js → run-Bf5TLTJw.js} +7 -6
  76. package/dist/run.js +1 -1
  77. package/dist/{sprite-sheet-LQAEtGkp.js → sprite-sheet-BWsLl0Vd.js} +4 -2
  78. package/dist/{stylesheet-CovT3B2S.js → stylesheet-C61VrCAV.js} +6 -4
  79. package/dist/{stylesheet-i-t_7sZ7.d.ts → stylesheet-DxHkk4qA.d.ts} +2 -0
  80. package/dist/workers/render-worker.js +1 -1
  81. package/package.json +1 -1
package/README.md CHANGED
@@ -116,13 +116,14 @@ Benchmarked against PHP renderchest v5.1.0 on the same machine, rendering the sa
116
116
 
117
117
  | | wall time | items written | silent drops | throughput |
118
118
  | --- | --- | --- | --- | --- |
119
- | renderchest (docker, 8 workers) | 210s | 1,573 | 33 | ~449/min |
120
- | rendermite (one Node process, pool 8) | 22.9s | 2,065 | 0 | ~5,410/min |
121
-
122
- That comparison is a fixed point in time; rendermite has since roughly halved its own wall
123
- time again (worker threads, a faster compositor, bounded animations). Run `npm run bench` for
124
- current numbers on your machine — CI runs the same suite and comments the delta on pull
125
- requests.
119
+ | renderchest (docker, 8 cores) | 186s | 1,573 | 33 | ~506/min |
120
+ | rendermite (one Node process, 8 worker threads) | 12.1s | 2,035 | 0 | ~10,070/min |
121
+
122
+ 15x faster with 29% more items rendered. renderchest logged 1,606 items as rendered and exited 0,
123
+ but wrote 1,573 of them; rendermite reports every item it could not draw in
124
+ `rc-minecraft-failures.json`. Both run with `--size 64 --format webp --fallback --item-list`,
125
+ median of warm runs, measured September 2026. Run `npm run bench` for current numbers on your
126
+ machine; CI runs the same suite and comments the delta on pull requests.
126
127
 
127
128
  ## Testing
128
129
 
@@ -420,6 +420,8 @@ interface LightCodeSource {
420
420
  * Absent, or answering the name it was given, where the jar already speaks original names.
421
421
  */
422
422
  nameOf?: (reference: MemberReference, field: boolean) => string;
423
+ /** A block's default state by full id, from the data generator's report when the export has one. */
424
+ defaultStateOf?: (blockId: string) => Readonly<Record<string, string>> | null;
423
425
  /** Classes that are a block `Properties` builder, in every spelling the jars use. */
424
426
  propsClasses: ReadonlySet<string>;
425
427
  /**
@@ -1,4 +1,4 @@
1
- import { n as instructions } from "./entity-sizes-DspxgSUA.js";
1
+ import { n as instructions } from "./entity-sizes-Dmr4w0vu.js";
2
2
  //#region src/blocks/block-overrides.ts
3
3
  /**
4
4
  * Where a block's own class answers a question itself, rather than leaving it to its `Properties`.
@@ -1,2 +1,2 @@
1
- import { i as statedMapColor, n as PushReactionName, r as blockBehaviour, t as BlockBehaviour } from "../block-behaviour-BBslelpW.js";
1
+ import { i as statedMapColor, n as PushReactionName, r as blockBehaviour, t as BlockBehaviour } from "../block-behaviour-CzK3KVLx.js";
2
2
  export { BlockBehaviour, PushReactionName, blockBehaviour, statedMapColor };
@@ -1,4 +1,4 @@
1
- import { d as MemberReference } from "../block-behaviour-BBslelpW.js";
1
+ import { d as MemberReference } from "../block-behaviour-CzK3KVLx.js";
2
2
  import { t as ClassFile } from "../classfile-Dzn0gW9M.js";
3
3
  //#region src/blocks/block-overrides.d.ts
4
4
  interface OverrideSource {
@@ -1,2 +1,2 @@
1
- import { i as overrideOf, n as constantFluidOf, r as constantsReadBy, t as alwaysInvisible } from "../block-overrides-XtxICunI.js";
1
+ import { i as overrideOf, n as constantFluidOf, r as constantsReadBy, t as alwaysInvisible } from "../block-overrides-BhuJIxKC.js";
2
2
  export { alwaysInvisible, constantFluidOf, constantsReadBy, overrideOf };
@@ -1,2 +1,2 @@
1
- import { t as runBlocksCli } from "../cli-DwMPoX0I.js";
1
+ import { t as runBlocksCli } from "../cli--LNKFich.js";
2
2
  export { runBlocksCli };
@@ -1,5 +1,5 @@
1
1
  import { a as ResourceManager } from "../manager-Ct0dEOMg.js";
2
- import { P as BlockPackModel } from "../block-behaviour-BBslelpW.js";
2
+ import { P as BlockPackModel } from "../block-behaviour-CzK3KVLx.js";
3
3
  //#region src/blocks/ender-storage.d.ts
4
4
  /**
5
5
  * Ender Storage feeds this OBJ through CodeChickenLib's `swapYZ`, translates it almost exactly onto
@@ -1,2 +1,2 @@
1
- import { t as enderStorageBlockModel } from "../ender-storage-Dgomp6r2.js";
1
+ import { t as enderStorageBlockModel } from "../ender-storage-CKDiYgYc.js";
2
2
  export { enderStorageBlockModel };
@@ -1,6 +1,6 @@
1
1
  import { a as ResourceManager } from "../manager-Ct0dEOMg.js";
2
2
  import { i as TextureLoader } from "../loader-C4gsX_wO.js";
3
- import { q as EntityPackEntry } from "../block-behaviour-BBslelpW.js";
3
+ import { q as EntityPackEntry } from "../block-behaviour-CzK3KVLx.js";
4
4
  //#region src/blocks/entities.d.ts
5
5
  interface EntityPackResult {
6
6
  entities: Record<string, EntityPackEntry>;
@@ -1,2 +1,2 @@
1
- import { t as findGeoForEntity } from "../entity-geo-DbTtMlPL.js";
1
+ import { t as findGeoForEntity } from "../entity-geo-DcrcN8TE.js";
2
2
  export { findGeoForEntity };
@@ -1,6 +1,6 @@
1
1
  import { a as ResourceManager } from "../manager-Ct0dEOMg.js";
2
2
  import { t as ClassSource } from "../jar-classes-CSRrPAUy.js";
3
- import { J as EntityPackModel, X as EquipmentPack } from "../block-behaviour-BBslelpW.js";
3
+ import { J as EntityPackModel, X as EquipmentPack } from "../block-behaviour-CzK3KVLx.js";
4
4
  import { t as Mappings } from "../mappings-DhOPQTgV.js";
5
5
  import { t as ModelCode } from "../model-code-BclYt1do.js";
6
6
  //#region src/blocks/entity-models.d.ts
@@ -1,2 +1,2 @@
1
- import { n as collectEntityGeometry, r as collectEquipment, t as collectArmourTrims } from "../entity-models-vFl_EwfA.js";
1
+ import { n as collectEntityGeometry, r as collectEquipment, t as collectArmourTrims } from "../entity-models-D6AMLAy6.js";
2
2
  export { collectArmourTrims, collectEntityGeometry, collectEquipment };
@@ -1,2 +1,2 @@
1
- import { n as instructions, t as collectEntitySizes } from "../entity-sizes-DspxgSUA.js";
1
+ import { n as instructions, t as collectEntitySizes } from "../entity-sizes-Dmr4w0vu.js";
2
2
  export { collectEntitySizes, instructions };
@@ -1,2 +1,2 @@
1
- import { t as exportBlockPack } from "../export-ArMmWuCC.js";
1
+ import { t as exportBlockPack } from "../export-Btg1y70w.js";
2
2
  export { exportBlockPack };
@@ -1,2 +1,2 @@
1
- import { t as collectGameRules } from "../game-rules-BDPTopVW.js";
1
+ import { t as collectGameRules } from "../game-rules-Dehe210A.js";
2
2
  export { collectGameRules };
@@ -1,5 +1,5 @@
1
1
  import { a as ResourceManager } from "../manager-Ct0dEOMg.js";
2
- import { P as BlockPackModel } from "../block-behaviour-BBslelpW.js";
2
+ import { P as BlockPackModel } from "../block-behaviour-CzK3KVLx.js";
3
3
  //#region src/blocks/geo-blocks.d.ts
4
4
  interface GeoBlockOverride {
5
5
  model: BlockPackModel;
@@ -1,2 +1,2 @@
1
- import { t as geoBlockModel } from "../geo-blocks-W79q5A0f.js";
1
+ import { t as geoBlockModel } from "../geo-blocks-BQqFfAQT.js";
2
2
  export { geoBlockModel };
@@ -1,7 +1,7 @@
1
1
  import { a as ResourceManager } from "../manager-Ct0dEOMg.js";
2
2
  import { i as TextureLoader } from "../loader-C4gsX_wO.js";
3
3
  import { t as ModelLoader } from "../loader-BYyPIs9f.js";
4
- import { Q as ItemPackEntry } from "../block-behaviour-BBslelpW.js";
4
+ import { Q as ItemPackEntry } from "../block-behaviour-CzK3KVLx.js";
5
5
  //#region src/blocks/item-sprites.d.ts
6
6
  interface ItemSpriteFailure {
7
7
  id: string;
@@ -1,2 +1,2 @@
1
- import { _ as extractBlockLight, a as Handle, c as LightExtraction, d as MemberReference, f as PropertyDomain, g as Value, h as StateProbe, l as LightGetter, m as Registration, o as LambdaValue, p as PropsCall, s as LightCodeSource, u as LightSpec } from "../block-behaviour-BBslelpW.js";
1
+ import { _ as extractBlockLight, a as Handle, c as LightExtraction, d as MemberReference, f as PropertyDomain, g as Value, h as StateProbe, l as LightGetter, m as Registration, o as LambdaValue, p as PropsCall, s as LightCodeSource, u as LightSpec } from "../block-behaviour-CzK3KVLx.js";
2
2
  export { Handle, LambdaValue, LightCodeSource, LightExtraction, LightGetter, LightSpec, MemberReference, PropertyDomain, PropsCall, Registration, StateProbe, Value, extractBlockLight };
@@ -1,2 +1,2 @@
1
- import { t as extractBlockLight } from "../light-bytecode-BqpQWqP7.js";
1
+ import { t as extractBlockLight } from "../light-bytecode-Bx3XLTRI.js";
2
2
  export { extractBlockLight };
@@ -1,2 +1,2 @@
1
- import { t as blockLightLevel } from "../light-eval-C0-kt0bp.js";
1
+ import { t as blockLightLevel } from "../light-eval-B4q-aVcf.js";
2
2
  export { blockLightLevel };
@@ -1,5 +1,5 @@
1
1
  import { t as ClassSource } from "../jar-classes-CSRrPAUy.js";
2
- import { j as BlockPackLight, t as BlockBehaviour } from "../block-behaviour-BBslelpW.js";
2
+ import { j as BlockPackLight, t as BlockBehaviour } from "../block-behaviour-CzK3KVLx.js";
3
3
  //#region src/blocks/light.d.ts
4
4
  interface CollectBlockLightOptions {
5
5
  version: string;
@@ -8,6 +8,8 @@ interface CollectBlockLightOptions {
8
8
  classes: ClassSource;
9
9
  /** Every block the pack describes, fully qualified; each gets an answer or a failure. */
10
10
  blockIds: readonly string[];
11
+ /** A block's default state, from the data generator's report, for a colour that is a function of state. */
12
+ defaultStateOf?: (blockId: string) => Readonly<Record<string, string>> | null;
11
13
  /** Blocks to describe in `notes` — what was registered and with which light — for chasing a failure. */
12
14
  trace?: readonly string[];
13
15
  onProgress?: (done: number, total: number) => void;
@@ -1,2 +1,2 @@
1
- import { n as collectBlockLight, r as vanillaLightAt, t as VANILLA_LIGHT } from "../light-CZRA1pOj.js";
1
+ import { n as collectBlockLight, r as vanillaLightAt, t as VANILLA_LIGHT } from "../light-BtV-VxAi.js";
2
2
  export { VANILLA_LIGHT, collectBlockLight, vanillaLightAt };
@@ -1,2 +1,2 @@
1
- import { n as buildObjMesh, t as ObjMeshError } from "../obj-mesh-BFhtTBXX.js";
1
+ import { n as buildObjMesh, t as ObjMeshError } from "../obj-mesh-BBSLG2Fv.js";
2
2
  export { ObjMeshError, buildObjMesh };
@@ -1,2 +1,2 @@
1
- import { $ as ItemPackLayer, A as BlockPackItemsFile, B as BlockPackStatesFile, C as BlockPackBlockState, D as BlockPackEntityModelsFile, E as BlockPackEntitiesFile, F as BlockPackModelsFile, G as EntityPackCube, H as BlockPackTintsFile, I as BlockPackNamesFile, J as EntityPackModel, K as EntityPackCubeFace, L as BlockPackRenderLayer, M as BlockPackLightFile, N as BlockPackMetaFile, O as BlockPackFace, P as BlockPackModel, Q as ItemPackEntry, R as BlockPackSprite, S as BlockPackBiomesFile, T as BlockPackElement, U as BlockPackVariant, V as BlockPackTagsFile, W as EQUIPMENT_SLOTS, X as EquipmentPack, Y as EntityPackPart, Z as EquipmentSlot, b as BlockPackAtlasPage, j as BlockPackLight, k as BlockPackGameRulesFile, q as EntityPackEntry, v as BlockPackAdvancementsFile, w as BlockPackBlockStatesFile, x as BlockPackBehaviourFile, y as BlockPackAtlasFile, z as BlockPackSpriteFrame } from "../block-behaviour-BBslelpW.js";
1
+ import { $ as ItemPackLayer, A as BlockPackItemsFile, B as BlockPackStatesFile, C as BlockPackBlockState, D as BlockPackEntityModelsFile, E as BlockPackEntitiesFile, F as BlockPackModelsFile, G as EntityPackCube, H as BlockPackTintsFile, I as BlockPackNamesFile, J as EntityPackModel, K as EntityPackCubeFace, L as BlockPackRenderLayer, M as BlockPackLightFile, N as BlockPackMetaFile, O as BlockPackFace, P as BlockPackModel, Q as ItemPackEntry, R as BlockPackSprite, S as BlockPackBiomesFile, T as BlockPackElement, U as BlockPackVariant, V as BlockPackTagsFile, W as EQUIPMENT_SLOTS, X as EquipmentPack, Y as EntityPackPart, Z as EquipmentSlot, b as BlockPackAtlasPage, j as BlockPackLight, k as BlockPackGameRulesFile, q as EntityPackEntry, v as BlockPackAdvancementsFile, w as BlockPackBlockStatesFile, x as BlockPackBehaviourFile, y as BlockPackAtlasFile, z as BlockPackSpriteFrame } from "../block-behaviour-CzK3KVLx.js";
2
2
  export { BlockPackAdvancementsFile, BlockPackAtlasFile, BlockPackAtlasPage, BlockPackBehaviourFile, BlockPackBiomesFile, BlockPackBlockState, BlockPackBlockStatesFile, BlockPackElement, BlockPackEntitiesFile, BlockPackEntityModelsFile, BlockPackFace, BlockPackGameRulesFile, BlockPackItemsFile, BlockPackLight, BlockPackLightFile, BlockPackMetaFile, BlockPackModel, BlockPackModelsFile, BlockPackNamesFile, BlockPackRenderLayer, BlockPackSprite, BlockPackSpriteFrame, BlockPackStatesFile, BlockPackTagsFile, BlockPackTintsFile, BlockPackVariant, EQUIPMENT_SLOTS, EntityPackCube, EntityPackCubeFace, EntityPackEntry, EntityPackModel, EntityPackPart, EquipmentPack, EquipmentSlot, ItemPackEntry, ItemPackLayer };
@@ -1,6 +1,6 @@
1
1
  import { i as TextureLoader, r as Texture } from "../loader-C4gsX_wO.js";
2
2
  import { i as PackedPage } from "../atlas-pack-BUadroKy.js";
3
- import { L as BlockPackRenderLayer, R as BlockPackSprite } from "../block-behaviour-BBslelpW.js";
3
+ import { L as BlockPackRenderLayer, R as BlockPackSprite } from "../block-behaviour-CzK3KVLx.js";
4
4
  //#region src/blocks/sprite-sheet.d.ts
5
5
  /**
6
6
  * Vanilla's own id for the missing-texture sprite. A face whose texture does
@@ -1,2 +1,2 @@
1
- import { i as missingTexture, n as buildSpriteSheet, r as inferRenderLayer, t as MISSING_SPRITE } from "../sprite-sheet-LQAEtGkp.js";
1
+ import { i as missingTexture, n as buildSpriteSheet, r as inferRenderLayer, t as MISSING_SPRITE } from "../sprite-sheet-BWsLl0Vd.js";
2
2
  export { MISSING_SPRITE, buildSpriteSheet, inferRenderLayer, missingTexture };
@@ -0,0 +1,54 @@
1
+ //#region src/resources/cached.ts
2
+ /**
3
+ * Remembers directory listings for the lifetime of one render or export.
4
+ *
5
+ * Fallback lookups (mob heads, chests, geo files, sprite fallbacks) scan a
6
+ * whole namespace per item, and every scan re-walked the jar index, re-read
7
+ * the builtin pack from disk and re-deduplicated thousands of locators across
8
+ * layers: one block export listed `minecraft` textures 849 times. The model
9
+ * and texture caches beside it already assume the tree is fixed for the run,
10
+ * so this assumes the same and no more. Reads pass straight through.
11
+ */
12
+ var CachedListingResourceManager = class {
13
+ inner;
14
+ listings = /* @__PURE__ */ new Map();
15
+ namespaces = null;
16
+ constructor(inner) {
17
+ this.inner = inner;
18
+ }
19
+ getResource(kind, locator) {
20
+ return this.inner.getResource(kind, locator);
21
+ }
22
+ getAllResources(kind, locator) {
23
+ return this.inner.getAllResources(kind, locator);
24
+ }
25
+ hasResource(kind, locator) {
26
+ return this.inner.hasResource(kind, locator);
27
+ }
28
+ async listResources(kind, namespace) {
29
+ const key = `${kind} ${namespace}`;
30
+ let listing = this.listings.get(key);
31
+ if (!listing) {
32
+ listing = this.inner.listResources(kind, namespace);
33
+ this.listings.set(key, listing);
34
+ listing.catch(() => this.listings.delete(key));
35
+ }
36
+ return [...await listing];
37
+ }
38
+ async listNamespaces() {
39
+ if (!this.namespaces) {
40
+ const pending = this.inner.listNamespaces();
41
+ this.namespaces = pending;
42
+ pending.catch(() => {
43
+ this.namespaces = null;
44
+ });
45
+ }
46
+ return [...await this.namespaces];
47
+ }
48
+ describe() {
49
+ const describable = this.inner;
50
+ return typeof describable.describe === "function" ? describable.describe() : null;
51
+ }
52
+ };
53
+ //#endregion
54
+ export { CachedListingResourceManager as t };
@@ -1,7 +1,7 @@
1
1
  import { n as builtinPackPath } from "./builtin-WkWjATeh.js";
2
2
  import { n as LayeredResourceManager, t as FolderResourceManager } from "./manager-D6zXmFrO.js";
3
3
  import { a as prepareVersionResources, r as compareVersions } from "./prepare-DkJkZXuQ.js";
4
- import { t as exportBlockPack } from "./export-ArMmWuCC.js";
4
+ import { t as exportBlockPack } from "./export-Btg1y70w.js";
5
5
  import { n as layeredClasses, t as JarClassReader } from "./jar-classes-0wqWbTax.js";
6
6
  import { n as prepareModResources } from "./prepare-sj36BP90.js";
7
7
  import { t as downloadClientJar } from "./download-1wAfrGKx.js";
package/dist/cli.js CHANGED
@@ -6,8 +6,8 @@ import { a as prepareVersionResources, i as eraForVersion, n as GEOMETRY_DONOR_V
6
6
  import { t as curatedModelOverrides } from "./models-BsYA-NZg.js";
7
7
  import { n as harvestTintOverrides, t as curatedTintOverrides } from "./tints-CZeyKzMv.js";
8
8
  import { t as downloadClientJar } from "./download-1wAfrGKx.js";
9
- import { t as runBlocksCli } from "./cli-DwMPoX0I.js";
10
- import { t as run } from "./run-5yX5KRiI.js";
9
+ import { t as runBlocksCli } from "./cli--LNKFich.js";
10
+ import { t as run } from "./run-Bf5TLTJw.js";
11
11
  import path from "node:path";
12
12
  import os from "node:os";
13
13
  import { parseArgs } from "node:util";
@@ -68,7 +68,7 @@ function combineFaceBuffers(width, height, faces) {
68
68
  deep[slotIndex] = index;
69
69
  deepDepth[slotIndex] = depth;
70
70
  deepRank[slotIndex] = rank[index];
71
- } else {
71
+ } else if (face.colors[localPixel * 4 + 3] > 0) {
72
72
  let slotIndex = flatCount++;
73
73
  while (slotIndex > 0 && flatRank[slotIndex - 1] > rank[index]) {
74
74
  flat[slotIndex] = flat[slotIndex - 1];
@@ -103,22 +103,23 @@ function countColors(data, cap) {
103
103
  }
104
104
  async function encodeIcon(texture, options = {}) {
105
105
  const bytes = toByteTexture(texture);
106
- const raw = sharp(Buffer.from(bytes.data.buffer, bytes.data.byteOffset, bytes.data.length), { raw: {
106
+ const pixels = Buffer.from(bytes.data.buffer, bytes.data.byteOffset, bytes.data.length);
107
+ const raw = () => sharp(pixels, { raw: {
107
108
  width: bytes.width,
108
109
  height: bytes.height,
109
110
  channels: 4
110
111
  } });
111
112
  const paletteSafe = countColors(bytes.data, 256) <= 256;
112
- const pngPromise = raw.clone().png({
113
+ const pngPromise = raw().png({
113
114
  compressionLevel: 9,
114
115
  effort: 10,
115
116
  palette: paletteSafe
116
117
  }).toBuffer();
117
- const webpPromise = options.webp !== false ? raw.clone().webp({
118
+ const webpPromise = options.webp !== false ? raw().webp({
118
119
  lossless: true,
119
120
  effort: STATIC_WEBP_EFFORT
120
121
  }).toBuffer() : Promise.resolve(void 0);
121
- const avifPromise = options.avif ? raw.clone().avif({
122
+ const avifPromise = options.avif ? raw().avif({
122
123
  lossless: true,
123
124
  effort: 6
124
125
  }).toBuffer() : Promise.resolve(void 0);
@@ -1,5 +1,5 @@
1
1
  import { n as ResourceLocator } from "./locator-COMEtEn9.js";
2
- import { r as parseObj } from "./obj-DPEK_xee.js";
2
+ import { r as parseObj } from "./obj-NxBaySXt.js";
3
3
  //#region src/blocks/ender-storage.ts
4
4
  /** Geometry for Ender Storage blocks whose shipped JSON model is only an empty Java-renderer hook. */
5
5
  const BLOCK_UNITS = 16;
@@ -1,2 +1,2 @@
1
- import { a as loadMappings, c as resolveMappings, i as isObfuscated, n as downloadClientMappings, o as parseMappings, r as identityMappings, s as remapDescriptor, t as MappingsUnavailableError } from "../mappings-DEl_7xxQ.js";
1
+ import { a as loadMappings, c as resolveMappings, i as isObfuscated, n as downloadClientMappings, o as parseMappings, r as identityMappings, s as remapDescriptor, t as MappingsUnavailableError } from "../mappings-CTB7_uZa.js";
2
2
  export { MappingsUnavailableError, downloadClientMappings, identityMappings, isObfuscated, loadMappings, parseMappings, remapDescriptor, resolveMappings };
@@ -1,2 +1,2 @@
1
- import { n as loadModelCode, t as isModelCode } from "../model-code-BmA5ilgt.js";
1
+ import { n as loadModelCode, t as isModelCode } from "../model-code-C5Au_FKU.js";
2
2
  export { isModelCode, loadModelCode };
@@ -1,6 +1,6 @@
1
1
  import { n as ResourceLocator } from "./locator-COMEtEn9.js";
2
2
  import { c as findEntityTexture, d as findMobTexture, h as tokens, m as resolveChestSheets, n as HEAD_LAYOUTS, o as findBedTexture, p as layerAccentSheet, t as DYE_COLORS } from "./entity-textures-DG6NUNyp.js";
3
- import { c as renderModel } from "./obj-DPEK_xee.js";
3
+ import { c as renderModel } from "./obj-NxBaySXt.js";
4
4
  //#region src/render/entity-fallback.ts
5
5
  /**
6
6
  * Heuristic rendering for mod items that parent `builtin/entity` — chests,
@@ -1,6 +1,6 @@
1
1
  import { n as ResourceLocator } from "./locator-COMEtEn9.js";
2
2
  import { t as geoToModel } from "./geo-model-Bo1gpEwX.js";
3
- import { i as parseGeo, r as nameTokens } from "./geo-BoDxwvz5.js";
3
+ import { i as parseGeo, r as nameTokens } from "./geo-BOYYFFQn.js";
4
4
  //#region src/blocks/entity-geo.ts
5
5
  /**
6
6
  * Finding the `.geo.json` a GeckoLib entity is drawn from.
@@ -1,12 +1,12 @@
1
1
  import { n as ResourceLocator } from "./locator-COMEtEn9.js";
2
- import { t as findGeoForEntity } from "./entity-geo-DbTtMlPL.js";
2
+ import { t as findGeoForEntity } from "./entity-geo-DcrcN8TE.js";
3
3
  import { t as EQUIPMENT_SLOTS } from "./pack-format-BP5dJMYY.js";
4
4
  import { t as parseClassFile } from "./classfile-BJSs3JH0.js";
5
5
  import { n as extractModel, t as extractArmourMesh } from "./model-bytecode-CXYAZ5dX.js";
6
6
  import { n as extractInheritedModel, t as ancestryOf } from "./inherit-DJ45bOB_.js";
7
7
  import { a as linkEntityModel, i as classReader, r as buildModelNameIndex } from "./link-IDjVJ2Ij.js";
8
- import { c as resolveMappings, t as MappingsUnavailableError } from "./mappings-DEl_7xxQ.js";
9
- import { n as loadModelCode } from "./model-code-BmA5ilgt.js";
8
+ import { c as resolveMappings, t as MappingsUnavailableError } from "./mappings-CTB7_uZa.js";
9
+ import { n as loadModelCode } from "./model-code-C5Au_FKU.js";
10
10
  //#region src/blocks/entity-models.ts
11
11
  /**
12
12
  * Entity geometry for the pack: link each entity to the class that builds it, read that class's
@@ -1,5 +1,6 @@
1
1
  import { t as parseClassFile } from "./classfile-BJSs3JH0.js";
2
- import { c as resolveMappings, t as MappingsUnavailableError } from "./mappings-DEl_7xxQ.js";
2
+ import { c as resolveMappings, t as MappingsUnavailableError } from "./mappings-CTB7_uZa.js";
3
+ import { t as readAhead } from "./read-ahead-BlSzTexs.js";
3
4
  //#region src/blocks/entity-sizes.ts
4
5
  /**
5
6
  * Each entity type's hitbox, read out of the code that registers it.
@@ -119,8 +120,8 @@ async function collectEntitySizes(options) {
119
120
  }
120
121
  const originalName = (owner, name, descriptor) => mappings.nameOf?.get(`${owner.replaceAll("/", ".")}.${name}${descriptor}`) ?? name;
121
122
  const parsed = [];
122
- for (const name of names) {
123
- const bytes = await options.classes.read(name);
123
+ for (const [, pending] of readAhead(names, (internal) => options.classes.read(internal))) {
124
+ const bytes = await pending;
124
125
  if (!bytes) continue;
125
126
  try {
126
127
  parsed.push(parseClassFile(bytes));
@@ -5,21 +5,22 @@ import { n as blockEntityGeometry, r as synthesizeVariants, t as INVISIBLE_BLOCK
5
5
  import { a as parseBlockState, n as collectModels } from "./blockstate-eval-CV_LwUwj.js";
6
6
  import { t as collectDatapack } from "./datapack-D6eH46ay.js";
7
7
  import { a as salvageJson, i as resolveTexture, t as ModelLoader } from "./loader-qOH0Jynq.js";
8
- import { t as enderStorageBlockModel } from "./ender-storage-Dgomp6r2.js";
8
+ import { t as enderStorageBlockModel } from "./ender-storage-CKDiYgYc.js";
9
9
  import { t as collectEntities } from "./entities-rQ4TZjEo.js";
10
- import { n as collectEntityGeometry } from "./entity-models-vFl_EwfA.js";
11
- import { t as collectEntitySizes } from "./entity-sizes-DspxgSUA.js";
12
- import { t as collectGameRules } from "./game-rules-BDPTopVW.js";
13
- import { t as geoBlockModel } from "./geo-blocks-W79q5A0f.js";
10
+ import { n as collectEntityGeometry } from "./entity-models-D6AMLAy6.js";
11
+ import { t as collectEntitySizes } from "./entity-sizes-Dmr4w0vu.js";
12
+ import { t as collectGameRules } from "./game-rules-Dehe210A.js";
13
+ import { t as geoBlockModel } from "./geo-blocks-BQqFfAQT.js";
14
14
  import { n as discoverItems } from "./discovery-CD0QqxSF.js";
15
15
  import { t as collectItemSprites } from "./item-sprites-CwiEBEAJ.js";
16
- import { n as collectBlockLight } from "./light-CZRA1pOj.js";
16
+ import { n as collectBlockLight } from "./light-BtV-VxAi.js";
17
17
  import { t as collectNames } from "./names-GLa5TyL7.js";
18
- import { n as buildObjMesh } from "./obj-mesh-BFhtTBXX.js";
19
- import { n as buildSpriteSheet, t as MISSING_SPRITE } from "./sprite-sheet-LQAEtGkp.js";
18
+ import { n as buildObjMesh } from "./obj-mesh-BBSLG2Fv.js";
19
+ import { n as buildSpriteSheet, t as MISSING_SPRITE } from "./sprite-sheet-BWsLl0Vd.js";
20
20
  import { t as readBlockStates } from "./states-BvoZA-ql.js";
21
21
  import { n as buildBlockTints, t as UNREGISTERED_TINTS } from "./tints-Cl0r-Ol3.js";
22
22
  import { t as loadAtlasResolver } from "./registry-DafxsAhG.js";
23
+ import { t as CachedListingResourceManager } from "./cached-BOX3n1Dl.js";
23
24
  import { n as TextureLoader } from "./loader-CsgtBuBo.js";
24
25
  import path from "node:path";
25
26
  import { createHash } from "node:crypto";
@@ -315,7 +316,7 @@ function bakeModel(id, model, failures) {
315
316
  }
316
317
  async function exportBlockPack(options) {
317
318
  const { output, version } = options;
318
- const resources = options.builtin ? new LayeredResourceManager([options.resources, new FolderResourceManager(options.builtin)]) : options.resources;
319
+ const resources = new CachedListingResourceManager(options.builtin ? new LayeredResourceManager([options.resources, new FolderResourceManager(options.builtin)]) : options.resources);
319
320
  const namespaces = options.namespaces ?? ["minecraft"];
320
321
  const failures = [];
321
322
  const report = (stage, done, total) => options.onProgress?.(stage, done, total);
@@ -699,6 +700,7 @@ async function exportBlockPack(options) {
699
700
  });
700
701
  }
701
702
  }
703
+ const states = options.reports === void 0 ? null : await readBlockStates(options.reports);
702
704
  let lightPack = {};
703
705
  let behaviourPack = {};
704
706
  if (options.classes) {
@@ -707,6 +709,7 @@ async function exportBlockPack(options) {
707
709
  cacheDir: options.cacheDir ?? output,
708
710
  classes: options.classes,
709
711
  blockIds: [.../* @__PURE__ */ new Set([...blockLocators.map((locator) => locator.toString()), ...Object.keys(blockStates)])],
712
+ defaultStateOf: (id) => states?.[id]?.default ?? null,
710
713
  onProgress: (count, total) => report("light", count, total)
711
714
  });
712
715
  lightPack = sortedByKey(collected.light);
@@ -734,7 +737,6 @@ async function exportBlockPack(options) {
734
737
  const names = await collectNames(resources, namespaces);
735
738
  const nameCount = Object.keys(names.block).length + Object.keys(names.item).length;
736
739
  const gameRules = options.classes && namespaces.includes("minecraft") ? await collectGameRules(options.classes) : {};
737
- const states = options.reports === void 0 ? null : await readBlockStates(options.reports);
738
740
  const statesPack = states === null ? null : Object.fromEntries(Object.entries(states).filter(([id]) => namespaces.includes(id.split(":", 1)[0])));
739
741
  let itemPack = null;
740
742
  let itemPages = [];
@@ -1,6 +1,6 @@
1
1
  import { a as scaleTextureAlpha, n as cloneFloatTexture, r as darkenTexture, s as tintTexture, u as uvWindow } from "./blend-KXMclcHk.js";
2
2
  import { c as normalize, g as transformVector, h as transformDirection, m as sub, r as dot, t as cross } from "./vector-CCxLae_T.js";
3
- import { a as drawTexturedTriangle, i as createFaceBuffer, n as clearFaceBuffer, o as phpRound, r as compactFaceBuffer, t as RowCursor } from "./rasterizer-DcVJzkxz.js";
3
+ import { a as drawTexturedTriangle, i as createFaceBuffer, n as clearFaceBuffer, o as phpRound, r as compactFaceBuffer, t as RowCursor } from "./rasterizer-M9Y7mn-W.js";
4
4
  //#region src/render/face.ts
5
5
  /**
6
6
  * Face rendering: cull, transform, project, tint, darken, rasterize — a faithful
@@ -1,5 +1,6 @@
1
1
  import { t as parseClassFile } from "./classfile-BJSs3JH0.js";
2
- import { n as instructions } from "./entity-sizes-DspxgSUA.js";
2
+ import { t as readAhead } from "./read-ahead-BlSzTexs.js";
3
+ import { n as instructions } from "./entity-sizes-Dmr4w0vu.js";
3
4
  //#region src/blocks/game-rules.ts
4
5
  /**
5
6
  * The version's game rules: each one's name, whether it is on/off or a number, and its default.
@@ -32,8 +33,8 @@ function valueKind(descriptor) {
32
33
  */
33
34
  async function collectGameRules(classes) {
34
35
  let best = {};
35
- for (const name of await classes.list()) {
36
- const bytes = await classes.read(name);
36
+ for (const [, pending] of readAhead(await classes.list(), (internal) => classes.read(internal))) {
37
+ const bytes = await pending;
37
38
  if (!bytes || ![...MARKERS].some((marker) => Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).includes(marker))) continue;
38
39
  let classFile;
39
40
  try {
@@ -2,9 +2,9 @@ import { n as ResourceLocator } from "./locator-COMEtEn9.js";
2
2
  import { l as toFloatTexture } from "./blend-KXMclcHk.js";
3
3
  import { n as displayMatrix } from "./vector-CCxLae_T.js";
4
4
  import { c as lightsForProfile } from "./lighting--5myudVu.js";
5
- import { i as createFaceBuffer } from "./rasterizer-DcVJzkxz.js";
6
- import { t as combineFaceBuffers } from "./compose-BGsNFR12.js";
7
- import { n as faceMaxZ, r as renderFace, t as createShadeCache } from "./face-DbyyYmzp.js";
5
+ import { i as createFaceBuffer } from "./rasterizer-M9Y7mn-W.js";
6
+ import { t as combineFaceBuffers } from "./compose-CuIKcRpx.js";
7
+ import { n as faceMaxZ, r as renderFace, t as createShadeCache } from "./face-D6SfTISC.js";
8
8
  //#region src/render/geo.ts
9
9
  /**
10
10
  * Bedrock-format geometry (`.geo.json`) rendering, best-effort. GeckoLib mods
@@ -1,5 +1,5 @@
1
1
  import { n as ResourceLocator } from "./locator-COMEtEn9.js";
2
- import { i as parseGeo, n as geoToFaces } from "./geo-BoDxwvz5.js";
2
+ import { i as parseGeo, n as geoToFaces } from "./geo-BOYYFFQn.js";
3
3
  //#region src/blocks/geo-blocks.ts
4
4
  /** GeckoLib block geometry selected by a Java block-entity renderer rather than its placeholder JSON. */
5
5
  /** Blocks whose ordinary cube model exists only for particles/breaking and is replaced in Java. */
package/dist/index.d.ts CHANGED
@@ -20,7 +20,7 @@ import { i as EncodedIcon, n as EncodeOptions, o as encodeAnimatedIcon, r as Enc
20
20
  import { t as minifyStylesheet } from "./minify-CIV6enbr.js";
21
21
  import { a as compareVersions, o as eraForVersion, s as prepareVersionResources } from "./prepare-Ce5SpR7Y.js";
22
22
  import { i as prepareModResources } from "./prepare-BPzsZI_S.js";
23
- import { i as itemClass, n as StylesheetOptions, r as generateStylesheet, t as ItemStyle } from "./stylesheet-i-t_7sZ7.js";
23
+ import { i as itemClass, n as StylesheetOptions, r as generateStylesheet, t as ItemStyle } from "./stylesheet-DxHkk4qA.js";
24
24
  import { i as run, n as RunOptions, r as RunResult, t as ItemFailure } from "./run-CxB1qabg.js";
25
25
  import { n as UnsafeJarError, r as isUnsafeEntryPath, t as JarResourceManager } from "./jar-4Jg7ufWK.js";
26
26
  export { type AnimatedEncodeOptions, AnimatedTexture, type AtlasResolver, type AtlasSource, AtlasSourceError, type BiomeClimate, type BiomeClimatePack, type BlockModelVariant, type BlockPackFailure, type BlockPackResult, type BlockProperties, type BlockStateDefinition, BlockStateError, type BlockStateMultipartCase, type BlockStateVariantCase, type BlockTint, type BlockTintPack, DEFAULT_WATER_COLOR, DYE_COLORS, type DiscoveredItem, type EncodeOptions, type EncodedAnimatedIcon, type EncodedIcon, type ExportBlockPackOptions, type FloatTexture, FolderResourceManager, InvalidItemDefinitionError, InvalidResourceLocatorError, InvalidTinterDefinitionError, type ItemDiscoveryOptions, type ItemFailure, type ItemProperties, ItemRenderError, type ItemRenderInstruction, ItemResolutionError, type ItemStyle, JarResourceManager, LEGACY_BIOMES, LayeredResourceManager, type LightSource, LightingProfile, type LightingProfileName, type MeshGroup, ModelLoader, ModelResolutionError, type MultipartCondition, type ObjMesh, ObjMeshError, PRE_JAR_BIOMES, type PackEntry, type PackOptions, type PackedAtlas, type PackedPage, type PackedRect, type RenderOptions, type RenderedFrames, type ResolvedModel, type ResolvedSprite, ResourceKind, type ResourceKindName, ResourceLocator, type ResourceManager, type RunOptions, type RunResult, type StylesheetOptions, type Texture, TextureLoader, type TextureMeta, TextureResolutionError, type TintDefinition, UNKNOWN_MODEL, UNREGISTERED_TINTS, UnsafeJarError, VANILLA_BIOME_CLIMATES, boxDownscale, buildBiomeClimates, buildBlockTints, buildObjMesh, builtinDynamicResources, collectModels, compareVersions, createAtlasResolver, defaultProperties, discoverItems, encodeAnimatedIcon, encodeIcon, eraForVersion, evaluateBlockState, evaluateItemModel, exportBlockPack, generateStylesheet, isUnsafeEntryPath, itemClass, lightsForProfile, matchesCondition, minifyStylesheet, packAtlas, parseAtlasSources, parseBiomeClimate, parseBlockState, parseTintValue, pointResize, prepareModResources, prepareVersionResources, renderModel, renderModelFrames, resolveItem, resolveTexture, resolveTint, resolveTints, run, salvageJson, toByteTexture, toFloatTexture, vanillaBiomesFor, weightedVariantIndex };
package/dist/index.js CHANGED
@@ -7,20 +7,20 @@ import { a as parseBlockState, i as matchesCondition, n as collectModels, o as w
7
7
  import { c as toByteTexture, l as toFloatTexture } from "./blend-KXMclcHk.js";
8
8
  import { c as lightsForProfile, r as LightingProfile } from "./lighting--5myudVu.js";
9
9
  import { a as salvageJson, i as resolveTexture, n as ModelResolutionError, t as ModelLoader } from "./loader-qOH0Jynq.js";
10
- import { a as ItemRenderError, c as renderModel, l as renderModelFrames, o as boxDownscale, s as pointResize } from "./obj-DPEK_xee.js";
10
+ import { a as ItemRenderError, c as renderModel, l as renderModelFrames, o as boxDownscale, s as pointResize } from "./obj-NxBaySXt.js";
11
11
  import { a as defaultProperties, i as UNKNOWN_MODEL, n as InvalidItemDefinitionError, o as evaluateItemModel } from "./definition-ColsvWrH.js";
12
12
  import { i as resolveItem, n as discoverItems, t as ItemResolutionError } from "./discovery-CD0QqxSF.js";
13
13
  import { a as resolveTints, i as resolveTint, n as InvalidTinterDefinitionError, r as parseTintValue, t as DYE_COLORS } from "./tints-B3WQcPtx.js";
14
- import { n as buildObjMesh, t as ObjMeshError } from "./obj-mesh-BFhtTBXX.js";
14
+ import { n as buildObjMesh, t as ObjMeshError } from "./obj-mesh-BBSLG2Fv.js";
15
15
  import { t as packAtlas } from "./atlas-pack-CoOih7By.js";
16
16
  import { n as buildBlockTints, t as UNREGISTERED_TINTS } from "./tints-Cl0r-Ol3.js";
17
17
  import { o as createAtlasResolver, s as parseAtlasSources, t as AtlasSourceError } from "./sources-DYY5Qu-t.js";
18
18
  import { n as TextureLoader, r as TextureResolutionError, t as AnimatedTexture } from "./loader-CsgtBuBo.js";
19
- import { t as exportBlockPack } from "./export-ArMmWuCC.js";
19
+ import { t as exportBlockPack } from "./export-Btg1y70w.js";
20
20
  import { n as prepareModResources } from "./prepare-sj36BP90.js";
21
- import { n as encodeIcon, t as encodeAnimatedIcon } from "./encode-LR9wxigC.js";
21
+ import { n as encodeIcon, t as encodeAnimatedIcon } from "./encode-TzYXOEId.js";
22
22
  import { a as builtinDynamicResources } from "./generators-D6giKoab.js";
23
23
  import { t as minifyStylesheet } from "./minify-bjMRmr5J.js";
24
- import { n as itemClass, t as generateStylesheet } from "./stylesheet-CovT3B2S.js";
25
- import { t as run } from "./run-5yX5KRiI.js";
24
+ import { n as itemClass, t as generateStylesheet } from "./stylesheet-C61VrCAV.js";
25
+ import { t as run } from "./run-Bf5TLTJw.js";
26
26
  export { AnimatedTexture, AtlasSourceError, BlockStateError, DEFAULT_WATER_COLOR, DYE_COLORS, FolderResourceManager, InvalidItemDefinitionError, InvalidResourceLocatorError, InvalidTinterDefinitionError, ItemRenderError, ItemResolutionError, JarResourceManager, LEGACY_BIOMES, LayeredResourceManager, LightingProfile, ModelLoader, ModelResolutionError, ObjMeshError, PRE_JAR_BIOMES, ResourceKind, ResourceLocator, TextureLoader, TextureResolutionError, UNKNOWN_MODEL, UNREGISTERED_TINTS, UnsafeJarError, VANILLA_BIOME_CLIMATES, boxDownscale, buildBiomeClimates, buildBlockTints, buildObjMesh, builtinDynamicResources, collectModels, compareVersions, createAtlasResolver, defaultProperties, discoverItems, encodeAnimatedIcon, encodeIcon, eraForVersion, evaluateBlockState, evaluateItemModel, exportBlockPack, generateStylesheet, isUnsafeEntryPath, itemClass, lightsForProfile, matchesCondition, minifyStylesheet, packAtlas, parseAtlasSources, parseBiomeClimate, parseBlockState, parseTintValue, pointResize, prepareModResources, prepareVersionResources, renderModel, renderModelFrames, resolveItem, resolveTexture, resolveTint, resolveTints, run, salvageJson, toByteTexture, toFloatTexture, vanillaBiomesFor, weightedVariantIndex };