minerender 2.0.0-alpha.7 → 2.0.0-alpha.8
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/ava.config.js +10 -0
- package/dist/bundle.js +1463 -649
- package/dist/bundle.js.map +4 -4
- package/dist/cjs/assets/AssetKey.js.map +1 -1
- package/dist/cjs/assets/AssetLoader.d.ts +5 -20
- package/dist/cjs/assets/AssetLoader.js +16 -127
- package/dist/cjs/assets/AssetLoader.js.map +1 -1
- package/dist/cjs/assets/BlockStates.d.ts +1 -0
- package/dist/cjs/assets/BlockStates.js +8 -4
- package/dist/cjs/assets/BlockStates.js.map +1 -1
- package/dist/cjs/assets/ModelTextures.js +3 -2
- package/dist/cjs/assets/ModelTextures.js.map +1 -1
- package/dist/cjs/assets/Models.js +3 -4
- package/dist/cjs/assets/Models.js.map +1 -1
- package/dist/cjs/assets/index.d.ts +1 -0
- package/dist/cjs/assets/index.js +1 -0
- package/dist/cjs/assets/index.js.map +1 -1
- package/dist/cjs/assets/source/AssetSource.d.ts +8 -0
- package/dist/cjs/assets/source/AssetSource.js +9 -0
- package/dist/cjs/assets/source/AssetSource.js.map +1 -0
- package/dist/cjs/assets/source/HostedAssetSource.d.ts +33 -0
- package/dist/cjs/assets/source/HostedAssetSource.js +190 -0
- package/dist/cjs/assets/source/HostedAssetSource.js.map +1 -0
- package/dist/cjs/assets/source/index.d.ts +3 -0
- package/dist/cjs/assets/source/index.js +21 -0
- package/dist/cjs/assets/source/index.js.map +1 -0
- package/dist/cjs/assets/source/parser/AssetParsers.d.ts +9 -0
- package/dist/cjs/assets/source/parser/AssetParsers.js +14 -0
- package/dist/cjs/assets/source/parser/AssetParsers.js.map +1 -0
- package/dist/cjs/assets/source/parser/ResponseParser.d.ts +7 -0
- package/dist/cjs/assets/source/parser/ResponseParser.js +3 -0
- package/dist/cjs/assets/source/parser/ResponseParser.js.map +1 -0
- package/dist/cjs/assets/source/parser/index.d.ts +2 -0
- package/dist/cjs/assets/source/parser/index.js +20 -0
- package/dist/cjs/assets/source/parser/index.js.map +1 -0
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/three/index.d.ts +0 -2
- package/dist/cjs/three/index.js +0 -2
- package/dist/cjs/three/index.js.map +1 -1
- package/dist/esm/assets/AssetKey.js.map +1 -1
- package/dist/esm/assets/AssetLoader.d.ts +5 -20
- package/dist/esm/assets/AssetLoader.js +17 -128
- package/dist/esm/assets/AssetLoader.js.map +1 -1
- package/dist/esm/assets/BlockStates.d.ts +1 -0
- package/dist/esm/assets/BlockStates.js +8 -4
- package/dist/esm/assets/BlockStates.js.map +1 -1
- package/dist/esm/assets/ModelTextures.js +3 -2
- package/dist/esm/assets/ModelTextures.js.map +1 -1
- package/dist/esm/assets/Models.js +3 -4
- package/dist/esm/assets/Models.js.map +1 -1
- package/dist/esm/assets/index.d.ts +1 -0
- package/dist/esm/assets/index.js +1 -0
- package/dist/esm/assets/index.js.map +1 -1
- package/dist/esm/assets/source/AssetSource.d.ts +8 -0
- package/dist/esm/assets/source/AssetSource.js +5 -0
- package/dist/esm/assets/source/AssetSource.js.map +1 -0
- package/dist/esm/assets/source/HostedAssetSource.d.ts +33 -0
- package/dist/esm/assets/source/HostedAssetSource.js +183 -0
- package/dist/esm/assets/source/HostedAssetSource.js.map +1 -0
- package/dist/esm/assets/source/index.d.ts +3 -0
- package/dist/esm/assets/source/index.js +5 -0
- package/dist/esm/assets/source/index.js.map +1 -0
- package/dist/esm/assets/source/parser/AssetParsers.d.ts +9 -0
- package/dist/esm/assets/source/parser/AssetParsers.js +11 -0
- package/dist/esm/assets/source/parser/AssetParsers.js.map +1 -0
- package/dist/esm/assets/source/parser/ResponseParser.d.ts +7 -0
- package/dist/esm/assets/source/parser/ResponseParser.js +2 -0
- package/dist/esm/assets/source/parser/ResponseParser.js.map +1 -0
- package/dist/esm/assets/source/parser/index.d.ts +2 -0
- package/dist/esm/assets/source/parser/index.js +4 -0
- package/dist/esm/assets/source/parser/index.js.map +1 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/three/index.d.ts +0 -2
- package/dist/esm/three/index.js +0 -2
- package/dist/esm/three/index.js.map +1 -1
- package/package.json +9 -5
- package/src/assets/AssetKey.ts +0 -1
- package/src/assets/AssetLoader.ts +22 -123
- package/src/assets/BlockStates.ts +9 -5
- package/src/assets/ModelTextures.ts +3 -2
- package/src/assets/Models.ts +5 -5
- package/src/assets/index.ts +9 -8
- package/src/assets/source/AssetSource.ts +13 -0
- package/src/assets/source/HostedAssetSource.ts +191 -0
- package/src/assets/source/index.ts +4 -0
- package/src/assets/source/parser/AssetParsers.ts +11 -0
- package/src/assets/source/parser/ResponseParser.ts +9 -0
- package/src/assets/source/parser/index.ts +3 -0
- package/src/index.ts +68 -66
- package/src/three/index.ts +3 -5
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { AssetSource } from ".";
|
|
11
|
+
import { prefix } from "../../util";
|
|
12
|
+
import { NBTHelper } from "../../nbt";
|
|
13
|
+
import { ImageLoader } from "../../image";
|
|
14
|
+
import { AssetKey } from "../AssetKey";
|
|
15
|
+
import { DEFAULT_NAMESPACE, DEFAULT_ROOT } from "../Assets";
|
|
16
|
+
import { Requests } from "../../request";
|
|
17
|
+
import { AssetLoader } from "../AssetLoader";
|
|
18
|
+
import { AssetParser } from "./parser";
|
|
19
|
+
import merge from "ts-deepmerge";
|
|
20
|
+
const p = prefix("HostedAssetSource");
|
|
21
|
+
const DEFAULT_OPTIONS = {
|
|
22
|
+
retryDefaults: true
|
|
23
|
+
};
|
|
24
|
+
export class HostedAssetSource extends AssetSource {
|
|
25
|
+
loadOrRetryWithDefaults(key, parser) {
|
|
26
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
27
|
+
const direct = yield this.load(key, parser);
|
|
28
|
+
if (typeof direct !== "undefined") {
|
|
29
|
+
return direct;
|
|
30
|
+
}
|
|
31
|
+
if (key.namespace !== DEFAULT_NAMESPACE) {
|
|
32
|
+
console.info(p, "Retrying", key, "with default namespace");
|
|
33
|
+
// Try on the same host but with default minecraft: namespace
|
|
34
|
+
const namespaceKey = new AssetKey(DEFAULT_NAMESPACE, key.path, key.assetType, key.type, key.rootType, key.extension, key.root);
|
|
35
|
+
const namespaced = yield this.load(namespaceKey, parser);
|
|
36
|
+
if (typeof namespaced !== "undefined") {
|
|
37
|
+
return namespaced;
|
|
38
|
+
}
|
|
39
|
+
if ((typeof key.root !== "undefined" && key.root !== DEFAULT_ROOT) || (typeof this.root !== "undefined" && this.root !== DEFAULT_ROOT)) {
|
|
40
|
+
console.info(p, "Retrying", key, "with default root+namespace");
|
|
41
|
+
// Try both defaults
|
|
42
|
+
const namespacedRootedKey = new AssetKey(DEFAULT_NAMESPACE, key.path, key.assetType, key.type, key.rootType, key.extension, DEFAULT_ROOT);
|
|
43
|
+
const namespacedRooted = yield this.load(namespacedRootedKey, parser);
|
|
44
|
+
if (typeof namespacedRooted !== "undefined") {
|
|
45
|
+
return namespacedRooted;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else if ((typeof key.root !== "undefined" && key.root !== DEFAULT_ROOT) || (typeof this.root !== "undefined" && this.root !== DEFAULT_ROOT)) {
|
|
50
|
+
console.info(p, "Retrying", key, "with default root");
|
|
51
|
+
// Try on default root
|
|
52
|
+
const rootKey = new AssetKey(key.namespace, key.path, key.assetType, key.type, key.rootType, key.extension, DEFAULT_ROOT);
|
|
53
|
+
const rooted = yield this.load(rootKey, parser);
|
|
54
|
+
if (typeof rooted !== "undefined") {
|
|
55
|
+
return rooted;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return undefined;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
load(key, parser) {
|
|
62
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
63
|
+
console.info(p, "Loading", key);
|
|
64
|
+
const url = `${this.assetBasePath(key)}${key.type !== undefined ? key.type + '/' : ''}${key.path}${key.extension}`;
|
|
65
|
+
console.debug(p, url);
|
|
66
|
+
let req = {
|
|
67
|
+
url: url
|
|
68
|
+
};
|
|
69
|
+
parser.config(req);
|
|
70
|
+
// @ts-ignore
|
|
71
|
+
return yield Requests.mcAssetRequest(req)
|
|
72
|
+
.then(response => {
|
|
73
|
+
if (response && response.data) {
|
|
74
|
+
try {
|
|
75
|
+
return parser.parse(response);
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
console.warn("Parser failed to process response", response, e);
|
|
79
|
+
throw e;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return undefined;
|
|
83
|
+
})
|
|
84
|
+
.catch(err => {
|
|
85
|
+
if (err.response) {
|
|
86
|
+
let response = err.response;
|
|
87
|
+
if (response.status === 404) {
|
|
88
|
+
console.debug(p, key, "not found");
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
console.debug(p, "Failed to load", key, err === null || err === void 0 ? void 0 : err.message);
|
|
93
|
+
return undefined;
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
assetBasePath(key) {
|
|
98
|
+
var _a, _b;
|
|
99
|
+
return `${(_b = (_a = key.root) !== null && _a !== void 0 ? _a : this.root) !== null && _b !== void 0 ? _b : AssetLoader.ROOT}/${key.rootType !== undefined ? key.rootType + '/' : ''}${key.namespace !== undefined ? key.namespace + '/' : ''}${key.assetType !== undefined ? key.assetType + '/' : ''}`;
|
|
100
|
+
}
|
|
101
|
+
constructor(root, options) {
|
|
102
|
+
super();
|
|
103
|
+
this._root = root;
|
|
104
|
+
this._options = merge({}, DEFAULT_OPTIONS, options !== null && options !== void 0 ? options : {});
|
|
105
|
+
}
|
|
106
|
+
get root() {
|
|
107
|
+
return this._root;
|
|
108
|
+
}
|
|
109
|
+
get options() {
|
|
110
|
+
return this._options;
|
|
111
|
+
}
|
|
112
|
+
get(key, parser) {
|
|
113
|
+
const responseParser = HostedAssetSource.PARSER_MAP.get(parser);
|
|
114
|
+
if (this.options.retryDefaults) {
|
|
115
|
+
return this.loadOrRetryWithDefaults(key, responseParser);
|
|
116
|
+
}
|
|
117
|
+
return this.load(key, responseParser);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
HostedAssetSource.MODEL = {
|
|
121
|
+
config(request) {
|
|
122
|
+
},
|
|
123
|
+
parse(response) {
|
|
124
|
+
return response.data;
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
HostedAssetSource.BLOCKSTATE = {
|
|
128
|
+
config(request) {
|
|
129
|
+
},
|
|
130
|
+
parse(response) {
|
|
131
|
+
return response.data;
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
HostedAssetSource.META = {
|
|
135
|
+
config(request) {
|
|
136
|
+
// request.responseType = "arraybuffer";
|
|
137
|
+
},
|
|
138
|
+
parse(response) {
|
|
139
|
+
return response.data;
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
HostedAssetSource.NBT = {
|
|
143
|
+
config(request) {
|
|
144
|
+
request.responseType = "arraybuffer";
|
|
145
|
+
},
|
|
146
|
+
parse(response) {
|
|
147
|
+
return NBTHelper.fromBuffer(Buffer.from(response.data));
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
HostedAssetSource.IMAGE = {
|
|
151
|
+
config(request) {
|
|
152
|
+
request.responseType = "arraybuffer";
|
|
153
|
+
},
|
|
154
|
+
parse(response) {
|
|
155
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
156
|
+
return yield ImageLoader.processResponse(response);
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
HostedAssetSource.LIST = {
|
|
161
|
+
config(request) {
|
|
162
|
+
},
|
|
163
|
+
parse(response) {
|
|
164
|
+
return response.data;
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
HostedAssetSource.JSON = {
|
|
168
|
+
config(request) {
|
|
169
|
+
},
|
|
170
|
+
parse(response) {
|
|
171
|
+
return response.data;
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
HostedAssetSource.PARSER_MAP = new Map([
|
|
175
|
+
[AssetParser.MODEL, HostedAssetSource.MODEL],
|
|
176
|
+
[AssetParser.BLOCKSTATE, HostedAssetSource.BLOCKSTATE],
|
|
177
|
+
[AssetParser.META, HostedAssetSource.META],
|
|
178
|
+
[AssetParser.NBT, HostedAssetSource.NBT],
|
|
179
|
+
[AssetParser.IMAGE, HostedAssetSource.IMAGE],
|
|
180
|
+
[AssetParser.LIST, HostedAssetSource.LIST],
|
|
181
|
+
[AssetParser.JSON, HostedAssetSource.JSON],
|
|
182
|
+
]);
|
|
183
|
+
//# sourceMappingURL=HostedAssetSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HostedAssetSource.js","sourceRoot":"src/","sources":["assets/source/HostedAssetSource.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"src/","sources":["assets/source/index.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export var AssetParser;
|
|
2
|
+
(function (AssetParser) {
|
|
3
|
+
AssetParser["MODEL"] = "model";
|
|
4
|
+
AssetParser["BLOCKSTATE"] = "blockstate";
|
|
5
|
+
AssetParser["META"] = "meta";
|
|
6
|
+
AssetParser["NBT"] = "nbt";
|
|
7
|
+
AssetParser["IMAGE"] = "image";
|
|
8
|
+
AssetParser["LIST"] = "list";
|
|
9
|
+
AssetParser["JSON"] = "json";
|
|
10
|
+
})(AssetParser || (AssetParser = {}));
|
|
11
|
+
//# sourceMappingURL=AssetParsers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetParsers.js","sourceRoot":"src/","sources":["assets/source/parser/AssetParsers.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,WAUX;AAVD,WAAY,WAAW;IAEnB,8BAAe,CAAA;IACf,wCAAyB,CAAA;IACzB,4BAAa,CAAA;IACb,0BAAW,CAAA;IACX,8BAAe,CAAA;IACf,4BAAa,CAAA;IACb,4BAAa,CAAA;AAEjB,CAAC,EAVW,WAAW,KAAX,WAAW,QAUtB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AxiosRequestConfig, AxiosResponse } from "axios";
|
|
2
|
+
import { Maybe } from "../../../util";
|
|
3
|
+
import { MinecraftAsset } from "../../../MinecraftAsset";
|
|
4
|
+
export interface ResponseParser<T extends MinecraftAsset> {
|
|
5
|
+
config(request: AxiosRequestConfig): any;
|
|
6
|
+
parse(response: AxiosResponse): Maybe<T> | Promise<Maybe<T>>;
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResponseParser.js","sourceRoot":"src/","sources":["assets/source/parser/ResponseParser.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"src/","sources":["assets/source/parser/index.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -38,6 +38,8 @@ export * from './three';
|
|
|
38
38
|
export * from './util';
|
|
39
39
|
export * from './world';
|
|
40
40
|
export * from './assets';
|
|
41
|
+
export * from './assets/source';
|
|
42
|
+
export * from './assets/source/parser';
|
|
41
43
|
export * from './bedrock';
|
|
42
44
|
export * from './cache';
|
|
43
45
|
export * from './canvas';
|
package/dist/esm/index.js
CHANGED
|
@@ -39,6 +39,8 @@ export * from './three';
|
|
|
39
39
|
export * from './util';
|
|
40
40
|
export * from './world';
|
|
41
41
|
export * from './assets';
|
|
42
|
+
export * from './assets/source';
|
|
43
|
+
export * from './assets/source/parser';
|
|
42
44
|
export * from './bedrock';
|
|
43
45
|
export * from './cache';
|
|
44
46
|
export * from './canvas';
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"src/","sources":["index.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,cAAc,oBAAoB,CAAC;AACnC,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,OAAO,CAAC;AACtB,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"src/","sources":["index.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,cAAc,oBAAoB,CAAC;AACnC,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,OAAO,CAAC;AACtB,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC"}
|
package/dist/esm/three/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"src/","sources":["three/index.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"src/","sources":["three/index.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "minerender",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.8",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"types": "./dist/cjs/index.d.ts",
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"bundle": "node ./build.mjs",
|
|
14
14
|
"bundle:w": "TODO",
|
|
15
15
|
"build": "yarn run clean && npm run compile && npm run bundle",
|
|
16
|
+
"test": "ava",
|
|
16
17
|
"doc": "typedoc --out docs src",
|
|
17
18
|
"publish:alpha": "npm version prerelease --force --preid=alpha && npm publish --tag=alpha"
|
|
18
19
|
},
|
|
@@ -72,10 +73,7 @@
|
|
|
72
73
|
"util": "^0.12.3"
|
|
73
74
|
},
|
|
74
75
|
"devDependencies": {
|
|
75
|
-
"
|
|
76
|
-
"browserify-incremental": "^3.1.1",
|
|
77
|
-
"browserify-shim": "^3.8.14",
|
|
78
|
-
"browserify-zlib": "^0.2.0",
|
|
76
|
+
"@ava/typescript": "^4.1.0",
|
|
79
77
|
"@mapbox/node-pre-gyp": "^1.0.0",
|
|
80
78
|
"@types/browser-or-node": "^1.3.0",
|
|
81
79
|
"@types/crypto-js": "^4.0.1",
|
|
@@ -83,9 +81,15 @@
|
|
|
83
81
|
"@types/node": "^14.14.31",
|
|
84
82
|
"@types/node-persist": "^3.1.1",
|
|
85
83
|
"@types/three": "^0.125.2",
|
|
84
|
+
"ava": "^5.3.1",
|
|
85
|
+
"browserify-fs": "^1.0.0",
|
|
86
|
+
"browserify-incremental": "^3.1.1",
|
|
87
|
+
"browserify-shim": "^3.8.14",
|
|
88
|
+
"browserify-zlib": "^0.2.0",
|
|
86
89
|
"clean-webpack-plugin": "^3.0.0",
|
|
87
90
|
"esbuild": "^0.19.5",
|
|
88
91
|
"esbuild-plugin-polyfill-node": "^0.3.0",
|
|
92
|
+
"esbuild-runner": "^2.2.2",
|
|
89
93
|
"event-stream": "^4.0.1",
|
|
90
94
|
"glob": "^7.1.6",
|
|
91
95
|
"progress-stream": "^2.0.0",
|
package/src/assets/AssetKey.ts
CHANGED
|
@@ -11,142 +11,41 @@ import { ListAsset } from "../ListAsset";
|
|
|
11
11
|
import { AssetKey } from "./AssetKey";
|
|
12
12
|
import { NBTAsset, NBTHelper } from "../nbt/NBTHelper";
|
|
13
13
|
import { prefix } from "../util/log";
|
|
14
|
+
import { AssetSource } from "./source/AssetSource";
|
|
15
|
+
import { AssetParser } from "./source/parser/AssetParsers";
|
|
16
|
+
import { HostedAssetSource } from "./source";
|
|
14
17
|
|
|
15
18
|
const p = prefix("AssetLoader");
|
|
16
19
|
|
|
17
|
-
export interface ResponseParser<T extends MinecraftAsset> {
|
|
18
|
-
config(request: AxiosRequestConfig);
|
|
19
|
-
|
|
20
|
-
parse(response: AxiosResponse): Maybe<T> | Promise<Maybe<T>>;
|
|
21
|
-
}
|
|
22
20
|
|
|
23
21
|
export class AssetLoader {
|
|
24
22
|
|
|
25
|
-
static
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
static readonly BLOCKSTATE: ResponseParser<BlockState> = {
|
|
33
|
-
config(request: AxiosRequestConfig) {
|
|
34
|
-
},
|
|
35
|
-
parse(response: AxiosResponse): Maybe<BlockState> {
|
|
36
|
-
return response.data as BlockState;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
static readonly META: ResponseParser<MinecraftTextureMeta> = {
|
|
40
|
-
config(request: AxiosRequestConfig) {
|
|
41
|
-
// request.responseType = "arraybuffer";
|
|
42
|
-
},
|
|
43
|
-
parse(response: AxiosResponse): Maybe<MinecraftTextureMeta> {
|
|
44
|
-
return response.data as MinecraftTextureMeta;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
static readonly NBT: ResponseParser<NBTAsset> = {
|
|
48
|
-
config(request: AxiosRequestConfig) {
|
|
49
|
-
request.responseType = "arraybuffer";
|
|
50
|
-
},
|
|
51
|
-
parse(response: AxiosResponse): Promise<Maybe<NBTAsset>> {
|
|
52
|
-
return NBTHelper.fromBuffer(Buffer.from(response.data));
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
static readonly IMAGE: ResponseParser<TextureAsset> = {
|
|
56
|
-
config(request: AxiosRequestConfig) {
|
|
57
|
-
request.responseType = "arraybuffer";
|
|
58
|
-
},
|
|
59
|
-
async parse(response: AxiosResponse): Promise<Maybe<TextureAsset>> {
|
|
60
|
-
return await ImageLoader.processResponse(response) as TextureAsset;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
static readonly LIST: ResponseParser<ListAsset> = {
|
|
64
|
-
config(request: AxiosRequestConfig) {
|
|
65
|
-
},
|
|
66
|
-
parse(response: AxiosResponse): Maybe<ListAsset> {
|
|
67
|
-
return response.data as ListAsset;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
static readonly JSON: ResponseParser<any> = {
|
|
71
|
-
config(request: AxiosRequestConfig) {
|
|
72
|
-
},
|
|
73
|
-
parse(response: AxiosResponse): Maybe<any> {
|
|
74
|
-
return response.data;
|
|
75
|
-
}
|
|
23
|
+
static ROOT: string = DEFAULT_ROOT;
|
|
24
|
+
|
|
25
|
+
private static _SOURCES: AssetSourceReference[] = [];
|
|
26
|
+
|
|
27
|
+
public static addSource(key: string, source: AssetSource) {
|
|
28
|
+
this._SOURCES.unshift({key, source});
|
|
29
|
+
console.log(p, "Added AssetSource", key);
|
|
76
30
|
}
|
|
77
31
|
|
|
78
|
-
static
|
|
32
|
+
static {
|
|
33
|
+
this.addSource("mcassets", new HostedAssetSource(DEFAULT_ROOT));
|
|
34
|
+
}
|
|
79
35
|
|
|
80
|
-
public static async
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
if (key.namespace !== DEFAULT_NAMESPACE) {
|
|
86
|
-
console.info(p, "Retrying", key, "with default namespace");
|
|
87
|
-
// Try on the same host but with default minecraft: namespace
|
|
88
|
-
const namespaceKey = new AssetKey(DEFAULT_NAMESPACE, key.path, key.assetType, key.type, key.rootType, key.extension, key.root);
|
|
89
|
-
const namespaced = await this.load<T>(namespaceKey, parser);
|
|
90
|
-
if (typeof namespaced !== "undefined") {
|
|
91
|
-
return namespaced;
|
|
92
|
-
}
|
|
93
|
-
if ((typeof key.root !== "undefined" && key.root !== DEFAULT_ROOT) || (typeof this.ROOT !== "undefined" && this.ROOT !== DEFAULT_ROOT)) {
|
|
94
|
-
console.info(p, "Retrying", key, "with default root+namespace");
|
|
95
|
-
// Try both defaults
|
|
96
|
-
const namespacedRootedKey = new AssetKey(DEFAULT_NAMESPACE, key.path, key.assetType, key.type, key.rootType, key.extension, DEFAULT_ROOT);
|
|
97
|
-
const namespacedRooted = await this.load<T>(namespacedRootedKey, parser);
|
|
98
|
-
if (typeof namespacedRooted !== "undefined") {
|
|
99
|
-
return namespacedRooted;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
} else if ((typeof key.root !== "undefined" && key.root !== DEFAULT_ROOT) || (typeof this.ROOT !== "undefined" && this.ROOT !== DEFAULT_ROOT)) {
|
|
103
|
-
console.info(p, "Retrying", key, "with default root");
|
|
104
|
-
// Try on default root
|
|
105
|
-
const rootKey = new AssetKey(key.namespace, key.path, key.assetType, key.type, key.rootType, key.extension, DEFAULT_ROOT);
|
|
106
|
-
const rooted = await this.load<T>(rootKey, parser);
|
|
107
|
-
if (typeof rooted !== "undefined") {
|
|
108
|
-
return rooted;
|
|
36
|
+
public static async get<T extends MinecraftAsset>(key: AssetKey, parser: AssetParser | string): Promise<Maybe<T>> {
|
|
37
|
+
for (const source of this._SOURCES) {
|
|
38
|
+
const result = await source.source.get<T>(key, parser);
|
|
39
|
+
if (result) {
|
|
40
|
+
return result;
|
|
109
41
|
}
|
|
110
42
|
}
|
|
111
43
|
return undefined;
|
|
112
44
|
}
|
|
113
45
|
|
|
46
|
+
}
|
|
114
47
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
console.debug(p, url);
|
|
119
|
-
let req: AxiosRequestConfig = {
|
|
120
|
-
url: url
|
|
121
|
-
};
|
|
122
|
-
parser.config(req);
|
|
123
|
-
return await Requests.mcAssetRequest(req)
|
|
124
|
-
.then(response => {
|
|
125
|
-
if (response && response.data) {
|
|
126
|
-
try {
|
|
127
|
-
return parser.parse(response);
|
|
128
|
-
} catch (e) {
|
|
129
|
-
console.warn("Parser failed to process response", response, e);
|
|
130
|
-
throw e;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
return undefined;
|
|
134
|
-
})
|
|
135
|
-
.catch(err => {
|
|
136
|
-
if (err.response) {
|
|
137
|
-
let response = err.response as AxiosResponse;
|
|
138
|
-
if (response.status === 404) {
|
|
139
|
-
console.debug(p, key, "not found");
|
|
140
|
-
return undefined;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
console.debug(p, "Failed to load", key, err?.message);
|
|
144
|
-
return undefined;
|
|
145
|
-
})
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
public static assetBasePath(key: AssetKey) {
|
|
149
|
-
return `${ key.root ?? this.ROOT }/${ key.rootType !== undefined ? key.rootType + '/' : '' }${ key.namespace !== undefined ? key.namespace + '/' : '' }${ key.assetType !== undefined ? key.assetType + '/' : '' }`;
|
|
150
|
-
}
|
|
151
|
-
|
|
48
|
+
interface AssetSourceReference {
|
|
49
|
+
key: string;
|
|
50
|
+
source: AssetSource;
|
|
152
51
|
}
|
|
@@ -8,6 +8,8 @@ import defaultBlockStates from "../model/defaultBlockStates.json";
|
|
|
8
8
|
import { BlockStateProperties, BlockStatePropertyDefaults } from "../model/block/BlockStateProperties";
|
|
9
9
|
import { AssetKey } from "./AssetKey";
|
|
10
10
|
import { PersistentCache } from "../cache/PersistentCache";
|
|
11
|
+
import { AssetParser } from "./source/parser/AssetParsers";
|
|
12
|
+
import { ListAsset } from "../ListAsset";
|
|
11
13
|
|
|
12
14
|
export class BlockStates {
|
|
13
15
|
|
|
@@ -16,7 +18,7 @@ export class BlockStates {
|
|
|
16
18
|
// BlockState names are hardcoded
|
|
17
19
|
@Memoize()
|
|
18
20
|
public static async getList(): Promise<string[]> {
|
|
19
|
-
return AssetLoader.
|
|
21
|
+
return AssetLoader.get<ListAsset>(new AssetKey(
|
|
20
22
|
DEFAULT_NAMESPACE,
|
|
21
23
|
"_list",
|
|
22
24
|
"blockstates",
|
|
@@ -24,7 +26,7 @@ export class BlockStates {
|
|
|
24
26
|
"assets",
|
|
25
27
|
".json",
|
|
26
28
|
DEFAULT_ROOT
|
|
27
|
-
),
|
|
29
|
+
), AssetParser.LIST).then(r => r?.files ?? []);
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
public static getDefaultState(key: AssetKey): Maybe<BlockStatePropertyDefaults> {
|
|
@@ -41,9 +43,7 @@ export class BlockStates {
|
|
|
41
43
|
const keyStr = key.serialize();
|
|
42
44
|
return Caching.blockStateCache.get(keyStr, k => {
|
|
43
45
|
return this.PERSISTENT_CACHE.getOrLoad(keyStr, k1 => {
|
|
44
|
-
return AssetLoader.
|
|
45
|
-
return asset;
|
|
46
|
-
})
|
|
46
|
+
return AssetLoader.get<BlockState>(key, AssetParser.BLOCKSTATE);
|
|
47
47
|
})
|
|
48
48
|
}).then(asset => {
|
|
49
49
|
if (asset) {
|
|
@@ -61,4 +61,8 @@ export class BlockStates {
|
|
|
61
61
|
return Promise.all(promises);
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
+
public static async clearCache() {
|
|
65
|
+
await this.PERSISTENT_CACHE.clear();
|
|
66
|
+
}
|
|
67
|
+
|
|
64
68
|
}
|
|
@@ -9,6 +9,7 @@ import { MinecraftTextureMeta } from "../MinecraftTextureMeta";
|
|
|
9
9
|
import { PersistentCache } from "../cache/PersistentCache";
|
|
10
10
|
import { keys } from "node-persist";
|
|
11
11
|
import { AssetKey } from "./AssetKey";
|
|
12
|
+
import { AssetParser } from "./source/parser/AssetParsers";
|
|
12
13
|
|
|
13
14
|
export class ModelTextures {
|
|
14
15
|
|
|
@@ -25,7 +26,7 @@ export class ModelTextures {
|
|
|
25
26
|
public static async preload(key: AssetKey): Promise<Maybe<TextureAsset>> {
|
|
26
27
|
const keyStr = key.serialize();
|
|
27
28
|
return Caching.textureAssetCache.get(keyStr, k => {
|
|
28
|
-
return AssetLoader.
|
|
29
|
+
return AssetLoader.get<TextureAsset>(key, AssetParser.IMAGE).then(asset => {
|
|
29
30
|
if (asset)
|
|
30
31
|
asset.key = key;
|
|
31
32
|
return asset;
|
|
@@ -42,7 +43,7 @@ export class ModelTextures {
|
|
|
42
43
|
|
|
43
44
|
return Caching.textureMetaCache.get(keyStr, k => {
|
|
44
45
|
return this.PERSISTENT_META_CACHE.getOrLoad(keyStr, k1 => {
|
|
45
|
-
return AssetLoader.
|
|
46
|
+
return AssetLoader.get<MinecraftTextureMeta>(key, AssetParser.META).then(asset => {
|
|
46
47
|
if (asset)
|
|
47
48
|
asset.key = key;
|
|
48
49
|
return asset;
|
package/src/assets/Models.ts
CHANGED
|
@@ -8,6 +8,8 @@ import { Memoize } from "typescript-memoize";
|
|
|
8
8
|
import { DEFAULT_NAMESPACE, DEFAULT_ROOT } from "./Assets";
|
|
9
9
|
import { PersistentCache } from "../cache/PersistentCache";
|
|
10
10
|
import { AssetKey } from "./AssetKey";
|
|
11
|
+
import { ListAsset } from "../ListAsset";
|
|
12
|
+
import { AssetParser } from "./source/parser/AssetParsers";
|
|
11
13
|
|
|
12
14
|
export class Models {
|
|
13
15
|
|
|
@@ -15,7 +17,7 @@ export class Models {
|
|
|
15
17
|
|
|
16
18
|
@Memoize()
|
|
17
19
|
public static async getItemList(): Promise<string[]> {
|
|
18
|
-
return AssetLoader.
|
|
20
|
+
return AssetLoader.get<ListAsset>(new AssetKey(
|
|
19
21
|
DEFAULT_NAMESPACE,
|
|
20
22
|
"_list",
|
|
21
23
|
"models",
|
|
@@ -23,7 +25,7 @@ export class Models {
|
|
|
23
25
|
"assets",
|
|
24
26
|
".json",
|
|
25
27
|
DEFAULT_ROOT
|
|
26
|
-
),
|
|
28
|
+
), AssetParser.LIST).then(r => r?.files ?? []);
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
public static async loadAndMerge(key: AssetKey): Promise<Maybe<Model>> {
|
|
@@ -44,9 +46,7 @@ export class Models {
|
|
|
44
46
|
const keyStr = key.serialize();
|
|
45
47
|
return Caching.rawModelCache.get(keyStr, k => {
|
|
46
48
|
return this.PERSISTENT_CACHE.getOrLoad(keyStr, k1 => {
|
|
47
|
-
return AssetLoader.
|
|
48
|
-
return asset;
|
|
49
|
-
})
|
|
49
|
+
return AssetLoader.get<Model>(key, AssetParser.MODEL);
|
|
50
50
|
})
|
|
51
51
|
}).then(asset => {
|
|
52
52
|
if (asset) {
|