@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
78 lines (75 loc) • 9.63 kB
JavaScript
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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