minerender 2.1.0-alpha.4 → 2.1.0-alpha.6

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.
@@ -1,5 +1,5 @@
1
1
  import * as three from 'three';
2
- import { Vector3, PixelFormat, BoxGeometry, Material, Mesh, Euler, Vector2, BufferAttribute, Float32BufferAttribute, Object3D, Box3, InstancedMesh, PerspectiveCamera, OrthographicCamera, Matrix4, Scene, Texture, Camera, MOUSE, TOUCH, WebGLRenderer, EventDispatcher, Raycaster, Intersection, CanvasTexture, BufferGeometry as BufferGeometry$1, InterleavedBufferAttribute, TrianglesDrawModes, Line, Points } from 'three';
2
+ import { Vector3, PixelFormat, BoxGeometry, Material, Mesh, Euler, Vector2, BufferAttribute, Float32BufferAttribute, BufferGeometry, Object3D, Box3, InstancedMesh, PerspectiveCamera, OrthographicCamera, Matrix4, Scene, Object3DEventMap, Texture, Camera, MOUSE, TOUCH, WebGLRenderer, EventDispatcher, Raycaster, Intersection, CanvasTexture, InterleavedBufferAttribute, TrianglesDrawModes, Line, Points } from 'three';
3
3
  import * as nodeCanvas from 'canvas';
4
4
  import { ImageData as ImageData$1, CanvasRenderingContext2D } from 'canvas';
5
5
  import { AxiosResponse, AxiosRequestConfig } from 'axios';
@@ -7,8 +7,6 @@ import { Buffer as Buffer$1 } from 'buffer';
7
7
  import { NBT } from 'prismarine-nbt';
8
8
  import { ZipReader } from '@zip.js/zip.js';
9
9
  import { AsyncLoadingCache, SimpleCache } from '@inventivetalent/loading-cache';
10
- import { BufferGeometry } from 'three/src/core/BufferGeometry';
11
- import { Material as Material$1 } from 'three/src/materials/Material';
12
10
  import Stats from 'stats.js';
13
11
  import { EffectComposer } from 'postprocessing';
14
12
 
