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.
- package/dist/mesher.js +8 -8
- package/dist/mesher.js.map +4 -4
- package/dist/mesherWasm.js +94 -94
- package/dist/minecraft-renderer.js +57 -57
- package/dist/minecraft-renderer.js.meta.json +1 -1
- package/dist/threeWorker.js +66 -66
- package/package.json +3 -4
- package/src/bundler/bundlePrepare.ts +56 -0
- package/src/graphicsBackend/appViewer.ts +10 -0
- package/src/graphicsBackend/config.ts +5 -1
- package/src/graphicsBackend/preloadWorkers.ts +187 -0
- package/src/lib/worldrendererCommon.ts +26 -2
- package/src/{mesher → mesher-legacy}/mesher.ts +14 -4
- package/src/{mesher → mesher-legacy}/test/mesherTester.ts +2 -2
- package/src/{mesher → mesher-legacy}/test/run/test-js.ts +1 -1
- package/src/{mesher → mesher-legacy}/test/test-perf.ts +1 -1
- package/src/{mesher → mesher-legacy}/test/tests.test.ts +1 -1
- package/src/{mesher → mesher-shared}/shared.ts +2 -0
- package/src/playground/allEntitiesDebug.ts +1 -1
- package/src/three/chunkMeshManager.ts +1 -1
- package/src/three/entities.ts +19 -6
- package/src/three/entity/EntityMesh.ts +123 -140
- package/src/three/graphicsBackendBase.ts +13 -0
- package/src/three/holdingBlock.ts +1 -1
- package/src/three/holdingBlockLegacy.ts +1 -1
- package/src/three/modules/sciFiWorldReveal.ts +1 -1
- package/src/three/worldRendererThree.ts +2 -2
- package/src/wasm-mesher/README.md +90 -0
- package/src/{wasm-lib → wasm-mesher/bridge}/convertChunk.ts +2 -2
- package/src/{wasm-lib → wasm-mesher/bridge}/render-from-wasm.ts +4 -4
- package/src/wasm-mesher/runtime-build/wasm_mesher.d.ts +210 -0
- package/src/wasm-mesher/runtime-build/wasm_mesher.js +881 -0
- package/src/wasm-mesher/runtime-build/wasm_mesher_bg.wasm +0 -0
- package/src/wasm-mesher/runtime-build/wasm_mesher_bg.wasm.d.ts +24 -0
- package/src/{mesher/test → wasm-mesher/tests}/heightmapParity.test.ts +4 -4
- package/src/{mesher/test → wasm-mesher/tests}/mesherWasmConversionCache.test.ts +2 -2
- package/src/{mesher/test → wasm-mesher/tests}/splitColumnWasmOutput.test.ts +1 -1
- package/src/wasm-mesher/worker/mesherWasm.ts +1247 -0
- package/src/{mesher → wasm-mesher/worker}/mesherWasmConversionCache.ts +1 -1
- package/src/worldView/types.ts +90 -0
- package/src/mesher/mesherWasm.ts +0 -696
- package/wasm/wasm_mesher.d.ts +0 -46
- package/wasm/wasm_mesher.js +0 -443
- package/wasm/wasm_mesher_bg.wasm +0 -0
- package/wasm/wasm_mesher_bg.wasm.d.ts +0 -9
- /package/src/{mesher → mesher-legacy}/test/a.ts +0 -0
- /package/src/{mesher → mesher-legacy}/test/playground.ts +0 -0
- /package/src/{mesher → mesher-legacy}/test/run/chunk.ts +0 -0
- /package/src/{mesher → mesher-legacy}/test/snapshotUtils.ts +0 -0
- /package/src/{mesher → mesher-shared}/blockEntityMetadata.ts +0 -0
- /package/src/{mesher → mesher-shared}/computeHeightmap.ts +0 -0
- /package/src/{mesher → mesher-shared}/models.ts +0 -0
- /package/src/{mesher → mesher-shared}/modelsGeometryCommon.ts +0 -0
- /package/src/{mesher → mesher-shared}/standaloneRenderer.ts +0 -0
- /package/src/{mesher → mesher-shared}/world.ts +0 -0
- /package/src/{mesher → mesher-shared}/worldConstants.ts +0 -0
- /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>;
|