pw-js-world 0.4.4-dev.d5503ce → 0.4.5-dev.5a8cfff

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/Block.d.ts CHANGED
@@ -1,64 +1,53 @@
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>;
15
12
  /**
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.
13
+ * NOTE: This is a deprecated form as the arrangement of fields/args for a block may change in the future.
21
14
  */
22
- static deserialize(reader: BufferReader): Block;
23
- protected deserializeArgs(reader: BufferReader, flag?: boolean): this;
15
+ constructor(bId: number | BlockKeys | string, args?: BlockArg[]);
24
16
  /**
25
- * For helper.
26
17
  *
27
- * This is in Block class for organisation.
28
18
  */
29
- static deserializeArgs(reader: BufferReader): BlockArg[];
19
+ constructor(bId: number | BlockKeys | string, args?: Record<string, BlockArg>);
30
20
  /**
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.
21
+ * This is called upon automatically (if a helper is attached) binding the args to the newly instantised block.
22
+ * This does not validate if the fields truly belong to the block.
34
23
  *
35
- * - Little Endian
36
- * - With Id
37
- * - Type Byte omitted
24
+ * INTERNAL
38
25
  */
39
- static serializeArgs(bId: number, args: BlockArg[]): Buffer;
26
+ _initArgs(args: OmitRecursively<Record<string, ProtoGen.BlockFieldValue>, "$typeName" | "$unknown">): this;
40
27
  /**
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
28
+ * True if there is at least one argument, otherwise false.
48
29
  */
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;
30
+ hasArgs(): boolean;
59
31
  /**
32
+ * This is for the fields parameter in sending world block placement.
60
33
  *
61
- * @param pos List of points (X and Y)
34
+ * If the whole Block is passed, and the args parameter is undefined, the block's args will be used.
35
+ */
36
+ static getArgsAsFields(block: Block, args?: Record<string, BlockArg>): OmitRecursively<ProtoGen.WorldBlockPlacedPacket["fields"], "$typeName">;
37
+ static getArgsAsFields(bId: number, args?: Record<string, BlockArg>): OmitRecursively<ProtoGen.WorldBlockPlacedPacket["fields"], "$typeName">;
38
+ /**
39
+ */
40
+ static getArgsAsArray(block: Block): BlockArg[];
41
+ static getArgsAsArray(bId: number, args?: Record<string, BlockArg>): BlockArg[];
42
+ /**
43
+ * This is sort of for internal use,
44
+ * this will convert the packet form of fields
45
+ * back into object of arg names mapped to their values.
46
+ */
47
+ static parseArgFields(args: OmitRecursively<ProtoGen.WorldBlockPlacedPacket["fields"], "$typeName">): Record<string, BlockArg>;
48
+ /**
49
+ * Returns an object suitable for sending worldBlockPlacedPacket to connection.
50
+ * @param pos List of possible positions (a max of 250 positions) - this does not automatically truncate if it overfills.
62
51
  */
63
52
  toPacket(pos: Point[], layer: LayerType): SendableBlockPacket;
64
53
  toPacket(x: number, y: number, layer: LayerType): SendableBlockPacket;
@@ -77,9 +66,10 @@ export default class Block {
77
66
  clone(obj?: false): Block;
78
67
  clone(obj: true): {
79
68
  bId: number;
80
- args: BlockArg[];
69
+ args: Record<string, BlockArg>;
81
70
  name: string;
82
71
  };
72
+ compareTo(b: Block): boolean;
83
73
  /**
84
74
  * 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
75
  *
@@ -99,15 +89,15 @@ export default class Block {
99
89
  */
100
90
  static getPaletteIdById(blockId: number): string;
101
91
  /**
102
- * Returns the arg types for that block by given block ID.
92
+ * Returns the block fields for that block by given block ID.
103
93
  *
104
94
  * If a block don't have args, it will return an empty array.
105
95
  *
106
96
  * If the block don't exist, it may throw an exception.
107
97
  */
108
- static getArgTypesByBlockId(blockId: number): ComponentTypeHeader[];
98
+ static getFieldsByBlockId(blockId: number): AnyBlockField[];
109
99
  /**
110
- * Returns the arg types for that block by given palette ID (full upper case).
100
+ * Returns the block fields for that block by given palette ID (full upper case).
111
101
  *
112
102
  * For eg "EMPTY" or "SIGN_GOLD"
113
103
  *
@@ -115,5 +105,5 @@ export default class Block {
115
105
  *
116
106
  * If the block don't exist, it may throw an exception.
117
107
  */
118
- static getArgTypesByPaletteId(paletteId: string): ComponentTypeHeader[];
108
+ static getFieldsByPaletteId(paletteId: string): AnyBlockField[];
119
109
  }
