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/util/Error.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MissingBlockError = void 0;
3
+ exports.LegacyIncorrectArgError = exports.LegacyIncorrectArgsLenError = exports.MissingBlockError = void 0;
4
4
  class MissingBlockError extends Error {
5
5
  constructor(msg, blockId) {
6
6
  super(msg);
@@ -8,4 +8,46 @@ class MissingBlockError extends Error {
8
8
  }
9
9
  }
10
10
  exports.MissingBlockError = MissingBlockError;
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbC9FcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFhLGlCQUFrQixTQUFRLEtBQUs7SUFNeEMsWUFBWSxHQUFXLEVBQUUsT0FBd0I7UUFDN0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDM0IsQ0FBQztDQUNKO0FBVkQsOENBVUMifQ==
11
+ class LegacyIncorrectArgsLenError extends Error {
12
+ constructor(msg,
13
+ /**
14
+ * The offending block ID.
15
+ */
16
+ blockId,
17
+ /**
18
+ * The current number of args for this block.
19
+ */
20
+ currArgsLen,
21
+ /**
22
+ * The expected number of args for this block.
23
+ */
24
+ expectedArgsLen) {
25
+ super(msg);
26
+ this.blockId = blockId;
27
+ this.currArgsLen = currArgsLen;
28
+ this.expectedArgsLen = expectedArgsLen;
29
+ }
30
+ }
31
+ exports.LegacyIncorrectArgsLenError = LegacyIncorrectArgsLenError;
32
+ class LegacyIncorrectArgError extends Error {
33
+ constructor(msg,
34
+ /**
35
+ * The offending block ID.
36
+ */
37
+ blockId,
38
+ /**
39
+ * The violating arg.
40
+ */
41
+ arg,
42
+ /**
43
+ * The expected field.
44
+ */
45
+ field) {
46
+ super(msg);
47
+ this.blockId = blockId;
48
+ this.arg = arg;
49
+ this.field = field;
50
+ }
51
+ }
52
+ exports.LegacyIncorrectArgError = LegacyIncorrectArgError;
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbC9FcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxNQUFhLGlCQUFrQixTQUFRLEtBQUs7SUFNeEMsWUFBWSxHQUFXLEVBQUUsT0FBd0I7UUFDN0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDM0IsQ0FBQztDQUNKO0FBVkQsOENBVUM7QUFFRCxNQUFhLDJCQUE0QixTQUFRLEtBQUs7SUFDbEQsWUFBWSxHQUFXO0lBQ25COztPQUVHO0lBQ0ksT0FBd0I7SUFDL0I7O09BRUc7SUFDSSxXQUFtQjtJQUMxQjs7T0FFRztJQUNJLGVBQXVCO1FBRTlCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQVZKLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBSXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBSW5CLG9CQUFlLEdBQWYsZUFBZSxDQUFRO0lBR2xDLENBQUM7Q0FDSjtBQWpCRCxrRUFpQkM7QUFFRCxNQUFhLHVCQUF3QixTQUFRLEtBQUs7SUFDOUMsWUFBWSxHQUFXO0lBQ25COztPQUVHO0lBQ0ksT0FBd0I7SUFDL0I7O09BRUc7SUFDSSxHQUFRO0lBQ2Y7O09BRUc7SUFDSSxLQUFvQjtRQUUzQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFWSixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUl4QixRQUFHLEdBQUgsR0FBRyxDQUFLO1FBSVIsVUFBSyxHQUFMLEtBQUssQ0FBZTtJQUcvQixDQUFDO0NBQ0o7QUFqQkQsMERBaUJDIn0=
package/cm/util/Misc.d.ts CHANGED
@@ -1,7 +1,13 @@
1
- import type { LayerType } from "../Constants.js";
1
+ import { type LayerType } from "../Constants.js";
2
2
  import type { BlockArg, Point, SendableBlockPacket } from "../types";
3
3
  import Block from "../Block.js";
4
- import type { BlockKeys } from "pw-js-api";
4
+ import { type AnyBlockField, type BlockKeys } from "pw-js-api";
5
+ /**
6
+ * True if objA matches the contents to that of objB
7
+ *
8
+ * TODO: proper array support?
9
+ */
10
+ export declare function compareObjs<A extends Record<string, any>, B extends Record<string, any>>(objA: A, objB: B): boolean;
5
11
  export declare function uint8ArrayEquals(a: Uint8Array, b: Uint8Array): boolean;
6
12
  export declare function map<T, U>(arr: Array<T> | Map<any, T>, cb: (value: T, index: number, obj: T[]) => U): U[];
7
13
  export declare function find<T>(arr: Array<T> | Map<any, T>, pred: (value: T, index: number, obj: T[]) => boolean): T | undefined;
@@ -9,7 +15,7 @@ export declare function findIndex<T>(arr: Array<T> | Map<any, T>, pred: (value:
9
15
  /**
10
16
  * For now this is slightly limited, but this will ONLY create a sendable packet which you must then send it yourself.
11
17
  */
12
- export declare function createBlockPacket(blockId: number | BlockKeys | string, layer: LayerType, pos: Point | Point[], ...args: BlockArg[]): SendableBlockPacket;
18
+ export declare function createBlockPacket(blockId: number | BlockKeys | string, layer: LayerType, pos: Point | Point[], args: Record<string, BlockArg>): SendableBlockPacket;
13
19
  export declare function createBlockPacket(block: Block, layer: LayerType, pos: Point | Point[]): SendableBlockPacket;
14
20
  /**
15
21
  * Creates sendable packets from given blocks. Attempts to minimise packet count, so it's preferable
@@ -20,3 +26,17 @@ export declare function createBlockPackets(blocks: {
20
26
  layer: LayerType;
21
27
  pos: Point;
22
28
  }[]): SendableBlockPacket[];
29
+ /**
30
+ * Since this is literally the only function related to dealing with binary stuff, a file would be redundant.
31
+ *
32
+ * Credits: Priddle / NVD https://discord.com/channels/534079923573489667/1230093943941758977/1431632635645530234
33
+ */
34
+ export declare function read7BitEncodedInt(reader: Buffer, offset: {
35
+ val: number;
36
+ }): number;
37
+ /**
38
+ * I don't know what else to call this.
39
+ *
40
+ * This will convert the type from getListedBlocks#fields to match the one from the game.
41
+ */
42
+ export declare function listedFieldTypeToGameType(type: AnyBlockField["Type"]): "int32Value" | "uint32Value" | "stringValue" | "boolValue" | "byteArrayValue";
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlzYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlsL01pc2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFrQkEsa0NBdUNDO0FBRUQsNENBZ0JDO0FBRUQsa0JBV0M7QUFFRCxvQkFPQztBQUVELDhCQU9DO0FBT0QsOENBc0JDO0FBTUQsZ0RBbUNDO0FBT0QsZ0RBV0M7QUFPRCw4REFlQzs7QUF4TkQsa0RBQThGO0FBRTlGLG1FQUFnQztBQUdoQyxnQkFBZ0I7QUFDaEIsWUFBWTtBQUNaLEtBQUs7QUFFTCx5QkFBeUI7QUFDekIsOEJBQThCO0FBQzlCLFlBQVk7QUFFWjs7OztHQUlHO0FBQ0gsU0FBZ0IsV0FBVyxDQUErRCxJQUFPLEVBQUUsSUFBTztJQUN0RyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFaEMsMkJBQTJCO0lBRTNCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRWhELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1QixJQUFJLE9BQU8sSUFBSSxLQUFLLE9BQU8sSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTlDLHFDQUFxQztRQUNyQyxJQUFJLElBQUksS0FBSyxJQUFJO1lBQUUsU0FBUztRQUU1QixJQUFJLElBQUksS0FBSyxTQUFTO1lBQUUsT0FBTyxL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
package/esm/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
  }