minecraft-renderer 0.1.39 → 0.1.41

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 (57) hide show
  1. package/dist/mesher.js +8 -8
  2. package/dist/mesher.js.map +4 -4
  3. package/dist/mesherWasm.js +94 -94
  4. package/dist/minecraft-renderer.js +57 -57
  5. package/dist/minecraft-renderer.js.meta.json +1 -1
  6. package/dist/threeWorker.js +66 -66
  7. package/package.json +3 -4
  8. package/src/bundler/bundlePrepare.ts +56 -0
  9. package/src/graphicsBackend/appViewer.ts +10 -0
  10. package/src/graphicsBackend/config.ts +5 -1
  11. package/src/graphicsBackend/preloadWorkers.ts +187 -0
  12. package/src/lib/worldrendererCommon.ts +26 -2
  13. package/src/{mesher → mesher-legacy}/mesher.ts +14 -4
  14. package/src/{mesher → mesher-legacy}/test/mesherTester.ts +2 -2
  15. package/src/{mesher → mesher-legacy}/test/run/test-js.ts +1 -1
  16. package/src/{mesher → mesher-legacy}/test/test-perf.ts +1 -1
  17. package/src/{mesher → mesher-legacy}/test/tests.test.ts +1 -1
  18. package/src/{mesher → mesher-shared}/shared.ts +2 -0
  19. package/src/playground/allEntitiesDebug.ts +1 -1
  20. package/src/three/chunkMeshManager.ts +1 -1
  21. package/src/three/entities.ts +19 -6
  22. package/src/three/entity/EntityMesh.ts +123 -140
  23. package/src/three/graphicsBackendBase.ts +13 -0
  24. package/src/three/holdingBlock.ts +1 -1
  25. package/src/three/holdingBlockLegacy.ts +1 -1
  26. package/src/three/modules/sciFiWorldReveal.ts +1 -1
  27. package/src/three/worldRendererThree.ts +2 -2
  28. package/src/wasm-mesher/README.md +90 -0
  29. package/src/{wasm-lib → wasm-mesher/bridge}/convertChunk.ts +2 -2
  30. package/src/{wasm-lib → wasm-mesher/bridge}/render-from-wasm.ts +4 -4
  31. package/src/wasm-mesher/runtime-build/wasm_mesher.d.ts +210 -0
  32. package/src/wasm-mesher/runtime-build/wasm_mesher.js +881 -0
  33. package/src/wasm-mesher/runtime-build/wasm_mesher_bg.wasm +0 -0
  34. package/src/wasm-mesher/runtime-build/wasm_mesher_bg.wasm.d.ts +24 -0
  35. package/src/{mesher/test → wasm-mesher/tests}/heightmapParity.test.ts +4 -4
  36. package/src/{mesher/test → wasm-mesher/tests}/mesherWasmConversionCache.test.ts +2 -2
  37. package/src/{mesher/test → wasm-mesher/tests}/splitColumnWasmOutput.test.ts +1 -1
  38. package/src/wasm-mesher/worker/mesherWasm.ts +1247 -0
  39. package/src/{mesher → wasm-mesher/worker}/mesherWasmConversionCache.ts +1 -1
  40. package/src/worldView/types.ts +90 -0
  41. package/src/mesher/mesherWasm.ts +0 -696
  42. package/wasm/wasm_mesher.d.ts +0 -46
  43. package/wasm/wasm_mesher.js +0 -443
  44. package/wasm/wasm_mesher_bg.wasm +0 -0
  45. package/wasm/wasm_mesher_bg.wasm.d.ts +0 -9
  46. /package/src/{mesher → mesher-legacy}/test/a.ts +0 -0
  47. /package/src/{mesher → mesher-legacy}/test/playground.ts +0 -0
  48. /package/src/{mesher → mesher-legacy}/test/run/chunk.ts +0 -0
  49. /package/src/{mesher → mesher-legacy}/test/snapshotUtils.ts +0 -0
  50. /package/src/{mesher → mesher-shared}/blockEntityMetadata.ts +0 -0
  51. /package/src/{mesher → mesher-shared}/computeHeightmap.ts +0 -0
  52. /package/src/{mesher → mesher-shared}/models.ts +0 -0
  53. /package/src/{mesher → mesher-shared}/modelsGeometryCommon.ts +0 -0
  54. /package/src/{mesher → mesher-shared}/standaloneRenderer.ts +0 -0
  55. /package/src/{mesher → mesher-shared}/world.ts +0 -0
  56. /package/src/{mesher → mesher-shared}/worldConstants.ts +0 -0
  57. /package/src/{mesher → wasm-mesher/worker}/mesherWasmRequestTracker.ts +0 -0
