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.
- package/README.md +12 -0
- package/Schematic.d.mts +23 -0
- package/Schematic.d.ts +23 -0
- package/Schematic.mjs +70 -0
- package/nucleation.wasm +0 -0
- package/package.json +7 -2
- package/renderer/AnimationEffect.d.mts +44 -0
- package/renderer/AnimationEffect.d.ts +44 -0
- package/renderer/AnimationEffect.mjs +204 -0
- package/renderer/Autostack.d.mts +43 -0
- package/renderer/Autostack.d.ts +43 -0
- package/renderer/Autostack.mjs +134 -0
- package/renderer/BlockPos.d.mts +28 -0
- package/renderer/BlockPos.d.ts +28 -0
- package/renderer/BlockPos.mjs +130 -0
- package/renderer/BlockState.d.mts +39 -0
- package/renderer/BlockState.d.ts +39 -0
- package/renderer/BlockState.mjs +134 -0
- package/renderer/Blocks.d.mts +91 -0
- package/renderer/Blocks.d.ts +91 -0
- package/renderer/Blocks.mjs +308 -0
- package/renderer/Brush.d.mts +99 -0
- package/renderer/Brush.d.ts +99 -0
- package/renderer/Brush.mjs +335 -0
- package/renderer/BuildAnimation.d.mts +179 -0
- package/renderer/BuildAnimation.d.ts +179 -0
- package/renderer/BuildAnimation.mjs +1148 -0
- package/renderer/BuildingTool.d.mts +46 -0
- package/renderer/BuildingTool.d.ts +46 -0
- package/renderer/BuildingTool.mjs +121 -0
- package/renderer/CellExecutor.d.mts +51 -0
- package/renderer/CellExecutor.d.ts +51 -0
- package/renderer/CellExecutor.mjs +171 -0
- package/renderer/CellularSdfConfig.d.mts +22 -0
- package/renderer/CellularSdfConfig.d.ts +22 -0
- package/renderer/CellularSdfConfig.mjs +69 -0
- package/renderer/ChunkMeshResult.d.mts +75 -0
- package/renderer/ChunkMeshResult.d.ts +75 -0
- package/renderer/ChunkMeshResult.mjs +253 -0
- package/renderer/CircuitBuilder.d.mts +118 -0
- package/renderer/CircuitBuilder.d.ts +118 -0
- package/renderer/CircuitBuilder.mjs +516 -0
- package/renderer/Curve3D.d.mts +27 -0
- package/renderer/Curve3D.d.ts +27 -0
- package/renderer/Curve3D.mjs +101 -0
- package/renderer/DefinitionRegion.d.mts +274 -0
- package/renderer/DefinitionRegion.d.ts +274 -0
- package/renderer/DefinitionRegion.mjs +973 -0
- package/renderer/Design.d.mts +348 -0
- package/renderer/Design.d.ts +348 -0
- package/renderer/Design.mjs +1334 -0
- package/renderer/Diff.d.mts +88 -0
- package/renderer/Diff.d.ts +88 -0
- package/renderer/Diff.mjs +316 -0
- package/renderer/Dimensions.d.mts +28 -0
- package/renderer/Dimensions.d.ts +28 -0
- package/renderer/Dimensions.mjs +130 -0
- package/renderer/DistanceField.d.mts +39 -0
- package/renderer/DistanceField.d.ts +39 -0
- package/renderer/DistanceField.mjs +114 -0
- package/renderer/ExecutionMode.d.mts +42 -0
- package/renderer/ExecutionMode.d.ts +42 -0
- package/renderer/ExecutionMode.mjs +127 -0
- package/renderer/Field3.d.mts +40 -0
- package/renderer/Field3.d.ts +40 -0
- package/renderer/Field3.mjs +160 -0
- package/renderer/FieldProgram.d.mts +40 -0
- package/renderer/FieldProgram.d.ts +40 -0
- package/renderer/FieldProgram.mjs +167 -0
- package/renderer/FieldProgramBinaryOp.d.mts +42 -0
- package/renderer/FieldProgramBinaryOp.d.ts +42 -0
- package/renderer/FieldProgramBinaryOp.mjs +118 -0
- package/renderer/FieldProgramBuilder.d.mts +104 -0
- package/renderer/FieldProgramBuilder.d.ts +104 -0
- package/renderer/FieldProgramBuilder.mjs +486 -0
- package/renderer/FieldProgramDistanceKind.d.mts +26 -0
- package/renderer/FieldProgramDistanceKind.d.ts +26 -0
- package/renderer/FieldProgramDistanceKind.mjs +78 -0
- package/renderer/FieldProgramUnaryOp.d.mts +34 -0
- package/renderer/FieldProgramUnaryOp.d.ts +34 -0
- package/renderer/FieldProgramUnaryOp.mjs +102 -0
- package/renderer/FieldProgramValueType.d.mts +25 -0
- package/renderer/FieldProgramValueType.d.ts +25 -0
- package/renderer/FieldProgramValueType.mjs +75 -0
- package/renderer/FieldRange.d.mts +15 -0
- package/renderer/FieldRange.d.ts +15 -0
- package/renderer/FieldRange.mjs +109 -0
- package/renderer/Fingerprint.d.mts +44 -0
- package/renderer/Fingerprint.d.ts +44 -0
- package/renderer/Fingerprint.mjs +197 -0
- package/renderer/GeneratedChunk.d.mts +35 -0
- package/renderer/GeneratedChunk.d.ts +35 -0
- package/renderer/GeneratedChunk.mjs +178 -0
- package/renderer/GeneratedChunkCoverage.d.mts +25 -0
- package/renderer/GeneratedChunkCoverage.d.ts +25 -0
- package/renderer/GeneratedChunkCoverage.mjs +75 -0
- package/renderer/GeneratedChunkOverlayMode.d.mts +24 -0
- package/renderer/GeneratedChunkOverlayMode.d.ts +24 -0
- package/renderer/GeneratedChunkOverlayMode.mjs +72 -0
- package/renderer/GeneratedWorldStream.d.mts +28 -0
- package/renderer/GeneratedWorldStream.d.ts +28 -0
- package/renderer/GeneratedWorldStream.mjs +86 -0
- package/renderer/Geo.d.mts +41 -0
- package/renderer/Geo.d.ts +41 -0
- package/renderer/Geo.mjs +121 -0
- package/renderer/Hdl.d.mts +56 -0
- package/renderer/Hdl.d.ts +56 -0
- package/renderer/Hdl.mjs +163 -0
- package/renderer/InterpolationSpace.d.mts +25 -0
- package/renderer/InterpolationSpace.d.ts +25 -0
- package/renderer/InterpolationSpace.mjs +73 -0
- package/renderer/IoLayout.d.mts +26 -0
- package/renderer/IoLayout.d.ts +26 -0
- package/renderer/IoLayout.mjs +81 -0
- package/renderer/IoLayoutBuilder.d.mts +73 -0
- package/renderer/IoLayoutBuilder.d.ts +73 -0
- package/renderer/IoLayoutBuilder.mjs +315 -0
- package/renderer/IoType.d.mts +41 -0
- package/renderer/IoType.d.ts +41 -0
- package/renderer/IoType.mjs +125 -0
- package/renderer/ItemModelConfig.d.mts +65 -0
- package/renderer/ItemModelConfig.d.ts +65 -0
- package/renderer/ItemModelConfig.mjs +223 -0
- package/renderer/ItemModelPackBuilder.d.mts +32 -0
- package/renderer/ItemModelPackBuilder.d.ts +32 -0
- package/renderer/ItemModelPackBuilder.mjs +104 -0
- package/renderer/ItemModelResult.d.mts +72 -0
- package/renderer/ItemModelResult.d.ts +72 -0
- package/renderer/ItemModelResult.mjs +268 -0
- package/renderer/ItemScale.d.mts +31 -0
- package/renderer/ItemScale.d.ts +31 -0
- package/renderer/ItemScale.mjs +133 -0
- package/renderer/LayoutFunction.d.mts +52 -0
- package/renderer/LayoutFunction.d.ts +52 -0
- package/renderer/LayoutFunction.mjs +159 -0
- package/renderer/MchprsWorld.d.mts +131 -0
- package/renderer/MchprsWorld.d.ts +131 -0
- package/renderer/MchprsWorld.mjs +423 -0
- package/renderer/MeshBounds.d.mts +40 -0
- package/renderer/MeshBounds.d.ts +40 -0
- package/renderer/MeshBounds.mjs +181 -0
- package/renderer/MeshConfig.d.mts +101 -0
- package/renderer/MeshConfig.d.ts +101 -0
- package/renderer/MeshConfig.mjs +306 -0
- package/renderer/MeshJob.d.mts +44 -0
- package/renderer/MeshJob.d.ts +44 -0
- package/renderer/MeshJob.mjs +116 -0
- package/renderer/MeshPhase.d.mts +38 -0
- package/renderer/MeshPhase.d.ts +38 -0
- package/renderer/MeshPhase.mjs +90 -0
- package/renderer/MeshProgress.d.mts +32 -0
- package/renderer/MeshProgress.d.ts +32 -0
- package/renderer/MeshProgress.mjs +134 -0
- package/renderer/MeshResult.d.mts +76 -0
- package/renderer/MeshResult.d.ts +76 -0
- package/renderer/MeshResult.mjs +269 -0
- package/renderer/MultiMeshResult.d.mts +50 -0
- package/renderer/MultiMeshResult.d.ts +50 -0
- package/renderer/MultiMeshResult.mjs +166 -0
- package/renderer/Nbt.d.mts +50 -0
- package/renderer/Nbt.d.ts +50 -0
- package/renderer/Nbt.mjs +161 -0
- package/renderer/NucleationError.d.mts +53 -0
- package/renderer/NucleationError.d.ts +53 -0
- package/renderer/NucleationError.mjs +136 -0
- package/renderer/OutputCondition.d.mts +45 -0
- package/renderer/OutputCondition.d.ts +45 -0
- package/renderer/OutputCondition.mjs +129 -0
- package/renderer/Palette.d.mts +157 -0
- package/renderer/Palette.d.ts +157 -0
- package/renderer/Palette.mjs +487 -0
- package/renderer/PaletteBuilder.d.mts +119 -0
- package/renderer/PaletteBuilder.d.ts +119 -0
- package/renderer/PaletteBuilder.mjs +457 -0
- package/renderer/README.md +67 -0
- package/renderer/RawMeshExport.d.mts +74 -0
- package/renderer/RawMeshExport.d.ts +74 -0
- package/renderer/RawMeshExport.mjs +243 -0
- package/renderer/RedstoneGraph.d.mts +58 -0
- package/renderer/RedstoneGraph.d.ts +58 -0
- package/renderer/RedstoneGraph.mjs +242 -0
- package/renderer/RegionBounds.d.mts +41 -0
- package/renderer/RegionBounds.d.ts +41 -0
- package/renderer/RegionBounds.mjs +182 -0
- package/renderer/RenderConfig.d.mts +101 -0
- package/renderer/RenderConfig.d.ts +101 -0
- package/renderer/RenderConfig.mjs +271 -0
- package/renderer/Renderer.d.mts +51 -0
- package/renderer/Renderer.d.ts +51 -0
- package/renderer/Renderer.mjs +219 -0
- package/renderer/ResourcePack.d.mts +105 -0
- package/renderer/ResourcePack.d.ts +105 -0
- package/renderer/ResourcePack.mjs +447 -0
- package/renderer/ResourcePackList.d.mts +32 -0
- package/renderer/ResourcePackList.d.ts +32 -0
- package/renderer/ResourcePackList.mjs +96 -0
- package/renderer/Routing.d.mts +66 -0
- package/renderer/Routing.d.ts +66 -0
- package/renderer/Routing.mjs +220 -0
- package/renderer/Schematic.d.mts +977 -0
- package/renderer/Schematic.d.ts +977 -0
- package/renderer/Schematic.mjs +3820 -0
- package/renderer/SchematicBuilder.d.mts +103 -0
- package/renderer/SchematicBuilder.d.ts +103 -0
- package/renderer/SchematicBuilder.mjs +401 -0
- package/renderer/SchematicRegions.d.mts +93 -0
- package/renderer/SchematicRegions.d.ts +93 -0
- package/renderer/SchematicRegions.mjs +411 -0
- package/renderer/SchematicSplitResult.d.mts +26 -0
- package/renderer/SchematicSplitResult.d.ts +26 -0
- package/renderer/SchematicSplitResult.mjs +84 -0
- package/renderer/Scripting.d.mts +40 -0
- package/renderer/Scripting.d.ts +40 -0
- package/renderer/Scripting.mjs +138 -0
- package/renderer/Sdf.d.mts +234 -0
- package/renderer/Sdf.d.ts +234 -0
- package/renderer/Sdf.mjs +1234 -0
- package/renderer/SdfAxis.d.mts +25 -0
- package/renderer/SdfAxis.d.ts +25 -0
- package/renderer/SdfAxis.mjs +75 -0
- package/renderer/SdfBounds.d.mts +19 -0
- package/renderer/SdfBounds.d.ts +19 -0
- package/renderer/SdfBounds.mjs +161 -0
- package/renderer/SdfCellMode.d.mts +26 -0
- package/renderer/SdfCellMode.d.ts +26 -0
- package/renderer/SdfCellMode.mjs +78 -0
- package/renderer/SdfNormal.d.mts +16 -0
- package/renderer/SdfNormal.d.ts +16 -0
- package/renderer/SdfNormal.mjs +122 -0
- package/renderer/Shape.d.mts +143 -0
- package/renderer/Shape.d.ts +143 -0
- package/renderer/Shape.mjs +458 -0
- package/renderer/SortStrategy.d.mts +86 -0
- package/renderer/SortStrategy.d.ts +86 -0
- package/renderer/SortStrategy.mjs +272 -0
- package/renderer/Store.d.mts +83 -0
- package/renderer/Store.d.ts +83 -0
- package/renderer/Store.mjs +369 -0
- package/renderer/StoreIo.d.mts +71 -0
- package/renderer/StoreIo.d.ts +71 -0
- package/renderer/StoreIo.mjs +292 -0
- package/renderer/TextureAtlas.d.mts +40 -0
- package/renderer/TextureAtlas.d.ts +40 -0
- package/renderer/TextureAtlas.mjs +122 -0
- package/renderer/TextureInfo.d.mts +34 -0
- package/renderer/TextureInfo.d.ts +34 -0
- package/renderer/TextureInfo.mjs +149 -0
- package/renderer/TickSettleMode.d.mts +34 -0
- package/renderer/TickSettleMode.d.ts +34 -0
- package/renderer/TickSettleMode.mjs +84 -0
- package/renderer/TickSimulation.d.mts +572 -0
- package/renderer/TickSimulation.d.ts +572 -0
- package/renderer/TickSimulation.mjs +1299 -0
- package/renderer/TypedCircuitExecutor.d.mts +101 -0
- package/renderer/TypedCircuitExecutor.d.ts +101 -0
- package/renderer/TypedCircuitExecutor.mjs +378 -0
- package/renderer/Value.d.mts +73 -0
- package/renderer/Value.d.ts +73 -0
- package/renderer/Value.mjs +275 -0
- package/renderer/VideoConfig.d.mts +15 -0
- package/renderer/VideoConfig.d.ts +15 -0
- package/renderer/VideoConfig.mjs +44 -0
- package/renderer/VoxelModel.d.mts +34 -0
- package/renderer/VoxelModel.d.ts +34 -0
- package/renderer/VoxelModel.mjs +113 -0
- package/renderer/Voxelizer.d.mts +80 -0
- package/renderer/Voxelizer.d.ts +80 -0
- package/renderer/Voxelizer.mjs +261 -0
- package/renderer/WorldChunkView.d.mts +75 -0
- package/renderer/WorldChunkView.d.ts +75 -0
- package/renderer/WorldChunkView.mjs +224 -0
- package/renderer/WorldGenerator.d.mts +75 -0
- package/renderer/WorldGenerator.d.ts +75 -0
- package/renderer/WorldGenerator.mjs +255 -0
- package/renderer/WorldSink.d.mts +50 -0
- package/renderer/WorldSink.d.ts +50 -0
- package/renderer/WorldSink.mjs +177 -0
- package/renderer/WorldStream.d.mts +45 -0
- package/renderer/WorldStream.d.ts +45 -0
- package/renderer/WorldStream.mjs +184 -0
- package/renderer/WsPartitionHints.d.mts +29 -0
- package/renderer/WsPartitionHints.d.ts +29 -0
- package/renderer/WsPartitionHints.mjs +102 -0
- package/renderer/WsProfile.d.mts +46 -0
- package/renderer/WsProfile.d.ts +46 -0
- package/renderer/WsProfile.mjs +152 -0
- package/renderer/WsRunResult.d.mts +83 -0
- package/renderer/WsRunResult.d.ts +83 -0
- package/renderer/WsRunResult.mjs +326 -0
- package/renderer/WsSegmentJob.d.mts +28 -0
- package/renderer/WsSegmentJob.d.ts +28 -0
- package/renderer/WsSegmentJob.mjs +81 -0
- package/renderer/diplomat-runtime.d.mts +15 -0
- package/renderer/diplomat-runtime.d.ts +15 -0
- package/renderer/diplomat-runtime.mjs +779 -0
- package/renderer/diplomat-wasm.mjs +52 -0
- package/renderer/diplomat.config.mjs +5 -0
- package/renderer/index.d.mts +193 -0
- package/renderer/index.d.ts +193 -0
- package/renderer/index.mjs +196 -0
- package/renderer/nucleation.wasm +0 -0
- package/renderer/veneer/design.d.ts +167 -0
- 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.
|