nucleation 0.10.22 → 0.10.24

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 (303) hide show
  1. package/README.md +12 -0
  2. package/Schematic.d.mts +23 -0
  3. package/Schematic.d.ts +23 -0
  4. package/Schematic.mjs +70 -0
  5. package/nucleation.wasm +0 -0
  6. package/package.json +7 -2
  7. package/renderer/AnimationEffect.d.mts +44 -0
  8. package/renderer/AnimationEffect.d.ts +44 -0
  9. package/renderer/AnimationEffect.mjs +204 -0
  10. package/renderer/Autostack.d.mts +43 -0
  11. package/renderer/Autostack.d.ts +43 -0
  12. package/renderer/Autostack.mjs +134 -0
  13. package/renderer/BlockPos.d.mts +28 -0
  14. package/renderer/BlockPos.d.ts +28 -0
  15. package/renderer/BlockPos.mjs +130 -0
  16. package/renderer/BlockState.d.mts +39 -0
  17. package/renderer/BlockState.d.ts +39 -0
  18. package/renderer/BlockState.mjs +134 -0
  19. package/renderer/Blocks.d.mts +91 -0
  20. package/renderer/Blocks.d.ts +91 -0
  21. package/renderer/Blocks.mjs +308 -0
  22. package/renderer/Brush.d.mts +99 -0
  23. package/renderer/Brush.d.ts +99 -0
  24. package/renderer/Brush.mjs +335 -0
  25. package/renderer/BuildAnimation.d.mts +179 -0
  26. package/renderer/BuildAnimation.d.ts +179 -0
  27. package/renderer/BuildAnimation.mjs +1148 -0
  28. package/renderer/BuildingTool.d.mts +46 -0
  29. package/renderer/BuildingTool.d.ts +46 -0
  30. package/renderer/BuildingTool.mjs +121 -0
  31. package/renderer/CellExecutor.d.mts +51 -0
  32. package/renderer/CellExecutor.d.ts +51 -0
  33. package/renderer/CellExecutor.mjs +171 -0
  34. package/renderer/CellularSdfConfig.d.mts +22 -0
  35. package/renderer/CellularSdfConfig.d.ts +22 -0
  36. package/renderer/CellularSdfConfig.mjs +69 -0
  37. package/renderer/ChunkMeshResult.d.mts +75 -0
  38. package/renderer/ChunkMeshResult.d.ts +75 -0
  39. package/renderer/ChunkMeshResult.mjs +253 -0
  40. package/renderer/CircuitBuilder.d.mts +118 -0
  41. package/renderer/CircuitBuilder.d.ts +118 -0
  42. package/renderer/CircuitBuilder.mjs +516 -0
  43. package/renderer/Curve3D.d.mts +27 -0
  44. package/renderer/Curve3D.d.ts +27 -0
  45. package/renderer/Curve3D.mjs +101 -0
  46. package/renderer/DefinitionRegion.d.mts +274 -0
  47. package/renderer/DefinitionRegion.d.ts +274 -0
  48. package/renderer/DefinitionRegion.mjs +973 -0
  49. package/renderer/Design.d.mts +348 -0
  50. package/renderer/Design.d.ts +348 -0
  51. package/renderer/Design.mjs +1334 -0
  52. package/renderer/Diff.d.mts +88 -0
  53. package/renderer/Diff.d.ts +88 -0
  54. package/renderer/Diff.mjs +316 -0
  55. package/renderer/Dimensions.d.mts +28 -0
  56. package/renderer/Dimensions.d.ts +28 -0
  57. package/renderer/Dimensions.mjs +130 -0
  58. package/renderer/DistanceField.d.mts +39 -0
  59. package/renderer/DistanceField.d.ts +39 -0
  60. package/renderer/DistanceField.mjs +114 -0
  61. package/renderer/ExecutionMode.d.mts +42 -0
  62. package/renderer/ExecutionMode.d.ts +42 -0
  63. package/renderer/ExecutionMode.mjs +127 -0
  64. package/renderer/Field3.d.mts +40 -0
  65. package/renderer/Field3.d.ts +40 -0
  66. package/renderer/Field3.mjs +160 -0
  67. package/renderer/FieldProgram.d.mts +40 -0
  68. package/renderer/FieldProgram.d.ts +40 -0
  69. package/renderer/FieldProgram.mjs +167 -0
  70. package/renderer/FieldProgramBinaryOp.d.mts +42 -0
  71. package/renderer/FieldProgramBinaryOp.d.ts +42 -0
  72. package/renderer/FieldProgramBinaryOp.mjs +118 -0
  73. package/renderer/FieldProgramBuilder.d.mts +104 -0
  74. package/renderer/FieldProgramBuilder.d.ts +104 -0
  75. package/renderer/FieldProgramBuilder.mjs +486 -0
  76. package/renderer/FieldProgramDistanceKind.d.mts +26 -0
  77. package/renderer/FieldProgramDistanceKind.d.ts +26 -0
  78. package/renderer/FieldProgramDistanceKind.mjs +78 -0
  79. package/renderer/FieldProgramUnaryOp.d.mts +34 -0
  80. package/renderer/FieldProgramUnaryOp.d.ts +34 -0
  81. package/renderer/FieldProgramUnaryOp.mjs +102 -0
  82. package/renderer/FieldProgramValueType.d.mts +25 -0
  83. package/renderer/FieldProgramValueType.d.ts +25 -0
  84. package/renderer/FieldProgramValueType.mjs +75 -0
  85. package/renderer/FieldRange.d.mts +15 -0
  86. package/renderer/FieldRange.d.ts +15 -0
  87. package/renderer/FieldRange.mjs +109 -0
  88. package/renderer/Fingerprint.d.mts +44 -0
  89. package/renderer/Fingerprint.d.ts +44 -0
  90. package/renderer/Fingerprint.mjs +197 -0
  91. package/renderer/GeneratedChunk.d.mts +35 -0
  92. package/renderer/GeneratedChunk.d.ts +35 -0
  93. package/renderer/GeneratedChunk.mjs +178 -0
  94. package/renderer/GeneratedChunkCoverage.d.mts +25 -0
  95. package/renderer/GeneratedChunkCoverage.d.ts +25 -0
  96. package/renderer/GeneratedChunkCoverage.mjs +75 -0
  97. package/renderer/GeneratedChunkOverlayMode.d.mts +24 -0
  98. package/renderer/GeneratedChunkOverlayMode.d.ts +24 -0
  99. package/renderer/GeneratedChunkOverlayMode.mjs +72 -0
  100. package/renderer/GeneratedWorldStream.d.mts +28 -0
  101. package/renderer/GeneratedWorldStream.d.ts +28 -0
  102. package/renderer/GeneratedWorldStream.mjs +86 -0
  103. package/renderer/Geo.d.mts +41 -0
  104. package/renderer/Geo.d.ts +41 -0
  105. package/renderer/Geo.mjs +121 -0
  106. package/renderer/Hdl.d.mts +56 -0
  107. package/renderer/Hdl.d.ts +56 -0
  108. package/renderer/Hdl.mjs +163 -0
  109. package/renderer/InterpolationSpace.d.mts +25 -0
  110. package/renderer/InterpolationSpace.d.ts +25 -0
  111. package/renderer/InterpolationSpace.mjs +73 -0
  112. package/renderer/IoLayout.d.mts +26 -0
  113. package/renderer/IoLayout.d.ts +26 -0
  114. package/renderer/IoLayout.mjs +81 -0
  115. package/renderer/IoLayoutBuilder.d.mts +73 -0
  116. package/renderer/IoLayoutBuilder.d.ts +73 -0
  117. package/renderer/IoLayoutBuilder.mjs +315 -0
  118. package/renderer/IoType.d.mts +41 -0
  119. package/renderer/IoType.d.ts +41 -0
  120. package/renderer/IoType.mjs +125 -0
  121. package/renderer/ItemModelConfig.d.mts +65 -0
  122. package/renderer/ItemModelConfig.d.ts +65 -0
  123. package/renderer/ItemModelConfig.mjs +223 -0
  124. package/renderer/ItemModelPackBuilder.d.mts +32 -0
  125. package/renderer/ItemModelPackBuilder.d.ts +32 -0
  126. package/renderer/ItemModelPackBuilder.mjs +104 -0
  127. package/renderer/ItemModelResult.d.mts +72 -0
  128. package/renderer/ItemModelResult.d.ts +72 -0
  129. package/renderer/ItemModelResult.mjs +268 -0
  130. package/renderer/ItemScale.d.mts +31 -0
  131. package/renderer/ItemScale.d.ts +31 -0
  132. package/renderer/ItemScale.mjs +133 -0
  133. package/renderer/LayoutFunction.d.mts +52 -0
  134. package/renderer/LayoutFunction.d.ts +52 -0
  135. package/renderer/LayoutFunction.mjs +159 -0
  136. package/renderer/MchprsWorld.d.mts +131 -0
  137. package/renderer/MchprsWorld.d.ts +131 -0
  138. package/renderer/MchprsWorld.mjs +423 -0
  139. package/renderer/MeshBounds.d.mts +40 -0
  140. package/renderer/MeshBounds.d.ts +40 -0
  141. package/renderer/MeshBounds.mjs +181 -0
  142. package/renderer/MeshConfig.d.mts +101 -0
  143. package/renderer/MeshConfig.d.ts +101 -0
  144. package/renderer/MeshConfig.mjs +306 -0
  145. package/renderer/MeshJob.d.mts +44 -0
  146. package/renderer/MeshJob.d.ts +44 -0
  147. package/renderer/MeshJob.mjs +116 -0
  148. package/renderer/MeshPhase.d.mts +38 -0
  149. package/renderer/MeshPhase.d.ts +38 -0
  150. package/renderer/MeshPhase.mjs +90 -0
  151. package/renderer/MeshProgress.d.mts +32 -0
  152. package/renderer/MeshProgress.d.ts +32 -0
  153. package/renderer/MeshProgress.mjs +134 -0
  154. package/renderer/MeshResult.d.mts +76 -0
  155. package/renderer/MeshResult.d.ts +76 -0
  156. package/renderer/MeshResult.mjs +269 -0
  157. package/renderer/MultiMeshResult.d.mts +50 -0
  158. package/renderer/MultiMeshResult.d.ts +50 -0
  159. package/renderer/MultiMeshResult.mjs +166 -0
  160. package/renderer/Nbt.d.mts +50 -0
  161. package/renderer/Nbt.d.ts +50 -0
  162. package/renderer/Nbt.mjs +161 -0
  163. package/renderer/NucleationError.d.mts +53 -0
  164. package/renderer/NucleationError.d.ts +53 -0
  165. package/renderer/NucleationError.mjs +136 -0
  166. package/renderer/OutputCondition.d.mts +45 -0
  167. package/renderer/OutputCondition.d.ts +45 -0
  168. package/renderer/OutputCondition.mjs +129 -0
  169. package/renderer/Palette.d.mts +157 -0
  170. package/renderer/Palette.d.ts +157 -0
  171. package/renderer/Palette.mjs +487 -0
  172. package/renderer/PaletteBuilder.d.mts +119 -0
  173. package/renderer/PaletteBuilder.d.ts +119 -0
  174. package/renderer/PaletteBuilder.mjs +457 -0
  175. package/renderer/README.md +67 -0
  176. package/renderer/RawMeshExport.d.mts +74 -0
  177. package/renderer/RawMeshExport.d.ts +74 -0
  178. package/renderer/RawMeshExport.mjs +243 -0
  179. package/renderer/RedstoneGraph.d.mts +58 -0
  180. package/renderer/RedstoneGraph.d.ts +58 -0
  181. package/renderer/RedstoneGraph.mjs +242 -0
  182. package/renderer/RegionBounds.d.mts +41 -0
  183. package/renderer/RegionBounds.d.ts +41 -0
  184. package/renderer/RegionBounds.mjs +182 -0
  185. package/renderer/RenderConfig.d.mts +101 -0
  186. package/renderer/RenderConfig.d.ts +101 -0
  187. package/renderer/RenderConfig.mjs +271 -0
  188. package/renderer/Renderer.d.mts +51 -0
  189. package/renderer/Renderer.d.ts +51 -0
  190. package/renderer/Renderer.mjs +219 -0
  191. package/renderer/ResourcePack.d.mts +105 -0
  192. package/renderer/ResourcePack.d.ts +105 -0
  193. package/renderer/ResourcePack.mjs +447 -0
  194. package/renderer/ResourcePackList.d.mts +32 -0
  195. package/renderer/ResourcePackList.d.ts +32 -0
  196. package/renderer/ResourcePackList.mjs +96 -0
  197. package/renderer/Routing.d.mts +66 -0
  198. package/renderer/Routing.d.ts +66 -0
  199. package/renderer/Routing.mjs +220 -0
  200. package/renderer/Schematic.d.mts +977 -0
  201. package/renderer/Schematic.d.ts +977 -0
  202. package/renderer/Schematic.mjs +3820 -0
  203. package/renderer/SchematicBuilder.d.mts +103 -0
  204. package/renderer/SchematicBuilder.d.ts +103 -0
  205. package/renderer/SchematicBuilder.mjs +401 -0
  206. package/renderer/SchematicRegions.d.mts +93 -0
  207. package/renderer/SchematicRegions.d.ts +93 -0
  208. package/renderer/SchematicRegions.mjs +411 -0
  209. package/renderer/SchematicSplitResult.d.mts +26 -0
  210. package/renderer/SchematicSplitResult.d.ts +26 -0
  211. package/renderer/SchematicSplitResult.mjs +84 -0
  212. package/renderer/Scripting.d.mts +40 -0
  213. package/renderer/Scripting.d.ts +40 -0
  214. package/renderer/Scripting.mjs +138 -0
  215. package/renderer/Sdf.d.mts +234 -0
  216. package/renderer/Sdf.d.ts +234 -0
  217. package/renderer/Sdf.mjs +1234 -0
  218. package/renderer/SdfAxis.d.mts +25 -0
  219. package/renderer/SdfAxis.d.ts +25 -0
  220. package/renderer/SdfAxis.mjs +75 -0
  221. package/renderer/SdfBounds.d.mts +19 -0
  222. package/renderer/SdfBounds.d.ts +19 -0
  223. package/renderer/SdfBounds.mjs +161 -0
  224. package/renderer/SdfCellMode.d.mts +26 -0
  225. package/renderer/SdfCellMode.d.ts +26 -0
  226. package/renderer/SdfCellMode.mjs +78 -0
  227. package/renderer/SdfNormal.d.mts +16 -0
  228. package/renderer/SdfNormal.d.ts +16 -0
  229. package/renderer/SdfNormal.mjs +122 -0
  230. package/renderer/Shape.d.mts +143 -0
  231. package/renderer/Shape.d.ts +143 -0
  232. package/renderer/Shape.mjs +458 -0
  233. package/renderer/SortStrategy.d.mts +86 -0
  234. package/renderer/SortStrategy.d.ts +86 -0
  235. package/renderer/SortStrategy.mjs +272 -0
  236. package/renderer/Store.d.mts +83 -0
  237. package/renderer/Store.d.ts +83 -0
  238. package/renderer/Store.mjs +369 -0
  239. package/renderer/StoreIo.d.mts +71 -0
  240. package/renderer/StoreIo.d.ts +71 -0
  241. package/renderer/StoreIo.mjs +292 -0
  242. package/renderer/TextureAtlas.d.mts +40 -0
  243. package/renderer/TextureAtlas.d.ts +40 -0
  244. package/renderer/TextureAtlas.mjs +122 -0
  245. package/renderer/TextureInfo.d.mts +34 -0
  246. package/renderer/TextureInfo.d.ts +34 -0
  247. package/renderer/TextureInfo.mjs +149 -0
  248. package/renderer/TickSettleMode.d.mts +34 -0
  249. package/renderer/TickSettleMode.d.ts +34 -0
  250. package/renderer/TickSettleMode.mjs +84 -0
  251. package/renderer/TickSimulation.d.mts +572 -0
  252. package/renderer/TickSimulation.d.ts +572 -0
  253. package/renderer/TickSimulation.mjs +1299 -0
  254. package/renderer/TypedCircuitExecutor.d.mts +101 -0
  255. package/renderer/TypedCircuitExecutor.d.ts +101 -0
  256. package/renderer/TypedCircuitExecutor.mjs +378 -0
  257. package/renderer/Value.d.mts +73 -0
  258. package/renderer/Value.d.ts +73 -0
  259. package/renderer/Value.mjs +275 -0
  260. package/renderer/VideoConfig.d.mts +15 -0
  261. package/renderer/VideoConfig.d.ts +15 -0
  262. package/renderer/VideoConfig.mjs +44 -0
  263. package/renderer/VoxelModel.d.mts +34 -0
  264. package/renderer/VoxelModel.d.ts +34 -0
  265. package/renderer/VoxelModel.mjs +113 -0
  266. package/renderer/Voxelizer.d.mts +80 -0
  267. package/renderer/Voxelizer.d.ts +80 -0
  268. package/renderer/Voxelizer.mjs +261 -0
  269. package/renderer/WorldChunkView.d.mts +75 -0
  270. package/renderer/WorldChunkView.d.ts +75 -0
  271. package/renderer/WorldChunkView.mjs +224 -0
  272. package/renderer/WorldGenerator.d.mts +75 -0
  273. package/renderer/WorldGenerator.d.ts +75 -0
  274. package/renderer/WorldGenerator.mjs +255 -0
  275. package/renderer/WorldSink.d.mts +50 -0
  276. package/renderer/WorldSink.d.ts +50 -0
  277. package/renderer/WorldSink.mjs +177 -0
  278. package/renderer/WorldStream.d.mts +45 -0
  279. package/renderer/WorldStream.d.ts +45 -0
  280. package/renderer/WorldStream.mjs +184 -0
  281. package/renderer/WsPartitionHints.d.mts +29 -0
  282. package/renderer/WsPartitionHints.d.ts +29 -0
  283. package/renderer/WsPartitionHints.mjs +102 -0
  284. package/renderer/WsProfile.d.mts +46 -0
  285. package/renderer/WsProfile.d.ts +46 -0
  286. package/renderer/WsProfile.mjs +152 -0
  287. package/renderer/WsRunResult.d.mts +83 -0
  288. package/renderer/WsRunResult.d.ts +83 -0
  289. package/renderer/WsRunResult.mjs +326 -0
  290. package/renderer/WsSegmentJob.d.mts +28 -0
  291. package/renderer/WsSegmentJob.d.ts +28 -0
  292. package/renderer/WsSegmentJob.mjs +81 -0
  293. package/renderer/diplomat-runtime.d.mts +15 -0
  294. package/renderer/diplomat-runtime.d.ts +15 -0
  295. package/renderer/diplomat-runtime.mjs +779 -0
  296. package/renderer/diplomat-wasm.mjs +52 -0
  297. package/renderer/diplomat.config.mjs +5 -0
  298. package/renderer/index.d.mts +193 -0
  299. package/renderer/index.d.ts +193 -0
  300. package/renderer/index.mjs +196 -0
  301. package/renderer/nucleation.wasm +0 -0
  302. package/renderer/veneer/design.d.ts +167 -0
  303. package/renderer/veneer/design.mjs +480 -0
