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/Helper.js
DELETED
|
@@ -1,507 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
const pw_js_api_1 = require("pw-js-api");
|
|
5
|
-
const Block_js_1 = tslib_1.__importDefault(require("./Block.js"));
|
|
6
|
-
const BufferReader_js_1 = tslib_1.__importDefault(require("./BufferReader.js"));
|
|
7
|
-
const Player_js_1 = tslib_1.__importStar(require("./Player.js"));
|
|
8
|
-
const Structure_js_1 = require("./Structure.js");
|
|
9
|
-
const Error_js_1 = require("./util/Error.js");
|
|
10
|
-
/**
|
|
11
|
-
* To use this helper, you must first create an instance of this,
|
|
12
|
-
*
|
|
13
|
-
* then: <PWGameClient>.addCallback("raw", helper.onRawPacketRecv)
|
|
14
|
-
*/
|
|
15
|
-
class PWGameWorldHelper {
|
|
16
|
-
constructor() {
|
|
17
|
-
/**
|
|
18
|
-
* Arrays of blocks (by layer, x, y)
|
|
19
|
-
*/
|
|
20
|
-
this.blocks = [[], [], []]; //Block[][][] = [];
|
|
21
|
-
this.players = new Map();
|
|
22
|
-
this.globalSwitches = [];
|
|
23
|
-
this._width = 0;
|
|
24
|
-
this._height = 0;
|
|
25
|
-
this._init = false;
|
|
26
|
-
this._selfPlayerId = -1;
|
|
27
|
-
/**
|
|
28
|
-
* This must go in .use() of the main PW-JS-API Game Client class.
|
|
29
|
-
*
|
|
30
|
-
* <PWGameClient>.use(<PWGameWorldHelper>.receiveHook)
|
|
31
|
-
*
|
|
32
|
-
* DO NOT PUT () AFTER RECEIVEHOOK
|
|
33
|
-
*/
|
|
34
|
-
this.receiveHook = (data) => {
|
|
35
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
36
|
-
const { packet } = data;
|
|
37
|
-
switch (packet.case) {
|
|
38
|
-
//#region World
|
|
39
|
-
case "playerInitPacket":
|
|
40
|
-
{
|
|
41
|
-
this._height = packet.value.worldHeight;
|
|
42
|
-
this._width = packet.value.worldWidth;
|
|
43
|
-
this._meta = (_a = packet.value.worldMeta) !== null && _a !== void 0 ? _a : null;
|
|
44
|
-
this.initialise(packet.value.worldData);
|
|
45
|
-
const props = packet.value.playerProperties;
|
|
46
|
-
this.globalSwitches = this.convertSwitchState(packet.value.globalSwitchState);
|
|
47
|
-
if (props) {
|
|
48
|
-
this.players.set(props.playerId, new Player_js_1.default(props, true));
|
|
49
|
-
this._selfPlayerId = props.playerId;
|
|
50
|
-
return { player: this.players.get(props.playerId) };
|
|
51
|
-
} //packet.value..playerProperties?.)
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
case "worldMetaUpdatePacket":
|
|
55
|
-
this._meta = (_b = packet.value.meta) !== null && _b !== void 0 ? _b : null;
|
|
56
|
-
return;
|
|
57
|
-
case "worldReloadedPacket":
|
|
58
|
-
this.initialise(packet.value.worldData);
|
|
59
|
-
return;
|
|
60
|
-
case "worldClearedPacket":
|
|
61
|
-
this.clear();
|
|
62
|
-
return;
|
|
63
|
-
case "worldBlockPlacedPacket":
|
|
64
|
-
{
|
|
65
|
-
if (!this._init)
|
|
66
|
-
return;
|
|
67
|
-
const { positions, layer, blockId, extraFields, playerId } = packet.value;
|
|
68
|
-
const player = this.players.get(playerId);
|
|
69
|
-
const oldBlocks = [];
|
|
70
|
-
const newBlocks = [];
|
|
71
|
-
const args = Block_js_1.default.deserializeArgs(BufferReader_js_1.default.from(extraFields)); //(blockId, BufferReader.from(extraFields), true);
|
|
72
|
-
for (let i = 0, len = positions.length; i < len; i++) {
|
|
73
|
-
const { x, y } = positions[i];
|
|
74
|
-
oldBlocks[i] = this.blocks[layer][x][y].clone();
|
|
75
|
-
newBlocks[i] = this.blocks[layer][x][y] = new Block_js_1.default(blockId, args);
|
|
76
|
-
}
|
|
77
|
-
if (!player)
|
|
78
|
-
return;
|
|
79
|
-
return { player, oldBlocks, newBlocks };
|
|
80
|
-
}
|
|
81
|
-
//#endregion
|
|
82
|
-
//#region Player
|
|
83
|
-
case "playerJoinedPacket":
|
|
84
|
-
{
|
|
85
|
-
const { properties, worldState } = packet.value;
|
|
86
|
-
let player;
|
|
87
|
-
if (properties && worldState) {
|
|
88
|
-
this.players.set(properties.playerId, player = new Player_js_1.default(properties, Object.assign(Object.assign({}, worldState), { switches: this.convertSwitchState(worldState.switches), counters: new Player_js_1.PlayerCounters(worldState.counters) })));
|
|
89
|
-
return { player };
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return;
|
|
93
|
-
case "playerLeftPacket":
|
|
94
|
-
{
|
|
95
|
-
const player = this.players.get(packet.value.playerId);
|
|
96
|
-
if (player) {
|
|
97
|
-
this.players.delete(packet.value.playerId);
|
|
98
|
-
return { player: player };
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return;
|
|
102
|
-
case "playerFacePacket":
|
|
103
|
-
{
|
|
104
|
-
const player = this.players.get((_c = packet.value) === null || _c === void 0 ? void 0 : _c.playerId);
|
|
105
|
-
if (player) {
|
|
106
|
-
const oldie = player.face;
|
|
107
|
-
player.face = packet.value.faceId;
|
|
108
|
-
return { player, oldFace: oldie }; //changes: { type: "face", oldValue: oldFace, newValue: player.face } };
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
return;
|
|
112
|
-
case "playerModModePacket":
|
|
113
|
-
case "playerGodModePacket":
|
|
114
|
-
{
|
|
115
|
-
const player = this.players.get((_d = packet.value) === null || _d === void 0 ? void 0 : _d.playerId);
|
|
116
|
-
if (player) {
|
|
117
|
-
const state = packet.case === "playerGodModePacket" ? "godmode" : "modmode";
|
|
118
|
-
const oldie = player.states[state];
|
|
119
|
-
player.states[state] = packet.value.enabled;
|
|
120
|
-
return { player, oldState: oldie }; //changes: { type: "face", oldValue: oldFace, newValue: player.face } };
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return;
|
|
124
|
-
case "playerAddEffectPacket":
|
|
125
|
-
case "playerRemoveEffectPacket":
|
|
126
|
-
case "playerResetEffectsPacket":
|
|
127
|
-
{
|
|
128
|
-
const player = this.players.get((_e = packet.value) === null || _e === void 0 ? void 0 : _e.playerId);
|
|
129
|
-
if (player) {
|
|
130
|
-
// const state = //packet.case === "playerGodModePacket" ? "godmode" : "modmode";
|
|
131
|
-
let effects = [];
|
|
132
|
-
if (packet.case === "playerAddEffectPacket") {
|
|
133
|
-
const eff = {
|
|
134
|
-
effectId: packet.value.effectId,
|
|
135
|
-
duration: packet.value.duration,
|
|
136
|
-
strength: packet.value.strength,
|
|
137
|
-
};
|
|
138
|
-
player.effects.push(new Player_js_1.PlayerEffect(eff));
|
|
139
|
-
return { player, effect: eff };
|
|
140
|
-
}
|
|
141
|
-
else if (packet.case === "playerRemoveEffectPacket") {
|
|
142
|
-
const eff = player.effects.findIndex(v => v.effectId === packet.value.effectId);
|
|
143
|
-
if (eff) {
|
|
144
|
-
effects = player.effects.splice(eff, 1);
|
|
145
|
-
return { player, effect: effects[0] };
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
return { player, effects: player.effects.splice(0) };
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
return;
|
|
154
|
-
case "playerMovedPacket":
|
|
155
|
-
{
|
|
156
|
-
const player = this.players.get((_f = packet.value) === null || _f === void 0 ? void 0 : _f.playerId);
|
|
157
|
-
if (player) {
|
|
158
|
-
if (packet.value.position) {
|
|
159
|
-
player.position = {
|
|
160
|
-
x: packet.value.position.x,
|
|
161
|
-
y: packet.value.position.y,
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
return { player }; //changes: { type: "face", oldValue: oldFace, newValue: player.face } };
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
return;
|
|
168
|
-
case "playerResetPacket":
|
|
169
|
-
{
|
|
170
|
-
const player = this.players.get((_g = packet.value) === null || _g === void 0 ? void 0 : _g.playerId);
|
|
171
|
-
if (player) {
|
|
172
|
-
player.resetState();
|
|
173
|
-
if (packet.value.position) {
|
|
174
|
-
player.position = {
|
|
175
|
-
x: packet.value.position.x,
|
|
176
|
-
y: packet.value.position.y,
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
return { player };
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
return;
|
|
183
|
-
case "playerRespawnPacket":
|
|
184
|
-
{
|
|
185
|
-
const player = this.players.get((_h = packet.value) === null || _h === void 0 ? void 0 : _h.playerId);
|
|
186
|
-
if (player) { // deaths also reflect in counters update packet
|
|
187
|
-
if (packet.value.position) {
|
|
188
|
-
player.position = {
|
|
189
|
-
x: packet.value.position.x,
|
|
190
|
-
y: packet.value.position.y,
|
|
191
|
-
};
|
|
192
|
-
}
|
|
193
|
-
return { player };
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
return;
|
|
197
|
-
case "playerUpdateRightsPacket":
|
|
198
|
-
{
|
|
199
|
-
const player = this.players.get((_j = packet.value) === null || _j === void 0 ? void 0 : _j.playerId);
|
|
200
|
-
if (player) {
|
|
201
|
-
if (packet.value.rights) {
|
|
202
|
-
player.rights = {
|
|
203
|
-
availableCommands: packet.value.rights.availableCommands,
|
|
204
|
-
canChangeWorldSettings: packet.value.rights.canChangeWorldSettings,
|
|
205
|
-
canEdit: packet.value.rights.canEdit,
|
|
206
|
-
canGod: packet.value.rights.canGod,
|
|
207
|
-
canToggleMinimap: packet.value.rights.canToggleMinimap,
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
else
|
|
211
|
-
player.resetRights();
|
|
212
|
-
return { player, rights: player.rights };
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
return;
|
|
216
|
-
case "playerTeamUpdatePacket":
|
|
217
|
-
{
|
|
218
|
-
const player = this.players.get((_k = packet.value) === null || _k === void 0 ? void 0 : _k.playerId);
|
|
219
|
-
if (player) {
|
|
220
|
-
const oldTeam = player.states.teamId;
|
|
221
|
-
player.states.teamId = packet.value.teamId;
|
|
222
|
-
return { player, oldTeam };
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
return;
|
|
226
|
-
case "playerCountersUpdatePacket":
|
|
227
|
-
{
|
|
228
|
-
const player = this.players.get((_l = packet.value) === null || _l === void 0 ? void 0 : _l.playerId);
|
|
229
|
-
if (player) {
|
|
230
|
-
const oldState = {
|
|
231
|
-
coinsBlue: player.states.coinsBlue,
|
|
232
|
-
coinsGold: player.states.coinsGold,
|
|
233
|
-
deaths: player.states.deaths,
|
|
234
|
-
};
|
|
235
|
-
player.states.coinsBlue = packet.value.blueCoins;
|
|
236
|
-
player.states.coinsGold = packet.value.coins;
|
|
237
|
-
player.states.deaths = packet.value.deaths;
|
|
238
|
-
return { player, oldState };
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
return;
|
|
242
|
-
case "playerTeleportedPacket":
|
|
243
|
-
{
|
|
244
|
-
const player = this.players.get((_m = packet.value) === null || _m === void 0 ? void 0 : _m.playerId);
|
|
245
|
-
if (player) {
|
|
246
|
-
if (packet.value.position)
|
|
247
|
-
player.position = {
|
|
248
|
-
x: packet.value.position.x,
|
|
249
|
-
y: packet.value.position.y,
|
|
250
|
-
};
|
|
251
|
-
return { player };
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
return;
|
|
255
|
-
case "globalSwitchChangedPacket":
|
|
256
|
-
case "playerLocalSwitchChangedPacket":
|
|
257
|
-
{
|
|
258
|
-
const player = this.players.get((_o = packet.value) === null || _o === void 0 ? void 0 : _o.playerId);
|
|
259
|
-
if (packet.case === "globalSwitchChangedPacket") {
|
|
260
|
-
this.globalSwitches[packet.value.switchId] = packet.value.switchEnabled;
|
|
261
|
-
}
|
|
262
|
-
if (player) {
|
|
263
|
-
if (packet.case === "playerLocalSwitchChangedPacket") {
|
|
264
|
-
player.states.switches[packet.value.switchId] = packet.value.switchEnabled;
|
|
265
|
-
}
|
|
266
|
-
return { player };
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
return;
|
|
270
|
-
case "globalSwitchResetPacket":
|
|
271
|
-
case "playerLocalSwitchResetPacket":
|
|
272
|
-
{
|
|
273
|
-
const player = this.players.get((_p = packet.value) === null || _p === void 0 ? void 0 : _p.playerId);
|
|
274
|
-
if (packet.case === "globalSwitchResetPacket") {
|
|
275
|
-
this.globalSwitches = this.globalSwitches.fill(false);
|
|
276
|
-
}
|
|
277
|
-
if (player) {
|
|
278
|
-
if (packet.case === "playerLocalSwitchResetPacket") {
|
|
279
|
-
player.states.switches.fill(packet.value.switchEnabled);
|
|
280
|
-
}
|
|
281
|
-
return { player };
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
return;
|
|
285
|
-
case "playerChatPacket":
|
|
286
|
-
case "playerDirectMessagePacket":
|
|
287
|
-
// case "playerDirectMessagePacket":
|
|
288
|
-
{
|
|
289
|
-
const player = this.players.get(packet.case === "playerChatPacket" ? (_q = packet.value) === null || _q === void 0 ? void 0 : _q.playerId : (packet.value.fromPlayerId === this._selfPlayerId ? packet.value.fromPlayerId : packet.value.targetPlayerId));
|
|
290
|
-
if (player) {
|
|
291
|
-
return { player };
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
return;
|
|
295
|
-
case "playerTouchBlockPacket":
|
|
296
|
-
{
|
|
297
|
-
const player = this.players.get(packet.value.playerId);
|
|
298
|
-
if (player && packet.value.position) {
|
|
299
|
-
const blockName = (_r = pw_js_api_1.PWApiClient.listBlocks) === null || _r === void 0 ? void 0 : _r[packet.value.blockId];
|
|
300
|
-
if (blockName === undefined)
|
|
301
|
-
throw new Error_js_1.MissingBlockError("Current block data might be outdated, restart application?", packet.value.blockId);
|
|
302
|
-
if (blockName.PaletteId === "COIN_GOLD" || blockName.PaletteId === "COIN_BLUE") {
|
|
303
|
-
player.states.collectedItems.push({
|
|
304
|
-
x: packet.value.position.x,
|
|
305
|
-
y: packet.value.position.y,
|
|
306
|
-
});
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
return player ? { player } : {};
|
|
310
|
-
}
|
|
311
|
-
case "playerCounterTransactionPacket":
|
|
312
|
-
{
|
|
313
|
-
const player = this.players.get(packet.value.playerId);
|
|
314
|
-
if (player) {
|
|
315
|
-
const oldScore = player.states.counters.scores[packet.value.counterId];
|
|
316
|
-
player.states.counters.scores[packet.value.counterId] = packet.value.count;
|
|
317
|
-
return { oldScore, diff: packet.value.count - oldScore, player };
|
|
318
|
-
}
|
|
319
|
-
return {};
|
|
320
|
-
}
|
|
321
|
-
//#endregion
|
|
322
|
-
}
|
|
323
|
-
return;
|
|
324
|
-
};
|
|
325
|
-
}
|
|
326
|
-
/**
|
|
327
|
-
* The current world's width.
|
|
328
|
-
*
|
|
329
|
-
* If you didn't put the hook before init, this may throw error.
|
|
330
|
-
*/
|
|
331
|
-
get width() {
|
|
332
|
-
if (this._width === -1)
|
|
333
|
-
throw Error("World not initialised, or was applied too late.");
|
|
334
|
-
return this._width;
|
|
335
|
-
}
|
|
336
|
-
/**
|
|
337
|
-
* The current world's height.
|
|
338
|
-
*
|
|
339
|
-
* If you didn't put the hook before init, this may throw error.
|
|
340
|
-
*/
|
|
341
|
-
get height() {
|
|
342
|
-
if (this._height === -1)
|
|
343
|
-
throw Error("World not initialised, or was applied too late.");
|
|
344
|
-
return this._height;
|
|
345
|
-
}
|
|
346
|
-
/**
|
|
347
|
-
* The current world's metadata.
|
|
348
|
-
*
|
|
349
|
-
* If you didn't put the hook before init, this may throw error.
|
|
350
|
-
*/
|
|
351
|
-
get meta() {
|
|
352
|
-
if (this._meta === undefined)
|
|
353
|
-
throw Error("World not initialised, or was applied too late.");
|
|
354
|
-
return this._meta;
|
|
355
|
-
}
|
|
356
|
-
/**
|
|
357
|
-
* If this helper is ready. When it's false, the helper will not return anything for any of the packets.
|
|
358
|
-
*/
|
|
359
|
-
get initialised() {
|
|
360
|
-
return this._init;
|
|
361
|
-
}
|
|
362
|
-
/**
|
|
363
|
-
* The bot's player object.
|
|
364
|
-
*
|
|
365
|
-
* If you didn't put the hook before init, this may throw error.
|
|
366
|
-
*/
|
|
367
|
-
get botPlayer() {
|
|
368
|
-
let player = this.players.get(this._selfPlayerId);
|
|
369
|
-
if (!player)
|
|
370
|
-
throw Error("Player not stored, hook may have been applied too late?");
|
|
371
|
-
return player;
|
|
372
|
-
}
|
|
373
|
-
/**
|
|
374
|
-
* The bot's player id in the world.
|
|
375
|
-
*
|
|
376
|
-
* If you didn't put the hook before init, this may throw error.
|
|
377
|
-
*/
|
|
378
|
-
get botPlayerId() {
|
|
379
|
-
if (this._selfPlayerId === -1)
|
|
380
|
-
throw Error("Player not stored, hook may have been applied too late.");
|
|
381
|
-
return this._selfPlayerId;
|
|
382
|
-
}
|
|
383
|
-
/**
|
|
384
|
-
* Internal function.
|
|
385
|
-
*/
|
|
386
|
-
initialise(bytes, width, height) {
|
|
387
|
-
if (width === undefined)
|
|
388
|
-
width = this.width;
|
|
389
|
-
if (height === undefined)
|
|
390
|
-
height = this.height;
|
|
391
|
-
this.blocks.splice(0);
|
|
392
|
-
for (let l = 0; l < 3; l++) {
|
|
393
|
-
this.blocks[l] = [];
|
|
394
|
-
for (let x = 0; x < width; x++) {
|
|
395
|
-
this.blocks[l][x] = [];
|
|
396
|
-
for (let y = 0; y < height; y++) {
|
|
397
|
-
this.blocks[l][x][y] = new Block_js_1.default(0);
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
this.deserialize(bytes);
|
|
402
|
-
}
|
|
403
|
-
/**
|
|
404
|
-
* Internal function.
|
|
405
|
-
*/
|
|
406
|
-
deserialize(bytes) {
|
|
407
|
-
const reader = bytes instanceof BufferReader_js_1.default ? bytes : BufferReader_js_1.default.from(bytes);
|
|
408
|
-
for (let l = 0; l < 3; l++) {
|
|
409
|
-
for (let x = 0; x < this.width; x++) {
|
|
410
|
-
for (let y = 0; y < this.height; y++) {
|
|
411
|
-
this.blocks[l][x][y] = Block_js_1.default.deserialize(reader);
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
this._init = true;
|
|
416
|
-
}
|
|
417
|
-
convertSwitchState(arr) {
|
|
418
|
-
const list = new Array(1000);
|
|
419
|
-
for (let i = 0; i < 1000; i++) {
|
|
420
|
-
list[i] = arr[i] === 1;
|
|
421
|
-
}
|
|
422
|
-
return list;
|
|
423
|
-
}
|
|
424
|
-
/**
|
|
425
|
-
* Internal function, this triggers when the world gets cleared.
|
|
426
|
-
*
|
|
427
|
-
* Clears the blocks map and promptly fill it with empty except the border which becomes basci gray.
|
|
428
|
-
*/
|
|
429
|
-
clear() {
|
|
430
|
-
this.blocks.splice(0);
|
|
431
|
-
// To prevent subtracting every single time, can be costly computation wise.
|
|
432
|
-
const lastWidth = this.width - 1;
|
|
433
|
-
const lastHeight = this.width - 1;
|
|
434
|
-
for (let l = 0; l < 3; l++) {
|
|
435
|
-
this.blocks[l] = [];
|
|
436
|
-
for (let x = 0; x < this.width; x++) {
|
|
437
|
-
this.blocks[l][x] = [];
|
|
438
|
-
for (let y = 0; y < this.height; y++) {
|
|
439
|
-
this.blocks[l][x][y] = new Block_js_1.default(l === 1 && (x === 0 || x === lastWidth || y === 0 || y === lastHeight) ? "BASIC_GRAY" : "EMPTY");
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
getBlockAt(x, y, l) {
|
|
445
|
-
if (typeof x !== "number") {
|
|
446
|
-
l = y;
|
|
447
|
-
y = x.y;
|
|
448
|
-
x = x.x;
|
|
449
|
-
}
|
|
450
|
-
if (l === undefined || l < 0 || l > 2)
|
|
451
|
-
throw Error("Unknown layer");
|
|
452
|
-
if (x < 0 || x >= this.width)
|
|
453
|
-
throw Error("X is outside the bound of the world.");
|
|
454
|
-
if (y < 0 || y >= this.height)
|
|
455
|
-
throw Error("Y is outside the bound of the world.");
|
|
456
|
-
return this.blocks[l][x][y];
|
|
457
|
-
}
|
|
458
|
-
getPlayer(id, isAccount) {
|
|
459
|
-
if (typeof id === "string") {
|
|
460
|
-
const players = this.getPlayers();
|
|
461
|
-
// all names are upper case
|
|
462
|
-
if (!isAccount)
|
|
463
|
-
id = id.toUpperCase();
|
|
464
|
-
for (let i = 0, len = players.length; i < len; i++) {
|
|
465
|
-
if (isAccount) {
|
|
466
|
-
if (players[i].accountId === id)
|
|
467
|
-
return players[i];
|
|
468
|
-
}
|
|
469
|
-
else if (players[i].username === id)
|
|
470
|
-
return players[i];
|
|
471
|
-
}
|
|
472
|
-
return undefined;
|
|
473
|
-
}
|
|
474
|
-
return this.players.get(id);
|
|
475
|
-
}
|
|
476
|
-
/**
|
|
477
|
-
* Returns the list of current players in the world.
|
|
478
|
-
*/
|
|
479
|
-
getPlayers() {
|
|
480
|
-
return Array.from(this.players.values());
|
|
481
|
-
}
|
|
482
|
-
/**
|
|
483
|
-
* This will return a DeserialisedStructure which will allow you to easily save to a file if you wish.
|
|
484
|
-
*
|
|
485
|
-
* The blocks are cloned and thus you're free to modify the blocks in the structure without the risk of it affecting this helper's blocks.
|
|
486
|
-
*
|
|
487
|
-
* NOTE: endX and endY are also included!
|
|
488
|
-
*/
|
|
489
|
-
sectionBlocks(startX, startY, endX, endY) {
|
|
490
|
-
const blocks = [[], [], []];
|
|
491
|
-
if (startX > endX)
|
|
492
|
-
throw Error("Starting X is greater than ending X");
|
|
493
|
-
if (startY > endY)
|
|
494
|
-
throw Error("Starting Y is greater than ending Y");
|
|
495
|
-
for (let l = 0; l < 3; l++) {
|
|
496
|
-
for (let x = startX, width = Math.min(endX, this.width); x <= width; x++) {
|
|
497
|
-
blocks[l][x - startX] = [];
|
|
498
|
-
for (let y = startY, height = Math.min(endY, this.height); y <= height; y++) {
|
|
499
|
-
blocks[l][x - startX][y - startY] = this.blocks[l][x][y].clone();
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
return new Structure_js_1.DeserialisedStructure(blocks, { width: endX - startX + 1, height: endY - startY + 1 });
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
exports.default = PWGameWorldHelper;
|
|
507
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL0hlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBeUU7QUFHekUsa0VBQStCO0FBQy9CLGdGQUE2QztBQUM3QyxpRUFBbUU7QUFHbkUsaURBQXVEO0FBQ3ZELDhDQUFvRDtBQUVwRDs7OztHQUlHO0FBQ0gsTUFBcUIsaUJBQWlCO0lBQXRDO1FBQ0k7O1dBRUc7UUFDSCxXQUFNLEdBQXNDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBLG1CQUFtQjtRQUU1RSxZQUFPLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFFcEMsbUJBQWMsR0FBYSxFQUFFLENBQUM7UUFHdEIsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUNYLFlBQU8sR0FBRyxDQUFDLENBQUM7UUFDWixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2Qsa0JBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQztRQThEM0I7Ozs7OztXQU1HO1FBQ0gsZ0JBQVcsR0FDUCxDQUFDLElBQTRCLEVBQUUsRUFBRTs7WUFFakMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztZQUV4QixRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDbEIsZUFBZTtnQkFDZixLQUFLLGtCQUFrQjtvQkFDbkIsQ0FBQzt3QkFDRyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO3dCQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO3dCQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQUEsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLG1DQUFJLElBQUksQ0FBQzt3QkFFNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUV4QyxN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
|
package/cm/Structure.d.ts
DELETED
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import Block from "./Block";
|
|
2
|
-
import type { BlockArg } from "./types";
|
|
3
|
-
/**
|
|
4
|
-
* This is external to the main Helper, it will allow developers to use the structure without needing to use helper if they so wish.
|
|
5
|
-
*
|
|
6
|
-
* All of the functions are static!
|
|
7
|
-
*/
|
|
8
|
-
export default class StructureHelper {
|
|
9
|
-
/**
|
|
10
|
-
* NOTE: If you're reading a file, you must get it then pass it to read.
|
|
11
|
-
*
|
|
12
|
-
* This is for reading the structure itself, if you have just the blocks (and width/height), you must use deserialiseStructBlocks;
|
|
13
|
-
*
|
|
14
|
-
* @param data Buffer representing the JSON structure itself.
|
|
15
|
-
*/
|
|
16
|
-
static read(data: Buffer | Uint8Array | IStructure): DeserialisedStructure;
|
|
17
|
-
/**
|
|
18
|
-
* If width or height are not provided, the structure may be trimmed (empty blocks).
|
|
19
|
-
*
|
|
20
|
-
* This is ideal if you want the trimmed structure in that case.
|
|
21
|
-
*/
|
|
22
|
-
static deserialiseStructBlocks(struct: IStructureBlocks, width?: number, height?: number): {
|
|
23
|
-
blocks: [Block[][], Block[][], Block[][]];
|
|
24
|
-
width: number;
|
|
25
|
-
height: number;
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Represents the structure in its deserialised form, allows for modification
|
|
30
|
-
*/
|
|
31
|
-
export declare class DeserialisedStructure {
|
|
32
|
-
blocks: [Block[][], Block[][], Block[][]];
|
|
33
|
-
width: number;
|
|
34
|
-
height: number;
|
|
35
|
-
constructor(blocks: [Block[][], Block[][], Block[][]], struct: Omit<IStructure, "version" | "blocks">);
|
|
36
|
-
/**
|
|
37
|
-
* This will return a new object that meets IStructureBlocks interface.
|
|
38
|
-
*/
|
|
39
|
-
getSerialisedBlocks(): IStructureBlocks;
|
|
40
|
-
/**
|
|
41
|
-
* This will return the structure form, giving you the freedom to choose your own way of saving.
|
|
42
|
-
*/
|
|
43
|
-
toStruct(): IStructure;
|
|
44
|
-
/**
|
|
45
|
-
* Buffer form of the structure.
|
|
46
|
-
*
|
|
47
|
-
* Ideal for server runtimes (and browser if polyfilled)
|
|
48
|
-
*/
|
|
49
|
-
toBuffer(): Buffer<ArrayBuffer>;
|
|
50
|
-
/**
|
|
51
|
-
* The JSON stringified of the structure.
|
|
52
|
-
*/
|
|
53
|
-
toJSONString(space?: number): string;
|
|
54
|
-
/**
|
|
55
|
-
* (This is for browser client or Bun)
|
|
56
|
-
*
|
|
57
|
-
* Blob form of the structure.
|
|
58
|
-
*/
|
|
59
|
-
toBlob(): Blob;
|
|
60
|
-
/**
|
|
61
|
-
* Uint8Array form of the structure.
|
|
62
|
-
*/
|
|
63
|
-
toBytes(): Uint8Array<ArrayBufferLike>;
|
|
64
|
-
/**
|
|
65
|
-
* This will return a list of packets containing all of the blocks.
|
|
66
|
-
*/
|
|
67
|
-
toPackets(x: number, y: number): import("./types").SendableBlockPacket[];
|
|
68
|
-
}
|
|
69
|
-
export interface IStructure {
|
|
70
|
-
/**
|
|
71
|
-
* Version of the structure object, not the world.
|
|
72
|
-
*/
|
|
73
|
-
version: number;
|
|
74
|
-
/**
|
|
75
|
-
* The maximum width of the structure.
|
|
76
|
-
*/
|
|
77
|
-
width: number;
|
|
78
|
-
/**
|
|
79
|
-
* The maximum height of the structure.
|
|
80
|
-
*/
|
|
81
|
-
height: number;
|
|
82
|
-
/**
|
|
83
|
-
* Object containing the mappings and the blocks.
|
|
84
|
-
*/
|
|
85
|
-
blocks: IStructureBlocks;
|
|
86
|
-
}
|
|
87
|
-
export interface IStructureBlocks {
|
|
88
|
-
/**
|
|
89
|
-
* Index starts at 0, this is the mapping of blocks (in block name ids in UPPER_CASE)
|
|
90
|
-
*/
|
|
91
|
-
mapping: string[];
|
|
92
|
-
/**
|
|
93
|
-
* Index starts at 0, this is the mapping of args (2nd elements and beyond in each block pos in blocks)
|
|
94
|
-
*/
|
|
95
|
-
args: BlockArg[];
|
|
96
|
-
/**
|
|
97
|
-
* If array, it's index corresponds to the mapping, the element will be array of locations and args indexed by layers (while impossible, it's for possible compatibility with mirrored blocks, foreground block in background layer etc)
|
|
98
|
-
*
|
|
99
|
-
* If argMapping exists in a block, it'll be an index that corresponds to the block's arguments in args array.
|
|
100
|
-
*
|
|
101
|
-
* If string, it's the encoded version of the object, use atob then JSON parse.
|
|
102
|
-
*/
|
|
103
|
-
blocks: [
|
|
104
|
-
[
|
|
105
|
-
x: number,
|
|
106
|
-
y: number,
|
|
107
|
-
...argMapping: number[]
|
|
108
|
-
][],
|
|
109
|
-
[
|
|
110
|
-
x: number,
|
|
111
|
-
y: number,
|
|
112
|
-
...argMapping: number[]
|
|
113
|
-
][],
|
|
114
|
-
[
|
|
115
|
-
x: number,
|
|
116
|
-
y: number,
|
|
117
|
-
...argMapping: number[]
|
|
118
|
-
][]
|
|
119
|
-
][];
|
|
120
|
-
}
|