@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
82 lines (77 loc) • 9.81 kB
JavaScript
;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmV0d29ya1V0aWwuY2pzLmNqcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25ldHdvcmsvTmV0d29ya1V0aWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgQmluYXJ5U3RyZWFtIGZyb20gJ0Bqc3ByaXNtYXJpbmUvanNiaW5hcnl1dGlscyc7XG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnQGpzcHJpc21hcmluZS9tYXRoJztcbmltcG9ydCBCbG9ja1Bvc2l0aW9uIGZyb20gJy4uL3dvcmxkL0Jsb2NrUG9zaXRpb24nO1xuXG5leHBvcnQgY2xhc3MgTmV0d29ya1V0aWwge1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZFN0cmluZyhzdHJlYW06IEJpbmFyeVN0cmVhbSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHN0cmVhbS5yZWFkVW5zaWduZWRWYXJJbnQoKTtcbiAgICAgICAgcmV0dXJuIHN0cmVhbS5yZWFkKGxlbmd0aCkudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgd3JpdGVTdHJpbmcoc3RyZWFtOiBCaW5hcnlTdHJlYW0sIHN0cjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHN0ciwgJ3V0Zi04Jyk7XG4gICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVmFySW50KGJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgICAgICAgc3RyZWFtLndyaXRlKGJ1ZmZlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZWFkTEVMZW5ndGhBU0NJSVN0cmluZyhzdHJlYW06IEJpbmFyeVN0cmVhbSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHN0ckxlbiA9IHN0cmVhbS5yZWFkVW5zaWduZWRJbnRMRSgpO1xuICAgICAgICBjb25zdCBzdHIgPSBzdHJlYW0ucmVhZChzdHJMZW4pLnRvU3RyaW5nKCdhc2NpaScpO1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICBwdWJsaWMgc3RhdGljIHdyaXRlTEVMZW5ndGhBU0NJSVN0cmluZyhzdHJlYW06IEJpbmFyeVN0cmVhbSwgc3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oc3RyLCAnYXNjaWknKTtcbiAgICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWRJbnRMRShidWYuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHN0cmVhbS53cml0ZShidWYpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZSBhIGBWZWN0b3IzYCBpbnN0YW5jZSBpbnRvIGEgYEJpbmFyeVN0cmVhbWAuXG4gICAgICogQHBhcmFtIHtCaW5hcnlTdHJlYW19IHN0cmVhbSAtIFRoZSBuZXR3b3JrIHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge1ZlY3RvcjN9IHZlYyAtIFRoZSB2ZWN0b3IgdG8gc2VyaWFsaXplLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgd3JpdGVWZWN0b3IzKHN0cmVhbTogQmluYXJ5U3RyZWFtLCB2ZWM6IFZlY3RvcjMgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICghdmVjKSB7XG4gICAgICAgICAgICBOZXR3b3JrVXRpbC53cml0ZVZlY3RvcjMoc3RyZWFtLCBWZWN0b3IzLlpFUk8pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyZWFtLndyaXRlRmxvYXRMRSh2ZWMuZ2V0WCgpKTtcbiAgICAgICAgc3RyZWFtLndyaXRlRmxvYXRMRSh2ZWMuZ2V0WSgpKTtcbiAgICAgICAgc3RyZWFtLndyaXRlRmxvYXRMRSh2ZWMuZ2V0WigpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVzZXJpYWxpemUgYSBgVmVjdG9yM2AgZnJvbSBhIGBCaW5hcnlTdHJlYW1gLlxuICAgICAqIEBwYXJhbSB7QmluYXJ5U3RyZWFtfSBzdHJlYW0gLSBUaGUgbmV0d29yayBzdHJlYW0uXG4gICAgICogQHJldHVybnMge1ZlY3RvcjN9IFRoZSBkZXNlcmlhbGl6ZWQgYFZlY3RvcjNgLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZFZlY3RvcjMoc3RyZWFtOiBCaW5hcnlTdHJlYW0pOiBWZWN0b3IzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKHN0cmVhbS5yZWFkRmxvYXRMRSgpLCBzdHJlYW0ucmVhZEZsb2F0TEUoKSwgc3RyZWFtLnJlYWRGbG9hdExFKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZSBhIGBCbG9ja1Bvc2l0aW9uYCBpbnN0YW5jZSBpbnRvIGEgYEJpbmFyeVN0cmVhbWAuXG4gICAgICogQHBhcmFtIHtCaW5hcnlTdHJlYW19IHN0cmVhbSAtIFRoZSBuZXR3b3JrIHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge0Jsb2NrUG9zaXRpb259IHBvcyAtIFRoZSBibG9jayBwb3NpdGlvbiB0byBzZXJpYWxpemUuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyB3cml0ZUJsb2NrUG9zaXRpb24oc3RyZWFtOiBCaW5hcnlTdHJlYW0sIHBvczogQmxvY2tQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICBzdHJlYW0ud3JpdGVWYXJJbnQocG9zLmdldFgoKSk7XG4gICAgICAgIHN0cmVhbS53cml0ZVZhckludChwb3MuZ2V0WSgpKTtcbiAgICAgICAgc3RyZWFtLndyaXRlVmFySW50KHBvcy5nZXRaKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemUgYSBgQmxvY2tQb3NpdGlvbmAgaW5zdGFuY2UgaW50byBhIGBCaW5hcnlTdHJlYW1gLlxuICAgICAqIEBwYXJhbSB7QmluYXJ5U3RyZWFtfSBzdHJlYW0gLSBUaGUgbmV0d29yayBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtCbG9ja1Bvc2l0aW9ufSBwb3MgLSBUaGUgYmxvY2sgcG9zaXRpb24gdG8gc2VyaWFsaXplLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgd3JpdGVVbnNpZ25lZEJsb2NrUG9zaXRpb24oc3RyZWFtOiBCaW5hcnlTdHJlYW0sIHBvczogQmxvY2tQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICBzdHJlYW0ud3JpdGVWYXJJbnQocG9zLmdldFgoKSk7XG4gICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVmFySW50KHBvcy5nZXRZKCkpO1xuICAgICAgICBzdHJlYW0ud3JpdGVWYXJJbnQocG9zLmdldFooKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlc2VyaWFsaXplIGEgYEJsb2NrUG9zaXRpb25gIGZyb20gYSBgQmluYXJ5U3RyZWFtYC5cbiAgICAgKiBAcGFyYW0ge0JpbmFyeVN0cmVhbX0gc3RyZWFtIC0gVGhlIG5ldHdvcmsgc3RyZWFtLlxuICAgICAqIEByZXR1cm5zIHtCbG9ja1Bvc2l0aW9ufSBUaGUgZGVzZXJpYWxpemVkIGBCbG9ja1Bvc2l0aW9uYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRCbG9ja1Bvc2l0aW9uKHN0cmVhbTogQmluYXJ5U3RyZWFtKTogVmVjdG9yMyB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvY2tQb3NpdGlvbihzdHJlYW0ucmVhZFZhckludCgpLCBzdHJlYW0ucmVhZFVuc2lnbmVkVmFySW50KCksIHN0cmVhbS5yZWFkVmFySW50KCkpO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJWZWN0b3IzIiwiQmxvY2tQb3NpdGlvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUlPLE1BQU0sV0FBWSxDQUFBO0FBQUEsRUFDckIsT0FBYyxXQUFXLE1BQThCLEVBQUE7QUFDbkQsSUFBTSxNQUFBLE1BQUEsR0FBUyxPQUFPLGtCQUFtQixFQUFBO0FBQ3pDLElBQUEsT0FBTyxNQUFPLENBQUEsSUFBQSxDQUFLLE1BQU0sQ0FBQSxDQUFFLFNBQVMsT0FBTyxDQUFBO0FBQUE7QUFDL0MsRUFDQSxPQUFjLFdBQVksQ0FBQSxNQUFBLEVBQXNCLEdBQW1CLEVBQUE7QUFDL0QsSUFBQSxNQUFNLE1BQVMsR0FBQSxNQUFBLENBQU8sSUFBSyxDQUFBLEdBQUEsRUFBSyxPQUFPLENBQUE7QUFDdkMsSUFBTyxNQUFBLENBQUEsbUJBQUEsQ0FBb0IsT0FBTyxVQUFVLENBQUE7QUFDNUMsSUFBQSxNQUFBLENBQU8sTUFBTSxNQUFNLENBQUE7QUFBQTtBQUN2QixFQUVBLE9BQWMsd0JBQXdCLE1BQThCLEVBQUE7QUFDaEUsSUFBTSxNQUFBLE1BQUEsR0FBUyxPQUFPLGlCQUFrQixFQUFBO0FBQ3hDLElBQUEsTUFBTSxNQUFNLE1BQU8sQ0FBQSxJQUFBLENBQUssTUFBTSxDQUFBLENBQUUsU0FBUyxPQUFPLENBQUE7QUFDaEQsSUFBTyxPQUFBLEdBQUE7QUFBQTtBQUNYLEVBQ0EsT0FBYyx3QkFBeUIsQ0FBQSxNQUFBLEVBQXNCLEdBQW1CLEVBQUE7QUFDNUUsSUFBQSxNQUFNLEdBQU0sR0FBQSxNQUFBLENBQU8sSUFBSyxDQUFBLEdBQUEsRUFBSyxPQUFPLENBQUE7QUFDcEMsSUFBTyxNQUFBLENBQUEsa0JBQUEsQ0FBbUIsSUFBSSxVQUFVLENBQUE7QUFDeEMsSUFBQSxNQUFBLENBQU8sTUFBTSxHQUFHLENBQUE7QUFBQTtBQUNwQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxPQUFjLFlBQWEsQ0FBQSxNQUFBLEVBQXNCLEdBQTJCLEVBQUE7QUFDeEUsSUFBQSxJQUFJLENBQUMsR0FBSyxFQUFBO0FBQ04sTUFBWSxXQUFBLENBQUEsWUFBQSxDQUFhLE1BQVEsRUFBQUEsWUFBQSxDQUFRLElBQUksQ0FBQTtBQUM3QyxNQUFBO0FBQUE7QUFHSixJQUFPLE1BQUEsQ0FBQSxZQUFBLENBQWEsR0FBSSxDQUFBLElBQUEsRUFBTSxDQUFBO0FBQzlCLElBQU8sTUFBQSxDQUFBLFlBQUEsQ0FBYSxHQUFJLENBQUEsSUFBQSxFQUFNLENBQUE7QUFDOUIsSUFBTyxNQUFBLENBQUEsWUFBQSxDQUFhLEdBQUksQ0FBQSxJQUFBLEVBQU0sQ0FBQTtBQUFBO0FBQ2xDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1BLE9BQWMsWUFBWSxNQUErQixFQUFBO0FBQ3JELElBQU8sT0FBQSxJQUFJQSxZQUFRLENBQUEsTUFBQSxDQUFPLFdBQVksRUFBQSxFQUFHLE9BQU8sV0FBWSxFQUFBLEVBQUcsTUFBTyxDQUFBLFdBQUEsRUFBYSxDQUFBO0FBQUE7QUFDdkY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsT0FBYyxrQkFBbUIsQ0FBQSxNQUFBLEVBQXNCLEdBQTBCLEVBQUE7QUFDN0UsSUFBTyxNQUFBLENBQUEsV0FBQSxDQUFZLEdBQUksQ0FBQSxJQUFBLEVBQU0sQ0FBQTtBQUM3QixJQUFPLE1BQUEsQ0FBQSxXQUFBLENBQVksR0FBSSxDQUFBLElBQUEsRUFBTSxDQUFBO0FBQzdCLElBQU8sTUFBQSxDQUFBLFdBQUEsQ0FBWSxHQUFJLENBQUEsSUFBQSxFQUFNLENBQUE7QUFBQTtBQUNqQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNQSxPQUFjLDBCQUEyQixDQUFBLE1BQUEsRUFBc0IsR0FBMEIsRUFBQTtBQUNyRixJQUFPLE1BQUEsQ0FBQSxXQUFBLENBQVksR0FBSSxDQUFBLElBQUEsRUFBTSxDQUFBO0FBQzdCLElBQU8sTUFBQSxDQUFBLG1CQUFBLENBQW9CLEdBQUksQ0FBQSxJQUFBLEVBQU0sQ0FBQTtBQUNyQyxJQUFPLE1BQUEsQ0FBQSxXQUFBLENBQVksR0FBSSxDQUFBLElBQUEsRUFBTSxDQUFBO0FBQUE7QUFDakM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTUEsT0FBYyxrQkFBa0IsTUFBK0IsRUFBQTtBQUMzRCxJQUFPLE9BQUEsSUFBSUMsMkJBQWMsQ0FBQSxNQUFBLENBQU8sVUFBVyxFQUFBLEVBQUcsT0FBTyxrQkFBbUIsRUFBQSxFQUFHLE1BQU8sQ0FBQSxVQUFBLEVBQVksQ0FBQTtBQUFBO0FBRXRHOzs7OyJ9