{"version":3,"sources":["../src/polyfill/EventEmitter.ts","../src/events/AbstractEvent.ts","../src/events/OnChat.ts","../src/events/OnJoin.ts","../src/events/OnLeave.ts","../src/events/BlockCreated.ts","../src/item/Item.ts","../src/inventory/EntityInventory.ts","../src/inventory/BlockInventory.ts","../src/block/Block.ts","../src/block/BlockType.ts","../src/block/Permutation.ts","../src/events/BlockDestroyed.ts","../src/events/BlockHit.ts","../src/events/ItemUse.ts","../src/events/ItemInteract.ts","../src/events/ItemEvent.ts","../src/events/ItemDropped.ts","../src/events/EntityCreated.ts","../src/events/EntityDestroyed.ts","../src/events/PlayerTag.ts","../src/events/EntityTag.ts","../src/events/EnteredWater.ts","../src/events/ExitedWater.ts","../src/events/Jump.ts","../src/events/Landed.ts","../src/events/Swing.ts","../src/events/StartedBurning.ts","../src/events/StoppedBurning.ts","../src/events/StartedMoving.ts","../src/events/StoppedMoving.ts","../src/events/StartedRiding.ts","../src/events/StoppedRiding.ts","../src/events/StartedSleeping.ts","../src/events/StoppedSleeping.ts","../src/events/StartedSneaking.ts","../src/events/StoppedSneaking.ts","../src/events/StartedSprinting.ts","../src/events/StoppedSprinting.ts","../src/events/StartedSwimming.ts","../src/events/StoppedSwimming.ts","../src/events/EntityHit.ts","../src/events/PlayerHit.ts","../src/events/Explosion.ts","../src/events/Death.ts","../src/events/Respawn.ts","../src/events/Piston.ts","../src/events/EffectAdded.ts","../src/events/WeatherUpdated.ts","../src/events/Tick.ts","../src/events/EntityEventTrigger.ts","../src/events/PlayerEventTrigger.ts","../src/events/ItemEventTrigger.ts","../src/events/PlayerScoreUpdated.ts","../src/events/EntityScoreUpdated.ts","../src/events/PlayerTagsUpdated.ts","../src/events/EntityTagsUpdated.ts","../src/events/EntityHurt.ts","../src/events/PlayerHurt.ts","../src/events/Lever.ts","../src/player/Player.ts","../src/forms/ModalForm.ts","../src/forms/MessageForm.ts","../src/forms/ActionForm.ts","../src/entity/Entity.ts","../src/utils/uuidv4.ts","../src/utils/getCoordinatesBetween.ts","../src/utils/between.ts","../src/utils/runCommand.ts","../src/utils/binary.ts","../src/utils/object.ts","../src/utils/ids.ts","../src/utils/getUniqueId.ts","../src/utils/destruct.ts","../src/utils/getEnchantments.ts","../src/entity/EntityManager.ts","../src/agent/Agent.ts","../src/player/PlayerManager.ts","../src/events/ChestOpened.ts","../src/events/index.ts","../src/client/Client.ts","../src/commands/CommandTypes.ts","../src/commands/CommandManager.ts","../src/commands/CommandExecState.ts","../src/world/WorldManager.ts","../src/scoreboard/ScoreboardManager.ts","../src/version.ts","../src/polyfill/Timers.ts","../src/poly.ts","../src/decorators/setProto.ts","../src/database/Document.ts","../src/database/DatabaseUtil.ts","../src/database/Modal.ts","../src/database/SchemaTypes.ts","../src/database/Schema.ts","../src/agent/Directions.ts","../src/index.ts"],"sourcesContent":["// EventEmitter Polyfill by [Nobu](https://github.com/nobu-sh)\n\n/**\n * 0.8 to 1 replica of NodeJS EventEmitter.\n * It fundamentally works the same. Some methods\n * may just be named slightly different.\n */\nexport class EventEmitter {\n  protected readonly _listeners = new Map<string, CallableFunction[]>()\n  protected max: number\n\n  /**\n   * 0.8 to 1 replica of NodeJS EventEmitter.\n   * It fundamentally works the same. Some methods\n   * may just be named slightly different.\n   * @param max Max listeners before mem leak warnings.\n   */\n  public constructor(max = 50) {\n    this.max = max\n  }\n\n  // Override toString/name Methods\n  public static get [Symbol.toStringTag](): string {\n    return '[undefined EventEmitter]'\n  }\n\n  public static get [Symbol.name](): string {\n    return 'EventEmitter'\n  }\n\n  public get [Symbol.toStringTag](): string {\n    return '[object EventEmitter]'\n  }\n\n  public get [Symbol.name](): string {\n    return 'EventEmitter'\n  }\n\n  public static toString(): string {\n    return '[undefined EventEmitter]'\n  }\n\n  public toString(): string {\n    return '[object EventEmitter]'\n  }\n\n  // Primary Methods\n  public addListener(event: string, listener: CallableFunction): void {\n    if (this._listeners.size >= this.max) {\n      console.warn(`warning: possible EventEmitter memory leak detected. ${this._listeners.size} listeners registered.`)\n    }\n    this._listeners.set(event, [...(this._listeners.get(event) ?? []), listener])\n  }\n\n  public removeListener(event: string, listener: CallableFunction): void {\n    const listeners = this._listeners.get(event)\n    listeners?.splice(listeners?.indexOf(listener))\n  }\n\n  public removeListeners(event: string): void {\n    this._listeners.delete(event)\n  }\n\n  public removeAllListeners(): void {\n    this._listeners.clear()\n  }\n\n  public envokeEvent(event: string, ...args: unknown[]): void {\n    this._listeners.get(event)?.forEach((listener) => {\n      listener(...args)\n    })\n  }\n\n  public listeners(event: string): CallableFunction[] | undefined {\n    return this._listeners.get(event)\n  }\n\n  public listenerCount(event: string): number {\n    return this._listeners.get(event)?.length ?? 0\n  }\n\n  public getMaxListeners = () => this.max\n  public setMaxListeners(n: number): void {\n    this.max = n\n  }\n\n  // Abstracted Methods\n  public on(event: string, listener: CallableFunction) {\n    this.addListener(event, listener)\n  }\n\n  public off(event: string, listener: CallableFunction) {\n    this.removeListener(event, listener)\n  }\n\n  public emit(event: string, ...args: unknown[]) {\n    this.envokeEvent(event, ...args)\n  }\n\n  public once(event: string, listener: CallableFunction): void {\n    const newListener = (...args: unknown[]) => {\n      listener(...args)\n      this.removeListener(event, newListener)\n    }\n    this.addListener(event, newListener)\n  }\n}\n","// Type imports.\nimport type { Client } from '../client/Client'\n\n/**\n * Abstract Event Class. This must extended when\n * creating a new event so Client methods know\n * how to handle the event and what properties\n * are available.\n */\nexport default abstract class {\n  /**\n   * Protected client circular reference.\n   */\n  protected abstract readonly _client: Client\n  /**\n   * Protected logic *(bound to `this`)*.\n   * See any of the events for example.\n   */\n  protected abstract readonly _logic: CallableFunction\n\n  /**\n   * Used to ensure if `on` or `off` is accidently called twice\n   * it wont add or remove two listeners.\n   */\n  protected abstract _registered: boolean\n\n  /**\n   * Events name that will be used when emitting\n   * events off the client.\n   *\n   * :::warning\n   *\n   * Don't forget to use the `@setProto` decorator\n   * so name is readable on prototype. *(See any of the\n   * premade events for example.)*\n   *\n   * :::\n   */\n  public abstract readonly name: string\n\n  /**\n   * Events name assigned by Minecraft.\n   * If this is not a Minecraft event leave this\n   * field as `custom`\n   *\n   * :::warning\n   *\n   * Don't forget to use the `@setProto` decorator\n   * so name is readable on prototype. *(See any of the\n   * premade events for example.)*\n   *\n   * :::\n   */\n  public abstract readonly iName: string\n\n  /**\n   * Unused by most events as it was never implemented.\n   * was supposed to always cancel events.\n   */\n  public abstract readonly alwaysCancel: boolean\n\n  /**\n   * Called by the event manager when read to enable the event\n   * listeners. *(See any of the premade events for example.)*\n   */\n  public abstract on(): void\n  /**\n   * Called by the event manager when event is disabled to remove\n   * any listeners. *(See any of the premade events for example.)*\n   */\n  public abstract off(): void\n\n  /**\n   * Actual logic before being bound to `this` for handling\n   * the listener in `on` method.\n   *\n   * :::warning\n   *\n   * This method should not be used in the listener directly on, `on`.\n   * It should be bound to `this` first then assigned to `_logic`.\n   * *(See any of the premade events for example.)*\n   *\n   * :::\n   * @param args\n   */\n  protected abstract __logic(...args: any[]): void\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\nimport { BeforeChatEvent, world } from 'mojang-minecraft'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI chat event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class OnChat extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('OnChat')\n  public readonly name = 'OnChat'\n\n  // Predefined in AbstractEvent.\n  @setProto('beforeChat')\n  public readonly iName = 'beforeChat'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI chat event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  protected __logic(arg: BeforeChatEvent): void {\n    // Attempt to get the sender of the message.\n    const sender = arg.sender.name\n      ? this._client.players.getByName(arg.sender.name)\n      : this._client.players.getByNameTag(arg.sender.nameTag)\n\n    // If no sender return.\n    if (!sender) return\n\n    // If the sender is muted cancel message from reaching chat.\n    if (sender.isMuted()) arg.cancel = true\n\n    // Emit event.\n    this._client.emit(this.name, {\n      sender,\n      message: arg.message,\n      cancel() {\n        arg.cancel = true\n      },\n    })\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\nimport { PlayerJoinEvent, world } from 'mojang-minecraft'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI join event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class OnJoin extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('OnJoin')\n  public readonly name = 'OnJoin'\n\n  // Predefined in AbstractEvent.\n  @setProto('playerJoin')\n  public readonly iName = 'playerJoin'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI join event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(arg: PlayerJoinEvent): void {\n    // Create a player from the IPlayer object.\n    const player = this._client.players.create(arg.player)\n    // Add the player to player manager.\n    this._client.players.add(player)\n    // Emit the new player.\n    this._client.emit(this.name, player)\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\nimport { PlayerLeaveEvent, world } from 'mojang-minecraft'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI leave event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class OnLeave extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('OnLeave')\n  public readonly name = 'OnLeave'\n\n  // Predefined in AbstractEvent.\n  @setProto('playerLeave')\n  public readonly iName = 'playerLeave'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI leave event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(arg: PlayerLeaveEvent): void {\n    // Attempt to get player.\n    const player = this._client.players.getByName(arg.playerName)\n\n    // If no player return.\n    if (!player) return\n\n    // Emit left player data.\n    this._client.emit(this.name, player)\n\n    // Remove player from player manager.\n    this._client.players.remove(player)\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { world, BlockPlaceEvent } from 'mojang-minecraft'\nimport { Block } from '../block'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI block created event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class BlockCreated extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('BlockCreated')\n  public readonly name = 'BlockCreated'\n\n  // Predefined in AbstractEvent.\n  @setProto('blockPlace')\n  public readonly iName = 'blockPlace'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI block created event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(arg: BlockPlaceEvent): void {\n    // Attempt to get the player who created the block.\n    const player = this._client.players.getByIPlayer(arg.player)\n    // If not player could be found return.\n    if (!player) return\n\n    // Emit this event on client using name defined above.\n    this._client.emit(this.name, {\n      player,\n      block: new Block(this._client, arg.block),\n      dimension: arg.dimension,\n      cancel() {\n        // TODO: change this to a block permutation instead.\n        const dim = arg.dimension\n        const pos = arg.block.location\n        if (player.getGamemode() === 'creative') {\n          dim.runCommand(`setblock ${pos.x} ${pos.y} ${pos.z} air`)\n        } else {\n          dim.runCommand(`setblock ${pos.x} ${pos.y} ${pos.z} air 0 destroy`)\n        }\n      },\n    })\n  }\n}\n","// Regular imports.\nimport { ItemStack as IItem, ItemEnchantsComponent, MinecraftEnchantmentTypes, Enchantment } from 'mojang-minecraft'\nimport { getEnchantments, OnlyEnchants } from '../'\n\n// Type imports.\nimport type { Client } from '..'\nimport type { EntityInventory, BlockInventory } from '../inventory'\n\n// TODO: wrap enchantment\n\n/**\n * Item wraps Minecrafts IItem. It adds helpful methods\n * utilizing item components cutting out the complication for\n * you.\n */\nexport class Item {\n  /**\n   * Protected circular client reference.\n   */\n  protected readonly _client: Client\n  /**\n   * Protected IItem being wrapped.\n   */\n  protected _IItem: IItem\n\n  /**\n   * Item wraps Minecrafts IItem. It adds helpful methods\n   * utilizing item components cutting out the complication for\n   * you.\n   * @param client Client reference.\n   * @param IItem Minecraft Item to wrap.\n   */\n  public constructor(client: Client, IItem: IItem) {\n    this._client = client\n    this._IItem = IItem\n  }\n\n  /**\n   * Get the wrapped Minecraft item.\n   * @returns\n   */\n  public getIItem(): IItem {\n    return this._IItem\n  }\n\n  /**\n   * Get the items id.\n   * @returns\n   */\n  public getId(): string {\n    return this._IItem.id\n  }\n\n  /**\n   * Get the item stack amount.\n   * @returns\n   */\n  public getAmount(): number {\n    return this._IItem.amount\n  }\n\n  /**\n   * Get the item data number.\n   * @returns\n   */\n  public getData(): number {\n    return this._IItem.data\n  }\n\n  /**\n   * Get the items name tag.\n   * @returns\n   */\n  public getNameTag(): string {\n    return this._IItem.nameTag\n  }\n\n  /**\n   * Set the items name tag.\n   * @param nameTag New name.\n   */\n  public setNameTag(nameTag: string): void {\n    this._IItem.nameTag = nameTag\n  }\n\n  /**\n   * Get the items lore.\n   * @returns\n   */\n  public getLore(): string[] {\n    return this._IItem.getLore()\n  }\n\n  /**\n   * Check if the lore includes the string provided.\n   * @param lore string to check.\n   * @returns\n   */\n  public hasLore(lore: string): boolean {\n    if (this.getLore().find((x) => x === lore)) return true\n\n    return false\n  }\n\n  /**\n   * Set the items lore.\n   * @param lore Array of lore strings.\n   */\n  public setLore(lore: string[]): void {\n    this._IItem.setLore(lore)\n  }\n\n  /**\n   * Trigger a Minecraft event on the item.\n   * @param event Minecraft event to trigger.\n   */\n  public triggerEvent(event: string): void {\n    this._IItem.triggerEvent(event)\n  }\n\n  /**\n   * Get the items components.\n   * @TODO create typings\n   * @returns\n   */\n  public getComponents(): any[] {\n    return this._IItem.getComponents()\n  }\n\n  /**\n   * Check if the item has a component.\n   * @param component Component id.\n   * @returns\n   */\n  public hasComponent(component: string): boolean {\n    return this._IItem.hasComponent(component)\n  }\n\n  /**\n   * Get a specidic component on the item.\n   * @param component Component id.\n   * @TODO create typings\n   * @returns\n   */\n  public getComponent(component: string): any {\n    return this._IItem.getComponent(component)\n  }\n\n  /**\n   * Gets all enchants on the item.\n   * @returns\n   */\n  public getEnchantments(): Enchantment[] {\n    return getEnchantments(this._IItem)\n  }\n\n  /**\n   * Adds an enchant to the item.\n   * @param enchantment Enchant name..\n   * @param level Enchant level.\n   * @returns true means success\n   */\n  public addEnchantment(enchantment: OnlyEnchants, level: number): boolean {\n    // If item does not have enchants component return.\n    if (!this.hasComponent('minecraft:enchantments')) return false\n    // Get component from item.\n    const component = this._IItem.getComponent('minecraft:enchantments') as ItemEnchantsComponent\n    // Gets the enchantments\n    const enchantments = component.enchantments\n    // Attempt add the enchantment.\n    const res = enchantments.addEnchantment(new Enchantment(MinecraftEnchantmentTypes[enchantment], level))\n    // Sets the enchantments to the component\n    component.enchantments = enchantments\n\n    // Return result from add enchant.\n    return res\n  }\n\n  /**\n   * Removes an enchant from the item.\n   * @param enchantment Enchant name.\n   * @returns true means success\n   */\n  public removeEnchantment(enchantment: OnlyEnchants): boolean {\n    // If item does not have enchants component return.\n    if (!this.hasComponent('minecraft:enchantments')) return false\n    // If not item has enchant return false.\n    if (!this.hasEnchantment(enchantment)) return false\n    // Get enchants component.\n    const component = this._IItem.getComponent('minecraft:enchantments') as ItemEnchantsComponent\n    // Gets the enchantments\n    const enchantments = component.enchantments\n    // Remove enchant from enchants component.\n    enchantments.removeEnchantment(MinecraftEnchantmentTypes[enchantment])\n    // Sets the enchantments to the component\n    component.enchantments = enchantments\n\n    // Return true.\n    return true\n  }\n\n  /**\n   * Checks if item has an enchantment.\n   * @param enchantment Enchant name.\n   * @returns\n   */\n  public hasEnchantment(enchantment: OnlyEnchants): boolean {\n    // If item does not have enchants component return.\n    if (!this.hasComponent('minecraft:enchantments')) return false\n    // Get enchants component.\n    const component = this._IItem.getComponent('minecraft:enchantments') as ItemEnchantsComponent\n\n    // Return whether enchant exists or no.\n    return component.enchantments.hasEnchantment(MinecraftEnchantmentTypes[enchantment]) === 0 ? false : true\n  }\n\n  /**\n   * Attempts to get the enchantment from item.\n   * @param enchantment Enchant name.\n   * @returns can return `undefined`\n   */\n  public getEnchantment(enchantment: OnlyEnchants): Enchantment | undefined {\n    // If item does not have enchants component return.\n    if (!this.hasComponent('minecraft:enchantments')) return\n    // If item does not have enchant return.\n    if (!this.hasEnchantment(enchantment)) return\n    // Get enchants component.\n    const component = this._IItem.getComponent('minecraft:enchantments') as ItemEnchantsComponent\n\n    // Return component enchant provided.\n    return component.enchantments.getEnchantment(MinecraftEnchantmentTypes[enchantment])\n  }\n\n  /**\n   * Set item in inventory or block slot.\n   * @param slot Slot number\n   * @param inventory Inventory.\n   */\n  public setInSlot(slot: number, inventory: EntityInventory | BlockInventory): void {\n    inventory.setItem(slot, this)\n  }\n}\n","// Normal imports.\nimport { Item } from '../item'\n\n// Type imports.\nimport type { Client } from '..'\nimport type {\n  EntityInventoryComponent as IInventory,\n  InventoryComponentContainer as IContainer,\n} from 'mojang-minecraft'\nimport type { BlockInventory } from './'\n\n/**\n * BeAPI entity inventory wrapper.\n * Acts as a central point for easily interacting\n * with a player/entity inventories.\n */\nexport class EntityInventory {\n  /**\n   * Protected circular client reference.\n   */\n  protected readonly _client: Client\n  /**\n   * Protected Minecraft inventory component to wrap.\n   */\n  protected readonly _IInventory: IInventory\n  /**\n   * Protected Minecraft container component to wrap.\n   */\n  protected readonly _IContainer: IContainer\n\n  /**\n   * BeAPI entity inventory wrapper.\n   * Acts as a central point for easily interacting\n   * with a player/entities inventory.\n   * @param client Client reference.\n   * @param IInventory Inventory to wrap.\n   */\n  public constructor(client: Client, IInventory: IInventory) {\n    this._client = client\n    this._IInventory = IInventory\n    this._IContainer = IInventory.container\n  }\n\n  /**\n   * Get Minecraft inventory component being wrapped.\n   * @returns\n   */\n  public getIInventory(): IInventory {\n    return this._IInventory\n  }\n\n  /**\n   * Get Minecraft container component being wrapped.\n   * @returns\n   */\n  public getIContainer(): IContainer {\n    return this._IContainer\n  }\n\n  /**\n   * Gets the containers size.\n   * @returns\n   */\n  public getSize(): number {\n    return this._IContainer.size\n  }\n\n  /**\n   * Gets the amount of empty slots in the container.\n   * @returns\n   */\n  public getEmptySlots(): number {\n    return this._IContainer.emptySlotsCount\n  }\n\n  /**\n   * Gets the item in a specfic slot.\n   * @param slot Slot to check item for.\n   * @returns\n   */\n  public getItem(slot: number): Item {\n    return new Item(this._client, this._IContainer.getItem(slot))\n  }\n\n  /**\n   * Sets an item in the container.\n   * @param slot Slot to set item.\n   * @param item Item to set.\n   * @returns\n   */\n  public setItem(slot: number, item: Item): void {\n    return this._IContainer.setItem(slot, item.getIItem())\n  }\n\n  /**\n   * Adds an item to the container,\n   * most likely spits it out on ground if cannot fit.\n   * @param item Item to add.\n   * @returns\n   */\n  public addItem(item: Item): void {\n    return this._IContainer.addItem(item.getIItem())\n  }\n\n  /**\n   * Transfer an item from this inventory to another inventory.\n   * @param slot Slot to in current inventory.\n   * @param otherSlot Slot in other inventory.\n   * @param inventory Inventory to swap with.\n   * @returns\n   */\n  public transferItem(slot: number, otherSlot: number, inventory: BlockInventory | EntityInventory): boolean {\n    return this._IContainer.swapItems(slot, otherSlot, inventory.getIContainer())\n  }\n\n  /**\n   * Swap items slots in current inventory.\n   * @param slot First slot to swap.\n   * @param otherSlot Second slot to swap.\n   * @returns\n   */\n  public swapItem(slot: number, otherSlot: number): boolean {\n    return this._IContainer.transferItem(slot, otherSlot, this._IContainer)\n  }\n}\n","// Regular imports.\nimport { Item } from '../item'\n\n// Type imports.\nimport type { Client } from '..'\nimport type { BlockInventoryComponent as IInventory, InventoryComponentContainer as IContainer } from 'mojang-minecraft'\nimport type { EntityInventory } from './'\n\n/**\n * BeAPI block inventory wrapper.\n * Acts as a central point for easily interacting\n * with a block inventories.\n */\nexport class BlockInventory {\n  /**\n   * Protected circular client reference.\n   */\n  protected readonly _client: Client\n  /**\n   * Protected Minecraft inventory component to wrap.\n   */\n  protected readonly _IInventory: IInventory\n  /**\n   * Protected Minecraft container component to wrap.\n   */\n  protected readonly _IContainer: IContainer\n\n  /**\n   * BeAPI block inventory wrapper.\n   * Acts as a central point for easily interacting\n   * with a block inventories.\n   * @param client Client reference.\n   * @param IInventory Inventory to wrap.\n   */\n  public constructor(client: Client, IInventory: IInventory) {\n    this._client = client\n    this._IInventory = IInventory\n    this._IContainer = IInventory.container\n  }\n\n  /**\n   * Get Minecraft inventory component being wrapped.\n   * @returns\n   */\n  public getIInventory(): IInventory {\n    return this._IInventory\n  }\n\n  /**\n   * Get Minecraft container component being wrapped.\n   * @returns\n   */\n  public getIContainer(): IContainer {\n    return this._IContainer\n  }\n\n  /**\n   * Gets the containers size.\n   * @returns\n   */\n  public getSize(): number {\n    return this._IContainer.size\n  }\n\n  /**\n   * Gets the amount of empty slots in the container.\n   * @returns\n   */\n  public getEmptySlots(): number {\n    return this._IContainer.emptySlotsCount\n  }\n\n  /**\n   * Gets the item in a specfic slot.\n   * @param slot Slot to check item for.\n   * @returns\n   */\n  public getItem(slot: number): Item {\n    return new Item(this._client, this._IContainer.getItem(slot))\n  }\n\n  /**\n   * Sets an item in the container.\n   * @param slot Slot to set item.\n   * @param item Item to set.\n   * @returns\n   */\n  public setItem(slot: number, item: Item): void {\n    return this._IContainer.setItem(slot, item.getIItem())\n  }\n\n  /**\n   * Adds an item to the container,\n   * most likely spits it out on ground if cannot fit.\n   * @param item Item to add.\n   * @returns\n   */\n  public addItem(item: Item): void {\n    return this._IContainer.addItem(item.getIItem())\n  }\n\n  /**\n   * Transfer an item from this inventory to another inventory.\n   * @param slot Slot to in current inventory.\n   * @param otherSlot Slot in other inventory.\n   * @param inventory Inventory to swap with.\n   * @returns\n   */\n  public transferItem(slot: number, otherSlot: number, inventory: BlockInventory | EntityInventory): boolean {\n    return this._IContainer.swapItems(slot, otherSlot, inventory.getIContainer())\n  }\n\n  /**\n   * Swap items slots in current inventory.\n   * @param slot First slot to swap.\n   * @param otherSlot Second slot to swap.\n   * @returns\n   */\n  public swapItem(slot: number, otherSlot: number): boolean {\n    return this._IContainer.transferItem(slot, otherSlot, this._IContainer)\n  }\n}\n","// Regular imports.\nimport { BlockType, Permutation } from './'\nimport { BlockInventory } from '../inventory'\n\n// Type imports.\nimport type { Client, Dimension, Location, BlockComponents } from '..'\nimport type { Block as IBlock, Dimension as IDimension, BlockInventoryComponent } from 'mojang-minecraft'\n\n/**\n * BeAPI wrapper object for Minecraft IBlock. Adds a bunch of\n * abstracted methods to mutate and access props on block easier.\n */\nexport class Block {\n  /**\n   * Protected circular client reference.\n   */\n  protected readonly _client: Client\n  /**\n   * Protected IBlock reference to wrap.\n   */\n  protected readonly _IBlock: IBlock\n\n  /**\n   * BeAPI wrapper object for Minecraft IBlock. Adds a bunch of\n   * abstracted methods to mutate and access props on block easier.\n   * @param client Client reference.\n   * @param IBlock IBlock to wrap.\n   */\n  public constructor(client: Client, IBlock: IBlock) {\n    this._client = client\n    this._IBlock = IBlock\n  }\n\n  /**\n   * Gets Minecraf IBlock thats being wrapped.\n   * @returns\n   */\n  public getIBlock(): IBlock {\n    return this._IBlock\n  }\n\n  /**\n   * Gets the blocks identifier.\n   * @returns\n   */\n  public getId(): string {\n    return this._IBlock.id\n  }\n\n  /**\n   * Gets the wrapped Minecraft blocktype.\n   * @returns\n   */\n  public getType(): BlockType {\n    return new BlockType(this._client, this._IBlock.type)\n  }\n\n  /**\n   * Sets a wrapped Minecraft blocktype.\n   * @param type Wrapped blocktype.\n   */\n  public setType(type: BlockType): void {\n    this._IBlock.setType(type.getIBlockType())\n  }\n\n  /**\n   * Gets the blocks permutation.\n   * @returns\n   */\n  public getPermutation(): Permutation {\n    return new Permutation(this._client, this._IBlock.permutation)\n  }\n\n  /**\n   * Sets the block permutation.\n   * @param permutation Block permutation to apply.\n   */\n  public setPermutation(permutation: Permutation): void {\n    this._IBlock.setPermutation(permutation.getIPermutation())\n  }\n\n  /**\n   * Gets the block dimension.\n   * @returns\n   */\n  public getDimension(): IDimension {\n    return this._IBlock.dimension\n  }\n\n  /**\n   * Gets the blocks dimension name.\n   * @returns\n   */\n  public getDimensionName(): Dimension {\n    const id = this.getDimension().id.split(':')[1].replace(/_/g, ' ')\n\n    return id as Dimension\n  }\n\n  /**\n   * Gets the blocks location.\n   * @returns\n   */\n  public getLocation(): Location {\n    const pos = this._IBlock.location\n\n    return {\n      x: Math.floor(pos.x),\n      y: Math.floor(pos.y),\n      z: Math.floor(pos.z),\n    }\n  }\n\n  /**\n   * Gets precise location (decimals)\n   * @returns\n   */\n  public getPreciseLocation(): Location {\n    const pos = this._IBlock.location\n\n    return {\n      x: pos.x,\n      y: pos.y,\n      z: pos.z,\n    }\n  }\n\n  /**\n   * Checks if the block is empty.\n   * @returns\n   */\n  public isEmpty(): boolean {\n    return this._IBlock.isEmpty\n  }\n\n  /**\n   * Checks if there is water in the block.\n   * @returns\n   */\n  public isWaterLogged(): boolean {\n    return this._IBlock.isWaterlogged\n  }\n\n  /**\n   * Gets the blocks tags.\n   * @returns\n   */\n  public getTags(): string[] {\n    return this._IBlock.getTags()\n  }\n\n  /**\n   * Checks if the block has a specific tag.\n   * @param tag Tag to check.\n   * @returns\n   */\n  public hasTag(tag: string): boolean {\n    return this._IBlock.hasTag(tag)\n  }\n\n  /**\n   * Gets a specific component from the block.\n   * @param component Component to get.\n   * @returns\n   */\n  public getComponent<K extends keyof BlockComponents>(component: K): BlockComponents[K] {\n    return this._IBlock.getComponent(component)\n  }\n\n  /**\n   * Checks if the block has a specific component.\n   * @param component Component to check.\n   * @returns\n   */\n  public hasComponent<K extends keyof BlockComponents>(component: K): boolean {\n    if (this.getComponent(component) === null) return false\n\n    return true\n  }\n\n  /**\n   * Attempts to get the block inventory.\n   * @returns can be `undefined`\n   */\n  public getInventory(): BlockInventory | undefined {\n    if (!this.getComponent('inventory')) return\n\n    return new BlockInventory(this._client, this._IBlock.getComponent('inventory') as BlockInventoryComponent)\n  }\n}\n","// Type imports.\nimport type { Client } from '..'\nimport type { BlockType as IBlockType, BlockPermutation } from 'mojang-minecraft'\n\n/**\n * BeAPI wrapped Minecraft BlockType for BeAPIs Block counterpart.\n */\nexport class BlockType {\n  /**\n   * Protected client reference.\n   */\n  protected readonly _client: Client\n  /**\n   * Protected block type to wrap.\n   */\n  protected readonly _IBlockType: IBlockType\n\n  /**\n   * BeAPI wrapped Minecraft BlockType for BeAPIs Block counterpart.\n   * @param client Client reference.\n   * @param IBlockType Block type to wrap.\n   */\n  public constructor(client: Client, IBlockType: IBlockType) {\n    this._client = client\n    this._IBlockType = IBlockType\n  }\n\n  /**\n   * Gets the Minecraft IBlockType being wrapped.\n   * @returns\n   */\n  public getIBlockType(): IBlockType {\n    return this._IBlockType\n  }\n\n  /**\n   * Gets the block types identifier.\n   * @returns\n   */\n  public getId(): string {\n    return this._IBlockType.id\n  }\n\n  /**\n   * Can the block have water in it?\n   * @returns\n   */\n  public canBeWaterLogged(): boolean {\n    return this._IBlockType.canBeWaterlogged\n  }\n\n  /**\n   * Creates a new permutation for the block.\n   * @returns\n   */\n  public createPermutation(): BlockPermutation {\n    return this._IBlockType.createDefaultBlockPermutation()\n  }\n}\n","// Regular imports.\nimport { BlockType } from './'\n\n// Type imports.\nimport type { Client } from '..'\nimport type { BlockPermutation as IPermutation, IBlockProperty } from 'mojang-minecraft'\n\n/**\n * BeAPI wrapped block permutation. Acts as BeAPI Block and BlockType\n * counterpart. Allows for a smoother block permutation expierence.\n */\nexport class Permutation {\n  /**\n   * Circular client reference.\n   */\n  protected readonly _client: Client\n  /**\n   * Minecraft IPermutation to wrap.\n   */\n  protected readonly _IPermutation: IPermutation\n\n  /**\n   * BeAPI wrapped block permutation. Acts as BeAPI Block and BlockType\n   * counterpart. Allows for a smoother block permutation expierence.\n   * @param client Client reference.\n   * @param IPermutation IPermutation to wrap.\n   */\n  public constructor(client: Client, IPermutation: IPermutation) {\n    this._client = client\n    this._IPermutation = IPermutation\n  }\n\n  /**\n   * Get Minecraft IPermutation being wrapped.\n   * @returns\n   */\n  public getIPermutation(): IPermutation {\n    return this._IPermutation\n  }\n\n  /**\n   * Get BeAPI wrapped block type.\n   * @returns\n   */\n  public getType(): BlockType {\n    return new BlockType(this._client, this._IPermutation.type)\n  }\n\n  /**\n   * Get permutation tags.\n   * @returns\n   */\n  public getTags(): string[] {\n    return this._IPermutation.getTags()\n  }\n\n  /**\n   * Check if permutation has a specific tag.\n   * @param tag Tag to check.\n   * @returns\n   */\n  public hasTag(tag: string): boolean {\n    return this._IPermutation.hasTag(tag)\n  }\n\n  /**\n   * Gets permutation block properties.\n   * @returns\n   */\n  public getProperties(): IBlockProperty[] {\n    return this._IPermutation.getAllProperties()\n  }\n\n  /**\n   * Checks if permutation has a specific property.\n   * @param property Property to check.\n   * @returns\n   */\n  public hasProperty(property: string): boolean {\n    const check = this.getProperties().find((x) => x.name === property)\n    if (!check) return false\n\n    return true\n  }\n\n  /**\n   * Gets a specific property from the permutation.\n   * @param property Permutation to get.\n   * @returns\n   */\n  public getProperty(property: string): IBlockProperty {\n    return this._IPermutation.getProperty(property)\n  }\n\n  /**\n   * Clones the block permutation creating a seperate reference.\n   * @returns\n   */\n  public clone(): Permutation {\n    return new Permutation(this._client, this._IPermutation.clone())\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { world, BlockBreakEvent } from 'mojang-minecraft'\nimport { Block } from '../block'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI block destroyed event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class BlockDestroyed extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('BlockDestroyed')\n  public readonly name = 'BlockDestroyed'\n\n  // Predefined in AbstractEvent.\n  @setProto('blockBreak')\n  public readonly iName = 'blockBreak'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI block destroyed event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(arg: BlockBreakEvent): void {\n    // Attempt to get the player who destroyed the block.\n    const player = this._client.players.getByIPlayer(arg.player)\n    // If not player could be found return.\n    if (!player) return\n\n    // Emit this event on client using name defined above.\n    this._client.emit(this.name, {\n      player,\n      block: new Block(this._client, arg.block),\n      brokenBlock: arg.brokenBlockPermutation,\n      dimension: arg.dimension,\n      cancel() {\n        // TEMP: Until mojang actually adds a cancel event.\n        arg.block.setPermutation(arg.brokenBlockPermutation)\n      },\n    })\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { Block } from '../block'\nimport { setProto } from '../'\nimport { world, Player as IPlayer, EntityHitEvent } from 'mojang-minecraft'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI block hit event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class BlockHit extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('BlockHit')\n  public readonly name = 'BlockHit'\n\n  // Predefined in AbstractEvent.\n  @setProto('entityHit')\n  public readonly iName = 'entityHit'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI block hit event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: EntityHitEvent): void {\n    // If was not a block hit we dont care, return.\n    if (!data.hitBlock) return\n\n    // Attempt to get the entity who hit the block as a player.\n    const player = this._client.players.getByIPlayer(data.entity as IPlayer)\n\n    // If no player then return.\n    if (!player) return\n\n    // Emit this event on client using name defined above.\n    return this._client.emit(this.name, {\n      player,\n      block: new Block(this._client, data.hitBlock),\n      tool: player.getInventory().getItem(player.getSelectedSlot()),\n    })\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\nimport { BeforeItemUseEvent, world, Player as IPlayer } from 'mojang-minecraft'\nimport { Item } from '../item'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI item use event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class ItemUse extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('ItemUse')\n  public readonly name = 'ItemUse'\n\n  // Predefined in AbstractEvent.\n  @setProto('beforeItemUse')\n  public readonly iName = 'beforeItemUse'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI item use event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(arg: BeforeItemUseEvent): void {\n    // Emit use item event stuffs.\n    this._client.emit(this.name, {\n      source:\n        arg.source instanceof IPlayer\n          ? this._client.players.getByIPlayer(arg.source)\n          : this._client.entities.getByIEntity(arg.source),\n      item: new Item(this._client, arg.item) ?? undefined,\n      cancel() {\n        arg.cancel = true\n      },\n    })\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\nimport { Block } from '../block'\nimport { Item } from '../item'\nimport { BeforeItemUseOnEvent, world, Player as IPlayer } from 'mojang-minecraft'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI item interact event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class ItemInteract extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('ItemInteract')\n  public readonly name = 'ItemInteract'\n\n  // Predefined in AbstractEvent.\n  @setProto('beforeItemUseOn')\n  public readonly iName = 'beforeItemUseOn'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI item interact event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(arg: BeforeItemUseOnEvent): void {\n    // Emit de blok event.\n    this._client.emit(this.name, {\n      source:\n        arg.source instanceof IPlayer\n          ? this._client.players.getByIPlayer(arg.source)\n          : this._client.entities.getByIEntity(arg.source),\n      item: new Item(this._client, arg.item) ?? undefined,\n      block: new Block(this._client, arg.source.dimension.getBlock(arg.blockLocation)),\n      blockLocation: arg.blockLocation,\n      faceLocationX: arg.faceLocationX,\n      faceLocationY: arg.faceLocationY,\n      cancel() {\n        arg.cancel = true\n      },\n    })\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\nimport { BeforeItemDefinitionTriggeredEvent, world, Player } from 'mojang-minecraft'\nimport { Item } from '../item'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI item event event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class ItemEvent extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('ItemEvent')\n  public readonly name = 'ItemEvent'\n\n  // Predefined in AbstractEvent.\n  @setProto('beforeItemDefinitionEvent')\n  public readonly iName = 'beforeItemDefinitionEvent'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI item event event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  protected __logic(arg: BeforeItemDefinitionTriggeredEvent): void {\n    // If source is a player we dont care return.\n    if (arg.source.id !== 'minecraft:player') return\n\n    // Attempt to get the player.\n    const player = this._client.players.getByIPlayer(arg.source as Player)\n\n    // If no player return.\n    if (!player) return\n\n    // Emit de item evente.\n    this._client.emit(this.name, {\n      player: player,\n      item: new Item(this._client, arg.item),\n      event: arg.eventName,\n      cancel() {\n        arg.cancel = true\n      },\n    })\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { Client, Player } from '..'\n\n/**\n * BeAPI item dropped event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class ItemDropped extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('ItemDropped')\n  public readonly name = 'ItemDropped'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI item dropped event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('Swing', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('Swing', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  protected __logic(data: Player): void {\n    // TODO: This is pretty unreliable, throwing an item while facing a wall will void this.\n\n    // Get block location of swing.\n    const block = this._client.world.getBlock(data.getLocation(), data.getDimensionName())\n    // Get latest entity.\n    const entity = this._client.entities.getLastest()\n    // If latest entity is not an item or block that was swung at was not air return.\n    if (!entity || entity?.getId() !== 'minecraft:item' || block.getId() !== 'minecraft:air') return\n\n    // Emit throw event.\n    this._client.emit(this.name, {\n      player: data,\n      item: entity,\n    })\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { world, Player as IPlayer, EntityCreateEvent } from 'mojang-minecraft'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI entity created event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class EntityCreated extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('EntityCreated')\n  public readonly name = 'EntityCreated'\n\n  // Predefined in AbstractEvent.\n  @setProto('entityCreate')\n  public readonly iName = 'entityCreate'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI entity created event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(arg: EntityCreateEvent): void {\n    // If entity is instance of a player we dont want.\n    if (arg.entity instanceof IPlayer) return\n\n    // Create a new entity using entity manager.\n    const entity = this._client.entities.create(arg.entity)\n    // Add the newly created entity to entity manager.\n    this._client.entities.add(entity)\n\n    // Emit event with new entity.\n    this._client.emit(this.name, entity)\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI entity destroyed event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class EntityDestroyed extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('EntityDestroyed')\n  public readonly name = 'EntityDestroyed'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI entity destroyed event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      // TEMP: Mojang Needs To Add Entity Destroyed Event\n      this._client.addListener('Tick', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      // TEMP: Mojang Needs To Add Entity Destroyed Event\n      this._client.removeListener('Tick', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(): void {\n    // For every entity in the entity manager interate.\n    for (const [, entity] of this._client.entities.getAll()) {\n      // Try to get the entities id. If it returns an error\n      // (which it will when its dead as you are trying to access\n      // released memory through a now invalidated pointer)\n      // Then emit the death event on the entity and remove it\n      // from the entity manager\n      try {\n        entity.getIEntity().id\n      } catch {\n        this._client.emit(this.name, entity)\n        this._client.entities.remove(entity)\n      }\n    }\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI player tag event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class PlayerTag extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('PlayerTag')\n  public readonly name = 'PlayerTag'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI player tag event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('Tick', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('Tick', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(): void {\n    // For every player in player manager, iterate.\n    for (const [, player] of this._client.players.getAll()) {\n      try {\n        // For every tag the player has, iterate.\n        for (const tag of player.getTags()) {\n          // If tag does not start with \"beapi:\" continue to next itr.\n          if (!tag.startsWith('beapi:')) continue\n          // Remove tag from player.\n          player.removeTag(tag)\n          // Emit event to client.\n          this._client.emit(this.name, {\n            player,\n            // Remove \"beapi:\" from tag.\n            tag: tag.replace('beapi:', ''),\n          })\n        }\n      } catch {}\n    }\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI entity tag event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class EntityTag extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('EntityTag')\n  public readonly name = 'EntityTag'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI entity tag event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('Tick', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('Tick', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(): void {\n    // For every entity in entity manager, iterate\n    for (const [, entity] of this._client.entities.getAll()) {\n      try {\n        // For every tag the entity has, iterate.\n        for (const tag of entity.getTags()) {\n          // If tag does not start with \"beapi:\" continue\n          if (!tag.startsWith('beapi:')) continue\n          // Remove the \"beapi:\" tag from the player\n          entity.removeTag(tag)\n          // Emit entity tag event.\n          this._client.emit(this.name, {\n            entity,\n            // Remove \"beapi:\" from tag.\n            tag: tag.replace('beapi:', ''),\n          })\n        }\n      } catch {}\n    }\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { Client } from '../client'\nimport type { PlayerTagEvent } from '..'\n\n/**\n * BeAPI entered water event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class EnteredWater extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('EnteredWater')\n  public readonly name = 'EnteredWater'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI entered water event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: PlayerTagEvent): void {\n    // If the beapi tag is not \"in_water\" return\n    if (data.tag !== 'in_water') return\n    // Set player isInWater to true.\n    data.player.isInWater(true)\n    // Emit in wator event.\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { PlayerTagEvent } from '..'\nimport type { Client } from '../client'\n\n/**\n * BeAPI exited water event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class ExitedWater extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('ExitedWater')\n  public readonly name = 'ExitedWater'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI exited water event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: PlayerTagEvent): void {\n    // If the beapi tag is not \"exit_water\" return.\n    if (data.tag !== 'exit_water') return\n    // Set isInWater to false cause they are not.\n    data.player.isInWater(false)\n    // Emit the waterless event.\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { PlayerTagEvent } from '..'\nimport type { Client } from '../client'\n\n/**\n * BeAPI jump event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class Jump extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('Jump')\n  public readonly name = 'Jump'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI jump event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: PlayerTagEvent): void {\n    // If not correct tag return.\n    if (data.tag !== 'jump') return\n    // Set isGrounded to false.\n    data.player.isGrounded(false)\n\n    // Emit jump event client.\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { PlayerTagEvent } from '..'\nimport type { Client } from '../client'\n\n/**\n * BeAPI landed event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class Landed extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('Landed')\n  public readonly name = 'Landed'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI landed event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  protected __logic(data: PlayerTagEvent): void {\n    // If not correct tag return.\n    if (data.tag !== 'land') return\n    // Set grounded to true.\n    data.player.isGrounded(true)\n    // Emit the landed event.\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { PlayerTagEvent } from '..'\nimport type { Client } from '../client'\n\n/**\n * BeAPI swing event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class Swing extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('Swing')\n  public readonly name = 'Swing'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI swing event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: PlayerTagEvent): void {\n    // If not correct tag return.\n    if (data.tag !== 'swing') return\n    // Emit to client.\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { PlayerTagEvent } from '..'\nimport type { Client } from '../client'\n\n/**\n * BeAPI started burning event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class StartedBurning extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('StartedBurning')\n  public readonly name = 'StartedBurning'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI started burning event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: PlayerTagEvent): void {\n    // If not correct tag return.\n    if (data.tag !== 'on_fire') return\n    // Set is burning to true.\n    data.player.isBurning(true)\n    // Emit a client event.\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { PlayerTagEvent } from '..'\nimport type { Client } from '../client'\n\n/**\n * BeAPI stopped burning event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class StoppedBurning extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('StoppedBurning')\n  public readonly name = 'StoppedBurning'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI stopped burning event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  protected __logic(data: PlayerTagEvent): void {\n    // If not correct tag return.\n    if (data.tag !== 'off_fire') return\n    // Set burning to galse.\n    data.player.isBurning(false)\n\n    // Emit event on client.\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { PlayerTagEvent } from '..'\nimport type { Client } from '../client'\n\n/**\n * BeAPI started moving event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class StartedMoving extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('StartedMoving')\n  public readonly name = 'StartedMoving'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI started moving event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: PlayerTagEvent): void {\n    // If not correct tag return\n    if (data.tag !== 'on_move') return\n    // Set isMoving to true.\n    data.player.isMoving(true)\n    // Emit moving event.\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { PlayerTagEvent } from '..'\nimport type { Client } from '../client'\n\n/**\n * BeAPI stopped moving event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class StoppedMoving extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('StoppedMoving')\n  public readonly name = 'StoppedMoving'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI stopped moving event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: PlayerTagEvent): void {\n    // If not correct tag return.\n    if (data.tag !== 'off_move') return\n    // Set is moving to false.\n    data.player.isMoving(false)\n    // Emit event on client.\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { PlayerTagEvent } from '..'\nimport type { Client } from '../client'\n\n/**\n * BeAPI started riding event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class StartedRiding extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('StartedRiding')\n  public readonly name = 'StartedRiding'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI started riding event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: PlayerTagEvent): void {\n    // If not correct tag return.\n    if (data.tag !== 'on_ride') return\n    // Set isRiding to true.\n    data.player.isRiding(true)\n    // Emit riding event.\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { PlayerTagEvent } from '..'\nimport type { Client } from '../client'\n\n/**\n * BeAPI stopped riding event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class StoppedRiding extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('StoppedRiding')\n  public readonly name = 'StoppedRiding'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI stopped riding event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: PlayerTagEvent): void {\n    // If not correct tag return.\n    if (data.tag !== 'off_ride') return\n    // Set is riding to false.\n    data.player.isRiding(false)\n\n    // Emit event on client.\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { PlayerTagEvent } from '..'\nimport type { Client } from '../client'\n\n/**\n * BeAPI started sleeping event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class StartedSleeping extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('StartedSleeping')\n  public readonly name = 'StartedSleeping'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI started sleeping event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: PlayerTagEvent): void {\n    // If not correct tag return.\n    if (data.tag !== 'sleep') return\n    // Set isSleeping to true.\n    data.player.isSleeping(true)\n    // Emit to client.\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { PlayerTagEvent } from '..'\nimport type { Client } from '../client'\n\n/**\n * BeAPI stopped sleeping event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class StoppedSleeping extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('StoppedSleeping')\n  public readonly name = 'StoppedSleeping'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI stopped sleeping event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: PlayerTagEvent): void {\n    // If not correct tag return.\n    if (data.tag !== 'wake') return\n    // Set is sleeping to false.\n    data.player.isSleeping(false)\n\n    // Emit event on client.\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { PlayerTagEvent } from '..'\nimport type { Client } from '../client'\n\n/**\n * BeAPI started sneaking event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class StartedSneaking extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('StartedSneaking')\n  public readonly name = 'StartedSneaking'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI started sneaking event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: PlayerTagEvent): void {\n    // If not correct tag return.\n    if (data.tag !== 'sneak') return\n    // Emit through client.\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { PlayerTagEvent } from '..'\nimport type { Client } from '../client'\n\n/**\n * BeAPI stopped sneaking event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class StoppedSneaking extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('StoppedSneaking')\n  public readonly name = 'StoppedSneaking'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI stopped sneaking event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: PlayerTagEvent): void {\n    // If not correct tag return.\n    if (data.tag !== 'unsneak') return\n    // Emit event on client\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { PlayerTagEvent } from '..'\nimport type { Client } from '../client'\n\n/**\n * BeAPI started sprinting event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class StartedSprinting extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('StartedSprinting')\n  public readonly name = 'StartedSprinting'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI started sprinting event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: PlayerTagEvent): void {\n    // If not correct tag return.\n    if (data.tag !== 'on_sprint') return\n    // Set sprinting to true.\n    data.player.isSprinting(true)\n    // Emit client event.\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { PlayerTagEvent } from '..'\nimport type { Client } from '../client'\n\n/**\n * BeAPI stopped sprinting event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class StoppedSprinting extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('StoppedSprinting')\n  public readonly name = 'StoppedSprinting'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI stopped sprinting event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: PlayerTagEvent): void {\n    // If not correct tag return.\n    if (data.tag !== 'off_sprint') return\n    // Set is sprinting to false.\n    data.player.isSprinting(false)\n\n    // Emit event to client.\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { PlayerTagEvent } from '..'\nimport type { Client } from '../client'\n\n/**\n * BeAPI started swimming event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class StartedSwimming extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('StartedSwimming')\n  public readonly name = 'StartedSwimming'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI started swimming event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: PlayerTagEvent): void {\n    // If not correct tag return.\n    if (data.tag !== 'on_swim') return\n    // Set swimming to true.\n    data.player.isSwimming(true)\n\n    // Emit event to client.\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { PlayerTagEvent } from '..'\nimport type { Client } from '../client'\n\n/**\n * BeAPI stopped swimming event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class StoppedSwimming extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('StoppedSwimming')\n  public readonly name = 'StoppedSwimming'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI stopped swimming event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: PlayerTagEvent): void {\n    // If not correct tag return.\n    if (data.tag !== 'off_swim') return\n    // Set swimming to false.\n    data.player.isSwimming(false)\n\n    // Emit event to client.\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Regular types.\nimport AbstractEvent from './AbstractEvent'\nimport { world, Player as IPlayer, EntityHitEvent } from 'mojang-minecraft'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI entity hit event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class EntityHit extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('EntityHit')\n  public readonly name = 'EntityHit'\n\n  // Predefined in AbstractEvent.\n  @setProto('entityHit')\n  public readonly iName = 'entityHit'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI entity hit event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: EntityHitEvent): void {\n    // If not hit entity then why are we here.\n    if (!data.hitEntity) return\n    // If hit entity is player ignore, we have a seperate event for this.\n    if (data.hitEntity.id === 'minecraft:player') return\n\n    // Attempt to get the attacker (can be undefined).\n    const attacker =\n      data.entity instanceof IPlayer\n        ? this._client.players.getByIPlayer(data.entity)\n        : this._client.entities.getByIEntity(data.entity)\n\n    // Attempt to get the target hit entity.\n    const target = this._client.entities.getByIEntity(data.hitEntity)\n\n    // If no target return\n    if (!target) return\n\n    // Emit client event with event name.\n    return this._client.emit(this.name, {\n      attacker,\n      target,\n      weapon: attacker?.getInventory()?.getItem(attacker.getSelectedSlot()) ?? undefined,\n    })\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\nimport { world, EntityHitEvent, Player as IPlayer } from 'mojang-minecraft'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI player hit event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class PlayerHit extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('PlayerHit')\n  public readonly name = 'PlayerHit'\n\n  // Predefined in AbstractEvent.\n  @setProto('entityHit')\n  public readonly iName = 'entityHit'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI player hit event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: EntityHitEvent): void {\n    // If not hit entity then why are we here.\n    if (!data.hitEntity) return\n    // If hit entity is not a player then return.\n    if (data.hitEntity.id !== 'minecraft:player') return\n\n    // Attempt to get the attacker.\n    const attacker =\n      data.entity instanceof IPlayer\n        ? this._client.players.getByIPlayer(data.entity)\n        : this._client.entities.getByIEntity(data.entity)\n\n    // Attempt to get the vitim.\n    const target = this._client.players.getByIPlayer(data.hitEntity as IPlayer)\n\n    // If no target return.\n    if (!target) return\n\n    // Emit event to client.\n    return this._client.emit(this.name, {\n      attacker,\n      target,\n      weapon: attacker?.getInventory()?.getItem(attacker.getSelectedSlot()) ?? undefined,\n    })\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\nimport { BeforeExplosionEvent, world } from 'mojang-minecraft'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI explosion event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class Explosion extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('Explosion')\n  public readonly name = 'Explosion'\n\n  // Predefined in AbstractEvent.\n  @setProto('beforeExplosion')\n  public readonly iName = 'beforeExplosion'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI explosion event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  protected __logic(arg: BeforeExplosionEvent): void {\n    // Attempt to get the source entity.\n    const entity = this._client.entities.getByIEntity(arg.source)\n\n    // Emit the boom boom event.\n    this._client.emit(this.name, {\n      source: entity,\n      dimension: arg.dimension,\n      impactedBlocks: arg.impactedBlocks,\n      cancel() {\n        arg.cancel = true\n      },\n    })\n  }\n}\n","// Regular imports.\nimport { setProto } from '../'\nimport AbstractEvent from './AbstractEvent'\n\n// Type imports.\nimport type { PlayerTagEvent } from '..'\nimport type { Client } from '../client'\n\n/**\n * BeAPI death event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class Death extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('Death')\n  public readonly name = 'Death'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI death event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: PlayerTagEvent): void {\n    // If the beapi tag is not \"died\" return\n    if (data.tag !== 'died') return\n    // Set player isAlive to false cause they ded.\n    data.player.isAlive(false)\n    // Emit the deathed event.\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { PlayerTagEvent } from '..'\nimport type { Client } from '../client'\n\n/**\n * BeAPI respawn event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class Respawn extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('Respawn')\n  public readonly name = 'Respawn'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI respawn event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('PlayerTag', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('PlayerTag', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: PlayerTagEvent): void {\n    // If not correct tag return.\n    if (data.tag !== 'respawn') return\n    // Set is alive to true.\n    data.player.isAlive(true)\n    // Emit to client.\n    this._client.emit(this.name, data.player)\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\nimport { Block } from '../block'\nimport { BeforePistonActivateEvent, world } from 'mojang-minecraft'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI piston event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class Piston extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('Piston')\n  public readonly name = 'Piston'\n\n  // Predefined in AbstractEvent.\n  @setProto('beforePistonActivate')\n  public readonly iName = 'beforePistonActivate'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI piston event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(arg: BeforePistonActivateEvent): void {\n    // Emit wrapped client event.\n    this._client.emit(this.name, {\n      block: new Block(this._client, arg.block),\n      dimension: arg.dimension,\n      piston: arg.piston,\n      extending: arg.isExpanding,\n      cancel() {\n        arg.cancel = true\n      },\n    })\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { EffectAddEvent, world, Player as IPlayer } from 'mojang-minecraft'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI effect added event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class EffectAdded extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('EffectAdded')\n  public readonly name = 'EffectAdded'\n\n  // Predefined in AbstractEvent.\n  @setProto('effectAdd')\n  public readonly iName = 'effectAdd'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI effect added event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(arg: EffectAddEvent): void {\n    // Emit dee effect event yuh.\n    this._client.emit(this.name, {\n      // Target can be entity or player and it has a change\n      // of being undefined cause Minecraft.\n      target:\n        arg.entity instanceof IPlayer\n          ? this._client.players.getByIPlayer(arg.entity)\n          : this._client.entities.getByIEntity(arg.entity),\n      effect: arg.effect,\n      state: arg.effectState,\n    })\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\nimport { WeatherChangeEvent, world } from 'mojang-minecraft'\n\n// Type imports.\nimport type { Client } from '../client'\nimport type { Dimension } from '../types'\n\n/**\n * BeAPI weather updated event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class WeatherUpdated extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('WeatherUpdated')\n  public readonly name = 'WeatherUpdated'\n\n  // Predefined in AbstractEvent.\n  @setProto('weatherChange')\n  public readonly iName = 'weatherChange'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI weather updated event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(arg: WeatherChangeEvent): void {\n    // Get the dimension it occured in.\n    const dimension = this._client.world.getDimension(arg.dimension as Dimension)\n    // Emit event through client.\n    this._client.emit(this.name, {\n      lightning: arg.lightning,\n      raining: arg.raining,\n      dimension,\n    })\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport { TickEvent, world } from 'mojang-minecraft'\nimport type { Client } from '../client'\n\n/**\n * BeAPI tick event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class Tick extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('Tick')\n  public readonly name = 'Tick'\n\n  // Predefined in AbstractEvent.\n  @setProto('tick')\n  public readonly iName = 'tick'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI tick event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(arg: TickEvent): void {\n    // Emit the event through client.\n    this._client.emit(this.name, {\n      currentTick: arg.currentTick,\n      deltaTime: arg.deltaTime,\n    })\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { world, Player as IPlayer, BeforeDataDrivenEntityTriggerEvent } from 'mojang-minecraft'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI entity event trigger event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class EntityEventTrigger extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('EntityEventTrigger')\n  public readonly name = 'EntityEventTrigger'\n\n  // Predefined in AbstractEvent.\n  @setProto('beforeDataDrivenEntityTriggerEvent')\n  public readonly iName = 'beforeDataDrivenEntityTriggerEvent'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI entity event trigger event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(arg: BeforeDataDrivenEntityTriggerEvent): void {\n    // If entity is instance of a player we dont want.\n    if (arg.entity instanceof IPlayer) return\n\n    // Try to get the entity from entity manager.\n    const entity = this._client.entities.getByIEntity(arg.entity)\n\n    // If not entity then return.\n    if (!entity) return\n\n    // Otherwise emit event event trigger through client.\n    this._client.emit(this.name, {\n      entity,\n      event: arg.id,\n      data: arg.modifiers,\n      cancel: () => {\n        arg.cancel = true\n      },\n    })\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\nimport { world, Player as IPlayer, BeforeDataDrivenEntityTriggerEvent } from 'mojang-minecraft'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI player event trigger event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class PlayerEventTrigger extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('PlayerEventTrigger')\n  public readonly name = 'PlayerEventTrigger'\n\n  // Predefined in AbstractEvent.\n  @setProto('beforeDataDrivenEntityTriggerEvent')\n  public readonly iName = 'beforeDataDrivenEntityTriggerEvent'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI player event trigger event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(arg: BeforeDataDrivenEntityTriggerEvent): void {\n    // If not instance of player we dont care.\n    if (!(arg.entity instanceof IPlayer)) return\n\n    // Try to get the player from player manager.\n    const player = this._client.players.getByIPlayer(arg.entity)\n\n    // If no player return.\n    if (!player) return\n\n    // Emit the client event.\n    this._client.emit(this.name, {\n      player,\n      event: arg.id,\n      data: arg.modifiers,\n      cancel: () => {\n        arg.cancel = true\n      },\n    })\n  }\n}\n","// Normal imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\nimport { world, Player as IPlayer, BeforeItemDefinitionTriggeredEvent } from 'mojang-minecraft'\nimport { Item } from '../item'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI item event trigger event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class ItemEventTrigger extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('ItemEventTrigger')\n  public readonly name = 'ItemEventTrigger'\n\n  // Predefined in AbstractEvent.\n  @setProto('beforeItemDefinitionEvent')\n  public readonly iName = 'beforeItemDefinitionEvent'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI item event trigger event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(arg: BeforeItemDefinitionTriggeredEvent): void {\n    // Emit client event with wrapped stuffs.\n    this._client.emit(this.name, {\n      source:\n        arg.source instanceof IPlayer\n          ? this._client.players.getByIPlayer(arg.source)\n          : this._client.entities.getByIEntity(arg.source),\n      event: arg.eventName,\n      item: new Item(this._client, arg.item),\n      cancel: () => {\n        arg.cancel = true\n      },\n    })\n  }\n}\n","// Regular imports.\nimport { setProto } from '../'\nimport AbstractEvent from './AbstractEvent'\n// Type imports.\nimport type { Client } from '../client'\nimport type { Player } from '../player'\nimport type { Objective } from '../types'\n\n// Private OldScore Interface.\ninterface OldScore {\n  score: number\n  objective: Objective\n}\n\n/**\n * BeAPI player score updated event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class PlayerScoreUpdated extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Map of old scores per player.\n  protected readonly oldScores = new Map<Player, OldScore[]>()\n  // Protected event for ignoring next score update for player id.\n  protected ignoreNextFor: Player[] = []\n\n  // Predefined in AbstractEvent.\n  @setProto('PlayerScoreUpdated')\n  public readonly name = 'PlayerScoreUpdated'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI player score updated event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('Tick', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('Tick', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(): void {\n    // For every entity in entity manager, iterate.\n    for (const [, entity] of this._client.players.getAll()) {\n      // Initialize empty old score array.\n      const scores: OldScore[] = []\n\n      // For every objective in world, iterate.\n      for (const objective of this._client.scoreboards.getObjectives()) {\n        // Get the score for entity on objective.\n        const score = entity.getScore(objective)\n\n        // Push their current score to scores array.\n        scores.push({\n          score,\n          objective,\n        })\n      }\n\n      // If entity does not have old score set current ones and continue\n      if (!this.oldScores.has(entity)) {\n        this.oldScores.set(entity, scores)\n        continue\n      }\n\n      // Iterate through all the current scores and compare with old scores\n      for (const oldScore of this.oldScores.get(entity)!) {\n        // Attempt to find the current score.\n        const currentScore = scores.find((x) => x.objective.id === oldScore.objective.id)\n        // If not current score skip.\n        if (!currentScore) continue\n        // If current score equals old score skip.\n        if (currentScore.score === oldScore.score) continue\n\n        // If ignore next, ignore this iteration\n        if (this.ignoreNextFor.includes(entity)) {\n          // Remove first occurance of their id in removeNextFor array.\n          this.ignoreNextFor.splice(this.ignoreNextFor.indexOf(entity), 1)\n          continue\n        }\n\n        // Emit score updated event.\n        this._client.emit(this.name, {\n          player: entity,\n          objective: currentScore.objective,\n          value: currentScore.score,\n          old: oldScore.score,\n          cancel: () => {\n            this.ignoreNextFor.push(entity)\n            entity.setScore(oldScore.objective, oldScore.score)\n          },\n        })\n      }\n\n      // Set old score to current scores.\n      this.oldScores.set(entity, scores)\n    }\n\n    // Cleanup old entity scores to prevent possible memory leak\n    for (const [entity] of this.oldScores) {\n      // Try to get the entities id. If it returns an error\n      // (which it will when its dead as you are trying to access\n      // released memory through a now invalidated pointer)\n      // The remove it from old scores.\n      try {\n        entity.getIPlayer().id\n      } catch {\n        this.ignoreNextFor = this.ignoreNextFor.filter((i) => i !== entity)\n        this.oldScores.delete(entity)\n      }\n    }\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { Client } from '../client'\nimport type { Entity } from '../entity'\nimport type { Objective } from '../types'\n\n// Private OldScore Interface.\ninterface OldScore {\n  score: number\n  objective: Objective\n}\n\n/**\n * BeAPI entity score updated event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class EntityScoreUpdated extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Map of old scores per entity.\n  protected readonly oldScores = new Map<Entity, OldScore[]>()\n\n  // Protected for ignoring next score update for player id.\n  protected ignoreNextFor: Entity[] = []\n\n  // Predefined in AbstractEvent.\n  @setProto('EntityScoreUpdated')\n  public readonly name = 'EntityScoreUpdated'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI entity score updated event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('Tick', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('Tick', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(): void {\n    // For every entity in entity manager, iterate.\n    for (const [, entity] of this._client.entities.getAll()) {\n      // Initialize empty old score array.\n      const scores: OldScore[] = []\n\n      // For every objective in world, iterate.\n      for (const objective of this._client.scoreboards.getObjectives()) {\n        // Get the score for entity on objective.\n        const score = entity.getScore(objective)\n\n        // Push their current score to scores array.\n        scores.push({\n          score,\n          objective,\n        })\n      }\n\n      // If entity does not have old score set current ones and continue\n      if (!this.oldScores.has(entity)) {\n        this.oldScores.set(entity, scores)\n        continue\n      }\n\n      // Iterate through all the current scores and compare with old scores\n      for (const oldScore of this.oldScores.get(entity)!) {\n        // Attempt to find the current score.\n        const currentScore = scores.find((x) => x.objective.id === oldScore.objective.id)\n        // If not current score skip.\n        if (!currentScore) continue\n        // If current score equals old score skip.\n        if (currentScore.score === oldScore.score) continue\n\n        // If ignore next, ignore this iteration\n        if (this.ignoreNextFor.includes(entity)) {\n          // Remove first occurance of their id in removeNextFor array.\n          this.ignoreNextFor.splice(this.ignoreNextFor.indexOf(entity), 1)\n          continue\n        }\n\n        // Emit score updated event.\n        this._client.emit(this.name, {\n          entity,\n          objective: currentScore.objective,\n          value: currentScore.score,\n          old: oldScore.score,\n          cancel: () => {\n            this.ignoreNextFor.push(entity)\n            entity.setScore(oldScore.objective, oldScore.score)\n          },\n        })\n      }\n\n      // Set old score to current scores.\n      this.oldScores.set(entity, scores)\n    }\n\n    // Cleanup old entity scores to prevent possible memory leak\n    for (const [entity] of this.oldScores) {\n      // Try to get the entities id. If it returns an error\n      // (which it will when its dead as you are trying to access\n      // released memory through a now invalidated pointer)\n      // The remove it from old scores.\n      try {\n        entity.getIEntity().id\n      } catch {\n        this.ignoreNextFor = this.ignoreNextFor.filter((i) => i !== entity)\n        this.oldScores.delete(entity)\n      }\n    }\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n// Type imports.\nimport type { Client } from '../client'\nimport type { Player } from '../player'\n\n/**\n * BeAPI player tags updated event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class PlayerTagsUpdated extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Map of old tags per entity.\n  protected readonly oldTags = new Map<Player, string[]>()\n\n  // Protected for ignoring next tag updates for player id.\n  protected ignoreNextAddFor: Player[] = []\n  protected ignoreNextRemoveFor: Player[] = []\n\n  // Predefined in AbstractEvent.\n  @setProto('PlayerTagsUpdated')\n  public readonly name = 'PlayerTagsUpdated'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI player tag updated event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('Tick', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('Tick', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(): void {\n    // For every entity in entity manager, iterate.\n    for (const [, entity] of this._client.players.getAll()) {\n      // Get all non beapi tags on the player\n      const tags = entity.getTags().filter((x) => !x.startsWith('beapi:'))\n\n      // If old tags does not contain entity\n      // Set them then continue to next iter.\n      if (!this.oldTags.has(entity)) {\n        this.oldTags.set(entity, tags)\n        continue\n      }\n\n      // For each tag of the entities old tags iterate.\n      for (const old of this.oldTags.get(entity) ?? []) {\n        // Attempt to find old tag in current tags.\n        const tag = tags.find((x) => x === old)\n        // If it has tag continue.\n        if (tag) continue\n\n        // If ignore next, ignore this iteration\n        if (this.ignoreNextRemoveFor.includes(entity)) {\n          // Remove first occurance of their id in removeNextFor array.\n          this.ignoreNextRemoveFor.splice(this.ignoreNextRemoveFor.indexOf(entity), 1)\n          continue\n        }\n\n        this._client.emit(this.name, {\n          player: entity,\n          tag: old,\n          method: 'remove',\n          cancel: () => {\n            entity.addTag(old)\n            this.ignoreNextAddFor.push(entity)\n          },\n        })\n      }\n      // For each tag the player currently has.\n      for (const current of tags) {\n        // Attempt to get old tags for entity.\n        const tag = this.oldTags.get(entity)?.find((x) => x === current)\n        // If it has tag continue.\n        if (tag) continue\n\n        // If ignore next, ignore this iteration\n        if (this.ignoreNextAddFor.includes(entity)) {\n          // Remove first occurance of their id in removeNextFor array.\n          this.ignoreNextAddFor.splice(this.ignoreNextAddFor.indexOf(entity), 1)\n          continue\n        }\n\n        this._client.emit(this.name, {\n          player: entity,\n          tag: current,\n          method: 'add',\n          cancel: () => {\n            entity.removeTag(current)\n            this.ignoreNextRemoveFor.push(entity)\n          },\n        })\n      }\n\n      this.oldTags.set(entity, tags)\n    }\n\n    // Cleanup old entity tags to prevent possible memory leak\n    for (const [entity] of this.oldTags) {\n      // Try to get the entities id. If it returns an error\n      // (which it will when its dead as you are trying to access\n      // released memory through a now invalidated pointer)\n      // The remove it from old scores.\n      try {\n        entity.getIPlayer().id\n      } catch {\n        this.ignoreNextAddFor = this.ignoreNextAddFor.filter((i) => i !== entity)\n        this.ignoreNextRemoveFor = this.ignoreNextRemoveFor.filter((i) => i !== entity)\n        this.oldTags.delete(entity)\n      }\n    }\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\n// Type imports.\nimport type { Client } from '../client'\nimport type { Entity } from '../entity'\n\n/**\n * BeAPI entity tags updated event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class EntityTagsUpdated extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Map of old tags per entity.\n  protected readonly oldTags = new Map<Entity, string[]>()\n\n  // Protected for ignoring next tag updates for player id.\n  protected ignoreNextAddFor: Entity[] = []\n  protected ignoreNextRemoveFor: Entity[] = []\n\n  // Predefined in AbstractEvent.\n  @setProto('EntityTagsUpdated')\n  public readonly name = 'EntityTagsUpdated'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI entity tag updated event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('Tick', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('Tick', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(): void {\n    // For every entity in entity manager, iterate.\n    for (const [, entity] of this._client.entities.getAll()) {\n      // Get all non beapi tags on the player\n      const tags = entity.getTags().filter((x) => !x.startsWith('beapi:'))\n\n      // If old tags does not contain entity\n      // Set them then continue to next iter.\n      if (!this.oldTags.has(entity)) {\n        this.oldTags.set(entity, tags)\n        continue\n      }\n\n      // For each tag of the entities old tags iterate.\n      for (const old of this.oldTags.get(entity) ?? []) {\n        // Attempt to find old tag in current tags.\n        const tag = tags.find((x) => x === old)\n        // If it has tag continue.\n        if (tag) continue\n\n        // If ignore next, ignore this iteration\n        if (this.ignoreNextRemoveFor.includes(entity)) {\n          // Remove first occurance of their id in removeNextFor array.\n          this.ignoreNextRemoveFor.splice(this.ignoreNextRemoveFor.indexOf(entity), 1)\n          continue\n        }\n\n        this._client.emit(this.name, {\n          entity,\n          tag: old,\n          method: 'remove',\n          cancel: () => {\n            entity.addTag(old)\n            this.ignoreNextAddFor.push(entity)\n          },\n        })\n      }\n      // For each tag the player currently has.\n      for (const current of tags) {\n        // Attempt to get old tags for entity.\n        const tag = this.oldTags.get(entity)?.find((x) => x === current)\n        // If it has tag continue.\n        if (tag) continue\n\n        // If ignore next, ignore this iteration\n        if (this.ignoreNextAddFor.includes(entity)) {\n          // Remove first occurance of their id in removeNextFor array.\n          this.ignoreNextAddFor.splice(this.ignoreNextAddFor.indexOf(entity), 1)\n          continue\n        }\n\n        this._client.emit(this.name, {\n          entity,\n          tag: current,\n          method: 'add',\n          cancel: () => {\n            entity.removeTag(current)\n            this.ignoreNextRemoveFor.push(entity)\n          },\n        })\n      }\n\n      this.oldTags.set(entity, tags)\n    }\n\n    // Cleanup old entity tags to prevent possible memory leak\n    for (const [entity] of this.oldTags) {\n      // Try to get the entities id. If it returns an error\n      // (which it will when its dead as you are trying to access\n      // released memory through a now invalidated pointer)\n      // The remove it from old scores.\n      try {\n        entity.getIEntity().id\n      } catch {\n        this.ignoreNextAddFor = this.ignoreNextAddFor.filter((i) => i !== entity)\n        this.ignoreNextRemoveFor = this.ignoreNextRemoveFor.filter((i) => i !== entity)\n        this.oldTags.delete(entity)\n      }\n    }\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { world, Player as IPlayer, Entity as IEntity, EntityHurtEvent } from 'mojang-minecraft'\nimport { setProto } from '../'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI entity hurt event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class EntityHurt extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('EntityHurt')\n  public readonly name = 'EntityHurt'\n\n  // Predefined in AbstractEvent.\n  @setProto('entityHurt')\n  public readonly iName = 'entityHurt'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI entity hurt event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      // @ts-ignore TEMP: util Minecraft typings are updated.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      // @ts-ignore TEMP: util Minecraft typings are updated.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: EntityHurtEvent): void {\n    // If hit entity is player ignore, we have a seperate event for this.\n    if (data.hurtEntity.id === 'minecraft:player') return\n\n    // Attempt to get the attacker (can be undefined).\n    const attacker =\n      data.damagingEntity instanceof IPlayer\n        ? this._client.players.getByIPlayer(data.damagingEntity)\n        : this._client.entities.getByIEntity(data.damagingEntity)\n\n    // Attempt to get the target hit entity.\n    const target = this._client.entities.getByIEntity(data.hurtEntity)\n\n    // If no target return.\n    if (!target) return\n\n    // Attempt to get projectile (can be undefined)\n    const projectile =\n      data.projectile instanceof IEntity ? this._client.entities.getByIEntity(data.projectile) : undefined\n\n    // Emit entity hurt event.\n    return this._client.emit(this.name, {\n      attacker,\n      target,\n      weapon: attacker?.getInventory()?.getItem(attacker.getSelectedSlot()) ?? undefined,\n      damage: data.damage,\n      cause: data.cause,\n      projectile,\n    })\n  }\n}\n","// Regular imports.\nimport AbstractEvent from './AbstractEvent'\nimport { setProto } from '../'\nimport { world, Player as IPlayer, Entity as IEntity, EntityHurtEvent } from 'mojang-minecraft'\n\n// Type imports.\nimport type { Client } from '../client'\n\n/**\n * BeAPI player hurt event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class PlayerHurt extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('PlayerHurt')\n  public readonly name = 'PlayerHurt'\n\n  // Predefined in AbstractEvent.\n  @setProto('entityHurt')\n  public readonly iName = 'entityHurt'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI player hurt event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      // @ts-ignore TEMP: util Minecraft typings are updated.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      // @ts-ignore TEMP: util Minecraft typings are updated.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: EntityHurtEvent): void {\n    // If not a player return we dont care.\n    if (data.hurtEntity.id !== 'minecraft:player') return\n\n    // Attempt to get the attacker entity | player | undefined.\n    const attacker =\n      data.damagingEntity instanceof IPlayer\n        ? this._client.players.getByIPlayer(data.damagingEntity)\n        : this._client.entities.getByIEntity(data.damagingEntity)\n\n    // Attempt to get the target.\n    const target = this._client.players.getByIPlayer(data.hurtEntity as IPlayer)\n\n    // If no target return.\n    if (!target) return\n\n    // Attempt to get the projective if used.\n    const projectile =\n      data.projectile instanceof IEntity ? this._client.entities.getByIEntity(data.projectile) : undefined\n\n    // Emit client wrapped event.\n    return this._client.emit(this.name, {\n      attacker,\n      target,\n      weapon: attacker?.getInventory()?.getItem(attacker.getSelectedSlot()) ?? undefined,\n      damage: data.damage,\n      cause: data.cause,\n      projectile,\n    })\n  }\n}\n","import { world, Block as IBlock, Dimension as IDimension } from 'mojang-minecraft'\nimport type { Client } from '../client'\nimport { Block } from '../block'\nimport { setProto } from '../'\nimport AbstractEvent from './AbstractEvent'\n\n// TEMP: Mojang keep on top of your typings or hire me at <Nobu : chat@nobu.sh>\nexport interface LeverActivateEvent {\n  block: IBlock\n  dimension: IDimension\n  isPowered: boolean\n}\n\n/**\n * BeAPI lever use event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class Lever extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('Lever')\n  public readonly name = 'Lever'\n\n  // Predefined in AbstractEvent.\n  @setProto('leverActivate')\n  public readonly iName = 'leverActivate'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI lever use event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Minecraft world event with IName\n      // And use bound _logic for the callback.\n      // @ts-ignore TEMP: util Minecraft typings are updated.\n      world.events[this.iName].subscribe(this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Minecraft event listener on IName\n      // With bound _logic callback.\n      // @ts-ignore TEMP: util Minecraft typings are updated.\n      world.events[this.iName].unsubscribe(this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(arg: LeverActivateEvent): void {\n    // Get the block.\n    const block = new Block(this._client, arg.block)\n\n    // Emit the client event.\n    this._client.emit(this.name, {\n      block,\n      dimension: arg.dimension,\n      powered: arg.isPowered,\n      cancel: () => {\n        // For cancel we just permute the block to its original state.\n        const permutation = block.getPermutation()\n        const bit = permutation.getProperty('open_bit') as { name: string; value: boolean }\n        if (bit.value) bit.value = false\n        if (!bit.value) bit.value = true\n        block.setPermutation(permutation)\n      },\n    })\n  }\n}\n","// Regular imports.\nimport {\n  Dimension as IDimension,\n  EntityHealthComponent,\n  EntityInventoryComponent,\n  Player as IPlayer,\n  Location as ILocation,\n  Vector,\n  EffectType,\n  Effect,\n} from 'mojang-minecraft'\nimport { ModalForm, MessageForm, ActionForm } from '../forms'\nimport { Agent } from '../agent/Agent'\nimport { EntityInventory } from '../inventory'\n\n// Type imports.\nimport type { Client } from '../client'\nimport type {\n  Location,\n  Dimension,\n  Gamemode,\n  ServerCommandResponse,\n  PlayerComponents,\n  Objective,\n  FogType,\n  CameraShakeType,\n} from '../types'\n\n/**\n * BeAPI wrapper for the Mojang Minecraft player object.\n * Main object for interacting with a player.\n */\nexport class Player {\n  /**\n   * Protected client circular reference.\n   */\n  protected readonly _client: Client\n  /**\n   * Protected IPlayer object being wrapped.\n   */\n  protected readonly _IPlayer: IPlayer\n  /**\n   * Protected name of the player.\n   */\n  protected readonly _name: string\n  /**\n   * Protected players personal agent.\n   */\n  protected _agent: Agent | undefined\n\n  /**\n   * Protected BeAPI runtime id for player.\n   */\n  protected readonly _runtimeId: number\n\n  // Protected player states.\n  protected _isSwimming = false\n  protected _isInWater = false\n  protected _isGrounded = true\n  protected _isBurning = false\n  protected _isMoving = false\n  protected _isSprinting = false\n  protected _isRiding = false\n  protected _isSleeping = false\n  protected _isAlive = true\n  protected _isMuted = false\n\n  /**\n   * BeAPI wrapper for the Mojang Minecraft player object.\n   * Main object for interacting with a player.\n   * @param client Client reference.\n   * @param player IPlayer to wrap.\n   */\n  public constructor(client: Client, player: IPlayer) {\n    this._client = client\n    this._IPlayer = player\n    this._name = player.name\n    this._runtimeId = client.players.newRuntimeId()\n    this._agent = this.attemptFindAgent()\n  }\n\n  /**\n   * Destroys the player object and kicks them from the game.\n   * @param reason Reason for being destroyed *(kicked)*\n   */\n  public destroy(reason = 'Instantiated player object destroyed!'): void {\n    this._client.executeCommand(`kick \"${this.getNameTag()}\" ${reason}`)\n  }\n\n  /**\n   * Gets the players Minecraft Mojang IPlayer object.\n   * @returns\n   */\n  public getIPlayer(): IPlayer {\n    return this._IPlayer\n  }\n\n  /**\n   * Gets the players ID *(non persistant)*.\n   * @returns\n   */\n  public getId(): string {\n    return this._IPlayer.id\n  }\n\n  /**\n   * Gets BeAPI runtime ID *(non persistant)*.\n   * @returns\n   */\n  public getRuntimeId(): number {\n    return this._runtimeId\n  }\n\n  /**\n   * Gets the players name.\n   * @returns\n   */\n  public getName(): string {\n    return this._name\n  }\n\n  /**\n   * Gets the players name tag *(display name)*.\n   * @returns\n   */\n  public getNameTag(): string {\n    return this._IPlayer.nameTag\n  }\n\n  /**\n   * Sets the players name tag *(display name)*.\n   * @param nametag Display name to set.\n   */\n  public setNameTag(nametag: string): void {\n    this._IPlayer.nameTag = nametag\n  }\n\n  /**\n   * Gets an array of all the players tags.\n   * @returns\n   */\n  public getTags(): string[] {\n    return this._IPlayer.getTags()\n  }\n\n  /**\n   * Checks if the player has a specfic tag.\n   * @param tag Tag name.\n   * @returns\n   */\n  public hasTag(tag: string): boolean {\n    return this._IPlayer.hasTag(tag)\n  }\n\n  /**\n   * Adds a new tag to the player.\n   * @param tag Tag to add.\n   * @returns\n   */\n  public addTag(tag: string): boolean {\n    return this._IPlayer.addTag(tag)\n  }\n\n  /**\n   * Removes a tag from the player.\n   * @param tag Tag to remove.\n   * @returns\n   */\n  public removeTag(tag: string): boolean {\n    return this._IPlayer.removeTag(tag)\n  }\n\n  /**\n   * Creates a new modal form on the player.\n   * @returns\n   */\n  public createModalForm(): ModalForm {\n    return new ModalForm(this, this._client)\n  }\n\n  /**\n   * Creates a new message form on the player.\n   * @returns\n   */\n  public createMessageForm(): MessageForm {\n    return new MessageForm(this, this._client)\n  }\n\n  /**\n   * Creates a new action form on the player.\n   * @returns\n   */\n  public createActionForm(): ActionForm {\n    return new ActionForm(this, this._client)\n  }\n\n  /**\n   * Attempts to get the players agent and creates it if\n   * it does not exist.\n   * @returns\n   * @deprecated Use `getAgent` instead.\n   */\n  public createAgent(): Agent {\n    return this.getAgent()\n  }\n\n  /**\n   * Checks if the user currently has an agent.\n   * @returns\n   */\n  public hasAgent(): boolean {\n    // Try to get the entities id. If it returns an error\n    // (which it will when its dead as you are trying to access\n    // released memory through a now invalidated pointer)\n    // Then removes the agent\n    try {\n      if (this._agent?.getId()) return true\n\n      return false\n    } catch {\n      this._agent = undefined\n\n      return false\n    }\n  }\n\n  /**\n   * Attempts to get the players agent and creates it if\n   * it does not exist.\n   * @returns\n   */\n  public getAgent(): Agent {\n    // Attempt get the agent.\n    let agent = this.attemptFindAgent()\n\n    // If no agent\n    if (!agent) {\n      // Create an agent for them.\n      this.executeCommand('agent create')\n\n      // Get the agent.\n      const entity = this._client.entities.getLastest()! // Should Not, Not Exist\n\n      // Construct the entity in an Agent class.\n      agent = new Agent(this._client, entity.getIEntity(), this)\n\n      // Add the players name as a tag to the agent.\n      agent.addTag(this._name)\n\n      // Assign this._agent to the new agent/\n      this._agent = agent\n    }\n\n    // Return the agent.\n    return agent\n  }\n\n  /**\n   * Attempts to find the players agent from entity manager.\n   * @returns can return `undefined`.\n   */\n  protected attemptFindAgent(): Agent | undefined {\n    // If there is no agent.\n    if (!this.hasAgent()) return\n    // If this._agent then return it.\n    if (this._agent) return this._agent\n\n    // Query all entities for an agent that has the players name as a tag.\n    const entity = Array.from(this._client.entities.getAll().values()).find(\n      (x) => x.getId() === 'minecraft:agent' && x.hasTag(this._name),\n    )\n\n    // If entity return new Agent otherwise return undefined.\n    return entity ? new Agent(this._client, entity.getIEntity(), this) : undefined\n  }\n\n  /**\n   * Sends a message to the player.\n   * @param message Message content to send.\n   */\n  public sendMessage(message: string): void {\n    this.executeCommand(`tellraw @s {\"rawtext\":[{\"text\":\"${message.replace(/\"/g, '\\\\\"')}\"}]}`)\n  }\n\n  /**\n   * Sends action bar text to the player.\n   * @param message Message content to set.\n   */\n  public sendActionbar(message: string): void {\n    this.executeCommand(`titleraw @s actionbar {\"rawtext\":[{\"text\":\"${message.replace(/\"/g, '\\\\\"')}\"}]}`)\n  }\n\n  /**\n   * Sends a title to the player.\n   * @param message Message content to set.\n   */\n  public sendTitle(message: string): void {\n    this.executeCommand(`titleraw @s title {\"rawtext\":[{\"text\":\"${message.replace(/\"/g, '\\\\\"')}\"}]}`)\n  }\n\n  /**\n   * Sends a subtitle to the player.\n   * @param message Message content to set.\n   */\n  public sendSubtitle(message: string): void {\n    this.executeCommand(`titleraw @s subtitle {\"rawtext\":[{\"text\":\"${message.replace(/\"/g, '\\\\\"')}\"}]}`)\n  }\n\n  /**\n   * Sends a sound to the player.\n   * @param sound Minecraft sound id.\n   * @param location Optional location to play at.\n   * @param volume Optional volume of the sound.\n   * @param pitch Optional pitch of the sound.\n   * @param maxVolume Optional maxVolume of the sound.\n   */\n  public sendSound(sound: string, location?: Location, volume?: number, pitch?: number, maxVolume?: number): void {\n    this.executeCommand(\n      `playsound ${sound} ${location?.x ?? ''} ${location?.y ?? ''} ${location?.z ?? ''} ${volume ?? ''} ${\n        pitch ?? ''\n      } ${maxVolume ?? ''}`,\n    )\n  }\n\n  /**\n   * Plays an animation for the player.\n   * @param animation Minecraft animation id.\n   */\n  public sendAnimation(animation: string): void {\n    this.executeCommand(`playanimation @s ${animation}`)\n  }\n\n  /**\n   * Sends fog to the player.\n   * @param type Type of fog.\n   * @param fogId Minecraft fog id.\n   * @param globalId Minecraft globalId.\n   */\n  public sendFog(type: FogType, fogId: string, globalId: string): void {\n    this.executeCommand(`fog @s ${type} ${fogId} ${globalId}`)\n  }\n\n  /**\n   * Executes a command as the player.\n   * @param cmd Command to run.\n   * @param debug Send debug error to content log.\n   * @returns\n   */\n  public executeCommand<T>(cmd: string, debug = false): ServerCommandResponse<T> {\n    try {\n      // Try execute the command.\n      const command = this._IPlayer.runCommand(cmd) as ServerCommandResponse<T>\n\n      // If we can return here it was successful\n      return {\n        statusMessage: command.statusMessage,\n        data: command as unknown as T,\n        err: false,\n      }\n    } catch (error) {\n      // If debug pipe error.\n      if (debug) console.debug(`[BeAPI] [Player] [executeCommand]: ${String(error)}`)\n\n      // Return error data.\n      return {\n        statusMessage: String(error),\n        data: null,\n        err: true,\n      }\n    }\n  }\n\n  /**\n   * Execute a function as the player.\n   * @param path Path of the function file.\n   * @returns true means success\n   */\n  public executeFunction(path: string): boolean {\n    const command = this.executeCommand(`function ${path}`)\n    if (command.err) return false\n    return true\n  }\n\n  /**\n   * Attempts to get the score of the player on an objective.\n   * @param objective Objective to use.\n   * @returns\n   */\n  public getScore(objective: Objective): number {\n    const command = this.executeCommand(`scoreboard players test @s \"${objective.id}\" * *`)\n    if (command.err) return 0\n\n    return parseInt(String(command.statusMessage?.split(' ')[1]), 10)\n  }\n\n  /**\n   * Attempts to set the score of the player on an objective.\n   * @param objective Objective to use.\n   * @param amount New score.\n   * @returns\n   */\n  public setScore(objective: Objective, amount: number): number {\n    this.executeCommand(`scoreboard players set @s \"${objective.id}\" ${amount}`)\n\n    return this.getScore(objective)\n  }\n\n  /**\n   * Attempts to add score to the player on an objective.\n   * @param objective Objective to use.\n   * @param amount Amount to add.\n   * @returns\n   */\n  public addScore(objective: Objective, amount: number): number {\n    this.executeCommand(`scoreboard players add @s \"${objective.id}\" ${amount}`)\n\n    return this.getScore(objective)\n  }\n\n  /**\n   * Attempts to remove score from the player on an objective.\n   * @param objective Objective to use.\n   * @param amount Amount to remove.\n   * @returns\n   */\n  public removeScore(objective: Objective, amount: number): number {\n    this.executeCommand(`scoreboard players remove @s \"${objective.id}\" ${amount}`)\n\n    return this.getScore(objective)\n  }\n\n  /**\n   * Sets the players gamemode to something different.\n   * @param gamemode Gamemode to set player to.\n   * @returns true means success\n   */\n  public setGamemode(gamemode: Gamemode): boolean {\n    if (gamemode === this.getGamemode()) return true\n    const command = this.executeCommand(`gamemode ${gamemode}`)\n    if (command.err) return false\n    return true\n  }\n\n  /**\n   * Gets the players current gamemode.\n   * @returns\n   */\n  public getGamemode(): Gamemode {\n    const gmc = this._client.executeCommand(`testfor @a[name=\"${this.getNameTag()}\",m=c]`, this.getDimensionName())\n    const gma = this._client.executeCommand(`testfor @a[name=\"${this.getNameTag()}\",m=a]`, this.getDimensionName())\n    const gms = this._client.executeCommand(`testfor @a[name=\"${this.getNameTag()}\",m=s]`, this.getDimensionName())\n    if (!gmc.err) return 'creative'\n    if (!gma.err) return 'adventure'\n    if (!gms.err) return 'survival'\n\n    return 'unknown'\n  }\n\n  /**\n   * Gets the players current location.\n   * @returns\n   */\n  public getLocation(): Location {\n    const pos = this._IPlayer.location\n\n    return {\n      x: Math.floor(pos.x),\n      y: Math.floor(pos.y),\n      z: Math.floor(pos.z),\n    }\n  }\n\n  /**\n   * Gets precise location (decimals)\n   * @returns\n   */\n  public getPreciseLocation(): Location {\n    const pos = this._IPlayer.location\n\n    return {\n      x: pos.x,\n      y: pos.y,\n      z: pos.z,\n    }\n  }\n\n  /**\n   * Gets the players current dimension.\n   * @returns\n   */\n  public getDimension(): IDimension {\n    return this._IPlayer.dimension\n  }\n\n  /**\n   * Gets the players current dimension name.\n   * @returns\n   */\n  public getDimensionName(): Dimension {\n    const id = this.getDimension().id.split(':')[1].replace(/_/g, ' ')\n\n    return id as Dimension\n  }\n\n  /**\n   * Gets the players inventory.\n   * @returns\n   */\n  public getInventory(): EntityInventory {\n    return new EntityInventory(\n      this._client,\n      this._IPlayer.getComponent('minecraft:inventory') as EntityInventoryComponent,\n    )\n  }\n\n  /**\n   * Gets players selected slot in hotbar.\n   * @returns\n   */\n  public getSelectedSlot(): number {\n    return this._IPlayer.selectedSlot\n  }\n\n  /**\n   * Gets the players health.\n   * @returns\n   */\n  public getHealth(): EntityHealthComponent {\n    return this._IPlayer.getComponent('minecraft:health') as EntityHealthComponent\n  }\n\n  /**\n   * Kicks the player from the game.\n   * @param reason Reason for being kicked.\n   */\n  public kick(reason = 'You were kicked from the game!'): void {\n    this.destroy(reason)\n  }\n\n  /**\n   * Get the players velocity.\n   * @returns\n   */\n  public getVelocity(): Vector {\n    return this._IPlayer.velocity\n  }\n\n  /**\n   * Set the players velocity.\n   * @param velocity New velocity.\n   */\n  public setVelocity(velocity: Vector): void {\n    this._IPlayer.setVelocity(velocity)\n  }\n\n  /**\n   * Teleports the player.\n   * @param location Location to teleport player to.\n   * @param dimension Dimension to teleport player to.\n   * @param xrot X rotation to face when teleported.\n   * @param yrot Y rotation to face when teleported\n   */\n  public teleport(location: Location, dimension: Dimension, xrot: number, yrot: number): void {\n    const loc = new ILocation(location.x, location.y, location.z)\n    this._IPlayer.teleport(loc, this._client.world.getDimension(dimension), xrot, yrot)\n  }\n\n  /**\n   * Teleports the player facing at ccertain coordinates.\n   * @param location Location to teleport the player to.\n   * @param dimension Dimension to teleport player to.\n   * @param facingLocation Location to make player face.\n   */\n  public teleportFacing(location: Location, dimension: Dimension, facingLocation: Location): void {\n    const loc = new ILocation(location.x, location.y, location.z)\n    const loc2 = new ILocation(facingLocation.x, facingLocation.y, facingLocation.z)\n    this._IPlayer.teleportFacing(loc, this._client.world.getDimension(dimension), loc2)\n  }\n\n  /**\n   * Trigger an event on the player.\n   * @param event Minecraft player event.\n   */\n  public triggerEvent(event: string): void {\n    this._IPlayer.triggerEvent(event)\n  }\n\n  /**\n   * Get the players rotation.\n   * @returns\n   */\n  public getRotation(): number {\n    return this._IPlayer.bodyRotation\n  }\n\n  /**\n   * Get the players head location.\n   * @returns\n   */\n  public getHeadLocation(): ILocation {\n    return this._IPlayer.headLocation\n  }\n\n  /**\n   * Get a player NBT component.\n   * @param component Minecraft NBT component name.\n   * @returns\n   */\n  public getComponent<K extends keyof PlayerComponents>(component: K): PlayerComponents[K] {\n    return this._IPlayer.getComponent(component) as PlayerComponents[K]\n  }\n\n  /**\n   * Checks if the player has an NBT component.\n   * @param component Minecraft NBT component name.\n   * @returns\n   */\n  public hasComponent<K extends keyof PlayerComponents>(component: K): boolean {\n    return this._IPlayer.hasComponent(component)\n  }\n\n  /**\n   * Adds a potion effect to the player.\n   * @param effect Minecraft EffectType.\n   * @param duration Length effect should last.\n   * @param amplifier Amplifier of effect.\n   * @returns\n   */\n  public addEffect(effect: EffectType, duration: number, amplifier: number): void {\n    return this._IPlayer.addEffect(effect, duration, amplifier)\n  }\n\n  /**\n   * Gets a potion effect on the player.\n   * @param effect Minecraft EffectType.\n   * @returns\n   */\n  public getEffect(effect: EffectType): Effect {\n    return this._IPlayer.getEffect(effect)\n  }\n\n  /**\n   * Sets a cooldown on an item.\n   * @param itemCategory Item category or name.\n   * @param ticks Length of cooldown in ticks.\n   */\n  public setItemCooldown(itemCategory: string, ticks: number): void {\n    this._IPlayer.startItemCooldown(itemCategory, ticks)\n  }\n\n  /**\n   * Gets a cooldown on an item.\n   * @param itemCategory Item category or name.\n   * @returns\n   */\n  public getItemCooldown(itemCategory: string): number {\n    return this._IPlayer.getItemCooldown(itemCategory)\n  }\n\n  /**\n   * Gets the players expierence value.\n   * @returns\n   */\n  public getXp(): number {\n    const command = this.executeCommand<{ level: number }>('xp 0 @s')\n\n    return command.data?.level ?? 0\n  }\n\n  /**\n   * Adds expierence levels to the player.\n   * @param level Levels to add.\n   * @returns\n   */\n  public addXpLevel(level: number): number {\n    const command = this.executeCommand<{ level: number }>(`xp ${level}l @s`)\n\n    return command.data?.level ?? 0\n  }\n\n  /**\n   * Removes expierence levels from the player.\n   * @param level Levels to remove.\n   * @returns\n   */\n  public removeXpLevel(level: number): number {\n    const command = this.executeCommand<{ level: number }>(`xp -${level}l @s`)\n\n    return command.data?.level ?? 0\n  }\n\n  /**\n   * Adds a decimal amount of expierence to the player.\n   * @param level Decimal to add.\n   * @returns\n   */\n  public addXpFloat(level: number): number {\n    const command = this.executeCommand<{ level: number }>(`xp ${level} @s`)\n\n    return command.data?.level ?? 0\n  }\n\n  /**\n   * Removes a decimal amount of expierence from the player.\n   * @param level Decimal to remove.\n   * @returns\n   */\n  public removeXpFloat(level: number): number {\n    const command = this.executeCommand<{ level: number }>(`xp -${level} @s`)\n\n    return command.data?.level ?? 0\n  }\n\n  /**\n   * Shakes the players camera.\n   * @param type Type of shakage.\n   * @param intensity Intensity of shakage.\n   * @param seconds Length of shakage.\n   */\n  public shakeCamera(type: CameraShakeType, intensity?: number, seconds?: number): void {\n    if (type === 'clear') {\n      this.executeCommand('camerashake stop @s')\n    } else {\n      this.executeCommand(`camerashake add @s ${intensity ?? 1} ${seconds ?? 1} ${type}`)\n    }\n  }\n\n  /**\n   * Attempts to set the players spawn point.\n   * @param location Location to set spawn point.\n   * @returns true means success\n   */\n  public setSpawnPoint(location: Location): boolean {\n    const command = this.executeCommand(`spawnpoint @s ${location.x} ${location.y} ${location.z}`)\n    if (command.err) return false\n    return true\n  }\n\n  /**\n   * Gets the players sneaking status.\n   * @returns\n   */\n  public isSneaking(): boolean {\n    return this._IPlayer.isSneaking\n  }\n\n  /**\n   * Gets the players swimming status.\n   */\n  public isSwimming(): boolean\n  public isSwimming(val: boolean): void\n  public isSwimming(val?: boolean): boolean | void {\n    if (typeof val === 'boolean') {\n      this._isSwimming = val\n    } else return this._isSwimming\n  }\n\n  /**\n   * Gets the players in water status.\n   */\n  public isInWater(): boolean\n  public isInWater(val: boolean): void\n  public isInWater(val?: boolean): boolean | void {\n    if (typeof val === 'boolean') {\n      this._isInWater = val\n    } else return this._isInWater\n  }\n\n  /**\n   * Gets the players Grounded status.\n   */\n  public isGrounded(): boolean\n  public isGrounded(val: boolean): void\n  public isGrounded(val?: boolean): boolean | void {\n    if (typeof val === 'boolean') {\n      this._isGrounded = val\n    } else return this._isGrounded\n  }\n\n  /**\n   * Gets the players burning status.\n   */\n  public isBurning(): boolean\n  public isBurning(val: boolean): void\n  public isBurning(val?: boolean): boolean | void {\n    if (typeof val === 'boolean') {\n      this._isBurning = val\n    } else return this._isBurning\n  }\n\n  /**\n   * Gets the players moving status.\n   */\n  public isMoving(): boolean\n  public isMoving(val: boolean): void\n  public isMoving(val?: boolean): boolean | void {\n    if (typeof val === 'boolean') {\n      this._isMoving = val\n    } else return this._isMoving\n  }\n\n  /**\n   * Gets the players sprinting status.\n   */\n  public isSprinting(): boolean\n  public isSprinting(val: boolean): void\n  public isSprinting(val?: boolean): boolean | void {\n    if (typeof val === 'boolean') {\n      this._isSprinting = val\n    } else return this._isSprinting\n  }\n\n  /**\n   * Gets the players riding status.\n   */\n  public isRiding(): boolean\n  public isRiding(val: boolean): void\n  public isRiding(val?: boolean): boolean | void {\n    if (typeof val === 'boolean') {\n      this._isRiding = val\n    } else return this._isRiding\n  }\n\n  /**\n   * Gets the players sleeping status.\n   */\n  public isSleeping(): boolean\n  public isSleeping(val: boolean): void\n  public isSleeping(val?: boolean): boolean | void {\n    if (typeof val === 'boolean') {\n      this._isSleeping = val\n    } else return this._isSleeping\n  }\n\n  /**\n   * Gets the players alive status.\n   */\n  public isAlive(): boolean\n  public isAlive(val: boolean): void\n  public isAlive(val?: boolean): boolean | void {\n    if (typeof val === 'boolean') {\n      this._isAlive = val\n    } else return this._isAlive\n  }\n\n  /**\n   * Gets the players muted status.\n   */\n  public isMuted(): boolean\n  public isMuted(val: boolean): void\n  public isMuted(val?: boolean): boolean | void {\n    if (typeof val === 'boolean') {\n      this._isMuted = val\n    } else return this._isMuted\n  }\n}\n","// FIXME: We are forced to ignore alot of our linter related warnings\n// Due to minecraft not typing their stuff :/\n// TODO: Make this better later\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\nimport type { Player } from '../player'\nimport type { ModalFormResponse } from '../types'\n// @ts-ignore FIXME: Once typings are made\nimport { ModalFormData } from 'mojang-minecraft-ui'\nimport type { Client } from '../client'\n\nexport class ModalForm {\n  private readonly player: Player\n  protected readonly _client: Client\n  protected readonly form: any\n  protected callback: ((res: ModalFormResponse) => void) | undefined\n  protected canceled = false\n  public title = 'Unnamed Form'\n\n  public constructor(player: Player, client: Client) {\n    this.player = player\n    this._client = client\n    this.form = new ModalFormData()\n    this._client.emit('ModalFormCreated', {\n      player: this.player,\n      form: this,\n      result: this.result.bind(this),\n      cancel: () => {\n        this.canceled = true\n      },\n    })\n  }\n\n  public addInput(label: string, placeHolderText: string, defaultValue?: string): this {\n    this.form.textField(label, placeHolderText, defaultValue ?? '')\n\n    return this\n  }\n\n  public addDropdown(label: string, options: string[], defaultValueIndex?: number): this {\n    this.form.dropdown(label, options, defaultValueIndex ?? 0)\n\n    return this\n  }\n\n  public addSlider(\n    label: string,\n    minimumValue: number,\n    maximumValue: number,\n    valueStep: number,\n    defaultValue?: number,\n  ): this {\n    this.form.slider(label, minimumValue, maximumValue, valueStep, defaultValue ?? 0)\n\n    return this\n  }\n\n  public addToggle(label: string, defaultValue?: boolean): this {\n    this.form.toggle(label, defaultValue ?? false)\n\n    return this\n  }\n\n  public addIcon(iconPath: string): this {\n    this.form.icon(iconPath)\n\n    return this\n  }\n\n  public send(callback?: (res: ModalFormResponse) => void): void {\n    if (this.canceled) {\n      if (this.callback) {\n        this.callback({\n          isCanceled: true,\n        })\n      }\n      if (!callback) return\n\n      return callback({\n        isCanceled: true,\n      })\n    }\n    this.form.title(this.title)\n    this.form\n      .show(this.player.getIPlayer())\n      .then((res: ModalFormResponse) => {\n        if (!callback) return\n        if (this.callback) {\n          this.callback(res)\n        }\n\n        return callback(res)\n      })\n      .catch((err: any) => {\n        console.error(err)\n      })\n  }\n\n  private result(callback: (data: ModalFormResponse) => void): void {\n    this.callback = callback\n  }\n}\n","// FIXME: We are forced to ignore alot of our linter related warnings\n// Due to minecraft not typing their stuff :/\n// TODO: Make this better later\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n\nimport type { Player } from '../player'\nimport type { MessageFormResponse } from '../types'\n// @ts-ignore FIXME: Once typings are made\nimport { MessageFormData } from 'mojang-minecraft-ui'\nimport type { Client } from '../client'\n\nexport class MessageForm {\n  protected readonly player: Player\n  protected readonly _client: Client\n  protected readonly form: any\n  protected callback: ((res: MessageFormResponse) => void) | undefined\n  protected canceled = false\n  public title = 'Unnamed Form'\n  public body = ''\n  public button1 = 'Yes'\n  public button2 = 'No'\n\n  public constructor(player: Player, client: Client) {\n    this.player = player\n    this._client = client\n    this.form = new MessageFormData()\n    this._client.emit('MessageFormCreated', {\n      player: this.player,\n      form: this,\n      result: this.result.bind(this),\n      cancel: () => {\n        this.canceled = true\n      },\n    })\n  }\n\n  public send(callback?: (res: MessageFormResponse) => void): void {\n    if (this.canceled) {\n      if (this.callback) {\n        this.callback({\n          isCanceled: true,\n        })\n      }\n      if (!callback) return\n\n      return callback({\n        isCanceled: true,\n      })\n    }\n    this.form.title(this.title)\n    this.form.body(this.body)\n    this.form.button1(this.button1)\n    this.form.button2(this.button2)\n    this.form\n      .show(this.player.getIPlayer())\n      .then((res: MessageFormResponse) => {\n        if (!callback) return\n        if (this.callback) {\n          this.callback(res)\n        }\n\n        return callback(res)\n      })\n      .catch((err: any) => {\n        console.error(err)\n      })\n  }\n\n  private result(callback: (data: MessageFormResponse) => void): void {\n    this.callback = callback\n  }\n}\n","// FIXME: We are forced to ignore alot of our linter related warnings\n// Due to minecraft not typing their stuff :/\n// TODO: Make this better later\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n\nimport type { Client } from '../client'\nimport type { Player } from '../player'\nimport type { ActionFormResponse } from '../types'\n// @ts-ignore FIXME: Once typings are made\nimport { ActionFormData } from 'mojang-minecraft-ui'\n\nexport class ActionForm {\n  protected readonly player: Player\n  protected readonly _client: Client\n  protected readonly form: any\n  protected callback: ((res: ActionFormResponse) => void) | undefined\n  protected canceled = false\n  public title = 'Unnamed Form'\n  public body = ''\n\n  public constructor(player: Player, client: Client) {\n    this.player = player\n    this._client = client\n    this.form = new ActionFormData()\n    this._client.emit('ActionFormCreated', {\n      player: this.player,\n      form: this,\n      result: this.result.bind(this),\n      cancel: () => {\n        this.canceled = true\n      },\n    })\n  }\n\n  public addButton(text: string, iconPath?: string): this {\n    this.form.button(text, iconPath ?? undefined)\n\n    return this\n  }\n\n  public send(callback?: (res: ActionFormResponse) => void): void {\n    if (this.canceled) {\n      if (this.callback) {\n        this.callback({\n          isCanceled: true,\n        })\n      }\n      if (!callback) return\n\n      return callback({\n        isCanceled: true,\n      })\n    }\n    this.form.title(this.title)\n    this.form.body(this.body)\n    this.form\n      .show(this.player.getIPlayer())\n      .then((res: ActionFormResponse) => {\n        if (!callback) return\n        if (this.callback) {\n          this.callback(res)\n        }\n\n        return callback(res)\n      })\n      .catch((err: any) => {\n        console.error(err)\n      })\n  }\n\n  private result(callback: (data: ActionFormResponse) => void): void {\n    this.callback = callback\n  }\n}\n","// Regular imports.\nimport { EntityInventory } from '../inventory'\nimport { Location as ILocation } from 'mojang-minecraft'\nimport { getUniqueId } from '../utils'\n\n// Type imports.\nimport type {\n  Dimension as IDimension,\n  Effect,\n  EffectType,\n  Entity as IEntity,\n  EntityHealthComponent,\n  EntityInventoryComponent,\n  Vector,\n} from 'mojang-minecraft'\nimport type { Client } from '../client'\nimport type { Location, Dimension, ServerCommandResponse, EntityComponents, Objective } from '../types'\n\n/**\n * BeAPI wrapper for the Mojang Minecraft entity object.\n * Main object for interacting with a entity.\n */\nexport class Entity {\n  /**\n   * Protected client circular reference.\n   */\n  protected readonly _client: Client\n  /**\n   * Protected IEntity object being wrapped.\n   */\n  protected readonly _IEntity: IEntity\n  /**\n   * BeAPI runtime id. These are runtime specific,\n   * an entities runtime id is not guaranteed to be\n   * the same across multiple runtimes.\n   */\n  protected readonly _runtimeId: number\n  /**\n   * Minecraft entity UUID.\n   */\n  protected readonly _uniqueId: number\n\n  /**\n   * BeAPI wrapper for the Mojang Minecraft entity object.\n   * Main object for interacting with a entity.\n   * @param client Client reference.\n   * @param entity IEntity to wrap.\n   */\n  public constructor(client: Client, entity: IEntity) {\n    this._client = client\n    this._IEntity = entity\n    this._runtimeId = this._client.entities.newRuntimeId()\n    this._uniqueId = getUniqueId(this)\n  }\n\n  /**\n   * Destroys the entity object and kills the entity.\n   */\n  public destroy(): void {\n    try {\n      this._IEntity.kill()\n    } catch {}\n  }\n\n  /**\n   * Gets the entities Minecraft Mojang IEntity object.\n   * @returns\n   */\n  public getIEntity(): IEntity {\n    return this._IEntity\n  }\n\n  /**\n   * Gets BeAPI runtime ID *(non persistant)*.\n   * @returns\n   */\n  public getRuntimeId(): number {\n    return this._runtimeId\n  }\n\n  /**\n   * Gets the entities ID *(non persistant)*\n   * @returns\n   */\n  public getId(): string {\n    return this._IEntity.id\n  }\n\n  /**\n   * Gets the entities UUID *(persistant)*.\n   * @returns\n   */\n  public getUniqueId(): number {\n    return this._uniqueId\n  }\n\n  /**\n   * Gets the entities name tag.\n   * @returns\n   */\n  public getNameTag(): string {\n    return this._IEntity.nameTag\n  }\n\n  /**\n   * Sets the entities name tag.\n   * @param nametag New name tag for entity.\n   */\n  public setNameTag(nametag: string): void {\n    this._IEntity.nameTag = nametag\n  }\n\n  /**\n   * Gets the entities sneak status.\n   * @returns\n   */\n  public isSneaking(): boolean {\n    return this._IEntity.isSneaking\n  }\n\n  /**\n   * Gets all tags on the entity.\n   * @returns\n   */\n  public getTags(): string[] {\n    return this._IEntity.getTags()\n  }\n\n  /**\n   * Checks if entity has a tag.\n   * @param tag Tag to check.\n   * @returns\n   */\n  public hasTag(tag: string): boolean {\n    return this._IEntity.hasTag(tag)\n  }\n\n  /**\n   * Adds a tag to the entity.\n   * @param tag Tag to add.\n   * @returns `true` mean success.\n   */\n  public addTag(tag: string): boolean {\n    return this._IEntity.addTag(tag)\n  }\n\n  /**\n   * Removes a tag from the entity.\n   * @param tag Tag to remove.\n   * @returns `true` mean success.\n   */\n  public removeTag(tag: string): boolean {\n    return this._IEntity.removeTag(tag)\n  }\n\n  /**\n   * Executes a command as the entity.\n   * @param cmd Command to run.\n   * @param debug Send debug error to content log.\n   * @returns\n   */\n  public executeCommand<T>(cmd: string, debug = false): ServerCommandResponse<T> {\n    try {\n      // Try execute the command.\n      const command = this._IEntity.runCommand(cmd) as ServerCommandResponse<T>\n\n      // If we can return here it was successful\n      return {\n        statusMessage: command.statusMessage,\n        data: command as unknown as T,\n        err: false,\n      }\n    } catch (error) {\n      // If debug pipe error.\n      if (debug) console.debug(`[BeAPI] [Entity] [executeCommand]: ${String(error)}`)\n\n      // Return error data.\n      return {\n        statusMessage: String(error),\n        data: null,\n        err: true,\n      }\n    }\n  }\n\n  /**\n   * Attempts to get the score of then entity on an objective.\n   * @param objective Objective to use.\n   * @returns\n   */\n  public getScore(objective: Objective): number {\n    const command = this.executeCommand(`scoreboard players test @s \"${objective.id}\" * *`)\n    if (command.err) return 0\n\n    return parseInt(String(command.statusMessage?.split(' ')[1]), 10)\n  }\n\n  /**\n   * Attempts to set the score of the entity on an objective.\n   * @param objective Objective to use.\n   * @param amount New score.\n   * @returns\n   */\n  public setScore(objective: Objective, amount: number): number {\n    this.executeCommand(`scoreboard players set @s \"${objective.id}\" ${amount}`)\n\n    return this.getScore(objective)\n  }\n\n  /**\n   * Attempts to add score to the entity on an objective.\n   * @param objective Objective to use.\n   * @param amount Amount to add.\n   * @returns\n   */\n  public addScore(objective: Objective, amount: number): number {\n    this.executeCommand(`scoreboard players add @s \"${objective.id}\" ${amount}`)\n\n    return this.getScore(objective)\n  }\n\n  /**\n   * Attempts to remove score from the entity on an objective.\n   * @param objective Objective to use.\n   * @param amount Amount to remove.\n   * @returns\n   */\n  public removeScore(objective: Objective, amount: number): number {\n    this.executeCommand(`scoreboard players remove @s \"${objective.id}\" ${amount}`)\n\n    return this.getScore(objective)\n  }\n\n  /**\n   * Gets the entities current location.\n   * @returns\n   */\n  public getLocation(): Location {\n    const pos = this._IEntity.location\n\n    return {\n      x: Math.floor(pos.x),\n      y: Math.floor(pos.y),\n      z: Math.floor(pos.z),\n    }\n  }\n\n  /**\n   * Gets precise location (decimals)\n   * @returns\n   */\n  public getPreciseLocation(): Location {\n    const pos = this._IEntity.location\n\n    return {\n      x: pos.x,\n      y: pos.y,\n      z: pos.z,\n    }\n  }\n\n  /**\n   * Gets the entities current dimension.\n   * @returns\n   */\n  public getDimension(): IDimension {\n    return this._IEntity.dimension\n  }\n\n  /**\n   * Gets the entities current dimension name.\n   * @returns\n   */\n  public getDimensionName(): Dimension {\n    const id = this.getDimension().id.split(':')[1].replace(/_/g, ' ')\n\n    return id as Dimension\n  }\n\n  /**\n   * Gets the entities inventory.\n   * @returns can return `undefined`\n   */\n  public getInventory(): EntityInventory | undefined {\n    if (!this._IEntity.hasComponent('minecraft:inventory')) return\n\n    return new EntityInventory(\n      this._client,\n      this._IEntity.getComponent('minecraft:inventory') as EntityInventoryComponent,\n    )\n  }\n\n  /**\n   * Gets entites selected slot.\n   * @returns\n   */\n  public getSelectedSlot(): number {\n    return 0\n  }\n\n  /**\n   * Gets the entities health.\n   * @returns\n   */\n  public getHealth(): EntityHealthComponent {\n    return this._IEntity.getComponent('minecraft:health') as EntityHealthComponent\n  }\n\n  /**\n   * Get the entities velocity.\n   * @returns\n   */\n  public getVelocity(): Vector {\n    return this._IEntity.velocity\n  }\n\n  /**\n   * Set the entities velocity.\n   * @param velocity New velocity.\n   */\n  public setVelocity(velocity: Vector): void {\n    this._IEntity.setVelocity(velocity)\n  }\n\n  /**\n   * Teleports the entity.\n   * @param location Location to teleport entity to.\n   * @param dimension Dimension to teleport entity to.\n   * @param xrot X rotation to face when teleported.\n   * @param yrot Y rotation to face when teleported\n   */\n  public teleport(location: Location, dimension: Dimension, xrot: number, yrot: number): void {\n    const loc = new ILocation(location.x, location.y, location.z)\n    this._IEntity.teleport(loc, this._client.world.getDimension(dimension), xrot, yrot)\n  }\n\n  /**\n   * Teleports the entity facing at ccertain coordinates.\n   * @param location Location to teleport the entity to.\n   * @param dimension Dimension to teleport entity to.\n   * @param facingLocation Location to make entity face.\n   */\n  public teleportFacing(location: Location, dimension: Dimension, facingLocation: Location): void {\n    const loc = new ILocation(location.x, location.y, location.z)\n    const loc2 = new ILocation(facingLocation.x, facingLocation.y, facingLocation.z)\n    this._IEntity.teleportFacing(loc, this._client.world.getDimension(dimension), loc2)\n  }\n\n  /**\n   * Trigger an event on the entity.\n   * @param event Minecraft player event.\n   */\n  public triggerEvent(event: string): void {\n    this._IEntity.triggerEvent(event)\n  }\n\n  /**\n   * Get the entities rotation.\n   * @returns\n   */\n  public getRotation(): number {\n    return this._IEntity.bodyRotation\n  }\n\n  /**\n   * Get the entities head location.\n   * @returns\n   */\n  public getHeadLocation(): ILocation {\n    return this._IEntity.headLocation\n  }\n\n  /**\n   * Get a entity NBT component.\n   * @param component Minecraft NBT component name.\n   * @returns\n   */\n  public getComponent<K extends keyof EntityComponents>(component: K): EntityComponents[K] {\n    return this._IEntity.getComponent(component) as unknown\n  }\n\n  /**\n   * Checks if the entity has an NBT component.\n   * @param component Minecraft NBT component name.\n   * @returns\n   */\n  public hasComponent<K extends keyof EntityComponents>(component: K): boolean {\n    return this._IEntity.hasComponent(component)\n  }\n\n  /**\n   * Adds a potion effect to the entity.\n   * @param effect Minecraft EffectType.\n   * @param duration Length effect should last.\n   * @param amplifier Amplifier of effect.\n   * @returns\n   */\n  public addEffect(effect: EffectType, duration: number, amplifier: number): void {\n    return this._IEntity.addEffect(effect, duration, amplifier)\n  }\n\n  /**\n   * Gets a potion effect on the entity.\n   * @param effect Minecraft EffectType.\n   * @returns\n   */\n  public getEffect(effect: EffectType): Effect {\n    return this._IEntity.getEffect(effect)\n  }\n}\n","// Source From: https://dirask.com/posts/JavaScript-UUID-function-in-Vanilla-JS-1X9kgD\n\n/**\n * Generates a random UUID4. This method does not utilize Date,\n * it utilizes random bytes therefore duplicates are possible.\n * But very small chance.\n * @returns {string}\n */\nexport function genUuid(): string {\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n    const r = (Math.random() * 16) | 0\n    const v = c === 'x' ? r : (r & 0x3) | 0x8\n\n    return v.toString(16)\n  })\n}\n\n/**\n * Verifies the uuid given is a valid uuid format.\n * @param {string} uuid UUID to verify.\n * @returns {boolean}\n */\nexport function verifyUuid(uuid: string): boolean {\n  return /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/gi.test(uuid)\n}\n// <string> [string]\n","/**\n * Coordinates as array `[x, y, z]`.\n */\nexport type Coord = [number, number, number]\n\n/**\n * Attempts to get all coordinates between two points.\n * @param a First coordinate set.\n * @param b Second coordinate set.\n * @returns\n */\nexport function getCoordinatesBetween(a: Coord, b: Coord): Coord[] {\n  // Intialize empty coord array.\n  const coords: Coord[] = []\n\n  // For X of a; while less than X of b; X++;\n  for (let x = Math.min(a[0], b[0]); x <= Math.max(a[0], b[0]); x++)\n    // For Y of a; while less than Y of b; Y++;\n    for (let y = Math.min(a[1], b[1]); y <= Math.max(a[1], b[1]); y++)\n      // For Z of a; while less than Z of b; Z++\n      // Push [X, Y, Z] results to coords array\n      for (let z = Math.min(a[2], b[2]); z <= Math.max(a[2], b[2]); z++) coords.push([x, y, z])\n\n  // Return results.\n  return coords\n}\n","/**\n * Checks if `cur` is between `first` and `second`.\n * @param first First number.\n * @param second Second number.\n * @param cur Number to check.\n * @returns\n */\nexport function between(first: number, second: number, cur: number): boolean {\n  // Get highest number.\n  const max = Math.max(first, second)\n  // Get lowest number.\n  const min = Math.min(first, second)\n\n  // If cur more than or equal to min\n  // and cur is less than or equal to max\n  return cur >= min && cur <= max\n}\n","// Regular imports.\nimport { world } from 'mojang-minecraft'\n\n// Type imports.\nimport type { ServerCommandResponse } from '..'\nimport type { Dimension } from '../types'\n\n/**\n * Standalone method for running a command. Worlds the same as `Client#runCommand`.\n * @param {string} cmd Command to execute.\n * @param {Dimension} dimension Dimension to use.\n * @param {boolean} debug Pipe errors to content log?\n * @returns {ServerCommandResponse}\n */\nexport function runCommand<T>(\n  cmd: string,\n  dimension: Dimension = 'overworld',\n  debug = false,\n): ServerCommandResponse<T> {\n  try {\n    // Try execute command.\n    const command = world.getDimension(dimension).runCommand(cmd)\n\n    // If able to return ServerCommandResponse\n    // Then successful execute\n    return {\n      statusMessage: command.statusMessage,\n      data: command,\n      err: false,\n    }\n  } catch (error) {\n    // If debug error then do so.\n    if (debug) console.debug(`[runCommand] [error] (standalone): ${String(error)}`)\n\n    // Return error data.\n    return {\n      statusMessage: String(error),\n      data: null,\n      err: true,\n    }\n  }\n}\n","/**\n * Converts binary string to utf-8 string.\n * @param bin Raw binary string.\n * @returns\n */\nexport function binToString(bin: string): string {\n  return bin\n    .split(' ')\n    .map((char) => String.fromCharCode(parseInt(char, 2)))\n    .join('')\n}\n\n/**\n * Converts utf-8 text to raw binary string.\n * @param str utf-8 text.\n * @returns\n */\nexport function stringToBin(str: string): string {\n  return str\n    .split('')\n    .map((char) => char.charCodeAt(0).toString(2))\n    .join(' ')\n}\n","/**\n * Gets all entries on an object.\n * @param data Object to use.\n * @returns\n */\nexport function entries<K extends Record<string, any> = Record<string, any>>(data: K): [keyof K, K[keyof K]][] {\n  return Object.keys(data).map((i: keyof K) => [i, data[i]])\n}\n","/**\n * Simple safe id's.\n * Provide the class a unique number not being used\n * and it will generate ids based off the current epoch\n * with a generation increment that resets every 10000.\n *\n * This is a very simple system proved to work with database entries.\n */\nexport class SafeIds {\n  /**\n   * Protected epoch store.\n   */\n  protected epoch: number\n  /**\n   * Protected unique id store.\n   */\n  protected unique: number\n  /**\n   * Protected current generation store.\n   */\n  protected inc = 0\n\n  /**\n   * Simple safe id's.\n   * Provide the class a unique number not being used\n   * and it will generate ids based off the current epoch\n   * with a generation increment that resets every 10000.\n   *\n   * This is a very simple system proved to work with database entries.\n   * @param unique Ensure this is unique for 99.9% safe ids.\n   * @param epoch Optional amount to subtract from current time.\n   */\n  public constructor(unique: number, epoch = 0) {\n    this.epoch = epoch\n    this.unique = unique\n  }\n\n  /**\n   * Get the next increment.\n   */\n  protected get increment() {\n    if (this.inc === 10000) return (this.inc = 0)\n    return this.inc++\n  }\n\n  /**\n   * Generate a new (99.9% hopefully unique) id.\n   * @returns\n   */\n  public generate(): string {\n    const now = Date.now()\n\n    return `${Math.abs(now - this.epoch)}_${this.increment}_${this.unique}`\n  }\n}\n","// Regular imports.\nimport { genUuid, runCommand } from '..'\n\n// Type imports.\nimport type { Entity } from '..'\n\ninterface ParseResult {\n  statusCode: string\n  statusMessage: string\n}\n\n/**\n * Attempts to get the minecraft assigned unique id for\n * the given entity.\n * @param entity Entity to try get id for.\n * @returns\n */\nexport function getUniqueId(entity: Entity): number {\n  const objective = genUuid().substring(0, 16)\n  runCommand(`scoreboard objectives add \"${objective}\" dummy`)\n  const { err, statusMessage } = entity.executeCommand(`scoreboard players test @s \"${objective}\" * *`)\n  runCommand(`scoreboard objectives remove \"${objective}\"`)\n  if (!err) return 0\n\n  const raw: ParseResult = JSON.parse(statusMessage) as ParseResult\n  const id = Number(raw.statusMessage.split(' ')[1])\n\n  return id\n}\n","// Sourced from: https://flaviocopes.com/how-to-list-object-methods-javascript/\n\n/**\n * Lists all methods on an object, helpful for undocumented\n * Minecraft objects added.\n * @param obj Object to destruct.\n * @returns\n */\nexport const destruct = (obj: object): any[] => {\n  const properties = new Set()\n  let currentObj = obj\n  do {\n    Object.getOwnPropertyNames(currentObj).map((item) => properties.add(item))\n  } while ((currentObj = Object.getPrototypeOf(currentObj) as object))\n  return [...properties.keys()]\n}\n","// Regular imports.\nimport { ItemEnchantsComponent, ItemStack, MinecraftEnchantmentTypes, Enchantment } from 'mojang-minecraft'\n\n/**\n * Attempts to get all enchantments on an item.\n * @param item Item to get enchantments from.\n * @returns\n */\nexport function getEnchantments(item: ItemStack): Enchantment[] {\n  // Intitialize enchaments return array.\n  const enchantments: Enchantment[] = []\n\n  // If not an item or item does not have enchantments nbt component return empty array.\n  if (!item || !item.hasComponent('minecraft:enchantments')) return enchantments\n\n  // Get the enchantment nbt component and typecast it as ItemEnchantsComponent.\n  const component = item.getComponent('minecraft:enchantments') as ItemEnchantsComponent\n\n  // For every key on MinecraftEnchantmentTypes execute some code.\n  for (const enchant of Object.keys(MinecraftEnchantmentTypes) as (keyof MinecraftEnchantmentTypes)[]) {\n    // If not item enchantments has enchant key in current iteration continue to next iteration.\n    if (!component.enchantments.hasEnchantment(MinecraftEnchantmentTypes[enchant])) continue\n    // Otherwise get level of current enchant on item provided.\n    const value = component.enchantments.getEnchantment(MinecraftEnchantmentTypes[enchant])\n    // Push data to final enchantment array\n    enchantments.push(value)\n  }\n\n  // Return enchantments\n  return enchantments\n}\n","// Regular imports.\nimport { Entity } from '.'\n\n// Type imports.\nimport type { Entity as IEntity } from 'mojang-minecraft'\nimport type { Client } from '../client'\n\n/**\n * Entity manager is the main hub for interacting with\n * entities inside the world currently.\n */\nexport class EntityManager {\n  /**\n   * Protected client circular reference.\n   */\n  protected readonly _client: Client\n  /**\n   * Protected entity map.\n   */\n  protected readonly _entities = new Map<number, Entity>()\n  /**\n   * Current BeAPI runtime id.\n   */\n  protected _runtimeId = 0\n\n  /**\n   * Entity manager is the main hub for interacting with\n   * entities inside the world currently.\n   * @param client Client reference.\n   */\n  public constructor(client: Client) {\n    this._client = client\n  }\n\n  /**\n   * Creates a new runtime id that can be used.\n   * *Two ids will not overlap in the same runtime\n   * but can overlap in two different runtimes.*\n   * @returns\n   */\n  public newRuntimeId(): number {\n    return this._runtimeId++\n  }\n\n  /**\n   * Adds a entity to the entity manager.\n   * @param entity Entity to add.\n   */\n  public add(entity: Entity): void {\n    this._entities.set(entity.getRuntimeId(), entity)\n  }\n\n  /**\n   * Creates a new entity from a Minecraft IEntity.\n   * @param entity IEntity object.\n   * @returns\n   */\n  public create(entity: IEntity): Entity {\n    return new Entity(this._client, entity)\n  }\n\n  /**\n   * Removes an entity from the entity manager.\n   *\n   * WARNING: Please do not remove entities this way.\n   * If you want to remove an entity, get them and call\n   * `Entity.destroy()`! Removing them this way\n   * when they are still in the world will\n   * most likely cause issues.\n   * @param entity IEntity to remove.\n   */\n  public remove(entity: Entity): void {\n    this._entities.delete(entity.getRuntimeId())\n  }\n\n  /**\n   * Removes an entity from the entity manager.\n   *\n   * WARNING: Please do not remove entities this way.\n   * If you want to remove an entity, get them and call\n   * `Entity.destroy()`! Removing them this way\n   * when they are still in the world will\n   * most likely cause issues.\n   * @param runtimeId Runtime id of entity.\n   */\n  public removeByRuntimeId(runtimeId: number): void {\n    this._entities.delete(runtimeId)\n  }\n\n  /**\n   * Gets all entities in the world as a map.\n   * @returns\n   */\n  public getAll(): Map<number, Entity> {\n    return this._entities\n  }\n\n  /**\n   * Gets all entities in the world as an array.\n   * @returns\n   */\n  public getAllAsArray(): Entity[] {\n    return Array.from(this.getAll().values())\n  }\n\n  /**\n   * Attempts to get all entities with given nametag.\n   * @param nameTag Name tag of entity.\n   * @returns can return `undefined`\n   */\n  public getByNameTag(nameTag: string): Entity[] | undefined {\n    return Array.from(this._entities.values()).filter((e) => e.getNameTag() === nameTag)\n  }\n\n  /**\n   * Attempts to get all entities with given id.\n   * @param id Id of entities.\n   * @returns can return `undefined`\n   */\n  public getByIdentity(id: string): Entity[] | undefined {\n    return Array.from(this._entities.values()).filter((e) => e.getId() === id)\n  }\n\n  /**\n   * Attempts to get an entity by its runtime id.\n   * @param runtimeId Runtime id of entity.\n   * @returns can return `undefined`\n   */\n  public getByRuntimeId(runtimeId: number): Entity | undefined {\n    return this._entities.get(runtimeId)\n  }\n\n  /**\n   * Attempts to get an entity by its unique id.\n   * @param uniqueId Unique id of entity.\n   * @returns can return `undefined`\n   */\n  public getByUniqueId(uniqueId: number): Entity | undefined {\n    return Array.from(this._entities.values()).find((e) => e.getUniqueId() === uniqueId)\n  }\n\n  /**\n   * Attempts to get an entity by its Minecraft IEntity.\n   * @param IEntity IEntity of entity.\n   * @returns can return `undefined`\n   */\n  public getByIEntity(IEntity: IEntity): Entity | undefined {\n    return Array.from(this._entities.values()).find((e) => e.getIEntity() === IEntity)\n  }\n\n  /**\n   * Gets the most recently spawned entity.\n   * @returns can return `undefined`\n   */\n  public getLastest(): Entity | undefined {\n    return this._entities.get(this._runtimeId - 1)\n  }\n}\n","// Regular Imports.\nimport { Entity } from '../entity/index'\nimport { getUniqueId } from '..'\n\n// Type Imports.\nimport type { Entity as IEntity, MinecraftItemTypes } from 'mojang-minecraft'\nimport type { Client } from '../client'\nimport type { Player } from '../player/Player'\nimport type { AgentDirection, AgentRotation } from './Directions'\n\ntype CamelToSnakeCase<S extends string> = S extends `${infer T}${infer U}`\n  ? `${T extends Capitalize<T> ? '_' : ''}${Lowercase<T>}${CamelToSnakeCase<U>}`\n  : S\n\n/**\n * BeAPI wrapper for the Mojang Minecraft agent entity object.\n * Main object for interacting with an agent.\n */\nexport class Agent extends Entity {\n  /**\n   * Protected client circular reference.\n   */\n  protected readonly __client: Client\n  /**\n   * Protected IEntity object being wrapped.\n   */\n  protected readonly __IEntity: IEntity\n  /**\n   * BeAPI runtime id. These are runtime specific,\n   * an entities runtime id is not guaranteed to be\n   * the same across multiple runtimes.\n   */\n  protected readonly __runtimeId: number\n  /**\n   * Minecraft entity UUID.\n   */\n  protected readonly __uniqueId: number\n  /**\n   * The Owner of the agent.\n   */\n  protected readonly _owner: Player\n  /**\n   * BeAPI wrapper for the Mojang Minecraft agent entity object.\n   * Main object for interacting with an agent.\n   * @param {Client} client BeAPI Client Instance.\n   * @param {Entity} entity BeAPI Entity Instance.\n   * @param {Player} owner  BeAPI Player Instance\n   */\n  public constructor(client: Client, entity: IEntity, owner: Player) {\n    super(client, entity)\n    this.__client = client\n    this.__IEntity = entity\n    this.__runtimeId = this._client.entities.newRuntimeId()\n    this.__uniqueId = getUniqueId(this)\n    this._owner = owner\n  }\n\n  /**\n   * Destroys the agent.\n   */\n  public override destroy(): void {\n    super.destroy()\n\n    this._owner.hasAgent()\n  }\n\n  /**\n   * Get the owner.\n   * @returns\n   */\n  public getOwner(): Player {\n    return this._owner\n  }\n\n  /**\n   * Move the agent.\n   * @param {AgentDirection} dir Direction.\n   * @returns\n   */\n  public move(dir: AgentDirection): this {\n    this._owner.executeCommand(`agent move ${dir}`)\n\n    return this\n  }\n\n  /**\n   * Rotate the agent.\n   * @param {AgentRotation} dir Rotation.\n   * @returns\n   */\n  public turn(dir: AgentRotation): this {\n    this._owner.executeCommand(`agent turn ${dir}`)\n\n    return this\n  }\n\n  /**\n   * Force the agent to attack.\n   * @param {AgentDirection} dir Direction.\n   * @returns\n   */\n  public attack(dir: AgentDirection): this {\n    this._owner.executeCommand(`agent attack ${dir}`)\n\n    return this\n  }\n\n  /**\n   * Force the agent to break a block.\n   * @param {AgentDirection} dir Direction.\n   * @returns\n   */\n  public breakBlock(dir: AgentDirection): this {\n    this._owner.executeCommand(`agent destroy ${dir}`)\n\n    return this\n  }\n\n  /**\n   * Force the agent to place a block.\n   * @param {AgentDirection} dir Direction.\n   * @param {number} slot Slot number.\n   * @returns\n   */\n  public placeBlock(dir: AgentDirection, slot = 1): this {\n    this._owner.executeCommand(`agent place ${slot} ${dir}`)\n\n    return this\n  }\n\n  /**\n   * Force the agent to till dirt.\n   * @param {AgentDirection} dir Direction.\n   * @returns\n   */\n  public till(dir: AgentDirection): this {\n    this._owner.executeCommand(`agent till ${dir}`)\n\n    return this\n  }\n\n  /**\n   * Force agent to grab item.\n   * @param {CamelToSnakeCase<keyof typeof MinecraftItemTypes>} item Item Id.\n   * @returns\n   */\n  public grabItem(item: CamelToSnakeCase<keyof typeof MinecraftItemTypes>): this {\n    this._owner.executeCommand(`agent collect ${item}`)\n\n    return this\n  }\n\n  /**\n   * Force agent to drop item.\n   * @param {AgentDirection} dir Direction.\n   * @param {number} amount Amount to drop.\n   * @param {number} slot Slot number.\n   * @returns\n   */\n  public dropItem(dir: AgentDirection, amount = 1, slot = 1): this {\n    this._owner.executeCommand(`agent drop ${slot} ${amount} ${dir}`)\n\n    return this\n  }\n}\n","// Regular imports.\nimport { Player } from './'\n\n// Type imports.\nimport type { Player as IPlayer } from 'mojang-minecraft'\nimport type { Client } from '../client'\n\n/**\n * Player manager is the main hub for interacting with\n * players inside the world currently.\n */\nexport class PlayerManager {\n  /**\n   * Protected player map.\n   */\n  protected readonly _players = new Map<string, Player>()\n  /**\n   * Protected client circular reference.\n   */\n  protected readonly _client: Client\n  /**\n   * Current BeAPI runtime id.\n   */\n  protected _runtimeId = 0\n\n  /**\n   * Player manager is the main hub for interacting with\n   * players inside the world currently.\n   * @param client Client reference.\n   */\n  public constructor(client: Client) {\n    this._client = client\n  }\n\n  /**\n   * Creates a new runtime id that can be used.\n   * *Two ids will not overlap in the same runtime\n   * but can overlap in two different runtimes.*\n   * @returns\n   */\n  public newRuntimeId(): number {\n    return this._runtimeId++\n  }\n\n  /**\n   * Adds a player to the player manager.\n   * @param player Player to add.\n   */\n  public add(player: Player): void {\n    this._players.set(player.getName(), player)\n  }\n\n  /**\n   * Creates a new player from a Minecraft IPlayer.\n   * @param player IPlayer object.\n   * @returns\n   */\n  public create(player: IPlayer): Player {\n    return new Player(this._client, player)\n  }\n\n  /**\n   * Removes a player from the player manager.\n   *\n   * WARNING: Please do not remove players this way.\n   * If you want to remove a player, get them and call\n   * `Player.destroy()`! Removing them this way\n   * when they are still in the world will\n   * most likely cause issues.\n   *\n   * @param player Player to remove.\n   */\n  public remove(player: Player) {\n    this._players.delete(player.getName())\n  }\n\n  /**\n   * Removes a player from the player manager.\n   *\n   * WARNING: Please do not remove players this way.\n   * If you want to remove a player, get them and call\n   * `Player.destroy()`! Removing them this way\n   * when they are still in the world will\n   * most likely cause issues.\n   *\n   * @param playerName Player to remove.\n   */\n  public removeByName(playerName: string) {\n    this._players.delete(playerName)\n  }\n\n  /**\n   * Gets all players currently in the world\n   * as a map.\n   * @returns\n   */\n  public getAll(): Map<string, Player> {\n    return this._players\n  }\n\n  /**\n   * Gets all players currently in the world\n   * as an array.\n   * @returns\n   */\n  public getAllAsArray(): Player[] {\n    return Array.from(this.getAll().values())\n  }\n\n  /**\n   * Attempts to get a player by their name.\n   * @param playerName Name of the player.\n   * @returns can return `undefined`\n   */\n  public getByName(playerName: string): Player | undefined {\n    return this._players.get(playerName)\n  }\n\n  /**\n   * Attempts to get a player by their name tag.\n   * @param nameTag Name tag of player.\n   * @returns can return `undefined`\n   */\n  public getByNameTag(nameTag: string): Player | undefined {\n    return Array.from(this._players.values()).find((p) => p.getNameTag() === nameTag)\n  }\n\n  /**\n   * Attempts to get a player by their Minecraft IPlayer object.\n   * @param IPlayer Minecraft IPlayer object.\n   * @returns can return `undefined`\n   */\n  public getByIPlayer(IPlayer: IPlayer): Player | undefined {\n    return Array.from(this._players.values()).find((p) => p.getIPlayer() === IPlayer)\n  }\n}\n","// Regular imports.\nimport { setProto } from '..'\nimport AbstractEvent from './AbstractEvent'\n\n// Type imports.\nimport type { ItemInteractEvent } from '..'\nimport type { Client } from '../client'\nimport { Player } from '../player'\n\n/**\n * BeAPI chest opened event. Contains the logic\n * for translating Minecraft event data to BeAPI\n * wrapped data.\n */\nexport class ChestOpened extends AbstractEvent {\n  // Predefined in AbstractEvent.\n  protected readonly _logic = this.__logic.bind(this)\n  // Predefined in AbstractEvent.\n  protected readonly _client: Client\n  // Predefined in AbstractEvent.\n  protected _registered = false\n\n  // Predefined in AbstractEvent.\n  @setProto('ChestOpened')\n  public readonly name = 'ChestOpened'\n\n  // Predefined in AbstractEvent.\n  @setProto('custom')\n  public readonly iName = 'custom'\n\n  // Predefined in AbstractEvent.\n  public readonly alwaysCancel = false\n\n  /**\n   * BeAPI chest opened event. Contains the logic\n   * for translating Minecraft event data to BeAPI\n   * wrapped data.\n   * @param client Client referece.\n   */\n  public constructor(client: Client) {\n    super()\n    this._client = client\n  }\n\n  // Predefined in AbstractEvent.\n  public on(): void {\n    // If not already registered.\n    if (!this._registered) {\n      // Subscribe to Client event with needed logic\n      // And use bound _logic for the callback.\n      this._client.addListener('ItemInteract', this._logic)\n      // Set registered to true so this cannot be called\n      // Again before off being called.\n      this._registered = true\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  public off(): void {\n    // If currently registered.\n    if (this._registered) {\n      // Remove Client event listener used\n      // With bound _logic callback.\n      this._client.removeListener('ItemInteract', this._logic)\n      // Set registered to false so this cannot be called\n      // Again before on being called.\n      this._registered = false\n    }\n  }\n\n  // Predefined in AbstractEvent.\n  protected __logic(data: ItemInteractEvent): void {\n    // If event data does not contain a block inventory\n    // or the source is not an instance of player return\n    if (!data.block.getInventory() || !(data.source instanceof Player)) return\n\n    // Chest block type.\n    const type = data.block.getId().split(':')[1]\n\n    // Emit this event on client using name defined above.\n    this._client.emit(this.name, {\n      block: data.block,\n      player: data.source,\n      type,\n      cancel: () => {\n        data.cancel()\n      },\n    })\n  }\n}\n","// Import all events.\nimport { OnChat } from './OnChat'\nimport { OnJoin } from './OnJoin'\nimport { OnLeave } from './OnLeave'\nimport { BlockCreated } from './BlockCreated'\nimport { BlockDestroyed } from './BlockDestroyed'\nimport { BlockHit } from './BlockHit'\nimport { ItemUse } from './ItemUse'\nimport { ItemInteract } from './ItemInteract'\nimport { ItemEvent } from './ItemEvent'\nimport { ItemDropped } from './ItemDropped'\nimport { EntityCreated } from './EntityCreated'\nimport { EntityDestroyed } from './EntityDestroyed'\nimport { PlayerTag } from './PlayerTag'\nimport { EntityTag } from './EntityTag'\nimport { EnteredWater } from './EnteredWater'\nimport { ExitedWater } from './ExitedWater'\nimport { Jump } from './Jump'\nimport { Landed } from './Landed'\nimport { Swing } from './Swing'\nimport { StartedBurning } from './StartedBurning'\nimport { StoppedBurning } from './StoppedBurning'\nimport { StartedMoving } from './StartedMoving'\nimport { StoppedMoving } from './StoppedMoving'\nimport { StartedRiding } from './StartedRiding'\nimport { StoppedRiding } from './StoppedRiding'\nimport { StartedSleeping } from './StartedSleeping'\nimport { StoppedSleeping } from './StoppedSleeping'\nimport { StartedSneaking } from './StartedSneaking'\nimport { StoppedSneaking } from './StoppedSneaking'\nimport { StartedSprinting } from './StartedSprinting'\nimport { StoppedSprinting } from './StoppedSprinting'\nimport { StartedSwimming } from './StartedSwimming'\nimport { StoppedSwimming } from './StoppedSwimming'\nimport { EntityHit } from './EntityHit'\nimport { PlayerHit } from './PlayerHit'\nimport { Explosion } from './Explosion'\nimport { Death } from './Death'\nimport { Respawn } from './Respawn'\nimport { Piston } from './Piston'\nimport { EffectAdded } from './EffectAdded'\nimport { WeatherUpdated } from './WeatherUpdated'\nimport { Tick } from './Tick'\nimport { EntityEventTrigger } from './EntityEventTrigger'\nimport { PlayerEventTrigger } from './PlayerEventTrigger'\nimport { ItemEventTrigger } from './ItemEventTrigger'\nimport { PlayerScoreUpdated } from './PlayerScoreUpdated'\nimport { EntityScoreUpdated } from './EntityScoreUpdated'\nimport { PlayerTagsUpdated } from './PlayerTagsUpdated'\nimport { EntityTagsUpdated } from './EntityTagsUpdated'\nimport { EntityHurt } from './EntityHurt'\nimport { PlayerHurt } from './PlayerHurt'\nimport { Lever } from './Lever'\nimport { ChestOpened } from './ChestOpened'\n\n// Export all events as an array.\nexport const events = [\n  OnChat,\n  OnJoin,\n  OnLeave,\n  BlockCreated,\n  BlockDestroyed,\n  BlockHit,\n  ItemUse,\n  ItemInteract,\n  ItemEvent,\n  ItemDropped,\n  EntityCreated,\n  EntityDestroyed,\n  PlayerTag,\n  EntityTag,\n  EnteredWater,\n  ExitedWater,\n  Jump,\n  Landed,\n  Swing,\n  StartedBurning,\n  StoppedBurning,\n  StartedMoving,\n  StoppedMoving,\n  StartedRiding,\n  StoppedRiding,\n  StartedSleeping,\n  StoppedSleeping,\n  StartedSneaking,\n  StoppedSneaking,\n  StartedSprinting,\n  StoppedSprinting,\n  StartedSwimming,\n  StoppedSwimming,\n  EntityHit,\n  PlayerHit,\n  Explosion,\n  Death,\n  Respawn,\n  Piston,\n  EffectAdded,\n  WeatherUpdated,\n  Tick,\n  EntityEventTrigger,\n  PlayerEventTrigger,\n  ItemEventTrigger,\n  PlayerScoreUpdated,\n  EntityScoreUpdated,\n  PlayerTagsUpdated,\n  EntityTagsUpdated,\n  EntityHurt,\n  PlayerHurt,\n  Lever,\n  ChestOpened,\n]\n\n// Export abstract event.\nexport { default as AbstractEvent } from './AbstractEvent'\n","// Regulat imports.\nimport { EventEmitter } from '../polyfill'\nimport { events } from '../events'\nimport { PlayerManager } from '../player'\nimport { Events, world } from 'mojang-minecraft'\nimport { EntityManager } from '../entity'\nimport { CommandManager } from '../commands'\nimport { WorldManager } from '../world'\nimport { ScoreboardManager } from '../scoreboard'\nimport { version, mcbe, protocol } from '../version'\n\n// Type imports.\nimport type AbstractEvent from '../events/AbstractEvent'\nimport type { Dimension, ServerCommandResponse, ClientEvents, Awaitable, ClientOptions } from '../types'\n\n// Client Listener Type Event Overrides.\nexport interface Client {\n  on: (<K extends keyof ClientEvents>(event: K, listener: (...args: ClientEvents[K]) => Awaitable<void>) => void) &\n    (<S extends string | symbol>(\n      event: Exclude<S, keyof ClientEvents>,\n      listener: (...args: any[]) => Awaitable<void>,\n    ) => void)\n\n  addListener: (<K extends keyof ClientEvents>(\n    event: K,\n    listener: (...args: ClientEvents[K]) => Awaitable<void>,\n  ) => void) &\n    (<S extends string | symbol>(\n      event: Exclude<S, keyof ClientEvents>,\n      listener: (...args: any[]) => Awaitable<void>,\n    ) => void)\n\n  once: (<K extends keyof ClientEvents>(event: K, listener: (...args: ClientEvents[K]) => Awaitable<void>) => this) &\n    (<S extends string | symbol>(\n      event: Exclude<S, keyof ClientEvents>,\n      listener: (...args: any[]) => Awaitable<void>,\n    ) => void)\n\n  emit: (<K extends keyof ClientEvents>(event: K, ...args: ClientEvents[K]) => void) &\n    (<S extends string | symbol>(event: Exclude<S, keyof ClientEvents>, ...args: unknown[]) => void)\n\n  envokeEvent: (<K extends keyof ClientEvents>(event: K, ...args: ClientEvents[K]) => void) &\n    (<S extends string | symbol>(event: Exclude<S, keyof ClientEvents>, ...args: unknown[]) => void)\n\n  off: (<K extends keyof ClientEvents>(event: K, listener: (...args: ClientEvents[K]) => Awaitable<void>) => void) &\n    (<S extends string | symbol>(\n      event: Exclude<S, keyof ClientEvents>,\n      listener: (...args: any[]) => Awaitable<void>,\n    ) => void)\n\n  removeListener: (<K extends keyof ClientEvents>(\n    event: K,\n    listener: (...args: ClientEvents[K]) => Awaitable<void>,\n  ) => void) &\n    (<S extends string | symbol>(\n      event: Exclude<S, keyof ClientEvents>,\n      listener: (...args: any[]) => Awaitable<void>,\n    ) => void)\n\n  removeListeners: (<K extends keyof ClientEvents>(event?: K) => void) &\n    (<S extends string | symbol>(event?: Exclude<S, keyof ClientEvents>) => void)\n}\n\n/**\n * Client is the main entrypoint of BeAPI. Here is where\n * you will interact with almost everything!\n *\n * ```ts\n *  import { Client } from 'beapi-core';\n *\n *  const client = new Client();\n *  ...\n * ```\n */\nexport class Client extends EventEmitter {\n  /**\n   * Protected map to keep track of registered events.\n   */\n  protected readonly _events = new Map<string, AbstractEvent>()\n  /**\n   * Protected reference to client options.\n   */\n  protected readonly _options: ClientOptions\n\n  /**\n   * The main hub for interacting with and managing players in the world.\n   */\n  public readonly players = new PlayerManager(this)\n  /**\n   * The main hub for interacting with and manging entities in the world.\n   */\n  public readonly entities = new EntityManager(this)\n  /**\n   * The main hub for interacting with BeAPI chat commands in the world.\n   */\n  public readonly commands = new CommandManager(this)\n  /**\n   * The main hub for interacting with the Minecraft world.\n   */\n  public readonly world = new WorldManager(this)\n  /**\n   * The main hub for interacting with scoreboards in the world.\n   */\n  public readonly scoreboards = new ScoreboardManager(this)\n  /**\n   * Current BeAPI version.\n   */\n  public readonly currentVersion = version\n  /**\n   * Current MCBE version.\n   */\n  public readonly currentMCBE = mcbe\n  /**\n   * Current MCBE protocol version.\n   */\n  public readonly currentProtocol = protocol\n\n  /**\n   * Client is the main entrypoint of BeAPI. Here is where\n   * you will interact with almost everything!\n   *\n   * ```ts\n   *  import { Client } from 'beapi-core';\n   *\n   *  const client = new Client();\n   *  ...\n   * ```\n   * @param options Optional client options.\n   */\n  public constructor(options: ClientOptions = {}) {\n    super()\n    this._options = options\n    // If enableEvents array then we only\n    // want to enable the events they have\n    // defined.\n    if (this._options.enableEvents) {\n      for (const event of events) {\n        // If included events contains\n        // events name.\n        if (this._options.enableEvents.includes(event.prototype.name)) {\n          // If events does not already contain\n          if (!this._events.has(event.prototype.name)) {\n            // Load the unregistered event.\n            this.loadEvent(event)\n          }\n        }\n      }\n      // Else we want to assume all need to be\n      // Enabled\n    } else {\n      // For each event exported from events\n      for (const event of events) {\n        // If events does not already contain\n        if (!this._events.has(event.prototype.name)) {\n          // Load the unregistered event.\n          this.loadEvent(event)\n        }\n      }\n    }\n    // Checks if commands were disabled in the options\n    if (this._options.commandsDisabled) {\n      // Disables the command manager\n      this.commands.disable()\n    }\n    // Checks if a custom prefix was provided\n    if (this._options.commandsPrefix) {\n      // Sets the prefix\n      this.commands.setPrefix(this._options.commandsPrefix)\n    }\n  }\n\n  /**\n   * Sends deprecated event message in content log.\n   * @param name Name of event\n   * @returns\n   */\n  protected deprecated(name: string): void {\n    return console.warn(\n      `[BeAPI]: Event \"${name}\" appears be deprecated, skipping registration. Please report this issue here: https://github.com/MCBE-Utilities/BeAPI/issues`,\n    )\n  }\n\n  /**\n   * Loads a new event on the client. Events loaded MUST extend `AbstractClass`.\n   * See [events folder](https://github.com/MCBE-Utilities/BeAPI/tree/beta/packages/beapi/src/events) for formatting.\n   * @param event Non contructed event to load.\n   * @returns\n   */\n  public loadEvent(event: new (client: Client) => AbstractEvent): void {\n    const builtEvent = new event(this)\n\n    if (!this.verifyIEvent(builtEvent.iName)) return this.deprecated(builtEvent.iName)\n\n    this._events.set(builtEvent.name, builtEvent)\n    builtEvent.on()\n  }\n\n  /**\n   * Removes an event from the client and calls the events `off` method.\n   * @param name Name of the event.\n   */\n  public removeEvent(name: string): void {\n    const event = this._events.get(name)\n    if (this._events.delete(name)) event?.off()\n  }\n\n  /**\n   * Attempts to get an event by its name.\n   * @param name Name of the event.\n   * @returns can be `undefined`\n   */\n  public getEvent(name: string): AbstractEvent | undefined {\n    return this._events.get(name)\n  }\n\n  /**\n   * Verifies an event is a valid Minecraft IEvent.\n   * The name `custom` returns `true` because BeAPI registers\n   * a handful of custom events not made by Minecraft.\n   * @param name Name of IEvent.\n   * @returns `true` means exists.\n   */\n  public verifyIEvent(name: string): boolean {\n    if (name === 'custom') return true\n    return Object.keys(Events.prototype).includes(name)\n  }\n\n  /**\n   * Returns an array of all Minecraft IEvents.\n   * @returns\n   */\n  public getAllIEvents(): string[] {\n    return Object.keys(Events.prototype)\n  }\n\n  /**\n   * Executes a world level command.\n   * @param cmd Command string.\n   * @param dimension Optional dimensino to execute in.\n   * @param debug Send errors to content log?\n   * @returns\n   */\n  public executeCommand<T>(cmd: string, dimension: Dimension = 'overworld', debug = false): ServerCommandResponse<T> {\n    try {\n      const command = world.getDimension(dimension).runCommand(cmd) as ServerCommandResponse<T>\n\n      return {\n        statusMessage: command.statusMessage,\n        data: command as unknown as T,\n        err: false,\n      }\n    } catch (error) {\n      if (debug) console.info(`[executeCommand]: ${String(error)}`)\n\n      return {\n        statusMessage: String(error),\n        data: null,\n        err: true,\n      }\n    }\n  }\n}\n","import type { KeysOfCommandTypes } from '../types'\nimport type { CommandExecState } from '.'\n\n// Create references to global constructors with different\n// Names so not to interfere with CommandTypes namespace.\nconst StringConstructor = String\nconst NumberConstructor = Number\nconst BooleanConstructor = Boolean\n\n/**\n * Dedicated namespace to organize different command parameter types.\n * Namespaces were chosen because they are easy to add on to and look\n * better.\n */\nexport namespace CommandTypes {\n  /**\n   * String command parameter type. When used expects user input of:\n   * ```n\n   * somestring\n   * ```\n   *\n   * or\n   *\n   * ```n\n   * \"some string with spaces\"\n   * ```\n   */\n  export class String extends StringConstructor {\n    /**\n     * Display name used when generating the command usage.\n     */\n    public static displayName = 'string'\n\n    /**\n     * Extract method, accepts a command execution state\n     * and attempts to pick up off where last extractor completed.\n     *\n     * Can return undefined if input is incorrect.\n     *\n     * `The return value of this method is used to infer callback\n     * argument types`\n     *\n     * @param {CommandExecState} a Command execution state.\n     * @returns {string | undefined}\n     */\n    public static extract(a: CommandExecState): string | undefined {\n      // Read next argument in slice array.\n      const text = a.readNext()\n\n      // Ensure the argument is valid and defined.\n      if (typeof text === 'string') {\n        // If an empty string call extract again to try next argument.\n        if (!text.length) return this.extract(a)\n\n        // If text starts with quotation its a string scope.\n        if (text.startsWith('\"')) {\n          // Create array to hold the final scope.\n          const final = []\n\n          // Create variable i and assign to current argument\n          // While i is a typeof string continue looping\n          // After every increment assign i to next argument\n          for (let i: string | undefined = text; typeof i === 'string'; i = a.readNext()) {\n            // Push current argument to final scope array.\n            final.push(i)\n\n            // If current argument endswith quotation and its not the\n            // first quotation mark, scope was ended so stop loop.\n            if (i.endsWith('\"') && (i.length > 1 || final.length > 1)) break\n          }\n\n          // If last element in final string scope does end with\n          // a quatation then its a closed scope so return.\n          if (final[final.length - 1].endsWith('\"')) return final.join(' ').slice(1).slice(0, -1)\n          // Otherwise its an unclosed string scope so we need\n          // to throw an error to the executor.\n          a.throwSyntaxError('Unclosed string scope! Expected: \"')\n\n          // Not string scope, just return text argument\n        } else return text\n\n        // If argument is invalid/undefined throw expected argument syntax error.\n      } else a.throwSyntaxError('Expected argument!')\n    }\n  }\n\n  /**\n   * Number command parameter type. When used expects user input of:\n   * ```n\n   * 1\n   * ```\n   *\n   * or\n   *\n   * ```n\n   * 0.1\n   * ```\n   */\n  export class Number extends NumberConstructor {\n    /**\n     * Display name used when generating the command usage.\n     */\n    public static displayName = 'number'\n\n    /**\n     * Extract method, accepts a command execution state\n     * and attempts to pick up off where last extractor completed.\n     *\n     * Can return undefined if input is incorrect.\n     *\n     * `The return value of this method is used to infer callback argument types`\n     *\n     * @param {CommandExecState} a Command execution state.\n     * @returns {number | undefined}\n     */\n    public static extract(a: CommandExecState): number | undefined {\n      // Read next argument in slice array.\n      const text = a.readNext()\n\n      // Ensure the argument is valid and defined.\n      if (typeof text === 'string') {\n        // If an empty string call extract again to try next argument.\n        if (!text.length) return this.extract(a)\n\n        // Attempt to parse argument as a float.\n        const num = parseFloat(text)\n\n        // If not NaN return the integer.\n        if (num) return num\n        // Otherwise throw syntax error with tip.\n        a.throwSyntaxError(`Expected integer or floating point!`)\n\n        // If argument is invalid/undefined throw expected argument syntax error.\n      } else a.throwSyntaxError('Expected argument!')\n    }\n  }\n\n  /**\n   * Boolean command parameter type. When used expects user input of:\n   * ```n\n   * true\n   * ```\n   *\n   * or\n   *\n   * ```n\n   * false\n   * ```\n   */\n  export class Boolean extends BooleanConstructor {\n    /**\n     * Display name used when generating the command usage.\n     */\n    public static displayName = 'boolean'\n\n    /**\n     * Extract method, accepts a command execution state\n     * and attempts to pick up off where last extractor completed.\n     *\n     * Can return undefined if input is incorrect.\n     *\n     * `The return value of this method is used to infer callback argument types`\n     *\n     * @param {CommandExecState} a Command execution state.\n     * @returns {boolean | undefined}\n     */\n    public static extract(a: CommandExecState): boolean | undefined {\n      // Read next argument in slice array.\n      let text = a.readNext()\n\n      // Ensure the argument is valid and defined.\n      if (typeof text === 'string') {\n        // If an empty string call extract again to try next argument.\n        if (!text.length) return this.extract(a)\n\n        // Convert argument to lowercase for easier comparison.\n        text = text.toLowerCase()\n\n        // If not true of false then invalid type throw error.\n        if (text !== 'true' && text !== 'false') a.throwSyntaxError(`Expected \"true\" or \"false\"!`)\n        // Else return what type it is by checking if argument\n        // is equal to true, if so it returns true else false.\n        else return text === 'true'\n\n        // If argument is invalid/undefined throw expected argument syntax error.\n      } else a.throwSyntaxError('Expected argument!')\n    }\n  }\n}\n\n/**\n * Helper function to check if an object contains and CommadTypes.\n * Used for the register command overload to check arguments.\n * @param {object} o object to check\n * @returns {boolean}\n */\nexport function checkObjectForCommandTypes(o: object): boolean {\n  // Get the first entry in the object.\n  let firstAssignment = Object.values(o)[0]\n\n  // If its and array then the contructor *should* be of index 0.\n  if (Array.isArray(firstAssignment)) firstAssignment = firstAssignment[0]\n\n  // For each item in CommandTypes.\n  for (const key in CommandTypes) {\n    // If first entry \"constructor\" is equal to\n    // CommandTypes constructor return true.\n    if (firstAssignment === CommandTypes[key as KeysOfCommandTypes]) return true\n  }\n\n  // If does not return true in for loop\n  // then not a CommanType.\n  return false\n}\n","import type { CommandEntry, CommandOptions, CommandCallable, CommandArguments, OnChatEvent } from '../types'\nimport { checkObjectForCommandTypes, CommandExecState } from '.'\nimport type { Client } from '../client'\nimport type { Player } from '../player'\nimport { CommandTypes } from './CommandTypes'\n\n// Static array of command type constructors.\nconst commandTypes: typeof CommandTypes[keyof typeof CommandTypes][] = []\nfor (const key in CommandTypes) {\n  if (key) commandTypes.push(CommandTypes[key as keyof typeof CommandTypes])\n}\n\n/**\n * Verifies command schema has only command types as values\n * or [CommandType, boolean] otherwise returns key of the invalid.\n * @param schema\n * @returns\n */\nfunction verifyDefinitionTypes<T extends CommandArguments>(schema: T): string | undefined {\n  for (const key of Object.keys(schema)) {\n    const v = schema[key]\n    if (Array.isArray(v)) {\n      if (v.length > 2) return key\n      if (!commandTypes.includes(v[0])) return key\n      if (typeof v[1] !== 'boolean') return key\n    } else if (!commandTypes.includes(v)) return key\n  }\n}\n\n/**\n * Primary class for interacting with BeAPI commands.\n *\n * Mach 3 bb <3\n */\nexport class CommandManager {\n  /**\n   * Reference to main client object.\n   */\n  protected _client: Client\n  /**\n   * Map containing all command entries.\n   */\n  protected _commands = new Map<string, CommandEntry<never>>()\n\n  /**\n   * Command manager should be used?\n   */\n  protected _enabled = false\n\n  /**\n   * Prefix to use.\n   */\n  protected _prefix = '-'\n\n  /**\n   * Bound handler reference.\n   */\n  protected __onChatHandler = this._onChatHandler.bind(this)\n\n  /**\n   * ...\n   */\n  public constructor(client: Client) {\n    this._client = client\n\n    // Create help command ahead of time\n    this.register(\n      'help',\n      'Get help on all registered commands!',\n      {\n        aliases: ['h'],\n      },\n      {\n        command: [CommandTypes.String, true],\n      },\n      (p, c) => {\n        this._onHelpCommand(p, c)\n      },\n    )\n\n    // Enable command handler.\n    this.enable()\n  }\n\n  /**\n   * Logic for try executing commands when chat is used.\n   * @param e On chat event.\n   */\n  protected _onChatHandler(e: OnChatEvent): void {\n    return this.tryExecuteFrom(e.message, e.sender!, e)\n  }\n\n  /**\n   * Disable command manager.\n   */\n  public disable(): void {\n    if (!this._enabled) return\n    this._enabled = false\n    this._client.removeListener('OnChat', this.__onChatHandler)\n  }\n\n  /**\n   * Enable command manager.\n   */\n  public enable(): void {\n    if (this._enabled) return\n    this._enabled = true\n    this._client.addListener('OnChat', this.__onChatHandler)\n  }\n\n  /**\n   * Gets circular client reference.\n   * @returns\n   */\n  public getClient(): Client {\n    return this._client\n  }\n\n  /**\n   * Get command manager enabled status.\n   * @returns {boolean}\n   */\n  public getEnabled(): boolean {\n    return Boolean(this._enabled)\n  }\n\n  /**\n   * Change the current prefix to something different.\n   * @param {string} prefix New prefix to use.\n   */\n  public setPrefix(prefix: string): void {\n    this._prefix = prefix\n  }\n\n  /**\n   * Get the current prefix.\n   * @returns {string}\n   */\n  public getPrefix(): string {\n    return this._prefix\n  }\n\n  /**\n   * Get all commands as a map.\n   * @returns {Map<string, CommandEntry<never>>}\n   */\n  public getAll(): Map<string, CommandEntry<never>> {\n    return this._commands\n  }\n\n  /**\n   * Get all commands as an array.\n   * @returns {CommandEntry<never>[]}\n   */\n  public getAllAsArray(): CommandEntry<never>[] {\n    return Array.from(this._commands.values())\n  }\n\n  /**\n   * Get command by its name.\n   * @param name Name of command.\n   * @returns {CommandEntry<never> | undefined}\n   */\n  public getCommand(name: string): CommandEntry<never> | undefined {\n    return this._commands.get(name)\n  }\n\n  /**\n   * Register a new command with no extra options and no arguments.\n   * @param name Name of command.\n   * @param description Description of command.\n   * @param callback Callback method.\n   * @returns\n   */\n  public register(name: string, description: string, callback: CommandCallable<never>): CommandEntry<never>\n  /**\n   * Register a new command with extra options and no arguments.\n   * @param name Name of command.\n   * @param description Description of command.\n   * @param options Extra options.\n   * @param callback Callback method.\n   * @returns\n   */\n  public register(\n    name: string,\n    description: string,\n    options: CommandOptions,\n    callback: CommandCallable<never>,\n  ): CommandEntry<never>\n  /**\n   * Register a new command with arguments and no extra options.\n   * @param name Name of command.\n   * @param description Description of command.\n   * @param schema Command arguments.\n   * @param callback Callback method.\n   * @returns\n   */\n  public register<T extends CommandArguments>(\n    name: string,\n    description: string,\n    schema: T,\n    callback: CommandCallable<T>,\n  ): CommandEntry<T>\n  /**\n   * Register a new command with arguments and extra options.\n   * @param name Name of command.\n   * @param description Description of command.\n   * @param options Command arguments.\n   * @param schema Command arguments.\n   * @param callback Callback method.\n   * @returns\n   */\n  public register<T extends CommandArguments>(\n    name: string,\n    description: string,\n    options: CommandOptions,\n    schema: T,\n    callback: CommandCallable<T>,\n  ): CommandEntry<T>\n  /**\n   * Implementation Function\n   * @param name Name of command.\n   * @param description Description of command.\n   * @param optionsSchemaOrCallback Can be either options, schema, or callback.\n   * @param schemaOrCallback Can be either schema or callback.\n   * @param callback Callback method.\n   * @returns\n   */\n  public register<T extends CommandArguments>(\n    name: string,\n    description: string,\n    optionsSchemaOrCallback: CommandOptions | T | CommandCallable<T>,\n    schemaOrCallback?: T | CommandCallable<T>,\n    callback?: CommandCallable<T>,\n  ): CommandEntry<T> {\n    /**\n     * Command options, can be undefined.\n     */\n    let _options: CommandOptions | undefined\n\n    /**\n     * Command argument schema, can be undefined.\n     */\n    let _schema: T | undefined\n\n    /**\n     * Command callback, cannot be undefined.\n     */\n    let _callback: CommandCallable<T>\n\n    // If optionsSchemaOrCallback is a function then it must be the callback.\n    if (typeof optionsSchemaOrCallback === 'function')\n      // Assign callback to optionsSchemaOrCallback.\n      _callback = optionsSchemaOrCallback\n    // Use checkObjectForCommandTypes on optionsSchemaOrCallback if it\n    // returns true then it must be the argument schema.\n    else if (checkObjectForCommandTypes(optionsSchemaOrCallback))\n      // Assign arguments schema to optionsSchemaOrCallback.\n      _schema = optionsSchemaOrCallback as T\n    // No other options so must be extra options. Assign options\n    // to optionsSchemaOrCallback.\n    else _options = optionsSchemaOrCallback as CommandOptions\n\n    // If schemaOrCallback exists then there is a 4th parameter that\n    // needs to be handled.\n    if (schemaOrCallback) {\n      // If schemaOrCallback is typeof function then assign callback\n      // to schemaOrCallback because it has to be callback.\n      if (typeof schemaOrCallback === 'function') _callback = schemaOrCallback\n      // Else assign schema to schemaOrCallback because if its not\n      // Callback it must be argument schema.\n      else _schema = schemaOrCallback\n    }\n\n    // If callback exists then 5th argument was defined and\n    // It must be the callback.\n    if (callback) _callback = callback\n\n    // Verify everything on the schema is correct\n    if (_schema) {\n      const check = verifyDefinitionTypes(_schema)\n      if (check)\n        throw new Error(\n          `Invalid argument schema when registering command \"${name}\". Key \"${check}\" expected a CommandType or [CommandType, boolean]!`,\n        )\n    }\n\n    // Create a new command entry.\n    const entry: CommandEntry<T> = {\n      name,\n      description,\n      // // @ts-expect-error Does not need to be defined\n      ...(_options ?? {}),\n      // // @ts-expect-error Does not need to be defined\n      schema: _schema ?? {},\n      // @ts-expect-error Will always be defined\n      call: _callback,\n    }\n\n    // Set it in commands map.\n    this._commands.set(name, entry)\n\n    // Emit command registered event\n    this._client.emit('CommandRegistered', {\n      command: entry,\n      cancel: () => {\n        this._commands.delete(name)\n      },\n    })\n\n    // Return the new entry.\n    return entry\n  }\n\n  /**\n   * Attempts to delete a command based off\n   * its name.\n   * @param {string} name Name of the command.\n   * @returns {boolean}\n   */\n  public unregister(name: string): boolean {\n    return this._commands.delete(name)\n  }\n\n  /**\n   * Acts like an eval function for commands.\n   * Takes in a string and trys to parse and execute\n   * it as a command.\n   *\n   * Also needs a player to pipe data to.\n   *\n   * @param str Command String.\n   * @param player Player executor.\n   */\n  public tryExecuteFrom(str: string, player: Player, e: OnChatEvent): void {\n    // If string does not start with prefix\n    // no need to continue.\n    if (!str.startsWith(this._prefix)) return\n    e.cancel()\n\n    // Create a new command execution state\n    const state = new CommandExecState(this, player, str)\n\n    // Try to execute new command state.\n    try {\n      state.tryExecute()\n    } catch (error) {\n      // Give error typings cause catch is unknown.\n      const err = error as Error & { user?: boolean }\n\n      // If user error, throw to console.\n      if (err.user) {\n        // Display error object as best as possible in content log.\n        console.error(\n          `An error occurred in command callback: [${err.name ?? 'Error'}]: ${err.message ?? 'No error message...'}\\n${\n            err.stack ?? 'No error stack trace...'\n          }`,\n        )\n\n        // Send player message saying the command errored out.\n        return player.sendMessage(`§c§¢An error occured while executing command!`)\n      }\n      // Otherwise send syntax error in chat.\n      player.sendMessage(`§c§¢${err.message}`)\n    }\n  }\n\n  /**\n   * Protected method that is called when help command is called.\n   * Will be overriden if `overrideHelpCommand` is used.\n   */\n  protected _onHelpCommand(player: Player, args: { command: string | undefined | null }): void {\n    if (args.command) {\n      const command = this.getAllAsArray().find((c) => c.name === args.command! || c.aliases?.includes(args.command!))\n      if (!command || command.hideFromHelp)\n        return player.sendMessage(`§c§¢Unable to find command with the name ${args.command}!`)\n\n      player.sendMessage(\n        `§9Info on command \"${command.name}\"§r\\n  §7Usage:§r\\n    §8${\n          command.usage ?? this.generateUsage(command)\n        }§r\\n  §7Description:§r\\n    §8${command.description}§r\\n  §7Aliases:§r\\n    §8${\n          command.aliases?.join(', ') ?? 'N/A'\n        }§r\\n  §7Permissions:§r\\n    §8${command.permissionTags?.join(', ') ?? 'N/A'}\\n`,\n      )\n    } else {\n      const final = this.getAllAsArray()\n        .filter((c) => !c.hideFromHelp)\n        .map((c) => `  §6${this._prefix}${c.name} §8- ${c.description ?? 'No description given...'}`)\n        .join('\\n')\n      player.sendMessage(\n        `§9BeAPI v${this._client.currentVersion} Command List (${this.getAllAsArray().length})§r\\n${final}\\n`,\n      )\n    }\n  }\n\n  /**\n   * Override default help command with your own logic and styling.\n   * This is called anytime a user uses the help command.\n   * @param listener Command callback.\n   */\n  public overrideHelpCommand(listener: (player: Player, args: { command: string | undefined | null }) => void): void {\n    this._onHelpCommand = listener\n  }\n\n  /**\n   * Generates a usage string for command.\n   *\n   * @param command Command to generate usage for.\n   * @returns {string}\n   */\n  public generateUsage(command: CommandEntry<never>): string {\n    // If predefined usage return that instead of generating one.\n    if (command.usage) return command.usage\n\n    // Grab all keys as array from parameter schema.\n    const keys = Object.keys(command.schema ?? {})\n\n    // Map the keys into individual strings.\n    const args = keys\n      .map((k) => {\n        // Get value from key in object schema.\n        const obj = command.schema[k]\n\n        // Get the constructor, schema value can be\n        // of type array. If array constructor should\n        // be in index 0.\n        const constructor = Array.isArray(obj) ? obj[0] : obj\n        // Get optional status of command if its an array\n        // Its located at index 1 otherwise assume not optional\n        const optional = Array.isArray(obj) ? obj[1] ?? false : false\n\n        // Create correct opening and closing braces\n        const openingBrace = optional ? '[' : '<'\n        const closingBrace = optional ? ']' : '>'\n\n        // Put the cake together.\n        return `${openingBrace}${k}: ${constructor.displayName}${closingBrace}`\n      })\n      // Join with spaces.\n      .join(' ')\n\n    // Return new usage :).\n    return `${this.getPrefix()}${command.name} ${args}`\n  }\n}\n","import type { CommandManager } from '.'\nimport type { Player } from '../player'\nimport type { CommandEntry, CommandArgumentTypes } from '../types'\n\n/**\n * Used for keeping track of the execution state of a command.\n * Yeah yeah, this is a very odd way of going about it however\n * it allows for better error messages easier!\n *\n * This is prone to change in the future to allow for even better\n * error messages including argument names etc.\n */\nexport class CommandExecState {\n  /**\n   * Command Manager Reference.\n   */\n  protected readonly _manager: CommandManager\n  /**\n   * Command Executor Player Reference.\n   */\n  protected readonly _player: Player\n  /**\n   * Non mutated reference to splitted execString.\n   */\n  protected readonly _split: string[]\n  /**\n   * Mutated reference to keep a pointer of current position in split.\n   */\n  protected _splitPos = 0\n  /**\n   * Reference to command entry. Could turn up undefined if invalid command.\n   */\n  protected _cmdRef: CommandEntry<never> | undefined\n\n  /**\n   * Non mutable command string to execute.\n   */\n  public readonly execString: string\n\n  /**\n   * Command execution progress state manager.\n   * Used for bettering errors and simplifying argument extraction.\n   *\n   * @param {CommandManager} manager CommandManager Reference.\n   * @param {string} execString Command string to execute.\n   */\n  public constructor(manager: CommandManager, player: Player, execString: string) {\n    // Assign parameters to according properties\n    this.execString = execString\n    this._manager = manager\n    this._player = player\n\n    // Remove prefix from execution string, split on space, and assign to split property.\n    this._split = this.execString.substring(this._manager.getPrefix().length).split(' ')\n\n    // Attempt to get command from first argument could be alias or actual name so we\n    // extract the name from arguments array and attempt to find a matching command\n    // in the command array by checking against aliases and names.\n    const commandName = this._split[this._splitPos++]\n    this._cmdRef = this._manager.getAllAsArray().find((c) => c.name === commandName || c.aliases?.includes(commandName))\n  }\n\n  /**\n   * Checks if the command was valid or not.\n   * @returns {boolean}\n   */\n  public isValid(): boolean {\n    if (this._cmdRef) return true\n    return false\n  }\n\n  /**\n   * Gets current location of execution on command string.\n   * @returns {number}\n   */\n  protected _getIndex(): number {\n    // Add prefix length to length of split command string array joined by spaces.\n    return this._manager.getPrefix().length + this._split.slice(0, this._splitPos).join(' ').length\n  }\n\n  /**\n   * Throws invalid command error and stops execution.\n   *\n   * Stops execution **\n   */\n  protected _throwInvalidCommand(): void {\n    throw new Error(`Unable to find command with the name \"${this._split[0]}\"!`)\n  }\n\n  /**\n   * Attempts to build command string arguments in object.\n   * If any of the CommandTypes extract methods fail it will\n   * return undefined which is then used to stop execution.\n   *\n   * All syntax errors will be thrown from within CommandTypes\n   * extract methods.\n   * @returns {Record<string, any> | undefined}\n   */\n  protected _buildArgs(): Record<string, any> | undefined {\n    // Initialize object and create shortened schema ref variable.\n    const object: Record<string, any> = {}\n    const schema = this._cmdRef!.schema\n\n    // Create a loop initializing a variable key for each key in the parameter schema.\n    for (const key of Object.keys(schema)) {\n      // Get CommandType constructor by checking if keys value in schema is an Array.\n      // If its an array the constructor is located at index 0, otherwise value is the constructor.\n      const constructor: CommandArgumentTypes = Array.isArray(schema[key])\n        ? (schema[key] as [CommandArgumentTypes, boolean])[0]\n        : (schema[key] as CommandArgumentTypes)\n\n      // Get optional status of argument by checking if keys value in schema is an Array.\n      // If its an array the optional bool is located at index 1, otherwise assumed to be false.\n      const optional = Array.isArray(schema[key]) ? (schema[key] as [CommandArgumentTypes, boolean])[1] ?? false : false\n\n      // If current argument is optional and all remaining elements in split array are empty\n      // Break the loop as there is no reason to continue.\n      if (optional && !this._split.slice(this._splitPos).filter((i) => i.length).length) break\n\n      // Assign property in object with current schema key to constructors extraction result.\n      object[key] = constructor.extract(this)\n\n      // if (!object[key] && optional) break\n      // If no value was assigned from extraction result it is handled as an error.\n      // So we will return undefined.\n      if (object[key] === undefined) return undefined\n    }\n\n    // If everything above goes well and there are no early returns,\n    // We can assume all went well and return newly contructed args.\n    return object\n  }\n\n  /**\n   * Attempts to read the next argument in split array and increments\n   * current position.\n   *\n   * This has a chance to return undefined as it will continously try\n   * to access the next element even if its not allocated.\n   *\n   * @returns {string | undefined}\n   */\n  public readNext(): string | undefined {\n    return this._split[this._splitPos++]\n  }\n\n  /**\n   * Attempts to read the current argument in split array.\n   *\n   * This has a chance to return undefined as split position\n   * could be pointing to a non allocated index.\n   *\n   * @returns {string | undefined}\n   */\n  public readCurrent(): string | undefined {\n    return this._split[this._splitPos + 1]\n  }\n\n  /**\n   * Checks if the user has sufficient permissions to execute\n   * the command.\n   */\n  protected _checkPermissions(): void {\n    if (this._cmdRef?.permissionTags?.length) {\n      for (const tag of this._cmdRef.permissionTags) {\n        if (!this._player.hasTag(tag)) return this.throwPermissionError()\n      }\n    }\n  }\n\n  /**\n   * Attempts to execute the command state.\n   */\n  public tryExecute(): void {\n    // If no command reference then invalid command.\n    if (!this._cmdRef) return this._throwInvalidCommand()\n\n    // Verify permissions before continue\n    this._checkPermissions()\n\n    // Attempt to build the arguments. Can return undefined as mentioned.\n    const args = this._buildArgs()\n    // If arguments are undefined we assume it was an error so return.\n    if (!args) return\n\n    // Emit command used event\n    let cancel = false\n    this._manager.getClient().emit('CommandUsed', {\n      command: this._cmdRef,\n      sender: this._player,\n      args,\n      cancel: () => {\n        cancel = true\n      },\n    })\n\n    // If cancelled return.\n    // Cancels must be syncronous and pretty instant.\n    if (cancel) return\n\n    // If all is well then we call the commands callback with the player\n    // and the final constructed arguments.\n    try {\n      this._cmdRef.call(this._player, args as never)\n    } catch (error) {\n      const err: Error = (typeof error === 'object' ? error : new Error(error as string)) as Error\n      // We need to throw a literal here because there are\n      // syntax and user errors. We want to weed out user errors from syntax errors.\n      // eslint-disable-next-line\n      throw { message: String(err.message), stack: String(err.stack), name: String(err.name), user: true }\n    }\n  }\n\n  /**\n   * Throws a insufficient permission error not allowing the client to\n   * continue.\n   */\n  public throwPermissionError(): void {\n    throw new Error('You do not have sufficient permissions to use this command!')\n  }\n\n  /**\n   * Generates a usage string for the current command.\n   *\n   * @returns {string}\n   */\n  public generateUsage(): string {\n    // If predefined usage return that instead of generating one.\n    if (this._cmdRef?.usage) return this._cmdRef.usage\n\n    // Grab all keys as array from parameter schema.\n    const keys = Object.keys(this._cmdRef?.schema ?? {})\n\n    // Map the keys into individual strings.\n    const args = keys\n      .map((k) => {\n        // Get value from key in object schema.\n        const obj = this._cmdRef!.schema[k]\n\n        // Get the constructor, schema value can be\n        // of type array. If array constructor should\n        // be in index 0.\n        const constructor = Array.isArray(obj) ? obj[0] : obj\n        // Get optional status of command if its an array\n        // Its located at index 1 otherwise assume not optional\n        const optional = Array.isArray(obj) ? obj[1] ?? false : false\n\n        // Create correct opening and closing braces\n        const openingBrace = optional ? '[' : '<'\n        const closingBrace = optional ? ']' : '>'\n\n        // Put the cake together.\n        return `${openingBrace}${k}: ${constructor.displayName}${closingBrace}`\n      })\n      // Join with spaces.\n      .join(' ')\n\n    // Return new usage :).\n    return `${this._manager.getPrefix()}${this._cmdRef?.name} ${args}`\n  }\n\n  /**\n   * Throws a syntax error to the executor.\n   * It will contain useful information on what was\n   * messed up and how to possibly fix it.\n   *\n   * Stops execution **\n   *\n   * @param {string} msg Pointer tip message.\n   */\n  public throwSyntaxError(msg: string): void {\n    const pad = Array(this._getIndex()).fill('').join(' ')\n\n    throw new Error(\n      `${this.generateUsage()}\\n --> Invalid usage at 0:${this._getIndex()}\\n  |\\n  | ${\n        this.execString\n      }\\n  | ${pad}^ ${msg}\\n  |`,\n    )\n  }\n}\n","// Normal imports.\nimport {\n  BlockLocation,\n  world,\n  Dimension as IDimension,\n  ItemStack,\n  MolangVariableMap,\n  Location as ILocation,\n  ExplosionOptions,\n} from 'mojang-minecraft'\nimport { Block, Permutation } from '../block'\n\n// Type imports.\nimport type { Difficulty, Dimension, Weather, Location } from '../types'\nimport type { Client } from '../client'\nimport type { Entity } from '../entity'\nimport type { Player } from '../player'\n\n/**\n * World Manager is the primary interaction point for world related\n * methods that had no other categorization placing.\n */\nexport class WorldManager {\n  /**\n   * Private client reference.\n   */\n  protected readonly _client: Client\n\n  /**\n   * World Manager is the primary interaction point for world related\n   * methods that had no other categorization placing.\n   * @param {Client} client\n   */\n  public constructor(client: Client) {\n    // Assign private client reference.\n    this._client = client\n  }\n\n  /**\n   * Broadcasts a message to everyone.\n   * @param {string} message Message to send.\n   */\n  public sendMessage(message: string): void {\n    // Execute tellraw, replace all (\") with escaping (\\\\\"). Otherwise command will parse incorrectly.\n    this._client.executeCommand(`tellraw @a {\"rawtext\":[{\"text\":\"${message.replace(/\"/g, '\\\\\"')}\"}]}`)\n  }\n\n  /**\n   * Gets all entities from a specfic world location.\n   * @param {Dimension} dimension Dimension to check.\n   * @param {Location} location Location to check.\n   * @returns {Entity[]}\n   */\n  public getEntitiesFromLocation(dimension: Dimension, location: Location): Entity[] {\n    // Return an array from all entities in the entity manager and create a filter.\n    return Array.from(this._client.entities.getAll().values()).filter(\n      // If entity location === given location and entity dimension === given\n      // dimension return true which will push entity to final array\n      (x) => x.getLocation() === location && x.getDimensionName() === dimension,\n    )\n  }\n\n  /**\n   * Gets all players from a specfic world location.\n   * @param {Dimension} dimension Dimension to check.\n   * @param {Location} location Location to check.\n   * @returns {Player[]}\n   */\n  public getPlayersFromLocation(dimension: Dimension, location: Location): Player[] {\n    // Return an array from all players in the player manager and create a filter.\n    return Array.from(this._client.players.getAll().values()).filter(\n      // If player location === given location and player dimension === given\n      // dimension return true which will push player to final array\n      (x) => x.getLocation() === location && x.getDimensionName() === dimension,\n    )\n  }\n\n  /**\n   * Spawns an entity in a certain world location.\n   * @param {string} id Minecraft entity identifier.\n   * @param {Location} location World location to use.\n   * @param {Dimension} dimension World dimension to use.\n   * @returns {Entity | undefined}\n   */\n  public spawnEntity(id: string, location: Location, dimension: Dimension): Entity | undefined {\n    // Get IDimension and spawn new entity at block location given.\n    const entity = this.getDimension(dimension).spawnEntity(id, new BlockLocation(location.x, location.y, location.z))\n    // Return attempt get entity spawned above from entity manager.\n    return this._client.entities.getByIEntity(entity)\n  }\n\n  /**\n   * Spawns an item in a certain world location.\n   * @param {ItemStack} item Minecraft item stack.\n   * @param {Location} location World location to use.\n   * @param {Dimension} dimension World dimension to use.\n   * @returns {Entity | undefined}\n   */\n  public spawnItem(item: ItemStack, location: Location, dimension: Dimension): Entity | undefined {\n    // Get IDimension and spawn new item at block location given.\n    const entity = this.getDimension(dimension).spawnItem(item, new BlockLocation(location.x, location.y, location.z))\n    // Return attempt get item spawned above from entity manager.\n    return this._client.entities.getByIEntity(entity)\n  }\n\n  /**\n   * Spawns a particle in a certain world location.\n   * @param {string} id Minecraft particle identifier.\n   * @param {Location} location World location to use.\n   * @param {Dimension} dimension World dimension to use.\n   * @param {MolangVariableMap} molangVarMap Particle molang variable map.\n   */\n  public spawnParticle(id: string, location: Location, dimension: Dimension, molangVarMap: MolangVariableMap): void {\n    // Get IDimension and spawn new particle with parameters given.\n    this.getDimension(dimension).spawnParticle(id, new ILocation(location.x, location.y, location.z), molangVarMap)\n  }\n\n  /**\n   * Sets a block permutation world location.\n   * @param {Location} location World location to use.\n   * @param {Dimension} dimension World dimension to use.\n   * @param {Permutation} permutation Minecraft permutation data.\n   * @returns {Block}\n   */\n  public setBlockPermutation(location: Location, dimension: Dimension, permutation: Permutation): Block {\n    // Get block from work with given location and dimension.\n    const block = this.getBlock(location, dimension)\n    // Set permutation of block with given permutation data.\n    block.setPermutation(permutation)\n\n    // Returns block with permutation applied.\n    return block\n  }\n\n  /**\n   * Gets a block from a world location.\n   * @param {Location} location World location to use.\n   * @param {Dimension} dimension World dimension to use.\n   * @returns {Block}\n   */\n  public getBlock(location: Location, dimension: Dimension): Block {\n    // Returns new BeAPI block contruct.\n    return new Block(\n      this._client,\n      this.getDimension(dimension).getBlock(new BlockLocation(location.x, location.y, location.z)),\n    )\n  }\n\n  /**\n   * Gets a world dimension by its name.\n   * @param {Dimension} dimension World dimension to use.\n   * @returns {IDimension}\n   */\n  public getDimension(dimension: Dimension): IDimension {\n    return world.getDimension(dimension)\n  }\n\n  /**\n   * Attempts to get the world time by using `/time query daytime`.\n   *\n   * WARNING: Changes to this commands response in language files could\n   * break its functionality.\n   * @returns {number}\n   */\n  public getTime(): number {\n    const command = this._client.executeCommand('time query daytime')\n    if (command.err) return 0\n\n    return parseInt(command.statusMessage.split(' ')[2], 10)\n  }\n\n  /**\n   * Attempts to set the time to the given value.\n   * @param {number} time New time to set.\n   * @returns {boolean} `true` means successful\n   */\n  public setTime(time: number): boolean {\n    return this._client.executeCommand(`time set ${time}`).err ? false : true\n  }\n\n  /**\n   * Attempts to get the weather by using `/weather query`.\n   *\n   * WARNING: Changes to this commands response in language files could\n   * break its functionality.\n   * @returns {Weather}\n   */\n  public getWeather(): Weather {\n    const command = this._client.executeCommand('weather query')\n    if (command.err) return 'clear'\n\n    return command.statusMessage.split(' ')[3] as Weather\n  }\n\n  /**\n   * Attempts to set the weather to the given status.\n   * @param {Weather} weather New weather status to set.\n   * @returns {boolean} `true` means successful\n   */\n  public setWeather(weather: Weather): boolean {\n    return this._client.executeCommand(`weather ${weather}`).err ? false : true\n  }\n\n  /**\n   * Attempts to set the world difficulty.\n   * @param {Difficulty} difficulty New difficulty to set.\n   * @returns {boolean} `true` means successful\n   */\n  public setDifficulty(difficulty: Difficulty): boolean {\n    return this._client.executeCommand(`difficulty ${difficulty}`).err ? false : true\n  }\n\n  /**\n   * Attempts to create an explosion at given options.\n   * @param {Location} location Location to use.\n   * @param {number} radius How big the boom?\n   * @param {Dimension} dimension Dimension to use.\n   * @param {ExplosionOptions} options Extra boom boom options.\n   */\n  public createExplosion(location: Location, radius: number, dimension: Dimension, options: ExplosionOptions): void {\n    this.getDimension(dimension).createExplosion(new ILocation(location.x, location.y, location.z), radius, options)\n  }\n}\n","// Type imports.\nimport type { Client } from '../client'\nimport type { Objective, ScoreboardSlot } from '..'\n\n/**\n * Scoreboard manager is the main main\n * hub for interacting with scoreboards.\n */\nexport class ScoreboardManager {\n  /**\n   * Protected client circular reference.\n   */\n  protected readonly _client: Client\n\n  /**\n   * Scoreboard manager is the main main\n   * hub for interacting with scoreboards.\n   * @param client Client reference.\n   */\n  public constructor(client: Client) {\n    this._client = client\n  }\n\n  /**\n   * Create a new scoreboard objective.\n   * @param objective Objective to create.\n   * @returns true means success\n   */\n  public createObjective(objective: Objective): boolean {\n    // Check if objective already exists. If so return false.\n    if (this.getObjectives().find((x) => x.id === objective.id)) return false\n\n    // Attempt executing command to add a new scoreboard objective with the given objective object.\n    const command = this._client.executeCommand(\n      `scoreboard objectives add ${objective.id} ${objective.type ?? 'dummy'} \"${objective.display ?? objective.id}\"`,\n    )\n\n    // If error log to console and return false.\n    if (command.err) return false\n\n    // Everything was successful, return true.\n    return true\n  }\n\n  /**\n   * Attempt to remove an object by its id.\n   * @param id Objective id.\n   * @returns true means success\n   */\n  public removeObjective(id: string): boolean {\n    // Check if the objective exists, if not return false.\n    if (!this.getObjectives().find((x) => x.id === id)) return false\n\n    // Attempt executing a command to remove the scoreboard with given id.\n    const command = this._client.executeCommand(`scoreboard objectives remove ${id}`)\n\n    // If error log to console and return false.\n    if (command.err) return false\n\n    // Everything was successful, return true.\n    return true\n  }\n\n  /**\n   * Attempts to get an array of all objectives.\n   * @returns\n   */\n  public getObjectives(): Objective[] {\n    // Initialize an empty objective array.\n    const objectives: Objective[] = []\n\n    // Attempt executing a command to list all objectives.\n    const command = this._client.executeCommand('scoreboard objectives list')\n\n    // If command gives error return empty objectives array.\n    if (command.err) return objectives\n\n    // Split the message on \\n as all objectives are spaced via \\n\n    const split = command.statusMessage.split('\\n')\n\n    // For each line in the split statusMessage\n    for (const line of split) {\n      // If the line does not start with (-) its not a correct objective, continue.\n      if (!line.startsWith('-')) continue\n\n      // Split the line on space to seperate out the different parts.\n      const split = line.split(' ')\n\n      // Slice the objective name out of the line.\n      const objective = split[1].slice(0, split[1].length - 1)\n      // Use regex to extract the display name of the objective.\n      const display = line.match(/'([^']+)'/)![0].replace(/'/g, '')\n      // Use regex to attempt to extract the scoreboard type.\n      const type = line\n        .match(/type '([^']+)'/)![0]\n        .replace(/'/g, '')\n        .replace('type ', '')\n\n      // Push all extractions to the objectives array.\n      objectives.push({\n        id: objective,\n        display,\n        type,\n      })\n    }\n\n    // Return all found objectives.\n    return objectives\n  }\n\n  /**\n   * Set the display of a specfic objective.\n   * @param objective Objective to set.\n   * @param slot Set slot of objective.\n   * @returns true means success\n   */\n  public setDisplay(objective: Objective, slot: ScoreboardSlot): boolean {\n    // Attempt to set the display of the given objective.\n    const command = this._client.executeCommand(`scoreboard objectives setdisplay ${slot} ${objective.id}`)\n\n    // If error log error.\n    if (command.err) return false\n    return true\n  }\n}\n","// @ts-ignore Get version from package.json\nimport { version as v } from '../package.json'\n\n// Export BeAPI core version.\nexport const version = v\n\n// Export MCBE version correlating with BeAPI.\nexport const mcbe = '1.18.30'\n\n// Export MCBE protcol version correlating with BeAPI.\nexport const protocol = 503\n","// Type imports\nimport type { Timer } from '../types'\nimport type { Client } from '../client'\n\n/**\n * Polyfill class that overrides `globalThis` timer methods.\n */\nexport class Timers {\n  /**\n   * Protected runtime id state.\n   */\n  protected _runtimeId = 0\n  /**\n   * Protected active interval map.\n   */\n  protected _intervals = new Map<number, Timer>()\n  /**\n   * Protected active timeout map\n   */\n  protected _timeouts = new Map<number, Timer>()\n\n  /**\n   * Polyfill class that overrides `globalThis` timer methods.\n   */\n  public constructor() {\n    this._polyfillIntervals()\n    this._polyfillTimeouts()\n  }\n\n  /**\n   * Start ticking timer events.\n   * @param client Client circular reference.\n   */\n  public start(client: Client) {\n    // Tick listener for intervals.\n    client.on('Tick', () => {\n      // Foreach interval in the map.\n      this._intervals.forEach((item, key) => {\n        // If no original tick length delete the entry and continue\n        // To next iteration.\n        if (isNaN(item.og ?? NaN)) return this._intervals.delete(key)\n\n        // Subtract a tick from the countdown\n        item.tick--\n\n        // If tick countdown is more than 0 continue to next itr.\n        if (item.tick > 0) return\n\n        // Otherwise call the callback.\n        item.cb()\n        // Set tick back to og.\n        item.tick = item.og!\n      })\n    })\n    // Tick listener for timeouts.\n    client.on('Tick', () => {\n      // Foreach timeout in the map.\n      this._timeouts.forEach((item, key) => {\n        // Subtract a tick from the countdown\n        item.tick--\n\n        // If tick countdown is more than 0 continue to next itr.\n        if (item.tick > 0) return\n\n        // Otherwise call the callback.\n        item.cb()\n\n        // And remove the timeout.\n        this._timeouts.delete(key)\n      })\n    })\n  }\n\n  /**\n   * Overrides the globalThis interval methods.\n   */\n  protected _polyfillIntervals(): void {\n    // @ts-expect-error Overrides setInterval method on globalThis.\n    globalThis.setInterval = (callback: CallableFunction, tick: number): number => {\n      // Interval id will be the next runtime id.\n      const id = this._runtimeId++\n\n      // Set interval in interval map.\n      this._intervals.set(id, {\n        cb: callback,\n        tick,\n        og: tick,\n      })\n\n      // Return given runtime id.\n      return id\n    }\n\n    // @ts-expect-error Overrides clearInterval method on globalThis.\n    globalThis.clearInterval = (id: number): void => {\n      // Deletes runtime id from interval map.\n      this._intervals.delete(id)\n    }\n  }\n\n  /**\n   * Overrides the globalThis timeout methods.\n   */\n  protected _polyfillTimeouts(): void {\n    // @ts-expect-error Overrides setTimeout method on globalThis.\n    globalThis.setTimeout = (callback: CallableFunction, tick: number): number => {\n      // Timeout id will be the next runtime id.\n      const id = this._runtimeId++\n\n      // Set timeout in the timeout map.\n      this._timeouts.set(id, {\n        cb: callback,\n        tick,\n      })\n\n      // Return given runtime id.\n      return id\n    }\n\n    // @ts-expect-error Overrides clearTimeout method on globalThis.\n    globalThis.clearTimeout = (id: number): void => {\n      // Deletes runtime id from timeout map.\n      this._timeouts.delete(id)\n    }\n  }\n}\n","// Imports\nimport { Client } from './client'\nimport { Timers } from './polyfill/Timers'\n\n// Create original console warn reference.\nconst log = console.warn\n\n// Override Default Console Methods\n// @ts-expect-error Console expects more methods.\n// Gametest only adds warn and error by default we add a few more.\n// TODO: Add formatting support for Objects, Array, Etc.\nglobalThis.console = {\n  /**\n   * Sends a BeAPI log to the content log in-game.\n   * @param {any} message Primary message.\n   * @param {any} optionalParams Optional extra fragments.\n   */\n  log(message: any, ...optionalParams: any[]) {\n    log(`§9[BeAPI]§r  §b[LOG]:§r ${message} ${optionalParams.join(' ')}`)\n  },\n  /**\n   * Sends a BeAPI error log to the content log in-game.\n   * @param {any} message Primary message.\n   * @param {any} optionalParams Optional extra fragments.\n   */\n  error(message: any, ...optionalParams: any[]) {\n    log(`§9[BeAPI]§r  §c[ERROR]:§r ${message} ${optionalParams.join(' ')}`)\n  },\n  /**\n   * Sends a BeAPI warn log to the content log in-game.\n   * @param {any} message Primary message.\n   * @param {any} optionalParams Optional extra fragments.\n   */\n  warn(message: any, ...optionalParams: any[]) {\n    log(`§9[BeAPI]§r  §g[WARN]:§r ${message} ${optionalParams.join(' ')}`)\n  },\n  /**\n   * Sends a BeAPI info log to the content log in-game.\n   * @param {any} message Primary message.\n   * @param {any} optionalParams Optional extra fragments.\n   */\n  info(message: any, ...optionalParams: any[]) {\n    log(`§9[BeAPI]§r  §a[INFO]:§r ${message} ${optionalParams.join(' ')}`)\n  },\n  /**\n   * Sends a BeAPI debug log to the content log in-game.\n   * @param {any} message Primary message.\n   * @param {any} optionalParams Optional extra fragments.\n   */\n  debug(message: any, ...optionalParams: any[]) {\n    log(`§9[BeAPI]§r  §d[DEBUG]:§r ${message} ${optionalParams.join(' ')}`)\n  },\n}\n\n// Initialize Minimal Client With Only Tick Event.\nexport const client = new Client({\n  enableEvents: ['Tick'],\n})\n\n// Create New Timers Util\nconst timers = new Timers()\n\n// Start Timerss\ntimers.start(client)\n","/**\n * Object decorator thats sets predefined class properties\n * prototype to the same value.\n * @param value Value to set\n * @returns\n */\nexport function setProto<T>(value: T) {\n  return <K extends string>(target: Record<K, T>, key: K) => {\n    target[key] = value\n  }\n}\n","// Type imports.\nimport type { Modal } from './Modal'\n\n/**\n * BeAPI database document. Document is the main interaction point\n * for interacting with a specfic piece of stored data.\n *\n * Think of this as a file inside a folder. The folder or rather `Modal`\n * holds a lot of these which all contain the same keys but most likely\n * different values.\n */\n// @ts-expect-error: We Augment Data In\nexport class Document<T extends Record<string, any>> implements T {\n  /**\n   * Protected reference to model.\n   */\n  protected readonly __model__: Modal<T>\n  /**\n   * Protected reference to the docs id.\n   */\n  protected readonly __id__: string\n  /**\n   * Protected reference to the documents knownData.\n   */\n  protected __knownData__: T\n\n  /**\n   * BeAPI database document. Document is the main interaction point\n   * for interacting with a specfic piece of stored data.\n   *\n   * Think of this as a file inside a folder. The folder or rather `Modal`\n   * holds a lot of these which all contain the same keys but most likely\n   * different values.\n   * @param model Documents modal handler.\n   * @param _id Identifier of the document.\n   * @param data Data document holds.\n   */\n  public constructor(model: Modal<T>, _id: string, data: T) {\n    this.__id__ = _id\n    this.__model__ = model\n    this.__knownData__ = data\n    Object.assign(this, data)\n  }\n\n  /**\n   * Retrieves an immutable copy of the data\n   * Minecraft internally remembers since the\n   * last save.\n   * @returns\n   */\n  public retrieveKnownInternalData(): T {\n    return Object.freeze(this.__knownData__)\n  }\n\n  /**\n   * Returns the current document as an object containing the schema properties.\n   * @returns\n   */\n  public asObject(): T {\n    // @ts-expect-error: We Augment Data In\n    return Object.keys(this.__model__.schema.definition)\n      .map((key: keyof T) => ({ [key]: (this as T)[key] }))\n      .reduce(\n        (obj, item) => ({\n          ...obj,\n          ...item,\n        }),\n        {},\n      )\n  }\n\n  /**\n   * Returns a new reference of the documents identifier.\n   * @returns\n   */\n  public getId(): string {\n    return String(this.__id__)\n  }\n\n  /**\n   * Deletes the document from database.\n   */\n  public delete(): void {\n    this.__model__.delete(this.__id__)\n  }\n\n  /**\n   * Saves the document to the database. Should be used anytime after you mutate\n   * the augmented properties on this object.\n   * @returns\n   */\n  public save(): this {\n    this.__model__.sync(this.__id__)\n    this.__knownData__ = this.asObject()\n    return this\n  }\n}\n","import { runCommand, stringToBin } from '../utils'\nimport type { RawData } from '../types'\n\n/**\n * Dedicated namespace for random database utility methods.\n * Namespaces were chosen because they are easy to add on to and look\n * better.\n */\nexport namespace DatabaseUtil {\n  /**\n   * Retrieves all serialized data objects as rawdata.\n   * @param name Modal name.\n   * @returns\n   */\n  export function retrieveSerializedData(name: string): RawData[] {\n    const { statusMessage, err } = runCommand('scoreboard players list')\n    if (err) return []\n    return (statusMessage.match(/<{\\?name=\\w+&id=\\w+&bin=[01 ]+}>/gi) ?? [])\n      .map((i) => DatabaseUtil.fromRaw(i))\n      .filter((i) => i.name === name)\n  }\n  /**\n   * Retrieves all objective names.\n   * @returns\n   */\n  export function retrieveObjectiveNames(): string[] {\n    const { err, statusMessage } = runCommand('scoreboard objectives list')\n    if (err) return []\n    return statusMessage.match(/- (\\w*):/gi)?.map((i) => i.replace(/- |:/g, '')) ?? []\n  }\n  /**\n   * Checks if an objective exists.\n   * @param name Objective name\n   * @returns\n   */\n  export function tableExists(name: string): boolean {\n    return DatabaseUtil.retrieveObjectiveNames().includes(name)\n  }\n\n  /**\n   * Converts raw data into weird xml/url style encoded string we do.\n   * @param name Modal name.\n   * @param id Document id.\n   * @param data Serialized data string.\n   * @returns\n   */\n  export function toRaw(name: string, id: string, data: string): string {\n    return `<{?name=${name}&id=${id}&bin=${stringToBin(data)}}>`\n  }\n\n  /**\n   * Converts weird raw xml/url thing into usable raw data.\n   * @param raw Raw xml/url thing.\n   * @returns\n   */\n  export function fromRaw(raw: string): RawData {\n    if (!/<{\\?name=\\w+&id=\\w+&bin=[01 ]+}>/gi.test(raw)) {\n      throw new Error(`Not a valid collection! ${raw}`)\n    }\n    const mapped = new Map(\n      raw\n        .replace(/<{\\?|}>/g, '')\n        .split('&')\n        .map((i) => i.split('=')) as [string, string][],\n    )\n    const id = mapped.get('id')!\n    const name = mapped.get('name')!\n    const bin = mapped.get('bin')!.trim()\n    return {\n      id,\n      name,\n      bin,\n    }\n  }\n\n  /**\n   * Checks if given name is considered valid by beapi standards.\n   * @param name\n   * @returns\n   */\n  export function validName(name: string): boolean {\n    return !/\\W/.test(name)\n  }\n}\n","// Regular import.\nimport { runCommand, binToString, SafeIds } from '..'\nimport { DatabaseUtil } from './DatabaseUtil'\nimport { Document } from './Document'\n\n// Type imports.\nimport type { Schema } from './Schema'\n\n/**\n * Safe document id generator. No overlaps across instances.\n */\nconst documentIds = new SafeIds(1, 16439399)\n\n/**\n * BeAPI database modal handler. Modal is the main interaction point\n * for handling documents.\n *\n * Think of it as a folder, the schema tells\n * what each file in the folder will hold and the modal allows you to\n * create, edit, delete, and get the files in the folder.\n */\nexport class Modal<T extends Record<string, any>> {\n  /**\n   * Reference to the schematic.\n   */\n  public readonly schema: Schema<T>\n  /**\n   * Name of scoreboard to save documents to.\n   */\n  public readonly scoreboardName: string\n  /**\n   * Name of modal to store documents under.\n   */\n  public readonly name: string\n  /**\n   * Protected storage for docs in memoty\n   */\n  protected documents = new Map<string, Document<T> & T>()\n\n  /**\n   * BeAPI database modal handler. Modal is the main interaction point\n   * for handling documents.\n   *\n   * Think of it as a folder, the schema tells\n   * what each file in the folder will hold and the modal allows you to\n   * create, edit, delete, and get the files in the folder.\n   * @param name Name of modal.\n   * @param schema Constructed schematic.\n   * @param scoreboardName Name of scoreboard to store documents under.\n   */\n  public constructor(name: string, schema: Schema<T>, scoreboardName = 'BeAPI__DATABASE') {\n    // If not valid scoreboard name throw an error.\n    if (!DatabaseUtil.validName(scoreboardName))\n      throw Error(`Invalid Scoreboard Name Format: Letters, Numbers, Underscores!`)\n    // If scoreboard name is more than 16 characters throw error.\n    if (scoreboardName.length > 16) throw Error(`Scoreboard Names May Not Exceed 16 Characters!`)\n    // If invalidd modal name throw new error.\n    if (!DatabaseUtil.validName(name)) throw Error(`Invalid Model Name Format: Letters, Numbers, Underscores!`)\n\n    // Assign arguments to correct properties.\n    this.schema = schema\n    this.name = name\n    this.scoreboardName = scoreboardName\n\n    // Check if table already exists.\n    if (!DatabaseUtil.tableExists(scoreboardName)) {\n      // If not attempt to create a new one.\n      const result = runCommand(`scoreboard objectives add \"${scoreboardName}\" dummy`)\n      // If error throw it.\n      if (result.err) throw new Error(result.statusMessage)\n    }\n\n    // Loop through all raw data retrieved from the scoreboard table.\n    for (const rawdata of DatabaseUtil.retrieveSerializedData(this.name)) {\n      // Attempt to deserialize the data and convert binary to string.\n      const data = this.schema.deserialize(binToString(rawdata.bin))\n      // Set document in current documents.\n      this.documents.set(rawdata.id, new Document(this, rawdata.id, data) as Document<T> & T)\n\n      // If document had old not defined keys on it and needed migration delete from scoreboard\n      // and sync the new data.\n      if (data.__documentNeedsMigrate__) {\n        delete data.__documentNeedsMigrate__\n        const _dataRaw = DatabaseUtil.toRaw(rawdata.name, rawdata.id, rawdata.bin)\n        runCommand(`scoreboard players reset \"${_dataRaw}\" \"${this.scoreboardName}\"`)\n        this.sync(rawdata.id)\n      }\n    }\n  }\n\n  /**\n   * Get all documents in current modal as an array.\n   * @returns\n   */\n  public asArray(): (Document<T> & T)[] {\n    return Array.from(this.documents.values())\n  }\n\n  /**\n   * Attempt to find a document with some partial data.\n   * @param partial Partial data.\n   * @returns\n   */\n  public find(partial: Partial<T>): (Document<T> & T) | undefined {\n    const keys = Object.keys(partial).filter((key) => key !== undefined && key !== null)\n    return this.asArray().find((item) => keys.every((key) => item.asObject()[key] === partial[key]))\n  }\n\n  /**\n   * Attempt to find all documents that match given partial data.\n   * @param partial Partial data.\n   * @returns\n   */\n  public findAll(partial: Partial<T>): (Document<T> & T)[] {\n    const keys = Object.keys(partial).filter((key) => key !== undefined && key !== null)\n    return this.asArray().filter((item) => keys.every((key) => item.asObject()[key] === partial[key]))\n  }\n\n  /**\n   * Write a new document to the modal in database.\n   * @param data Schema data to write.\n   * @returns\n   */\n  public write(data: T): Document<T> & T {\n    const id = documentIds.generate()\n    const document = new Document<T>(this, id, data) as Document<T> & T\n    this.documents.set(id, document)\n\n    return document.save()\n  }\n\n  /**\n   * Write a bulk amount of documents from an array.\n   * @param data Schema data array to write.\n   * @returns\n   */\n  public writeBulk(data: T[]): (Document<T> & T)[] {\n    const docs: (Document<T> & T)[] = []\n    for (const doc of data) {\n      this.write(doc)\n    }\n\n    return docs\n  }\n\n  /**\n   * Deletes all documents in the modal.\n   *\n   * WARNING: this is very dangerous and not reversable!\n   */\n  public deleteAll(): void {\n    for (const document of this.documents.keys()) {\n      this.delete(document)\n    }\n  }\n\n  /**\n   * Deletes a document from modal by its id.\n   * @param _id Id of the document.\n   * @returns\n   */\n  public delete(_id: string): void {\n    const document = this.documents.get(_id)\n    if (!document) return\n    runCommand(\n      `scoreboard players reset \"${DatabaseUtil.toRaw(\n        this.name,\n        _id,\n        this.schema.serialize(document.retrieveKnownInternalData()),\n      )}\" \"${this.scoreboardName}\"`,\n    )\n    this.documents.delete(_id)\n  }\n\n  /**\n   * Syncs a document in memory to persistant storage by its id.\n   * `Document.save()` has the same effect.\n   * @param _id Id of document to save.\n   * @returns\n   */\n  public sync(_id: string): void {\n    const document = this.documents.get(_id)\n    if (!document) return\n    runCommand(\n      `scoreboard players reset \"${DatabaseUtil.toRaw(\n        this.name,\n        _id,\n        this.schema.serialize(document.retrieveKnownInternalData()),\n      )}\" \"${this.scoreboardName}\"`,\n    )\n    const update = runCommand(\n      `scoreboard players add \"${DatabaseUtil.toRaw(this.name, _id, this.schema.serialize(document.asObject()))}\" \"${\n        this.scoreboardName\n      }\" 0`,\n    )\n    if (update.err) throw new Error(update.statusMessage)\n  }\n}\n\n/**\n * Functional way of creating a modal.\n * @param name Name of the modal.\n * @param schema Constructed schematic.\n * @param scoreboardName Name of scorebaord to save under.\n * @returns\n */\nexport function modal<T extends Record<string, any>>(\n  name: string,\n  schema: Schema<T>,\n  scoreboardName = 'BeAPI__DATABASE',\n): Modal<T> {\n  return new Modal<T>(name, schema, scoreboardName)\n}\n","// Type imports.\nimport type { Serialized, Deserialized } from '../types'\n\n// References to global constructors.\nconst StringConstructor = String\nconst NumberConstructor = Number\nconst BooleanConstructor = Boolean\nconst ArrayConstructor = Array\nconst MapConstructor = Map\n\n/**\n * Dedicated namespace to organize different schema field types.\n * Namespaces were chosen because they are easy to add on to and look\n * better.\n */\nexport namespace SchemaTypes {\n  /**\n   * String database schema type. Acts as a pipeline for\n   * serializing and deserializing data.\n   */\n  export class String extends StringConstructor {\n    /**\n     * Pipeline for serializing data before stored.\n     * @param data Data to serialize.\n     * @returns\n     */\n    public static serialize(data: string): Serialized {\n      if (typeof data !== 'string')\n        throw Error(\n          `Passed \"${data}\" To Serializer As Type [string] instead found [${typeof data}]! Refusing to continue...`,\n        )\n      return StringConstructor(data)\n    }\n\n    /**\n     * Pipeline for deserializing data before used.\n     * @param data Data to deserialize.\n     * @returns\n     */\n    public static deserialize(data: string): Deserialized<string> {\n      return StringConstructor(data)\n    }\n  }\n\n  /**\n   * Number database schema type. Acts as a pipeline for\n   * serializing and deserializing data.\n   */\n  export class Number extends NumberConstructor {\n    /**\n     * Pipeline for serializing data before stored.\n     * @param data Data to serialize.\n     * @returns\n     */\n    public static serialize(data: number): Serialized<number> {\n      if (typeof data !== 'number')\n        throw Error(\n          `Passed \"${data}\" To Serializer As Type [number] instead found [${typeof data}]! Refusing to continue...`,\n        )\n      return NumberConstructor(data)\n    }\n\n    /**\n     * Pipeline for deserializing data before used.\n     * @param data Data to deserialize.\n     * @returns\n     */\n    public static deserialize(data: number): Deserialized<number> {\n      return NumberConstructor(data)\n    }\n  }\n\n  /**\n   * Boolean database schema type. Acts as a pipeline for\n   * serializing and deserializing data.\n   */\n  export class Boolean extends BooleanConstructor {\n    /**\n     * Pipeline for serializing data before stored.\n     * @param data Data to serialize.\n     * @returns\n     */\n    public static serialize(data: boolean): Serialized<number> {\n      if (typeof data !== 'boolean')\n        throw Error(\n          `Passed \"${data}\" To Serializer As Type [boolean] instead found [${typeof data}]! Refusing to continue...`,\n        )\n      return NumberConstructor(data ? 1 : 0)\n    }\n\n    /**\n     * Pipeline for deserializing data before used.\n     * @param data Data to deserialize.\n     * @returns\n     */\n    public static deserialize(data: number): Deserialized<boolean> {\n      return BooleanConstructor(data === 1 ? true : false)\n    }\n  }\n\n  /**\n   * Array database schema type. Acts as a pipeline for\n   * serializing and deserializing data.\n   */\n  export class Array extends ArrayConstructor {\n    /**\n     * Pipeline for serializing data before stored.\n     * @param data Data to serialize.\n     * @returns\n     */\n    public static serialize(data: any[]): Serialized {\n      if (!Array.isArray(data))\n        throw Error(\n          `Passed \"${data}\" To Serializer As Type [Array] instead found [${typeof data}]! Refusing to continue...`,\n        )\n      return StringConstructor(JSON.stringify(data))\n    }\n\n    /**\n     * Pipeline for deserializing data before used.\n     * @param data Data to deserialize.\n     * @returns\n     */\n    public static deserialize(data: string): Deserialized<any[]> {\n      return ArrayConstructor(...(JSON.parse(data) as unknown[]))\n    }\n  }\n\n  /**\n   * Map database schema type. Acts as a pipeline for\n   * serializing and deserializing data.\n   */\n  export class Map extends MapConstructor {\n    /**\n     * Pipeline for serializing data before stored.\n     * @param data Data to serialize.\n     * @returns\n     */\n    public static serialize(data: Map): Serialized {\n      if (!(data instanceof Map) && !((data as any) instanceof MapConstructor))\n        throw Error(\n          `Passed \"${data}\" To Serializer As Type [Map] instead found [${typeof data}]! Refusing to continue...`,\n        )\n      return JSON.stringify(Array.from(data.entries()))\n    }\n\n    /**\n     * Pipeline for deserializing data before used.\n     * @param data Data to deserialize.\n     * @returns\n     */\n    public static deserialize(data: string): Deserialized<Map> {\n      return new MapConstructor(JSON.parse(data) as Iterable<[any, any]>)\n    }\n  }\n}\n","// Regular imports.\nimport { entries } from '../utils'\n\n// Type imports.\nimport { SchemaTypes } from './SchemaTypes'\nimport type { Deserialized, Serialized } from '../types'\n\n// Static array of schema type classes.\nconst schemaTypes: typeof SchemaTypes[keyof typeof SchemaTypes][] = []\nfor (const key in SchemaTypes) {\n  if (key) schemaTypes.push(SchemaTypes[key as keyof typeof SchemaTypes])\n}\n\n/**\n * Verifies schema definition has only SchemaTypes as values, nothing else.\n * @param definition\n * @returns\n */\nfunction verifyDefinitionTypes<T extends Record<string, string>>(\n  definition: Record<keyof T, typeof SchemaTypes[keyof typeof SchemaTypes]>,\n): string | undefined {\n  for (const key of Object.keys(definition)) {\n    const Type = definition[key]\n    if (!schemaTypes.includes(Type)) return key\n  }\n}\n\n/**\n * Interface for needs migration header.\n */\ninterface NeedsMigrate {\n  __documentNeedsMigrate__?: boolean\n}\n\n/**\n * BeAPI database schematic builder. Used to create a schematic\n * for the data objects will be holding in the database documents.\n *\n * Think of this as a blueprint for a folder. This is telling us exactly\n * what the files inside can contain.\n */\nexport class Schema<T extends Record<string, any>> {\n  /**\n   * Object schematic definition.\n   */\n  public readonly definition: Record<keyof T, typeof SchemaTypes[keyof typeof SchemaTypes]>\n\n  /**\n   * BeAPI database schematic builder. Used to create a schematic\n   * for the data objects will be holding in the database documents.\n   * @param definition Object schematic definition.\n   */\n  public constructor(definition: Record<keyof T, typeof SchemaTypes[keyof typeof SchemaTypes]>) {\n    const bad = verifyDefinitionTypes(definition)\n    if (bad) throw new Error(`Invalid SchemaType found on key \"${bad}\" when creating schema!`)\n\n    this.definition = definition\n  }\n\n  /**\n   * Serializes object with schematic pipeline to final storage state.\n   * @param data Object schematic to serialize before storage.\n   * @returns\n   */\n  public serialize(data: Deserialized<T>): Serialized {\n    // For each key on the definition iterate.\n    for (const key of Object.keys(this.definition)) {\n      // If given data to serialize does not contain key from definition.\n      // Throw new error.\n      // TODO: redo database to make all fields optional by default\n      if (data[key] === undefined || data[key] === null)\n        throw Error(`Attempted to serialize data that is missing required property \"${key}\". Refusing to continue...`)\n    }\n\n    // Return serialized object JSON string.\n    return JSON.stringify(\n      // Get all entries in the given data as a 2d array.\n      entries<Deserialized<T>>(data)\n        // Map each key and value. Serialzing the value of each\n        // key with the pipeline. This will also functionally\n        // convert the 2d array to a { [key]: serialized_value }[]\n        .map(([key, value]) => {\n          // Get type with key from definition.\n          const Type = this.definition[key]\n\n          // Temporary until below.\n          // if (!Type) throw Error(`Invalid Object Property \"${key}\", Not In Schematic. Refusing to continue...`)\n\n          // If not defined in schema just ignore.\n          // This should not affect anything anywhere because\n          // there are checks in place in Modal.contructor to\n          // ensure rawdata with not defined fields is rewritten\n          // without those fields\n          if (!Type) return {}\n\n          // Return key and value.\n          return { [key]: Type.serialize(value as never) }\n        })\n        // Reduce the array of object into one object.\n        .reduce(\n          (obj, item) => ({\n            ...obj,\n            ...item,\n          }),\n          {},\n        ),\n    )\n  }\n\n  /**\n   * Deserializes stored data by passing it through the schematic pipeline\n   * to undo any serialization done before storage.\n   * @param raw Raw string data.\n   * @returns\n   */\n  public deserialize(raw: Serialized): Deserialized<T & NeedsMigrate> {\n    // Get all entries in the given data as a 2d array.\n    return (\n      entries<Deserialized<T & NeedsMigrate>>(JSON.parse(raw) as Deserialized<T>)\n        // Map each key and value. Deserialzing the value of each\n        // key with the pipeline. This will also functionally\n        // convert the 2d array to a { [key]: deserialized_value }[]\n        .map(([key, value]) => {\n          const Type = this.definition[key]\n\n          // If no type then we have an extra field that needs to be migrated\n          // We will want to add `__documentNeedsMigrate__` header to tell modal\n          // when filling all the persistant data to remove the uneeded fields and\n          // override the last document.\n          if (!Type) return { __documentNeedsMigrate__: true }\n\n          // Return key and value.\n          return { [key]: Type.deserialize(value as never) }\n        })\n        // Reduce the array of object into one object.\n        .reduce(\n          (obj, item) => ({\n            ...obj,\n            ...item,\n          }),\n          {},\n        ) as T & NeedsMigrate\n    )\n  }\n}\n\n/**\n * Functional way of creating a schema.\n * @param definition Object schematic definition.\n * @returns\n */\nexport function schema<T extends Record<string, any>>(\n  definition: Record<keyof T, typeof SchemaTypes[keyof typeof SchemaTypes]>,\n): Schema<T> {\n  return new Schema<T>(definition)\n}\n","/**\n * Agent direction enumable.\n */\nexport enum AgentDirection {\n  forward = 'forward',\n  back = 'back',\n  up = 'up',\n  down = 'down',\n  left = 'left',\n  right = 'right',\n}\n\n/**\n * Agent rotation enumable.\n */\nexport enum AgentRotation {\n  left = 'left',\n  right = 'right',\n}\n","// Initialize the polyfill.\nimport './poly'\n\n// BeAPI exports.\nexport * from './types'\nexport * from './decorators'\nexport * from './database'\nexport * from './agent'\nexport * from './block'\nexport * from './client'\nexport * from './commands'\nexport * from './entity'\nexport * from './events'\nexport * from './forms'\nexport * from './inventory'\nexport * from './item'\nexport * from './player'\nexport * from './polyfill'\nexport * from './utils'\nexport * from './world'\nexport * from './version'\n\n// Circular Mojang exports.\nexport * as Minecraft from 'mojang-minecraft'\nexport * as Gametest from 'mojang-gametest'\n"],"mappings":"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","names":[]}