@@ -0,0 +1,119 @@
1
+ // generated by diplomat-tool
2
+ import type { NucleationError } from "./NucleationError.mjs"
3
+ import type { Palette } from "./Palette.mjs"
4
+ import type { pointer, codepoint } from "./diplomat-runtime.d.ts";
5
+
6
+
7
+
8
+ /**
9
+ * Filter-driven palette construction (wraps
10
+ * {@link crate::building::PaletteBuilder}, which fronts blockpedia's
11
+ * `BlockFilter`). Call flag methods, then `build` — the builder is
12
+ * consumed; further calls error with `AlreadyConsumed`.
13
+ */
14
+ export class PaletteBuilder {
15
+ /** @internal */
16
+ get ffiValue(): pointer;
17
+ /** @internal */
18
+ constructor();
19
+
20
+
21
+ /**
22
+ * A builder matching every colored block (no filters yet).
23
+ */
24
+ static create(): PaletteBuilder;
25
+
26
+ /**
27
+ * Exclude gravity-affected blocks (sand, gravel, ...).
28
+ */
29
+ excludeFalling(): void;
30
+
31
+ /**
32
+ * Exclude blocks with block entities (chests, furnaces, ...).
33
+ */
34
+ excludeTileEntities(): void;
35
+
36
+ /**
37
+ * Keep only full cube blocks (no stairs, slabs, fences, ...).
38
+ * Metadata-driven: uses the official model geometry extracted from
39
+ * the vanilla jars, not block-name guessing.
40
+ */
41
+ fullBlocksOnly(): void;
42
+
43
+ /**
44
+ * Exclude blocks that need supporting blocks (torches, rails, ...).
45
+ */
46
+ excludeNeedsSupport(): void;
47
+
48
+ /**
49
+ * Exclude transparent/translucent blocks (glass, leaves, ...).
50
+ * Metadata-driven: uses the per-block transparency flag from the
51
+ * block-data pipeline, not block-name guessing.
52
+ */
53
+ excludeTransparent(): void;
54
+
55
+ /**
56
+ * Exclude light-emitting blocks (glowstone, lanterns, ...).
57
+ */
58
+ excludeLightSources(): void;
59
+
60
+ /**
61
+ * Keep only blocks obtainable in survival.
62
+ */
63
+ survivalOnly(): void;
64
+
65
+ /**
66
+ * Exclude blocks whose id contains `keyword`.
67
+ */
68
+ excludeKeyword(keyword: string): void;
69
+
70
+ /**
71
+ * Keep only blocks whose id contains `keyword` (repeatable; matches
72
+ * any of the included keywords).
73
+ */
74
+ includeKeyword(keyword: string): void;
75
+
76
+ /**
77
+ * Require the vanilla block tag `t` (`minecraft:wool` or short
78
+ * `wool`, nested paths like `mineable/pickaxe` too). Repeatable —
79
+ * a block must carry ALL required tags (AND semantics).
80
+ */
81
+ tag(t: string): void;
82
+
83
+ /**
84
+ * Exclude blocks carrying the vanilla block tag `t` (any listed
85
+ * tag disqualifies). Repeatable.
86
+ */
87
+ excludeTag(t: string): void;
88
+
89
+ /**
90
+ * Keep only blocks of the official definition kind `k`
91
+ * (`minecraft:stair` or short `stair`; plain full blocks are
92
+ * `minecraft:block`). Repeatable — a block matching ANY listed
93
+ * kind passes (OR semantics).
94
+ */
95
+ kind(k: string): void;
96
+
97
+ /**
98
+ * Keep only blocks whose measured Oklab lightness L is within
99
+ * `[min, max]` (0.0 = black, 1.0 = white).
100
+ */
101
+ lightnessBetween(min: number, max: number): void;
102
+
103
+ /**
104
+ * Keep only near-neutral blocks: measured Oklab chroma at most
105
+ * `max` (the grayscale preset uses 0.022).
106
+ */
107
+ chromaBelow(max: number): void;
108
+
109
+ /**
110
+ * Keep only blocks whose measured color is within `max_distance`
111
+ * (Oklab; ~0.05 = same family, ~0.15 = generous) of the RGB color.
112
+ */
113
+ colorNear(r: number, g: number, b: number, maxDistance: number): void;
114
+
115
+ /**
116
+ * Build the palette; consumes the builder.
117
+ */
118
+ build(): Palette;
119
+ }
@@ -0,0 +1,457 @@
1
+ // generated by diplomat-tool
2
+ import { NucleationError } from "./NucleationError.mjs"
3
+ import { Palette } from "./Palette.mjs"
4
+ import wasm from "./diplomat-wasm.mjs";
5
+ import * as diplomatRuntime from "./diplomat-runtime.mjs";
6
+
7
+ const PaletteBuilder_box_destroy_registry = new FinalizationRegistry((ptr) => {
8
+ wasm.PaletteBuilder_destroy(ptr);
9
+ });
10
+
11
+ /**
12
+ * Filter-driven palette construction (wraps
13
+ * {@link crate::building::PaletteBuilder}, which fronts blockpedia's
14
+ * `BlockFilter`). Call flag methods, then `build` — the builder is
15
+ * consumed; further calls error with `AlreadyConsumed`.
16
+ */
17
+ export class PaletteBuilder {
18
+ // Internal ptr reference:
19
+ #ptr = null;
20
+
21
+ // Lifetimes are only to keep dependencies alive.
22
+ // Since JS won't garbage collect until there are no incoming edges.
23
+ #selfEdge = [];
24
+
25
+ #internalConstructor(symbol, ptr, selfEdge) {
26
+ if (symbol !== diplomatRuntime.internalConstructor) {
27
+ console.error("PaletteBuilder is an Opaque type. You cannot call its constructor.");
28
+ return;
29
+ }
30
+ this.#ptr = ptr;
31
+ this.#selfEdge = selfEdge;
32
+
33
+ // Are we being borrowed? If not, we can register.
34
+ if (this.#selfEdge.length === 0) {
35
+ PaletteBuilder_box_destroy_registry.register(this, this.#ptr);
36
+ }
37
+
38
+ return this;
39
+ }
40
+ /** @internal */
41
+ get ffiValue() {
42
+ return this.#ptr;
43
+ }
44
+
45
+
46
+ /**
47
+ * A builder matching every colored block (no filters yet).
48
+ */
49
+ static create() {
50
+
51
+ const result = wasm.PaletteBuilder_create();
52
+
53
+ try {
54
+ return new PaletteBuilder(diplomatRuntime.internalConstructor, result, []);
55
+ }
56
+
57
+ finally {
58
+ diplomatRuntime.FUNCTION_PARAM_ALLOC.clean();
59
+ }
60
+ }
61
+
62
+ /**
63
+ * Exclude gravity-affected blocks (sand, gravel, ...).
64
+ */
65
+ excludeFalling() {
66
+ const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true);
67
+
68
+
69
+ const result = wasm.PaletteBuilder_exclude_falling(diplomatReceive.buffer, this.ffiValue);
70
+
71
+ try {
72
+ if (!diplomatReceive.resultFlag) {
73
+ const cause = new NucleationError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer));
74
+ throw new globalThis.Error('NucleationError.' + cause.value, { cause });
75
+ }
76
+ }
77
+
78
+ finally {
79
+ diplomatRuntime.FUNCTION_PARAM_ALLOC.clean();
80
+ diplomatReceive.free();
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Exclude blocks with block entities (chests, furnaces, ...).
86
+ */
87
+ excludeTileEntities() {
88
+ const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true);
89
+
90
+
91
+ const result = wasm.PaletteBuilder_exclude_tile_entities(diplomatReceive.buffer, this.ffiValue);
92
+
93
+ try {
94
+ if (!diplomatReceive.resultFlag) {
95
+ const cause = new NucleationError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer));
96
+ throw new globalThis.Error('NucleationError.' + cause.value, { cause });
97
+ }
98
+ }
99
+
100
+ finally {
101
+ diplomatRuntime.FUNCTION_PARAM_ALLOC.clean();
102
+ diplomatReceive.free();
103
+ }
104
+ }
105
+
106
+ /**
107
+ * Keep only full cube blocks (no stairs, slabs, fences, ...).
108
+ * Metadata-driven: uses the official model geometry extracted from
109
+ * the vanilla jars, not block-name guessing.
110
+ */
111
+ fullBlocksOnly() {
112
+ const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true);
113
+
114
+
115
+ const result = wasm.PaletteBuilder_full_blocks_only(diplomatReceive.buffer, this.ffiValue);
116
+
117
+ try {
118
+ if (!diplomatReceive.resultFlag) {
119
+ const cause = new NucleationError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer));
120
+ throw new globalThis.Error('NucleationError.' + cause.value, { cause });
121
+ }
122
+ }
123
+
124
+ finally {
125
+ diplomatRuntime.FUNCTION_PARAM_ALLOC.clean();
126
+ diplomatReceive.free();
127
+ }
128
+ }
129
+
130
+ /**
131
+ * Exclude blocks that need supporting blocks (torches, rails, ...).
132
+ */
133
+ excludeNeedsSupport() {
134
+ const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true);
135
+
136
+
137
+ const result = wasm.PaletteBuilder_exclude_needs_support(diplomatReceive.buffer, this.ffiValue);
138
+
139
+ try {
140
+ if (!diplomatReceive.resultFlag) {
141
+ const cause = new NucleationError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer));
142
+ throw new globalThis.Error('NucleationError.' + cause.value, { cause });
143
+ }
144
+ }
145
+
146
+ finally {
147
+ diplomatRuntime.FUNCTION_PARAM_ALLOC.clean();
148
+ diplomatReceive.free();
149
+ }
150
+ }
151
+
152
+ /**
153
+ * Exclude transparent/translucent blocks (glass, leaves, ...).
154
+ * Metadata-driven: uses the per-block transparency flag from the
155
+ * block-data pipeline, not block-name guessing.
156
+ */
157
+ excludeTransparent() {
158
+ const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true);
159
+
160
+
161
+ const result = wasm.PaletteBuilder_exclude_transparent(diplomatReceive.buffer, this.ffiValue);
162
+
163
+ try {
164
+ if (!diplomatReceive.resultFlag) {
165
+ const cause = new NucleationError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer));
166
+ throw new globalThis.Error('NucleationError.' + cause.value, { cause });
167
+ }
168
+ }
169
+
170
+ finally {
171
+ diplomatRuntime.FUNCTION_PARAM_ALLOC.clean();
172
+ diplomatReceive.free();
173
+ }
174
+ }
175
+
176
+ /**
177
+ * Exclude light-emitting blocks (glowstone, lanterns, ...).
178
+ */
179
+ excludeLightSources() {
180
+ const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true);
181
+
182
+
183
+ const result = wasm.PaletteBuilder_exclude_light_sources(diplomatReceive.buffer, this.ffiValue);
184
+
185
+ try {
186
+ if (!diplomatReceive.resultFlag) {
187
+ const cause = new NucleationError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer));
188
+ throw new globalThis.Error('NucleationError.' + cause.value, { cause });
189
+ }
190
+ }
191
+
192
+ finally {
193
+ diplomatRuntime.FUNCTION_PARAM_ALLOC.clean();
194
+ diplomatReceive.free();
195
+ }
196
+ }
197
+
198
+ /**
199
+ * Keep only blocks obtainable in survival.
200
+ */
201
+ survivalOnly() {
202
+ const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true);
203
+
204
+
205
+ const result = wasm.PaletteBuilder_survival_only(diplomatReceive.buffer, this.ffiValue);
206
+
207
+ try {
208
+ if (!diplomatReceive.resultFlag) {
209
+ const cause = new NucleationError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer));
210
+ throw new globalThis.Error('NucleationError.' + cause.value, { cause });
211
+ }
212
+ }
213
+
214
+ finally {
215
+ diplomatRuntime.FUNCTION_PARAM_ALLOC.clean();
216
+ diplomatReceive.free();
217
+ }
218
+ }
219
+
220
+ /**
221
+ * Exclude blocks whose id contains `keyword`.
222
+ */
223
+ excludeKeyword(keyword) {
224
+ let functionCleanupArena = new diplomatRuntime.CleanupArena();
225
+
226
+ const keywordSlice = functionCleanupArena.alloc(diplomatRuntime.DiplomatBuf.sliceWrapper(wasm, diplomatRuntime.DiplomatBuf.str8(wasm, keyword)));
227
+ const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true);
228
+
229
+
230
+ const result = wasm.PaletteBuilder_exclude_keyword(diplomatReceive.buffer, this.ffiValue, keywordSlice.ptr);
231
+
232
+ try {
233
+ if (!diplomatReceive.resultFlag) {
234
+ const cause = new NucleationError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer));
235
+ throw new globalThis.Error('NucleationError.' + cause.value, { cause });
236
+ }
237
+ }
238
+
239
+ finally {
240
+ diplomatRuntime.FUNCTION_PARAM_ALLOC.clean();
241
+ functionCleanupArena.free();
242
+
243
+ diplomatReceive.free();
244
+ }
245
+ }
246
+
247
+ /**
248
+ * Keep only blocks whose id contains `keyword` (repeatable; matches
249
+ * any of the included keywords).
250
+ */
251
+ includeKeyword(keyword) {
252
+ let functionCleanupArena = new diplomatRuntime.CleanupArena();
253
+
254
+ const keywordSlice = functionCleanupArena.alloc(diplomatRuntime.DiplomatBuf.sliceWrapper(wasm, diplomatRuntime.DiplomatBuf.str8(wasm, keyword)));
255
+ const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true);
256
+
257
+
258
+ const result = wasm.PaletteBuilder_include_keyword(diplomatReceive.buffer, this.ffiValue, keywordSlice.ptr);
259
+
260
+ try {
261
+ if (!diplomatReceive.resultFlag) {
262
+ const cause = new NucleationError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer));
263
+ throw new globalThis.Error('NucleationError.' + cause.value, { cause });
264
+ }
265
+ }
266
+
267
+ finally {
268
+ diplomatRuntime.FUNCTION_PARAM_ALLOC.clean();
269
+ functionCleanupArena.free();
270
+
271
+ diplomatReceive.free();
272
+ }
273
+ }
274
+
275
+ /**
276
+ * Require the vanilla block tag `t` (`minecraft:wool` or short
277
+ * `wool`, nested paths like `mineable/pickaxe` too). Repeatable —
278
+ * a block must carry ALL required tags (AND semantics).
279
+ */
280
+ tag(t) {
281
+ let functionCleanupArena = new diplomatRuntime.CleanupArena();
282
+
283
+ const tSlice = functionCleanupArena.alloc(diplomatRuntime.DiplomatBuf.sliceWrapper(wasm, diplomatRuntime.DiplomatBuf.str8(wasm, t)));
284
+ const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true);
285
+
286
+
287
+ const result = wasm.PaletteBuilder_tag(diplomatReceive.buffer, this.ffiValue, tSlice.ptr);
288
+
289
+ try {
290
+ if (!diplomatReceive.resultFlag) {
291
+ const cause = new NucleationError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer));
292
+ throw new globalThis.Error('NucleationError.' + cause.value, { cause });
293
+ }
294
+ }
295
+
296
+ finally {
297
+ diplomatRuntime.FUNCTION_PARAM_ALLOC.clean();
298
+ functionCleanupArena.free();
299
+
300
+ diplomatReceive.free();
301
+ }
302
+ }
303
+
304
+ /**
305
+ * Exclude blocks carrying the vanilla block tag `t` (any listed
306
+ * tag disqualifies). Repeatable.
307
+ */
308
+ excludeTag(t) {
309
+ let functionCleanupArena = new diplomatRuntime.CleanupArena();
310
+
311
+ const tSlice = functionCleanupArena.alloc(diplomatRuntime.DiplomatBuf.sliceWrapper(wasm, diplomatRuntime.DiplomatBuf.str8(wasm, t)));
312
+ const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true);
313
+
314
+
315
+ const result = wasm.PaletteBuilder_exclude_tag(diplomatReceive.buffer, this.ffiValue, tSlice.ptr);
316
+
317
+ try {
318
+ if (!diplomatReceive.resultFlag) {
319
+ const cause = new NucleationError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer));
320
+ throw new globalThis.Error('NucleationError.' + cause.value, { cause });
321
+ }
322
+ }
323
+
324
+ finally {
325
+ diplomatRuntime.FUNCTION_PARAM_ALLOC.clean();
326
+ functionCleanupArena.free();
327
+
328
+ diplomatReceive.free();
329
+ }
330
+ }
331
+
332
+ /**
333
+ * Keep only blocks of the official definition kind `k`
334
+ * (`minecraft:stair` or short `stair`; plain full blocks are
335
+ * `minecraft:block`). Repeatable — a block matching ANY listed
336
+ * kind passes (OR semantics).
337
+ */
338
+ kind(k) {
339
+ let functionCleanupArena = new diplomatRuntime.CleanupArena();
340
+
341
+ const kSlice = functionCleanupArena.alloc(diplomatRuntime.DiplomatBuf.sliceWrapper(wasm, diplomatRuntime.DiplomatBuf.str8(wasm, k)));
342
+ const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true);
343
+
344
+
345
+ const result = wasm.PaletteBuilder_kind(diplomatReceive.buffer, this.ffiValue, kSlice.ptr);
346
+
347
+ try {
348
+ if (!diplomatReceive.resultFlag) {
349
+ const cause = new NucleationError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer));
350
+ throw new globalThis.Error('NucleationError.' + cause.value, { cause });
351
+ }
352
+ }
353
+
354
+ finally {
355
+ diplomatRuntime.FUNCTION_PARAM_ALLOC.clean();
356
+ functionCleanupArena.free();
357
+
358
+ diplomatReceive.free();
359
+ }
360
+ }
361
+
362
+ /**
363
+ * Keep only blocks whose measured Oklab lightness L is within
364
+ * `[min, max]` (0.0 = black, 1.0 = white).
365
+ */
366
+ lightnessBetween(min, max) {
367
+ const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true);
368
+
369
+
370
+ const result = wasm.PaletteBuilder_lightness_between(diplomatReceive.buffer, this.ffiValue, min, max);
371
+
372
+ try {
373
+ if (!diplomatReceive.resultFlag) {
374
+ const cause = new NucleationError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer));
375
+ throw new globalThis.Error('NucleationError.' + cause.value, { cause });
376
+ }
377
+ }
378
+
379
+ finally {
380
+ diplomatRuntime.FUNCTION_PARAM_ALLOC.clean();
381
+ diplomatReceive.free();
382
+ }
383
+ }
384
+
385
+ /**
386
+ * Keep only near-neutral blocks: measured Oklab chroma at most
387
+ * `max` (the grayscale preset uses 0.022).
388
+ */
389
+ chromaBelow(max) {
390
+ const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true);
391
+
392
+
393
+ const result = wasm.PaletteBuilder_chroma_below(diplomatReceive.buffer, this.ffiValue, max);
394
+
395
+ try {
396
+ if (!diplomatReceive.resultFlag) {
397
+ const cause = new NucleationError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer));
398
+ throw new globalThis.Error('NucleationError.' + cause.value, { cause });
399
+ }
400
+ }
401
+
402
+ finally {
403
+ diplomatRuntime.FUNCTION_PARAM_ALLOC.clean();
404
+ diplomatReceive.free();
405
+ }
406
+ }
407
+
408
+ /**
409
+ * Keep only blocks whose measured color is within `max_distance`
410
+ * (Oklab; ~0.05 = same family, ~0.15 = generous) of the RGB color.
411
+ */
412
+ colorNear(r, g, b, maxDistance) {
413
+ const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true);
414
+
415
+
416
+ const result = wasm.PaletteBuilder_color_near(diplomatReceive.buffer, this.ffiValue, r, g, b, maxDistance);
417
+
418
+ try {
419
+ if (!diplomatReceive.resultFlag) {
420
+ const cause = new NucleationError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer));
421
+ throw new globalThis.Error('NucleationError.' + cause.value, { cause });
422
+ }
423
+ }
424
+
425
+ finally {
426
+ diplomatRuntime.FUNCTION_PARAM_ALLOC.clean();
427
+ diplomatReceive.free();
428
+ }
429
+ }
430
+
431
+ /**
432
+ * Build the palette; consumes the builder.
433
+ */
434
+ build() {
435
+ const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true);
436
+
437
+
438
+ const result = wasm.PaletteBuilder_build(diplomatReceive.buffer, this.ffiValue);
439
+
440
+ try {
441
+ if (!diplomatReceive.resultFlag) {
442
+ const cause = new NucleationError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer));
443
+ throw new globalThis.Error('NucleationError.' + cause.value, { cause });
444
+ }
445
+ return new Palette(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []);
446
+ }
447
+
448
+ finally {
449
+ diplomatRuntime.FUNCTION_PARAM_ALLOC.clean();
450
+ diplomatReceive.free();
451
+ }
452
+ }
453
+
454
+ constructor(symbol, ptr, selfEdge) {
455
+ return this.#internalConstructor(...arguments)
456
+ }
457
+ }
@@ -0,0 +1,67 @@
1
+ # nucleation
2
+
3
+ A high-performance Minecraft schematic engine, compiled to WebAssembly from Rust. Parse, edit,
4
+ diff, fingerprint, and generate schematics in Node or the browser.
5
+
6
+ This package ships generated ESM bindings (with TypeScript typings) plus the WASM binary. It
7
+ requires Node 18+ or a bundler; no native dependencies.
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ npm install nucleation
13
+ ```
14
+
15
+ ## Quick start
16
+
17
+ ```javascript
18
+ import { Schematic } from "nucleation";
19
+
20
+ const schematic = Schematic.create("demo");
21
+ schematic.setBlock(1, 2, 3, "minecraft:stone");
22
+ console.log(schematic.getBlockName(1, 2, 3)); // "minecraft:stone"
23
+
24
+ // Binary payloads cross the WASM boundary base64-encoded
25
+ const b64 = schematic.toLitematicB64();
26
+ const bytes = Uint8Array.from(atob(b64), (c) => c.charCodeAt(0));
27
+ const loaded = Schematic.fromLitematic(bytes);
28
+ ```
29
+
30
+ ## What is included
31
+
32
+ The published WASM contains the core feature set: schematic editing, all schematic formats,
33
+ world import (from zip) and export, the schematic builder, the procedural building tool,
34
+ definition regions, diff and fingerprinting, autostack, NBT helpers, SDF sampling, and the
35
+ in-memory store.
36
+
37
+ Redstone simulation and mesh generation also work on WASM but are not compiled into the
38
+ published binary. To use them, build a custom WASM from the
39
+ [repository](https://github.com/Schem-at/Nucleation):
40
+
41
+ ```bash
42
+ cargo build --release --target wasm32-unknown-unknown --lib --features bridge,simulation,meshing
43
+ ```
44
+
45
+ and point the package's `diplomat.config.mjs` at your `nucleation.wasm`. GPU rendering and
46
+ embedded scripting are native-only.
47
+
48
+ ## Documentation
49
+
50
+ - [JavaScript API reference](https://github.com/Schem-at/Nucleation/blob/master/docs/javascript/README.md)
51
+ - [Feature guides](https://github.com/Schem-at/Nucleation/tree/master/docs/guides)
52
+
53
+ ## License
54
+
55
+ MIT
56
+
57
+ ### Renderer-only WebAssembly
58
+
59
+ `import { Schematic } from "nucleation/renderer"` loads the bridge-only WASM build
60
+ for schematic viewing and editing. Simulation, meshing and voxelization remain
61
+ available from the main `nucleation` entry point. Each entry owns a separate WASM
62
+ instance; import only the entry needed by a worker.
63
+
64
+ Use `renderRegionsJson()` for region bounds and palettes, then
65
+ `regionBlockIndices(name, start, count)` for owned `Uint32Array` windows of at most
66
+ 65,536 cells. Indices use x-fastest, then z, then y order. Call `clearContents()`
67
+ when done to release schematic storage immediately.