@@ -0,0 +1,210 @@
1
+ //@ts-nocheck
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+
5
+ /**
6
+ * VITALY's path: parse 1.18+ dump + light → run the mesher → return ONLY the final
7
+ * geometry. Avoids marshalling the intermediate ~300KB block_states/biomes/lights
8
+ * arrays back to JS.
9
+ *
10
+ * Combines `parseChunkDump118FullColumnAll` and `generate_geometry` into one Rust call.
11
+ * All `generate_geometry` parameters (mesher config, block-state lists) are accepted
12
+ * unchanged.
13
+ */
14
+ export function generateGeometryFromDump118(section_x: number, section_y: number, section_z: number, section_height: number, world_min_y: number, world_max_y: number, section_data_start_y: number, dump_buffer: Uint8Array, sky_light_concat: Uint8Array, block_light_concat: Uint8Array, sky_light_mask: Uint32Array, block_light_mask: Uint32Array, empty_sky_light_mask: Uint32Array, empty_block_light_mask: Uint32Array, num_sections: number, max_bits_per_block: number, max_bits_per_biome: number, invisible_blocks: Uint16Array, transparent_blocks: Uint16Array, no_ao_blocks: Uint16Array, cull_identical_blocks: Uint16Array, occluding_blocks: Uint16Array, enable_lighting: boolean, smooth_lighting: boolean, sky_light_value: number): any;
15
+
16
+ /**
17
+ * Fused parse+mesh for 1.18+ `map_chunk` wire format.
18
+ *
19
+ * Parses the raw packet inside Rust, meshes immediately, and returns ONLY the
20
+ * final `GeometryOutput` — no intermediate typed arrays are materialised on the
21
+ * JS heap. This halves the number of JS<->WASM boundary crossings per column
22
+ * and removes the largest per-column allocations (Uint16Array block_states +
23
+ * three Uint8Arrays for biomes/light).
24
+ *
25
+ * `raw_packet` is the buffer captured from `bot._client.on('raw.map_chunk', ...)`;
26
+ * it includes the leading packet-id varint (we skip it).
27
+ */
28
+ export function generateGeometryFromMapChunkV18Plus(raw_packet: Uint8Array, num_sections: number, max_bits_per_block: number, max_bits_per_biome: number, protocol: number, section_x: number, section_y: number, section_z: number, section_height: number, world_min_y: number, world_max_y: number, section_data_start_y: number, invisible_blocks: Uint16Array, transparent_blocks: Uint16Array, no_ao_blocks: Uint16Array, cull_identical_blocks: Uint16Array, occluding_blocks: Uint16Array, enable_lighting: boolean, smooth_lighting: boolean, sky_light_value: number): any;
29
+
30
+ /**
31
+ * Fused parse+mesh for 1.16 / 1.17 chunk sections.
32
+ *
33
+ * Parses `chunk_data` (the raw section bytes from a `map_chunk` packet) inside
34
+ * Rust and meshes immediately, returning only `GeometryOutput`. Block states
35
+ * and biomes never leave WASM memory.
36
+ *
37
+ * Light arrays (`sky_light` / `block_light`) come from a pre-parsed
38
+ * `update_light` packet and are passed by reference (the JS-side update-light
39
+ * cache already holds them as `Uint8Array`). When light is absent the
40
+ * function fills defaults (sky=15, block=0) internally.
41
+ */
42
+ export function generateGeometryFromParsedV16V17(chunk_data: Uint8Array, bit_map_lo_hi: Uint32Array, num_sections: number, max_bits_per_block: number, biomes_cells: Int32Array, default_biome: number, sky_light: Uint8Array, block_light: Uint8Array, section_x: number, section_y: number, section_z: number, section_height: number, world_min_y: number, world_max_y: number, section_data_start_y: number, invisible_blocks: Uint16Array, transparent_blocks: Uint16Array, no_ao_blocks: Uint16Array, cull_identical_blocks: Uint16Array, occluding_blocks: Uint16Array, enable_lighting: boolean, smooth_lighting: boolean, sky_light_value: number): any;
43
+
44
+ /**
45
+ * Main entry point for generating geometry
46
+ *
47
+ * Input: Serialized chunk data as TypedArrays
48
+ * Output: Geometry data (positions, normals, colors, uvs, indices)
49
+ */
50
+ export function generate_geometry(section_x: number, section_y: number, section_z: number, section_height: number, world_min_y: number, world_max_y: number, section_data_start_y: number, block_states: Uint16Array, block_light: Uint8Array, sky_light: Uint8Array, biomes: Uint8Array, invisible_blocks: Uint16Array, transparent_blocks: Uint16Array, no_ao_blocks: Uint16Array, cull_identical_blocks: Uint16Array, occluding_blocks: Uint16Array, enable_lighting: boolean, smooth_lighting: boolean, sky_light_value: number): any;
51
+
52
+ export function generate_geometry_multi(section_x: number, section_y: number, section_z: number, section_height: number, world_min_y: number, world_max_y: number, section_data_start_y: number, chunk_xs: Int32Array, chunk_zs: Int32Array, block_states: Uint16Array, block_light: Uint8Array, sky_light: Uint8Array, biomes: Uint8Array, invisible_blocks: Uint16Array, transparent_blocks: Uint16Array, no_ao_blocks: Uint16Array, cull_identical_blocks: Uint16Array, occluding_blocks: Uint16Array, enable_lighting: boolean, smooth_lighting: boolean, sky_light_value: number): any;
53
+
54
+ /**
55
+ * Parse a 1.18+ Minecraft chunk dump (column.dump() output).
56
+ *
57
+ * Returns an object: { blockStates: Uint16Array, biomes: Uint8Array, bytesRead: number }.
58
+ * Throws on parse error.
59
+ */
60
+ export function parseChunkDump118(buffer: Uint8Array, num_sections: number, max_bits_per_block: number, max_bits_per_biome: number): any;
61
+
62
+ /**
63
+ * index = x + z*16 + y*256, where y goes 0..(num_sections*16).
64
+ * Biomes are expanded from per-section 4×4×4 to per-block (matching prismarine-chunk's
65
+ * `getBiome(pos)`).
66
+ *
67
+ * This is the drop-in replacement for `convertChunkToWasm`'s blocks+biomes extraction:
68
+ * no JS hot loop, no per-section-to-full-column reorder. Light is still produced by
69
+ * `unpackLightSection118` per section (caller is responsible).
70
+ *
71
+ * Returns: { blockStates: Uint16Array, biomes: Uint8Array, bytesRead: number }.
72
+ */
73
+ export function parseChunkDump118FullColumn(buffer: Uint8Array, num_sections: number, max_bits_per_block: number, max_bits_per_biome: number): any;
74
+
75
+ /**
76
+ * Full drop-in replacement for `convertChunkToWasm`: parses dump + assembles light into
77
+ * `convertChunkToWasm`-shaped Uint16Array(blocks) + Uint8Array(biomes/blockLight/skyLight).
78
+ *
79
+ * Light masks come as Uint32Array laid out as (low0, high0, low1, high1, ...).
80
+ * The JS side flattens prismarine's [[high, low]] format into that order:
81
+ * `Uint32Array.of(...mask.flatMap(([h, l]) => [l >>> 0, h >>> 0]))`.
82
+ *
83
+ * `sky_light_concat` / `block_light_concat` = concatenation of present light section
84
+ * buffers (each 2048 bytes), in mask-bit order (border-below first).
85
+ *
86
+ * Returns: { blockStates: Uint16Array, biomes: Uint8Array, blockLight: Uint8Array,
87
+ * skyLight: Uint8Array, bytesRead: number }.
88
+ */
89
+ export function parseChunkDump118FullColumnAll(dump_buffer: Uint8Array, sky_light_concat: Uint8Array, block_light_concat: Uint8Array, sky_light_mask: Uint32Array, block_light_mask: Uint32Array, empty_sky_light_mask: Uint32Array, empty_block_light_mask: Uint32Array, num_sections: number, max_bits_per_block: number, max_bits_per_biome: number): any;
90
+
91
+ /**
92
+ * PoC bench helper: parse dump but return ONLY a checksum (no Uint16Array marshalling).
93
+ * Lets us isolate raw parse cost from the JS<->WASM boundary cost.
94
+ */
95
+ export function parseChunkDump118NoMarshal(buffer: Uint8Array, num_sections: number, max_bits_per_block: number, max_bits_per_biome: number): number;
96
+
97
+ /**
98
+ * Parse a 1.17 chunk-section payload (the bytes inside `chunkData` of a
99
+ * `map_chunk` packet) into a flat `Uint16Array` of block states **and** an
100
+ * expanded per-block biome `Uint8Array`.
101
+ *
102
+ * `chunk_data` — exactly the bytes between the `chunkData` length prefix and
103
+ * the `blockEntities` count in the wire packet (i.e. what
104
+ * `prismarine-chunk` 1.17 `ChunkColumn.load(data, bitMap)` consumes). The
105
+ * JS-side caller (mineflayer/protodef) does the outer-packet parsing and
106
+ * hands the slice in directly.
107
+ *
108
+ * `bit_map_lo_hi` — section mask flattened to `[low0, high0, low1, high1,
109
+ * ...]` u32 pairs. Bit `s` indicates that section index `s` is present in
110
+ * `chunk_data`. Sections without a set bit decode to all-zeros.
111
+ *
112
+ * `biomes_cells` — the 1.17 wire `biomes` field (varint[num_sections * 64]),
113
+ * passed straight through as `Int32Array`. May be empty (`&[]`) when the
114
+ * caller didn't capture biomes — every block then gets `default_biome`
115
+ * (typically 1 = plains).
116
+ *
117
+ * Returns `{ blockStates: Uint16Array(num_sections * 4096),
118
+ * biomes: Uint8Array(num_sections * 4096),
119
+ * bytesRead, bytesTotal }`.
120
+ * Layout of both arrays is `(s * 4096) | (y_in << 8) | (z << 4) | x`,
121
+ * matching what the WASM mesher already consumes for 1.18+ blocks.
122
+ *
123
+ * Light is **not** produced here — in 1.17 it arrives in a separate
124
+ * `update_light` packet (see `parseUpdateLightV17`). The JS bridge fills in
125
+ * defaults (sky=15, block=0) or merges real data from a paired light cache.
126
+ */
127
+ export function parseChunkSectionsV16V17(chunk_data: Uint8Array, bit_map_lo_hi: Uint32Array, num_sections: number, max_bits_per_block: number, biomes_cells: Int32Array, default_biome: number): any;
128
+
129
+ /**
130
+ * Stage-3 entry: parse a raw `map_chunk` packet (1.18+) into the same shape as
131
+ * `parseChunkDump118FullColumnAll` so the worker can drop it straight into
132
+ * `generate_geometry`.
133
+ *
134
+ * `raw_packet` is the buffer captured from `bot._client.on('raw.map_chunk', ...)`;
135
+ * it includes the leading packet-id varint (we skip it). `protocol` selects
136
+ * the version-specific quirks (heightmaps NBT, trust_edges, anonymous NBT, etc.).
137
+ *
138
+ * Returns: `{ x, z, blockStates: Uint16Array, biomes: Uint8Array,
139
+ * blockLight: Uint8Array, skyLight: Uint8Array, bytesRead }`.
140
+ */
141
+ export function parseMapChunkV18Plus(raw_packet: Uint8Array, num_sections: number, max_bits_per_block: number, max_bits_per_biome: number, protocol: number): any;
142
+
143
+ /**
144
+ * Parse a raw 1.17 `update_light` packet (as captured by
145
+ * `client.on('raw.update_light', ...)`) into flat per-block sky/block light
146
+ * arrays the WASM mesher consumes.
147
+ *
148
+ * `raw_packet` includes the leading packet-id varint (we skip it).
149
+ * `num_sections` should match the column the light is for (16 in 1.17).
150
+ *
151
+ * Returns `{ x, z, skyLight: Uint8Array(num_sections * 4096),
152
+ * blockLight: Uint8Array(num_sections * 4096), bytesRead }`.
153
+ * Layout matches the existing 1.18+ light arrays
154
+ * (`x + z*16 + y_abs*256`); the JS-side worker reorders into per-section
155
+ * stack via the same path used for 1.18+ raw map_chunk parsing.
156
+ */
157
+ export function parseUpdateLightV17(raw_packet: Uint8Array, num_sections: number): any;
158
+
159
+ /**
160
+ * Unpack a single light section (2048 bytes, BitArrayNoSpan bpv=4) into 4096 nibble values.
161
+ */
162
+ export function unpackLightSection118(buffer: Uint8Array): Uint8Array;
163
+
164
+ export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
165
+
166
+ export interface InitOutput {
167
+ readonly memory: WebAssembly.Memory;
168
+ readonly generate_geometry: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number) => any;
169
+ readonly generate_geometry_multi: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number, e1: number, f1: number) => any;
170
+ readonly parseChunkDump118: (a: number, b: number, c: number, d: number, e: number) => any;
171
+ readonly unpackLightSection118: (a: number, b: number) => [number, number];
172
+ readonly parseChunkDump118NoMarshal: (a: number, b: number, c: number, d: number, e: number) => number;
173
+ readonly parseChunkDump118FullColumnAll: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number) => any;
174
+ readonly generateGeometryFromDump118: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number, e1: number, f1: number, g1: number, h1: number, i1: number, j1: number, k1: number) => any;
175
+ readonly parseChunkDump118FullColumn: (a: number, b: number, c: number, d: number, e: number) => any;
176
+ readonly generateGeometryFromMapChunkV18Plus: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number) => any;
177
+ readonly parseMapChunkV18Plus: (a: number, b: number, c: number, d: number, e: number, f: number) => any;
178
+ readonly parseChunkSectionsV16V17: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => any;
179
+ readonly generateGeometryFromParsedV16V17: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number, e1: number, f1: number, g1: number) => any;
180
+ readonly parseUpdateLightV17: (a: number, b: number, c: number) => any;
181
+ readonly __wbindgen_malloc: (a: number, b: number) => number;
182
+ readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
183
+ readonly __wbindgen_exn_store: (a: number) => void;
184
+ readonly __externref_table_alloc: () => number;
185
+ readonly __wbindgen_externrefs: WebAssembly.Table;
186
+ readonly __wbindgen_free: (a: number, b: number, c: number) => void;
187
+ readonly __wbindgen_start: () => void;
188
+ }
189
+
190
+ export type SyncInitInput = BufferSource | WebAssembly.Module;
191
+
192
+ /**
193
+ * Instantiates the given `module`, which can either be bytes or
194
+ * a precompiled `WebAssembly.Module`.
195
+ *
196
+ * @param {{ module: SyncInitInput }} module - Passing `SyncInitInput` directly is deprecated.
197
+ *
198
+ * @returns {InitOutput}
199
+ */
200
+ export function initSync(module: { module: SyncInitInput } | SyncInitInput): InitOutput;
201
+
202
+ /**
203
+ * If `module_or_path` is {RequestInfo} or {URL}, makes a request and
204
+ * for everything else, calls `WebAssembly.instantiate` directly.
205
+ *
206
+ * @param {{ module_or_path: InitInput | Promise<InitInput> }} module_or_path - Passing `InitInput` directly is deprecated.
207
+ *
208
+ * @returns {Promise<InitOutput>}
209
+ */
210
+ export default function __wbg_init (module_or_path?: { module_or_path: InitInput | Promise<InitInput> } | InitInput | Promise<InitInput>): Promise<InitOutput>;