pw-js-world 0.4.3-dev.d102cb4 → 0.4.4-dev.22e78f4

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/Constants.d.ts CHANGED
@@ -3,3 +3,19 @@ export declare enum LayerType {
3
3
  Foreground = 1,
4
4
  Overlay = 2
5
5
  }
6
+ export declare enum EffectId {
7
+ JumpHeight = 0,
8
+ Fly = 1,
9
+ Speed = 2,
10
+ Invulnerability = 3,
11
+ Curse = 4,
12
+ Zombie = 5,
13
+ Poison = 6,
14
+ GravityForce = 7,
15
+ MultiJump = 8,
16
+ /**
17
+ * Left = 1, Up = 2, Right = 3.
18
+ */
19
+ GravityDirection = 9
20
+ }
21
+ export declare const MAX_WORLD_BLOCK_PLACED_PACKET_POSITION_SIZE = 200;
package/cm/Constants.js CHANGED
@@ -1,10 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- 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";
7
7
  LayerType[LayerType["Foreground"] = 1] = "Foreground";
8
8
  LayerType[LayerType["Overlay"] = 2] = "Overlay";
9
9
  })(LayerType || (exports.LayerType = LayerType = {}));
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL0NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLFNBSVg7QUFKRCxXQUFZLFNBQVM7SUFDakIscURBQVUsQ0FBQTtJQUNWLHFEQUFVLENBQUE7SUFDViwrQ0FBTyxDQUFBO0FBQ1gsQ0FBQyxFQUpXLFNBQVMseUJBQVQsU0FBUyxRQUlwQiJ9
10
+ var EffectId;
11
+ (function (EffectId) {
12
+ EffectId[EffectId["JumpHeight"] = 0] = "JumpHeight";
13
+ EffectId[EffectId["Fly"] = 1] = "Fly";
14
+ EffectId[EffectId["Speed"] = 2] = "Speed";
15
+ EffectId[EffectId["Invulnerability"] = 3] = "Invulnerability";
16
+ EffectId[EffectId["Curse"] = 4] = "Curse";
17
+ EffectId[EffectId["Zombie"] = 5] = "Zombie";
18
+ EffectId[EffectId["Poison"] = 6] = "Poison";
19
+ EffectId[EffectId["GravityForce"] = 7] = "GravityForce";
20
+ EffectId[EffectId["MultiJump"] = 8] = "MultiJump";
21
+ /**
22
+ * Left = 1, Up = 2, Right = 3.
23
+ */
24
+ EffectId[EffectId["GravityDirection"] = 9] = "GravityDirection";
25
+ })(EffectId || (exports.EffectId = EffectId = {}));
26
+ exports.MAX_WORLD_BLOCK_PLACED_PACKET_POSITION_SIZE = 200;
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL0NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLFNBSVg7QUFKRCxXQUFZLFNBQVM7SUFDakIscURBQVUsQ0FBQTtJQUNWLHFEQUFVLENBQUE7SUFDViwrQ0FBTyxDQUFBO0FBQ1gsQ0FBQyxFQUpXLFNBQVMseUJBQVQsU0FBUyxRQUlwQjtBQUVELElBQVksUUFjWDtBQWRELFdBQVksUUFBUTtJQUNoQixtREFBVSxDQUFBO0lBQ1YscUNBQUcsQ0FBQTtJQUNILHlDQUFLLENBQUE7SUFDTCw2REFBZSxDQUFBO0lBQ2YseUNBQUssQ0FBQTtJQUNMLDJDQUFNLENBQUE7SUFDTiwyQ0FBTSxDQUFBO0lBQ04sdURBQVksQ0FBQTtJQUNaLGlEQUFTLENBQUE7SUFDVDs7T0FFRztJQUNILCtEQUFnQixDQUFBO0FBQ3BCLENBQUMsRUFkVyxRQUFRLHdCQUFSLFFBQVEsUUFjbkI7QUFDWSxRQUFBLDJDQUEyQyxHQUFHLEdBQUcsQ0FBQyJ9
package/cm/Player.d.ts CHANGED
@@ -1,18 +1,19 @@
1
1
  import type { ProtoGen } from "pw-js-api";
