pw-js-world 0.4.4-dev.d5503ce → 0.4.4

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/cm/util/Misc.js CHANGED
@@ -1,13 +1,69 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compareObjs = compareObjs;
3
4
  exports.uint8ArrayEquals = uint8ArrayEquals;
4
5
  exports.map = map;
5
6
  exports.find = find;
6
7
  exports.findIndex = findIndex;
7
8
  exports.createBlockPacket = createBlockPacket;
8
9
  exports.createBlockPackets = createBlockPackets;
10
+ exports.read7BitEncodedInt = read7BitEncodedInt;
11
+ exports.listedFieldTypeToGameType = listedFieldTypeToGameType;
9
12
  const tslib_1 = require("tslib");
13
+ const Constants_js_1 = require("../Constants.js");
10
14
  const Block_js_1 = tslib_1.__importDefault(require("../Block.js"));
15
+ // const aaa = {
16
+ // hi: 0
17
+ // };
18
+ // // setInterval(() => {
19
+ // // console.log(aaa.hi);
20
+ // // }, 1);
21
+ /**
22
+ * True if objA matches the contents to that of objB
23
+ *
24
+ * TODO: proper array support?
25
+ */
26
+ function compareObjs(objA, objB) {
27
+ const keysA = Object.keys(objA);
28
+ const keysB = Object.keys(objB);
29
+ // console.log(objA, objB);
30
+ if (keysA.length !== keysB.length)
31
+ return false;
32
+ for (let i = 0; i < keysA.length; i++) {
33
+ const valA = objA[keysA[i]];
34
+ const valB = objB[keysA[i]];
35
+ if (typeof valA !== typeof valB)
36
+ return false;
37
+ // in case they're both undefined...?
38
+ if (valA === valB)
39
+ continue;
40
+ if (valB === undefined)
41
+ return false;
42
+ if (typeof valA === "object" && typeof valB === "object") {
43
+ const isArray = [Array.isArray(valA), Array.isArray(valB)];
44
+ if (isArray[0] && !isArray[1])
45
+ return false;
46
+ if (!isArray[0] && isArray[1])
47
+ return false;
48
+ // TODO: proper array support?
49
+ if (isArray[0] && isArray[1]) {
50
+ if (valA.length !== valB.length)
51
+ return false;
52
+ for (let j = 0; j < valA.length; j++) {
53
+ if (valA[j] !== valB[j])
54
+ return false;
55
+ }
56
+ }
57
+ else {
58
+ if (!compareObjs(valA, valB))
59
+ return false;
60
+ }
61
+ }
62
+ else if (valA !== valB)
63
+ return false;
64
+ }
65
+ return true;
66
+ }
11
67
  function uint8ArrayEquals(a, b) {
12
68
  if (a === b) {
13
69
  return true;
@@ -50,7 +106,7 @@ function findIndex(arr, pred) {
50
106
  }
51
107
  return -1;
52
108
  }
53
- function createBlockPacket(blockId, layer, pos, ...args) {
109
+ function createBlockPacket(blockId, layer, pos, args) {
54
110
  if (blockId instanceof Block_js_1.default) {
55
111
  args = blockId.args;
56
112
  blockId = blockId.bId;
@@ -69,7 +125,8 @@ function createBlockPacket(blockId, layer, pos, ...args) {
69
125
  blockId,
70
126
  layer,
71
127
  positions: pos,
72
- extraFields: Block_js_1.default.serializeArgs(blockId, args, { endian: "big", writeId: false, readTypeByte: true })
128
+ fields: Block_js_1.default.getArgsAsFields(blockId, args)
129
+ // extraFields: Block.serializeArgs(blockId, args, { endian: "big", writeId: false, readTypeByte: true })
73
130
  };
74
131
  }
75
132
  /**
@@ -78,18 +135,27 @@ function createBlockPacket(blockId, layer, pos, ...args) {
78
135
  */
79
136
  function createBlockPackets(blocks) {
80
137
  // Exact max packet position size is unknown, but it was noticed, it works correctly with this size
81
- const MAX_WORLD_BLOCK_PLACED_PACKET_POSITION_SIZE = 200;
82
138
  const list = [];
83
139
  for (let i = 0, len = blocks.length; i < len; i++) {
84
140
  const block = blocks[i];
85
141
  const packet = createBlockPacket(block.block, block.layer, block.pos);
86
- const existingPacket = find(list, pack => pack.blockId === block.block.bId &&
87
- pack.layer === block.layer &&
88
- pack.positions.length < MAX_WORLD_BLOCK_PLACED_PACKET_POSITION_SIZE &&
89
- uint8ArrayEquals(pack.extraFields, packet.extraFields));
142
+ let existingPacket;
143
+ for (let j = 0, jen = list.length; j < jen; j++) {
144
+ if (list[j].blockId === block.block.bId &&
145
+ list[j].layer === block.layer &&
146
+ list[j].positions.length < Constants_js_1.MAX_WORLD_BLOCK_PLACED_PACKET_POSITION_SIZE &&
147
+ compareObjs(list[j].fields, packet.fields)) {
148
+ existingPacket = list[j];
149
+ break;
150
+ }
151
+ }
90
152
  if (existingPacket) {
91
- if (findIndex(existingPacket.positions, pos => block.pos.x === pos.x && block.pos.y === pos.y) === -1) {
92
- existingPacket.positions.push(block.pos);
153
+ const pos = existingPacket.positions;
154
+ for (let j = 0, jen = pos.length; j < jen; j++) {
155
+ if (block.pos.x !== pos[j].x || block.pos.y !== pos[j].y) {
156
+ existingPacket.positions.push(block.pos);
157
+ break;
158
+ }
93
159
  }
94
160
  }
95
161
  else
@@ -97,4 +163,39 @@ function createBlockPackets(blocks) {
97
163
  }
98
164
  return list;
99
165
  }
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlzYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlsL01pc2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFLQSw0Q0FnQkM7QUFFRCxrQkFXQztBQUVELG9CQU9DO0FBRUQsOEJBT0M7QUFPRCw4Q0FxQkM7QUFNRCxnREF5QkM7O0FBN0dELG1FQUFnQztBQUdoQyxTQUFnQixnQkFBZ0IsQ0FBQyxDQUFhLEVBQUUsQ0FBYTtJQUN6RCxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNWLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVELElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEMsT0FBTyxLQUFLLENBQUE7SUFDaEIsQ0FBQztJQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDaEIsT0FBTyxLQUFLLENBQUE7UUFDaEIsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQTtBQUNmLENBQUM7QUFFRCxTQUFnQixHQUFHLENBQU8sR0FBMkIsRUFBRSxFQUE0QztJQUMvRixNQUFNLEdBQUcsR0FBTyxFQUFFLENBQUM7SUFFbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFFeEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzdDLEdB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
166
+ /**
167
+ * Since this is literally the only function related to dealing with binary stuff, a file would be redundant.
168
+ *
169
+ * Credits: Priddle / NVD https://discord.com/channels/534079923573489667/1230093943941758977/1431632635645530234
170
+ */
171
+ function read7BitEncodedInt(reader, offset) {
172
+ let value = 0;
173
+ let shift = 0;
174
+ let byte;
175
+ do {
176
+ byte = reader.readUInt8(offset.val++);
177
+ value |= (byte & 0x7F) << shift;
178
+ shift += 7;
179
+ } while ((byte & 0x80) != 0);
180
+ return value;
181
+ }
182
+ /**
183
+ * I don't know what else to call this.
184
+ *
185
+ * This will convert the type from getListedBlocks#fields to match the one from the game.
186
+ */
187
+ function listedFieldTypeToGameType(type) {
188
+ switch (type) {
189
+ case "String": return "stringValue";
190
+ case "Int32": return "int32Value";
191
+ case "UInt32": return "uint32Value";
192
+ case "Boolean": return "boolValue";
193
+ case "DrumNote[]":
194
+ case "PianoNote[]":
195
+ case "GuitarNote[]":
196
+ return "byteArrayValue";
197
+ default:
198
+ throw Error("Unknown field type (" + type + ") - PLEASE CONTACT LIBRARY MAINTAINER (Doomester)");
199
+ }
200
+ }
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlzYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlsL01pc2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtQkEsa0NBdUNDO0FBRUQsNENBZ0JDO0FBRUQsa0JBV0M7QUFFRCxvQkFPQztBQUVELDhCQU9DO0FBT0QsOENBc0JDO0FBTUQsZ0RBbUNDO0FBT0QsZ0RBV0M7QUFPRCw4REFlQzs7QUF6TkQsa0RBQThGO0FBRTlGLG1FQUFnQztBQUloQyxnQkFBZ0I7QUFDaEIsWUFBWTtBQUNaLEtBQUs7QUFFTCx5QkFBeUI7QUFDekIsOEJBQThCO0FBQzlCLFlBQVk7QUFFWjs7OztHQUlHO0FBQ0gsU0FBZ0IsV0FBVyxDQUErRCxJQUFPLEVBQUUsSUFBTztJQUN0RyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFaEMsMkJBQTJCO0lBRTNCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRWhELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1QixJQUFJLE9BQU8sSUFBSSxLQUFLLE9BQU8sSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTlDLHFDQUFxQztRQUNyQyxJQUFJLElBQUksS0FBSyxJQUFJO1lBQUUsU0FBUztRQUU1QixJQUFJLElBQUksS0FBSyxTQUFTO1lBQUUsT0FBTyxL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
package/esm/Block.d.ts CHANGED
@@ -1,64 +1,32 @@
1
1
  import type { BlockArg, Point, SendableBlockPacket } from "./types/index.js";
2
- import BufferReader, { ComponentTypeHeader } from "./BufferReader.js";
3
2
  import { LayerType } from "./Constants.js";
4
- import { type BlockKeys } from "pw-js-api";
3
+ import { AnyBlockField, OmitRecursively, ProtoGen, type BlockKeys } from "pw-js-api";
5
4
  export default class Block {
6
5
  bId: number;
7
- args: BlockArg[];
8
- constructor(bId: number | BlockKeys | string, args?: BlockArg[]);
9
6
  /**
10
- * I mean... Just use .args.length !== 0 to see if it has args.
7
+ * NOTE as of October 2025, this is an object NOT an array.
11
8
  *
12
- * But anyway, this will return true if there is at least one args, otherwise false.
9
+ * Stores the arguments
13
10
  */
14
- hasArgs(): boolean;
11
+ args: Record<string, BlockArg>;
12
+ constructor(bId: number | BlockKeys | string, args?: BlockArg[] | OmitRecursively<Record<string, ProtoGen.BlockFieldValue>, "$typeName" | "$unknown">);
15
13
  /**
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.
14
+ * True if there is at least one argument, otherwise false.
21
15
  */
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[];
16
+ hasArgs(): boolean;
30
17
  /**
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
18
+ * This is for the fields parameter in sending world block placement.
38
19
  */
39
- static serializeArgs(bId: number, args: BlockArg[]): Buffer;
20
+ static getArgsAsFields(block: Block): OmitRecursively<ProtoGen.WorldBlockPlacedPacket["fields"], "$typeName">;
21
+ static getArgsAsFields(bId: number, args?: Record<string, BlockArg>): OmitRecursively<ProtoGen.WorldBlockPlacedPacket["fields"], "$typeName">;
40
22
  /**
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
23
  *
45
- * - Big Endian
46
- * - No Id
47
- * - Type Byte included
48
24
  */
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;
25
+ static getArgsAsArray(block: Block): BlockArg[];
26
+ static getArgsAsArray(bId: number, args?: Record<string, BlockArg>): BlockArg[];
59
27
  /**
60
- *
61
- * @param pos List of points (X and Y)
28
+ * Returns an object suitable for sending worldBlockPlacedPacket to connection.
29
+ * @param pos List of possible positions (a max of 250 positions) - this does not automatically truncate if it overfills.
62
30
  */
63
31
  toPacket(pos: Point[], layer: LayerType): SendableBlockPacket;
64
32
  toPacket(x: number, y: number, layer: LayerType): SendableBlockPacket;
@@ -77,9 +45,10 @@ export default class Block {
77
45
  clone(obj?: false): Block;
78
46
  clone(obj: true): {
79
47
  bId: number;
80
- args: BlockArg[];
48
+ args: Record<string, BlockArg>;
81
49
  name: string;
82
50
  };
51
+ compareTo(b: Block): boolean;
83
52
  /**
84
53
  * 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
54
  *
@@ -99,15 +68,15 @@ export default class Block {
99
68
  */
100
69
  static getPaletteIdById(blockId: number): string;
101
70
  /**
102
- * Returns the arg types for that block by given block ID.
71
+ * Returns the block fields for that block by given block ID.
103
72
  *
104
73
  * If a block don't have args, it will return an empty array.
105
74
  *
106
75
  * If the block don't exist, it may throw an exception.
107
76
  */
108
- static getArgTypesByBlockId(blockId: number): ComponentTypeHeader[];
77
+ static getFieldsByBlockId(blockId: number): AnyBlockField[];
109
78
  /**
110
- * Returns the arg types for that block by given palette ID (full upper case).
79
+ * Returns the block fields for that block by given palette ID (full upper case).
111
80
  *
112
81
  * For eg "EMPTY" or "SIGN_GOLD"
113
82
  *
@@ -115,5 +84,5 @@ export default class Block {
115
84
  *
116
85
  * If the block don't exist, it may throw an exception.
117
86
  */
118
- static getArgTypesByPaletteId(paletteId: string): ComponentTypeHeader[];
87
+ static getFieldsByPaletteId(paletteId: string): AnyBlockField[];
119
88
  }
package/esm/Block.js CHANGED
@@ -1,80 +1,93 @@
1
- import BufferReader from "./BufferReader.js";
2
1
  import { PWApiClient } from "pw-js-api";
3
2
  import { MissingBlockError } from "./util/Error.js";
3
+ import { compareObjs, listedFieldTypeToGameType } from "./util/Misc.js";
4
4
  export default class Block {
5
5
  constructor(bId, args) {
6
- this.args = [];
6
+ /**
7
+ * NOTE as of October 2025, this is an object NOT an array.
8
+ *
9
+ * Stores the arguments
10
+ */
11
+ this.args = {};
7
12
  if (typeof bId === "number")
8
13
  this.bId = bId;
9
14
  else {
10
15
  this.bId = Block.getIdByName(bId);
11
16
  }
12
- if (args)
13
- this.args = args;
17
+ if (args) {
18
+ // LEGACY SUPPORT
19
+ if (Array.isArray(args)) {
20
+ args = Block.getArgsAsFields(this);
21
+ } // else {
22
+ const keys = Object.keys(args);
23
+ if (keys.length > 0) {
24
+ for (let i = 0, ken = keys.length; i < ken; i++) {
25
+ const arg = args[keys[i]];
26
+ const val = arg.value;
27
+ switch (arg.value.case) {
28
+ default:
29
+ // TODO: error handling?
30
+ case "boolValue":
31
+ case "byteArrayValue":
32
+ case "stringValue":
33
+ case "uint32Value":
34
+ case "int32Value":
35
+ this.args[keys[i]] = val.value;
36
+ }
37
+ }
38
+ }
39
+ //}
40
+ }
14
41
  }
15
42
  /**
16
- * I mean... Just use .args.length !== 0 to see if it has args.
17
- *
18
- * But anyway, this will return true if there is at least one args, otherwise false.
43
+ * True if there is at least one argument, otherwise false.
19
44
  */
20
45
  hasArgs() {
21
- return this.args.length !== 0;
22
- }
23
- /**
24
- * For helper.
25
- *
26
- * This is in Block class for organisation.
27
- *
28
- * This will deserialise by using the reader to get the block ID then retrieve the args, if applicable.
29
- */
30
- static deserialize(reader) {
31
- return new Block(reader.readUInt32LE()).deserializeArgs(reader);
46
+ return Object.keys(this.args).length > 0;
32
47
  }
33
- deserializeArgs(reader, flag = false) {
34
- var _a;
35
- const format = Block.getArgTypesByBlockId(this.bId); //(BlockArgsHeadings as any)[this.name];
36
- for (let i = 0; i < ((_a = format === null || format === void 0 ? void 0 : format.length) !== null && _a !== void 0 ? _a : 0); i++) {
37
- if (flag) {
38
- reader.expectUInt8(format[i]);
39
- }
40
- this.args[i] = reader.read(format[i], !flag);
48
+ static getArgsAsFields(bId, args) {
49
+ if (bId instanceof Block) {
50
+ args = bId.args;
51
+ bId = bId.bId;
41
52
  }
42
- return this;
43
- }
44
- /**
45
- * For helper.
46
- *
47
- * This is in Block class for organisation.
48
- */
49
- static deserializeArgs(reader) {
50
- // const args =
51
- return reader.deserialize();
52
- // for (let i = 0; i < (format?.length ?? 0); i++) {
53
- // if (flag) {
54
- // reader.expectUInt8(format[i]);
55
- // }
56
- // args[i] = reader.read(format[i], !flag);
57
- // }
58
- // return args;
53
+ if (args === undefined)
54
+ return {};
55
+ const fields = Block.getFieldsByBlockId(bId);
56
+ const obj = {};
57
+ for (let i = 0, len = fields.length; i < len; i++) {
58
+ const f = fields[i];
59
+ if (f.Required === true && args[f.Name] === undefined)
60
+ throw Error(`Missing argument: ${f.Name} (Type: ${f.Type})`);
61
+ else if (f.Required === false && args[f.Name] === undefined)
62
+ continue;
63
+ obj[f.Name] = {
64
+ value: {
65
+ case: listedFieldTypeToGameType(f.Type),
66
+ value: args[f.Name]
67
+ }
68
+ };
69
+ }
70
+ return obj;
59
71
  }
60
- static serializeArgs(bId, args, options) {
61
- options || (options = {
62
- endian: "little",
63
- writeId: true,
64
- readTypeByte: false,
65
- });
66
- const buffer = [];
67
- if (options.writeId) {
68
- const idBuffer = Buffer.alloc(4);
69
- idBuffer.writeUInt32LE(bId);
70
- buffer.push(idBuffer);
72
+ static getArgsAsArray(bId, args) {
73
+ if (bId instanceof Block) {
74
+ args = bId.args;
75
+ bId = bId.bId;
71
76
  }
72
- const blockData = Block.getArgTypesByBlockId(bId);
73
- for (let i = 0, len = blockData.length; i < len; i++) {
74
- const entry = BufferReader.Dynamic(blockData[i], args[i]);
75
- buffer.push(entry);
77
+ if (args === undefined)
78
+ return [];
79
+ const arr = [];
80
+ const fields = Block.getFieldsByBlockId(bId);
81
+ for (let i = 0, len = fields.length; i < len; i++) {
82
+ const f = fields[i];
83
+ const val = args[f.Name];
84
+ if (f.Required === true && val === undefined)
85
+ throw Error(`Missing argument: ${f.Name} (Type: ${f.Type})`);
86
+ else if (f.Required === false && args[f.Name] === undefined)
87
+ arr.push(undefined);
88
+ arr.push(args[fields[i].Name]);
76
89
  }
77
- return Buffer.concat(buffer);
90
+ return arr;
78
91
  }
79
92
  toPacket(pos, y, layer) {
80
93
  if (typeof pos === "number") {
@@ -90,7 +103,8 @@ export default class Block {
90
103
  blockId: this.bId,
91
104
  layer,
92
105
  positions: pos,
93
- extraFields: Block.serializeArgs(this.bId, this.args, { endian: "big", writeId: false, readTypeByte: true })
106
+ fields: Block.getArgsAsFields(this),
107
+ // extraFields: Block.serializeArgs(this.bId, this.args, { endian: "big", writeId: false, readTypeByte: true })
94
108
  };
95
109
  }
96
110
  /**
@@ -111,7 +125,13 @@ export default class Block {
111
125
  clone(obj = false) {
112
126
  if (obj === true)
113
127
  return { bId: this.bId, args: this.args, name: this.name };
114
- return new Block(this.bId, this.args);
128
+ const b = new Block(this.bId);
129
+ b.args = this.args;
130
+ return b;
131
+ }
132
+ compareTo(b) {
133
+ return this.bId === b.bId
134
+ && compareObjs(this.args, b.args);
115
135
  }
116
136
  /**
117
137
  * This can be convenient as it will always return the ID if it exists, and it will throw an error if it doesn't.
@@ -123,7 +143,7 @@ export default class Block {
123
143
  */
124
144
  static getIdByName(paletteId) {
125
145
  var _a;
126
- const block = (_a = PWApiClient.listBlocksObj) === null || _a === void 0 ? void 0 : _a[paletteId];
146
+ const block = (_a = PWApiClient.listBlocksObj) === null || _a === void 0 ? void 0 : _a[paletteId.toUpperCase()];
127
147
  if (block === undefined)
128
148
  throw new MissingBlockError("Current block data is missing, run Api#listBlocks first?", paletteId);
129
149
  return block.Id;
@@ -144,20 +164,20 @@ export default class Block {
144
164
  return block.PaletteId.toUpperCase();
145
165
  }
146
166
  /**
147
- * Returns the arg types for that block by given block ID.
167
+ * Returns the block fields for that block by given block ID.
148
168
  *
149
169
  * If a block don't have args, it will return an empty array.
150
170
  *
151
171
  * If the block don't exist, it may throw an exception.
152
172
  */
153
- static getArgTypesByBlockId(blockId) {
173
+ static getFieldsByBlockId(blockId) {
154
174
  var _a, _b;
155
- return (_b = (_a = PWApiClient.listBlocks) === null || _a === void 0 ? void 0 : _a[blockId].BlockDataArgs) !== null && _b !== void 0 ? _b : [];
175
+ return (_b = (_a = PWApiClient.listBlocks) === null || _a === void 0 ? void 0 : _a[blockId].Fields) !== null && _b !== void 0 ? _b : [];
156
176
  // const block = PWApiClient.listBlocks?.[blockId];
157
177
  // return block ? MissingBlockData[block?.PaletteId.toUpperCase()] ?? (block.BlockDataArgs) as ComponentTypeHeader[] ?? [] : [];
158
178
  }
159
179
  /**
160
- * Returns the arg types for that block by given palette ID (full upper case).
180
+ * Returns the block fields for that block by given palette ID (full upper case).
161
181
  *
162
182
  * For eg "EMPTY" or "SIGN_GOLD"
163
183
  *
@@ -165,9 +185,9 @@ export default class Block {
165
185
  *
166
186
  * If the block don't exist, it may throw an exception.
167
187
  */
168
- static getArgTypesByPaletteId(paletteId) {
188
+ static getFieldsByPaletteId(paletteId) {
169
189
  var _a, _b;
170
- return (_b = (_a = PWApiClient.listBlocksObj) === null || _a === void 0 ? void 0 : _a[paletteId].BlockDataArgs) !== null && _b !== void 0 ? _b : [];
190
+ return (_b = (_a = PWApiClient.listBlocksObj) === null || _a === void 0 ? void 0 : _a[paletteId].Fields) !== null && _b !== void 0 ? _b : [];
171
191
  //MissingBlockData[paletteId] ?? (PWApiClient.listBlocksObj?.[paletteId].BlockDataArgs) as ComponentTypeHeader[] ?? []
172
192
  }
173
193
  }
@@ -176,4 +196,4 @@ export default class Block {
176
196
  // SWITCH_LOCAL_ACTIVATOR: [ComponentTypeHeader.Int32, ComponentTypeHeader.Byte],
177
197
  // SWITCH_GLOBAL_ACTIVATOR: [ComponentTypeHeader.Int32, ComponentTypeHeader.Byte],
178
198
  // } as Record<string, ComponentTypeHeader[]>;
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvQmxvY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxZQUFxQyxNQUFNLG1CQUFtQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxXQUFXLEVBQWtCLE1BQU0sV0FBVyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBELE1BQU0sQ0FBQyxPQUFPLE9BQU8sS0FBSztJQUl0QixZQUFZLEdBQWdDLEVBQUUsSUFBaUI7UUFGL0QsU0FBSSxHQUFlLEVBQUUsQ0FBQztRQUdsQixJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7WUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQzthQUN2QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxJQUFJLElBQUk7WUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU87UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFvQjtRQUNuQyxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRVMsZUFBZSxDQUFDLE1BQW9CLEVBQUUsSUFBSSxHQUFHLEtBQUs7O1FBQ3hELE1BQU0sTUFBTSxHQUEwQixLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUEsd0NBQXdDO1FBRW5ILEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sbUNBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM3QyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNQLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsQ0FBQztZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQW9CO1FBQ3ZDLGdCQUFnQjtRQUVoQixPQUFPLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUU1QixvREFBb0Q7UUFDcEQsa0JBQWtCO1FBQ2xCLHlDQUF5QztRQUN6QyxRQUFRO1FBRVIsK0NBQStDO1FBQy9DLElBQUk7UUFFSixlQUFlO0lBQ25CLENBQUM7SUF5Qk0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFXLEVBQUUsSUFBZ0IsRUFBRSxPQUErRTtRQUN0SSxPQUFPLEtBQVAsT0FBTyxHQUFLO1lBQ1IsTUFBTSxFQUFFLFFBQVE7WUFDaEIsT0FBTyxFQUFFLElBQUk7WUFDYixZQUFZLEVBQUUsS0FBSztTQUN0QixFQUFDO1FBRUYsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBRTVCLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBeUIsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXhFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNuRCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQVFELFFBQVEsQ0FBQyxHQUFxQixFQUFFLENBQVMsRUFBRSxLQUFpQjtRQUN4RCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFCLEdBQUcsR0FBRyxDQUFDO29CQUNILENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztpQkFDWixDQUFDLENBQUM7WUFFSCxLQUFLLEdBQUcsS0FBSyxhQUFMLEtBQUssY0FBTCxLQUFLLEdBQUksQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7O1lBQU0sS0FBSyxHQUFHLENBQUMsYUFBRCxDQUFDLGNBQUQsQ0FBQyxHQUFJLENBQUMsQ0FBQztRQUV0QixPQUFPO1lBQ0gsZUFBZSxFQUFFLEtBQUs7WUFDdEIsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2pCLEtBQUs7WUFDTCxTQUFTLEVBQUUsR0FBRztZQUNkLFdBQVcsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDakYsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILElBQUksSUFBSTs7UUFDSixNQUFNLEtBQUssR0FBRyxNQUFBLFdBQVcsQ0FBQyxVQUFVLDBDQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVqRCxJQUFJLEtBQUssS0FBSyxTQUFTO1lBQUUsTUFBTSxJQUFJLGlCQUFpQixDQUFDLDBEQUEwRCxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzSCxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQU9ELEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSztRQUNiLElBQUksR0FBRyxLQUFLLElBQUk7WUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUU3RSxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFpQjs7UUFDaEMsTUFBTSxLQUFLLEdBQUcsTUFBQSxXQUFXLENBQUMsYUFBYSwwQ0FBRyxTQUFTLENBQUMsQ0FBQztRQUVyRCxJQUFJLEtBQUssS0FBSyxTQUFTO1lBQUUsTUFBTSxJQUFJLGlCQUFpQixDQUFDLDBEQUEwRCxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRTVILE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFlOztRQUNuQyxNQUFNLEtBQUssR0FBRyxNQUFBLFdBQVcsQ0FBQyxVQUFVLDBDQUFHLE9BQU8sQ0FBQyxDQUFDO1FBRWhELElBQUksS0FBSyxLQUFLLFNBQVM7WUFBRSxNQUFNLElBQUksaUJBQWlCLENBQUMsMERBQTBELEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFMUgsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsb0JBQW9CLENBQUMsT0FBZTs7UUFDdkMsT0FBTyxNQUFBLE1BQUEsV0FBVyxDQUFDLFVBQVUsMENBQUcsT0FBTyxFQUFFLGFBQWEsbUNBQUksRUFBRSxDQUFDO1FBRTdELG1EQUFtRDtRQUVuRCxnSUFBZ0k7SUFDcEksQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLHNCQUFzQixDQUFDLFNBQWlCOztRQUMzQyxPQUFPLE1BQUEsTUFBQSxXQUFXLENBQUMsYUFBYSwwQ0FBRyxTQUFTLEVBQUUsYUFBYSxtQ0FBSSxFQUFFLENBQUM7UUFDbEUsc0hBQXNIO0lBQzFILENBQUM7Q0FDSjtBQUVELDZEQUE2RDtBQUM3RCw2QkFBNkI7QUFDN0IscUZBQXFGO0FBQ3JGLHNGQUFzRjtBQUN0Riw4Q0FBOEMifQ==
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvQmxvY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUE0QyxXQUFXLEVBQWtCLE1BQU0sV0FBVyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RSxNQUFNLENBQUMsT0FBTyxPQUFPLEtBQUs7SUFTdEIsWUFBWSxHQUFnQyxFQUFFLElBQXFHO1FBUG5KOzs7O1dBSUc7UUFDSCxTQUFJLEdBQTZCLEVBQUUsQ0FBQztRQUdoQyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7WUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQzthQUN2QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1AsaUJBQWlCO1lBQ2pCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN0QixJQUFJLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUEsU0FBUztZQUNOLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFL0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQzlDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDMUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztvQkFFdEIsUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNyQixRQUFRO3dCQUNKLHdCQUF3Qjt3QkFDNUIsS0FBSyxXQUFXLENBQUM7d0JBQUMsS0FBSyxnQkFBZ0IsQ0FBQzt3QkFBQyxLQUFLLGFBQWEsQ0FBQzt3QkFDNUQsS0FBSyxhQUFhLENBQUM7d0JBQUMsS0FBSyxZQUFZOzRCQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFnRSxDQUFDO29CQUNsRyxDQUFDO2dCQUNMLENBQUM7WUFDTCxDQUFDO1lBQ0wsR0FBRztRQUNQLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0gsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFPRCxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQW1CLEVBQUUsSUFBK0I7UUFDdkUsSUFBSSxHQUFHLFlBQVksS0FBSyxFQUFFLENBQUM7WUFDdkIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDaEIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDbEIsQ0FBQztRQUVELElBQUksSUFBSSxLQUFLLFNBQVM7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUVsQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFN0MsTUFBTSxHQUFHLEdBQTJFLEVBQUUsQ0FBQztRQUV2RixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEQsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXBCLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTO2dCQUFFLE1BQU0sS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2lCQUMvRyxJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUztnQkFBRSxTQUFTO1lBRXRFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUc7Z0JBQ1YsS0FBSyxFQUFFO29CQUNILElBQUksRUFBRSx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUN2QyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7aUJBQ29CO2FBQzlDLENBQUE7UUFDTCxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBT0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFtQixFQUFFLElBQStCO1FBQ3RFLElBQUksR0FBRyxZQUFZLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ2hCLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2xCLENBQUM7UUFFRCxJQUFJLElBQUksS0FBSyxTQUFTO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFbEMsTUFBTSxHQUFHLEdBQWMsRUFBRSxDQUFDO1FBQzFCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU3QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEQsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFekIsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssU0FBUztnQkFBRSxNQUFNLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztpQkFDdEcsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVM7Z0JBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVqRixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNsQyxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBd0RELFFBQVEsQ0FBQyxHQUFxQixFQUFFLENBQVMsRUFBRSxLQUFpQjtRQUN4RCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFCLEdBQUcsR0FBRyxDQUFDO29CQUNILENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztpQkFDWixDQUFDLENBQUM7WUFFSCxLQUFLLEdBQUcsS0FBSyxhQUFMLEtBQUssY0FBTCxLQUFLLEdBQUksQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7O1lBQU0sS0FBSyxHQUFHLENBQUMsYUFBRCxDQUFDLGNBQUQsQ0FBQyxHQUFJLENBQUMsQ0FBQztRQUV0QixPQUFPO1lBQ0gsZUFBZSxFQUFFLEtBQUs7WUFDdEIsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2pCLEtBQUs7WUFDTCxTQUFTLEVBQUUsR0FBRztZQUNkLE1BQU0sRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQztZQUNuQywrR0FBK0c7U0FDcEYsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILElBQUksSUFBSTs7UUFDSixNQUFNLEtBQUssR0FBRyxNQUFBLFdBQVcsQ0FBQyxVQUFVLDBDQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVqRCxJQUFJLEtBQUssS0FBSyxTQUFTO1lBQUUsTUFBTSxJQUFJLGlCQUFpQixDQUFDLDBEQUEwRCxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzSCxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQU9ELEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSztRQUNiLElBQUksR0FBRyxLQUFLLElBQUk7WUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUU3RSxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFOUIsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRW5CLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFNBQVMsQ0FBQyxDQUFRO1FBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHO2VBQ2QsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzdDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFpQjs7UUFDaEMsTUFBTSxLQUFLLEdBQUcsTUFBQSxXQUFXLENBQUMsYUFBYSwwQ0FBRyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUVuRSxJQUFJLEtBQUssS0FBSyxTQUFTO1lBQUUsTUFBTSxJQUFJLGlCQUFpQixDQUFDLDBEQUEwRCxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRTVILE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFlOztRQUNuQyxNQUFNLEtBQUssR0FBRyxNQUFBLFdBQVcsQ0FBQyxVQUFVLDBDQUFHLE9BQU8sQ0FBQyxDQUFDO1FBRWhELElBQUksS0FBSyxLQUFLLFNBQVM7WUFBRSxNQUFNLElBQUksaUJBQWlCLENBQUMsMERBQTBELEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFMUgsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsa0JBQWtCLENBQUMsT0FBZTs7UUFDckMsT0FBTyxNQUFBLE1BQUEsV0FBVyxDQUFDLFVBQVUsMENBQUcsT0FBTyxFQUFFLE1BQU0sbUNBQUksRUFBRSxDQUFDO1FBRXRELG1EQUFtRDtRQUVuRCxnSUFBZ0k7SUFDcEksQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFNBQWlCOztRQUN6QyxPQUFPLE1BQUEsTUFBQSxXQUFXLENBQUMsYUFBYSwwQ0FBRyxTQUFTLEVBQUUsTUFBTSxtQ0FBSSxFQUFFLENBQUM7UUFDM0Qsc0hBQXNIO0lBQzFILENBQUM7Q0FDSjtBQUVELDZEQUE2RDtBQUM3RCw2QkFBNkI7QUFDN0IscUZBQXFGO0FBQ3JGLHNGQUFzRjtBQUN0Riw4Q0FBOEMifQ==
@@ -18,3 +18,4 @@ export declare enum EffectId {
18
18
  */
19
19
  GravityDirection = 9
20
20
  }
21
+ export declare const MAX_WORLD_BLOCK_PLACED_PACKET_POSITION_SIZE = 200;
package/esm/Constants.js CHANGED
@@ -20,4 +20,5 @@ export var EffectId;
20
20
  */
21
21
  EffectId[EffectId["GravityDirection"] = 9] = "GravityDirection";
22
22
  })(EffectId || (EffectId = {}));
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL0NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ2pCLHFEQUFVLENBQUE7SUFDVixxREFBVSxDQUFBO0lBQ1YsK0NBQU8sQ0FBQTtBQUNYLENBQUMsRUFKVyxTQUFTLEtBQVQsU0FBUyxRQUlwQjtBQUVELE1BQU0sQ0FBTixJQUFZLFFBY1g7QUFkRCxXQUFZLFFBQVE7SUFDaEIsbURBQVUsQ0FBQTtJQUNWLHFDQUFHLENBQUE7SUFDSCx5Q0FBSyxDQUFBO0lBQ0wsNkRBQWUsQ0FBQTtJQUNmLHlDQUFLLENBQUE7SUFDTCwyQ0FBTSxDQUFBO0lBQ04sMkNBQU0sQ0FBQTtJQUNOLHVEQUFZLENBQUE7SUFDWixpREFBUyxDQUFBO0lBQ1Q7O09BRUc7SUFDSCwrREFBZ0IsQ0FBQTtBQUNwQixDQUFDLEVBZFcsUUFBUSxLQUFSLFFBQVEsUUFjbkIifQ==
23
+ export const MAX_WORLD_BLOCK_PLACED_PACKET_POSITION_SIZE = 200;
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL0NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ2pCLHFEQUFVLENBQUE7SUFDVixxREFBVSxDQUFBO0lBQ1YsK0NBQU8sQ0FBQTtBQUNYLENBQUMsRUFKVyxTQUFTLEtBQVQsU0FBUyxRQUlwQjtBQUVELE1BQU0sQ0FBTixJQUFZLFFBY1g7QUFkRCxXQUFZLFFBQVE7SUFDaEIsbURBQVUsQ0FBQTtJQUNWLHFDQUFHLENBQUE7SUFDSCx5Q0FBSyxDQUFBO0lBQ0wsNkRBQWUsQ0FBQTtJQUNmLHlDQUFLLENBQUE7SUFDTCwyQ0FBTSxDQUFBO0lBQ04sMkNBQU0sQ0FBQTtJQUNOLHVEQUFZLENBQUE7SUFDWixpREFBUyxDQUFBO0lBQ1Q7O09BRUc7SUFDSCwrREFBZ0IsQ0FBQTtBQUNwQixDQUFDLEVBZFcsUUFBUSxLQUFSLFFBQVEsUUFjbkI7QUFDRCxNQUFNLENBQUMsTUFBTSwyQ0FBMkMsR0FBRyxHQUFHLENBQUMifQ==
package/esm/Helper.d.ts CHANGED
@@ -66,6 +66,8 @@ export default class PWGameWorldHelper {
66
66
  receiveHook: Hook<PWGameHook>;
67
67
  /**
68
68
  * Internal function.
69
+ *
70
+ * Yes th typing is cursed, I don't care as this is private.
69
71
  */
70
72
  private initialise;
71
73
  /**