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 +16 -0
- package/cm/Constants.js +19 -2
- package/cm/Player.d.ts +30 -16
- package/cm/Player.js +31 -9
- package/cm/util/Misc.d.ts +24 -4
- package/cm/util/Misc.js +114 -13
- package/esm/Block.d.ts +20 -51
- package/esm/Block.js +89 -69
- package/esm/Constants.d.ts +16 -0
- package/esm/Constants.js +18 -1
- package/esm/Helper.d.ts +2 -0
- package/esm/Helper.js +114 -52
- package/esm/Player.d.ts +30 -16
- package/esm/Player.js +31 -9
- package/esm/Structure.d.ts +14 -4
- package/esm/Structure.js +46 -18
- package/esm/types/index.d.ts +3 -2
- package/esm/util/Misc.d.ts +24 -4
- package/esm/util/Misc.js +109 -11
- package/package.json +2 -4
- package/cm/Block.d.ts +0 -119
- package/cm/Block.js +0 -183
- package/cm/Helper.d.ts +0 -119
- package/cm/Helper.js +0 -507
- package/cm/Structure.d.ts +0 -120
- package/cm/Structure.js +0 -218
- package/cm/index.d.ts +0 -9
- package/cm/index.js +0 -26
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
|
-
|
|
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
|
-
*
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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?:
|
|
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:
|
|
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
|
-
|
|
47
|
-
|
|
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
|
-
|
|
65
|
-
|
|
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,
|
|
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
|
|
1
|
+
import { type LayerType } from "../Constants.js";
|
|
2
2
|
import type { BlockArg, Point, SendableBlockPacket } from "../types";
|
|
3
|
-
import Block from "../Block";
|
|
4
|
-
import type
|
|
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[],
|
|
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
|
|
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,
|
|
54
|
-
if (blockId instanceof
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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
|
-
|
|
92
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
7
|
+
* NOTE as of October 2025, this is an object NOT an array.
|
|
11
8
|
*
|
|
12
|
-
*
|
|
9
|
+
* Stores the arguments
|
|
13
10
|
*/
|
|
14
|
-
|
|
11
|
+
args: Record<string, BlockArg>;
|
|
12
|
+
constructor(bId: number | BlockKeys | string, args?: BlockArg[] | OmitRecursively<Record<string, ProtoGen.BlockFieldValue>, "$typeName" | "$unknown">);
|
|
15
13
|
/**
|
|
16
|
-
*
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
|
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
|
|
50
|
-
|
|
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
|
|
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
|
|
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
|
|
77
|
+
static getFieldsByBlockId(blockId: number): AnyBlockField[];
|
|
109
78
|
/**
|
|
110
|
-
* Returns the
|
|
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
|
|
87
|
+
static getFieldsByPaletteId(paletteId: string): AnyBlockField[];
|
|
119
88
|
}
|