package/cm/Block.js CHANGED
@@ -1,83 +1,134 @@
1
1
  "use strict";
2
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
3
  const pw_js_api_1 = require("pw-js-api");
6
4
  const Error_js_1 = require("./util/Error.js");
5
+ const Misc_js_1 = require("./util/Misc.js");
7
6
  class Block {
7
+ /**
8
+ * @param bId ID of the block, can be the current numeric block ID, or string ID (from /listblocks).
9
+ * @param args Arguments belonging to the block. This class does not clone.
10
+ */
8
11
  constructor(bId, args) {
9
- this.args = [];
12
+ /**
13
+ * NOTE as of October 2025, this is an object NOT an array.
14
+ *
15
+ * Stores the arguments
16
+ */
17
+ this.args = {};
10
18
  if (typeof bId === "number")
11
19
  this.bId = bId;
12
20
  else {
13
21
  this.bId = Block.getIdByName(bId);
14
22
  }
15
- if (args)
16
- this.args = args;
23
+ if (args) {
24
+ // LEGACY SUPPORT
25
+ if (Array.isArray(args)) {
26
+ const fields = Block.getFieldsByBlockId(this.bId);
27
+ // For now, assuming they're of the same length.
28
+ if (args.length !== fields.length)
29
+ throw new Error_js_1.LegacyIncorrectArgsLenError("Args length is not equal to fields length for this block ID", this.bId, args.length, fields.length);
30
+ for (let i = 0, ken = fields.length; i < ken; i++) {
31
+ // const arg = fieldedArgs[keys[i]];
32
+ const field = fields[i];
33
+ const arg = args[i];
34
+ if (field.Type === "String" && typeof arg !== "string"
35
+ || field.Type === "Boolean" && typeof arg !== "boolean"
36
+ || field.Type === "Int32" && typeof arg !== "number"
37
+ || field.Type === "UInt32" && typeof arg !== "number")
38
+ throw new Error_js_1.LegacyIncorrectArgError("The arg type does not match the field", this.bId, arg, field);
39
+ // todo: uint8array?
40
+ this.args[field.Name] = arg;
41
+ }
42
+ }
43
+ else
44
+ this.args = args;
45
+ }
17
46
  }
18
47
  /**
19
- * I mean... Just use .args.length !== 0 to see if it has args.
48
+ * This is called upon automatically (if a helper is attached) binding the args to the newly instantised block.
49
+ * This does not validate if the fields truly belong to the block.
20
50
  *
21
- * But anyway, this will return true if there is at least one args, otherwise false.
51
+ * INTERNAL
22
52
  */
23
- hasArgs() {
24
- return this.args.length !== 0;
53
+ _initArgs(args) {
54
+ this.args = Block.parseArgFields(args);
55
+ return this;
25
56
  }
26
57
  /**
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.
58
+ * True if there is at least one argument, otherwise false.
32
59
  */
33
- static deserialize(reader) {
34
- return new Block(reader.readUInt32LE()).deserializeArgs(reader);
60
+ hasArgs() {
61
+ return Object.keys(this.args).length > 0;
35
62
  }
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);
63
+ static getArgsAsFields(bId, args) {
64
+ if (bId instanceof Block) {
65
+ args !== null && args !== void 0 ? args : (args = bId.args);
66
+ bId = bId.bId;
44
67
  }
45
- return this;
68
+ if (args === undefined)
69
+ return {};
70
+ const fields = Block.getFieldsByBlockId(bId);
71
+ const obj = {};
72
+ for (let i = 0, len = fields.length; i < len; i++) {
73
+ const f = fields[i];
74
+ if (f.Required === true && args[f.Name] === undefined)
75
+ throw Error(`Missing argument: ${f.Name} (Type: ${f.Type})`);
76
+ else if (f.Required === false && args[f.Name] === undefined)
77
+ continue;
78
+ obj[f.Name] = {
79
+ value: {
80
+ case: (0, Misc_js_1.listedFieldTypeToGameType)(f.Type),
81
+ value: args[f.Name]
82
+ }
83
+ };
84
+ }
85
+ return obj;
86
+ }
87
+ static getArgsAsArray(bId, args) {
88
+ if (bId instanceof Block) {
89
+ args = bId.args;
90
+ bId = bId.bId;
91
+ }
92
+ if (args === undefined)
93
+ return [];
94
+ const arr = [];
95
+ const fields = Block.getFieldsByBlockId(bId);
96
+ for (let i = 0, len = fields.length; i < len; i++) {
97
+ const f = fields[i];
98
+ const val = args[f.Name];
99
+ if (f.Required === true && val === undefined)
100
+ throw Error(`Missing argument: ${f.Name} (Type: ${f.Type})`);
101
+ else if (f.Required === false && args[f.Name] === undefined)
102
+ arr.push(undefined);
103
+ arr.push(args[fields[i].Name]);
104
+ }
105
+ return arr;
46
106
  }
47
107
  /**
48
- * For helper.
49
- *
50
- * This is in Block class for organisation.
108
+ * This is sort of for internal use,
109
+ * this will convert the packet form of fields
110
+ * back into object of arg names mapped to their values.
51
111
  */
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);
112
+ static parseArgFields(args) {
113
+ const obj = {};
114
+ const keys = Object.keys(args);
115
+ for (let i = 0; i < keys.length; i++) {
116
+ const arg = args[keys[i]];
117
+ const val = arg.value;
118
+ switch (val.case) {
119
+ default:
120
+ // TODO: error handling?
121
+ case "boolValue":
122
+ obj[keys[i]] = !!val.value; // server sends 0 or 1
123
+ break;
124
+ case "byteArrayValue":
125
+ case "stringValue":
126
+ case "uint32Value":
127
+ case "int32Value":
128
+ obj[keys[i]] = val.value;
129
+ }
79
130
  }
80
- return Buffer.concat(buffer);
131
+ return obj;
81
132
  }
82
133
  toPacket(pos, y, layer) {
83
134
  if (typeof pos === "number") {
@@ -93,7 +144,8 @@ class Block {
93
144
  blockId: this.bId,
94
145
  layer,
95
146
  positions: pos,
96
- extraFields: Block.serializeArgs(this.bId, this.args, { endian: "big", writeId: false, readTypeByte: true })
147
+ fields: Block.getArgsAsFields(this),
148
+ // extraFields: Block.serializeArgs(this.bId, this.args, { endian: "big", writeId: false, readTypeByte: true })
97
149
  };
98
150
  }
99
151
  /**
@@ -114,7 +166,13 @@ class Block {
114
166
  clone(obj = false) {
115
167
  if (obj === true)
116
168
  return { bId: this.bId, args: this.args, name: this.name };
117
- return new Block(this.bId, this.args);
169
+ const b = new Block(this.bId);
170
+ b.args = structuredClone(this.args);
171
+ return b;
172
+ }
173
+ compareTo(b) {
174
+ return this.bId === b.bId
175
+ && (0, Misc_js_1.compareObjs)(this.args, b.args);
118
176
  }
119
177
  /**
120
178
  * This can be convenient as it will always return the ID if it exists, and it will throw an error if it doesn't.
@@ -126,7 +184,7 @@ class Block {
126
184
  */
127
185
  static getIdByName(paletteId) {
128
186
  var _a;
129
- const block = (_a = pw_js_api_1.PWApiClient.listBlocksObj) === null || _a === void 0 ? void 0 : _a[paletteId];
187
+ const block = (_a = pw_js_api_1.PWApiClient.listBlocksObj) === null || _a === void 0 ? void 0 : _a[paletteId.toUpperCase()];
130
188
  if (block === undefined)
131
189
  throw new Error_js_1.MissingBlockError("Current block data is missing, run Api#listBlocks first?", paletteId);
132
190
  return block.Id;
@@ -147,20 +205,20 @@ class Block {
147
205
  return block.PaletteId.toUpperCase();
148
206
  }
149
207
  /**
150
- * Returns the arg types for that block by given block ID.
208
+ * Returns the block fields for that block by given block ID.
151
209
  *
152
210
  * If a block don't have args, it will return an empty array.
153
211
  *
154
212
  * If the block don't exist, it may throw an exception.
155
213
  */
156
- static getArgTypesByBlockId(blockId) {
214
+ static getFieldsByBlockId(blockId) {
157
215
  var _a, _b;
158
- return (_b = (_a = pw_js_api_1.PWApiClient.listBlocks) === null || _a === void 0 ? void 0 : _a[blockId].BlockDataArgs) !== null && _b !== void 0 ? _b : [];
216
+ return (_b = (_a = pw_js_api_1.PWApiClient.listBlocks) === null || _a === void 0 ? void 0 : _a[blockId].Fields) !== null && _b !== void 0 ? _b : [];
159
217
  // const block = PWApiClient.listBlocks?.[blockId];
160
218
  // return block ? MissingBlockData[block?.PaletteId.toUpperCase()] ?? (block.BlockDataArgs) as ComponentTypeHeader[] ?? [] : [];
161
219
  }
162
220
  /**
163
- * Returns the arg types for that block by given palette ID (full upper case).
221
+ * Returns the block fields for that block by given palette ID (full upper case).
164
222
  *
165
223
  * For eg "EMPTY" or "SIGN_GOLD"
166
224
  *
@@ -168,9 +226,9 @@ class Block {
168
226
  *
169
227
  * If the block don't exist, it may throw an exception.
170
228
  */
171
- static getArgTypesByPaletteId(paletteId) {
229
+ static getFieldsByPaletteId(paletteId) {
172
230
  var _a, _b;
173
- return (_b = (_a = pw_js_api_1.PWApiClient.listBlocksObj) === null || _a === void 0 ? void 0 : _a[paletteId].BlockDataArgs) !== null && _b !== void 0 ? _b : [];
231
+ return (_b = (_a = pw_js_api_1.PWApiClient.listBlocksObj) === null || _a === void 0 ? void 0 : _a[paletteId].Fields) !== null && _b !== void 0 ? _b : [];
174
232
  //MissingBlockData[paletteId] ?? (PWApiClient.listBlocksObj?.[paletteId].BlockDataArgs) as ComponentTypeHeader[] ?? []
175
233
  }
176
234
  }
@@ -180,4 +238,4 @@ exports.default = Block;
180
238
  // SWITCH_LOCAL_ACTIVATOR: [ComponentTypeHeader.Int32, ComponentTypeHeader.Byte],
181
239
  // SWITCH_GLOBAL_ACTIVATOR: [ComponentTypeHeader.Int32, ComponentTypeHeader.Byte],
182
240
  // } as Record<string, ComponentTypeHeader[]>;
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvQmxvY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsZ0ZBQXNFO0FBRXRFLHlDQUF3RDtBQUN4RCw4Q0FBb0Q7QUFFcEQsTUFBcUIsS0FBSztJQUl0QixZQUFZLEdBQWdDLEVBQUUsSUFBaUI7UUFGL0QsU0FBSSxHQUFlLEVBQUUsQ0FBQztRQUdsQixJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7WUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQzthQUN2QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxJQUFJLElBQUk7WUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU87UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFvQjtRQUNuQyxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRVMsZUFBZSxDQUFDLE1BQW9CLEVBQUUsSUFBSSxHQUFHLEtBQUs7O1FBQ3hELE1BQU0sTUFBTSxHQUEwQixLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUEsd0NBQXdDO1FBRW5ILEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sbUNBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM3QyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNQLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsQ0FBQztZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQW9CO1FBQ3ZDLGdCQUFnQjtRQUVoQixPQUFPLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUU1QixvREFBb0Q7UUFDcEQsa0JBQWtCO1FBQ2xCLHlDQUF5QztRQUN6QyxRQUFRO1FBRVIsK0NBQStDO1FBQy9DLElBQUk7UUFFSixlQUFlO0lBQ25CLENBQUM7SUF5Qk0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFXLEVBQUUsSUFBZ0IsRUFBRSxPQUErRTtRQUN0SSxPQUFPLEtBQVAsT0FBTyxHQUFLO1lBQ1IsTUFBTSxFQUFFLFFBQVE7WUFDaEIsT0FBTyxFQUFFLElBQUk7WUFDYixZQUFZLEVBQUUsS0FBSztTQUN0QixFQUFDO1FBRUYsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBRTVCLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBeUIsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXhFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNuRCxNQUFNLEtBQUssR0FBRyx5QkFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUQsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFRRCxRQUFRLENBQUMsR0FBcUIsRUFBRSxDQUFTLEVBQUUsS0FBaUI7UUFDeEQsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMxQixHQUFHLEdBQUcsQ0FBQztvQkFDSCxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7aUJBQ1osQ0FBQyxDQUFDO1lBRUgsS0FBSyxHQUFHLEtBQUssYUFBTCxLQUFLLGNBQUwsS0FBSyxHQUFJLENBQUMsQ0FBQztRQUN2QixDQUFDOztZQUFNLEtBQUssR0FBRyxDQUFDLGFBQUQsQ0FBQyxjQUFELENBQUMsR0FBSSxDQUFDLENBQUM7UUFFdEIsT0FBTztZQUNILGVBQWUsRUFBRSxLQUFLO1lBQ3RCLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRztZQUNqQixLQUFLO1lBQ0wsU0FBUyxFQUFFLEdBQUc7WUFDZCxXQUFXLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ2pGLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxJQUFJLElBQUk7O1FBQ0osTUFBTSxLQUFLLEdBQUcsTUFBQSx1QkFBVyxDQUFDLFVBQVUsMENBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpELElBQUksS0FBSyxLQUFLLFNBQVM7WUFBRSxNQUFNLElBQUksNEJBQWlCLENBQUMsMERBQTBELEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTNILE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBT0QsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLO1FBQ2IsSUFBSSxHQUFHLEtBQUssSUFBSTtZQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTdFLE9BQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQWlCOztRQUNoQyxNQUFNLEtBQUssR0FBRyxNQUFBLHVCQUFXLENBQUMsYUFBYSwwQ0FBRyxTQUFTLENBQUMsQ0FBQztRQUVyRCxJQUFJLEtBQUssS0FBSyxTQUFTO1lBQUUsTUFBTSxJQUFJLDRCQUFpQixDQUFDLDBEQUEwRCxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRTVILE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFlOztRQUNuQyxNQUFNLEtBQUssR0FBRyxNQUFBLHVCQUFXLENBQUMsVUFBVSwwQ0FBRyxPQUFPLENBQUMsQ0FBQztRQUVoRCxJQUFJLEtBQUssS0FBSyxTQUFTO1lBQUUsTUFBTSxJQUFJLDRCQUFpQixDQUFDLDBEQUEwRCxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTFILE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLG9CQUFvQixDQUFDLE9BQWU7O1FBQ3ZDLE9BQU8sTUFBQSxNQUFBLHVCQUFXLENBQUMsVUFBVSwwQ0FBRyxPQUFPLEVBQUUsYUFBYSxtQ0FBSSxFQUFFLENBQUM7UUFFN0QsbURBQW1EO1FBRW5ELGdJQUFnSTtJQUNwSSxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsc0JBQXNCLENBQUMsU0FBaUI7O1FBQzNDLE9BQU8sTUFBQSxNQUFBLHVCQUFXLENBQUMsYUFBYSwwQ0FBRyxTQUFTLEVBQUUsYUFBYSxtQ0FBSSxFQUFFLENBQUM7UUFDbEUsc0hBQXNIO0lBQzFILENBQUM7Q0FDSjtBQW5PRCx3QkFtT0M7QUFFRCw2REFBNkQ7QUFDN0QsNkJBQTZCO0FBQzdCLHFGQUFxRjtBQUNyRixzRkFBc0Y7QUFDdEYsOENBQThDIn0=
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvQmxvY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSx5Q0FBa0c7QUFDbEcsOENBQTBHO0FBQzFHLDRDQUF3RTtBQUV4RSxNQUFxQixLQUFLO0lBaUJ0Qjs7O09BR0c7SUFDSCxZQUFZLEdBQWdDLEVBQUUsSUFBNEM7UUFuQjFGOzs7O1dBSUc7UUFDSCxTQUFJLEdBQTZCLEVBQUUsQ0FBQztRQWVoQyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7WUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQzthQUN2QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1AsaUJBQWlCO1lBQ2pCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN0QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUVsRCxnREFBZ0Q7Z0JBRWhELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTTtvQkFBRSxNQUFNLElBQUksc0NBQTJCLENBQUMsNkRBQTZELEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFFOUssS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNoRCxvQ0FBb0M7b0JBQ3BDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDeEIsTUFBTSxHQUFHLEdBQUcs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
package/cm/Constants.d.ts CHANGED
@@ -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/cm/Constants.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EffectId = exports.LayerType = void 0;
3
+ exports.MAX_WORLD_BLOCK_PLACED_PACKET_POSITION_SIZE = exports.EffectId = exports.LayerType = void 0;
4
4
  var LayerType;
5
5
  (function (LayerType) {
6
6
  LayerType[LayerType["Background"] = 0] = "Background";
@@ -23,4 +23,5 @@ var EffectId;
23
23
  */
24
24
  EffectId[EffectId["GravityDirection"] = 9] = "GravityDirection";
25
25
  })(EffectId || (exports.EffectId = EffectId = {}));
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL0NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLFNBSVg7QUFKRCxXQUFZLFNBQVM7SUFDakIscURBQVUsQ0FBQTtJQUNWLHFEQUFVLENBQUE7SUFDViwrQ0FBTyxDQUFBO0FBQ1gsQ0FBQyxFQUpXLFNBQVMseUJBQVQsU0FBUyxRQUlwQjtBQUVELElBQVksUUFjWDtBQWRELFdBQVksUUFBUTtJQUNoQixtREFBVSxDQUFBO0lBQ1YscUNBQUcsQ0FBQTtJQUNILHlDQUFLLENBQUE7SUFDTCw2REFBZSxDQUFBO0lBQ2YseUNBQUssQ0FBQTtJQUNMLDJDQUFNLENBQUE7SUFDTiwyQ0FBTSxDQUFBO0lBQ04sdURBQVksQ0FBQTtJQUNaLGlEQUFTLENBQUE7SUFDVDs7T0FFRztJQUNILCtEQUFnQixDQUFBO0FBQ3BCLENBQUMsRUFkVyxRQUFRLHdCQUFSLFFBQVEsUUFjbkIifQ==
26
+ exports.MAX_WORLD_BLOCK_PLACED_PACKET_POSITION_SIZE = 200;
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL0NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLFNBSVg7QUFKRCxXQUFZLFNBQVM7SUFDakIscURBQVUsQ0FBQTtJQUNWLHFEQUFVLENBQUE7SUFDViwrQ0FBTyxDQUFBO0FBQ1gsQ0FBQyxFQUpXLFNBQVMseUJBQVQsU0FBUyxRQUlwQjtBQUVELElBQVksUUFjWDtBQWRELFdBQVksUUFBUTtJQUNoQixtREFBVSxDQUFBO0lBQ1YscUNBQUcsQ0FBQTtJQUNILHlDQUFLLENBQUE7SUFDTCw2REFBZSxDQUFBO0lBQ2YseUNBQUssQ0FBQTtJQUNMLDJDQUFNLENBQUE7SUFDTiwyQ0FBTSxDQUFBO0lBQ04sdURBQVksQ0FBQTtJQUNaLGlEQUFTLENBQUE7SUFDVDs7T0FFRztJQUNILCtEQUFnQixDQUFBO0FBQ3BCLENBQUMsRUFkVyxRQUFRLHdCQUFSLFFBQVEsUUFjbkI7QUFDWSxRQUFBLDJDQUEyQyxHQUFHLEdBQUcsQ0FBQyJ9
package/cm/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
  /**