UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

78 lines (75 loc) 9.63 kB
import { Vector3 } from '@jsprismarine/math'; import BlockPosition from '../world/BlockPosition.es.js'; 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, 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 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 BlockPosition(stream.readVarInt(), stream.readUnsignedVarInt(), stream.readVarInt()); } } export { NetworkUtil }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmV0d29ya1V0aWwuZXMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9uZXR3b3JrL05ldHdvcmtVdGlsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIEJpbmFyeVN0cmVhbSBmcm9tICdAanNwcmlzbWFyaW5lL2pzYmluYXJ5dXRpbHMnO1xuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJ0Bqc3ByaXNtYXJpbmUvbWF0aCc7XG5pbXBvcnQgQmxvY2tQb3NpdGlvbiBmcm9tICcuLi93b3JsZC9CbG9ja1Bvc2l0aW9uJztcblxuZXhwb3J0IGNsYXNzIE5ldHdvcmtVdGlsIHtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRTdHJpbmcoc3RyZWFtOiBCaW5hcnlTdHJlYW0pOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBsZW5ndGggPSBzdHJlYW0ucmVhZFVuc2lnbmVkVmFySW50KCk7XG4gICAgICAgIHJldHVybiBzdHJlYW0ucmVhZChsZW5ndGgpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgIH1cbiAgICBwdWJsaWMgc3RhdGljIHdyaXRlU3RyaW5nKHN0cmVhbTogQmluYXJ5U3RyZWFtLCBzdHI6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShzdHIsICd1dGYtOCcpO1xuICAgICAgICBzdHJlYW0ud3JpdGVVbnNpZ25lZFZhckludChidWZmZXIuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHN0cmVhbS53cml0ZShidWZmZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZExFTGVuZ3RoQVNDSUlTdHJpbmcoc3RyZWFtOiBCaW5hcnlTdHJlYW0pOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBzdHJMZW4gPSBzdHJlYW0ucmVhZFVuc2lnbmVkSW50TEUoKTtcbiAgICAgICAgY29uc3Qgc3RyID0gc3RyZWFtLnJlYWQoc3RyTGVuKS50b1N0cmluZygnYXNjaWknKTtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgcHVibGljIHN0YXRpYyB3cml0ZUxFTGVuZ3RoQVNDSUlTdHJpbmcoc3RyZWFtOiBCaW5hcnlTdHJlYW0sIHN0cjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHN0ciwgJ2FzY2lpJyk7XG4gICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkSW50TEUoYnVmLmJ5dGVMZW5ndGgpO1xuICAgICAgICBzdHJlYW0ud3JpdGUoYnVmKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemUgYSBgVmVjdG9yM2AgaW5zdGFuY2UgaW50byBhIGBCaW5hcnlTdHJlYW1gLlxuICAgICAqIEBwYXJhbSB7QmluYXJ5U3RyZWFtfSBzdHJlYW0gLSBUaGUgbmV0d29yayBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtWZWN0b3IzfSB2ZWMgLSBUaGUgdmVjdG9yIHRvIHNlcmlhbGl6ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHdyaXRlVmVjdG9yMyhzdHJlYW06IEJpbmFyeVN0cmVhbSwgdmVjOiBWZWN0b3IzIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBpZiAoIXZlYykge1xuICAgICAgICAgICAgTmV0d29ya1V0aWwud3JpdGVWZWN0b3IzKHN0cmVhbSwgVmVjdG9yMy5aRVJPKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0cmVhbS53cml0ZUZsb2F0TEUodmVjLmdldFgoKSk7XG4gICAgICAgIHN0cmVhbS53cml0ZUZsb2F0TEUodmVjLmdldFkoKSk7XG4gICAgICAgIHN0cmVhbS53cml0ZUZsb2F0TEUodmVjLmdldFooKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlc2VyaWFsaXplIGEgYFZlY3RvcjNgIGZyb20gYSBgQmluYXJ5U3RyZWFtYC5cbiAgICAgKiBAcGFyYW0ge0JpbmFyeVN0cmVhbX0gc3RyZWFtIC0gVGhlIG5ldHdvcmsgc3RyZWFtLlxuICAgICAqIEByZXR1cm5zIHtWZWN0b3IzfSBUaGUgZGVzZXJpYWxpemVkIGBWZWN0b3IzYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRWZWN0b3IzKHN0cmVhbTogQmluYXJ5U3RyZWFtKTogVmVjdG9yMyB7XG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yMyhzdHJlYW0ucmVhZEZsb2F0TEUoKSwgc3RyZWFtLnJlYWRGbG9hdExFKCksIHN0cmVhbS5yZWFkRmxvYXRMRSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemUgYSBgQmxvY2tQb3NpdGlvbmAgaW5zdGFuY2UgaW50byBhIGBCaW5hcnlTdHJlYW1gLlxuICAgICAqIEBwYXJhbSB7QmluYXJ5U3RyZWFtfSBzdHJlYW0gLSBUaGUgbmV0d29yayBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtCbG9ja1Bvc2l0aW9ufSBwb3MgLSBUaGUgYmxvY2sgcG9zaXRpb24gdG8gc2VyaWFsaXplLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgd3JpdGVCbG9ja1Bvc2l0aW9uKHN0cmVhbTogQmluYXJ5U3RyZWFtLCBwb3M6IEJsb2NrUG9zaXRpb24pOiB2b2lkIHtcbiAgICAgICAgc3RyZWFtLndyaXRlVmFySW50KHBvcy5nZXRYKCkpO1xuICAgICAgICBzdHJlYW0ud3JpdGVWYXJJbnQocG9zLmdldFkoKSk7XG4gICAgICAgIHN0cmVhbS53cml0ZVZhckludChwb3MuZ2V0WigpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplIGEgYEJsb2NrUG9zaXRpb25gIGluc3RhbmNlIGludG8gYSBgQmluYXJ5U3RyZWFtYC5cbiAgICAgKiBAcGFyYW0ge0JpbmFyeVN0cmVhbX0gc3RyZWFtIC0gVGhlIG5ldHdvcmsgc3RyZWFtLlxuICAgICAqIEBwYXJhbSB7QmxvY2tQb3NpdGlvbn0gcG9zIC0gVGhlIGJsb2NrIHBvc2l0aW9uIHRvIHNlcmlhbGl6ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHdyaXRlVW5zaWduZWRCbG9ja1Bvc2l0aW9uKHN0cmVhbTogQmluYXJ5U3RyZWFtLCBwb3M6IEJsb2NrUG9zaXRpb24pOiB2b2lkIHtcbiAgICAgICAgc3RyZWFtLndyaXRlVmFySW50KHBvcy5nZXRYKCkpO1xuICAgICAgICBzdHJlYW0ud3JpdGVVbnNpZ25lZFZhckludChwb3MuZ2V0WSgpKTtcbiAgICAgICAgc3RyZWFtLndyaXRlVmFySW50KHBvcy5nZXRaKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXNlcmlhbGl6ZSBhIGBCbG9ja1Bvc2l0aW9uYCBmcm9tIGEgYEJpbmFyeVN0cmVhbWAuXG4gICAgICogQHBhcmFtIHtCaW5hcnlTdHJlYW19IHN0cmVhbSAtIFRoZSBuZXR3b3JrIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJucyB7QmxvY2tQb3NpdGlvbn0gVGhlIGRlc2VyaWFsaXplZCBgQmxvY2tQb3NpdGlvbmAuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyByZWFkQmxvY2tQb3NpdGlvbihzdHJlYW06IEJpbmFyeVN0cmVhbSk6IFZlY3RvcjMge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2NrUG9zaXRpb24oc3RyZWFtLnJlYWRWYXJJbnQoKSwgc3RyZWFtLnJlYWRVbnNpZ25lZFZhckludCgpLCBzdHJlYW0ucmVhZFZhckludCgpKTtcbiAgICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSU8sTUFBTSxXQUFZLENBQUE7QUFBQSxFQUNyQixPQUFjLFdBQVcsTUFBOEIsRUFBQTtBQUNuRCxJQUFNLE1BQUEsTUFBQSxHQUFTLE9BQU8sa0JBQW1CLEVBQUE7QUFDekMsSUFBQSxPQUFPLE1BQU8sQ0FBQSxJQUFBLENBQUssTUFBTSxDQUFBLENBQUUsU0FBUyxPQUFPLENBQUE7QUFBQTtBQUMvQyxFQUNBLE9BQWMsV0FBWSxDQUFBLE1BQUEsRUFBc0IsR0FBbUIsRUFBQTtBQUMvRCxJQUFBLE1BQU0sTUFBUyxHQUFBLE1BQUEsQ0FBTyxJQUFLLENBQUEsR0FBQSxFQUFLLE9BQU8sQ0FBQTtB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