@@ -62,7 +60,7 @@ declare function createCanvas(width: number, height: number): CompatCanvas;
62
60
  declare abstract class PersistentCache<B = unknown> {
63
61
  readonly backing: B;
64
62
  /** Bump to invalidate every persisted entry. */
65
- static readonly VERSION = 1;
63
+ static readonly VERSION = 2;
66
64
  static open(name: string): PersistentCache;
67
65
  protected constructor(backing: B);
68
66
  abstract get<T>(key: string): Promise<T>;
@@ -431,7 +429,7 @@ interface Transformable {
431
429
  declare function isTransformable(obj: any): obj is Transformable;
432
430
 
433
431
  declare const changeEvent: {
434
- type: string;
432
+ type: "change";
435
433
  };
436
434
  type Maybe<T> = T | undefined;
437
435
  declare function md5(str: string): string;
@@ -623,6 +621,7 @@ declare class AssetLoader {
623
621
  static addSource(key: string, source: AssetSource, override?: boolean): void;
624
622
  static removeSource(key: string): Maybe<AssetSource>;
625
623
  static getAll<T extends MinecraftAsset>(key: AssetKey, parser: AssetParser | string): Promise<T[]>;
624
+ /** Returns the first defined result in source-priority order, without merging assets. */
626
625
  static get<T extends MinecraftAsset>(key: AssetKey, parser: AssetParser | string): Promise<Maybe<T>>;
627
626
  }
628
627
 
@@ -886,7 +885,9 @@ interface MineRenderSceneOptions {
886
885
  }
887
886
  declare function isMineRenderScene(obj: any): obj is MineRenderScene;
888
887
 
889
- declare class SceneObject extends Object3D implements Disposable, Instanceable, Transformable {
888
+ declare class SceneObject extends Object3D<Object3DEventMap & {
889
+ change: {};
890
+ }> implements Disposable, Instanceable, Transformable {
890
891
  readonly isSceneObject: true;
891
892
  static readonly DEFAULT_OPTIONS: SceneObjectOptions;
892
893
  readonly options: SceneObjectOptions;
@@ -912,9 +913,9 @@ declare class SceneObject extends Object3D implements Disposable, Instanceable,
912
913
  */
913
914
  toggleGroupVisibility(name: string, visible?: boolean): boolean;
914
915
  protected addOrReplaceMesh(mesh: Mesh, parent: Object3D, name?: string): void;
915
- protected createAndAddMesh(name?: string, group?: Object3D, geometry?: BufferGeometry, material?: Material$1 | Material$1[], offsetAxis?: Axis, offset?: number): Mesh;
916
- protected createMesh(name?: string, geometry?: BufferGeometry, material?: Material$1 | Material$1[], offsetAxis?: Axis, offset?: number): Mesh;
917
- protected createInstancedMesh(name: Maybe<string>, geometry: BufferGeometry, material: Material$1 | Material$1[], count: number): InstancedMesh;
916
+ protected createAndAddMesh(name?: string, group?: Object3D, geometry?: BufferGeometry, material?: Material | Material[], offsetAxis?: Axis, offset?: number): Mesh;
917
+ protected createMesh(name?: string, geometry?: BufferGeometry, material?: Material | Material[], offsetAxis?: Axis, offset?: number): Mesh;
918
+ protected createInstancedMesh(name: Maybe<string>, geometry: BufferGeometry, material: Material | Material[], count: number): InstancedMesh;
918
919
  /**
919
920
  * Get a mesh by its name
920
921
  */
@@ -1319,7 +1320,7 @@ declare class Renderer implements Disposable {
1319
1320
  protected _scene: MineRenderScene;
1320
1321
  protected _camera: Camera;
1321
1322
  protected _renderer: WebGLRenderer;
1322
- protected _composer: EffectComposer;
1323
+ protected _composer?: EffectComposer;
1323
1324
  protected _controls?: OrbitControls;
1324
1325
  protected _stats?: Stats;
1325
1326
  protected _dirty: boolean;
@@ -1335,7 +1336,7 @@ declare class Renderer implements Disposable {
1335
1336
  protected createScene(): MineRenderScene;
1336
1337
  protected createCamera(): Camera;
1337
1338
  protected createRenderer(): WebGLRenderer;
1338
- protected createComposer(): EffectComposer;
1339
+ protected createComposer(): Maybe<EffectComposer>;
1339
1340
  protected createControls(): Maybe<OrbitControls>;
1340
1341
  init(): void;
1341
1342
  get element(): Maybe<HTMLElement>;
@@ -1344,7 +1345,7 @@ declare class Renderer implements Disposable {
1344
1345
  * Redraws when the dispatcher emits the selected event. Registering the same pair twice has no effect.
1345
1346
  * The renderer removes its listener on disposal; the caller retains ownership of the dispatcher.
1346
1347
  */
1347
- registerEventDispatcher(dispatcher: EventDispatcher, changeEvent?: string): void;
1348
+ registerEventDispatcher(dispatcher: EventDispatcher<any>, changeEvent?: string): void;
1348
1349
  resize(width: number, height: number): void;
1349
1350
  get dirty(): boolean;
1350
1351
  set dirty(dirty: boolean);
@@ -1364,7 +1365,7 @@ declare class Renderer implements Disposable {
1364
1365
  get scene(): MineRenderScene;
1365
1366
  get camera(): Camera;
1366
1367
  get renderer(): WebGLRenderer;
1367
- get composer(): EffectComposer;
1368
+ get composer(): Maybe<EffectComposer>;
1368
1369
  /** Renderer-owned controls, or undefined when disabled at construction or after disposal. */
1369
1370
  get controls(): Maybe<OrbitControls>;
1370
1371
  }
@@ -1421,7 +1422,7 @@ declare class SceneInspector {
1421
1422
  private selectedObject?;
1422
1423
  constructor(renderer: Renderer);
1423
1424
  protected init(): void;
1424
- findMeshChildren(from: Object3D, out?: Mesh[]): Mesh<three.BufferGeometry, three.Material | three.Material[]>[];
1425
+ findMeshChildren(from: Object3D, out?: Mesh[]): Mesh<three.BufferGeometry<three.NormalBufferAttributes>, three.Material | three.Material[], three.Object3DEventMap>[];
1425
1426
  onClick(event: any): void;
1426
1427
  appendTo(el: HTMLElement): void;
1427
1428
  protected handleRaycasterObjects(intersections: Intersection[]): void;
@@ -1523,12 +1524,12 @@ declare class Textures {
1523
1524
  static getImage(key: TextureKey): Texture;
1524
1525
  }
1525
1526
 
1526
- declare function mergeBufferGeometries(geometries: BufferGeometry$1[], useGroups?: boolean): BufferGeometry$1;
1527
+ declare function mergeBufferGeometries(geometries: BufferGeometry[], useGroups?: boolean): BufferGeometry;
1527
1528
  declare function mergeBufferAttributes(attributes: BufferAttribute[]): BufferAttribute;
1528
1529
  declare function interleaveAttributes(attributes: BufferAttribute[]): InterleavedBufferAttribute;
1529
- declare function estimateBytesUsed(geometry: BufferGeometry$1): number;
1530
- declare function mergeVertices(geometry: BufferGeometry$1, tolerance?: number): BufferGeometry$1;
1531
- declare function toTrianglesDrawMode(geometry: BufferGeometry$1, drawMode: TrianglesDrawModes): BufferGeometry$1;
1530
+ declare function estimateBytesUsed(geometry: BufferGeometry): number;
1531
+ declare function mergeVertices(geometry: BufferGeometry, tolerance?: number): BufferGeometry;
1532
+ declare function toTrianglesDrawMode(geometry: BufferGeometry, drawMode: TrianglesDrawModes): BufferGeometry;
1532
1533
  declare function computeMorphedAttributes(object: Mesh | Line | Points): object;
1533
1534
 
1534
1535
  interface BlockInfo {
@@ -1,5 +1,5 @@
1
1
  import * as three from 'three';
2
- import { Vector3, PixelFormat, BoxGeometry, Material, Mesh, Euler, Vector2, BufferAttribute, Float32BufferAttribute, Object3D, Box3, InstancedMesh, PerspectiveCamera, OrthographicCamera, Matrix4, Scene, Texture, Camera, MOUSE, TOUCH, WebGLRenderer, EventDispatcher, Raycaster, Intersection, CanvasTexture, BufferGeometry as BufferGeometry$1, InterleavedBufferAttribute, TrianglesDrawModes, Line, Points } from 'three';
2
+ import { Vector3, PixelFormat, BoxGeometry, Material, Mesh, Euler, Vector2, BufferAttribute, Float32BufferAttribute, BufferGeometry, Object3D, Box3, InstancedMesh, PerspectiveCamera, OrthographicCamera, Matrix4, Scene, Object3DEventMap, Texture, Camera, MOUSE, TOUCH, WebGLRenderer, EventDispatcher, Raycaster, Intersection, CanvasTexture, InterleavedBufferAttribute, TrianglesDrawModes, Line, Points } from 'three';
3
3
  import * as nodeCanvas from 'canvas';
4
4
  import { ImageData as ImageData$1, CanvasRenderingContext2D } from 'canvas';
5
5
  import { AxiosResponse, AxiosRequestConfig } from 'axios';
@@ -7,8 +7,6 @@ import { Buffer as Buffer$1 } from 'buffer';
7
7
  import { NBT } from 'prismarine-nbt';
8
8
  import { ZipReader } from '@zip.js/zip.js';
9
9
  import { AsyncLoadingCache, SimpleCache } from '@inventivetalent/loading-cache';
10
- import { BufferGeometry } from 'three/src/core/BufferGeometry';
11
- import { Material as Material$1 } from 'three/src/materials/Material';
12
10
  import Stats from 'stats.js';
13
11
  import { EffectComposer } from 'postprocessing';
14
12
 
@@ -62,7 +60,7 @@ declare function createCanvas(width: number, height: number): CompatCanvas;
62
60
  declare abstract class PersistentCache<B = unknown> {
63
61
  readonly backing: B;
64
62
  /** Bump to invalidate every persisted entry. */
65
- static readonly VERSION = 1;
63
+ static readonly VERSION = 2;
66
64
  static open(name: string): PersistentCache;
67
65
  protected constructor(backing: B);
68
66
  abstract get<T>(key: string): Promise<T>;
@@ -431,7 +429,7 @@ interface Transformable {
431
429
  declare function isTransformable(obj: any): obj is Transformable;
432
430
 
433
431
  declare const changeEvent: {
434
- type: string;
432
+ type: "change";
435
433
  };
436
434
  type Maybe<T> = T | undefined;
437
435
  declare function md5(str: string): string;
@@ -623,6 +621,7 @@ declare class AssetLoader {
623
621
  static addSource(key: string, source: AssetSource, override?: boolean): void;
624
622
  static removeSource(key: string): Maybe<AssetSource>;
625
623
  static getAll<T extends MinecraftAsset>(key: AssetKey, parser: AssetParser | string): Promise<T[]>;
624
+ /** Returns the first defined result in source-priority order, without merging assets. */
626
625
  static get<T extends MinecraftAsset>(key: AssetKey, parser: AssetParser | string): Promise<Maybe<T>>;
627
626
  }
628
627
 
@@ -886,7 +885,9 @@ interface MineRenderSceneOptions {
886
885
  }
887
886
  declare function isMineRenderScene(obj: any): obj is MineRenderScene;
888
887
 
889
- declare class SceneObject extends Object3D implements Disposable, Instanceable, Transformable {
888
+ declare class SceneObject extends Object3D<Object3DEventMap & {
889
+ change: {};
890
+ }> implements Disposable, Instanceable, Transformable {
890
891
  readonly isSceneObject: true;
891
892
  static readonly DEFAULT_OPTIONS: SceneObjectOptions;
892
893
  readonly options: SceneObjectOptions;
@@ -912,9 +913,9 @@ declare class SceneObject extends Object3D implements Disposable, Instanceable,
912
913
  */
913
914
  toggleGroupVisibility(name: string, visible?: boolean): boolean;
914
915
  protected addOrReplaceMesh(mesh: Mesh, parent: Object3D, name?: string): void;
915
- protected createAndAddMesh(name?: string, group?: Object3D, geometry?: BufferGeometry, material?: Material$1 | Material$1[], offsetAxis?: Axis, offset?: number): Mesh;
916
- protected createMesh(name?: string, geometry?: BufferGeometry, material?: Material$1 | Material$1[], offsetAxis?: Axis, offset?: number): Mesh;
917
- protected createInstancedMesh(name: Maybe<string>, geometry: BufferGeometry, material: Material$1 | Material$1[], count: number): InstancedMesh;
916
+ protected createAndAddMesh(name?: string, group?: Object3D, geometry?: BufferGeometry, material?: Material | Material[], offsetAxis?: Axis, offset?: number): Mesh;
917
+ protected createMesh(name?: string, geometry?: BufferGeometry, material?: Material | Material[], offsetAxis?: Axis, offset?: number): Mesh;
918
+ protected createInstancedMesh(name: Maybe<string>, geometry: BufferGeometry, material: Material | Material[], count: number): InstancedMesh;
918
919
  /**
919
920
  * Get a mesh by its name
920
921
  */
@@ -1319,7 +1320,7 @@ declare class Renderer implements Disposable {
1319
1320
  protected _scene: MineRenderScene;
1320
1321
  protected _camera: Camera;
1321
1322
  protected _renderer: WebGLRenderer;
1322
- protected _composer: EffectComposer;
1323
+ protected _composer?: EffectComposer;
1323
1324
  protected _controls?: OrbitControls;
1324
1325
  protected _stats?: Stats;
1325
1326
  protected _dirty: boolean;
@@ -1335,7 +1336,7 @@ declare class Renderer implements Disposable {
1335
1336
  protected createScene(): MineRenderScene;
1336
1337
  protected createCamera(): Camera;
1337
1338
  protected createRenderer(): WebGLRenderer;
1338
- protected createComposer(): EffectComposer;
1339
+ protected createComposer(): Maybe<EffectComposer>;
1339
1340
  protected createControls(): Maybe<OrbitControls>;
1340
1341
  init(): void;
1341
1342
  get element(): Maybe<HTMLElement>;
@@ -1344,7 +1345,7 @@ declare class Renderer implements Disposable {
1344
1345
  * Redraws when the dispatcher emits the selected event. Registering the same pair twice has no effect.
1345
1346
  * The renderer removes its listener on disposal; the caller retains ownership of the dispatcher.
1346
1347
  */
1347
- registerEventDispatcher(dispatcher: EventDispatcher, changeEvent?: string): void;
1348
+ registerEventDispatcher(dispatcher: EventDispatcher<any>, changeEvent?: string): void;
1348
1349
  resize(width: number, height: number): void;
1349
1350
  get dirty(): boolean;
1350
1351
  set dirty(dirty: boolean);
@@ -1364,7 +1365,7 @@ declare class Renderer implements Disposable {
1364
1365
  get scene(): MineRenderScene;
1365
1366
  get camera(): Camera;
1366
1367
  get renderer(): WebGLRenderer;
1367
- get composer(): EffectComposer;
1368
+ get composer(): Maybe<EffectComposer>;
1368
1369
  /** Renderer-owned controls, or undefined when disabled at construction or after disposal. */
1369
1370
  get controls(): Maybe<OrbitControls>;
1370
1371
  }
@@ -1421,7 +1422,7 @@ declare class SceneInspector {
1421
1422
  private selectedObject?;
1422
1423
  constructor(renderer: Renderer);
1423
1424
  protected init(): void;
1424
- findMeshChildren(from: Object3D, out?: Mesh[]): Mesh<three.BufferGeometry, three.Material | three.Material[]>[];
1425
+ findMeshChildren(from: Object3D, out?: Mesh[]): Mesh<three.BufferGeometry<three.NormalBufferAttributes>, three.Material | three.Material[], three.Object3DEventMap>[];
1425
1426
  onClick(event: any): void;
1426
1427
  appendTo(el: HTMLElement): void;
1427
1428
  protected handleRaycasterObjects(intersections: Intersection[]): void;
@@ -1523,12 +1524,12 @@ declare class Textures {
1523
1524
  static getImage(key: TextureKey): Texture;
1524
1525
  }
1525
1526
 
1526
- declare function mergeBufferGeometries(geometries: BufferGeometry$1[], useGroups?: boolean): BufferGeometry$1;
1527
+ declare function mergeBufferGeometries(geometries: BufferGeometry[], useGroups?: boolean): BufferGeometry;
1527
1528
  declare function mergeBufferAttributes(attributes: BufferAttribute[]): BufferAttribute;
1528
1529
  declare function interleaveAttributes(attributes: BufferAttribute[]): InterleavedBufferAttribute;
1529
- declare function estimateBytesUsed(geometry: BufferGeometry$1): number;
1530
- declare function mergeVertices(geometry: BufferGeometry$1, tolerance?: number): BufferGeometry$1;
1531
- declare function toTrianglesDrawMode(geometry: BufferGeometry$1, drawMode: TrianglesDrawModes): BufferGeometry$1;
1530
+ declare function estimateBytesUsed(geometry: BufferGeometry): number;
1531
+ declare function mergeVertices(geometry: BufferGeometry, tolerance?: number): BufferGeometry;
1532
+ declare function toTrianglesDrawMode(geometry: BufferGeometry, drawMode: TrianglesDrawModes): BufferGeometry;
1532
1533
  declare function computeMorphedAttributes(object: Mesh | Line | Points): object;
1533
1534
 
1534
1535
  interface BlockInfo {
@@ -90,7 +90,7 @@ var require_dist = __commonJS({
90
90
  return false;
91
91
  };
92
92
  var PROTECTED_KEYS = ["__proto__"];
93
- var merge11 = function() {
93
+ var merge10 = function() {
94
94
  var objects = [];
95
95
  for (var _i = 0; _i < arguments.length; _i++) {
96
96
  objects[_i] = arguments[_i];
@@ -101,9 +101,9 @@ var require_dist = __commonJS({
101
101
  return;
102
102
  }
103
103
  if (Array.isArray(result[key]) && Array.isArray(current[key])) {
104
- result[key] = merge11.options.mergeArrays ? Array.from(new Set(result[key].concat(current[key]))) : current[key];
104
+ result[key] = merge10.options.mergeArrays ? Array.from(new Set(result[key].concat(current[key]))) : current[key];
105
105
  } else if (isObject(result[key]) && isObject(current[key])) {
106
- result[key] = merge11(result[key], current[key]);
106
+ result[key] = merge10(result[key], current[key]);
107
107
  } else {
108
108
  result[key] = current[key];
109
109
  }
@@ -114,18 +114,18 @@ var require_dist = __commonJS({
114
114
  var defaultOptions = {
115
115
  mergeArrays: true
116
116
  };
117
- merge11.options = defaultOptions;
118
- merge11.withOptions = function(options) {
117
+ merge10.options = defaultOptions;
118
+ merge10.withOptions = function(options) {
119
119
  var objects = [];
120
120
  for (var _i = 1; _i < arguments.length; _i++) {
121
121
  objects[_i - 1] = arguments[_i];
122
122
  }
123
- merge11.options = __assign({ mergeArrays: true }, options);
124
- var result = merge11.apply(void 0, __spreadArray([], __read(objects), false));
125
- merge11.options = defaultOptions;
123
+ merge10.options = __assign({ mergeArrays: true }, options);
124
+ var result = merge10.apply(void 0, __spreadArray([], __read(objects), false));
125
+ merge10.options = defaultOptions;
126
126
  return result;
127
127
  };
128
- exports.default = merge11;
128
+ exports.default = merge10;
129
129
  }
130
130
  });
131
131
 
@@ -318,7 +318,7 @@ var _PersistentCache = class _PersistentCache {
318
318
  }
319
319
  };
320
320
  /** Bump to invalidate every persisted entry. */
321
- _PersistentCache.VERSION = 1;
321
+ _PersistentCache.VERSION = 2;
322
322
  var PersistentCache = _PersistentCache;
323
323
 
324
324
  // src/env/browser/BrowserCache.ts
@@ -419,7 +419,8 @@ var BrowserEnv = class {
419
419
  }
420
420
  openCache(name, version) {
421
421
  return new BrowserCache(import_localforage.default.createInstance({
422
- name,
422
+ // IndexedDB schema upgrades retain records; each cache generation needs its own database.
423
+ name: name + version,
423
424
  version
424
425
  }));
425
426
  }
@@ -631,6 +632,7 @@ var import_three5 = require("three");
631
632
 
632
633
  // src/texture/TextureLoader.ts
633
634
  var import_three4 = require("three");
635
+ var THREE = __toESM(require("three"));
634
636
 
635
637
  // src/canvas/CanvasCompat.ts
636
638
  function createImage(width, height) {
@@ -1019,6 +1021,7 @@ var TextureLoader = class {
1019
1021
  }
1020
1022
  static loadInBackground(src, format = import_three4.RGBAFormat, rotation = 0) {
1021
1023
  const texture = this.createTexture();
1024
+ texture.colorSpace = THREE.SRGBColorSpace;
1022
1025
  const image = ImageLoader.loadElement(src);
1023
1026
  image.onload = function() {
1024
1027
  texture.needsUpdate = true;
@@ -1030,6 +1033,7 @@ var TextureLoader = class {
1030
1033
  }
1031
1034
  static load(src, format = import_three4.RGBAFormat, rotation = 0) {
1032
1035
  const texture = new import_three4.Texture();
1036
+ texture.colorSpace = THREE.SRGBColorSpace;
1033
1037
  ImageLoader.getData(src).then((image) => {
1034
1038
  texture.needsUpdate = true;
1035
1039
  texture.image = image;
@@ -1041,11 +1045,11 @@ var TextureLoader = class {
1041
1045
  };
1042
1046
 
1043
1047
  // src/texture/Textures.ts
1044
- var THREE = __toESM(require("three"));
1048
+ var THREE2 = __toESM(require("three"));
1045
1049
  var Textures = class _Textures {
1046
1050
  static initTextureProps(texture) {
1047
- texture.magFilter = THREE.NearestFilter;
1048
- texture.minFilter = THREE.NearestFilter;
1051
+ texture.magFilter = THREE2.NearestFilter;
1052
+ texture.minFilter = THREE2.NearestFilter;
1049
1053
  texture.anisotropy = 0;
1050
1054
  return texture;
1051
1055
  }
@@ -1056,7 +1060,9 @@ var Textures = class _Textures {
1056
1060
  return new import_three5.Texture();
1057
1061
  }
1058
1062
  static createCanvasTexture(canvas) {
1059
- return this.initTextureProps(new import_three5.CanvasTexture(canvas));
1063
+ const texture = new import_three5.CanvasTexture(canvas);
1064
+ texture.colorSpace = THREE2.SRGBColorSpace;
1065
+ return this.initTextureProps(texture);
1060
1066
  }
1061
1067
  static getImage(key) {
1062
1068
  const keyStr = serializeTextureKey(key);
@@ -1173,6 +1179,9 @@ var _Materials = class _Materials {
1173
1179
  gl_FragColor = vec4(lift + color.rgb * light2, 1.0);
1174
1180
 
1175
1181
  }
1182
+
1183
+ #include <tonemapping_fragment>
1184
+ #include <colorspace_fragment>
1176
1185
  }
1177
1186
  `;
1178
1187
  try {
@@ -1803,7 +1812,6 @@ var ArchiveAssetSource = class _ArchiveAssetSource extends AssetSource {
1803
1812
  };
1804
1813
 
1805
1814
  // src/assets/AssetLoader.ts
1806
- var import_ts_deepmerge3 = __toESM(require_dist());
1807
1815
  var p5 = prefix("AssetLoader");
1808
1816
  var _AssetLoader = class _AssetLoader {
1809
1817
  static addSource(key, source, override = true) {
@@ -1827,7 +1835,6 @@ var _AssetLoader = class _AssetLoader {
1827
1835
  return void 0;
1828
1836
  }
1829
1837
  static async getAll(key, parser) {
1830
- console.log(this._SOURCES);
1831
1838
  let promises = [];
1832
1839
  for (const source of this._SOURCES) {
1833
1840
  promises.push(source.source.get(key, parser));
@@ -1836,24 +1843,16 @@ var _AssetLoader = class _AssetLoader {
1836
1843
  return results.filter((r) => r != void 0);
1837
1844
  });
1838
1845
  }
1846
+ /** Returns the first defined result in source-priority order, without merging assets. */
1839
1847
  static async get(key, parser) {
1840
- console.log(this._SOURCES);
1841
- let promises = [];
1842
- for (const source of this._SOURCES) {
1843
- promises.push(source.source.get(key, parser));
1844
- }
1845
- return Promise.all(promises).then((results) => {
1846
- const fallback = results[results.length - 1];
1847
- for (const result of results) {
1848
- if (result) {
1849
- if (fallback) {
1850
- return (0, import_ts_deepmerge3.default)({}, fallback, result);
1851
- }
1852
- return result;
1853
- }
1848
+ const sources = [...this._SOURCES];
1849
+ for (const source of sources) {
1850
+ const result = await source.source.get(key, parser);
1851
+ if (result !== void 0) {
1852
+ return result;
1854
1853
  }
1855
- return void 0;
1856
- });
1854
+ }
1855
+ return void 0;
1857
1856
  }
1858
1857
  };
1859
1858
  _AssetLoader.ROOT = DEFAULT_ROOT;
@@ -2675,7 +2674,7 @@ var MineRenderError = class _MineRenderError extends Error {
2675
2674
  };
2676
2675
 
2677
2676
  // src/renderer/SceneObject.ts
2678
- var import_ts_deepmerge4 = __toESM(require_dist());
2677
+ var import_ts_deepmerge3 = __toESM(require_dist());
2679
2678
  var p7 = prefix("SceneObject");
2680
2679
  var _SceneObject = class _SceneObject extends import_three9.Object3D {
2681
2680
  constructor(options) {
@@ -2684,7 +2683,7 @@ var _SceneObject = class _SceneObject extends import_three9.Object3D {
2684
2683
  this.materialCallbacks = {};
2685
2684
  this._isInstanced = false;
2686
2685
  this._instanceCounter = 0;
2687
- this.options = (0, import_ts_deepmerge4.default)({}, _SceneObject.DEFAULT_OPTIONS, options ?? {});
2686
+ this.options = (0, import_ts_deepmerge3.default)({}, _SceneObject.DEFAULT_OPTIONS, options ?? {});
2688
2687
  console.log("SceneObject options", this.options);
2689
2688
  }
2690
2689
  set scene(scene) {
@@ -3033,7 +3032,7 @@ var _SceneObject = class _SceneObject extends import_three9.Object3D {
3033
3032
  }
3034
3033
  //</editor-fold>
3035
3034
  };
3036
- _SceneObject.DEFAULT_OPTIONS = (0, import_ts_deepmerge4.default)({}, {
3035
+ _SceneObject.DEFAULT_OPTIONS = (0, import_ts_deepmerge3.default)({}, {
3037
3036
  instanceMeshes: true,
3038
3037
  maxInstanceCount: 50,
3039
3038
  mergeMeshes: true,
@@ -3045,16 +3044,16 @@ function isSceneObject(obj) {
3045
3044
  }
3046
3045
 
3047
3046
  // src/entity/scene/EntityObject.ts
3048
- var import_ts_deepmerge5 = __toESM(require_dist());
3047
+ var import_ts_deepmerge4 = __toESM(require_dist());
3049
3048
  var import_three11 = require("three");
3050
- var THREE2 = __toESM(require("three"));
3049
+ var THREE3 = __toESM(require("three"));
3051
3050
  var EntityObject = class extends SceneObject {
3052
3051
  constructor(entity, options) {
3053
3052
  super();
3054
3053
  this.entity = entity;
3055
3054
  this.isEntityObject = true;
3056
3055
  this.meshesCreated = false;
3057
- this.options = (0, import_ts_deepmerge5.default)({}, SceneObject.DEFAULT_OPTIONS, options ?? {});
3056
+ this.options = (0, import_ts_deepmerge4.default)({}, SceneObject.DEFAULT_OPTIONS, options ?? {});
3058
3057
  }
3059
3058
  async init() {
3060
3059
  this.createMeshes();
@@ -3091,8 +3090,8 @@ var EntityObject = class extends SceneObject {
3091
3090
  const l = cube.maxZ - cube.minZ;
3092
3091
  const uv = texture.toUvArray(w, h, l);
3093
3092
  const cubeGeo = this._getBoxGeometryForDimensionsAndUv(w, h, l, uv).clone();
3094
- cubeGeo.applyMatrix4(new THREE2.Matrix4().makeTranslation(w / 2, h / 2, l / 2));
3095
- cubeGeo.applyMatrix4(new THREE2.Matrix4().makeTranslation(cube.minX, cube.minY, cube.minZ));
3093
+ cubeGeo.applyMatrix4(new THREE3.Matrix4().makeTranslation(w / 2, h / 2, l / 2));
3094
+ cubeGeo.applyMatrix4(new THREE3.Matrix4().makeTranslation(cube.minX, cube.minY, cube.minZ));
3096
3095
  applyModelPartRotation(part, cubeGeo);
3097
3096
  const mesh = this.createMesh(partName, cubeGeo, mat);
3098
3097
  partAnchor.add(mesh);
@@ -3121,7 +3120,7 @@ var EntityObject = class extends SceneObject {
3121
3120
  }
3122
3121
  }
3123
3122
  };
3124
- EntityObject.DEFAULT_OPTIONS = (0, import_ts_deepmerge5.default)({}, SceneObject.DEFAULT_OPTIONS, {});
3123
+ EntityObject.DEFAULT_OPTIONS = (0, import_ts_deepmerge4.default)({}, SceneObject.DEFAULT_OPTIONS, {});
3125
3124
  function isEntityObject(obj) {
3126
3125
  return obj.isEntityObject;
3127
3126
  }
@@ -4112,7 +4111,7 @@ function computeMorphedAttributes(object) {
4112
4111
  }
4113
4112
 
4114
4113
  // src/model/scene/ModelObject.ts
4115
- var import_ts_deepmerge6 = __toESM(require_dist());
4114
+ var import_ts_deepmerge5 = __toESM(require_dist());
4116
4115
  var p10 = prefix("ModelObject");
4117
4116
  var _ModelObject = class _ModelObject extends SceneObject {
4118
4117
  constructor(originalModel, options) {
@@ -4120,7 +4119,7 @@ var _ModelObject = class _ModelObject extends SceneObject {
4120
4119
  this.originalModel = originalModel;
4121
4120
  this.isModelObject = true;
4122
4121
  this.meshesCreated = false;
4123
- this.options = (0, import_ts_deepmerge6.default)({}, _ModelObject.DEFAULT_OPTIONS, options ?? {});
4122
+ this.options = (0, import_ts_deepmerge5.default)({}, _ModelObject.DEFAULT_OPTIONS, options ?? {});
4124
4123
  console.log("ModelObject options", this.options);
4125
4124
  }
4126
4125
  async init() {
@@ -4218,14 +4217,14 @@ var _ModelObject = class _ModelObject extends SceneObject {
4218
4217
  }
4219
4218
  }
4220
4219
  };
4221
- _ModelObject.DEFAULT_OPTIONS = (0, import_ts_deepmerge6.default)({}, SceneObject.DEFAULT_OPTIONS, {});
4220
+ _ModelObject.DEFAULT_OPTIONS = (0, import_ts_deepmerge5.default)({}, SceneObject.DEFAULT_OPTIONS, {});
4222
4221
  var ModelObject = _ModelObject;
4223
4222
  function isModelObject(obj) {
4224
4223
  return obj.isModelObject;
4225
4224
  }
4226
4225
 
4227
4226
  // src/model/block/scene/BlockObject.ts
4228
- var import_ts_deepmerge7 = __toESM(require_dist());
4227
+ var import_ts_deepmerge6 = __toESM(require_dist());
4229
4228
  var import_three16 = require("three");
4230
4229
  var p11 = prefix("BlockObject");
4231
4230
  var _BlockObject = class _BlockObject extends SceneObject {
@@ -4241,7 +4240,7 @@ var _BlockObject = class _BlockObject extends SceneObject {
4241
4240
  this._instanceModel = [];
4242
4241
  this._variants = [];
4243
4242
  this._models = [];
4244
- this.options = (0, import_ts_deepmerge7.default)({}, _BlockObject.DEFAULT_OPTIONS, options ?? {});
4243
+ this.options = (0, import_ts_deepmerge6.default)({}, _BlockObject.DEFAULT_OPTIONS, options ?? {});
4245
4244
  }
4246
4245
  async init() {
4247
4246
  if (this.options.applyDefaultState) {
@@ -4530,7 +4529,7 @@ var _BlockObject = class _BlockObject extends SceneObject {
4530
4529
  //TODO: should override rotation + scale methods
4531
4530
  //TODO
4532
4531
  };
4533
- _BlockObject.DEFAULT_OPTIONS = (0, import_ts_deepmerge7.default)({}, ModelObject.DEFAULT_OPTIONS, {
4532
+ _BlockObject.DEFAULT_OPTIONS = (0, import_ts_deepmerge6.default)({}, ModelObject.DEFAULT_OPTIONS, {
4534
4533
  applyDefaultState: true
4535
4534
  });
4536
4535
  var BlockObject = _BlockObject;
@@ -4580,7 +4579,7 @@ var StructureParser = class {
4580
4579
 
4581
4580
  // src/renderer/MineRenderScene.ts
4582
4581
  var import_three17 = require("three");
4583
- var import_ts_deepmerge9 = __toESM(require_dist());
4582
+ var import_ts_deepmerge8 = __toESM(require_dist());
4584
4583
 
4585
4584
  // src/skin/SkinPart.ts
4586
4585
  var SkinPart = /* @__PURE__ */ ((SkinPart2) => {
@@ -5311,7 +5310,7 @@ var slimSkinGeometries = {
5311
5310
  };
5312
5311
 
5313
5312
  // src/skin/scene/SkinObject.ts
5314
- var import_ts_deepmerge8 = __toESM(require_dist());
5313
+ var import_ts_deepmerge7 = __toESM(require_dist());
5315
5314
  var SkinObject = class extends SceneObject {
5316
5315
  constructor(options) {
5317
5316
  super();
@@ -5319,7 +5318,7 @@ var SkinObject = class extends SceneObject {
5319
5318
  this.legacy = false;
5320
5319
  this.skinTextureWidth = 64;
5321
5320
  this.skinTextureHeight = 64;
5322
- this.options = (0, import_ts_deepmerge8.default)({}, SceneObject.DEFAULT_OPTIONS, options ?? {});
5321
+ this.options = (0, import_ts_deepmerge7.default)({}, SceneObject.DEFAULT_OPTIONS, options ?? {});
5323
5322
  }
5324
5323
  async init() {
5325
5324
  this.createMeshes();
@@ -5436,7 +5435,7 @@ var _MineRenderScene = class _MineRenderScene extends import_three17.Scene {
5436
5435
  this.dirty = true;
5437
5436
  }
5438
5437
  };
5439
- this.options = (0, import_ts_deepmerge9.default)({}, _MineRenderScene.DEFAULT_OPTIONS, options ?? {});
5438
+ this.options = (0, import_ts_deepmerge8.default)({}, _MineRenderScene.DEFAULT_OPTIONS, options ?? {});
5440
5439
  }
5441
5440
  add(...objects) {
5442
5441
  for (const object of objects) {
@@ -5532,7 +5531,7 @@ var _MineRenderScene = class _MineRenderScene extends import_three17.Scene {
5532
5531
  return this.addSceneObject(entity, () => new EntityObject(entity, options), options, parent);
5533
5532
  }
5534
5533
  };
5535
- _MineRenderScene.DEFAULT_OPTIONS = (0, import_ts_deepmerge9.default)({}, {});
5534
+ _MineRenderScene.DEFAULT_OPTIONS = (0, import_ts_deepmerge8.default)({}, {});
5536
5535
  var MineRenderScene = _MineRenderScene;
5537
5536
  function isMineRenderScene(obj) {
5538
5537
  return obj.isMineRenderScene;
@@ -5540,7 +5539,7 @@ function isMineRenderScene(obj) {
5540
5539
 
5541
5540
  // src/renderer/Renderer.ts
5542
5541
  var import_three19 = require("three");
5543
- var import_ts_deepmerge10 = __toESM(require_dist());
5542
+ var import_ts_deepmerge9 = __toESM(require_dist());
5544
5543
  var import_stats = __toESM(require("stats.js"));
5545
5544
  var import_postprocessing = require("postprocessing");
5546
5545
 
@@ -6197,7 +6196,7 @@ var _Renderer = class _Renderer {
6197
6196
  this._changeListener = () => {
6198
6197
  this._dirty = true;
6199
6198
  };
6200
- this.options = (0, import_ts_deepmerge10.default)({}, _Renderer.DEFAULT_OPTIONS, options ?? {});
6199
+ this.options = (0, import_ts_deepmerge9.default)({}, _Renderer.DEFAULT_OPTIONS, options ?? {});
6201
6200
  this._animationLoop = this.animate.bind(this);
6202
6201
  this._frameInterval = this.options.render.fpsLimit > 0 ? 1e3 / this.options.render.fpsLimit : void 0;
6203
6202
  this._scene = this.createScene();
@@ -6246,13 +6245,13 @@ var _Renderer = class _Renderer {
6246
6245
  renderer.setClearColor(0, 0);
6247
6246
  renderer.shadowMap.enabled = true;
6248
6247
  renderer.shadowMap.type = import_three19.PCFSoftShadowMap;
6249
- renderer.outputEncoding = import_three19.LinearEncoding;
6248
+ renderer.outputColorSpace = import_three19.SRGBColorSpace;
6250
6249
  renderer.setSize(this.viewWidth, this.viewHeight);
6251
6250
  return renderer;
6252
6251
  }
6253
6252
  createComposer() {
6253
+ if (!this.options.composer.enabled) return void 0;
6254
6254
  const composer = new import_postprocessing.EffectComposer(this.renderer);
6255
- if (!this.options.composer.enabled) return composer;
6256
6255
  composer.setSize(this.viewWidth, this.viewHeight);
6257
6256
  composer.addPass(new import_postprocessing.RenderPass(this.scene, this.camera));
6258
6257
  return composer;
@@ -6361,7 +6360,7 @@ var _Renderer = class _Renderer {
6361
6360
  this.camera.updateProjectionMatrix();
6362
6361
  }
6363
6362
  this.renderer.setSize(width, height);
6364
- this.composer.setSize(width, height);
6363
+ this.composer?.setSize(width, height);
6365
6364
  this._dirty = true;
6366
6365
  }
6367
6366
  //<editor-fold desc="RENDER">
@@ -6420,7 +6419,7 @@ var _Renderer = class _Renderer {
6420
6419
  }
6421
6420
  }
6422
6421
  this._debugHelpers.length = 0;
6423
- this.composer.dispose();
6422
+ this.composer?.dispose();
6424
6423
  this.renderer.dispose();
6425
6424
  this.renderer.forceContextLoss();
6426
6425
  }
@@ -6440,7 +6439,7 @@ var _Renderer = class _Renderer {
6440
6439
  if (this._stats) {
6441
6440
  this._stats.begin();
6442
6441
  }
6443
- if (this.options.composer.enabled) {
6442
+ if (this.options.composer.enabled && this.composer) {
6444
6443
  this.composer.render();
6445
6444
  } else {
6446
6445
  this.renderer.render(this.scene, this.camera);
@@ -6482,7 +6481,7 @@ var _Renderer = class _Renderer {
6482
6481
  }
6483
6482
  ///
6484
6483
  };
6485
- _Renderer.DEFAULT_OPTIONS = (0, import_ts_deepmerge10.default)({}, {
6484
+ _Renderer.DEFAULT_OPTIONS = (0, import_ts_deepmerge9.default)({}, {
6486
6485
  camera: {
6487
6486
  type: "perspective",
6488
6487
  near: 1,