minerender 2.1.0-alpha.10 → 2.1.0-alpha.11

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.
@@ -32,8 +32,8 @@ var require_dist = __commonJS({
32
32
  __assign = Object.assign || function(t) {
33
33
  for (var s, i = 1, n = arguments.length; i < n; i++) {
34
34
  s = arguments[i];
35
- for (var p13 in s) if (Object.prototype.hasOwnProperty.call(s, p13))
36
- t[p13] = s[p13];
35
+ for (var p12 in s) if (Object.prototype.hasOwnProperty.call(s, p12))
36
+ t[p12] = s[p12];
37
37
  }
38
38
  return t;
39
39
  };
@@ -1149,12 +1149,12 @@ var AssetKey = class _AssetKey extends BasicAssetKey {
1149
1149
  return a.join("/");
1150
1150
  }
1151
1151
  getFullPath() {
1152
- let p13 = [];
1152
+ let p12 = [];
1153
1153
  if (this.type) {
1154
- p13.push(this.type);
1154
+ p12.push(this.type);
1155
1155
  }
1156
- p13.push(this.path);
1157
- return p13.join("/");
1156
+ p12.push(this.path);
1157
+ return p12.join("/");
1158
1158
  }
1159
1159
  toNamespacedString() {
1160
1160
  return this.namespace + ":" + this.getFullPath();
@@ -1179,7 +1179,7 @@ var ModelMerger = class {
1179
1179
  merged = (0, import_ts_deepmerge.default)(merged, parentModel);
1180
1180
  }
1181
1181
  merged = (0, import_ts_deepmerge.default)(merged, model);
1182
- merged.hierarchy = models.map((m) => m.parent).filter((p13) => `${p13}`);
1182
+ merged.hierarchy = models.map((m) => m.parent).filter((p12) => `${p12}`);
1183
1183
  merged.hierarchy.push(`${merged.parent}`);
1184
1184
  return merged;
1185
1185
  }
@@ -1366,6 +1366,16 @@ var AssetSource = class {
1366
1366
  constructor() {
1367
1367
  }
1368
1368
  };
1369
+ var AssetLoadError = class extends Error {
1370
+ constructor(source, key, path, cause) {
1371
+ super(`Failed to load ${key.toNamespacedString()} from ${path}${cause instanceof Error ? `: ${cause.message}` : ""}`);
1372
+ this.source = source;
1373
+ this.key = key;
1374
+ this.path = path;
1375
+ this.cause = cause;
1376
+ this.name = "AssetLoadError";
1377
+ }
1378
+ };
1369
1379
 
1370
1380
  // src/util/BatchedExecutor.ts
1371
1381
  var BatchedExecutor = class {
@@ -1544,31 +1554,25 @@ var _HostedAssetSource = class _HostedAssetSource extends AssetSource {
1544
1554
  console.info(p3, "Loading", key);
1545
1555
  const url = `${this.assetBasePath(key)}${key.type !== void 0 ? key.type + "/" : ""}${key.path}${key.extension}`;
1546
1556
  console.debug(p3, url);
1547
- let req = {
1548
- url
1549
- };
1550
- parser.config(req);
1551
- return await Requests.mcAssetRequest(req).then((response) => {
1552
- if (response && response.data) {
1553
- try {
1554
- return parser.parse(response);
1555
- } catch (e) {
1556
- console.warn("Parser failed to process response", response, e);
1557
- throw e;
1558
- }
1559
- }
1560
- return void 0;
1561
- }).catch((err) => {
1562
- if (err.response) {
1563
- let response = err.response;
1564
- if (response.status === 404) {
1565
- console.debug(p3, key, "not found");
1557
+ const request = { url };
1558
+ try {
1559
+ parser.config(request);
1560
+ let response;
1561
+ try {
1562
+ response = await Requests.mcAssetRequest(request);
1563
+ } catch (cause) {
1564
+ if (cause instanceof RequestError && cause.response?.status === 404) {
1566
1565
  return void 0;
1567
1566
  }
1567
+ throw cause;
1568
1568
  }
1569
- console.debug(p3, "Failed to load", key, err?.message);
1570
- return void 0;
1571
- });
1569
+ if (response.data === void 0) {
1570
+ throw new Error("Asset response has no data");
1571
+ }
1572
+ return await parser.parse(response);
1573
+ } catch (cause) {
1574
+ throw new AssetLoadError(this, key, request.url, cause);
1575
+ }
1572
1576
  }
1573
1577
  assetBasePath(key) {
1574
1578
  return `${key.root ?? this.root ?? AssetLoader.ROOT}/${key.rootType !== void 0 ? key.rootType + "/" : ""}${key.namespace !== void 0 ? key.namespace + "/" : ""}${key.assetType !== void 0 ? key.assetType + "/" : ""}`;
@@ -1675,7 +1679,6 @@ var BrowserArchiveProxy = class {
1675
1679
  };
1676
1680
 
1677
1681
  // src/assets/source/archive/ArchiveAssetSource.ts
1678
- var p4 = prefix("ArchiveAssetSource");
1679
1682
  var ArchiveAssetSource = class _ArchiveAssetSource extends AssetSource {
1680
1683
  constructor(archiveProxy) {
1681
1684
  super();
@@ -1694,74 +1697,31 @@ var ArchiveAssetSource = class _ArchiveAssetSource extends AssetSource {
1694
1697
  }
1695
1698
  async get(key, parser) {
1696
1699
  const responseParser = HostedAssetSource.PARSER_MAP.get(parser);
1697
- console.log("ArchiveAssetSource.get", key, parser);
1698
- let entries = await this.getEntries();
1699
- const path = `${this.assetBasePath(key)}${key.type !== void 0 ? key.type + "/" : ""}${key.path}${key.extension}`;
1700
- console.log(path);
1701
- const entry = await this.getEntry(path);
1702
- console.log(entry);
1703
- if (!entry) {
1704
- return void 0;
1705
- }
1706
- let blob = await entry.getData();
1707
- const url = URL.createObjectURL(blob);
1708
- console.log(url);
1709
- let req = {
1710
- url
1711
- };
1712
- responseParser.config(req);
1713
- return Requests.genericRequest(req).then((response) => {
1714
- if (response && response.data) {
1715
- try {
1716
- return responseParser.parse(response);
1717
- } catch (e) {
1718
- console.warn("Parser failed to process response", response, e);
1719
- throw e;
1720
- }
1721
- }
1722
- return void 0;
1723
- }).catch((err) => {
1724
- if (err.response) {
1725
- let response = err.response;
1726
- if (response.status === 404) {
1727
- console.debug(p4, key, "not found");
1728
- return void 0;
1729
- }
1730
- }
1731
- console.debug(p4, "Failed to load", key, err?.message);
1732
- return void 0;
1733
- });
1700
+ return this.load(key, responseParser);
1734
1701
  }
1735
- //TODO: abstract this
1736
1702
  async load(key, parser) {
1737
- console.info(p4, "Loading", key);
1738
- const url = `${this.assetBasePath(key)}${key.type !== void 0 ? key.type + "/" : ""}${key.path}${key.extension}`;
1739
- console.debug(p4, url);
1740
- let req = {
1741
- url
1742
- };
1743
- parser.config(req);
1744
- return await Requests.genericRequest(req).then((response) => {
1745
- if (response && response.data) {
1746
- try {
1747
- return parser.parse(response);
1748
- } catch (e) {
1749
- console.warn("Parser failed to process response", response, e);
1750
- throw e;
1751
- }
1703
+ const path = `${this.assetBasePath(key)}${key.type !== void 0 ? key.type + "/" : ""}${key.path}${key.extension}`;
1704
+ let url;
1705
+ try {
1706
+ const entry = await this.getEntry(path);
1707
+ if (!entry) {
1708
+ return void 0;
1752
1709
  }
1753
- return void 0;
1754
- }).catch((err) => {
1755
- if (err.response) {
1756
- let response = err.response;
1757
- if (response.status === 404) {
1758
- console.debug(p4, key, "not found");
1759
- return void 0;
1760
- }
1710
+ url = URL.createObjectURL(await entry.getData());
1711
+ const request = { url };
1712
+ parser.config(request);
1713
+ const response = await Requests.genericRequest(request);
1714
+ if (response.data === void 0) {
1715
+ throw new Error("Asset response has no data");
1761
1716
  }
1762
- console.debug(p4, "Failed to load", key, err?.message);
1763
- return void 0;
1764
- });
1717
+ return await parser.parse(response);
1718
+ } catch (cause) {
1719
+ throw new AssetLoadError(this, key, path, cause);
1720
+ } finally {
1721
+ if (url !== void 0) {
1722
+ URL.revokeObjectURL(url);
1723
+ }
1724
+ }
1765
1725
  }
1766
1726
  assetBasePath(key) {
1767
1727
  return `${key.rootType !== void 0 ? key.rootType + "/" : ""}${key.namespace !== void 0 ? key.namespace + "/" : ""}${key.assetType !== void 0 ? key.assetType + "/" : ""}`;
@@ -1769,17 +1729,17 @@ var ArchiveAssetSource = class _ArchiveAssetSource extends AssetSource {
1769
1729
  };
1770
1730
 
1771
1731
  // src/assets/AssetLoader.ts
1772
- var p5 = prefix("AssetLoader");
1732
+ var p4 = prefix("AssetLoader");
1773
1733
  var _AssetLoader = class _AssetLoader {
1774
1734
  static addSource(key, source, override = true) {
1775
1735
  if (override) {
1776
1736
  const existing = this.removeSource(key);
1777
1737
  if (existing) {
1778
- console.log(p5, "Removed existing AssetSource", key);
1738
+ console.log(p4, "Removed existing AssetSource", key);
1779
1739
  }
1780
1740
  }
1781
1741
  this._SOURCES.unshift({ key, source });
1782
- console.log(p5, "Added AssetSource", key);
1742
+ console.log(p4, "Added AssetSource", key);
1783
1743
  }
1784
1744
  static removeSource(key) {
1785
1745
  const index = this._SOURCES.findIndex((s) => s.key === key);
@@ -2029,7 +1989,7 @@ var ModelGenerator = class {
2029
1989
  ModelGenerator.ITEM_LAYERS = ["layer0", "layer1", "layer2", "layer3", "layer4"];
2030
1990
 
2031
1991
  // src/UVMapper.ts
2032
- var p6 = prefix("UVMapper");
1992
+ var p5 = prefix("UVMapper");
2033
1993
  var DEFAULT_UV = [0, 0, 16, 16];
2034
1994
  var X = 0;
2035
1995
  var Y = 1;
@@ -2206,7 +2166,7 @@ var UVMapper = class {
2206
2166
  const metaMap = {};
2207
2167
  const model = { ...originalModel };
2208
2168
  const isItemModel = !("elements" in model);
2209
- console.debug(p6, "Creating Atlas for", model.key);
2169
+ console.debug(p5, "Creating Atlas for", model.key);
2210
2170
  if (model.textures) {
2211
2171
  const promises = [];
2212
2172
  const uniqueTextureNames = [];
@@ -2220,7 +2180,7 @@ var UVMapper = class {
2220
2180
  const assetKey = AssetKey.parse("textures", textureValue, model.key);
2221
2181
  promises.push(ModelTextures.get(assetKey).then((asset) => {
2222
2182
  if (!asset) {
2223
- console.warn(p6, "Missing texture", assetKey);
2183
+ console.warn(p5, "Missing texture", assetKey);
2224
2184
  return;
2225
2185
  }
2226
2186
  textureMap[textureKey] = new WrappedImage(asset);
@@ -2232,7 +2192,7 @@ var UVMapper = class {
2232
2192
  }
2233
2193
  await Promise.all(promises);
2234
2194
  const textureCount = uniqueTextureNames.length;
2235
- console.debug(p6, "Creating Atlas for", textureCount, "textures");
2195
+ console.debug(p5, "Creating Atlas for", textureCount, "textures");
2236
2196
  this.fillMissingTextureKeys(model.textures, textureMap);
2237
2197
  this.fillMissingTextureKeys(model.textures, metaMap);
2238
2198
  const sizes = {};
@@ -2252,7 +2212,7 @@ var UVMapper = class {
2252
2212
  this.fillMissingTextureKeys(model.textures, sizes);
2253
2213
  const s = Math.ceil(Math.sqrt(textureCount + 1));
2254
2214
  const size = Math.ceil(s * maxWidth);
2255
- console.debug(p6, "Atlas size:", size);
2215
+ console.debug(p5, "Atlas size:", size);
2256
2216
  const squaredSize = size * size;
2257
2217
  const missing = await ImageLoader.getData("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABAAQMAAACQp+OdAAAABlBMVEX/AP8AAACfphTyAAAAFUlEQVQoz2MIhQKGVVAwKjIqQrwIAHRz/wFI17TEAAAAAElFTkSuQmCC");
2258
2218
  const empty = await ImageLoader.getData("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABAAQMAAACQp+OdAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAA5JREFUKM9jGAWjgAIAAAJAAAFSSwuTAAAAAElFTkSuQmCC");
@@ -2307,10 +2267,10 @@ var UVMapper = class {
2307
2267
  }
2308
2268
  }
2309
2269
  const atlasImageData = image.toDataURL();
2310
- console.log(p6, "Atlas Image for", model.key, atlasImageData);
2270
+ console.log(p5, "Atlas Image for", model.key, atlasImageData);
2311
2271
  this.fillMissingTextureKeys(model.textures, positions);
2312
2272
  if (isItemModel) {
2313
- console.debug(p6, "Generating item model for", model);
2273
+ console.debug(p5, "Generating item model for", model);
2314
2274
  model.elements = [];
2315
2275
  for (let layerName of ModelGenerator.ITEM_LAYERS) {
2316
2276
  const textureImage = textureMap[layerName];
@@ -2318,7 +2278,7 @@ var UVMapper = class {
2318
2278
  model.elements.push(...ModelGenerator.generateItemModel(textureImage.data, layerName));
2319
2279
  }
2320
2280
  }
2321
- console.debug(p6, "Item model elements", model.elements);
2281
+ console.debug(p5, "Item model elements", model.elements);
2322
2282
  }
2323
2283
  if (!model.elements) {
2324
2284
  }
@@ -2378,7 +2338,7 @@ var UVMapper = class {
2378
2338
  hasTransparency
2379
2339
  );
2380
2340
  } else {
2381
- console.warn(p6, "Model does not have any textures", model);
2341
+ console.warn(p5, "Model does not have any textures", model);
2382
2342
  }
2383
2343
  return void 0;
2384
2344
  }
@@ -2639,7 +2599,7 @@ var MineRenderError = class _MineRenderError extends Error {
2639
2599
 
2640
2600
  // src/renderer/SceneObject.ts
2641
2601
  var import_ts_deepmerge3 = __toESM(require_dist());
2642
- var p7 = prefix("SceneObject");
2602
+ var p6 = prefix("SceneObject");
2643
2603
  var _SceneObject = class _SceneObject extends Object3D2 {
2644
2604
  constructor(options) {
2645
2605
  super();
@@ -2818,9 +2778,9 @@ var _SceneObject = class _SceneObject extends Object3D2 {
2818
2778
  if (!this.isInstanced) throw new MineRenderError("Object is not instanced");
2819
2779
  const i = this._instanceCounter++;
2820
2780
  this.setMatrixAt(i, new Matrix42());
2821
- console.debug(p7, "nextInstance " + i);
2781
+ console.debug(p6, "nextInstance " + i);
2822
2782
  if (i === this.options.maxInstanceCount) {
2823
- console.warn(p7, "Max instance count reached for " + this);
2783
+ console.warn(p6, "Max instance count reached for " + this);
2824
2784
  }
2825
2785
  if (this.scene) {
2826
2786
  this.scene.stats.instanceCount++;
@@ -3102,7 +3062,7 @@ var GuiObject = class extends SceneObject {
3102
3062
 
3103
3063
  // src/inspector/SceneInspector.ts
3104
3064
  import { Raycaster, Vector2 as Vector22 } from "three";
3105
- var p8 = prefix("SceneInspector");
3065
+ var p7 = prefix("SceneInspector");
3106
3066
  var help = "<span>Ctrl+Click to Select<br/></span><br/>";
3107
3067
  var SceneInspector = class {
3108
3068
  constructor(renderer) {
@@ -3171,7 +3131,7 @@ var SceneInspector = class {
3171
3131
  }
3172
3132
  selectObject(targetObject, targetIntersection) {
3173
3133
  this.selectedObject = targetObject;
3174
- console.log(p8, "selected", targetObject);
3134
+ console.log(p7, "selected", targetObject);
3175
3135
  this.redraw(targetObject, targetIntersection);
3176
3136
  }
3177
3137
  redraw(targetObject, targetIntersection) {
@@ -3469,7 +3429,7 @@ var SceneStatsDisplay = class {
3469
3429
  };
3470
3430
 
3471
3431
  // src/instance/InstanceManager.ts
3472
- var p9 = prefix("InstanceManager");
3432
+ var p8 = prefix("InstanceManager");
3473
3433
  var InstanceManager = class {
3474
3434
  constructor() {
3475
3435
  this.isInstanceManager = true;
@@ -3477,7 +3437,7 @@ var InstanceManager = class {
3477
3437
  }
3478
3438
  async get(key) {
3479
3439
  if (key in this.instanceCache) {
3480
- console.debug(p9, "key in cache", key);
3440
+ console.debug(p8, "key in cache", key);
3481
3441
  return (await this.instanceCache[key]).nextInstance();
3482
3442
  }
3483
3443
  return void 0;
@@ -3486,13 +3446,17 @@ var InstanceManager = class {
3486
3446
  if (key in this.instanceCache) {
3487
3447
  return await this.get(key);
3488
3448
  }
3489
- console.debug(p9, "key not in cache", key);
3490
- this.instanceCache[key] = new Promise(async (resolve) => {
3491
- const obj = await supplier();
3492
- const instance = obj.nextInstance();
3493
- resolve(instance);
3494
- });
3495
- return await this.instanceCache[key];
3449
+ console.debug(p8, "key not in cache", key);
3450
+ const pending = Promise.resolve().then(supplier).then((obj) => obj.nextInstance());
3451
+ this.instanceCache[key] = pending;
3452
+ try {
3453
+ return await pending;
3454
+ } catch (error) {
3455
+ if (this.instanceCache[key] === pending) {
3456
+ delete this.instanceCache[key];
3457
+ }
3458
+ throw error;
3459
+ }
3496
3460
  }
3497
3461
  reset() {
3498
3462
  for (let instanceCacheKey in this.instanceCache) {
@@ -4092,7 +4056,7 @@ function computeMorphedAttributes(object) {
4092
4056
 
4093
4057
  // src/model/scene/ModelObject.ts
4094
4058
  var import_ts_deepmerge5 = __toESM(require_dist());
4095
- var p10 = prefix("ModelObject");
4059
+ var p9 = prefix("ModelObject");
4096
4060
  var _ModelObject = class _ModelObject extends SceneObject {
4097
4061
  constructor(originalModel, options) {
4098
4062
  super(options);
@@ -4142,10 +4106,10 @@ var _ModelObject = class _ModelObject extends SceneObject {
4142
4106
  }
4143
4107
  });
4144
4108
  } else {
4145
- console.debug(p10, this.atlas.model, "has no elements");
4109
+ console.debug(p9, this.atlas.model, "has no elements");
4146
4110
  }
4147
4111
  } else {
4148
- console.debug(p10, "Missing atlas for", this);
4112
+ console.debug(p9, "Missing atlas for", this);
4149
4113
  }
4150
4114
  if (this.options.mergeMeshes) {
4151
4115
  let combinedGeo;
@@ -4206,7 +4170,7 @@ function isModelObject(obj) {
4206
4170
  // src/model/block/scene/BlockObject.ts
4207
4171
  var import_ts_deepmerge6 = __toESM(require_dist());
4208
4172
  import { Euler as Euler3, Matrix4 as Matrix46, Vector3 as Vector36 } from "three";
4209
- var p11 = prefix("BlockObject");
4173
+ var p10 = prefix("BlockObject");
4210
4174
  var _BlockObject = class _BlockObject extends SceneObject {
4211
4175
  constructor(blockState, options) {
4212
4176
  super(options);
@@ -4224,7 +4188,7 @@ var _BlockObject = class _BlockObject extends SceneObject {
4224
4188
  }
4225
4189
  async init() {
4226
4190
  if (this.options.applyDefaultState) {
4227
- const defaultState = this.blockState.key ? BlockStates.getDefaultState(this.blockState.key) : void 0;
4191
+ const defaultState = this.blockState.key ? await BlockStates.getDefaultState(this.blockState.key) : void 0;
4228
4192
  if (defaultState && Object.keys(defaultState).length > 0) {
4229
4193
  const state = {};
4230
4194
  for (let k in defaultState) {
@@ -4300,7 +4264,7 @@ var _BlockObject = class _BlockObject extends SceneObject {
4300
4264
  } else if (this.blockState.multipart) {
4301
4265
  for (let part of this.blockState.multipart) {
4302
4266
  if (!part.apply) {
4303
- console.debug(p11, "Missing apply for blockState part", part);
4267
+ console.debug(p10, "Missing apply for blockState part", part);
4304
4268
  continue;
4305
4269
  }
4306
4270
  if (!part.when) {
@@ -6769,7 +6733,7 @@ var MineRenderWorld = class {
6769
6733
  };
6770
6734
 
6771
6735
  // src/world/Chunk.ts
6772
- var p12 = prefix("Chunk");
6736
+ var p11 = prefix("Chunk");
6773
6737
  var Chunk = class _Chunk {
6774
6738
  constructor(scene, x, y, z) {
6775
6739
  this._blocks = [];
@@ -6821,7 +6785,7 @@ var Chunk = class _Chunk {
6821
6785
  const index = _Chunk.chunkPosToBlockIndex(pos);
6822
6786
  const current = this._blocks[index];
6823
6787
  if (typeof current !== "undefined") {
6824
- console.debug(p12, "deleting existing block at", pos, worldPos, index);
6788
+ console.debug(p11, "deleting existing block at", pos, worldPos, index);
6825
6789
  current.object.removeFromScene();
6826
6790
  delete this._blocks[index];
6827
6791
  }
@@ -6887,6 +6851,7 @@ export {
6887
6851
  AXES,
6888
6852
  ArchiveAssetSource,
6889
6853
  AssetKey,
6854
+ AssetLoadError,
6890
6855
  AssetLoader,
6891
6856
  AssetParser,
6892
6857
  AssetSource,