UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

82 lines (77 loc) 9.81 kB
'use strict'; Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); const math = require('@jsprismarine/math'); const world_BlockPosition = require('../world/BlockPosition.cjs.cjs'); class NetworkUtil { static readString(stream) { const length = stream.readUnsignedVarInt(); return stream.read(length).toString("utf-8"); } static writeString(stream, str) { const buffer = Buffer.from(str, "utf-8"); stream.writeUnsignedVarInt(buffer.byteLength); stream.write(buffer); } static readLELengthASCIIString(stream) { const strLen = stream.readUnsignedIntLE(); const str = stream.read(strLen).toString("ascii"); return str; } static writeLELengthASCIIString(stream, str) { const buf = Buffer.from(str, "ascii"); stream.writeUnsignedIntLE(buf.byteLength); stream.write(buf); } /** * Serialize a `Vector3` instance into a `BinaryStream`. * @param {BinaryStream} stream - The network stream. * @param {Vector3} vec - The vector to serialize. */ static writeVector3(stream, vec) { if (!vec) { NetworkUtil.writeVector3(stream, math.Vector3.ZERO); return; } stream.writeFloatLE(vec.getX()); stream.writeFloatLE(vec.getY()); stream.writeFloatLE(vec.getZ()); } /** * Deserialize a `Vector3` from a `BinaryStream`. * @param {BinaryStream} stream - The network stream. * @returns {Vector3} The deserialized `Vector3`. */ static readVector3(stream) { return new math.Vector3(stream.readFloatLE(), stream.readFloatLE(), stream.readFloatLE()); } /** * Serialize a `BlockPosition` instance into a `BinaryStream`. * @param {BinaryStream} stream - The network stream. * @param {BlockPosition} pos - The block position to serialize. */ static writeBlockPosition(stream, pos) { stream.writeVarInt(pos.getX()); stream.writeVarInt(pos.getY()); stream.writeVarInt(pos.getZ()); } /** * Serialize a `BlockPosition` instance into a `BinaryStream`. * @param {BinaryStream} stream - The network stream. * @param {BlockPosition} pos - The block position to serialize. */ static writeUnsignedBlockPosition(stream, pos) { stream.writeVarInt(pos.getX()); stream.writeUnsignedVarInt(pos.getY()); stream.writeVarInt(pos.getZ()); } /** * Deserialize a `BlockPosition` from a `BinaryStream`. * @param {BinaryStream} stream - The network stream. * @returns {BlockPosition} The deserialized `BlockPosition`. */ static readBlockPosition(stream) { return new world_BlockPosition.default(stream.readVarInt(), stream.readUnsignedVarInt(), stream.readVarInt()); } } exports.NetworkUtil = NetworkUtil; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmV0d29ya1V0aWwuY2pzLmNqcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25ldHdvcmsvTmV0d29ya1V0aWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgQmluYXJ5U3RyZWFtIGZyb20gJ0Bqc3ByaXNtYXJpbmUvanNiaW5hcnl1dGlscyc7XG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnQGpzcHJpc21hcmluZS9tYXRoJztcbmltcG9ydCBCbG9ja1Bvc2l0aW9uIGZyb20gJy4uL3dvcmxkL0Jsb2NrUG9zaXRpb24nO1xuXG5leHBvcnQgY2xhc3MgTmV0d29ya1V0aWwge1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZFN0cmluZyhzdHJlYW06IEJpbmFyeVN0cmVhbSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHN0cmVhbS5yZWFkVW5zaWduZWRWYXJJbnQoKTtcbiAgICAgICAgcmV0dXJuIHN0cmVhbS5yZWFkKGxlbmd0aCkudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgd3JpdGVTdHJpbmcoc3RyZWFtOiBCaW5hcnlTdHJlYW0sIHN0cjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHN0ciwgJ3V0Zi04Jyk7XG4gICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVmFySW50KGJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgICAgICAgc3RyZWFtLndyaXRlKGJ1ZmZlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZWFkTEVMZW5ndGhBU0NJSVN0cmluZyhzdHJlYW06IEJpbmFyeVN0cmVhbSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHN0ckxlbiA9IHN0cmVhbS5yZWFkVW5zaWduZWRJbnRMRSgpO1xuICAgICAgICBjb25zdCBzdHIgPSBzdHJlYW0ucmVhZChzdHJMZW4pLnRvU3RyaW5nKCdhc2NpaScpO1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICBwdWJsaWMgc3RhdGljIHdyaXRlTEVMZW5ndGhBU0NJSVN0cmluZyhzdHJlYW06IEJpbmFyeVN0cmVhbSwgc3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oc3RyLCAnYXNjaWknKTtcbiAgICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWRJbnRMRShidWYuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHN0cmVhbS53cml0ZShidWYpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZSBhIGBWZWN0b3IzYCBpbnN0YW5jZSBpbnRvIGEgYEJpbmFyeVN0cmVhbWAuXG4gICAgICogQHBhcmFtIHtCaW5hcnlTdHJlYW19IHN0cmVhbSAtIFRoZSBuZXR3b3JrIHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge1ZlY3RvcjN9IHZlYyAtIFRoZSB2ZWN0b3IgdG8gc2VyaWFsaXplLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgd3JpdGVWZWN0b3IzKHN0cmVhbTogQmluYXJ5U3RyZWFtLCB2ZWM6IFZlY3RvcjMgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICghdmVjKSB7XG4gICAgICAgICAgICBOZXR3b3JrVXRpbC53cml0ZVZlY3RvcjMoc3RyZWFtLCBWZWN0b3IzLlpFUk8pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyZWFtLndyaXRlRmxvYXRMRSh2ZWMuZ2V0WCgpKTtcbiAgICAgICAgc3RyZWFtLndyaXRlRmxvYXRMRSh2ZWMuZ2V0WSgpKTtcbiAgICAgICAgc3RyZWFtLndyaXRlRmxvYXRMRSh2ZWMuZ2V0WigpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVzZXJpYWxpemUgYSBgVmVjdG9yM2AgZnJvbSBhIGBCaW5hcnlTdHJlYW1gLlxuICAgICAqIEBwYXJhbSB7QmluYXJ5U3RyZWFtfSBzdHJlYW0gLSBUaGUgbmV0d29yayBzdHJlYW0uXG4gICAgICogQHJldHVybnMge1ZlY3RvcjN9IFRoZSBkZXNlcmlhbGl6ZWQgYFZlY3RvcjNgLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZFZlY3RvcjMoc3RyZWFtOiBCaW5hcnlTdHJlYW0pOiBWZWN0b3IzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKHN0cmVhbS5yZWFkRmxvYXRMRSgpLCBzdHJlYW0ucmVhZEZsb2F0TEUoKSwgc3RyZWFtLnJlYWRGbG9hdExFKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZSBhIGBCbG9ja1Bvc2l0aW9uYCBpbnN0YW5jZSBpbnRvIGEgYEJpbmFyeVN0cmVhbWAuXG4gICAgICogQHBhcmFtIHtCaW5hcnlTdHJlYW19IHN0cmVhbSAtIFRoZSBuZXR3b3JrIHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge0Jsb2NrUG9zaXRpb259IHBvcyAtIFRoZSBibG9jayBwb3NpdGlvbiB0byBzZXJpYWxpemUuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyB3cml0ZUJsb2NrUG9zaXRpb24oc3RyZWFtOiBCaW5hcnlTdHJlYW0sIHBvczogQmxvY2tQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICBzdHJlYW0ud3JpdGVWYXJJbnQocG9zLmdldFgoKSk7XG4gICAgICAgIHN0cmVhbS53cml0ZVZhckludChwb3MuZ2V0WSgpKTtcbiAgICAgICAgc3RyZWFtLndyaXRlVmFySW50KHBvcy5nZXRaKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemUgYSBgQmxvY2tQb3NpdGlvbmAgaW5zdGFuY2UgaW50byBhIGBCaW5hcnlTdHJlYW1gLlxuICAgICAqIEBwYXJhbSB7QmluYXJ5U3RyZWFtfSBzdHJlYW0gLSBUaGUgbmV0d29yayBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtCbG9ja1Bvc2l0aW9ufSBwb3MgLSBUaGUgYmxvY2sgcG9zaXRpb24gdG8gc2VyaWFsaXplLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgd3JpdGVVbnNpZ25lZEJsb2NrUG9zaXRpb24oc3RyZWFtOiBCaW5hcnlTdHJlYW0sIHBvczogQmxvY2tQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICBzdHJlYW0ud3JpdGVWYXJJbnQocG9zLmdldFgoKSk7XG4gICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVmFySW50KHBvcy5nZXRZKCkpO1xuICAgICAgICBzdHJlYW0ud3JpdGVWYXJJbnQocG9zLmdldFooKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlc2VyaWFsaXplIGEgYEJsb2NrUG9zaXRpb25gIGZyb20gYSBgQmluYXJ5U3RyZWFtYC5cbiAgICAgKiBAcGFyYW0ge0JpbmFyeVN0cmVhbX0gc3RyZWFtIC0gVGhlIG5ldHdvcmsgc3RyZWFtLlxuICAgICAqIEByZXR1cm5zIHtCbG9ja1Bvc2l0aW9ufSBUaGUgZGVzZXJpYWxpemVkIGBCbG9ja1Bvc2l0aW9uYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRCbG9ja1Bvc2l0aW9uKHN0cmVhbTogQmluYXJ5U3RyZWFtKTogVmVjdG9yMyB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvY2tQb3NpdGlvbihzdHJlYW0ucmVhZFZhckludCgpLCBzdHJlYW0ucmVhZFVuc2lnbmVkVmFySW50KCksIHN0cmVhbS5yZWFkVmFySW50KCkpO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJWZWN0b3IzIiwiQmxvY2tQb3NpdGlvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUlPLE1BQU0sV0FBWSxDQUFBO0FBQUEsRUFDckIsT0FBYyxXQUFXLE1BQThCLEVBQUE7QUFDbkQsSUFBTSxNQUFBLE1BQUEsR0FBUyxPQUFPLGtCQUFtQixFQUFBO0FBQ3pDLElBQUEsT0FBTyxNQUFPLENBQUEsSUFBQSxDQUFLLE1BQU0sQ0FBQSxDQUFFLFNBQVMsT0FBTyxDQUFBO0FBQUE7QUFDL0MsRUFDQSxPQUFjLFdBQVksQ0FBQSxNQUFBLEVBQXNCLEdBQW1CLEVBQUE7QUFDL0QsSUFBQSxNQUFNLE1BQVMsR0FBQSxNQUFBLENBQU8s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