pw-js-world 0.3.5 → 0.3.6-dev.522a1b7
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/esm/Block.js +10 -4
- package/package.json +1 -1
- package/cm/Block.d.ts +0 -115
- package/cm/Block.js +0 -171
- package/cm/Structure.d.ts +0 -104
- package/cm/Structure.js +0 -214
package/esm/Block.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import BufferReader from "./BufferReader.js";
|
|
1
|
+
import BufferReader, { ComponentTypeHeader } from "./BufferReader.js";
|
|
2
2
|
import { PWApiClient } from "pw-js-api";
|
|
3
3
|
import { MissingBlockError } from "./util/Error.js";
|
|
4
4
|
export default class Block {
|
|
@@ -150,7 +150,8 @@ export default class Block {
|
|
|
150
150
|
*/
|
|
151
151
|
static getArgTypesByBlockId(blockId) {
|
|
152
152
|
var _a, _b, _c;
|
|
153
|
-
|
|
153
|
+
const block = (_a = PWApiClient.listBlocks) === null || _a === void 0 ? void 0 : _a[blockId];
|
|
154
|
+
return block ? (_c = (_b = MissingBlockData[block === null || block === void 0 ? void 0 : block.PaletteId.toUpperCase()]) !== null && _b !== void 0 ? _b : (block.BlockDataArgs)) !== null && _c !== void 0 ? _c : [] : [];
|
|
154
155
|
}
|
|
155
156
|
/**
|
|
156
157
|
* Returns the arg types for that block by given palette ID (full upper case).
|
|
@@ -161,7 +162,12 @@ export default class Block {
|
|
|
161
162
|
*/
|
|
162
163
|
static getArgTypesByPaletteId(paletteId) {
|
|
163
164
|
var _a, _b, _c;
|
|
164
|
-
return (_c = (
|
|
165
|
+
return (_c = (_a = MissingBlockData[paletteId]) !== null && _a !== void 0 ? _a : ((_b = PWApiClient.listBlocksObj) === null || _b === void 0 ? void 0 : _b[paletteId].BlockDataArgs)) !== null && _c !== void 0 ? _c : [];
|
|
165
166
|
}
|
|
166
167
|
}
|
|
167
|
-
|
|
168
|
+
// Temporary fix as some blocks currently have incorrect args
|
|
169
|
+
const MissingBlockData = {
|
|
170
|
+
SWITCH_LOCAL_ACTIVATOR: [ComponentTypeHeader.Int32, ComponentTypeHeader.Byte],
|
|
171
|
+
SWITCH_GLOBAL_ACTIVATOR: [ComponentTypeHeader.Int32, ComponentTypeHeader.Byte],
|
|
172
|
+
};
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvQmxvY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxZQUFZLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxXQUFXLEVBQWtCLE1BQU0sV0FBVyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBELE1BQU0sQ0FBQyxPQUFPLE9BQU8sS0FBSztJQUl0QixZQUFZLEdBQWdDLEVBQUUsSUFBaUI7UUFGL0QsU0FBSSxHQUFlLEVBQUUsQ0FBQztRQUdsQixJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7WUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQzthQUN2QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxJQUFJLElBQUk7WUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU87UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFvQjtRQUNuQyxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRVMsZUFBZSxDQUFDLE1BQW9CLEVBQUUsSUFBSSxHQUFHLEtBQUs7O1FBQ3hELE1BQU0sTUFBTSxHQUEwQixLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUEsd0NBQXdDO1FBRW5ILEtBQUssSUFBSSxDQUFD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
|
package/package.json
CHANGED
package/cm/Block.d.ts
DELETED
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import type { BlockArg, Point, SendableBlockPacket } from "./types/index.js";
|
|
2
|
-
import BufferReader, { ComponentTypeHeader } from "./BufferReader.js";
|
|
3
|
-
import { LayerType } from "./Constants.js";
|
|
4
|
-
import { type BlockKeys } from "pw-js-api";
|
|
5
|
-
export default class Block {
|
|
6
|
-
bId: number;
|
|
7
|
-
args: BlockArg[];
|
|
8
|
-
constructor(bId: number | BlockKeys | string, args?: BlockArg[]);
|
|
9
|
-
/**
|
|
10
|
-
* I mean... Just use .args.length !== 0 to see if it has args.
|
|
11
|
-
*
|
|
12
|
-
* But anyway, this will return true if there is at least one args, otherwise false.
|
|
13
|
-
*/
|
|
14
|
-
hasArgs(): boolean;
|
|
15
|
-
/**
|
|
16
|
-
* For helper.
|
|
17
|
-
*
|
|
18
|
-
* This is in Block class for organisation.
|
|
19
|
-
*
|
|
20
|
-
* This will deserialise by using the reader to get the block ID then retrieve the args, if applicable.
|
|
21
|
-
*/
|
|
22
|
-
static deserialize(reader: BufferReader): Block;
|
|
23
|
-
protected deserializeArgs(reader: BufferReader, flag?: boolean): this;
|
|
24
|
-
/**
|
|
25
|
-
* For helper.
|
|
26
|
-
*
|
|
27
|
-
* This is in Block class for organisation.
|
|
28
|
-
*/
|
|
29
|
-
static deserializeArgs(reader: BufferReader): BlockArg[];
|
|
30
|
-
/**
|
|
31
|
-
* Serializes the block into a buffer. This is used to convert
|
|
32
|
-
* the block into a binary format that can be sent over the game
|
|
33
|
-
* server. As this is static, block id and args are required.
|
|
34
|
-
*
|
|
35
|
-
* - Little Endian
|
|
36
|
-
* - With Id
|
|
37
|
-
* - Type Byte omitted
|
|
38
|
-
*/
|
|
39
|
-
static serializeArgs(bId: number, args: BlockArg[]): Buffer;
|
|
40
|
-
/**
|
|
41
|
-
* Serializes the block into a buffer. This is used to convert
|
|
42
|
-
* the block into a binary format that can be sent over the game
|
|
43
|
-
* server. As this is static, block id and args are required.
|
|
44
|
-
*
|
|
45
|
-
* - Big Endian
|
|
46
|
-
* - No Id
|
|
47
|
-
* - Type Byte included
|
|
48
|
-
*/
|
|
49
|
-
static serializeArgs(bId: number, args: BlockArg[], options: {
|
|
50
|
-
endian: "big";
|
|
51
|
-
writeId: false;
|
|
52
|
-
readTypeByte: true;
|
|
53
|
-
}): Buffer;
|
|
54
|
-
static serializeArgs(bId: number, args: BlockArg[], options: {
|
|
55
|
-
endian: "little";
|
|
56
|
-
writeId: false;
|
|
57
|
-
readTypeByte: true;
|
|
58
|
-
}): Buffer;
|
|
59
|
-
/**
|
|
60
|
-
*
|
|
61
|
-
* @param pos List of points (X and Y)
|
|
62
|
-
*/
|
|
63
|
-
toPacket(pos: Point[], layer: LayerType): SendableBlockPacket;
|
|
64
|
-
toPacket(x: number, y: number, layer: LayerType): SendableBlockPacket;
|
|
65
|
-
/**
|
|
66
|
-
* This will return the block name in UPPER_CASE form.
|
|
67
|
-
*
|
|
68
|
-
* For eg EFFECTS_INVULNERABILITY.
|
|
69
|
-
*
|
|
70
|
-
* @throws {MissingBlockError}
|
|
71
|
-
* If the ID of this block is not known.
|
|
72
|
-
*/
|
|
73
|
-
get name(): string;
|
|
74
|
-
/**
|
|
75
|
-
* Returns a copy of the block.
|
|
76
|
-
*/
|
|
77
|
-
clone(obj?: false): Block;
|
|
78
|
-
clone(obj: true): {
|
|
79
|
-
bId: number;
|
|
80
|
-
args: BlockArg[];
|
|
81
|
-
name: string;
|
|
82
|
-
};
|
|
83
|
-
/**
|
|
84
|
-
* This can be convenient as it will always return the ID if it exists, and it will throw an error if it doesn't.
|
|
85
|
-
*
|
|
86
|
-
* This expects the name sent to be in full upper capital form though.
|
|
87
|
-
*
|
|
88
|
-
* @throws {MissingBlockError}
|
|
89
|
-
* If the connection is unknown, this can be because you're trying to use this function when Api#getListBlocks has never been invoked, or the object is missing.
|
|
90
|
-
*/
|
|
91
|
-
static getIdByName(paletteId: string): number;
|
|
92
|
-
/**
|
|
93
|
-
* This will return the corresponding palette id by the ID of that block.
|
|
94
|
-
*
|
|
95
|
-
* The name sent will be in full upper capital if it exists.
|
|
96
|
-
*
|
|
97
|
-
* @throws {MissingBlockError}
|
|
98
|
-
* If the connection is unknown, this can be because you're trying to use this function when Api#getListBlocks has never been invoked, or the object is missing.
|
|
99
|
-
*/
|
|
100
|
-
static getPaletteIdById(blockId: number): string;
|
|
101
|
-
/**
|
|
102
|
-
* Returns the arg types for that block by given block ID.
|
|
103
|
-
*
|
|
104
|
-
* If a block don't have args, it will return an empty array.
|
|
105
|
-
*/
|
|
106
|
-
static getArgTypesByBlockId(blockId: number): ComponentTypeHeader[];
|
|
107
|
-
/**
|
|
108
|
-
* Returns the arg types for that block by given palette ID (full upper case).
|
|
109
|
-
*
|
|
110
|
-
* For eg "EMPTY" or "SIGN_GOLD"
|
|
111
|
-
*
|
|
112
|
-
* If a block don't have args, it will return an empty array.
|
|
113
|
-
*/
|
|
114
|
-
static getArgTypesByPaletteId(paletteId: string): ComponentTypeHeader[];
|
|
115
|
-
}
|
package/cm/Block.js
DELETED
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
const BufferReader_js_1 = tslib_1.__importDefault(require("./BufferReader.js"));
|
|
5
|
-
const pw_js_api_1 = require("pw-js-api");
|
|
6
|
-
const Error_js_1 = require("./util/Error.js");
|
|
7
|
-
class Block {
|
|
8
|
-
constructor(bId, args) {
|
|
9
|
-
this.args = [];
|
|
10
|
-
if (typeof bId === "number")
|
|
11
|
-
this.bId = bId;
|
|
12
|
-
else {
|
|
13
|
-
this.bId = Block.getIdByName(bId);
|
|
14
|
-
}
|
|
15
|
-
if (args)
|
|
16
|
-
this.args = args;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* I mean... Just use .args.length !== 0 to see if it has args.
|
|
20
|
-
*
|
|
21
|
-
* But anyway, this will return true if there is at least one args, otherwise false.
|
|
22
|
-
*/
|
|
23
|
-
hasArgs() {
|
|
24
|
-
return this.args.length !== 0;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* For helper.
|
|
28
|
-
*
|
|
29
|
-
* This is in Block class for organisation.
|
|
30
|
-
*
|
|
31
|
-
* This will deserialise by using the reader to get the block ID then retrieve the args, if applicable.
|
|
32
|
-
*/
|
|
33
|
-
static deserialize(reader) {
|
|
34
|
-
return new Block(reader.readUInt32LE()).deserializeArgs(reader);
|
|
35
|
-
}
|
|
36
|
-
deserializeArgs(reader, flag = false) {
|
|
37
|
-
var _a;
|
|
38
|
-
const format = Block.getArgTypesByBlockId(this.bId); //(BlockArgsHeadings as any)[this.name];
|
|
39
|
-
for (let i = 0; i < ((_a = format === null || format === void 0 ? void 0 : format.length) !== null && _a !== void 0 ? _a : 0); i++) {
|
|
40
|
-
if (flag) {
|
|
41
|
-
reader.expectUInt8(format[i]);
|
|
42
|
-
}
|
|
43
|
-
this.args[i] = reader.read(format[i], !flag);
|
|
44
|
-
}
|
|
45
|
-
return this;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* For helper.
|
|
49
|
-
*
|
|
50
|
-
* This is in Block class for organisation.
|
|
51
|
-
*/
|
|
52
|
-
static deserializeArgs(reader) {
|
|
53
|
-
// const args =
|
|
54
|
-
return reader.deserialize();
|
|
55
|
-
// for (let i = 0; i < (format?.length ?? 0); i++) {
|
|
56
|
-
// if (flag) {
|
|
57
|
-
// reader.expectUInt8(format[i]);
|
|
58
|
-
// }
|
|
59
|
-
// args[i] = reader.read(format[i], !flag);
|
|
60
|
-
// }
|
|
61
|
-
// return args;
|
|
62
|
-
}
|
|
63
|
-
static serializeArgs(bId, args, options) {
|
|
64
|
-
options || (options = {
|
|
65
|
-
endian: "little",
|
|
66
|
-
writeId: true,
|
|
67
|
-
readTypeByte: false,
|
|
68
|
-
});
|
|
69
|
-
const buffer = [];
|
|
70
|
-
if (options.writeId) {
|
|
71
|
-
const idBuffer = Buffer.alloc(4);
|
|
72
|
-
idBuffer.writeUInt32LE(bId);
|
|
73
|
-
buffer.push(idBuffer);
|
|
74
|
-
}
|
|
75
|
-
const blockData = Block.getArgTypesByBlockId(bId);
|
|
76
|
-
for (let i = 0, len = blockData.length; i < len; i++) {
|
|
77
|
-
const entry = BufferReader_js_1.default.Dynamic(blockData[i], args[i]);
|
|
78
|
-
buffer.push(entry);
|
|
79
|
-
}
|
|
80
|
-
return Buffer.concat(buffer);
|
|
81
|
-
}
|
|
82
|
-
toPacket(pos, y, layer) {
|
|
83
|
-
if (typeof pos === "number") {
|
|
84
|
-
pos = [{
|
|
85
|
-
x: pos, y
|
|
86
|
-
}];
|
|
87
|
-
layer = layer !== null && layer !== void 0 ? layer : 0;
|
|
88
|
-
}
|
|
89
|
-
else
|
|
90
|
-
layer = y !== null && y !== void 0 ? y : 0;
|
|
91
|
-
return {
|
|
92
|
-
isFillOperation: false,
|
|
93
|
-
blockId: this.bId,
|
|
94
|
-
layer,
|
|
95
|
-
positions: pos,
|
|
96
|
-
extraFields: Block.serializeArgs(this.bId, this.args, { endian: "big", writeId: false, readTypeByte: true })
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* This will return the block name in UPPER_CASE form.
|
|
101
|
-
*
|
|
102
|
-
* For eg EFFECTS_INVULNERABILITY.
|
|
103
|
-
*
|
|
104
|
-
* @throws {MissingBlockError}
|
|
105
|
-
* If the ID of this block is not known.
|
|
106
|
-
*/
|
|
107
|
-
get name() {
|
|
108
|
-
var _a;
|
|
109
|
-
const block = (_a = pw_js_api_1.PWApiClient.listBlocks) === null || _a === void 0 ? void 0 : _a[this.bId];
|
|
110
|
-
if (block === undefined)
|
|
111
|
-
throw new Error_js_1.MissingBlockError("Current block data is missing, run Api#listBlocks first?", this.bId);
|
|
112
|
-
return block.PaletteId.toUpperCase();
|
|
113
|
-
}
|
|
114
|
-
clone(obj = false) {
|
|
115
|
-
if (obj === true)
|
|
116
|
-
return { bId: this.bId, args: this.args, name: this.name };
|
|
117
|
-
return new Block(this.bId, this.args);
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* This can be convenient as it will always return the ID if it exists, and it will throw an error if it doesn't.
|
|
121
|
-
*
|
|
122
|
-
* This expects the name sent to be in full upper capital form though.
|
|
123
|
-
*
|
|
124
|
-
* @throws {MissingBlockError}
|
|
125
|
-
* If the connection is unknown, this can be because you're trying to use this function when Api#getListBlocks has never been invoked, or the object is missing.
|
|
126
|
-
*/
|
|
127
|
-
static getIdByName(paletteId) {
|
|
128
|
-
var _a;
|
|
129
|
-
const block = (_a = pw_js_api_1.PWApiClient.listBlocksObj) === null || _a === void 0 ? void 0 : _a[paletteId];
|
|
130
|
-
if (block === undefined)
|
|
131
|
-
throw new Error_js_1.MissingBlockError("Current block data is missing, run Api#listBlocks first?", paletteId);
|
|
132
|
-
return block.Id;
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* This will return the corresponding palette id by the ID of that block.
|
|
136
|
-
*
|
|
137
|
-
* The name sent will be in full upper capital if it exists.
|
|
138
|
-
*
|
|
139
|
-
* @throws {MissingBlockError}
|
|
140
|
-
* If the connection is unknown, this can be because you're trying to use this function when Api#getListBlocks has never been invoked, or the object is missing.
|
|
141
|
-
*/
|
|
142
|
-
static getPaletteIdById(blockId) {
|
|
143
|
-
var _a;
|
|
144
|
-
const block = (_a = pw_js_api_1.PWApiClient.listBlocks) === null || _a === void 0 ? void 0 : _a[blockId];
|
|
145
|
-
if (block === undefined)
|
|
146
|
-
throw new Error_js_1.MissingBlockError("Current block data is missing, run Api#listBlocks first?", blockId);
|
|
147
|
-
return block.PaletteId.toUpperCase();
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Returns the arg types for that block by given block ID.
|
|
151
|
-
*
|
|
152
|
-
* If a block don't have args, it will return an empty array.
|
|
153
|
-
*/
|
|
154
|
-
static getArgTypesByBlockId(blockId) {
|
|
155
|
-
var _a, _b, _c;
|
|
156
|
-
return (_c = ((_b = (_a = pw_js_api_1.PWApiClient.listBlocks) === null || _a === void 0 ? void 0 : _a[blockId]) === null || _b === void 0 ? void 0 : _b.BlockDataArgs)) !== null && _c !== void 0 ? _c : [];
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Returns the arg types for that block by given palette ID (full upper case).
|
|
160
|
-
*
|
|
161
|
-
* For eg "EMPTY" or "SIGN_GOLD"
|
|
162
|
-
*
|
|
163
|
-
* If a block don't have args, it will return an empty array.
|
|
164
|
-
*/
|
|
165
|
-
static getArgTypesByPaletteId(paletteId) {
|
|
166
|
-
var _a, _b, _c;
|
|
167
|
-
return (_c = ((_b = (_a = pw_js_api_1.PWApiClient.listBlocksObj) === null || _a === void 0 ? void 0 : _a[paletteId]) === null || _b === void 0 ? void 0 : _b.BlockDataArgs)) !== null && _c !== void 0 ? _c : [];
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
exports.default = Block;
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvQmxvY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsZ0ZBQXNFO0FBRXRFLHlDQUF3RDtBQUN4RCw4Q0FBb0Q7QUFFcEQsTUFBcUIsS0FBSztJQUl0QixZQUFZLEdBQWdDLEVBQUUsSUFBaUI7UUFGL0QsU0FBSSxHQUFlLEVBQUUsQ0FBQztRQUdsQixJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7WUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQzthQUN2QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxJQUFJLElBQUk7WUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU87UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFvQjtRQUNuQyxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRVMsZUFBZSxDQUFDLE1BQW9CLEVBQUUsSUFBSSxHQUFHLEtBQUs7O1FBQ3hELE1BQU0sTUFBTSxHQUEwQixLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUEsd0NBQXdDO1FBRW5ILEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sbUNBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZ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
|
package/cm/Structure.d.ts
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import Block from "./Block";
|
|
2
|
-
import type { BlockArg } from "./types";
|
|
3
|
-
/**
|
|
4
|
-
* This is external to the main Helper, it will allow developers to use the structure without needing to use helper if they so wish.
|
|
5
|
-
*
|
|
6
|
-
* All of the functions are static!
|
|
7
|
-
*/
|
|
8
|
-
export default class StructureHelper {
|
|
9
|
-
/**
|
|
10
|
-
* NOTE: If you're reading a file, you must get it then pass it to read.
|
|
11
|
-
*
|
|
12
|
-
* This is for reading the structure itself, if you have just the blocks (and width/height), you must use deserialiseStructBlocks;
|
|
13
|
-
*
|
|
14
|
-
* @param data Buffer representing the JSON structure itself.
|
|
15
|
-
*/
|
|
16
|
-
static read(data: Buffer | Uint8Array | IStructure): DeserialisedStructure;
|
|
17
|
-
/**
|
|
18
|
-
* If width or height are not provided, the structure may be trimmed (empty blocks).
|
|
19
|
-
*
|
|
20
|
-
* This is ideal if you want the trimmed structure in that case.
|
|
21
|
-
*/
|
|
22
|
-
static deserialiseStructBlocks(struct: IStructureBlocks, width?: number, height?: number): {
|
|
23
|
-
blocks: [Block[][], Block[][]];
|
|
24
|
-
width: number;
|
|
25
|
-
height: number;
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Represents the structure in its deserialised form, allows for modification
|
|
30
|
-
*/
|
|
31
|
-
export declare class DeserialisedStructure {
|
|
32
|
-
blocks: [Block[][], Block[][]];
|
|
33
|
-
width: number;
|
|
34
|
-
height: number;
|
|
35
|
-
constructor(blocks: [Block[][], Block[][]], struct: Omit<IStructure, "version" | "blocks">);
|
|
36
|
-
/**
|
|
37
|
-
* This will return a new object that meets IStructureBlocks interface.
|
|
38
|
-
*/
|
|
39
|
-
getSerialisedBlocks(): IStructureBlocks;
|
|
40
|
-
/**
|
|
41
|
-
* This will return the structure form, giving you the freedom to choose your own way of saving.
|
|
42
|
-
*/
|
|
43
|
-
toStruct(): IStructure;
|
|
44
|
-
/**
|
|
45
|
-
* Buffer form of the structure.
|
|
46
|
-
*
|
|
47
|
-
* Ideal for server runtimes (and browser if polyfilled)
|
|
48
|
-
*/
|
|
49
|
-
toBuffer(): Buffer<ArrayBuffer>;
|
|
50
|
-
/**
|
|
51
|
-
* The JSON stringified of the structure.
|
|
52
|
-
*/
|
|
53
|
-
toJSONString(space?: number): string;
|
|
54
|
-
/**
|
|
55
|
-
* (This is for browser client or Bun)
|
|
56
|
-
*
|
|
57
|
-
* Blob form of the structure.
|
|
58
|
-
*/
|
|
59
|
-
toBlob(): Blob;
|
|
60
|
-
/**
|
|
61
|
-
* Uint8Array form of the structure.
|
|
62
|
-
*/
|
|
63
|
-
toBytes(): Uint8Array<ArrayBufferLike>;
|
|
64
|
-
/**
|
|
65
|
-
* This will return a list of packets containing all of the blocks.
|
|
66
|
-
*/
|
|
67
|
-
toPackets(x: number, y: number): import("./types").SendableBlockPacket[];
|
|
68
|
-
}
|
|
69
|
-
export interface IStructure {
|
|
70
|
-
/**
|
|
71
|
-
* Version of the structure object, not the world.
|
|
72
|
-
*/
|
|
73
|
-
version: number;
|
|
74
|
-
/**
|
|
75
|
-
* The maximum width of the structure.
|
|
76
|
-
*/
|
|
77
|
-
width: number;
|
|
78
|
-
/**
|
|
79
|
-
* The maximum height of the structure.
|
|
80
|
-
*/
|
|
81
|
-
height: number;
|
|
82
|
-
/**
|
|
83
|
-
* Object containing the mappings and the blocks.
|
|
84
|
-
*/
|
|
85
|
-
blocks: IStructureBlocks;
|
|
86
|
-
}
|
|
87
|
-
export interface IStructureBlocks {
|
|
88
|
-
/**
|
|
89
|
-
* Index starts at 0, this is the mapping of blocks (in block name ids in UPPER_CASE)
|
|
90
|
-
*/
|
|
91
|
-
mapping: string[];
|
|
92
|
-
/**
|
|
93
|
-
* Index starts at 0, this is the mapping of args (2nd elements and beyond in each block pos in blocks)
|
|
94
|
-
*/
|
|
95
|
-
args: BlockArg[];
|
|
96
|
-
/**
|
|
97
|
-
* If array, it's index corresponds to the mapping, the element will be array of locations and args indexed by layers (while impossible, it's for possible compatibility with mirrored blocks, foreground block in background layer etc)
|
|
98
|
-
*
|
|
99
|
-
* If argMapping exists in a block, it'll be an index that corresponds to the block's arguments in args array.
|
|
100
|
-
*
|
|
101
|
-
* If string, it's the encoded version of the object, use atob then JSON parse.
|
|
102
|
-
*/
|
|
103
|
-
blocks: [[x: number, y: number, ...argMapping: number[]][], [x: number, y: number, ...argMapping: number[]][]][];
|
|
104
|
-
}
|
package/cm/Structure.js
DELETED
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DeserialisedStructure = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const Block_1 = tslib_1.__importDefault(require("./Block"));
|
|
6
|
-
const Misc_1 = require("./util/Misc");
|
|
7
|
-
/**
|
|
8
|
-
* This is external to the main Helper, it will allow developers to use the structure without needing to use helper if they so wish.
|
|
9
|
-
*
|
|
10
|
-
* All of the functions are static!
|
|
11
|
-
*/
|
|
12
|
-
class StructureHelper {
|
|
13
|
-
/**
|
|
14
|
-
* NOTE: If you're reading a file, you must get it then pass it to read.
|
|
15
|
-
*
|
|
16
|
-
* This is for reading the structure itself, if you have just the blocks (and width/height), you must use deserialiseStructBlocks;
|
|
17
|
-
*
|
|
18
|
-
* @param data Buffer representing the JSON structure itself.
|
|
19
|
-
*/
|
|
20
|
-
static read(data) {
|
|
21
|
-
if (data instanceof Uint8Array) {
|
|
22
|
-
const decoder = new TextDecoder();
|
|
23
|
-
data = JSON.parse(decoder.decode(data));
|
|
24
|
-
}
|
|
25
|
-
const json = "version" in data ? data : JSON.parse(data.toString());
|
|
26
|
-
if (json.version === undefined || json.version < 1 || json.version > 1)
|
|
27
|
-
throw Error("Unknown file format");
|
|
28
|
-
const desed = this.deserialiseStructBlocks(json.blocks, json.width, json.height);
|
|
29
|
-
return new DeserialisedStructure(desed.blocks, { width: desed.width, height: desed.height });
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* If width or height are not provided, the structure may be trimmed (empty blocks).
|
|
33
|
-
*
|
|
34
|
-
* This is ideal if you want the trimmed structure in that case.
|
|
35
|
-
*/
|
|
36
|
-
static deserialiseStructBlocks(struct, width, height) {
|
|
37
|
-
var _a, _b, _c, _d;
|
|
38
|
-
var _e, _f, _g, _h;
|
|
39
|
-
const { args, blocks, mapping } = struct;
|
|
40
|
-
const deBlocks = [[], []];
|
|
41
|
-
let isMissing = width === undefined || height === undefined;
|
|
42
|
-
if (width !== undefined && height !== undefined) {
|
|
43
|
-
for (let x = 0; x < width; x++) {
|
|
44
|
-
deBlocks[0][x] = [];
|
|
45
|
-
deBlocks[1][x] = [];
|
|
46
|
-
for (let y = 0; y < height; y++) {
|
|
47
|
-
deBlocks[0][x][y] = new Block_1.default(0);
|
|
48
|
-
deBlocks[1][x][y] = new Block_1.default(0);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
let big = { x: 0, y: 0 };
|
|
53
|
-
for (let i = 0, ien = blocks.length; i < ien; i++) {
|
|
54
|
-
// While foreground and background layers are only supported for now, it's possible there are more layers in the future.
|
|
55
|
-
for (let l = 0, len = blocks[i].length; l < len; l++) {
|
|
56
|
-
for (let b = 0, ben = blocks[i][l].length; b < ben; b++) {
|
|
57
|
-
const block = blocks[i][l][b];
|
|
58
|
-
// It's a bit spammy and a lot of checks so this will only trigger if width/height are missing
|
|
59
|
-
// This is also to prevent errors, the missing elements will then be filled at the end.
|
|
60
|
-
if (isMissing) {
|
|
61
|
-
if (deBlocks[l] === undefined)
|
|
62
|
-
deBlocks[l] = [];
|
|
63
|
-
if (deBlocks[l][block[0]] === undefined)
|
|
64
|
-
deBlocks[l][block[0]] = [];
|
|
65
|
-
if (block[0] > big.x)
|
|
66
|
-
big.x = block[0];
|
|
67
|
-
if (block[1] > big.y)
|
|
68
|
-
big.y = block[1];
|
|
69
|
-
}
|
|
70
|
-
const deBlock = deBlocks[l][block[0]][block[1]] = new Block_1.default(mapping[i]);
|
|
71
|
-
for (let a = 2, alen = block.length; a < alen; a++) {
|
|
72
|
-
let arg = args[block[a]];
|
|
73
|
-
if (typeof arg === "string" && arg.startsWith("\x00"))
|
|
74
|
-
arg = Buffer.from(arg.slice(1));
|
|
75
|
-
deBlock.args[a - 2] = arg;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
if (width === undefined || height === undefined) {
|
|
81
|
-
for (let x = 0; x < big.x; x++) {
|
|
82
|
-
(_a = (_e = deBlocks[0])[x]) !== null && _a !== void 0 ? _a : (_e[x] = []);
|
|
83
|
-
(_b = (_f = deBlocks[1])[x]) !== null && _b !== void 0 ? _b : (_f[x] = []);
|
|
84
|
-
for (let y = 0; y < big.y; y++) {
|
|
85
|
-
(_c = (_g = deBlocks[0][x])[y]) !== null && _c !== void 0 ? _c : (_g[y] = new Block_1.default(0));
|
|
86
|
-
(_d = (_h = deBlocks[1][x])[y]) !== null && _d !== void 0 ? _d : (_h[y] = new Block_1.default(0));
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return {
|
|
90
|
-
blocks: deBlocks,
|
|
91
|
-
width: big.x, height: big.y
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
return {
|
|
95
|
-
blocks: deBlocks,
|
|
96
|
-
width, height
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
exports.default = StructureHelper;
|
|
101
|
-
/**
|
|
102
|
-
* Represents the structure in its deserialised form, allows for modification
|
|
103
|
-
*/
|
|
104
|
-
class DeserialisedStructure {
|
|
105
|
-
constructor(blocks, struct) {
|
|
106
|
-
this.blocks = blocks;
|
|
107
|
-
this.width = struct.width;
|
|
108
|
-
this.height = struct.height;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* This will return a new object that meets IStructureBlocks interface.
|
|
112
|
-
*/
|
|
113
|
-
getSerialisedBlocks() {
|
|
114
|
-
const blocks = [];
|
|
115
|
-
const args = [];
|
|
116
|
-
const mapping = [];
|
|
117
|
-
// corresponds to the index in mapping array.
|
|
118
|
-
const mappingDone = {};
|
|
119
|
-
const argDone = new Map();
|
|
120
|
-
for (let l = 0; l < this.blocks.length; l++) {
|
|
121
|
-
for (let x = 0; x < this.width; x++) {
|
|
122
|
-
for (let y = 0; y < this.height; y++) {
|
|
123
|
-
const block = this.blocks[l][x][y];
|
|
124
|
-
const blockName = block.name;
|
|
125
|
-
if (block.bId === 0)
|
|
126
|
-
continue;
|
|
127
|
-
if (mappingDone[block.bId] === undefined) {
|
|
128
|
-
mappingDone[block.bId] = mapping.push(blockName) - 1;
|
|
129
|
-
blocks[mappingDone[block.bId]] = [[], []];
|
|
130
|
-
}
|
|
131
|
-
const index = mappingDone[block.bId];
|
|
132
|
-
if (blocks[index][l] === undefined)
|
|
133
|
-
blocks[index][l] = [];
|
|
134
|
-
const toPut = [x, y];
|
|
135
|
-
for (let a = 0, argsLen = block.args.length; a < argsLen; a++) {
|
|
136
|
-
const arg = Buffer.isBuffer(block.args[a]) ? "\x00" + block.args[a].toString() : block.args[a];
|
|
137
|
-
let argIndex = argDone.get(arg);
|
|
138
|
-
if (argIndex === undefined) {
|
|
139
|
-
argDone.set(arg, args.push(arg) - 1);
|
|
140
|
-
argIndex = argDone.get(arg);
|
|
141
|
-
}
|
|
142
|
-
if (argIndex === undefined)
|
|
143
|
-
throw Error("This should be impossible at this point.");
|
|
144
|
-
toPut[2 + a] = argIndex;
|
|
145
|
-
}
|
|
146
|
-
blocks[index][l].push(toPut);
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return {
|
|
151
|
-
mapping,
|
|
152
|
-
args,
|
|
153
|
-
blocks
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* This will return the structure form, giving you the freedom to choose your own way of saving.
|
|
158
|
-
*/
|
|
159
|
-
toStruct() {
|
|
160
|
-
const struct = this.getSerialisedBlocks();
|
|
161
|
-
return {
|
|
162
|
-
width: this.width,
|
|
163
|
-
height: this.height,
|
|
164
|
-
version: 1,
|
|
165
|
-
blocks: struct
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Buffer form of the structure.
|
|
170
|
-
*
|
|
171
|
-
* Ideal for server runtimes (and browser if polyfilled)
|
|
172
|
-
*/
|
|
173
|
-
toBuffer() {
|
|
174
|
-
return Buffer.from(this.toJSONString());
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* The JSON stringified of the structure.
|
|
178
|
-
*/
|
|
179
|
-
toJSONString(space) {
|
|
180
|
-
return JSON.stringify(this.toStruct(), undefined, space);
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* (This is for browser client or Bun)
|
|
184
|
-
*
|
|
185
|
-
* Blob form of the structure.
|
|
186
|
-
*/
|
|
187
|
-
toBlob() {
|
|
188
|
-
return new Blob([this.toJSONString()]);
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Uint8Array form of the structure.
|
|
192
|
-
*/
|
|
193
|
-
toBytes() {
|
|
194
|
-
const encoder = new TextEncoder();
|
|
195
|
-
const bytes = encoder.encode(this.toJSONString());
|
|
196
|
-
return bytes;
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* This will return a list of packets containing all of the blocks.
|
|
200
|
-
*/
|
|
201
|
-
toPackets(x, y) {
|
|
202
|
-
const blockies = [];
|
|
203
|
-
for (let l = 0; l < this.blocks.length; l++) {
|
|
204
|
-
for (let x2 = 0; x2 < this.width; x2++) {
|
|
205
|
-
for (let y2 = 0; y2 < this.height; y2++) {
|
|
206
|
-
blockies.push({ block: this.blocks[l][x2][y2], layer: l, pos: { x: x + x2, y: y + y2 } });
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
return (0, Misc_1.createBlockPackets)(blockies);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
exports.DeserialisedStructure = DeserialisedStructure;
|
|
214
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL1N0cnVjdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsNERBQTRCO0FBRzVCLHNDQUFpRDtBQUVqRDs7OztHQUlHO0FBQ0gsTUFBcUIsZUFBZTtJQUNoQzs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQXNDO1FBQzlDLElBQUksSUFBSSxZQUFZLFVBQVUsRUFBRSxDQUFDO1lBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7WUFDbEMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFlLENBQUM7UUFFbEYsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUM7WUFBRSxNQUFNLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRTNHLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpGLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFD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QUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ25DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ25DLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7b0JBRTdCLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO3dCQUFFLFNBQVM7b0JBRTlCLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDdkMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDckQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDOUMsQ0FBQztvQkFFRCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUVyQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTO3dCQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBRTFELE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBa0MsQ0FBQztvQkFFdEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFH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
|