UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

77 lines (76 loc) 8.47 kB
import BlockPosition from "../world/BlockPosition.es.js"; import { Vector3 } from "@jsprismarine/math"; //#region src/network/NetworkUtil.ts var NetworkUtil = 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(); return stream.read(strLen).toString("ascii"); } 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()); } }; //#endregion export { NetworkUtil }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmV0d29ya1V0aWwuZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL25ldHdvcmsvTmV0d29ya1V0aWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgQmluYXJ5U3RyZWFtIGZyb20gJ0Bqc3ByaXNtYXJpbmUvanNiaW5hcnl1dGlscyc7XG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnQGpzcHJpc21hcmluZS9tYXRoJztcbmltcG9ydCBCbG9ja1Bvc2l0aW9uIGZyb20gJy4uL3dvcmxkL0Jsb2NrUG9zaXRpb24nO1xuXG5leHBvcnQgY2xhc3MgTmV0d29ya1V0aWwge1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZFN0cmluZyhzdHJlYW06IEJpbmFyeVN0cmVhbSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHN0cmVhbS5yZWFkVW5zaWduZWRWYXJJbnQoKTtcbiAgICAgICAgcmV0dXJuIHN0cmVhbS5yZWFkKGxlbmd0aCkudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgd3JpdGVTdHJpbmcoc3RyZWFtOiBCaW5hcnlTdHJlYW0sIHN0cjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHN0ciwgJ3V0Zi04Jyk7XG4gICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVmFySW50KGJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgICAgICAgc3RyZWFtLndyaXRlKGJ1ZmZlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZWFkTEVMZW5ndGhBU0NJSVN0cmluZyhzdHJlYW06IEJpbmFyeVN0cmVhbSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHN0ckxlbiA9IHN0cmVhbS5yZWFkVW5zaWduZWRJbnRMRSgpO1xuICAgICAgICBjb25zdCBzdHIgPSBzdHJlYW0ucmVhZChzdHJMZW4pLnRvU3RyaW5nKCdhc2NpaScpO1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICBwdWJsaWMgc3RhdGljIHdyaXRlTEVMZW5ndGhBU0NJSVN0cmluZyhzdHJlYW06IEJpbmFyeVN0cmVhbSwgc3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oc3RyLCAnYXNjaWknKTtcbiAgICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWRJbnRMRShidWYuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHN0cmVhbS53cml0ZShidWYpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZSBhIGBWZWN0b3IzYCBpbnN0YW5jZSBpbnRvIGEgYEJpbmFyeVN0cmVhbWAuXG4gICAgICogQHBhcmFtIHtCaW5hcnlTdHJlYW19IHN0cmVhbSAtIFRoZSBuZXR3b3JrIHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge1ZlY3RvcjN9IHZlYyAtIFRoZSB2ZWN0b3IgdG8gc2VyaWFsaXplLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgd3JpdGVWZWN0b3IzKHN0cmVhbTogQmluYXJ5U3RyZWFtLCB2ZWM6IFZlY3RvcjMgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICghdmVjKSB7XG4gICAgICAgICAgICBOZXR3b3JrVXRpbC53cml0ZVZlY3RvcjMoc3RyZWFtLCBWZWN0b3IzLlpFUk8pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyZWFtLndyaXRlRmxvYXRMRSh2ZWMuZ2V0WCgpKTtcbiAgICAgICAgc3RyZWFtLndyaXRlRmxvYXRMRSh2ZWMuZ2V0WSgpKTtcbiAgICAgICAgc3RyZWFtLndyaXRlRmxvYXRMRSh2ZWMuZ2V0WigpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVzZXJpYWxpemUgYSBgVmVjdG9yM2AgZnJvbSBhIGBCaW5hcnlTdHJlYW1gLlxuICAgICAqIEBwYXJhbSB7QmluYXJ5U3RyZWFtfSBzdHJlYW0gLSBUaGUgbmV0d29yayBzdHJlYW0uXG4gICAgICogQHJldHVybnMge1ZlY3RvcjN9IFRoZSBkZXNlcmlhbGl6ZWQgYFZlY3RvcjNgLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZFZlY3RvcjMoc3RyZWFtOiBCaW5hcnlTdHJlYW0pOiBWZWN0b3IzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKHN0cmVhbS5yZWFkRmxvYXRMRSgpLCBzdHJlYW0ucmVhZEZsb2F0TEUoKSwgc3RyZWFtLnJlYWRGbG9hdExFKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZSBhIGBCbG9ja1Bvc2l0aW9uYCBpbnN0YW5jZSBpbnRvIGEgYEJpbmFyeVN0cmVhbWAuXG4gICAgICogQHBhcmFtIHtCaW5hcnlTdHJlYW19IHN0cmVhbSAtIFRoZSBuZXR3b3JrIHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge0Jsb2NrUG9zaXRpb259IHBvcyAtIFRoZSBibG9jayBwb3NpdGlvbiB0byBzZXJpYWxpemUuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyB3cml0ZUJsb2NrUG9zaXRpb24oc3RyZWFtOiBCaW5hcnlTdHJlYW0sIHBvczogQmxvY2tQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICBzdHJlYW0ud3JpdGVWYXJJbnQocG9zLmdldFgoKSk7XG4gICAgICAgIHN0cmVhbS53cml0ZVZhckludChwb3MuZ2V0WSgpKTtcbiAgICAgICAgc3RyZWFtLndyaXRlVmFySW50KHBvcy5nZXRaKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemUgYSBgQmxvY2tQb3NpdGlvbmAgaW5zdGFuY2UgaW50byBhIGBCaW5hcnlTdHJlYW1gLlxuICAgICAqIEBwYXJhbSB7QmluYXJ5U3RyZWFtfSBzdHJlYW0gLSBUaGUgbmV0d29yayBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtCbG9ja1Bvc2l0aW9ufSBwb3MgLSBUaGUgYmxvY2sgcG9zaXRpb24gdG8gc2VyaWFsaXplLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgd3JpdGVVbnNpZ25lZEJsb2NrUG9zaXRpb24oc3RyZWFtOiBCaW5hcnlTdHJlYW0sIHBvczogQmxvY2tQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICBzdHJlYW0ud3JpdGVWYXJJbnQocG9zLmdldFgoKSk7XG4gICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVmFySW50KHBvcy5nZXRZKCkpO1xuICAgICAgICBzdHJlYW0ud3JpdGVWYXJJbnQocG9zLmdldFooKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlc2VyaWFsaXplIGEgYEJsb2NrUG9zaXRpb25gIGZyb20gYSBgQmluYXJ5U3RyZWFtYC5cbiAgICAgKiBAcGFyYW0ge0JpbmFyeVN0cmVhbX0gc3RyZWFtIC0gVGhlIG5ldHdvcmsgc3RyZWFtLlxuICAgICAqIEByZXR1cm5zIHtCbG9ja1Bvc2l0aW9ufSBUaGUgZGVzZXJpYWxpemVkIGBCbG9ja1Bvc2l0aW9uYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRCbG9ja1Bvc2l0aW9uKHN0cmVhbTogQmluYXJ5U3RyZWFtKTogVmVjdG9yMyB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvY2tQb3NpdGlvbihzdHJlYW0ucmVhZFZhckludCgpLCBzdHJlYW0ucmVhZFVuc2lnbmVkVmFySW50KCksIHN0cmVhbS5yZWFkVmFySW50KCkpO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsSUFBYSxjQUFiLE1BQWEsWUFBWTtDQUNyQixPQUFjLFdBQVcsUUFBOEI7RUFDbkQsTUFBTSxTQUFTLE9BQU8sbUJBQW1CO0VBQ3pDLE9BQU8sT0FBTyxLQUFLLE1BQU0sRUFBRSxTQUFTLE9BQU87Q0FDL0M7Q0FDQSxPQUFjLFlBQVksUUFBc0IsS0FBbUI7RUFDL0QsTUFBTSxTQUFTLE9BQU8sS0FBSyxLQUFLLE9BQU87RUFDdkMsT0FBTyxvQkFBb0IsT0FBTyxVQUFVO0VBQzVDLE9BQU8sTUFBTSxNQUFNO0NBQ3ZCO0NBRUEsT0FBYyx3QkFBd0IsUUFBOEI7RUFDaEUsTUFBTSxTQUFTLE9BQU8sa0JBQWtCO0VBRXhDLE9BRFksT0FBTyxLQUFLLE1BQU0sRUFBRSxTQUFTLE9BQ2xDO0NBQ1g7Q0FDQSxPQUFjLHlCQUF5QixRQUFzQixLQUFtQjtFQUM1RSxNQUFNLE1BQU0sT0FBTyxLQUFLLEtBQUssT0FBTztFQUNwQyxPQUFPLG1CQUFtQixJQUFJLFVBQVU7RUFDeEMsT0FBTyxNQUFNLEdBQUc7Q0FDcEI7Ozs7OztDQU9BLE9BQWMsYUFBYSxRQUFzQixLQUEyQjtFQUN4RSxJQUFJLENBQUMsS0FBSztHQUNOLFlBQVksYUFBYSxRQUFRLFFBQVEsSUFBSTtHQUM3QztFQUNKO0VBRUEsT0FBTyxhQUFhLElBQUksS0FBSyxDQUFDO0VBQzlCLE9BQU8sYUFBYSxJQUFJLEtBQUssQ0FBQztFQUM5QixPQUFPLGFBQWEsSUFBSSxLQUFLLENBQUM7Q0FDbEM7Ozs7OztDQU1BLE9BQWMsWUFBWSxRQUErQjtFQUNyRCxPQUFPLElBQUksUUFBUSxPQUFPLFlBQVksR0FBRyxPQUFPLFlBQVksR0FBRyxPQUFPLFlBQVksQ0FBQztDQUN2Rjs7Ozs7O0NBT0EsT0FBYyxtQkFBbUIsUUFBc0IsS0FBMEI7RUFDN0UsT0FBTyxZQUFZLElBQUksS0FBSyxDQUFDO0VBQzdCLE9BQU8sWUFBWSxJQUFJLEtBQUssQ0FBQztFQUM3QixPQUFPLFlBQVksSUFBSSxLQUFLLENBQUM7Q0FDakM7Ozs7OztDQU1BLE9BQWMsMkJBQTJCLFFBQXNCLEtBQTBCO0VBQ3JGLE9BQU8sWUFBWSxJQUFJLEtBQUssQ0FBQztFQUM3QixPQUFPLG9CQUFvQixJQUFJLEtBQUssQ0FBQztFQUNyQyxPQUFPLFlBQVksSUFBSSxLQUFLLENBQUM7Q0FDakM7Ozs7OztDQU1BLE9BQWMsa0JBQWtCLFFBQStCO0VBQzNELE9BQU8sSUFBSSxjQUFjLE9BQU8sV0FBVyxHQUFHLE9BQU8sbUJBQW1CLEdBQUcsT0FBTyxXQUFXLENBQUM7Q0FDbEc7QUFDSiJ9