pw-js-world 0.0.4 → 0.0.5-dev.24aedef

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.
@@ -1,7 +1,7 @@
1
1
  import { BlockNames } from "pw-js-api";
2
- import type { BlockArg, Point, SendableBlockPacket } from "./types";
3
- import BufferReader, { ComponentTypeHeader } from "./BufferReader";
4
- import { LayerType } from "./Constants";
2
+ import type { BlockArg, Point, SendableBlockPacket } from "./types/index.js";
3
+ import BufferReader, { ComponentTypeHeader } from "./BufferReader.js";
4
+ import { LayerType } from "./Constants.js";
5
5
  export default class Block {
6
6
  bId: number;
7
7
  args: BlockArg[];
package/cm/Block.js ADDED
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BlockArgsHeadings = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const pw_js_api_1 = require("pw-js-api");
6
+ const BufferReader_js_1 = tslib_1.__importStar(require("./BufferReader.js"));
7
+ class Block {
8
+ constructor(bId, args) {
9
+ this.args = [];
10
+ if (typeof bId === "number")
11
+ this.bId = bId;
12
+ else {
13
+ this.bId = pw_js_api_1.BlockNames[bId];
14
+ }
15
+ if (args)
16
+ this.args = args;
17
+ }
18
+ /**
19
+ * I mean... Just use .args.length !== 0 to see if it has args.
20
+ *
21
+ * But anyway, this will return true if there is at least one args, otherwise false.
22
+ */
23
+ hasArgs() {
24
+ return this.args.length !== 0;
25
+ }
26
+ /**
27
+ * For helper.
28
+ *
29
+ * This is in Block class for organisation.
30
+ *
31
+ * This will deserialise by using the reader to get the block ID then retrieve the args, if applicable.
32
+ */
33
+ static deserialize(reader) {
34
+ return new Block(reader.readUInt32LE()).deserializeArgs(reader);
35
+ }
36
+ deserializeArgs(reader, flag = false) {
37
+ var _a;
38
+ const format = exports.BlockArgsHeadings[this.name];
39
+ for (let i = 0; i < ((_a = format === null || format === void 0 ? void 0 : format.length) !== null && _a !== void 0 ? _a : 0); i++) {
40
+ if (flag) {
41
+ reader.expectUInt8(format[i]);
42
+ }
43
+ this.args[i] = reader.read(format[i], !flag);
44
+ }
45
+ return this;
46
+ }
47
+ /**
48
+ * For helper.
49
+ *
50
+ * This is in Block class for organisation.
51
+ */
52
+ static deserializeArgs(blockId, reader, flag = false) {
53
+ var _a;
54
+ const format = exports.BlockArgsHeadings[pw_js_api_1.BlockNames[blockId]];
55
+ const args = [];
56
+ for (let i = 0; i < ((_a = format === null || format === void 0 ? void 0 : format.length) !== null && _a !== void 0 ? _a : 0); i++) {
57
+ if (flag) {
58
+ reader.expectUInt8(format[i]);
59
+ }
60
+ args[i] = reader.read(format[i], !flag);
61
+ }
62
+ return args;
63
+ }
64
+ static serializeArgs(bId, args, options) {
65
+ var _a;
66
+ options || (options = {
67
+ endian: "little",
68
+ writeId: true,
69
+ readTypeByte: false,
70
+ });
71
+ const buffer = [];
72
+ if (options.writeId) {
73
+ const idBuffer = Buffer.alloc(4);
74
+ idBuffer.writeUInt32LE(bId);
75
+ buffer.push(idBuffer);
76
+ }
77
+ const blockData = (_a = exports.BlockArgsHeadings[pw_js_api_1.BlockNames[bId]]) !== null && _a !== void 0 ? _a : [];
78
+ for (let i = 0, len = blockData.length; i < len; i++) {
79
+ const entry = BufferReader_js_1.default.Dynamic(blockData[i], args[i]);
80
+ buffer.push(entry);
81
+ }
82
+ return Buffer.concat(buffer);
83
+ }
84
+ toPacket(pos, y, layer) {
85
+ if (typeof pos === "number") {
86
+ pos = [{
87
+ x: pos, y
88
+ }];
89
+ layer = layer !== null && layer !== void 0 ? layer : 0;
90
+ }
91
+ else
92
+ layer = y !== null && y !== void 0 ? y : 0;
93
+ return {
94
+ isFillOperation: false,
95
+ blockId: this.bId,
96
+ layer,
97
+ positions: pos,
98
+ extraFields: Block.serializeArgs(this.bId, this.args, { endian: "big", writeId: false, readTypeByte: true })
99
+ };
100
+ }
101
+ /**
102
+ * This will return the block name in UPPER_CASE form.
103
+ *
104
+ * For eg EFFECTS_INVULNERABILITY.
105
+ */
106
+ get name() {
107
+ return pw_js_api_1.BlockNames[this.bId];
108
+ }
109
+ clone(obj = false) {
110
+ if (obj === true)
111
+ return { bId: this.bId, args: this.args, name: this.name };
112
+ return new Block(this.bId, this.args);
113
+ }
114
+ }
115
+ exports.default = Block;
116
+ /**
117
+ * This mapping contains definitions of block data which require additional
118
+ * arguments to be sent or received with.
119
+ */
120
+ exports.BlockArgsHeadings = {
121
+ COIN_GOLD_DOOR: [BufferReader_js_1.ComponentTypeHeader.Int32],
122
+ COIN_BLUE_DOOR: [BufferReader_js_1.ComponentTypeHeader.Int32],
123
+ COIN_GOLD_GATE: [BufferReader_js_1.ComponentTypeHeader.Int32],
124
+ COIN_BLUE_GATE: [BufferReader_js_1.ComponentTypeHeader.Int32],
125
+ EFFECTS_JUMP_HEIGHT: [BufferReader_js_1.ComponentTypeHeader.Int32],
126
+ EFFECTS_FLY: [BufferReader_js_1.ComponentTypeHeader.Boolean],
127
+ EFFECTS_SPEED: [BufferReader_js_1.ComponentTypeHeader.Int32],
128
+ EFFECTS_INVULNERABILITY: [BufferReader_js_1.ComponentTypeHeader.Boolean],
129
+ EFFECTS_CURSE: [BufferReader_js_1.ComponentTypeHeader.Int32],
130
+ EFFECTS_ZOMBIE: [BufferReader_js_1.ComponentTypeHeader.Int32],
131
+ EFFECTS_GRAVITYFORCE: [BufferReader_js_1.ComponentTypeHeader.Int32],
132
+ EFFECTS_MULTI_JUMP: [BufferReader_js_1.ComponentTypeHeader.Int32],
133
+ // gravity effects no data
134
+ // effects off
135
+ // effects zombie
136
+ TOOL_PORTAL_WORLD_SPAWN: [BufferReader_js_1.ComponentTypeHeader.Int32],
137
+ SIGN_NORMAL: [BufferReader_js_1.ComponentTypeHeader.String],
138
+ SIGN_RED: [BufferReader_js_1.ComponentTypeHeader.String],
139
+ SIGN_GREEN: [BufferReader_js_1.ComponentTypeHeader.String],
140
+ SIGN_BLUE: [BufferReader_js_1.ComponentTypeHeader.String],
141
+ SIGN_GOLD: [BufferReader_js_1.ComponentTypeHeader.String],
142
+ PORTAL: [BufferReader_js_1.ComponentTypeHeader.Int32, BufferReader_js_1.ComponentTypeHeader.Int32, BufferReader_js_1.ComponentTypeHeader.Int32],
143
+ PORTAL_INVISIBLE: [BufferReader_js_1.ComponentTypeHeader.Int32, BufferReader_js_1.ComponentTypeHeader.Int32, BufferReader_js_1.ComponentTypeHeader.Int32],
144
+ PORTAL_WORLD: [BufferReader_js_1.ComponentTypeHeader.String, BufferReader_js_1.ComponentTypeHeader.Int32],
145
+ SWITCH_LOCAL_TOGGLE: [BufferReader_js_1.ComponentTypeHeader.Int32],
146
+ SWITCH_LOCAL_ACTIVATOR: [BufferReader_js_1.ComponentTypeHeader.Int32, BufferReader_js_1.ComponentTypeHeader.Boolean],
147
+ SWITCH_LOCAL_RESETTER: [BufferReader_js_1.ComponentTypeHeader.Boolean],
148
+ SWITCH_LOCAL_DOOR: [BufferReader_js_1.ComponentTypeHeader.Int32],
149
+ SWITCH_LOCAL_GATE: [BufferReader_js_1.ComponentTypeHeader.Int32],
150
+ SWITCH_GLOBAL_TOGGLE: [BufferReader_js_1.ComponentTypeHeader.Int32],
151
+ SWITCH_GLOBAL_ACTIVATOR: [BufferReader_js_1.ComponentTypeHeader.Int32, BufferReader_js_1.ComponentTypeHeader.Boolean],
152
+ SWITCH_GLOBAL_RESETTER: [BufferReader_js_1.ComponentTypeHeader.Boolean],
153
+ SWITCH_GLOBAL_DOOR: [BufferReader_js_1.ComponentTypeHeader.Int32],
154
+ SWITCH_GLOBAL_GATE: [BufferReader_js_1.ComponentTypeHeader.Int32],
155
+ HAZARD_DEATH_DOOR: [BufferReader_js_1.ComponentTypeHeader.Int32],
156
+ HAZARD_DEATH_GATE: [BufferReader_js_1.ComponentTypeHeader.Int32],
157
+ NOTE_DRUM: [BufferReader_js_1.ComponentTypeHeader.ByteArray],
158
+ NOTE_PIANO: [BufferReader_js_1.ComponentTypeHeader.ByteArray],
159
+ NOTE_GUITAR: [BufferReader_js_1.ComponentTypeHeader.ByteArray],
160
+ };
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvQmxvY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLHlDQUF1QztBQUV2Qyw2RUFBc0U7QUFHdEUsTUFBcUIsS0FBSztJQUl0QixZQUFZLEdBQXFDLEVBQUUsSUFBaUI7UUFGcEUsU0FBSSxHQUFlLEVBQUUsQ0FBQztRQUdsQixJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7WUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQzthQUN2QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxzQkFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFFRCxJQUFJLElBQUk7WUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU87UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFvQjtRQUNuQyxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRVMsZUFBZSxDQUFDLE1BQW9CLEVBQUUsSUFBSSxHQUFHLEtBQUs7O1FBQ3hELE1BQU0sTUFBTSxHQUEyQix5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsTUFBTSxtQ0FBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzdDLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1AsTUFBTSxDQUFDLFdB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