2
2
  import type { Point } from "./types/index.js";
3
+ import { EffectId } from "./Constants.js";
3
4
  export interface IPlayer {
4
5
  /**
5
6
  * ID of the player.
6
7
  */
7
- playerId: number;
8
+ readonly playerId: number;
8
9
  /**
9
10
  * ID of the player's account.
10
11
  */
11
- accountId: string;
12
+ readonly accountId: string;
12
13
  /**
13
14
  * Name of the player.
14
15
  */
15
- username: string;
16
+ readonly username: string;
16
17
  /**
17
18
  * ID of the player's equipped smiley.
18
19
  */
@@ -34,7 +35,7 @@ export interface IPlayer {
34
35
  /**
35
36
  * If player is the world owner.
36
37
  */
37
- isWorldOwner: boolean;
38
+ readonly isWorldOwner: boolean;
38
39
  /**
39
40
  * Rights
40
41
  */
@@ -46,7 +47,7 @@ export interface IPlayer {
46
47
  /**
47
48
  * List of active effects the player has.
48
49
  */
49
- effects: PlayerEffect[];
50
+ effects: Map<number, PlayerEffect>;
50
51
  /**
51
52
  * If this player is the bot.
52
53
  */
@@ -76,13 +77,18 @@ export interface IPlayerRights {
76
77
  }
77
78
  export interface IPlayerWorldState {
78
79
  /**
79
- * Number of gold coins the player has.
80
- */
81
- coinsGold: number;
82
- /**
83
- * Number of blue coins the player has.
80
+ * Stores the current collected coins the player has.
84
81
  */
85
- coinsBlue: number;
82
+ coins: {
83
+ /**
84
+ * Number of gold coins the player has.
85
+ */
86
+ gold: number;
87
+ /**
88
+ * Number of blue coins the player has.
89
+ */
90
+ blue: number;
91
+ };
86
92
  /**
87
93
  * Number of times the player died.
88
94
  */
@@ -160,7 +166,7 @@ export default class Player {
160
166
  */
161
167
  isFriend: boolean;
162
168
  /**
163
- * Position of the user.
169
+ * Current last known position of the player.
164
170
  *
165
171
  * Note: This helper does not simulate physics so positions will always be inaccurate.
166
172
  */
@@ -170,7 +176,7 @@ export default class Player {
170
176
  */
171
177
  isWorldOwner: boolean;
172
178
  /**
173
- * Rights
179
+ * Player's rights in the world.
174
180
  */
175
181
  rights: IPlayerRights;
176
182
  /**
@@ -180,12 +186,15 @@ export default class Player {
180
186
  /**
181
187
  * List of active effects the player has.
182
188
  */
183
- effects: PlayerEffect[];
189
+ effects: Map<EffectId, PlayerEffect>;
184
190
  /**
185
191
  * If this player is the bot.
186
192
  */
187
193
  isMe: boolean;
188
- constructor(props: ProtoGen.PlayerProperties, states?: IPlayerWorldState | boolean);
194
+ constructor(props: ProtoGen.PlayerProperties, states?: (Omit<ProtoGen.PlayerWorldState, "switches" | "counters"> & {
195
+ switches: boolean[];
196
+ counters: PlayerCounters;
197
+ }) | boolean);
189
198
  /**
190
199
  * This is destructive, this is only for on reset packet.
191
200
  */
@@ -199,7 +208,7 @@ export declare class PlayerEffect {
199
208
  /**
200
209
  * The ID of the effect.
201
210
  */
202
- effectId: number;
211
+ effectId: EffectId;
203
212
  /**
204
213
  * If applicable, the duration of the effect.
205
214
  */
@@ -223,6 +232,11 @@ export declare class PlayerEffect {
223
232
  * Note: If this effect is non timed, this will return infinity.
224
233
  */
225
234
  get remaining(): number;
235
+ /**
236
+ * @ignore
237
+ */
238
+ _update(obj: Partial<IPlayerEffect>): void;
239
+ toJSON(): IPlayerEffect;
226
240
  }
227
241
  /**
228
242
  * Index based
package/cm/Player.js CHANGED
@@ -4,10 +4,11 @@ exports.PlayerCounters = exports.PlayerEffect = void 0;
4
4
  const Misc_js_1 = require("./util/Misc.js");
5
5
  class Player {
6
6
  constructor(props, states) {
7
+ var _a, _b, _c;
7
8
  /**
8
9
  * List of active effects the player has.
9
10
  */
10
- this.effects = [];
11
+ this.effects = new Map();
11
12
  /**
12
13
  * If this player is the bot.
13
14
  */
@@ -17,9 +18,9 @@ class Player {
17
18
  this.isFriend = props.isFriend;
18
19
  this.isWorldOwner = props.isWorldOwner;
19
20
  this.playerId = props.playerId;
20
- this.position = props.position ? {
21
- x: props.position.x,
22
- y: props.position.y
21
+ this.position = ((_a = props.lastMovementPacket) === null || _a === void 0 ? void 0 : _a.position) ? {
22
+ x: (_b = props.lastMovementPacket) === null || _b === void 0 ? void 0 : _b.position.x,
23
+ y: (_c = props.lastMovementPacket) === null || _c === void 0 ? void 0 : _c.position.y
23
24
  } : undefined;
24
25
  if (!props.rights)
25
26
  this.resetRights();
@@ -43,8 +44,10 @@ class Player {
43
44
  }
44
45
  else
45
46
  this.states = {
46
- coinsBlue: states.coinsBlue,
47
- coinsGold: states.coinsGold,
47
+ coins: {
48
+ blue: states.coinsBlue,
49
+ gold: states.coinsGold,
50
+ },
48
51
  collectedItems: (0, Misc_js_1.map)(states.collectedItems, v => ({ x: v.x, y: v.y })),
49
52
  deaths: states.deaths,
50
53
  godmode: states.godmode,
@@ -61,8 +64,10 @@ class Player {
61
64
  */
62
65
  resetState() {
63
66
  this.states = {
64
- coinsBlue: 0,
65
- coinsGold: 0,
67
+ coins: {
68
+ blue: 0,
69
+ gold: 0
70
+ },
66
71
  collectedItems: [],
67
72
  deaths: 0,
68
73
  godmode: false,
@@ -113,6 +118,23 @@ class PlayerEffect {
113
118
  return Infinity;
114
119
  return Math.max(0, Date.now() - (this.triggeredAt + this.duration));
115
120
  }
121
+ /**
122
+ * @ignore
123
+ */
124
+ _update(obj) {
125
+ if (obj.duration !== undefined)
126
+ this.duration = obj.duration;
127
+ if (obj.strength !== undefined)
128
+ this.strength = obj.strength;
129
+ }
130
+ toJSON() {
131
+ const obj = { effectId: this.effectId };
132
+ if (this.duration)
133
+ obj["duration"] = this.duration;
134
+ if (this.strength)
135
+ obj["strength"] = this.strength;
136
+ return obj;
137
+ }
116
138
  }
117
139
  exports.PlayerEffect = PlayerEffect;
118
140
  /**
@@ -151,4 +173,4 @@ class PlayerCounters {
151
173
  }
152
174
  }
153
175
  exports.PlayerCounters = PlayerCounters;
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL1BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSw0Q0FBcUM7QUE4SXJDLE1BQXFCLE1BQU07SUFzRHZCLFlBQVksS0FBZ0MsRUFBRSxNQUFvQztRQVZsRjs7V0FFRztRQUNILFlBQU8sR0FBa0IsRUFBRSxDQUFDO1FBRTVCOztXQUVHO1FBQ0gsU0FBSSxHQUFZLEtBQUssQ0FBQztRQUdsQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFDdkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDN0IsQ0FBQyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuQixDQUFDLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVkLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzs7WUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRztnQkFDZixpQkFBaUIsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLGlCQUFpQjtnQkFDakQsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0I7Z0JBQzNELE9BQU8sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU87Z0JBQzdCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU07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
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL1BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSw0Q0FBcUM7QUFvSnJDLE1BQXFCLE1BQU07SUFzRHZCLFlBQVksS0FBZ0MsRUFBRSxNQUErSDs7UUFWN0s7O1dBRUc7UUFDSCxZQUFPLEdBQStCLElBQUksR0FBRyxFQUFFLENBQUM7UUFFaEQ7O1dBRUc7UUFDSCxTQUFJLEdBQVksS0FBSyxDQUFDO1FBR2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNqQyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLGtCQUFrQiwwQ0FBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDO1lBQ2pELENBQUMsRUFBRSxNQUFBLEtBQUssQ0FBQyxrQkFBa0IsMENBQUUsUUFBUSxDQUFDLENBQUM7WUFDdkMsQ0FBQyxFQUFFLE1BQUEsS0FBSyxDQUFDLGtCQUFrQiwwQ0FBRSxRQUFRLENBQUMsQ0FBQztTQUMxQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07WUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7O1lBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUc7Z0JBQ2YsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUI7Z0JBQ2pELHNCQUFzQixFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsc0JBQXNCO2dCQUMzRCxPQUFPLEVB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
package/cm/util/Misc.d.ts CHANGED
@@ -1,7 +1,13 @@
1
- import type { LayerType } from "../Constants";
1
+ import { type LayerType } from "../Constants.js";
2
2
  import type { BlockArg, Point, SendableBlockPacket } from "../types";
3
- import Block from "../Block";
4
- import type { BlockKeys } from "pw-js-api";
3
+ import Block from "../Block.js";
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");
10
- const Block_1 = tslib_1.__importDefault(require("../Block"));
13
+ const Constants_js_1 = require("../Constants.js");
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,13 +106,13 @@ function findIndex(arr, pred) {
50
106
  }
51
107
  return -1;
52
108
  }
53
- function createBlockPacket(blockId, layer, pos, ...args) {
54
- if (blockId instanceof Block_1.default) {
109
+ function createBlockPacket(blockId, layer, pos, args) {
110
+ if (blockId instanceof Block_js_1.default) {
55
111
  args = blockId.args;
56
112
  blockId = blockId.bId;
57
113
  }
58
114
  else if (typeof blockId !== "number") {
59
- blockId = Block_1.default.getIdByName(blockId);
115
+ blockId = Block_js_1.default.getIdByName(blockId);
60
116
  }
61
117
  if (blockId === undefined)
62
118
  throw Error("Unknown block ID");
@@ -69,7 +125,8 @@ function createBlockPacket(blockId, layer, pos, ...args) {
69
125
  blockId,
70
126
  layer,
71
127
  positions: pos,
72
- extraFields: Block_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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlzYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlsL01pc2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFLQSw0Q0FnQkM7QUFFRCxrQkFXQztBQUVELG9CQU9DO0FBRUQsOEJBT0M7QUFPRCw4Q0FxQkM7QUFNRCxnREF5QkM7O0FBN0dELDZEQUE2QjtBQUc3QixTQUFnQixnQkFBZ0IsQ0FBQyxDQUFhLEVBQUUsQ0FBYTtJQUN6RCxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNWLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVELElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEMsT0FBTyxLQUFLLENBQUE7SUFDaEIsQ0FBQztJQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDaEIsT0FBTyxLQUFLLENBQUE7UUFDaEIsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQTtBQUNmLENBQUM7QUFFRCxTQUFnQixHQUFHLENBQU8sR0FBMkIsRUFBRSxFQUE0QztJQUMvRixNQUFNLEdBQUcsR0FBTyxFQUFFLENBQUM7SUFFbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFFeEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzdDLEdB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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
  }