pw-js-world 0.4.4-dev.d5503ce → 0.4.5-dev.5a8cfff
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cm/Block.d.ts +37 -47
- package/cm/Block.js +124 -66
- package/cm/Constants.d.ts +1 -0
- package/cm/Constants.js +3 -2
- package/cm/Helper.d.ts +2 -0
- package/cm/Helper.js +53 -16
- package/cm/Player.d.ts +19 -11
- package/cm/Player.js +9 -5
- package/cm/Structure.d.ts +11 -1
- package/cm/Structure.js +55 -16
- package/cm/util/Error.d.ts +55 -0
- package/cm/util/Error.js +44 -2
- package/cm/util/Misc.d.ts +23 -3
- package/cm/util/Misc.js +111 -10
- package/esm/Block.d.ts +37 -47
- package/esm/Block.js +125 -66
- package/esm/Constants.d.ts +1 -0
- package/esm/Constants.js +2 -1
- package/esm/Helper.d.ts +2 -0
- package/esm/Helper.js +53 -16
- package/esm/Player.d.ts +19 -11
- package/esm/Player.js +9 -5
- package/esm/Structure.d.ts +11 -1
- package/esm/Structure.js +55 -16
- package/esm/types/index.d.ts +3 -2
- package/esm/util/Error.d.ts +55 -0
- package/esm/util/Error.js +41 -1
- package/esm/util/Misc.d.ts +23 -3
- package/esm/util/Misc.js +108 -10
- package/package.json +2 -4
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
|
-
|
|
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
|
|
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
|
|
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");
|
|
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,
|
|
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
|
-
|
|
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,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
|
-
*
|
|
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>;
|
|
15
12
|
/**
|
|
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.
|
|
13
|
+
* NOTE: This is a deprecated form as the arrangement of fields/args for a block may change in the future.
|
|
21
14
|
*/
|
|
22
|
-
|
|
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
|
-
|
|
19
|
+
constructor(bId: number | BlockKeys | string, args?: Record<string, BlockArg>);
|
|
30
20
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
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
|
-
*
|
|
36
|
-
* - With Id
|
|
37
|
-
* - Type Byte omitted
|
|
24
|
+
* INTERNAL
|
|
38
25
|
*/
|
|
39
|
-
|
|
26
|
+
_initArgs(args: OmitRecursively<Record<string, ProtoGen.BlockFieldValue>, "$typeName" | "$unknown">): this;
|
|
40
27
|
/**
|
|
41
|
-
*
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
|
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
|
|
98
|
+
static getFieldsByBlockId(blockId: number): AnyBlockField[];
|
|
109
99
|
/**
|
|
110
|
-
* Returns the
|
|
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
|
|
108
|
+
static getFieldsByPaletteId(paletteId: string): AnyBlockField[];
|
|
119
109
|
}
|