{
  "schema": 1,
  "project": "ramjet",
  "description": "Machine-readable reference of the ramjet C# plugin API (Mc.Scripting.Api). Generated by docs-site/scripts/gen-api.mjs from the XML docs, reflection metadata and src/scripting/events.json.",
  "site": "/",
  "api": {
    "assembly": "Mc.Scripting.Api",
    "namespace": "Mc.Scripting",
    "targetFramework": "net10.0",
    "abiVersion": 5,
    "eventCatalogue": "src/scripting/events.json"
  },
  "hardRules": [
    "All plugin code runs on the server tick thread; Scheduler.Post is the only thread-safe entry point.",
    "Event handlers receive the event by ref and must not allocate: no LINQ, no string formatting or interpolation on the common path, no closures created per call.",
    "Utf8String / NativeBytes event fields are borrowed for the duration of the dispatch; call ToString()/ToArray() to keep a copy.",
    "Entity is a handle (flecs id), not an object: check IsAlive, never store the ref returned by Get<T>() across calls that can add or remove components or destroy entities.",
    "Component types are plain unmanaged structs owned by exactly one plugin and registered with Ecs.RegisterComponent<T>(key) (plugin.Ecs).",
    "Register everything through the plugin context (Events, Commands, Systems, Scheduler, Ecs, Permissions, ...); it is released automatically on unload and hot reload."
  ],
  "counts": {
    "types": 305,
    "members": 2408,
    "events": 78,
    "documentedMembers": 2301,
    "supplementedMembers": 2,
    "undocumentedMembers": 105
  },
  "categories": [
    {
      "slug": "plugins",
      "label": "Plugins and lifecycle",
      "blurb": "Entry points, metadata, API versions, the per-plugin context and everything that is released on unload."
    },
    {
      "slug": "events",
      "label": "Events (infrastructure)",
      "blurb": "Subscribing, firing, priorities, the event struct contract and the cause/reason enums events carry."
    },
    {
      "slug": "event-types",
      "label": "Event types",
      "blurb": "The event catalogue: one struct per event, generated from src/scripting/events.json."
    },
    {
      "slug": "commands",
      "label": "Commands",
      "blurb": "Command trees, arguments, suggestions and reading an invocation."
    },
    {
      "slug": "permissions",
      "label": "Permissions",
      "blurb": "Permission nodes, defaults, the permission manager and providers."
    },
    {
      "slug": "config",
      "label": "Config and data",
      "blurb": "Typed plugin configuration and the plugin data folder."
    },
    {
      "slug": "services",
      "label": "Services",
      "blurb": "Inter-plugin services and the built-in service contracts (economy, bans, placeholders, player meta)."
    },
    {
      "slug": "players",
      "label": "Players",
      "blurb": "Online and offline players, game modes, effects, sounds, particles and resource packs."
    },
    {
      "slug": "display",
      "label": "Scoreboards, boss bars, tab list",
      "blurb": "Sidebars, objectives, boss bars, titles, the tab list, nametags and the below-name line."
    },
    {
      "slug": "chat",
      "label": "Chat and text",
      "blurb": "Rich text components, chat routing, channels and mutes."
    },
    {
      "slug": "inventories",
      "label": "Inventories and menus",
      "blurb": "Item stacks, player and block inventories, and custom menus."
    },
    {
      "slug": "worlds",
      "label": "Worlds and blocks",
      "blurb": "Dimensions, block states, weather, height maps and chunk tickets."
    },
    {
      "slug": "content",
      "label": "Custom content",
      "blurb": "Custom blocks and items, and the resource pack they are served with."
    },
    {
      "slug": "visuals",
      "label": "Holograms and NPCs",
      "blurb": "Client-side holograms and NPCs."
    },
    {
      "slug": "nbt",
      "label": "NBT",
      "blurb": "NBT tags, binary IO and SNBT."
    },
    {
      "slug": "packets",
      "label": "Packets",
      "blurb": "Observing and intercepting protocol packets."
    },
    {
      "slug": "ecs",
      "label": "Entities, components, queries",
      "blurb": "Entity handles, plain-data components and cached queries over the ECS."
    },
    {
      "slug": "systems",
      "label": "Systems and phases",
      "blurb": "Per-tick systems and where they run in the tick pipeline."
    },
    {
      "slug": "scheduler",
      "label": "Scheduler and threading",
      "blurb": "Delayed, repeating and cross-thread tasks, tick awaitables and the tick-thread check."
    },
    {
      "slug": "server",
      "label": "Server, HTTP and logging",
      "blurb": "Server-wide services, tick timings, outgoing HTTP and logging."
    },
    {
      "slug": "primitives",
      "label": "Primitives",
      "blurb": "Blittable value types shared with the native side."
    }
  ],
  "types": [
    {
      "name": "ApiVersion",
      "fullName": "Mc.Scripting.ApiVersion",
      "namespace": "Mc.Scripting",
      "kind": "struct",
      "category": "plugins",
      "categoryLabel": "Plugins and lifecycle",
      "signature": "public readonly struct ApiVersion : IComparable<ApiVersion>, IEquatable<ApiVersion>",
      "interfaces": [
        "IComparable<ApiVersion>",
        "IEquatable<ApiVersion>"
      ],
      "summary": "The version of the plugin API (semantic: a minor increase is additive, a major increase is breaking).",
      "url": "/reference/api/plugins/apiversion/",
      "members": [
        {
          "name": "ApiVersion",
          "kind": "ctor",
          "signature": "public ApiVersion(int Major, int Minor)",
          "parameters": [
            {
              "name": "Major",
              "type": "int",
              "summary": "Breaking changes."
            },
            {
              "name": "Minor",
              "type": "int",
              "summary": "Additive changes."
            }
          ],
          "summary": "The version of the plugin API (semantic: a minor increase is additive, a major increase is breaking).",
          "documented": true,
          "url": "/reference/api/plugins/apiversion/#constructor"
        },
        {
          "name": "Major",
          "kind": "property",
          "signature": "public int Major { get; init; }",
          "returns": {
            "type": "int"
          },
          "summary": "Breaking changes.",
          "documented": true,
          "url": "/reference/api/plugins/apiversion/#major"
        },
        {
          "name": "Minor",
          "kind": "property",
          "signature": "public int Minor { get; init; }",
          "returns": {
            "type": "int"
          },
          "summary": "Additive changes.",
          "documented": true,
          "url": "/reference/api/plugins/apiversion/#minor"
        },
        {
          "name": "Current",
          "kind": "property",
          "signature": "public static ApiVersion Current { get; }",
          "static": true,
          "returns": {
            "type": "ApiVersion"
          },
          "summary": "The API version this server provides.",
          "documented": true,
          "url": "/reference/api/plugins/apiversion/#current"
        },
        {
          "name": "CompareTo",
          "kind": "method",
          "signature": "public int CompareTo(ApiVersion other)",
          "parameters": [
            {
              "name": "other",
              "type": "ApiVersion"
            }
          ],
          "returns": {
            "type": "int"
          },
          "documented": false,
          "url": "/reference/api/plugins/apiversion/#compareto"
        },
        {
          "name": "Satisfies",
          "kind": "method",
          "signature": "public bool Satisfies(ApiVersion required)",
          "parameters": [
            {
              "name": "required",
              "type": "ApiVersion"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Whether a plugin that needs `required` can run on this server version.",
          "documented": true,
          "url": "/reference/api/plugins/apiversion/#satisfies"
        },
        {
          "name": "ToString",
          "kind": "method",
          "signature": "public override string ToString()",
          "returns": {
            "type": "string"
          },
          "documented": false,
          "url": "/reference/api/plugins/apiversion/#tostring"
        },
        {
          "name": "TryParse",
          "kind": "method",
          "signature": "public static bool TryParse(string? text, out ApiVersion version)",
          "static": true,
          "parameters": [
            {
              "name": "text",
              "type": "string?",
              "summary": "The text."
            },
            {
              "name": "version",
              "type": "ApiVersion",
              "modifier": "out",
              "summary": "The result."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when the text is a valid version."
          },
          "summary": "Parses \"1.0\", \"1\" or \"1.x\".",
          "documented": true,
          "url": "/reference/api/plugins/apiversion/#tryparse"
        }
      ]
    },
    {
      "name": "Belowname",
      "fullName": "Mc.Scripting.Belowname",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "display",
      "categoryLabel": "Scoreboards, boss bars, tab list",
      "signature": "public sealed class Belowname",
      "summary": "Text (and optionally a number) shown under a player's name, per viewer. It uses the engine's below-name objective, which is defined while a player has one. Reach it as `plugin.Belowname`. Call from the tick thread. What a plugin sets is removed when the plugin unloads.",
      "url": "/reference/api/display/belowname/",
      "members": [
        {
          "name": "Clear",
          "kind": "method",
          "signature": "public void Clear(Player viewer, Player target)",
          "parameters": [
            {
              "name": "viewer",
              "type": "Player",
              "summary": "The player who sees it."
            },
            {
              "name": "target",
              "type": "Player",
              "summary": "The player whose name it was under."
            }
          ],
          "summary": "Removes the text under one player's name for one viewer.",
          "documented": true,
          "url": "/reference/api/display/belowname/#clear"
        },
        {
          "name": "Set",
          "kind": "method",
          "signature": "public void Set(Player viewer, Player target, Component text, int? number)",
          "parameters": [
            {
              "name": "viewer",
              "type": "Player",
              "summary": "The player who sees it."
            },
            {
              "name": "target",
              "type": "Player",
              "summary": "The player whose name it is under."
            },
            {
              "name": "text",
              "type": "Component",
              "summary": "The text."
            },
            {
              "name": "number",
              "type": "int?",
              "summary": "The number shown after the text, or null to hide it."
            }
          ],
          "summary": "Shows text under one player's name for one viewer, with a number when given (hidden when null).",
          "documented": true,
          "url": "/reference/api/display/belowname/#set"
        }
      ]
    },
    {
      "name": "BlockFace",
      "fullName": "Mc.Scripting.BlockFace",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "worlds",
      "categoryLabel": "Worlds and blocks",
      "signature": "public enum BlockFace : byte",
      "summary": "A block face / direction (vanilla Direction order).",
      "url": "/reference/api/worlds/blockface/",
      "members": [
        {
          "name": "Down",
          "kind": "enumMember",
          "signature": "Down = 0",
          "value": "0",
          "summary": "Negative Y.",
          "documented": true,
          "url": "/reference/api/worlds/blockface/#down"
        },
        {
          "name": "Up",
          "kind": "enumMember",
          "signature": "Up = 1",
          "value": "1",
          "summary": "Positive Y.",
          "documented": true,
          "url": "/reference/api/worlds/blockface/#up"
        },
        {
          "name": "North",
          "kind": "enumMember",
          "signature": "North = 2",
          "value": "2",
          "summary": "Negative Z.",
          "documented": true,
          "url": "/reference/api/worlds/blockface/#north"
        },
        {
          "name": "South",
          "kind": "enumMember",
          "signature": "South = 3",
          "value": "3",
          "summary": "Positive Z.",
          "documented": true,
          "url": "/reference/api/worlds/blockface/#south"
        },
        {
          "name": "West",
          "kind": "enumMember",
          "signature": "West = 4",
          "value": "4",
          "summary": "Negative X.",
          "documented": true,
          "url": "/reference/api/worlds/blockface/#west"
        },
        {
          "name": "East",
          "kind": "enumMember",
          "signature": "East = 5",
          "value": "5",
          "summary": "Positive X.",
          "documented": true,
          "url": "/reference/api/worlds/blockface/#east"
        }
      ]
    },
    {
      "name": "BlockPos",
      "fullName": "Mc.Scripting.BlockPos",
      "namespace": "Mc.Scripting",
      "kind": "struct",
      "category": "primitives",
      "categoryLabel": "Primitives",
      "signature": "public struct BlockPos : IEquatable<BlockPos>",
      "interfaces": [
        "IEquatable<BlockPos>"
      ],
      "summary": "Integer block coordinates.",
      "url": "/reference/api/primitives/blockpos/",
      "members": [
        {
          "name": "BlockPos",
          "kind": "ctor",
          "signature": "public BlockPos(int x, int y, int z)",
          "parameters": [
            {
              "name": "x",
              "type": "int"
            },
            {
              "name": "y",
              "type": "int"
            },
            {
              "name": "z",
              "type": "int"
            }
          ],
          "summary": "Creates a block position.",
          "documented": true,
          "url": "/reference/api/primitives/blockpos/#constructor"
        },
        {
          "name": "X",
          "kind": "field",
          "signature": "public int X;",
          "returns": {
            "type": "int"
          },
          "summary": "Components.",
          "documented": true,
          "url": "/reference/api/primitives/blockpos/#x"
        },
        {
          "name": "Y",
          "kind": "field",
          "signature": "public int Y;",
          "returns": {
            "type": "int"
          },
          "summary": "Components.",
          "documented": true,
          "url": "/reference/api/primitives/blockpos/#y"
        },
        {
          "name": "Z",
          "kind": "field",
          "signature": "public int Z;",
          "returns": {
            "type": "int"
          },
          "summary": "Components.",
          "documented": true,
          "url": "/reference/api/primitives/blockpos/#z"
        },
        {
          "name": "Equals",
          "kind": "method",
          "signature": "public bool Equals(BlockPos o)",
          "parameters": [
            {
              "name": "o",
              "type": "BlockPos"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Equality.",
          "documented": true,
          "url": "/reference/api/primitives/blockpos/#equals"
        },
        {
          "name": "Equals",
          "kind": "method",
          "signature": "public override bool Equals(object? obj)",
          "parameters": [
            {
              "name": "obj",
              "type": "object?"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Equality.",
          "documented": true,
          "url": "/reference/api/primitives/blockpos/#equals-1"
        },
        {
          "name": "GetHashCode",
          "kind": "method",
          "signature": "public override int GetHashCode()",
          "returns": {
            "type": "int"
          },
          "summary": "Hash code.",
          "documented": true,
          "url": "/reference/api/primitives/blockpos/#gethashcode"
        },
        {
          "name": "ToString",
          "kind": "method",
          "signature": "public override string ToString()",
          "returns": {
            "type": "string"
          },
          "summary": "Text form.",
          "documented": true,
          "url": "/reference/api/primitives/blockpos/#tostring"
        }
      ]
    },
    {
      "name": "BossBar",
      "fullName": "Mc.Scripting.BossBar",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "display",
      "categoryLabel": "Scoreboards, boss bars, tab list",
      "signature": "public sealed class BossBar : IDisposable, IPluginResource",
      "interfaces": [
        "IDisposable",
        "IPluginResource"
      ],
      "summary": "A boss bar at the top of the screen, shown to the players who were added as viewers. Create it with `BossBars.Create`; it disappears from every viewer when the plugin unloads (or when `BossBar.Remove` is called). Bars are not saved with the world.",
      "url": "/reference/api/display/bossbar/",
      "members": [
        {
          "name": "Color",
          "kind": "property",
          "signature": "public BossBarColor Color { get; set; }",
          "returns": {
            "type": "BossBarColor"
          },
          "summary": "The colour.",
          "documented": true,
          "url": "/reference/api/display/bossbar/#color"
        },
        {
          "name": "Flags",
          "kind": "property",
          "signature": "public BossBarFlags Flags { get; set; }",
          "returns": {
            "type": "BossBarFlags"
          },
          "summary": "Darkening, music and fog.",
          "documented": true,
          "url": "/reference/api/display/bossbar/#flags"
        },
        {
          "name": "IsActive",
          "kind": "property",
          "signature": "public bool IsActive { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the bar still exists (false after `BossBar.Remove` or the plugin unloading).",
          "documented": true,
          "url": "/reference/api/display/bossbar/#isactive"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public string Key { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The full key of the bar (\"pluginid:name\"); also its id in `/bossbar`.",
          "documented": true,
          "url": "/reference/api/display/bossbar/#key"
        },
        {
          "name": "Progress",
          "kind": "property",
          "signature": "public float Progress { get; set; }",
          "returns": {
            "type": "float"
          },
          "summary": "How full the bar is, 0..1.",
          "documented": true,
          "url": "/reference/api/display/bossbar/#progress"
        },
        {
          "name": "Style",
          "kind": "property",
          "signature": "public BossBarStyle Style { get; set; }",
          "returns": {
            "type": "BossBarStyle"
          },
          "summary": "The segmentation.",
          "documented": true,
          "url": "/reference/api/display/bossbar/#style"
        },
        {
          "name": "Title",
          "kind": "property",
          "signature": "public Component Title { get; set; }",
          "returns": {
            "type": "Component"
          },
          "summary": "The text above the bar.",
          "documented": true,
          "url": "/reference/api/display/bossbar/#title"
        },
        {
          "name": "Viewers",
          "kind": "property",
          "signature": "public IReadOnlyCollection<Uuid> Viewers { get; }",
          "returns": {
            "type": "IReadOnlyCollection<Uuid>"
          },
          "summary": "The profile ids of the players who see (or will see, when they join) the bar.",
          "documented": true,
          "url": "/reference/api/display/bossbar/#viewers"
        },
        {
          "name": "Visible",
          "kind": "property",
          "signature": "public bool Visible { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the viewers currently see the bar (hiding keeps the viewer list).",
          "documented": true,
          "url": "/reference/api/display/bossbar/#visible"
        },
        {
          "name": "AddViewer",
          "kind": "method",
          "signature": "public BossBar AddViewer(Player player)",
          "parameters": [
            {
              "name": "player",
              "type": "Player",
              "summary": "The player."
            }
          ],
          "returns": {
            "type": "BossBar",
            "summary": "This bar."
          },
          "summary": "Shows the bar to a player until `BossBar.RemoveViewer` or until the player leaves the server.",
          "documented": true,
          "url": "/reference/api/display/bossbar/#addviewer"
        },
        {
          "name": "AddViewer",
          "kind": "method",
          "signature": "public BossBar AddViewer(Uuid player)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The profile id."
            }
          ],
          "returns": {
            "type": "BossBar",
            "summary": "This bar."
          },
          "summary": "Shows the bar to a player (by profile id, also an offline one: the bar appears when he joins).",
          "documented": true,
          "url": "/reference/api/display/bossbar/#addviewer-1"
        },
        {
          "name": "Dispose",
          "kind": "method",
          "signature": "public void Dispose()",
          "documented": false,
          "url": "/reference/api/display/bossbar/#dispose"
        },
        {
          "name": "Remove",
          "kind": "method",
          "signature": "public void Remove()",
          "summary": "Removes the bar from every viewer and deletes it.",
          "documented": true,
          "url": "/reference/api/display/bossbar/#remove"
        },
        {
          "name": "RemoveViewer",
          "kind": "method",
          "signature": "public BossBar RemoveViewer(Player player)",
          "parameters": [
            {
              "name": "player",
              "type": "Player",
              "summary": "The player."
            }
          ],
          "returns": {
            "type": "BossBar",
            "summary": "This bar."
          },
          "summary": "Hides the bar from a player.",
          "documented": true,
          "url": "/reference/api/display/bossbar/#removeviewer"
        },
        {
          "name": "RemoveViewer",
          "kind": "method",
          "signature": "public BossBar RemoveViewer(Uuid player)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The profile id."
            }
          ],
          "returns": {
            "type": "BossBar",
            "summary": "This bar."
          },
          "summary": "Hides the bar from a player (by profile id).",
          "documented": true,
          "url": "/reference/api/display/bossbar/#removeviewer-1"
        }
      ]
    },
    {
      "name": "BossBarColor",
      "fullName": "Mc.Scripting.BossBarColor",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "display",
      "categoryLabel": "Scoreboards, boss bars, tab list",
      "signature": "public enum BossBarColor : int",
      "summary": "The colour of a boss bar.",
      "url": "/reference/api/display/bossbarcolor/",
      "members": [
        {
          "name": "Pink",
          "kind": "enumMember",
          "signature": "Pink = 0",
          "value": "0",
          "summary": "Pink.",
          "documented": true,
          "url": "/reference/api/display/bossbarcolor/#pink"
        },
        {
          "name": "Blue",
          "kind": "enumMember",
          "signature": "Blue = 1",
          "value": "1",
          "summary": "Blue.",
          "documented": true,
          "url": "/reference/api/display/bossbarcolor/#blue"
        },
        {
          "name": "Red",
          "kind": "enumMember",
          "signature": "Red = 2",
          "value": "2",
          "summary": "Red.",
          "documented": true,
          "url": "/reference/api/display/bossbarcolor/#red"
        },
        {
          "name": "Green",
          "kind": "enumMember",
          "signature": "Green = 3",
          "value": "3",
          "summary": "Green.",
          "documented": true,
          "url": "/reference/api/display/bossbarcolor/#green"
        },
        {
          "name": "Yellow",
          "kind": "enumMember",
          "signature": "Yellow = 4",
          "value": "4",
          "summary": "Yellow.",
          "documented": true,
          "url": "/reference/api/display/bossbarcolor/#yellow"
        },
        {
          "name": "Purple",
          "kind": "enumMember",
          "signature": "Purple = 5",
          "value": "5",
          "summary": "Purple.",
          "documented": true,
          "url": "/reference/api/display/bossbarcolor/#purple"
        },
        {
          "name": "White",
          "kind": "enumMember",
          "signature": "White = 6",
          "value": "6",
          "summary": "White.",
          "documented": true,
          "url": "/reference/api/display/bossbarcolor/#white"
        }
      ]
    },
    {
      "name": "BossBarFlags",
      "fullName": "Mc.Scripting.BossBarFlags",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "display",
      "categoryLabel": "Scoreboards, boss bars, tab list",
      "signature": "public enum BossBarFlags : int",
      "summary": "Extra behaviour of a boss bar.",
      "url": "/reference/api/display/bossbarflags/",
      "members": [
        {
          "name": "None",
          "kind": "enumMember",
          "signature": "None = 0",
          "value": "0",
          "summary": "Nothing special.",
          "documented": true,
          "url": "/reference/api/display/bossbarflags/#none"
        },
        {
          "name": "DarkenScreen",
          "kind": "enumMember",
          "signature": "DarkenScreen = 1",
          "value": "1",
          "summary": "Darkens the sky.",
          "documented": true,
          "url": "/reference/api/display/bossbarflags/#darkenscreen"
        },
        {
          "name": "PlayMusic",
          "kind": "enumMember",
          "signature": "PlayMusic = 2",
          "value": "2",
          "summary": "Plays the boss music.",
          "documented": true,
          "url": "/reference/api/display/bossbarflags/#playmusic"
        },
        {
          "name": "CreateFog",
          "kind": "enumMember",
          "signature": "CreateFog = 4",
          "value": "4",
          "summary": "Creates fog.",
          "documented": true,
          "url": "/reference/api/display/bossbarflags/#createfog"
        }
      ]
    },
    {
      "name": "BossBarStyle",
      "fullName": "Mc.Scripting.BossBarStyle",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "display",
      "categoryLabel": "Scoreboards, boss bars, tab list",
      "signature": "public enum BossBarStyle : int",
      "summary": "How a boss bar is divided.",
      "url": "/reference/api/display/bossbarstyle/",
      "members": [
        {
          "name": "Solid",
          "kind": "enumMember",
          "signature": "Solid = 0",
          "value": "0",
          "summary": "A plain bar.",
          "documented": true,
          "url": "/reference/api/display/bossbarstyle/#solid"
        },
        {
          "name": "Segmented6",
          "kind": "enumMember",
          "signature": "Segmented6 = 1",
          "value": "1",
          "summary": "Six segments.",
          "documented": true,
          "url": "/reference/api/display/bossbarstyle/#segmented6"
        },
        {
          "name": "Segmented10",
          "kind": "enumMember",
          "signature": "Segmented10 = 2",
          "value": "2",
          "summary": "Ten segments.",
          "documented": true,
          "url": "/reference/api/display/bossbarstyle/#segmented10"
        },
        {
          "name": "Segmented12",
          "kind": "enumMember",
          "signature": "Segmented12 = 3",
          "value": "3",
          "summary": "Twelve segments.",
          "documented": true,
          "url": "/reference/api/display/bossbarstyle/#segmented12"
        },
        {
          "name": "Segmented20",
          "kind": "enumMember",
          "signature": "Segmented20 = 4",
          "value": "4",
          "summary": "Twenty segments.",
          "documented": true,
          "url": "/reference/api/display/bossbarstyle/#segmented20"
        }
      ]
    },
    {
      "name": "BossBars",
      "fullName": "Mc.Scripting.BossBars",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "display",
      "categoryLabel": "Scoreboards, boss bars, tab list",
      "signature": "public sealed class BossBars",
      "summary": "Creates boss bars owned by a plugin (`plugin.BossBars`).",
      "url": "/reference/api/display/bossbars/",
      "members": [
        {
          "name": "Create",
          "kind": "method",
          "signature": "public BossBar Create(string name, Component title, BossBarColor color = BossBarColor.Pink, BossBarStyle style = BossBarStyle.Solid, float progress = 1f)",
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "A name unique within the plugin (letters, digits, `_ - . /`); the bar's key becomes \"pluginid:name\"."
            },
            {
              "name": "title",
              "type": "Component",
              "summary": "The text above the bar."
            },
            {
              "name": "color",
              "type": "BossBarColor",
              "default": "BossBarColor.Pink",
              "summary": "The colour."
            },
            {
              "name": "style",
              "type": "BossBarStyle",
              "default": "BossBarStyle.Solid",
              "summary": "The segmentation."
            },
            {
              "name": "progress",
              "type": "float",
              "default": "1f",
              "summary": "How full the bar is, 0..1."
            }
          ],
          "returns": {
            "type": "BossBar",
            "summary": "The bar."
          },
          "summary": "Creates a boss bar with nobody watching; add viewers to show it.",
          "throws": [
            {
              "type": "System.InvalidOperationException",
              "summary": "A bar with this name already exists."
            }
          ],
          "documented": true,
          "url": "/reference/api/display/bossbars/#create"
        }
      ]
    },
    {
      "name": "ChannelRegistry",
      "fullName": "Mc.Scripting.ChannelRegistry",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "chat",
      "categoryLabel": "Chat and text",
      "signature": "public sealed class ChannelRegistry",
      "summary": "Plugin messaging channels (Paper's Messenger, sendPluginMessage). `ChannelRegistry.On` listens on a channel: the messages that the clients send on it arrive in the handler. The engine tells the clients which channels are listened on (minecraft:register). Send with {{cref:M:Mc.Scripting.Player.SendPluginMessage(System.String,System.ReadOnlySpan{System.Byte})}}.",
      "remarks": "Refused: the minecraft:* channels (a client's own registrations are read through `Player.Channels`), velocity:* and bungeecord:*. Messages arrive in the tick window, in order per player, within the budgets of scripting.channels (a message beyond them is dropped). A listener ends with its plugin (unload or reload). Tick thread only. The worker delivers the messages; the in-process runtime does not.",
      "url": "/reference/api/chat/channelregistry/",
      "members": [
        {
          "name": "On",
          "kind": "method",
          "signature": "public ChannelSubscription On(string channel, PluginMessageHandler handler)",
          "parameters": [
            {
              "name": "channel",
              "type": "string",
              "summary": "A channel id, namespace:path (for example \"myplugin:sync\")."
            },
            {
              "name": "handler",
              "type": "PluginMessageHandler",
              "summary": "Gets the player who sent the message and its bytes."
            }
          ],
          "returns": {
            "type": "ChannelSubscription",
            "summary": "The subscription; dispose it to stop listening."
          },
          "summary": "Listens on a channel. The first listener of a channel makes the engine announce it to the clients (minecraft:register).",
          "throws": [
            {
              "type": "System.ArgumentException",
              "summary": "The channel is not a valid id, or it is reserved."
            },
            {
              "type": "System.InvalidOperationException",
              "summary": "The engine already listens on too many channels."
            }
          ],
          "documented": true,
          "url": "/reference/api/chat/channelregistry/#on"
        }
      ]
    },
    {
      "name": "ChannelSubscription",
      "fullName": "Mc.Scripting.ChannelSubscription",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "chat",
      "categoryLabel": "Chat and text",
      "signature": "public sealed class ChannelSubscription : IDisposable, IPluginResource",
      "interfaces": [
        "IDisposable",
        "IPluginResource"
      ],
      "summary": "A listener on a plugin messaging channel (`ChannelRegistry.On`). Dispose it to stop listening.",
      "url": "/reference/api/chat/channelsubscription/",
      "members": [
        {
          "name": "Channel",
          "kind": "property",
          "signature": "public string Channel { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The channel the subscription listens on.",
          "documented": true,
          "url": "/reference/api/chat/channelsubscription/#channel"
        },
        {
          "name": "IsActive",
          "kind": "property",
          "signature": "public bool IsActive { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the subscription still listens (false after Dispose).",
          "documented": true,
          "url": "/reference/api/chat/channelsubscription/#isactive"
        },
        {
          "name": "Dispose",
          "kind": "method",
          "signature": "public void Dispose()",
          "summary": "Stops listening. When it was the last listener of its channel, the engine stops announcing the channel to the clients.",
          "documented": true,
          "url": "/reference/api/chat/channelsubscription/#dispose"
        }
      ]
    },
    {
      "name": "Chat",
      "fullName": "Mc.Scripting.Chat",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "chat",
      "categoryLabel": "Chat and text",
      "signature": "public static class Chat",
      "summary": "Chat lines that no player signed: the disguised chat the console's `/say` sends. The chat type picks the vanilla format and the name and message are shown in it. Use it for lines that are not a player's own words (a notice in a staff channel, a relayed message). The line is unsigned and has no signature marker, so it is never shown as a player's verified chat; for a player's own words use the chat event instead.",
      "url": "/reference/api/chat/chat/",
      "members": [
        {
          "name": "SendTo",
          "kind": "method",
          "signature": "public static int SendTo(IEnumerable<Player> recipients, ChatKind kind, Component name, Component? target, Component message)",
          "static": true,
          "parameters": [
            {
              "name": "recipients",
              "type": "IEnumerable<Player>",
              "summary": "The players who get the line (at most 4096). Offline handles are left out."
            },
            {
              "name": "kind",
              "type": "ChatKind",
              "summary": "The chat type of the line."
            },
            {
              "name": "name",
              "type": "Component",
              "summary": "The sender name shown in the line."
            },
            {
              "name": "target",
              "type": "Component?",
              "summary": "The second name for a message kind; null for the others."
            },
            {
              "name": "message",
              "type": "Component",
              "summary": "The text of the line."
            }
          ],
          "returns": {
            "type": "int",
            "summary": "The number of players the line reached; -1 when the engine refuses the call (a missing target for a message kind, an unknown kind)."
          },
          "summary": "Sends an unsigned chat line to some players. The line is formatted from `kind` and `name` (the sender's name as the line shows it) and `message`. The message kinds (`ChatKind.MsgCommandIncoming`, `ChatKind.MsgCommandOutgoing`, `ChatKind.TeamMsgCommandIncoming`, `ChatKind.TeamMsgCommandOutgoing`) need `target` (the other side's name, as the vanilla format shows it); without one the call returns -1. Players who do not accept chat are skipped.",
          "throws": [
            {
              "type": "System.ArgumentException",
              "summary": "More than 4096 recipients. Nothing is sent to the engine."
            }
          ],
          "documented": true,
          "url": "/reference/api/chat/chat/#sendto"
        }
      ]
    },
    {
      "name": "ChatFilterKind",
      "fullName": "Mc.Scripting.ChatFilterKind",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "chat",
      "categoryLabel": "Chat and text",
      "signature": "public enum ChatFilterKind : byte",
      "summary": "How the recipients who filter text see a chat message (vanilla FilterMask).",
      "url": "/reference/api/chat/chatfilterkind/",
      "members": [
        {
          "name": "PassThrough",
          "kind": "enumMember",
          "signature": "PassThrough = 0",
          "value": "0",
          "summary": "The text as typed.",
          "documented": true,
          "url": "/reference/api/chat/chatfilterkind/#passthrough"
        },
        {
          "name": "FullyFiltered",
          "kind": "enumMember",
          "signature": "FullyFiltered = 1",
          "value": "1",
          "summary": "Filtering recipients get nothing of the message.",
          "documented": true,
          "url": "/reference/api/chat/chatfilterkind/#fullyfiltered"
        },
        {
          "name": "PartiallyFiltered",
          "kind": "enumMember",
          "signature": "PartiallyFiltered = 2",
          "value": "2",
          "summary": "Filtering recipients see the text with the characters of filter_bits hidden.",
          "documented": true,
          "url": "/reference/api/chat/chatfilterkind/#partiallyfiltered"
        }
      ]
    },
    {
      "name": "ChatKind",
      "fullName": "Mc.Scripting.ChatKind",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "chat",
      "categoryLabel": "Chat and text",
      "signature": "public enum ChatKind : byte",
      "summary": "The chat type of a line: the vanilla minecraft:chat_type entries the server uses.",
      "url": "/reference/api/chat/chatkind/",
      "members": [
        {
          "name": "Chat",
          "kind": "enumMember",
          "signature": "Chat = 0",
          "value": "0",
          "summary": "A player's chat line (minecraft:chat).",
          "documented": true,
          "url": "/reference/api/chat/chatkind/#chat"
        },
        {
          "name": "EmoteCommand",
          "kind": "enumMember",
          "signature": "EmoteCommand = 1",
          "value": "1",
          "summary": "The /me line (minecraft:emote_command).",
          "documented": true,
          "url": "/reference/api/chat/chatkind/#emotecommand"
        },
        {
          "name": "SayCommand",
          "kind": "enumMember",
          "signature": "SayCommand = 2",
          "value": "2",
          "summary": "The /say line (minecraft:say_command).",
          "documented": true,
          "url": "/reference/api/chat/chatkind/#saycommand"
        },
        {
          "name": "MsgCommandIncoming",
          "kind": "enumMember",
          "signature": "MsgCommandIncoming = 3",
          "value": "3",
          "summary": "A private message received (minecraft:msg_command_incoming). Needs a target.",
          "documented": true,
          "url": "/reference/api/chat/chatkind/#msgcommandincoming"
        },
        {
          "name": "MsgCommandOutgoing",
          "kind": "enumMember",
          "signature": "MsgCommandOutgoing = 4",
          "value": "4",
          "summary": "A private message sent (minecraft:msg_command_outgoing). Needs a target.",
          "documented": true,
          "url": "/reference/api/chat/chatkind/#msgcommandoutgoing"
        },
        {
          "name": "TeamMsgCommandIncoming",
          "kind": "enumMember",
          "signature": "TeamMsgCommandIncoming = 5",
          "value": "5",
          "summary": "A team message received (minecraft:team_msg_command_incoming). Needs a target.",
          "documented": true,
          "url": "/reference/api/chat/chatkind/#teammsgcommandincoming"
        },
        {
          "name": "TeamMsgCommandOutgoing",
          "kind": "enumMember",
          "signature": "TeamMsgCommandOutgoing = 6",
          "value": "6",
          "summary": "A team message sent (minecraft:team_msg_command_outgoing). Needs a target.",
          "documented": true,
          "url": "/reference/api/chat/chatkind/#teammsgcommandoutgoing"
        }
      ]
    },
    {
      "name": "ChatMute",
      "fullName": "Mc.Scripting.ChatMute",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "chat",
      "categoryLabel": "Chat and text",
      "signature": "public static class ChatMute",
      "summary": "Chat mutes. The engine keeps the mute table itself (it survives plugin reloads and server restarts) and refuses a muted player's chat lines, `/say`, `/me` and private messages before a plugin sees them, so a plugin does not check mutes on the message path. Commands and other actions are not affected. The reason is what the engine's mute notice (`chat.mute_notice`) can show the player. Thread: tick thread.",
      "url": "/reference/api/chat/chatmute/",
      "members": [
        {
          "name": "Clear",
          "kind": "method",
          "signature": "public static bool Clear(Uuid player)",
          "static": true,
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player's profile id."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when there was a mute."
          },
          "summary": "Lifts a player's chat mute.",
          "documented": true,
          "url": "/reference/api/chat/chatmute/#clear"
        },
        {
          "name": "Get",
          "kind": "method",
          "signature": "public static ChatMuteEntry? Get(Uuid player)",
          "static": true,
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player's profile id."
            }
          ],
          "returns": {
            "type": "ChatMuteEntry?",
            "summary": "The mute, or null."
          },
          "summary": "The player's active chat mute, null when the player is not muted (an expired mute is not active).",
          "documented": true,
          "url": "/reference/api/chat/chatmute/#get"
        },
        {
          "name": "List",
          "kind": "method",
          "signature": "public static IReadOnlyList<ChatMuteEntry> List()",
          "static": true,
          "returns": {
            "type": "IReadOnlyList<ChatMuteEntry>",
            "summary": "The mutes."
          },
          "summary": "All active chat mutes, in profile id order: a snapshot, read from the engine in pages when this is called.",
          "documented": true,
          "url": "/reference/api/chat/chatmute/#list"
        },
        {
          "name": "Set",
          "kind": "method",
          "signature": "public static bool Set(Uuid player, DateTimeOffset? expires, string? reason)",
          "static": true,
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player's profile id."
            },
            {
              "name": "expires",
              "type": "DateTimeOffset?",
              "summary": "When the mute ends; null = forever."
            },
            {
              "name": "reason",
              "type": "string?",
              "summary": "The reason, at most 256 UTF-8 bytes; null or empty for none."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when the table changed."
          },
          "summary": "Mutes a player's chat. A mute already in force is replaced by this one; the same mute again changes nothing.",
          "throws": [
            {
              "type": "System.ArgumentException",
              "summary": "The expiry is not in the future, or the reason is longer than 256 UTF-8 bytes. Nothing is changed."
            }
          ],
          "documented": true,
          "url": "/reference/api/chat/chatmute/#set"
        }
      ]
    },
    {
      "name": "ChatMuteEntry",
      "fullName": "Mc.Scripting.ChatMuteEntry",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "chat",
      "categoryLabel": "Chat and text",
      "signature": "public sealed class ChatMuteEntry : IEquatable<ChatMuteEntry>",
      "interfaces": [
        "IEquatable<ChatMuteEntry>"
      ],
      "summary": "An active chat mute: the muted player, when the mute ends and the reason it was given.",
      "url": "/reference/api/chat/chatmuteentry/",
      "members": [
        {
          "name": "ChatMuteEntry",
          "kind": "ctor",
          "signature": "public ChatMuteEntry(Uuid Player, DateTimeOffset? Expires, string? Reason)",
          "parameters": [
            {
              "name": "Player",
              "type": "Uuid",
              "summary": "The muted player's profile id."
            },
            {
              "name": "Expires",
              "type": "DateTimeOffset?",
              "summary": "When the mute ends; null = forever."
            },
            {
              "name": "Reason",
              "type": "string?",
              "summary": "The reason the mute was given; null when none."
            }
          ],
          "summary": "An active chat mute: the muted player, when the mute ends and the reason it was given.",
          "documented": true,
          "url": "/reference/api/chat/chatmuteentry/#constructor"
        },
        {
          "name": "Expires",
          "kind": "property",
          "signature": "public DateTimeOffset? Expires { get; init; }",
          "returns": {
            "type": "DateTimeOffset?"
          },
          "summary": "When the mute ends; null = forever.",
          "documented": true,
          "url": "/reference/api/chat/chatmuteentry/#expires"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Uuid Player { get; init; }",
          "returns": {
            "type": "Uuid"
          },
          "summary": "The muted player's profile id.",
          "documented": true,
          "url": "/reference/api/chat/chatmuteentry/#player"
        },
        {
          "name": "Reason",
          "kind": "property",
          "signature": "public string? Reason { get; init; }",
          "returns": {
            "type": "string?"
          },
          "summary": "The reason the mute was given; null when none.",
          "documented": true,
          "url": "/reference/api/chat/chatmuteentry/#reason"
        }
      ]
    },
    {
      "name": "ChatRoute",
      "fullName": "Mc.Scripting.ChatRoute",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "chat",
      "categoryLabel": "Chat and text",
      "signature": "public static class ChatRoute",
      "summary": "Restricts who gets a chat message while its handler runs. Signed chat stays signed: a restricted line is sent to the listed players only, as the engine's own private messages are.",
      "url": "/reference/api/chat/chatroute/",
      "members": [
        {
          "name": "Restrict",
          "kind": "method",
          "signature": "public static int Restrict(IEnumerable<Player> recipients)",
          "static": true,
          "parameters": [
            {
              "name": "recipients",
              "type": "IEnumerable<Player>",
              "summary": "The players who get the message (at most 4096)."
            }
          ],
          "returns": {
            "type": "int",
            "summary": "The number of distinct recipients kept; -1 when no PlayerChat or PrivateMessage handler is running, or when the engine refuses the list."
          },
          "summary": "Restricts the recipients of the chat message of the running handler. Only the listed players get the line. Works in a `PlayerChatEvent` or a `PrivateMessageEvent` handler; the restriction applies to that one message only and ends when the dispatch is over. A second call replaces the list. An empty list means nobody gets the line. Offline handles are left out.",
          "throws": [
            {
              "type": "System.ArgumentException",
              "summary": "More than 4096 recipients. Nothing is sent to the engine."
            }
          ],
          "documented": true,
          "url": "/reference/api/chat/chatroute/#restrict"
        }
      ]
    },
    {
      "name": "ClickType",
      "fullName": "Mc.Scripting.ClickType",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "inventories",
      "categoryLabel": "Inventories and menus",
      "signature": "public enum ClickType : byte",
      "summary": "How an inventory slot was clicked (vanilla ContainerInput folded with the button).",
      "url": "/reference/api/inventories/clicktype/",
      "members": [
        {
          "name": "Left",
          "kind": "enumMember",
          "signature": "Left = 0",
          "value": "0",
          "summary": "Left click.",
          "documented": true,
          "url": "/reference/api/inventories/clicktype/#left"
        },
        {
          "name": "ShiftLeft",
          "kind": "enumMember",
          "signature": "ShiftLeft = 1",
          "value": "1",
          "summary": "Shift + left click (quick move).",
          "documented": true,
          "url": "/reference/api/inventories/clicktype/#shiftleft"
        },
        {
          "name": "Right",
          "kind": "enumMember",
          "signature": "Right = 2",
          "value": "2",
          "summary": "Right click.",
          "documented": true,
          "url": "/reference/api/inventories/clicktype/#right"
        },
        {
          "name": "ShiftRight",
          "kind": "enumMember",
          "signature": "ShiftRight = 3",
          "value": "3",
          "summary": "Shift + right click (quick move).",
          "documented": true,
          "url": "/reference/api/inventories/clicktype/#shiftright"
        },
        {
          "name": "Middle",
          "kind": "enumMember",
          "signature": "Middle = 4",
          "value": "4",
          "summary": "Middle click (clone, creative).",
          "documented": true,
          "url": "/reference/api/inventories/clicktype/#middle"
        },
        {
          "name": "NumberKey",
          "kind": "enumMember",
          "signature": "NumberKey = 5",
          "value": "5",
          "summary": "A hotbar number key (swap).",
          "documented": true,
          "url": "/reference/api/inventories/clicktype/#numberkey"
        },
        {
          "name": "DoubleClick",
          "kind": "enumMember",
          "signature": "DoubleClick = 6",
          "value": "6",
          "summary": "Double click (collect to cursor).",
          "documented": true,
          "url": "/reference/api/inventories/clicktype/#doubleclick"
        },
        {
          "name": "Drop",
          "kind": "enumMember",
          "signature": "Drop = 7",
          "value": "7",
          "summary": "Drop key over a slot.",
          "documented": true,
          "url": "/reference/api/inventories/clicktype/#drop"
        },
        {
          "name": "ControlDrop",
          "kind": "enumMember",
          "signature": "ControlDrop = 8",
          "value": "8",
          "summary": "Control + drop key over a slot (whole stack).",
          "documented": true,
          "url": "/reference/api/inventories/clicktype/#controldrop"
        },
        {
          "name": "WindowBorderLeft",
          "kind": "enumMember",
          "signature": "WindowBorderLeft = 9",
          "value": "9",
          "summary": "Left click outside the window (drops the cursor stack).",
          "documented": true,
          "url": "/reference/api/inventories/clicktype/#windowborderleft"
        },
        {
          "name": "WindowBorderRight",
          "kind": "enumMember",
          "signature": "WindowBorderRight = 10",
          "value": "10",
          "summary": "Right click outside the window (drops one).",
          "documented": true,
          "url": "/reference/api/inventories/clicktype/#windowborderright"
        },
        {
          "name": "SwapOffhand",
          "kind": "enumMember",
          "signature": "SwapOffhand = 11",
          "value": "11",
          "summary": "Swap with the off hand (F key).",
          "documented": true,
          "url": "/reference/api/inventories/clicktype/#swapoffhand"
        },
        {
          "name": "Unknown",
          "kind": "enumMember",
          "signature": "Unknown = 12",
          "value": "12",
          "summary": "Anything else.",
          "documented": true,
          "url": "/reference/api/inventories/clicktype/#unknown"
        },
        {
          "name": "Drag",
          "kind": "enumMember",
          "signature": "Drag = 13",
          "value": "13",
          "summary": "The end of a drag over several slots (only delivered to MenuClick, which has no InventoryDrag counterpart for locked menus).",
          "documented": true,
          "url": "/reference/api/inventories/clicktype/#drag"
        }
      ]
    },
    {
      "name": "Arg",
      "fullName": "Mc.Scripting.Commands.Arg",
      "namespace": "Mc.Scripting.Commands",
      "kind": "class",
      "category": "commands",
      "categoryLabel": "Commands",
      "signature": "public static class Arg",
      "summary": "Factories for the argument types of the vanilla command engine. Values are read in the executor with the typed getters of `CommandContext` (`GetInt`, `GetPlayer`, `GetBlockPos`, ...); types without a typed getter are read as text with `CommandContext.GetText`.",
      "url": "/reference/api/commands/arg/",
      "members": [
        {
          "name": "Angle",
          "kind": "method",
          "signature": "public static ArgType Angle()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A yaw angle, absolute or relative (`90`, `~-10`).",
          "documented": true,
          "url": "/reference/api/commands/arg/#angle"
        },
        {
          "name": "BlockPos",
          "kind": "method",
          "signature": "public static ArgType BlockPos()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A block position (`1 64 1`, `~ ~1 ~`, `^ ^ ^2`).",
          "documented": true,
          "url": "/reference/api/commands/arg/#blockpos"
        },
        {
          "name": "BlockPredicate",
          "kind": "method",
          "signature": "public static ArgType BlockPredicate()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A block predicate (state, tag, block entity data).",
          "documented": true,
          "url": "/reference/api/commands/arg/#blockpredicate"
        },
        {
          "name": "BlockState",
          "kind": "method",
          "signature": "public static ArgType BlockState()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A block state such as `minecraft:oak_stairs[facing=north]` (read with `CommandContext.GetBlockState`).",
          "documented": true,
          "url": "/reference/api/commands/arg/#blockstate"
        },
        {
          "name": "Bool",
          "kind": "method",
          "signature": "public static ArgType Bool()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "true / false.",
          "documented": true,
          "url": "/reference/api/commands/arg/#bool"
        },
        {
          "name": "Color",
          "kind": "method",
          "signature": "public static ArgType Color()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A named chat colour (`red`, `gold`, ...) or `reset`.",
          "documented": true,
          "url": "/reference/api/commands/arg/#color"
        },
        {
          "name": "ColumnPos",
          "kind": "method",
          "signature": "public static ArgType ColumnPos()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "An x/z column position.",
          "documented": true,
          "url": "/reference/api/commands/arg/#columnpos"
        },
        {
          "name": "Component",
          "kind": "method",
          "signature": "public static ArgType Component()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A text component in JSON/SNBT form (read with `CommandContext.GetText`).",
          "documented": true,
          "url": "/reference/api/commands/arg/#component"
        },
        {
          "name": "ContextFloatProvider",
          "kind": "method",
          "signature": "public static ArgType ContextFloatProvider()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A float provider as the loot / worldgen data writes it (a constant, `{type:\"minecraft:uniform\",min_inclusive:0,max_exclusive:1}`, ...).",
          "documented": true,
          "url": "/reference/api/commands/arg/#contextfloatprovider"
        },
        {
          "name": "ContextIntProvider",
          "kind": "method",
          "signature": "public static ArgType ContextIntProvider()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "An int provider as the loot / worldgen data writes it.",
          "documented": true,
          "url": "/reference/api/commands/arg/#contextintprovider"
        },
        {
          "name": "Dialog",
          "kind": "method",
          "signature": "public static ArgType Dialog()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A dialog: an id of the `dialog` registry or an inline definition.",
          "documented": true,
          "url": "/reference/api/commands/arg/#dialog"
        },
        {
          "name": "Dimension",
          "kind": "method",
          "signature": "public static ArgType Dimension()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A dimension key.",
          "documented": true,
          "url": "/reference/api/commands/arg/#dimension"
        },
        {
          "name": "Double",
          "kind": "method",
          "signature": "public static ArgType Double(double min = -1.7976931348623157E+308, double max = 1.7976931348623157E+308)",
          "static": true,
          "parameters": [
            {
              "name": "min",
              "type": "double",
              "default": "-1.7976931348623157E+308"
            },
            {
              "name": "max",
              "type": "double",
              "default": "1.7976931348623157E+308"
            }
          ],
          "returns": {
            "type": "ArgType"
          },
          "summary": "A double-precision number, optionally limited.",
          "documented": true,
          "url": "/reference/api/commands/arg/#double"
        },
        {
          "name": "Entities",
          "kind": "method",
          "signature": "public static ArgType Entities()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "Any number of entities.",
          "documented": true,
          "url": "/reference/api/commands/arg/#entities"
        },
        {
          "name": "Entity",
          "kind": "method",
          "signature": "public static ArgType Entity()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "Exactly one entity.",
          "documented": true,
          "url": "/reference/api/commands/arg/#entity"
        },
        {
          "name": "EntityAnchor",
          "kind": "method",
          "signature": "public static ArgType EntityAnchor()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "An entity anchor: `feet` or `eyes`.",
          "documented": true,
          "url": "/reference/api/commands/arg/#entityanchor"
        },
        {
          "name": "Feature",
          "kind": "method",
          "signature": "public static ArgType Feature()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A configured worldgen feature (an id of the `worldgen/configured_feature` registry).",
          "documented": true,
          "url": "/reference/api/commands/arg/#feature"
        },
        {
          "name": "Float",
          "kind": "method",
          "signature": "public static ArgType Float(float min = -3.4028235E+38f, float max = 3.4028235E+38f)",
          "static": true,
          "parameters": [
            {
              "name": "min",
              "type": "float",
              "default": "-3.4028235E+38f"
            },
            {
              "name": "max",
              "type": "float",
              "default": "3.4028235E+38f"
            }
          ],
          "returns": {
            "type": "ArgType"
          },
          "summary": "A single-precision number, optionally limited.",
          "documented": true,
          "url": "/reference/api/commands/arg/#float"
        },
        {
          "name": "FloatRange",
          "kind": "method",
          "signature": "public static ArgType FloatRange()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "An inclusive decimal range.",
          "documented": true,
          "url": "/reference/api/commands/arg/#floatrange"
        },
        {
          "name": "Function",
          "kind": "method",
          "signature": "public static ArgType Function()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A data pack function id or tag.",
          "documented": true,
          "url": "/reference/api/commands/arg/#function"
        },
        {
          "name": "GameMode",
          "kind": "method",
          "signature": "public static ArgType GameMode()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A game mode name.",
          "documented": true,
          "url": "/reference/api/commands/arg/#gamemode"
        },
        {
          "name": "GameProfile",
          "kind": "method",
          "signature": "public static ArgType GameProfile()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A player profile (also offline players: names and uuids).",
          "documented": true,
          "url": "/reference/api/commands/arg/#gameprofile"
        },
        {
          "name": "GreedyString",
          "kind": "method",
          "signature": "public static ArgType GreedyString()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "The rest of the line.",
          "documented": true,
          "url": "/reference/api/commands/arg/#greedystring"
        },
        {
          "name": "Heightmap",
          "kind": "method",
          "signature": "public static ArgType Heightmap()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A heightmap name (`world_surface`, `motion_blocking`, ...).",
          "documented": true,
          "url": "/reference/api/commands/arg/#heightmap"
        },
        {
          "name": "HexColor",
          "kind": "method",
          "signature": "public static ArgType HexColor()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A colour as `#RRGGBB`.",
          "documented": true,
          "url": "/reference/api/commands/arg/#hexcolor"
        },
        {
          "name": "Int",
          "kind": "method",
          "signature": "public static ArgType Int(int min = -2147483648, int max = 2147483647)",
          "static": true,
          "parameters": [
            {
              "name": "min",
              "type": "int",
              "default": "-2147483648",
              "summary": "Smallest accepted value."
            },
            {
              "name": "max",
              "type": "int",
              "default": "2147483647",
              "summary": "Largest accepted value."
            }
          ],
          "returns": {
            "type": "ArgType"
          },
          "summary": "A 32-bit integer, optionally limited.",
          "documented": true,
          "url": "/reference/api/commands/arg/#int"
        },
        {
          "name": "IntRange",
          "kind": "method",
          "signature": "public static ArgType IntRange()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "An inclusive integer range (`1..5`, `..3`).",
          "documented": true,
          "url": "/reference/api/commands/arg/#intrange"
        },
        {
          "name": "Item",
          "kind": "method",
          "signature": "public static ArgType Item()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "An item with components, e.g. `minecraft:diamond_sword[damage=5]`.",
          "documented": true,
          "url": "/reference/api/commands/arg/#item"
        },
        {
          "name": "ItemPredicate",
          "kind": "method",
          "signature": "public static ArgType ItemPredicate()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "An item predicate.",
          "documented": true,
          "url": "/reference/api/commands/arg/#itempredicate"
        },
        {
          "name": "ItemSlot",
          "kind": "method",
          "signature": "public static ArgType ItemSlot()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "One inventory slot name (`container.5`, `weapon.mainhand`).",
          "documented": true,
          "url": "/reference/api/commands/arg/#itemslot"
        },
        {
          "name": "ItemSlots",
          "kind": "method",
          "signature": "public static ArgType ItemSlots()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A group of inventory slots (`container.*`).",
          "documented": true,
          "url": "/reference/api/commands/arg/#itemslots"
        },
        {
          "name": "Long",
          "kind": "method",
          "signature": "public static ArgType Long(long min = -9223372036854775808, long max = 9223372036854775807)",
          "static": true,
          "parameters": [
            {
              "name": "min",
              "type": "long",
              "default": "-9223372036854775808"
            },
            {
              "name": "max",
              "type": "long",
              "default": "9223372036854775807"
            }
          ],
          "returns": {
            "type": "ArgType"
          },
          "summary": "A 64-bit integer, optionally limited.",
          "documented": true,
          "url": "/reference/api/commands/arg/#long"
        },
        {
          "name": "LootModifier",
          "kind": "method",
          "signature": "public static ArgType LootModifier()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A loot modifier.",
          "documented": true,
          "url": "/reference/api/commands/arg/#lootmodifier"
        },
        {
          "name": "LootPredicate",
          "kind": "method",
          "signature": "public static ArgType LootPredicate()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A loot predicate.",
          "documented": true,
          "url": "/reference/api/commands/arg/#lootpredicate"
        },
        {
          "name": "LootTable",
          "kind": "method",
          "signature": "public static ArgType LootTable()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A loot table.",
          "documented": true,
          "url": "/reference/api/commands/arg/#loottable"
        },
        {
          "name": "Message",
          "kind": "method",
          "signature": "public static ArgType Message()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A chat message that may contain selectors.",
          "documented": true,
          "url": "/reference/api/commands/arg/#message"
        },
        {
          "name": "NbtCompound",
          "kind": "method",
          "signature": "public static ArgType NbtCompound()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "An SNBT compound.",
          "documented": true,
          "url": "/reference/api/commands/arg/#nbtcompound"
        },
        {
          "name": "NbtPath",
          "kind": "method",
          "signature": "public static ArgType NbtPath()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "An NBT path.",
          "documented": true,
          "url": "/reference/api/commands/arg/#nbtpath"
        },
        {
          "name": "NbtTag",
          "kind": "method",
          "signature": "public static ArgType NbtTag()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "Any SNBT tag.",
          "documented": true,
          "url": "/reference/api/commands/arg/#nbttag"
        },
        {
          "name": "Objective",
          "kind": "method",
          "signature": "public static ArgType Objective()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A scoreboard objective name.",
          "documented": true,
          "url": "/reference/api/commands/arg/#objective"
        },
        {
          "name": "ObjectiveCriteria",
          "kind": "method",
          "signature": "public static ArgType ObjectiveCriteria()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A scoreboard criterion (`dummy`, `health`, `minecraft.mined:minecraft.stone`).",
          "documented": true,
          "url": "/reference/api/commands/arg/#objectivecriteria"
        },
        {
          "name": "Operation",
          "kind": "method",
          "signature": "public static ArgType Operation()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A scoreboard operation (`+=`, `%=`, `><`).",
          "documented": true,
          "url": "/reference/api/commands/arg/#operation"
        },
        {
          "name": "Particle",
          "kind": "method",
          "signature": "public static ArgType Particle()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A particle with its parameters (`minecraft:dust{color:[1,0,0],scale:1}`).",
          "documented": true,
          "url": "/reference/api/commands/arg/#particle"
        },
        {
          "name": "Player",
          "kind": "method",
          "signature": "public static ArgType Player()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "One online player (name, uuid or a selector that matches exactly one player).",
          "documented": true,
          "url": "/reference/api/commands/arg/#player"
        },
        {
          "name": "Players",
          "kind": "method",
          "signature": "public static ArgType Players()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "Any number of online players (names or selectors such as `@a`).",
          "documented": true,
          "url": "/reference/api/commands/arg/#players"
        },
        {
          "name": "Resource",
          "kind": "method",
          "signature": "public static ArgType Resource(string registry)",
          "static": true,
          "parameters": [
            {
              "name": "registry",
              "type": "string",
              "summary": "The registry id."
            }
          ],
          "returns": {
            "type": "ArgType"
          },
          "summary": "An entry of a registry (\"minecraft:enchantment\", \"minecraft:sound_event\", ...), suggested by the engine.",
          "documented": true,
          "url": "/reference/api/commands/arg/#resource"
        },
        {
          "name": "ResourceKey",
          "kind": "method",
          "signature": "public static ArgType ResourceKey(string registry)",
          "static": true,
          "parameters": [
            {
              "name": "registry",
              "type": "string",
              "summary": "The registry id."
            }
          ],
          "returns": {
            "type": "ArgType"
          },
          "summary": "A registry key (not the entry), e.g. `Arg.ResourceKey(\"minecraft:worldgen/biome\")`.",
          "documented": true,
          "url": "/reference/api/commands/arg/#resourcekey"
        },
        {
          "name": "ResourceLocation",
          "kind": "method",
          "signature": "public static ArgType ResourceLocation()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A resource location, `namespace:path`.",
          "documented": true,
          "url": "/reference/api/commands/arg/#resourcelocation"
        },
        {
          "name": "ResourceOrTag",
          "kind": "method",
          "signature": "public static ArgType ResourceOrTag(string registry)",
          "static": true,
          "parameters": [
            {
              "name": "registry",
              "type": "string",
              "summary": "The registry id."
            }
          ],
          "returns": {
            "type": "ArgType"
          },
          "summary": "An entry of a registry or a `#tag` of it.",
          "documented": true,
          "url": "/reference/api/commands/arg/#resourceortag"
        },
        {
          "name": "ResourceOrTagKey",
          "kind": "method",
          "signature": "public static ArgType ResourceOrTagKey(string registry)",
          "static": true,
          "parameters": [
            {
              "name": "registry",
              "type": "string",
              "summary": "The registry id."
            }
          ],
          "returns": {
            "type": "ArgType"
          },
          "summary": "A registry key or a `#tag` of keys.",
          "documented": true,
          "url": "/reference/api/commands/arg/#resourceortagkey"
        },
        {
          "name": "ResourceSelector",
          "kind": "method",
          "signature": "public static ArgType ResourceSelector(string registry)",
          "static": true,
          "parameters": [
            {
              "name": "registry",
              "type": "string",
              "summary": "The registry id."
            }
          ],
          "returns": {
            "type": "ArgType"
          },
          "summary": "A selector over the entries of a registry (`*`, `minecraft:*`, tags).",
          "documented": true,
          "url": "/reference/api/commands/arg/#resourceselector"
        },
        {
          "name": "Rotation",
          "kind": "method",
          "signature": "public static ArgType Rotation()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A rotation (yaw pitch).",
          "documented": true,
          "url": "/reference/api/commands/arg/#rotation"
        },
        {
          "name": "ScoreHolder",
          "kind": "method",
          "signature": "public static ArgType ScoreHolder(bool multiple = false)",
          "static": true,
          "parameters": [
            {
              "name": "multiple",
              "type": "bool",
              "default": "false",
              "summary": "Whether several holders are accepted."
            }
          ],
          "returns": {
            "type": "ArgType"
          },
          "summary": "A score holder (names, selectors, `*`).",
          "documented": true,
          "url": "/reference/api/commands/arg/#scoreholder"
        },
        {
          "name": "ScoreboardSlot",
          "kind": "method",
          "signature": "public static ArgType ScoreboardSlot()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A scoreboard display slot (`sidebar`, `list`, `below_name`, `sidebar.team.red`).",
          "documented": true,
          "url": "/reference/api/commands/arg/#scoreboardslot"
        },
        {
          "name": "SlotSource",
          "kind": "method",
          "signature": "public static ArgType SlotSource()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A slot source of the item modifier data (`minecraft:slot_source`).",
          "documented": true,
          "url": "/reference/api/commands/arg/#slotsource"
        },
        {
          "name": "String",
          "kind": "method",
          "signature": "public static ArgType String()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A word or a quoted phrase.",
          "documented": true,
          "url": "/reference/api/commands/arg/#string"
        },
        {
          "name": "Style",
          "kind": "method",
          "signature": "public static ArgType Style()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A text style in JSON/SNBT form.",
          "documented": true,
          "url": "/reference/api/commands/arg/#style"
        },
        {
          "name": "SwingAnimation",
          "kind": "method",
          "signature": "public static ArgType SwingAnimation()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A swing animation type (`none`, `stab`, `whack`).",
          "documented": true,
          "url": "/reference/api/commands/arg/#swinganimation"
        },
        {
          "name": "Swizzle",
          "kind": "method",
          "signature": "public static ArgType Swizzle()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A set of axes (`xz`, `xyz`).",
          "documented": true,
          "url": "/reference/api/commands/arg/#swizzle"
        },
        {
          "name": "Team",
          "kind": "method",
          "signature": "public static ArgType Team()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A team name.",
          "documented": true,
          "url": "/reference/api/commands/arg/#team"
        },
        {
          "name": "TemplateMirror",
          "kind": "method",
          "signature": "public static ArgType TemplateMirror()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A structure mirror (`none`, `left_right`, `front_back`).",
          "documented": true,
          "url": "/reference/api/commands/arg/#templatemirror"
        },
        {
          "name": "TemplateRotation",
          "kind": "method",
          "signature": "public static ArgType TemplateRotation()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A structure rotation (`none`, `clockwise_90`, `180`, `counterclockwise_90`).",
          "documented": true,
          "url": "/reference/api/commands/arg/#templaterotation"
        },
        {
          "name": "Time",
          "kind": "method",
          "signature": "public static ArgType Time(int minTicks = 0)",
          "static": true,
          "parameters": [
            {
              "name": "minTicks",
              "type": "int",
              "default": "0",
              "summary": "Smallest accepted number of ticks."
            }
          ],
          "returns": {
            "type": "ArgType"
          },
          "summary": "A duration such as `10s`, `5d`, `20t` (parsed to ticks).",
          "documented": true,
          "url": "/reference/api/commands/arg/#time"
        },
        {
          "name": "Uuid",
          "kind": "method",
          "signature": "public static ArgType Uuid()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A uuid (read with `CommandContext.GetText`).",
          "documented": true,
          "url": "/reference/api/commands/arg/#uuid"
        },
        {
          "name": "Vec2",
          "kind": "method",
          "signature": "public static ArgType Vec2()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A 2D position.",
          "documented": true,
          "url": "/reference/api/commands/arg/#vec2"
        },
        {
          "name": "Vec3",
          "kind": "method",
          "signature": "public static ArgType Vec3()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A position with decimals.",
          "documented": true,
          "url": "/reference/api/commands/arg/#vec3"
        },
        {
          "name": "Word",
          "kind": "method",
          "signature": "public static ArgType Word()",
          "static": true,
          "returns": {
            "type": "ArgType"
          },
          "summary": "A single word (letters, digits, `_ - . +`).",
          "documented": true,
          "url": "/reference/api/commands/arg/#word"
        }
      ]
    },
    {
      "name": "ArgType",
      "fullName": "Mc.Scripting.Commands.ArgType",
      "namespace": "Mc.Scripting.Commands",
      "kind": "class",
      "category": "commands",
      "categoryLabel": "Commands",
      "signature": "public sealed class ArgType",
      "summary": "The type of a command argument: what the client's command tree shows (parser id + properties) and what the server parses. Create with the `Arg` factories.",
      "url": "/reference/api/commands/argtype/",
      "members": [
        {
          "name": "RegistryName",
          "kind": "property",
          "signature": "public string RegistryName { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The vanilla argument type id, e.g. \"brigadier:integer\" or \"minecraft:entity\".",
          "documented": true,
          "url": "/reference/api/commands/argtype/#registryname"
        },
        {
          "name": "ToString",
          "kind": "method",
          "signature": "public override string ToString()",
          "returns": {
            "type": "string"
          },
          "documented": false,
          "url": "/reference/api/commands/argtype/#tostring"
        }
      ]
    },
    {
      "name": "AsyncSuggestionProvider",
      "fullName": "Mc.Scripting.Commands.AsyncSuggestionProvider",
      "namespace": "Mc.Scripting.Commands",
      "kind": "delegate",
      "category": "commands",
      "categoryLabel": "Commands",
      "signature": "public delegate Task<IReadOnlyList<string>> AsyncSuggestionProvider(SuggestionContext context, string typed)",
      "summary": "An asynchronous suggestion provider (the list is produced off the tick thread, e.g. from a database).",
      "url": "/reference/api/commands/asyncsuggestionprovider/",
      "members": [],
      "parameters": [
        {
          "name": "context",
          "type": "SuggestionContext",
          "summary": "A copy of the request (the asker, the line typed so far): safe to read at any time, also after an `await` on another thread. The native command context is not available here: it does not outlive the call that started the provider."
        },
        {
          "name": "typed",
          "type": "string",
          "summary": "The text typed so far for this argument."
        }
      ],
      "returns": "Task<IReadOnlyList<string>>"
    },
    {
      "name": "Command",
      "fullName": "Mc.Scripting.Commands.Command",
      "namespace": "Mc.Scripting.Commands",
      "kind": "class",
      "category": "commands",
      "categoryLabel": "Commands",
      "signature": "public static class Command",
      "summary": "Entry point for building command trees: `Command.Literal(\"home\").Then(Command.Argument(\"name\", Arg.Word()).Executes(...))`.",
      "url": "/reference/api/commands/command/",
      "members": [
        {
          "name": "Argument",
          "kind": "method",
          "signature": "public static CommandNode Argument(string name, ArgType type)",
          "static": true,
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The argument name used to read it in the executor."
            },
            {
              "name": "type",
              "type": "ArgType",
              "summary": "What is accepted (see `Arg`)."
            }
          ],
          "returns": {
            "type": "CommandNode",
            "summary": "The node."
          },
          "summary": "A typed argument.",
          "documented": true,
          "url": "/reference/api/commands/command/#argument"
        },
        {
          "name": "Literal",
          "kind": "method",
          "signature": "public static CommandNode Literal(string name)",
          "static": true,
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The word (lower case, no spaces)."
            }
          ],
          "returns": {
            "type": "CommandNode",
            "summary": "The node."
          },
          "summary": "A literal word.",
          "documented": true,
          "url": "/reference/api/commands/command/#literal"
        }
      ]
    },
    {
      "name": "CommandContext",
      "fullName": "Mc.Scripting.Commands.CommandContext",
      "namespace": "Mc.Scripting.Commands",
      "kind": "class",
      "category": "commands",
      "categoryLabel": "Commands",
      "signature": "public sealed class CommandContext",
      "summary": "The parsed invocation of a command: the source and the argument values. Valid only while the executor / provider runs.",
      "url": "/reference/api/commands/commandcontext/",
      "members": [
        {
          "name": "Args",
          "kind": "property",
          "signature": "public string[] Args { get; }",
          "returns": {
            "type": "string[]"
          },
          "summary": "The words after the command name (flat-command style access: split on spaces).",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#args"
        },
        {
          "name": "Input",
          "kind": "property",
          "signature": "public string Input { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The whole command line without the leading slash.",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#input"
        },
        {
          "name": "Name",
          "kind": "property",
          "signature": "public string Name { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The name of the executing command node chain's root literal (the word the player typed).",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#name"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player? Player { get; }",
          "returns": {
            "type": "Player?"
          },
          "summary": "The sending player, null for the console.",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#player"
        },
        {
          "name": "RawArgs",
          "kind": "property",
          "signature": "public string RawArgs { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The text after the command name.",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#rawargs"
        },
        {
          "name": "Result",
          "kind": "property",
          "signature": "public int Result { get; set; }",
          "returns": {
            "type": "int"
          },
          "summary": "The command result the executor of an `Action`-style handler returns (default 1). Set it to change the number `/execute store` sees.",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#result"
        },
        {
          "name": "Sender",
          "kind": "property",
          "signature": "public Entity Sender { get; }",
          "returns": {
            "type": "Entity"
          },
          "summary": "The executing entity (shortcut for `Source.Entity`; `Entity.Null` for the console).",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#sender"
        },
        {
          "name": "Source",
          "kind": "property",
          "signature": "public CommandSource Source { get; }",
          "returns": {
            "type": "CommandSource"
          },
          "summary": "Who runs the command.",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#source"
        },
        {
          "name": "Detach",
          "kind": "method",
          "signature": "public DetachedCommand Detach()",
          "returns": {
            "type": "DetachedCommand",
            "summary": "The detached invocation, valid forever; `DetachedCommand.Reply` still reaches the sender while he is online."
          },
          "summary": "Copies what a command needs after its executor returned: who ran it, the input, the permission level and the position. Use it for deferred work (`Scheduler.RunLater`, a task, a callback): the context itself must not be used after the executor returned.",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#detach"
        },
        {
          "name": "GetBlockPos",
          "kind": "method",
          "signature": "public BlockPos GetBlockPos(string name)",
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The argument name."
            }
          ],
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The block position of a `Arg.BlockPos` argument (relative coordinates resolved against the source).",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#getblockpos"
        },
        {
          "name": "GetBlockState",
          "kind": "method",
          "signature": "public BlockState GetBlockState(string name)",
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The argument name."
            }
          ],
          "returns": {
            "type": "BlockState"
          },
          "summary": "The block state of a `Arg.BlockState` argument.",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#getblockstate"
        },
        {
          "name": "GetBool",
          "kind": "method",
          "signature": "public bool GetBool(string name)",
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The argument name."
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "The value of a boolean argument.",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#getbool"
        },
        {
          "name": "GetDouble",
          "kind": "method",
          "signature": "public double GetDouble(string name)",
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The argument name."
            }
          ],
          "returns": {
            "type": "double"
          },
          "summary": "The value of a double argument.",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#getdouble"
        },
        {
          "name": "GetEntities",
          "kind": "method",
          "signature": "public IReadOnlyList<Entity> GetEntities(string name)",
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The argument name."
            }
          ],
          "returns": {
            "type": "IReadOnlyList<Entity>"
          },
          "summary": "The entities a selector argument matches (an empty list when none).",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#getentities"
        },
        {
          "name": "GetFloat",
          "kind": "method",
          "signature": "public float GetFloat(string name)",
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The argument name."
            }
          ],
          "returns": {
            "type": "float"
          },
          "summary": "The value of a float argument.",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#getfloat"
        },
        {
          "name": "GetInt",
          "kind": "method",
          "signature": "public int GetInt(string name)",
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The argument name."
            }
          ],
          "returns": {
            "type": "int"
          },
          "summary": "The value of an integer argument.",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#getint"
        },
        {
          "name": "GetLong",
          "kind": "method",
          "signature": "public long GetLong(string name)",
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The argument name."
            }
          ],
          "returns": {
            "type": "long"
          },
          "summary": "The value of a long argument.",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#getlong"
        },
        {
          "name": "GetPlayer",
          "kind": "method",
          "signature": "public Player GetPlayer(string name)",
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The argument name."
            }
          ],
          "returns": {
            "type": "Player"
          },
          "summary": "The single player a `Arg.Player` argument names. Throws `CommandFailure` when none matched.",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#getplayer"
        },
        {
          "name": "GetPlayers",
          "kind": "method",
          "signature": "public IReadOnlyList<Player> GetPlayers(string name)",
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The argument name."
            }
          ],
          "returns": {
            "type": "IReadOnlyList<Player>"
          },
          "summary": "The players a selector argument matches.",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#getplayers"
        },
        {
          "name": "GetString",
          "kind": "method",
          "signature": "public string GetString(string name)",
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The argument name."
            }
          ],
          "returns": {
            "type": "string"
          },
          "summary": "The value of a word / phrase / greedy string argument.",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#getstring"
        },
        {
          "name": "GetText",
          "kind": "method",
          "signature": "public string GetText(string name)",
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The argument name."
            }
          ],
          "returns": {
            "type": "string"
          },
          "summary": "The text of any argument as typed (block states, items, components, nbt, uuids, resource ids, ...).",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#gettext"
        },
        {
          "name": "GetVec3",
          "kind": "method",
          "signature": "public Vec3d GetVec3(string name)",
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The argument name."
            }
          ],
          "returns": {
            "type": "Vec3d"
          },
          "summary": "The position of a `Arg.Vec3` argument (relative coordinates resolved against the source).",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#getvec3"
        },
        {
          "name": "Has",
          "kind": "method",
          "signature": "public bool Has(string name)",
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The argument name."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when the command line contained it."
          },
          "summary": "Whether an optional argument was given.",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#has"
        },
        {
          "name": "Reply",
          "kind": "method",
          "signature": "public void Reply(string message)",
          "parameters": [
            {
              "name": "message",
              "type": "string",
              "summary": "The text."
            }
          ],
          "summary": "Sends a plain message to whoever ran the command.",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#reply"
        },
        {
          "name": "Reply",
          "kind": "method",
          "signature": "public void Reply(Component message)",
          "parameters": [
            {
              "name": "message",
              "type": "Component",
              "summary": "The component."
            }
          ],
          "summary": "Sends a rich message to whoever ran the command.",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#reply-1"
        },
        {
          "name": "RequirePlayer",
          "kind": "method",
          "signature": "public Player RequirePlayer()",
          "returns": {
            "type": "Player",
            "summary": "The player."
          },
          "summary": "The sending player, or throws `CommandFailure` (\"Only players can use this command\") for the console.",
          "documented": true,
          "url": "/reference/api/commands/commandcontext/#requireplayer"
        }
      ]
    },
    {
      "name": "CommandExecutor",
      "fullName": "Mc.Scripting.Commands.CommandExecutor",
      "namespace": "Mc.Scripting.Commands",
      "kind": "delegate",
      "category": "commands",
      "categoryLabel": "Commands",
      "signature": "public delegate int CommandExecutor(CommandContext context)",
      "summary": "A command executor: runs the command and returns its result (vanilla semantics: the number `/execute store` sees; 1 = success).",
      "url": "/reference/api/commands/commandexecutor/",
      "members": [],
      "parameters": [
        {
          "name": "context",
          "type": "CommandContext",
          "summary": "The invocation."
        }
      ],
      "returns": "int"
    },
    {
      "name": "CommandFailure",
      "fullName": "Mc.Scripting.Commands.CommandFailure",
      "namespace": "Mc.Scripting.Commands",
      "kind": "class",
      "category": "commands",
      "categoryLabel": "Commands",
      "signature": "public sealed class CommandFailure : Exception",
      "baseType": "Exception",
      "summary": "Thrown by an executor to fail the command with a message (red text, no stack trace in the log). The command result is 0.",
      "url": "/reference/api/commands/commandfailure/",
      "members": [
        {
          "name": "CommandFailure",
          "kind": "ctor",
          "signature": "public CommandFailure(string message)",
          "parameters": [
            {
              "name": "message",
              "type": "string",
              "summary": "What went wrong, shown to the sender."
            }
          ],
          "summary": "Creates a failure with a plain message.",
          "documented": true,
          "url": "/reference/api/commands/commandfailure/#constructor"
        },
        {
          "name": "CommandFailure",
          "kind": "ctor",
          "signature": "public CommandFailure(string translationKey, string message)",
          "parameters": [
            {
              "name": "translationKey",
              "type": "string",
              "summary": "The key, e.g. \"commands.teleport.invalidPosition\"."
            },
            {
              "name": "message",
              "type": "string",
              "summary": "The English text used by the console and as fallback."
            }
          ],
          "summary": "Creates a failure with a translation key (client-translated) and an English fallback message.",
          "documented": true,
          "url": "/reference/api/commands/commandfailure/#constructor-1"
        },
        {
          "name": "TranslationKey",
          "kind": "property",
          "signature": "public string? TranslationKey { get; }",
          "returns": {
            "type": "string?"
          },
          "summary": "The translation key, if any.",
          "documented": true,
          "url": "/reference/api/commands/commandfailure/#translationkey"
        }
      ]
    },
    {
      "name": "CommandHandler",
      "fullName": "Mc.Scripting.Commands.CommandHandler",
      "namespace": "Mc.Scripting.Commands",
      "kind": "delegate",
      "category": "commands",
      "categoryLabel": "Commands",
      "signature": "public delegate void CommandHandler(CommandContext context)",
      "summary": "A flat command body (`Commands.Register(\"name\", ctx => ...)`): reads `CommandContext.Args` and may set `CommandContext.Result`.",
      "url": "/reference/api/commands/commandhandler/",
      "members": [],
      "parameters": [
        {
          "name": "context",
          "type": "CommandContext",
          "summary": "The invocation."
        }
      ],
      "returns": "void"
    },
    {
      "name": "CommandNode",
      "fullName": "Mc.Scripting.Commands.CommandNode",
      "namespace": "Mc.Scripting.Commands",
      "kind": "class",
      "category": "commands",
      "categoryLabel": "Commands",
      "signature": "public sealed class CommandNode",
      "summary": "A node of a command tree under construction: a literal word or a typed argument, with children, an executor, requirements and suggestions. Build trees with `Command.Literal` / `Command.Argument` and register them with `CommandRegistry.Register`.",
      "url": "/reference/api/commands/commandnode/",
      "members": [
        {
          "name": "IsLiteral",
          "kind": "property",
          "signature": "public bool IsLiteral { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether this is a literal word.",
          "documented": true,
          "url": "/reference/api/commands/commandnode/#isliteral"
        },
        {
          "name": "Name",
          "kind": "property",
          "signature": "public string Name { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The literal word or the argument name.",
          "documented": true,
          "url": "/reference/api/commands/commandnode/#name"
        },
        {
          "name": "Type",
          "kind": "property",
          "signature": "public ArgType? Type { get; }",
          "returns": {
            "type": "ArgType?"
          },
          "summary": "The argument type, null for a literal.",
          "documented": true,
          "url": "/reference/api/commands/commandnode/#type"
        },
        {
          "name": "Executes",
          "kind": "method",
          "signature": "public CommandNode Executes(CommandExecutor executor)",
          "parameters": [
            {
              "name": "executor",
              "type": "CommandExecutor",
              "summary": "Returns the command result (1 = success)."
            }
          ],
          "returns": {
            "type": "CommandNode",
            "summary": "This node."
          },
          "summary": "Runs `executor` when the command line ends at this node.",
          "documented": true,
          "url": "/reference/api/commands/commandnode/#executes"
        },
        {
          "name": "Executes",
          "kind": "method",
          "signature": "public CommandNode Executes(Action<CommandContext> action)",
          "parameters": [
            {
              "name": "action",
              "type": "Action<CommandContext>",
              "summary": "The command body."
            }
          ],
          "returns": {
            "type": "CommandNode",
            "summary": "This node."
          },
          "summary": "Runs `action` when the command line ends at this node; the result is `CommandContext.Result` (default 1).",
          "documented": true,
          "url": "/reference/api/commands/commandnode/#executes-1"
        },
        {
          "name": "OpLevel",
          "kind": "method",
          "signature": "public CommandNode OpLevel(int level)",
          "parameters": [
            {
              "name": "level",
              "type": "int",
              "summary": "The minimum permission level."
            }
          ],
          "returns": {
            "type": "CommandNode",
            "summary": "This node."
          },
          "summary": "Requires a vanilla operator level (0-4) for this node.",
          "documented": true,
          "url": "/reference/api/commands/commandnode/#oplevel"
        },
        {
          "name": "Permission",
          "kind": "method",
          "signature": "public CommandNode Permission(string node)",
          "parameters": [
            {
              "name": "node",
              "type": "string",
              "summary": "The permission node, e.g. \"homes.use\"."
            }
          ],
          "returns": {
            "type": "CommandNode",
            "summary": "This node."
          },
          "summary": "Requires a permission node (see `Mc.Scripting.Permissions`) to see and use this node. Players without it do not get the node in their client's tree. The console always passes.",
          "documented": true,
          "url": "/reference/api/commands/commandnode/#permission"
        },
        {
          "name": "Requires",
          "kind": "method",
          "signature": "public CommandNode Requires(Func<CommandSource, bool> requirement)",
          "parameters": [
            {
              "name": "requirement",
              "type": "Func<CommandSource, bool>",
              "summary": "Returns true when the source may use the node."
            }
          ],
          "returns": {
            "type": "CommandNode",
            "summary": "This node."
          },
          "summary": "Requires an arbitrary condition of the command source. A node with a condition is encoded per player in the client's command tree.",
          "documented": true,
          "url": "/reference/api/commands/commandnode/#requires"
        },
        {
          "name": "Suggests",
          "kind": "method",
          "signature": "public CommandNode Suggests(SuggestionProvider provider)",
          "parameters": [
            {
              "name": "provider",
              "type": "SuggestionProvider",
              "summary": "Fills the suggestions."
            }
          ],
          "returns": {
            "type": "CommandNode",
            "summary": "This node."
          },
          "summary": "Provides tab-completion suggestions for this argument (server-side, on the tick thread).",
          "documented": true,
          "url": "/reference/api/commands/commandnode/#suggests"
        },
        {
          "name": "Suggests",
          "kind": "method",
          "signature": "public CommandNode Suggests(Func<CommandContext, IEnumerable<string>> provider)",
          "parameters": [
            {
              "name": "provider",
              "type": "Func<CommandContext, IEnumerable<string>>",
              "summary": "Returns the candidate words; the engine filters them by what was typed."
            }
          ],
          "returns": {
            "type": "CommandNode",
            "summary": "This node."
          },
          "summary": "Provides suggestions from a list computed on the tick thread.",
          "documented": true,
          "url": "/reference/api/commands/commandnode/#suggests-1"
        },
        {
          "name": "SuggestsAsync",
          "kind": "method",
          "signature": "public CommandNode SuggestsAsync(AsyncSuggestionProvider provider)",
          "parameters": [
            {
              "name": "provider",
              "type": "AsyncSuggestionProvider",
              "summary": "Returns the candidates; runs off the tick thread after the call returns."
            }
          ],
          "returns": {
            "type": "CommandNode",
            "summary": "This node."
          },
          "summary": "Provides suggestions asynchronously (the client waits until the task completes).",
          "documented": true,
          "url": "/reference/api/commands/commandnode/#suggestsasync"
        },
        {
          "name": "Then",
          "kind": "method",
          "signature": "public CommandNode Then(CommandNode child)",
          "parameters": [
            {
              "name": "child",
              "type": "CommandNode",
              "summary": "The next literal or argument."
            }
          ],
          "returns": {
            "type": "CommandNode",
            "summary": "This node (fluent)."
          },
          "summary": "Adds a child node.",
          "documented": true,
          "url": "/reference/api/commands/commandnode/#then"
        }
      ]
    },
    {
      "name": "CommandRegistry",
      "fullName": "Mc.Scripting.Commands.CommandRegistry",
      "namespace": "Mc.Scripting.Commands",
      "kind": "class",
      "category": "commands",
      "categoryLabel": "Commands",
      "signature": "public sealed class CommandRegistry",
      "summary": "Command registration, scoped to a plugin (`plugin.Commands`). Plugin commands are nodes of the server's real command tree: they appear in the client's command tree with argument types and suggestions, and run through the same dispatcher as vanilla commands. Everything registered here is removed again when the plugin unloads (the clients' trees are refreshed once per tick).",
      "remarks": "Two forms. The tree form `Register(root, aliases, description)` takes a literal built with `Command.Literal` and `Command.Argument`: typed arguments, suggestions, permissions and aliases, shown in the client's command tree. The flat form `Register(name, handler, description)` is a shortcut for a `name` literal followed by a greedy text argument; the handler reads `CommandContext.Args`. Plugin commands are removed when the plugin unloads. See [Commands](/concepts/commands/).",
      "examples": [
        "```csharp\nCommands.Register(\"hello\", ctx =>\n{\n    ctx.Reply($\"Hello, {(ctx.Args.Length > 0 ? ctx.Args[0] : \"world\")}!\");\n    ctx.Result = ctx.Args.Length;\n}, \"Says hello\");\n```",
        "```csharp\nCommands.Register(Command.Literal(\"greet\").Permission(\"hello.greet\")\n    .Then(Command.Argument(\"name\", Arg.Word())\n        .Suggests(ctx => new[] { \"world\", \"steve\" })\n        .Executes(ctx =>\n        {\n            ctx.Reply($\"Hello, {ctx.GetString(\"name\")}!\");\n            return 1;\n        })),\n    description: \"Greets someone\");\n```"
      ],
      "url": "/reference/api/commands/commandregistry/",
      "members": [
        {
          "name": "Register",
          "kind": "method",
          "signature": "public RegisteredCommand Register(CommandNode root, string[]? aliases = null, string description = \"\")",
          "parameters": [
            {
              "name": "root",
              "type": "CommandNode",
              "summary": "The root literal; build it with `Command.Literal`."
            },
            {
              "name": "aliases",
              "type": "string[]?",
              "default": "null",
              "summary": "Extra names that run the same command (they appear in the client's tree too)."
            },
            {
              "name": "description",
              "type": "string",
              "default": "\"\"",
              "summary": "A one-line description for help listings."
            }
          ],
          "returns": {
            "type": "RegisteredCommand",
            "summary": "The registration handle (dispose to unregister)."
          },
          "summary": "Registers a command tree.",
          "throws": [
            {
              "type": "System.InvalidOperationException",
              "summary": "The name is taken by a vanilla command or another plugin, or the server has no command engine."
            }
          ],
          "documented": true,
          "url": "/reference/api/commands/commandregistry/#register"
        },
        {
          "name": "Register",
          "kind": "method",
          "signature": "public RegisteredCommand Register(string name, CommandHandler handler, string description = \"\")",
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The command name."
            },
            {
              "name": "handler",
              "type": "CommandHandler",
              "summary": "The command body."
            },
            {
              "name": "description",
              "type": "string",
              "default": "\"\"",
              "summary": "A one-line description."
            }
          ],
          "returns": {
            "type": "RegisteredCommand",
            "summary": "The registration handle."
          },
          "summary": "Registers a flat command: the word `name` followed by anything. The handler reads `CommandContext.Args`. Prefer `CommandRegistry.Register` for typed arguments, suggestions and permissions.",
          "documented": true,
          "url": "/reference/api/commands/commandregistry/#register-1"
        }
      ]
    },
    {
      "name": "CommandSource",
      "fullName": "Mc.Scripting.Commands.CommandSource",
      "namespace": "Mc.Scripting.Commands",
      "kind": "class",
      "category": "commands",
      "categoryLabel": "Commands",
      "signature": "public sealed class CommandSource",
      "summary": "Who runs a command: a player or the console, with a permission level, a position and a dimension.",
      "url": "/reference/api/commands/commandsource/",
      "members": [
        {
          "name": "Entity",
          "kind": "property",
          "signature": "public Entity Entity { get; }",
          "returns": {
            "type": "Entity"
          },
          "summary": "The executing entity (`Entity.Null` for the console and command blocks).",
          "documented": true,
          "url": "/reference/api/commands/commandsource/#entity"
        },
        {
          "name": "IsConsole",
          "kind": "property",
          "signature": "public bool IsConsole { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the command runs from the server console.",
          "documented": true,
          "url": "/reference/api/commands/commandsource/#isconsole"
        },
        {
          "name": "PermissionLevel",
          "kind": "property",
          "signature": "public int PermissionLevel { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The vanilla permission level of the source (0-4).",
          "documented": true,
          "url": "/reference/api/commands/commandsource/#permissionlevel"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player? Player { get; }",
          "returns": {
            "type": "Player?"
          },
          "summary": "The executing player, null when the console or another entity runs the command.",
          "documented": true,
          "url": "/reference/api/commands/commandsource/#player"
        },
        {
          "name": "Position",
          "kind": "property",
          "signature": "public Vec3d Position { get; }",
          "returns": {
            "type": "Vec3d"
          },
          "summary": "The position the command runs at (the entity's position for players; the origin for the console).",
          "documented": true,
          "url": "/reference/api/commands/commandsource/#position"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension the command runs in.",
          "documented": true,
          "url": "/reference/api/commands/commandsource/#world"
        },
        {
          "name": "Failure",
          "kind": "method",
          "signature": "public void Failure(string message)",
          "parameters": [
            {
              "name": "message",
              "type": "string",
              "summary": "The text."
            }
          ],
          "summary": "Sends a red failure message to the source (the command is not aborted).",
          "documented": true,
          "url": "/reference/api/commands/commandsource/#failure"
        },
        {
          "name": "Success",
          "kind": "method",
          "signature": "public void Success(string message, bool broadcastToOps = false)",
          "parameters": [
            {
              "name": "message",
              "type": "string",
              "summary": "The text."
            },
            {
              "name": "broadcastToOps",
              "type": "bool",
              "default": "false",
              "summary": "Whether operators with feedback enabled see it as well."
            }
          ],
          "summary": "Sends feedback to the source (and, like vanilla, to operators when `broadcastToOps` is set).",
          "documented": true,
          "url": "/reference/api/commands/commandsource/#success"
        }
      ]
    },
    {
      "name": "DetachedCommand",
      "fullName": "Mc.Scripting.Commands.DetachedCommand",
      "namespace": "Mc.Scripting.Commands",
      "kind": "class",
      "category": "commands",
      "categoryLabel": "Commands",
      "signature": "public sealed class DetachedCommand",
      "summary": "What a command needed, copied out of a `CommandContext` so that it can be used after the executor returned (`CommandContext.Detach`).",
      "url": "/reference/api/commands/detachedcommand/",
      "members": [
        {
          "name": "Input",
          "kind": "property",
          "signature": "public string Input { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The whole command line without the leading slash.",
          "documented": true,
          "url": "/reference/api/commands/detachedcommand/#input"
        },
        {
          "name": "Name",
          "kind": "property",
          "signature": "public string Name { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The command word.",
          "documented": true,
          "url": "/reference/api/commands/detachedcommand/#name"
        },
        {
          "name": "PermissionLevel",
          "kind": "property",
          "signature": "public int PermissionLevel { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The vanilla permission level of the source when the command ran.",
          "documented": true,
          "url": "/reference/api/commands/detachedcommand/#permissionlevel"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player? Player { get; }",
          "returns": {
            "type": "Player?"
          },
          "summary": "The executing player, null for the console.",
          "documented": true,
          "url": "/reference/api/commands/detachedcommand/#player"
        },
        {
          "name": "Position",
          "kind": "property",
          "signature": "public Vec3d Position { get; }",
          "returns": {
            "type": "Vec3d"
          },
          "summary": "The position the command ran at.",
          "documented": true,
          "url": "/reference/api/commands/detachedcommand/#position"
        },
        {
          "name": "Sender",
          "kind": "property",
          "signature": "public Entity Sender { get; }",
          "returns": {
            "type": "Entity"
          },
          "summary": "The executing entity (`Entity.Null` for the console).",
          "documented": true,
          "url": "/reference/api/commands/detachedcommand/#sender"
        },
        {
          "name": "Reply",
          "kind": "method",
          "signature": "public void Reply(string message)",
          "parameters": [
            {
              "name": "message",
              "type": "string",
              "summary": "The text."
            }
          ],
          "summary": "Sends a plain message to whoever ran the command (nothing happens when the player left; call on the tick thread).",
          "documented": true,
          "url": "/reference/api/commands/detachedcommand/#reply"
        },
        {
          "name": "Reply",
          "kind": "method",
          "signature": "public void Reply(Component message)",
          "parameters": [
            {
              "name": "message",
              "type": "Component",
              "summary": "The component."
            }
          ],
          "summary": "Sends a rich message to whoever ran the command.",
          "documented": true,
          "url": "/reference/api/commands/detachedcommand/#reply-1"
        }
      ]
    },
    {
      "name": "RegisteredCommand",
      "fullName": "Mc.Scripting.Commands.RegisteredCommand",
      "namespace": "Mc.Scripting.Commands",
      "kind": "class",
      "category": "commands",
      "categoryLabel": "Commands",
      "signature": "public sealed class RegisteredCommand : IDisposable, IPluginResource",
      "interfaces": [
        "IDisposable",
        "IPluginResource"
      ],
      "summary": "A command registered through `CommandRegistry`. Dispose to unregister (plugin unload does it automatically).",
      "url": "/reference/api/commands/registeredcommand/",
      "members": [
        {
          "name": "Names",
          "kind": "property",
          "signature": "public IReadOnlyList<string> Names { get; }",
          "returns": {
            "type": "IReadOnlyList<string>"
          },
          "summary": "The names the command answers to (the main name first, then the aliases).",
          "documented": true,
          "url": "/reference/api/commands/registeredcommand/#names"
        },
        {
          "name": "Dispose",
          "kind": "method",
          "signature": "public void Dispose()",
          "summary": "Unregisters the command. Calling it again does nothing.",
          "documented": true,
          "url": "/reference/api/commands/registeredcommand/#dispose"
        }
      ]
    },
    {
      "name": "SuggestionContext",
      "fullName": "Mc.Scripting.Commands.SuggestionContext",
      "namespace": "Mc.Scripting.Commands",
      "kind": "class",
      "category": "commands",
      "categoryLabel": "Commands",
      "signature": "public sealed class SuggestionContext",
      "summary": "What an asynchronous suggestion provider gets: a copy of the request (the native command context does not outlive the call that started the provider).",
      "url": "/reference/api/commands/suggestioncontext/",
      "members": [
        {
          "name": "Input",
          "kind": "property",
          "signature": "public string Input { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The command line typed so far (without the leading slash).",
          "documented": true,
          "url": "/reference/api/commands/suggestioncontext/#input"
        },
        {
          "name": "PermissionLevel",
          "kind": "property",
          "signature": "public int PermissionLevel { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The permission level of the asker.",
          "documented": true,
          "url": "/reference/api/commands/suggestioncontext/#permissionlevel"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player? Player { get; }",
          "returns": {
            "type": "Player?"
          },
          "summary": "The player asking, null for the console.",
          "documented": true,
          "url": "/reference/api/commands/suggestioncontext/#player"
        },
        {
          "name": "Sender",
          "kind": "property",
          "signature": "public Entity Sender { get; }",
          "returns": {
            "type": "Entity"
          },
          "summary": "The player (or entity) asking; `Entity.Null` for the console.",
          "documented": true,
          "url": "/reference/api/commands/suggestioncontext/#sender"
        },
        {
          "name": "Typed",
          "kind": "property",
          "signature": "public string Typed { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The text typed so far for the argument being completed.",
          "documented": true,
          "url": "/reference/api/commands/suggestioncontext/#typed"
        }
      ]
    },
    {
      "name": "SuggestionProvider",
      "fullName": "Mc.Scripting.Commands.SuggestionProvider",
      "namespace": "Mc.Scripting.Commands",
      "kind": "delegate",
      "category": "commands",
      "categoryLabel": "Commands",
      "signature": "public delegate void SuggestionProvider(CommandContext context, SuggestionsBuilder builder)",
      "summary": "A suggestion provider: fills the builder with completions for the argument being typed.",
      "url": "/reference/api/commands/suggestionprovider/",
      "members": [],
      "parameters": [
        {
          "name": "context",
          "type": "CommandContext",
          "summary": "The parsed command so far (arguments before the one being typed are available)."
        },
        {
          "name": "builder",
          "type": "SuggestionsBuilder",
          "summary": "Collects the suggestions."
        }
      ],
      "returns": "void"
    },
    {
      "name": "SuggestionsBuilder",
      "fullName": "Mc.Scripting.Commands.SuggestionsBuilder",
      "namespace": "Mc.Scripting.Commands",
      "kind": "class",
      "category": "commands",
      "categoryLabel": "Commands",
      "signature": "public sealed class SuggestionsBuilder",
      "summary": "Collects the suggestions of one argument.",
      "url": "/reference/api/commands/suggestionsbuilder/",
      "members": [
        {
          "name": "Remaining",
          "kind": "property",
          "signature": "public string Remaining { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The text typed so far for the argument.",
          "documented": true,
          "url": "/reference/api/commands/suggestionsbuilder/#remaining"
        },
        {
          "name": "Suggest",
          "kind": "method",
          "signature": "public void Suggest(int value)",
          "parameters": [
            {
              "name": "value",
              "type": "int",
              "summary": "The number."
            }
          ],
          "summary": "Offers an integer completion.",
          "documented": true,
          "url": "/reference/api/commands/suggestionsbuilder/#suggest"
        },
        {
          "name": "Suggest",
          "kind": "method",
          "signature": "public void Suggest(string text, string? tooltip = null)",
          "parameters": [
            {
              "name": "text",
              "type": "string",
              "summary": "The word to insert."
            },
            {
              "name": "tooltip",
              "type": "string?",
              "default": "null",
              "summary": "Optional hover text shown next to it."
            }
          ],
          "summary": "Offers a completion. Like vanilla's `matchesSubStr`, completions that do not match `SuggestionsBuilder.Remaining` are dropped: the typed text must be a case-insensitive prefix of the completion or of a part of it after a `.`, `_` or `/`.",
          "documented": true,
          "url": "/reference/api/commands/suggestionsbuilder/#suggest-1"
        }
      ]
    },
    {
      "name": "Component<T>",
      "fullName": "Mc.Scripting.Component`1",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "ecs",
      "categoryLabel": "Entities, components, queries",
      "signature": "public static class Component<T> where T : unmanaged",
      "typeParameters": [
        "T"
      ],
      "summary": "Per-type component id cache. Set by `Ecs.RegisterComponent`.",
      "remarks": "The cache is one slot per CLR type for the whole process, so a component type must be owned by a single plugin (declare your own struct; do not register a shared type such as `Vec3d` under different keys from different plugins). Registering a type that is already bound to another key throws. The binding is cleared when the registering plugin unloads.\n\nYou rarely use this type directly: `Ecs.RegisterComponent<T>(key)` fills it, and `Entity.Get<T>()` and friends read the cached id from it.",
      "url": "/reference/api/ecs/component-1/",
      "members": [
        {
          "name": "Id",
          "kind": "property",
          "signature": "public static ulong Id { get; }",
          "static": true,
          "returns": {
            "type": "ulong"
          },
          "summary": "ECS component id, 0 if not registered.",
          "documented": true,
          "url": "/reference/api/ecs/component-1/#id"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string? Key { get; }",
          "static": true,
          "returns": {
            "type": "string?"
          },
          "summary": "The key the component type is registered under, null if unregistered.",
          "documented": true,
          "url": "/reference/api/ecs/component-1/#key"
        }
      ]
    },
    {
      "name": "Config<T>",
      "fullName": "Mc.Scripting.Configuration.Config`1",
      "namespace": "Mc.Scripting.Configuration",
      "kind": "class",
      "category": "config",
      "categoryLabel": "Config and data",
      "signature": "public sealed class Config<T> : IDisposable, IPluginResource where T : class, new()",
      "interfaces": [
        "IDisposable",
        "IPluginResource"
      ],
      "typeParameters": [
        "T"
      ],
      "summary": "A typed, JSON-backed configuration file of a plugin (`plugins/<id>/config.json` by default). Defaults (the values of a freshly constructed `T`, including property initialisers) are written on first run; the file is read with comments and trailing commas allowed. Describe `T` with System.Text.Json source generation so loading needs no reflection.",
      "examples": [
        "```csharp\npublic sealed class HomesConfig { public int MaxHomes { get; set; } = 3; public int CooldownSeconds { get; set; } = 5; }\n[JsonSerializable(typeof(HomesConfig))] partial class Json : JsonSerializerContext;\nvar config = Config.Load(Json.Default.HomesConfig);   // config.Value.MaxHomes\n\n```"
      ],
      "url": "/reference/api/config/config-1/",
      "members": [
        {
          "name": "Path",
          "kind": "property",
          "signature": "public string Path { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The path of the file.",
          "documented": true,
          "url": "/reference/api/config/config-1/#path"
        },
        {
          "name": "Value",
          "kind": "property",
          "signature": "public T Value { get; }",
          "returns": {
            "type": "T"
          },
          "summary": "The current values: an immutable snapshot replaced as a whole on `Config.Reload` (safe to read from any thread).",
          "documented": true,
          "url": "/reference/api/config/config-1/#value"
        },
        {
          "name": "Watch",
          "kind": "property",
          "signature": "public bool Watch { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the file is watched: edits on disk are picked up (debounced) and reported through `Config.Changed`.",
          "documented": true,
          "url": "/reference/api/config/config-1/#watch"
        },
        {
          "name": "Dispose",
          "kind": "method",
          "signature": "public void Dispose()",
          "documented": false,
          "url": "/reference/api/config/config-1/#dispose"
        },
        {
          "name": "Reload",
          "kind": "method",
          "signature": "public bool Reload()",
          "returns": {
            "type": "bool",
            "summary": "True when the file was read successfully."
          },
          "summary": "Re-reads the file. A parse error keeps the previous value, logs the file and line, and never overwrites the file.",
          "documented": true,
          "url": "/reference/api/config/config-1/#reload"
        },
        {
          "name": "Save",
          "kind": "method",
          "signature": "public void Save()",
          "summary": "Writes the current value to the file (pretty-printed). Use it after changing a copy of `Config.Value` with `Config.Update`.",
          "documented": true,
          "url": "/reference/api/config/config-1/#save"
        },
        {
          "name": "Update",
          "kind": "method",
          "signature": "public void Update(T value)",
          "parameters": [
            {
              "name": "value",
              "type": "T",
              "summary": "The new value."
            }
          ],
          "summary": "Replaces the value (and saves it).",
          "documented": true,
          "url": "/reference/api/config/config-1/#update"
        },
        {
          "name": "Changed",
          "kind": "event",
          "signature": "public event Action<T>? Changed;",
          "returns": {
            "type": "Action<T>?"
          },
          "summary": "Raised after a reload that produced a new value (also when the file changed on disk with `Config.Watch` on), on the tick thread.",
          "documented": true,
          "url": "/reference/api/config/config-1/#changed"
        }
      ]
    },
    {
      "name": "PluginConfig",
      "fullName": "Mc.Scripting.Configuration.PluginConfig",
      "namespace": "Mc.Scripting.Configuration",
      "kind": "class",
      "category": "config",
      "categoryLabel": "Config and data",
      "signature": "public sealed class PluginConfig",
      "summary": "Plugin-scoped access to configuration files (`plugin.Config`) and the data folder.",
      "url": "/reference/api/config/pluginconfig/",
      "members": [
        {
          "name": "DataFolder",
          "kind": "property",
          "signature": "public string DataFolder { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The plugin's data folder (`plugins/<id>/`), created on first access. Put every file the plugin writes here.",
          "documented": true,
          "url": "/reference/api/config/pluginconfig/#datafolder"
        },
        {
          "name": "Load",
          "kind": "method",
          "signature": "public Config<T> Load<T>(JsonTypeInfo<T> typeInfo, string fileName = \"config.json\") where T : class, new()",
          "parameters": [
            {
              "name": "typeInfo",
              "type": "JsonTypeInfo<T>",
              "summary": "Source-generated type info, e.g. `MyJson.Default.HomesConfig`."
            },
            {
              "name": "fileName",
              "type": "string",
              "default": "\"config.json\"",
              "summary": "The file name (default \"config.json\")."
            }
          ],
          "returns": {
            "type": "Config<T>",
            "summary": "The config. It is a resource of the plugin: watchers stop when the plugin unloads."
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : class, new()"
          ],
          "summary": "Loads (and creates, with defaults, when missing) a JSON config file in the data folder.",
          "documented": true,
          "url": "/reference/api/config/pluginconfig/#loadt"
        },
        {
          "name": "ReadText",
          "kind": "method",
          "signature": "public string? ReadText(string fileName)",
          "parameters": [
            {
              "name": "fileName",
              "type": "string",
              "summary": "The file name."
            }
          ],
          "returns": {
            "type": "string?"
          },
          "summary": "Reads a text file of the data folder, null when it does not exist.",
          "throws": [
            {
              "type": "System.ArgumentException",
              "summary": "The name is rooted, contains `..` or an invalid character, or resolves outside the data folder."
            }
          ],
          "documented": true,
          "url": "/reference/api/config/pluginconfig/#readtext"
        },
        {
          "name": "WriteText",
          "kind": "method",
          "signature": "public void WriteText(string fileName, string text)",
          "parameters": [
            {
              "name": "fileName",
              "type": "string",
              "summary": "The file name."
            },
            {
              "name": "text",
              "type": "string",
              "summary": "The content."
            }
          ],
          "summary": "Writes a text file of the data folder atomically (temp file + rename).",
          "documented": true,
          "url": "/reference/api/config/pluginconfig/#writetext"
        }
      ]
    },
    {
      "name": "BlockBreakContext",
      "fullName": "Mc.Scripting.Content.BlockBreakContext",
      "namespace": "Mc.Scripting.Content",
      "kind": "class",
      "category": "content",
      "categoryLabel": "Custom content",
      "signature": "public sealed class BlockBreakContext",
      "summary": "What a custom block's break handler gets. Valid during the handler only.",
      "url": "/reference/api/content/blockbreakcontext/",
      "members": [
        {
          "name": "Block",
          "kind": "property",
          "signature": "public CustomBlock Block { get; }",
          "returns": {
            "type": "CustomBlock"
          },
          "summary": "The block definition.",
          "documented": true,
          "url": "/reference/api/content/blockbreakcontext/#block"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Keeps the block (nothing breaks).",
          "documented": true,
          "url": "/reference/api/content/blockbreakcontext/#cancelled"
        },
        {
          "name": "DropItems",
          "kind": "property",
          "signature": "public bool DropItems { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the drops of the block are spawned (default true; nothing drops in creative mode anyway).",
          "documented": true,
          "url": "/reference/api/content/blockbreakcontext/#dropitems"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player breaking it.",
          "documented": true,
          "url": "/reference/api/content/blockbreakcontext/#player"
        },
        {
          "name": "Position",
          "kind": "property",
          "signature": "public BlockPos Position { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The position.",
          "documented": true,
          "url": "/reference/api/content/blockbreakcontext/#position"
        },
        {
          "name": "Tool",
          "kind": "property",
          "signature": "public ItemStack Tool { get; }",
          "returns": {
            "type": "ItemStack"
          },
          "summary": "The tool in the player's hand.",
          "documented": true,
          "url": "/reference/api/content/blockbreakcontext/#tool"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/content/blockbreakcontext/#world"
        }
      ]
    },
    {
      "name": "BlockInteractContext",
      "fullName": "Mc.Scripting.Content.BlockInteractContext",
      "namespace": "Mc.Scripting.Content",
      "kind": "class",
      "category": "content",
      "categoryLabel": "Custom content",
      "signature": "public sealed class BlockInteractContext",
      "summary": "What a custom block's interact handler gets. Valid during the handler only.",
      "url": "/reference/api/content/blockinteractcontext/",
      "members": [
        {
          "name": "Block",
          "kind": "property",
          "signature": "public CustomBlock Block { get; }",
          "returns": {
            "type": "CustomBlock"
          },
          "summary": "The block definition.",
          "documented": true,
          "url": "/reference/api/content/blockinteractcontext/#block"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Stops the item use after the block (placing a block against it, the held item's own use).",
          "documented": true,
          "url": "/reference/api/content/blockinteractcontext/#cancelled"
        },
        {
          "name": "Face",
          "kind": "property",
          "signature": "public BlockFace Face { get; }",
          "returns": {
            "type": "BlockFace"
          },
          "summary": "The clicked face.",
          "documented": true,
          "url": "/reference/api/content/blockinteractcontext/#face"
        },
        {
          "name": "Hand",
          "kind": "property",
          "signature": "public Hand Hand { get; }",
          "returns": {
            "type": "Hand"
          },
          "summary": "The hand.",
          "documented": true,
          "url": "/reference/api/content/blockinteractcontext/#hand"
        },
        {
          "name": "Item",
          "kind": "property",
          "signature": "public ItemStack Item { get; }",
          "returns": {
            "type": "ItemStack"
          },
          "summary": "The stack in that hand.",
          "documented": true,
          "url": "/reference/api/content/blockinteractcontext/#item"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/content/blockinteractcontext/#player"
        },
        {
          "name": "Position",
          "kind": "property",
          "signature": "public BlockPos Position { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The position of the block.",
          "documented": true,
          "url": "/reference/api/content/blockinteractcontext/#position"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/content/blockinteractcontext/#world"
        }
      ]
    },
    {
      "name": "BlockPlaceContext",
      "fullName": "Mc.Scripting.Content.BlockPlaceContext",
      "namespace": "Mc.Scripting.Content",
      "kind": "class",
      "category": "content",
      "categoryLabel": "Custom content",
      "signature": "public sealed class BlockPlaceContext",
      "summary": "What a custom block's place handler gets. Valid during the handler only.",
      "url": "/reference/api/content/blockplacecontext/",
      "members": [
        {
          "name": "Against",
          "kind": "property",
          "signature": "public BlockPos Against { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The block that was clicked.",
          "documented": true,
          "url": "/reference/api/content/blockplacecontext/#against"
        },
        {
          "name": "Block",
          "kind": "property",
          "signature": "public CustomBlock Block { get; }",
          "returns": {
            "type": "CustomBlock"
          },
          "summary": "The block definition.",
          "documented": true,
          "url": "/reference/api/content/blockplacecontext/#block"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Refuses the placement.",
          "documented": true,
          "url": "/reference/api/content/blockplacecontext/#cancelled"
        },
        {
          "name": "Hand",
          "kind": "property",
          "signature": "public Hand Hand { get; }",
          "returns": {
            "type": "Hand"
          },
          "summary": "The hand.",
          "documented": true,
          "url": "/reference/api/content/blockplacecontext/#hand"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/content/blockplacecontext/#player"
        },
        {
          "name": "Position",
          "kind": "property",
          "signature": "public BlockPos Position { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "Where the block is placed.",
          "documented": true,
          "url": "/reference/api/content/blockplacecontext/#position"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/content/blockplacecontext/#world"
        }
      ]
    },
    {
      "name": "BlockRegistry",
      "fullName": "Mc.Scripting.Content.BlockRegistry",
      "namespace": "Mc.Scripting.Content",
      "kind": "class",
      "category": "content",
      "categoryLabel": "Custom content",
      "signature": "public sealed class BlockRegistry",
      "summary": "Registers custom blocks.",
      "url": "/reference/api/content/blockregistry/",
      "members": [
        {
          "name": "All",
          "kind": "property",
          "signature": "public IReadOnlyList<CustomBlock> All { get; }",
          "returns": {
            "type": "IReadOnlyList<CustomBlock>"
          },
          "summary": "Every registered block (a snapshot).",
          "documented": true,
          "url": "/reference/api/content/blockregistry/#all"
        },
        {
          "name": "At",
          "kind": "method",
          "signature": "public CustomBlock? At(World world, BlockPos pos)",
          "parameters": [
            {
              "name": "world",
              "type": "World",
              "summary": "The dimension."
            },
            {
              "name": "pos",
              "type": "BlockPos",
              "summary": "The position."
            }
          ],
          "returns": {
            "type": "CustomBlock?",
            "summary": "The definition, or null when the block there is not a registered custom block."
          },
          "summary": "The custom block a world position holds.",
          "documented": true,
          "url": "/reference/api/content/blockregistry/#at"
        },
        {
          "name": "Get",
          "kind": "method",
          "signature": "public CustomBlock? Get(string id)",
          "parameters": [
            {
              "name": "id",
              "type": "string",
              "summary": "The id."
            }
          ],
          "returns": {
            "type": "CustomBlock?",
            "summary": "The definition, or null."
          },
          "summary": "The registered block with this id.",
          "documented": true,
          "url": "/reference/api/content/blockregistry/#get"
        },
        {
          "name": "Of",
          "kind": "method",
          "signature": "public CustomBlock? Of(BlockState state)",
          "parameters": [
            {
              "name": "state",
              "type": "BlockState",
              "summary": "The state."
            }
          ],
          "returns": {
            "type": "CustomBlock?",
            "summary": "The definition, or null."
          },
          "summary": "The custom block a block state stands for.",
          "documented": true,
          "url": "/reference/api/content/blockregistry/#of"
        },
        {
          "name": "Register",
          "kind": "method",
          "signature": "public void Register(CustomBlock block)",
          "parameters": [
            {
              "name": "block",
              "type": "CustomBlock",
              "summary": "The definition."
            }
          ],
          "summary": "Registers a block for the plugin whose code is running: picks its block state (the same one after a restart), marks it custom in the engine and starts listening for its breaking and clicking. Released when the plugin unloads.",
          "throws": [
            {
              "type": "System.InvalidOperationException",
              "summary": "The id is taken by another plugin, no state is free, or no plugin code is running."
            }
          ],
          "documented": true,
          "url": "/reference/api/content/blockregistry/#register"
        }
      ]
    },
    {
      "name": "Content",
      "fullName": "Mc.Scripting.Content.Content",
      "namespace": "Mc.Scripting.Content",
      "kind": "class",
      "category": "content",
      "categoryLabel": "Custom content",
      "signature": "public static class Content",
      "summary": "Entry point of the custom content API: `Content.Items` and `Content.Blocks` (and `ResourcePackBuilder`, `ResourcePackHost`).",
      "url": "/reference/api/content/content/",
      "members": [
        {
          "name": "Blocks",
          "kind": "property",
          "signature": "public static BlockRegistry Blocks { get; }",
          "static": true,
          "returns": {
            "type": "BlockRegistry"
          },
          "summary": "Custom blocks.",
          "documented": true,
          "url": "/reference/api/content/content/#blocks"
        },
        {
          "name": "Items",
          "kind": "property",
          "signature": "public static ItemRegistry Items { get; }",
          "static": true,
          "returns": {
            "type": "ItemRegistry"
          },
          "summary": "Custom items.",
          "documented": true,
          "url": "/reference/api/content/content/#items"
        }
      ]
    },
    {
      "name": "CustomBlock",
      "fullName": "Mc.Scripting.Content.CustomBlock",
      "namespace": "Mc.Scripting.Content",
      "kind": "class",
      "category": "content",
      "categoryLabel": "Custom content",
      "signature": "public sealed class CustomBlock",
      "summary": "A custom block: a state of a vanilla block that vanilla play seldom produces (and never turns a block into: the engine guards it), with its own hardness, drops and behaviour. The world stores a plain vanilla block state (so a server without the plugin shows a note block, never a corrupt chunk); a resource pack gives that state its own model (`ResourcePackBuilder.AddCustomBlock`).",
      "remarks": "**Which state.** Custom blocks live in the note block's states with a mob head instrument (the ones nobody gets without a head above the block), 175 of them, handed out in registration order and remembered in the file named by `content.state_file` in Ramjet.toml, so the same id gets the same state after a restart. `CustomBlock.BaseBlock` names the family: only `minecraft:note_block` exists in this version. While a block is registered the vanilla note block behaviour (tuning, notes, the instrument following the block below) is suppressed for its state.\n\n**Mining.** The server decides how long a block takes to break, from `CustomBlock.HardnessValue`; the client predicts it from the note block (hardness 0.8), so a block that takes much longer than that appears to break on the client and comes back (the server refuses to finish it early): keep custom hardness near 0.8 or lower for smooth mining.",
      "url": "/reference/api/content/customblock/",
      "members": [
        {
          "name": "CustomBlock",
          "kind": "ctor",
          "signature": "public CustomBlock(string id, string baseBlock = \"minecraft:note_block\")",
          "parameters": [
            {
              "name": "id",
              "type": "string",
              "summary": "The id of the block, `\"myplugin:ruby_ore\"`."
            },
            {
              "name": "baseBlock",
              "type": "string",
              "default": "\"minecraft:note_block\"",
              "summary": "The vanilla block whose state space hosts it (only `minecraft:note_block`)."
            }
          ],
          "summary": "Creates a definition.",
          "documented": true,
          "url": "/reference/api/content/customblock/#constructor"
        },
        {
          "name": "BaseBlock",
          "kind": "property",
          "signature": "public string BaseBlock { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The vanilla block whose states host it.",
          "documented": true,
          "url": "/reference/api/content/customblock/#baseblock"
        },
        {
          "name": "HardnessValue",
          "kind": "property",
          "signature": "public float HardnessValue { get; }",
          "returns": {
            "type": "float"
          },
          "summary": "How long it takes to mine (vanilla hardness; negative = unbreakable).",
          "documented": true,
          "url": "/reference/api/content/customblock/#hardnessvalue"
        },
        {
          "name": "Id",
          "kind": "property",
          "signature": "public string Id { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The id.",
          "documented": true,
          "url": "/reference/api/content/customblock/#id"
        },
        {
          "name": "ModelId",
          "kind": "property",
          "signature": "public string? ModelId { get; }",
          "returns": {
            "type": "string?"
          },
          "summary": "The model id of the block in the resource pack (`assets/myplugin/models/block/ruby_ore.json` is `\"myplugin:block/ruby_ore\"`), or null.",
          "documented": true,
          "url": "/reference/api/content/customblock/#modelid"
        },
        {
          "name": "State",
          "kind": "property",
          "signature": "public BlockState State { get; }",
          "returns": {
            "type": "BlockState"
          },
          "summary": "The block state that stands for the block in the world (valid after registration).",
          "documented": true,
          "url": "/reference/api/content/customblock/#state"
        },
        {
          "name": "Drops",
          "kind": "method",
          "signature": "public CustomBlock Drops(Func<BlockBreakContext, IEnumerable<ItemStack>> drops)",
          "parameters": [
            {
              "name": "drops",
              "type": "Func<BlockBreakContext, IEnumerable<ItemStack>>",
              "summary": "Gives the stacks to drop."
            }
          ],
          "returns": {
            "type": "CustomBlock",
            "summary": "This definition."
          },
          "summary": "Sets what the block drops when a player breaks it (nothing drops in creative mode, and nothing by default).",
          "documented": true,
          "url": "/reference/api/content/customblock/#drops"
        },
        {
          "name": "DropsItem",
          "kind": "method",
          "signature": "public CustomBlock DropsItem(CustomItem item, int count = 1)",
          "parameters": [
            {
              "name": "item",
              "type": "CustomItem",
              "summary": "The item."
            },
            {
              "name": "count",
              "type": "int",
              "default": "1",
              "summary": "How many."
            }
          ],
          "returns": {
            "type": "CustomBlock",
            "summary": "This definition."
          },
          "summary": "The block drops this item (a registered custom item or any stack) when broken.",
          "documented": true,
          "url": "/reference/api/content/customblock/#dropsitem"
        },
        {
          "name": "Hardness",
          "kind": "method",
          "signature": "public CustomBlock Hardness(float hardness)",
          "parameters": [
            {
              "name": "hardness",
              "type": "float",
              "summary": "The hardness (stone is 1.5; negative = unbreakable)."
            }
          ],
          "returns": {
            "type": "CustomBlock",
            "summary": "This definition."
          },
          "summary": "Sets the hardness.",
          "documented": true,
          "url": "/reference/api/content/customblock/#hardness"
        },
        {
          "name": "Model",
          "kind": "method",
          "signature": "public CustomBlock Model(string modelId)",
          "parameters": [
            {
              "name": "modelId",
              "type": "string",
              "summary": "The block model id, `\"myplugin:block/ruby_ore\"`."
            }
          ],
          "returns": {
            "type": "CustomBlock",
            "summary": "This definition."
          },
          "summary": "Sets the model the resource pack gives the block (used by `ResourcePackBuilder.AddCustomBlock`).",
          "documented": true,
          "url": "/reference/api/content/customblock/#model"
        },
        {
          "name": "OnBreak",
          "kind": "method",
          "signature": "public CustomBlock OnBreak(Action<BlockBreakContext> handler)",
          "parameters": [
            {
              "name": "handler",
              "type": "Action<BlockBreakContext>",
              "summary": "The handler."
            }
          ],
          "returns": {
            "type": "CustomBlock",
            "summary": "This definition."
          },
          "summary": "Sets what happens when a player breaks the block (before the drops; cancel the context to keep the block).",
          "documented": true,
          "url": "/reference/api/content/customblock/#onbreak"
        },
        {
          "name": "OnInteract",
          "kind": "method",
          "signature": "public CustomBlock OnInteract(Action<BlockInteractContext> handler)",
          "parameters": [
            {
              "name": "handler",
              "type": "Action<BlockInteractContext>",
              "summary": "The handler."
            }
          ],
          "returns": {
            "type": "CustomBlock",
            "summary": "This definition."
          },
          "summary": "Sets what happens when a player right-clicks the block (sneaking with an item in hand skips it, like vanilla blocks).",
          "documented": true,
          "url": "/reference/api/content/customblock/#oninteract"
        },
        {
          "name": "OnPlace",
          "kind": "method",
          "signature": "public CustomBlock OnPlace(Action<BlockPlaceContext> handler)",
          "parameters": [
            {
              "name": "handler",
              "type": "Action<BlockPlaceContext>",
              "summary": "The handler."
            }
          ],
          "returns": {
            "type": "CustomBlock",
            "summary": "This definition."
          },
          "summary": "Sets what happens when a player places the block with a custom item (`CustomItem.Places`); cancel the context to refuse.",
          "documented": true,
          "url": "/reference/api/content/customblock/#onplace"
        },
        {
          "name": "Place",
          "kind": "method",
          "signature": "public bool Place(World world, BlockPos pos)",
          "parameters": [
            {
              "name": "world",
              "type": "World",
              "summary": "The dimension."
            },
            {
              "name": "pos",
              "type": "BlockPos",
              "summary": "The position."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when the block was set."
          },
          "summary": "Puts the block into the world (registered blocks only).",
          "documented": true,
          "url": "/reference/api/content/customblock/#place"
        }
      ]
    },
    {
      "name": "CustomItem",
      "fullName": "Mc.Scripting.Content.CustomItem",
      "namespace": "Mc.Scripting.Content",
      "kind": "class",
      "category": "content",
      "categoryLabel": "Custom content",
      "signature": "public sealed class CustomItem",
      "summary": "A custom item: a vanilla item the client already knows (the base item decides the id the client sees and the behaviour class) carrying data components that make it a different item: `custom_data` (the id, found again with `ItemStack.CustomId`), `item_model` (the look, from a resource pack), a name, lore, a stack size and a rarity. No client mod is needed. Register it with `ItemRegistry.Register`, hand out stacks with `CustomItem.CreateStack`.",
      "remarks": "Choose an inert base item (`minecraft:paper`, `minecraft:stick`, `minecraft:amethyst_shard`): the vanilla behaviour of the base item still happens unless a use handler cancels it. Stacks keep their id when the plugin is unloaded; they behave like the base item until it is back.",
      "url": "/reference/api/content/customitem/",
      "members": [
        {
          "name": "CustomItem",
          "kind": "ctor",
          "signature": "public CustomItem(string id, string baseItem)",
          "parameters": [
            {
              "name": "id",
              "type": "string",
              "summary": "The id of the item, `\"myplugin:ruby\"`."
            },
            {
              "name": "baseItem",
              "type": "string",
              "summary": "The vanilla item it is built on, `\"minecraft:paper\"`."
            }
          ],
          "summary": "Creates a definition.",
          "documented": true,
          "url": "/reference/api/content/customitem/#constructor"
        },
        {
          "name": "BaseItem",
          "kind": "property",
          "signature": "public string BaseItem { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The vanilla base item.",
          "documented": true,
          "url": "/reference/api/content/customitem/#baseitem"
        },
        {
          "name": "CooldownTicks",
          "kind": "property",
          "signature": "public int CooldownTicks { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Ticks a player waits between two uses (0 for none).",
          "documented": true,
          "url": "/reference/api/content/customitem/#cooldownticks"
        },
        {
          "name": "DisplayName",
          "kind": "property",
          "signature": "public Component? DisplayName { get; }",
          "returns": {
            "type": "Component?"
          },
          "summary": "The display name.",
          "documented": true,
          "url": "/reference/api/content/customitem/#displayname"
        },
        {
          "name": "HasGlint",
          "kind": "property",
          "signature": "public bool? HasGlint { get; }",
          "returns": {
            "type": "bool?"
          },
          "summary": "The enchantment glint (null: the item's own).",
          "documented": true,
          "url": "/reference/api/content/customitem/#hasglint"
        },
        {
          "name": "Id",
          "kind": "property",
          "signature": "public string Id { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The id.",
          "documented": true,
          "url": "/reference/api/content/customitem/#id"
        },
        {
          "name": "LoreLines",
          "kind": "property",
          "signature": "public IReadOnlyList<Component> LoreLines { get; }",
          "returns": {
            "type": "IReadOnlyList<Component>"
          },
          "summary": "The lore lines.",
          "documented": true,
          "url": "/reference/api/content/customitem/#lorelines"
        },
        {
          "name": "MaxStackSize",
          "kind": "property",
          "signature": "public int MaxStackSize { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The maximum stack size, 0 for the base item's own.",
          "documented": true,
          "url": "/reference/api/content/customitem/#maxstacksize"
        },
        {
          "name": "ModelId",
          "kind": "property",
          "signature": "public string? ModelId { get; }",
          "returns": {
            "type": "string?"
          },
          "summary": "The item model id (an item definition of the resource pack), or null for the base item's own.",
          "documented": true,
          "url": "/reference/api/content/customitem/#modelid"
        },
        {
          "name": "PlacesBlock",
          "kind": "property",
          "signature": "public string? PlacesBlock { get; }",
          "returns": {
            "type": "string?"
          },
          "summary": "The id of the custom block the item places when used on a block, or null.",
          "documented": true,
          "url": "/reference/api/content/customitem/#placesblock"
        },
        {
          "name": "Rarity",
          "kind": "property",
          "signature": "public ItemRarity? Rarity { get; }",
          "returns": {
            "type": "ItemRarity?"
          },
          "summary": "The rarity, null for the base item's own.",
          "documented": true,
          "url": "/reference/api/content/customitem/#rarity"
        },
        {
          "name": "UseHandler",
          "kind": "property",
          "signature": "public Action<ItemUseContext>? UseHandler { get; }",
          "returns": {
            "type": "Action<ItemUseContext>?"
          },
          "summary": "The handler called when a player uses the item in the air or on a block.",
          "documented": true,
          "url": "/reference/api/content/customitem/#usehandler"
        },
        {
          "name": "UseOnHandler",
          "kind": "property",
          "signature": "public Action<ItemUseContext>? UseOnHandler { get; }",
          "returns": {
            "type": "Action<ItemUseContext>?"
          },
          "summary": "The handler called when a player uses the item on a block.",
          "documented": true,
          "url": "/reference/api/content/customitem/#useonhandler"
        },
        {
          "name": "Cooldown",
          "kind": "method",
          "signature": "public CustomItem Cooldown(int ticks)",
          "parameters": [
            {
              "name": "ticks",
              "type": "int",
              "summary": "The wait in ticks (20 = 1 second)."
            }
          ],
          "returns": {
            "type": "CustomItem",
            "summary": "This definition."
          },
          "summary": "Makes a player wait between two uses: further uses are ignored (cancelled) during the cooldown.",
          "documented": true,
          "url": "/reference/api/content/customitem/#cooldown"
        },
        {
          "name": "CreateStack",
          "kind": "method",
          "signature": "public ItemStack CreateStack(int count = 1)",
          "parameters": [
            {
              "name": "count",
              "type": "int",
              "default": "1",
              "summary": "The stack size."
            }
          ],
          "returns": {
            "type": "ItemStack",
            "summary": "The stack."
          },
          "summary": "A stack of the item with every component of the definition.",
          "documented": true,
          "url": "/reference/api/content/customitem/#createstack"
        },
        {
          "name": "Glint",
          "kind": "method",
          "signature": "public CustomItem Glint(bool glint = true)",
          "parameters": [
            {
              "name": "glint",
              "type": "bool",
              "default": "true",
              "summary": "Whether the item glows."
            }
          ],
          "returns": {
            "type": "CustomItem",
            "summary": "This definition."
          },
          "summary": "Forces the enchantment glint on or off.",
          "documented": true,
          "url": "/reference/api/content/customitem/#glint"
        },
        {
          "name": "Lore",
          "kind": "method",
          "signature": "public CustomItem Lore(params Component[] lines)",
          "parameters": [
            {
              "name": "lines",
              "type": "Component[]",
              "modifier": "params",
              "summary": "The lines."
            }
          ],
          "returns": {
            "type": "CustomItem",
            "summary": "This definition."
          },
          "summary": "Sets the lore lines.",
          "documented": true,
          "url": "/reference/api/content/customitem/#lore"
        },
        {
          "name": "Matches",
          "kind": "method",
          "signature": "public bool Matches(ItemStack stack)",
          "parameters": [
            {
              "name": "stack",
              "type": "ItemStack",
              "summary": "The stack."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when it is."
          },
          "summary": "Whether a stack is an instance of this item (its `ItemStack.CustomId` is the id).",
          "documented": true,
          "url": "/reference/api/content/customitem/#matches"
        },
        {
          "name": "MaxStack",
          "kind": "method",
          "signature": "public CustomItem MaxStack(int max)",
          "parameters": [
            {
              "name": "max",
              "type": "int",
              "summary": "1 to 99."
            }
          ],
          "returns": {
            "type": "CustomItem",
            "summary": "This definition."
          },
          "summary": "Sets the maximum stack size.",
          "documented": true,
          "url": "/reference/api/content/customitem/#maxstack"
        },
        {
          "name": "Model",
          "kind": "method",
          "signature": "public CustomItem Model(string modelId)",
          "parameters": [
            {
              "name": "modelId",
              "type": "string",
              "summary": "The id of an item definition in the resource pack (`assets/myplugin/items/ruby.json` is `\"myplugin:ruby\"`)."
            }
          ],
          "returns": {
            "type": "CustomItem",
            "summary": "This definition."
          },
          "summary": "Sets the item model (`minecraft:item_model`).",
          "documented": true,
          "url": "/reference/api/content/customitem/#model"
        },
        {
          "name": "Name",
          "kind": "method",
          "signature": "public CustomItem Name(Component name)",
          "parameters": [
            {
              "name": "name",
              "type": "Component",
              "summary": "The name."
            }
          ],
          "returns": {
            "type": "CustomItem",
            "summary": "This definition."
          },
          "summary": "Sets the display name (`minecraft:item_name`: not italic, replaced by an anvil rename).",
          "documented": true,
          "url": "/reference/api/content/customitem/#name"
        },
        {
          "name": "OnUse",
          "kind": "method",
          "signature": "public CustomItem OnUse(Action<ItemUseContext> handler)",
          "parameters": [
            {
              "name": "handler",
              "type": "Action<ItemUseContext>",
              "summary": "The handler."
            }
          ],
          "returns": {
            "type": "CustomItem",
            "summary": "This definition."
          },
          "summary": "Sets what happens when a player uses the item (right click in the air or on a block). Cancel the context to stop the vanilla behaviour of the base item.",
          "documented": true,
          "url": "/reference/api/content/customitem/#onuse"
        },
        {
          "name": "OnUseOn",
          "kind": "method",
          "signature": "public CustomItem OnUseOn(Action<ItemUseContext> handler)",
          "parameters": [
            {
              "name": "handler",
              "type": "Action<ItemUseContext>",
              "summary": "The handler."
            }
          ],
          "returns": {
            "type": "CustomItem",
            "summary": "This definition."
          },
          "summary": "Sets what happens when a player uses the item on a block (after {{cref:M:Mc.Scripting.Content.CustomItem.OnUse(System.Action{Mc.Scripting.Content.ItemUseContext})}}).",
          "documented": true,
          "url": "/reference/api/content/customitem/#onuseon"
        },
        {
          "name": "Places",
          "kind": "method",
          "signature": "public CustomItem Places(CustomBlock block)",
          "parameters": [
            {
              "name": "block",
              "type": "CustomBlock",
              "summary": "The block (registered by the same plugin)."
            }
          ],
          "returns": {
            "type": "CustomItem",
            "summary": "This definition."
          },
          "summary": "Makes the item place a custom block against the clicked face (and use up one item).",
          "documented": true,
          "url": "/reference/api/content/customitem/#places"
        },
        {
          "name": "WithRarity",
          "kind": "method",
          "signature": "public CustomItem WithRarity(ItemRarity rarity)",
          "parameters": [
            {
              "name": "rarity",
              "type": "ItemRarity",
              "summary": "The rarity."
            }
          ],
          "returns": {
            "type": "CustomItem",
            "summary": "This definition."
          },
          "summary": "Sets the rarity.",
          "documented": true,
          "url": "/reference/api/content/customitem/#withrarity"
        }
      ]
    },
    {
      "name": "ItemRarity",
      "fullName": "Mc.Scripting.Content.ItemRarity",
      "namespace": "Mc.Scripting.Content",
      "kind": "enum",
      "category": "content",
      "categoryLabel": "Custom content",
      "signature": "public enum ItemRarity : int",
      "summary": "How rare an item is (the colour of its name).",
      "url": "/reference/api/content/itemrarity/",
      "members": [
        {
          "name": "Common",
          "kind": "enumMember",
          "signature": "Common = 0",
          "value": "0",
          "summary": "White.",
          "documented": true,
          "url": "/reference/api/content/itemrarity/#common"
        },
        {
          "name": "Uncommon",
          "kind": "enumMember",
          "signature": "Uncommon = 1",
          "value": "1",
          "summary": "Yellow.",
          "documented": true,
          "url": "/reference/api/content/itemrarity/#uncommon"
        },
        {
          "name": "Rare",
          "kind": "enumMember",
          "signature": "Rare = 2",
          "value": "2",
          "summary": "Aqua.",
          "documented": true,
          "url": "/reference/api/content/itemrarity/#rare"
        },
        {
          "name": "Epic",
          "kind": "enumMember",
          "signature": "Epic = 3",
          "value": "3",
          "summary": "Light purple.",
          "documented": true,
          "url": "/reference/api/content/itemrarity/#epic"
        }
      ]
    },
    {
      "name": "ItemRegistry",
      "fullName": "Mc.Scripting.Content.ItemRegistry",
      "namespace": "Mc.Scripting.Content",
      "kind": "class",
      "category": "content",
      "categoryLabel": "Custom content",
      "signature": "public sealed class ItemRegistry",
      "summary": "Registers custom items.",
      "url": "/reference/api/content/itemregistry/",
      "members": [
        {
          "name": "All",
          "kind": "property",
          "signature": "public IReadOnlyList<CustomItem> All { get; }",
          "returns": {
            "type": "IReadOnlyList<CustomItem>"
          },
          "summary": "Every registered item (a snapshot).",
          "documented": true,
          "url": "/reference/api/content/itemregistry/#all"
        },
        {
          "name": "Create",
          "kind": "method",
          "signature": "public ItemStack Create(string id, int count = 1)",
          "parameters": [
            {
              "name": "id",
              "type": "string",
              "summary": "The id."
            },
            {
              "name": "count",
              "type": "int",
              "default": "1",
              "summary": "The stack size."
            }
          ],
          "returns": {
            "type": "ItemStack",
            "summary": "The stack, or `ItemStack.Empty` when no such item is registered."
          },
          "summary": "A stack of a registered item.",
          "documented": true,
          "url": "/reference/api/content/itemregistry/#create"
        },
        {
          "name": "Get",
          "kind": "method",
          "signature": "public CustomItem? Get(string id)",
          "parameters": [
            {
              "name": "id",
              "type": "string",
              "summary": "The id."
            }
          ],
          "returns": {
            "type": "CustomItem?",
            "summary": "The definition, or null."
          },
          "summary": "The registered item with this id.",
          "documented": true,
          "url": "/reference/api/content/itemregistry/#get"
        },
        {
          "name": "Of",
          "kind": "method",
          "signature": "public CustomItem? Of(ItemStack stack)",
          "parameters": [
            {
              "name": "stack",
              "type": "ItemStack",
              "summary": "The stack."
            }
          ],
          "returns": {
            "type": "CustomItem?",
            "summary": "The definition, or null for an ordinary stack (or an item whose plugin is not loaded)."
          },
          "summary": "The definition of a stack that is a registered custom item.",
          "documented": true,
          "url": "/reference/api/content/itemregistry/#of"
        },
        {
          "name": "Register",
          "kind": "method",
          "signature": "public void Register(CustomItem item)",
          "parameters": [
            {
              "name": "item",
              "type": "CustomItem",
              "summary": "The definition."
            }
          ],
          "summary": "Registers an item for the plugin whose code is running (released when the plugin unloads).",
          "throws": [
            {
              "type": "System.InvalidOperationException",
              "summary": "The id is taken by another plugin, or no plugin code is running."
            }
          ],
          "documented": true,
          "url": "/reference/api/content/itemregistry/#register"
        }
      ]
    },
    {
      "name": "ItemUseContext",
      "fullName": "Mc.Scripting.Content.ItemUseContext",
      "namespace": "Mc.Scripting.Content",
      "kind": "class",
      "category": "content",
      "categoryLabel": "Custom content",
      "signature": "public sealed class ItemUseContext",
      "summary": "What a custom item's use handler gets. Valid during the handler only.",
      "url": "/reference/api/content/itemusecontext/",
      "members": [
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Stops the vanilla behaviour of the base item and of the clicked block.",
          "documented": true,
          "url": "/reference/api/content/itemusecontext/#cancelled"
        },
        {
          "name": "Definition",
          "kind": "property",
          "signature": "public CustomItem Definition { get; }",
          "returns": {
            "type": "CustomItem"
          },
          "summary": "The definition of the item.",
          "documented": true,
          "url": "/reference/api/content/itemusecontext/#definition"
        },
        {
          "name": "Face",
          "kind": "property",
          "signature": "public BlockFace Face { get; }",
          "returns": {
            "type": "BlockFace"
          },
          "summary": "The clicked face (only when `ItemUseContext.HasBlock`).",
          "documented": true,
          "url": "/reference/api/content/itemusecontext/#face"
        },
        {
          "name": "Hand",
          "kind": "property",
          "signature": "public Hand Hand { get; }",
          "returns": {
            "type": "Hand"
          },
          "summary": "The hand holding the item.",
          "documented": true,
          "url": "/reference/api/content/itemusecontext/#hand"
        },
        {
          "name": "HasBlock",
          "kind": "property",
          "signature": "public bool HasBlock { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the click was on a block.",
          "documented": true,
          "url": "/reference/api/content/itemusecontext/#hasblock"
        },
        {
          "name": "Item",
          "kind": "property",
          "signature": "public ItemStack Item { get; }",
          "returns": {
            "type": "ItemStack"
          },
          "summary": "The stack that was used.",
          "documented": true,
          "url": "/reference/api/content/itemusecontext/#item"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/content/itemusecontext/#player"
        },
        {
          "name": "Position",
          "kind": "property",
          "signature": "public BlockPos Position { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The clicked block (only when `ItemUseContext.HasBlock`).",
          "documented": true,
          "url": "/reference/api/content/itemusecontext/#position"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension the player is in.",
          "documented": true,
          "url": "/reference/api/content/itemusecontext/#world"
        },
        {
          "name": "Consume",
          "kind": "method",
          "signature": "public void Consume(int count = 1)",
          "parameters": [
            {
              "name": "count",
              "type": "int",
              "default": "1",
              "summary": "How many."
            }
          ],
          "summary": "Uses up items of the stack that was used (nothing happens in creative mode).",
          "documented": true,
          "url": "/reference/api/content/itemusecontext/#consume"
        }
      ]
    },
    {
      "name": "PackImage",
      "fullName": "Mc.Scripting.Content.PackImage",
      "namespace": "Mc.Scripting.Content",
      "kind": "class",
      "category": "content",
      "categoryLabel": "Custom content",
      "signature": "public static class PackImage",
      "summary": "Small generated textures for packs and tests: 8-bit RGBA PNG files made without any imaging library.",
      "url": "/reference/api/content/packimage/",
      "members": [
        {
          "name": "Checker",
          "kind": "method",
          "signature": "public static byte[] Checker(uint a, uint b, int size = 16, int cell = 4)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "uint",
              "summary": "The first colour (0xAARRGGBB)."
            },
            {
              "name": "b",
              "type": "uint",
              "summary": "The second colour."
            },
            {
              "name": "size",
              "type": "int",
              "default": "16",
              "summary": "The width and height in pixels."
            },
            {
              "name": "cell",
              "type": "int",
              "default": "4",
              "summary": "The side of a square in pixels."
            }
          ],
          "returns": {
            "type": "byte[]",
            "summary": "The PNG file."
          },
          "summary": "A PNG of a two colour checker board.",
          "documented": true,
          "url": "/reference/api/content/packimage/#checker"
        },
        {
          "name": "Create",
          "kind": "method",
          "signature": "public static byte[] Create(int width, int height, Func<int, int, uint> pixel)",
          "static": true,
          "parameters": [
            {
              "name": "width",
              "type": "int",
              "summary": "The width."
            },
            {
              "name": "height",
              "type": "int",
              "summary": "The height."
            },
            {
              "name": "pixel",
              "type": "Func<int, int, uint>",
              "summary": "The colour of a pixel (x, y) as 0xAARRGGBB."
            }
          ],
          "returns": {
            "type": "byte[]",
            "summary": "The PNG file."
          },
          "summary": "A PNG from a pixel function.",
          "documented": true,
          "url": "/reference/api/content/packimage/#create"
        },
        {
          "name": "Solid",
          "kind": "method",
          "signature": "public static byte[] Solid(uint argb, int size = 16)",
          "static": true,
          "parameters": [
            {
              "name": "argb",
              "type": "uint",
              "summary": "The colour as 0xAARRGGBB."
            },
            {
              "name": "size",
              "type": "int",
              "default": "16",
              "summary": "The width and height in pixels."
            }
          ],
          "returns": {
            "type": "byte[]",
            "summary": "The PNG file."
          },
          "summary": "A PNG of one colour.",
          "documented": true,
          "url": "/reference/api/content/packimage/#solid"
        }
      ]
    },
    {
      "name": "ResourcePackBuilder",
      "fullName": "Mc.Scripting.Content.ResourcePackBuilder",
      "namespace": "Mc.Scripting.Content",
      "kind": "class",
      "category": "content",
      "categoryLabel": "Custom content",
      "signature": "public sealed class ResourcePackBuilder",
      "summary": "Builds the resource pack zip that goes with custom content: item definitions, models, textures, language files and the block state remap of custom blocks. The output is deterministic (sorted entries, fixed timestamps), so the same input gives the same SHA-1 and clients keep their cached copy until something changes.",
      "examples": [
        "```csharp\nvar pack = ResourcePackBuilder.Create(\"myplugin\")\n    .Description(\"My plugin\")\n    .AddItem(ruby, PackImage.Solid(0xFFE0115F))\n    .AddCustomBlock(rubyOre, PackImage.Checker(0xFF8B0A3C, 0xFFE0115F))\n    .AddLang(\"en_us\", new Dictionary<string, string> { [\"item.myplugin.ruby\"] = \"Ruby\" })\n    .Build();\npack.SendTo(player);   // hosted by ResourcePackHost (content.pack_host_port), or pack.ToResourcePack(yourUrl)\n\n```"
      ],
      "url": "/reference/api/content/resourcepackbuilder/",
      "members": [
        {
          "name": "Name",
          "kind": "property",
          "signature": "public string Name { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The pack name.",
          "documented": true,
          "url": "/reference/api/content/resourcepackbuilder/#name"
        },
        {
          "name": "AddCustomBlock",
          "kind": "method",
          "signature": "public ResourcePackBuilder AddCustomBlock(CustomBlock block, byte[] png)",
          "parameters": [
            {
              "name": "block",
              "type": "CustomBlock",
              "summary": "The registered block."
            },
            {
              "name": "png",
              "type": "byte[]",
              "summary": "The texture of all six faces."
            }
          ],
          "returns": {
            "type": "ResourcePackBuilder",
            "summary": "This builder."
          },
          "summary": "Gives the block state of a registered custom block a cube model with one texture. Writes the block state file of the note block with every variant: the custom ones point at the new model, all others keep the vanilla model.",
          "documented": true,
          "url": "/reference/api/content/resourcepackbuilder/#addcustomblock"
        },
        {
          "name": "AddCustomBlockModel",
          "kind": "method",
          "signature": "public ResourcePackBuilder AddCustomBlockModel(CustomBlock block, string modelId)",
          "parameters": [
            {
              "name": "block",
              "type": "CustomBlock",
              "summary": "The registered block."
            },
            {
              "name": "modelId",
              "type": "string",
              "summary": "The block model id."
            }
          ],
          "returns": {
            "type": "ResourcePackBuilder",
            "summary": "This builder."
          },
          "summary": "Points the block state of a registered custom block at a model of the pack (written by `ResourcePackBuilder.AddModel` or `ResourcePackBuilder.AddFile`).",
          "documented": true,
          "url": "/reference/api/content/resourcepackbuilder/#addcustomblockmodel"
        },
        {
          "name": "AddFile",
          "kind": "method",
          "signature": "public ResourcePackBuilder AddFile(string path, byte[] content)",
          "parameters": [
            {
              "name": "path",
              "type": "string",
              "summary": "The path inside the zip, `assets/myplugin/models/item/ruby.json`."
            },
            {
              "name": "content",
              "type": "byte[]",
              "summary": "The bytes."
            }
          ],
          "returns": {
            "type": "ResourcePackBuilder",
            "summary": "This builder."
          },
          "summary": "Adds (or replaces) a file of the pack.",
          "documented": true,
          "url": "/reference/api/content/resourcepackbuilder/#addfile"
        },
        {
          "name": "AddFile",
          "kind": "method",
          "signature": "public ResourcePackBuilder AddFile(string path, string text)",
          "parameters": [
            {
              "name": "path",
              "type": "string",
              "summary": "The path inside the zip."
            },
            {
              "name": "text",
              "type": "string",
              "summary": "The content (UTF-8)."
            }
          ],
          "returns": {
            "type": "ResourcePackBuilder",
            "summary": "This builder."
          },
          "summary": "Adds (or replaces) a text file of the pack.",
          "documented": true,
          "url": "/reference/api/content/resourcepackbuilder/#addfile-1"
        },
        {
          "name": "AddItem",
          "kind": "method",
          "signature": "public ResourcePackBuilder AddItem(string itemModelId, byte[] png)",
          "parameters": [
            {
              "name": "itemModelId",
              "type": "string",
              "summary": "The item model id the stacks carry (`CustomItem.Model`), `\"myplugin:ruby\"`."
            },
            {
              "name": "png",
              "type": "byte[]",
              "summary": "The texture."
            }
          ],
          "returns": {
            "type": "ResourcePackBuilder",
            "summary": "This builder."
          },
          "summary": "Adds a flat item: the item definition, a `item/generated` model and the texture, all named after the item model id.",
          "documented": true,
          "url": "/reference/api/content/resourcepackbuilder/#additem"
        },
        {
          "name": "AddItem",
          "kind": "method",
          "signature": "public ResourcePackBuilder AddItem(CustomItem item, byte[] png)",
          "parameters": [
            {
              "name": "item",
              "type": "CustomItem",
              "summary": "The item (with a model id)."
            },
            {
              "name": "png",
              "type": "byte[]",
              "summary": "The texture."
            }
          ],
          "returns": {
            "type": "ResourcePackBuilder",
            "summary": "This builder."
          },
          "summary": "Adds a flat item for a custom item (its `CustomItem.ModelId` names the model).",
          "documented": true,
          "url": "/reference/api/content/resourcepackbuilder/#additem-1"
        },
        {
          "name": "AddItemDefinition",
          "kind": "method",
          "signature": "public ResourcePackBuilder AddItemDefinition(string itemModelId, string json)",
          "parameters": [
            {
              "name": "itemModelId",
              "type": "string",
              "summary": "The item model id, `\"myplugin:ruby\"`."
            },
            {
              "name": "json",
              "type": "string",
              "summary": "The definition JSON (`{\"model\":{\"type\":\"minecraft:model\",\"model\":\"myplugin:item/ruby\"}}`)."
            }
          ],
          "returns": {
            "type": "ResourcePackBuilder",
            "summary": "This builder."
          },
          "summary": "Adds an item definition (`assets/<namespace>/items/<path>.json`): what a stack with this `item_model` looks like.",
          "documented": true,
          "url": "/reference/api/content/resourcepackbuilder/#additemdefinition"
        },
        {
          "name": "AddLang",
          "kind": "method",
          "signature": "public ResourcePackBuilder AddLang(string locale, IReadOnlyDictionary<string, string> entries, string? namespaceId = null)",
          "parameters": [
            {
              "name": "locale",
              "type": "string",
              "summary": "The locale, `\"en_us\"`."
            },
            {
              "name": "entries",
              "type": "IReadOnlyDictionary<string, string>",
              "summary": "Translation key to text."
            },
            {
              "name": "namespaceId",
              "type": "string?",
              "default": "null",
              "summary": "The namespace folder (default: the pack name)."
            }
          ],
          "returns": {
            "type": "ResourcePackBuilder",
            "summary": "This builder."
          },
          "summary": "Adds a language file (`assets/<namespace>/lang/<locale>.json`).",
          "documented": true,
          "url": "/reference/api/content/resourcepackbuilder/#addlang"
        },
        {
          "name": "AddModel",
          "kind": "method",
          "signature": "public ResourcePackBuilder AddModel(string modelId, string json)",
          "parameters": [
            {
              "name": "modelId",
              "type": "string",
              "summary": "The model id, `\"myplugin:item/ruby\"`."
            },
            {
              "name": "json",
              "type": "string",
              "summary": "The model JSON."
            }
          ],
          "returns": {
            "type": "ResourcePackBuilder",
            "summary": "This builder."
          },
          "summary": "Adds a model (`assets/<namespace>/models/<path>.json`).",
          "documented": true,
          "url": "/reference/api/content/resourcepackbuilder/#addmodel"
        },
        {
          "name": "AddTexture",
          "kind": "method",
          "signature": "public ResourcePackBuilder AddTexture(string textureId, byte[] png)",
          "parameters": [
            {
              "name": "textureId",
              "type": "string",
              "summary": "The texture id, `\"myplugin:item/ruby\"`."
            },
            {
              "name": "png",
              "type": "byte[]",
              "summary": "The PNG file (see `PackImage` for generated ones)."
            }
          ],
          "returns": {
            "type": "ResourcePackBuilder",
            "summary": "This builder."
          },
          "summary": "Adds a texture (`assets/<namespace>/textures/<path>.png`).",
          "documented": true,
          "url": "/reference/api/content/resourcepackbuilder/#addtexture"
        },
        {
          "name": "Build",
          "kind": "method",
          "signature": "public ResourcePackFile Build()",
          "returns": {
            "type": "ResourcePackFile",
            "summary": "The pack."
          },
          "summary": "Builds the zip and its SHA-1.",
          "documented": true,
          "url": "/reference/api/content/resourcepackbuilder/#build"
        },
        {
          "name": "Description",
          "kind": "method",
          "signature": "public ResourcePackBuilder Description(string description)",
          "parameters": [
            {
              "name": "description",
              "type": "string",
              "summary": "The text."
            }
          ],
          "returns": {
            "type": "ResourcePackBuilder",
            "summary": "This builder."
          },
          "summary": "Sets the description shown in the pack list.",
          "documented": true,
          "url": "/reference/api/content/resourcepackbuilder/#description"
        },
        {
          "name": "PackFormat",
          "kind": "method",
          "signature": "public ResourcePackBuilder PackFormat(int format)",
          "parameters": [
            {
              "name": "format",
              "type": "int",
              "summary": "The number."
            }
          ],
          "returns": {
            "type": "ResourcePackBuilder",
            "summary": "This builder."
          },
          "summary": "Sets the resource pack format number written to `pack.mcmeta` (97 for 26.3).",
          "documented": true,
          "url": "/reference/api/content/resourcepackbuilder/#packformat"
        },
        {
          "name": "Create",
          "kind": "method",
          "signature": "public static ResourcePackBuilder Create(string name)",
          "static": true,
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The pack name (also the seed of its id: a pack of the same name replaces the one a client already has)."
            }
          ],
          "returns": {
            "type": "ResourcePackBuilder",
            "summary": "The builder."
          },
          "summary": "Starts a pack.",
          "documented": true,
          "url": "/reference/api/content/resourcepackbuilder/#create"
        }
      ]
    },
    {
      "name": "ResourcePackFile",
      "fullName": "Mc.Scripting.Content.ResourcePackFile",
      "namespace": "Mc.Scripting.Content",
      "kind": "class",
      "category": "content",
      "categoryLabel": "Custom content",
      "signature": "public sealed class ResourcePackFile",
      "summary": "A built resource pack: the zip, its SHA-1 and the id clients know it by.",
      "url": "/reference/api/content/resourcepackfile/",
      "members": [
        {
          "name": "Bytes",
          "kind": "property",
          "signature": "public byte[] Bytes { get; }",
          "returns": {
            "type": "byte[]"
          },
          "summary": "The zip.",
          "documented": true,
          "url": "/reference/api/content/resourcepackfile/#bytes"
        },
        {
          "name": "Id",
          "kind": "property",
          "signature": "public Uuid Id { get; }",
          "returns": {
            "type": "Uuid"
          },
          "summary": "The pack id (derived from the name: a pack of the same name replaces the older one on the client).",
          "documented": true,
          "url": "/reference/api/content/resourcepackfile/#id"
        },
        {
          "name": "Name",
          "kind": "property",
          "signature": "public string Name { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The pack name.",
          "documented": true,
          "url": "/reference/api/content/resourcepackfile/#name"
        },
        {
          "name": "Sha1",
          "kind": "property",
          "signature": "public string Sha1 { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The SHA-1 of the zip (40 lower-case hex characters).",
          "documented": true,
          "url": "/reference/api/content/resourcepackfile/#sha1"
        },
        {
          "name": "Size",
          "kind": "property",
          "signature": "public int Size { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The size of the zip in bytes.",
          "documented": true,
          "url": "/reference/api/content/resourcepackfile/#size"
        },
        {
          "name": "Publish",
          "kind": "method",
          "signature": "public ResourcePack Publish(bool required = false, Component? prompt = null)",
          "parameters": [
            {
              "name": "required",
              "type": "bool",
              "default": "false",
              "summary": "Whether the player must accept it."
            },
            {
              "name": "prompt",
              "type": "Component?",
              "default": "null",
              "summary": "Text shown in the download prompt."
            }
          ],
          "returns": {
            "type": "ResourcePack",
            "summary": "The resource pack description."
          },
          "summary": "Hosts the zip with `ResourcePackHost` and returns the description a client needs.",
          "throws": [
            {
              "type": "System.InvalidOperationException",
              "summary": "The built-in host is off (`content.pack_host_port` is 0 and `ResourcePackHost.Start` was not called)."
            }
          ],
          "documented": true,
          "url": "/reference/api/content/resourcepackfile/#publish"
        },
        {
          "name": "SendTo",
          "kind": "method",
          "signature": "public void SendTo(Player player, bool required = false, Component? prompt = null)",
          "parameters": [
            {
              "name": "player",
              "type": "Player",
              "summary": "The player."
            },
            {
              "name": "required",
              "type": "bool",
              "default": "false",
              "summary": "Whether he must accept it."
            },
            {
              "name": "prompt",
              "type": "Component?",
              "default": "null",
              "summary": "Text shown in the download prompt."
            }
          ],
          "summary": "Hosts the pack (see `ResourcePackFile.Publish`) and asks a player to download it.",
          "documented": true,
          "url": "/reference/api/content/resourcepackfile/#sendto"
        },
        {
          "name": "ToResourcePack",
          "kind": "method",
          "signature": "public ResourcePack ToResourcePack(string url, bool required = false, Component? prompt = null)",
          "parameters": [
            {
              "name": "url",
              "type": "string",
              "summary": "Where the zip is downloadable."
            },
            {
              "name": "required",
              "type": "bool",
              "default": "false",
              "summary": "Whether the player must accept it (declining kicks him)."
            },
            {
              "name": "prompt",
              "type": "Component?",
              "default": "null",
              "summary": "Text shown in the download prompt."
            }
          ],
          "returns": {
            "type": "ResourcePack",
            "summary": "The resource pack description."
          },
          "summary": "The pack as the packet a client needs, for a URL you host yourself.",
          "documented": true,
          "url": "/reference/api/content/resourcepackfile/#toresourcepack"
        },
        {
          "name": "WriteTo",
          "kind": "method",
          "signature": "public void WriteTo(string path)",
          "parameters": [
            {
              "name": "path",
              "type": "string",
              "summary": "The file path."
            }
          ],
          "summary": "Writes the zip to a file.",
          "documented": true,
          "url": "/reference/api/content/resourcepackfile/#writeto"
        }
      ]
    },
    {
      "name": "ResourcePackHost",
      "fullName": "Mc.Scripting.Content.ResourcePackHost",
      "namespace": "Mc.Scripting.Content",
      "kind": "class",
      "category": "content",
      "categoryLabel": "Custom content",
      "signature": "public static class ResourcePackHost",
      "summary": "A small built-in web server that hands out the resource packs plugins publish, so a plugin needs no web space of its own. It is off until it is configured (`content.pack_host_port` in Ramjet.toml, with `pack_host_bind` and the public `pack_host_url`) or started by code with `ResourcePackHost.Start`; it listens on 127.0.0.1 unless told otherwise, answers only `GET` / `HEAD` of `/<sha1>.zip` for packs that were published, and keeps nothing of the plugins that published them (a pack is removed when its plugin unloads).",
      "url": "/reference/api/content/resourcepackhost/",
      "members": [
        {
          "name": "BaseUrl",
          "kind": "property",
          "signature": "public static string? BaseUrl { get; }",
          "static": true,
          "returns": {
            "type": "string?"
          },
          "summary": "The base URL the clients use (`http://host:port`), or null while the server is off.",
          "documented": true,
          "url": "/reference/api/content/resourcepackhost/#baseurl"
        },
        {
          "name": "IsRunning",
          "kind": "property",
          "signature": "public static bool IsRunning { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the server is listening.",
          "documented": true,
          "url": "/reference/api/content/resourcepackhost/#isrunning"
        },
        {
          "name": "Port",
          "kind": "property",
          "signature": "public static int Port { get; }",
          "static": true,
          "returns": {
            "type": "int"
          },
          "summary": "The port the server listens on, 0 while it is off.",
          "documented": true,
          "url": "/reference/api/content/resourcepackhost/#port"
        },
        {
          "name": "Publish",
          "kind": "method",
          "signature": "public static string Publish(ResourcePackFile pack)",
          "static": true,
          "parameters": [
            {
              "name": "pack",
              "type": "ResourcePackFile",
              "summary": "The pack."
            }
          ],
          "returns": {
            "type": "string",
            "summary": "The URL, `http://host:port/<sha1>.zip`."
          },
          "summary": "Publishes a pack and returns the URL it is downloadable from. The pack stays available until the plugin that published it unloads (or `ResourcePackHost.Unpublish`).",
          "throws": [
            {
              "type": "System.InvalidOperationException",
              "summary": "The server is off and not configured."
            }
          ],
          "documented": true,
          "url": "/reference/api/content/resourcepackhost/#publish"
        },
        {
          "name": "Start",
          "kind": "method",
          "signature": "public static string Start(string bind = \"127.0.0.1\", int port = 0, string? publicUrl = null)",
          "static": true,
          "parameters": [
            {
              "name": "bind",
              "type": "string",
              "default": "\"127.0.0.1\"",
              "summary": "The address to listen on (default 127.0.0.1: this machine only; 0.0.0.0 for every interface, then give `publicUrl`)."
            },
            {
              "name": "port",
              "type": "int",
              "default": "0",
              "summary": "The port, 0 for any free one."
            },
            {
              "name": "publicUrl",
              "type": "string?",
              "default": "null",
              "summary": "The base URL clients use to reach it (default `http://<bind>:<port>`)."
            }
          ],
          "returns": {
            "type": "string",
            "summary": "The base URL."
          },
          "summary": "Starts the server (does nothing when it already runs).",
          "documented": true,
          "url": "/reference/api/content/resourcepackhost/#start"
        },
        {
          "name": "Stop",
          "kind": "method",
          "signature": "public static void Stop()",
          "static": true,
          "summary": "Takes back the packs the calling plugin published, and stops the server when it was started by code (`ResourcePackHost.Start`) and no published pack of any plugin is left. Packs of other plugins stay available; a server started by the configuration keeps running.",
          "documented": true,
          "url": "/reference/api/content/resourcepackhost/#stop"
        },
        {
          "name": "Unpublish",
          "kind": "method",
          "signature": "public static void Unpublish(ResourcePackFile pack)",
          "static": true,
          "parameters": [
            {
              "name": "pack",
              "type": "ResourcePackFile",
              "summary": "The pack."
            }
          ],
          "summary": "Stops handing out a pack the calling plugin published (it stays available while another plugin publishes the same pack).",
          "documented": true,
          "url": "/reference/api/content/resourcepackhost/#unpublish"
        }
      ]
    },
    {
      "name": "DamageCause",
      "fullName": "Mc.Scripting.DamageCause",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "events",
      "categoryLabel": "Events (infrastructure)",
      "signature": "public enum DamageCause : byte",
      "summary": "Why an entity took damage (derived from the vanilla damage type).",
      "url": "/reference/api/events/damagecause/",
      "members": [
        {
          "name": "Other",
          "kind": "enumMember",
          "signature": "Other = 0",
          "value": "0",
          "summary": "Any damage type without a dedicated cause.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#other"
        },
        {
          "name": "Contact",
          "kind": "enumMember",
          "signature": "Contact = 1",
          "value": "1",
          "summary": "Cactus, stalagmite, sweet berry bush.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#contact"
        },
        {
          "name": "EntityAttack",
          "kind": "enumMember",
          "signature": "EntityAttack = 2",
          "value": "2",
          "summary": "Melee attack by an entity.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#entityattack"
        },
        {
          "name": "Projectile",
          "kind": "enumMember",
          "signature": "Projectile = 3",
          "value": "3",
          "summary": "Arrow, trident, fireball, thrown item, spit, wind charge ...",
          "documented": true,
          "url": "/reference/api/events/damagecause/#projectile"
        },
        {
          "name": "Suffocation",
          "kind": "enumMember",
          "signature": "Suffocation = 4",
          "value": "4",
          "summary": "Inside a wall.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#suffocation"
        },
        {
          "name": "Fall",
          "kind": "enumMember",
          "signature": "Fall = 5",
          "value": "5",
          "summary": "Fall damage.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#fall"
        },
        {
          "name": "Fire",
          "kind": "enumMember",
          "signature": "Fire = 6",
          "value": "6",
          "summary": "Standing in fire.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#fire"
        },
        {
          "name": "FireTick",
          "kind": "enumMember",
          "signature": "FireTick = 7",
          "value": "7",
          "summary": "Burning.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#firetick"
        },
        {
          "name": "Lava",
          "kind": "enumMember",
          "signature": "Lava = 8",
          "value": "8",
          "summary": "Lava.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#lava"
        },
        {
          "name": "Drowning",
          "kind": "enumMember",
          "signature": "Drowning = 9",
          "value": "9",
          "summary": "Out of air.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#drowning"
        },
        {
          "name": "Explosion",
          "kind": "enumMember",
          "signature": "Explosion = 10",
          "value": "10",
          "summary": "An explosion.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#explosion"
        },
        {
          "name": "Void",
          "kind": "enumMember",
          "signature": "Void = 11",
          "value": "11",
          "summary": "Below the world.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#void"
        },
        {
          "name": "Lightning",
          "kind": "enumMember",
          "signature": "Lightning = 12",
          "value": "12",
          "summary": "Lightning bolt.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#lightning"
        },
        {
          "name": "Starvation",
          "kind": "enumMember",
          "signature": "Starvation = 13",
          "value": "13",
          "summary": "Starvation.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#starvation"
        },
        {
          "name": "Magic",
          "kind": "enumMember",
          "signature": "Magic = 14",
          "value": "14",
          "summary": "Magic, poison, instant damage.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#magic"
        },
        {
          "name": "Wither",
          "kind": "enumMember",
          "signature": "Wither = 15",
          "value": "15",
          "summary": "The wither effect or a wither.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#wither"
        },
        {
          "name": "FallingBlock",
          "kind": "enumMember",
          "signature": "FallingBlock = 16",
          "value": "16",
          "summary": "A falling block or anvil.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#fallingblock"
        },
        {
          "name": "Thorns",
          "kind": "enumMember",
          "signature": "Thorns = 17",
          "value": "17",
          "summary": "Thorns enchantment.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#thorns"
        },
        {
          "name": "FlyIntoWall",
          "kind": "enumMember",
          "signature": "FlyIntoWall = 18",
          "value": "18",
          "summary": "Elytra kinetic damage.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#flyintowall"
        },
        {
          "name": "HotFloor",
          "kind": "enumMember",
          "signature": "HotFloor = 19",
          "value": "19",
          "summary": "Magma block.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#hotfloor"
        },
        {
          "name": "Cramming",
          "kind": "enumMember",
          "signature": "Cramming = 20",
          "value": "20",
          "summary": "Entity cramming.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#cramming"
        },
        {
          "name": "Dryout",
          "kind": "enumMember",
          "signature": "Dryout = 21",
          "value": "21",
          "summary": "Water animals out of water.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#dryout"
        },
        {
          "name": "Freeze",
          "kind": "enumMember",
          "signature": "Freeze = 22",
          "value": "22",
          "summary": "Powder snow.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#freeze"
        },
        {
          "name": "Kill",
          "kind": "enumMember",
          "signature": "Kill = 23",
          "value": "23",
          "summary": "/kill or the generic kill damage.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#kill"
        },
        {
          "name": "Border",
          "kind": "enumMember",
          "signature": "Border = 24",
          "value": "24",
          "summary": "Outside the world border.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#border"
        },
        {
          "name": "Campfire",
          "kind": "enumMember",
          "signature": "Campfire = 25",
          "value": "25",
          "summary": "Campfire.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#campfire"
        },
        {
          "name": "MaceSmash",
          "kind": "enumMember",
          "signature": "MaceSmash = 26",
          "value": "26",
          "summary": "Mace smash attack.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#macesmash"
        },
        {
          "name": "Custom",
          "kind": "enumMember",
          "signature": "Custom = 27",
          "value": "27",
          "summary": "Damage dealt by a plugin.",
          "documented": true,
          "url": "/reference/api/events/damagecause/#custom"
        }
      ]
    },
    {
      "name": "DisplaySlot",
      "fullName": "Mc.Scripting.DisplaySlot",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "display",
      "categoryLabel": "Scoreboards, boss bars, tab list",
      "signature": "public enum DisplaySlot : int",
      "summary": "Where an objective is displayed.",
      "url": "/reference/api/display/displayslot/",
      "members": [
        {
          "name": "List",
          "kind": "enumMember",
          "signature": "List = 0",
          "value": "0",
          "summary": "The player list (Tab), next to each name.",
          "documented": true,
          "url": "/reference/api/display/displayslot/#list"
        },
        {
          "name": "Sidebar",
          "kind": "enumMember",
          "signature": "Sidebar = 1",
          "value": "1",
          "summary": "The sidebar at the right of the screen.",
          "documented": true,
          "url": "/reference/api/display/displayslot/#sidebar"
        },
        {
          "name": "BelowName",
          "kind": "enumMember",
          "signature": "BelowName = 2",
          "value": "2",
          "summary": "Below the name tags of players.",
          "documented": true,
          "url": "/reference/api/display/displayslot/#belowname"
        }
      ]
    },
    {
      "name": "DragType",
      "fullName": "Mc.Scripting.DragType",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "inventories",
      "categoryLabel": "Inventories and menus",
      "signature": "public enum DragType : byte",
      "summary": "Kind of inventory drag.",
      "url": "/reference/api/inventories/dragtype/",
      "members": [
        {
          "name": "Even",
          "kind": "enumMember",
          "signature": "Even = 0",
          "value": "0",
          "summary": "Left drag: split the cursor stack evenly.",
          "documented": true,
          "url": "/reference/api/inventories/dragtype/#even"
        },
        {
          "name": "Single",
          "kind": "enumMember",
          "signature": "Single = 1",
          "value": "1",
          "summary": "Right drag: one item per slot.",
          "documented": true,
          "url": "/reference/api/inventories/dragtype/#single"
        },
        {
          "name": "Clone",
          "kind": "enumMember",
          "signature": "Clone = 2",
          "value": "2",
          "summary": "Middle drag (creative).",
          "documented": true,
          "url": "/reference/api/inventories/dragtype/#clone"
        }
      ]
    },
    {
      "name": "Ecs",
      "fullName": "Mc.Scripting.Ecs",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "ecs",
      "categoryLabel": "Entities, components, queries",
      "signature": "public sealed class Ecs",
      "summary": "ECS access scoped to a plugin (`plugin.Ecs`): custom components, queries and raw entities. Entities are not owned (they survive plugin reloads); queries are, and are destroyed on unload. Game worlds (dimensions) are `World`.",
      "remarks": "Game worlds (dimensions) are a different type, `Mc.Scripting.Worlds.World`, reached through `Server.Worlds` and `Server.Overworld`.",
      "examples": [
        "```csharp\npublic struct Mana { public int Value; }\n\nprivate Query<Mana> _mana = null!;\n\nprotected override void OnEnable()\n{\n    Ecs.RegisterComponent<Mana>(\"hello:mana\");\n    _mana = Ecs.Query<Mana>();\n    Systems.Add(\"regen\", Phase.Tick, _ =>\n    {\n        foreach (var chunk in _mana)\n            foreach (ref var m in chunk.Field<Mana>(0))\n                m.Value++;\n    });\n}\n```"
      ],
      "url": "/reference/api/ecs/ecs/",
      "members": [
        {
          "name": "GetEntity",
          "kind": "method",
          "signature": "public Entity GetEntity(ulong id)",
          "parameters": [
            {
              "name": "id",
              "type": "ulong"
            }
          ],
          "returns": {
            "type": "Entity"
          },
          "summary": "Wraps an entity id.",
          "documented": true,
          "url": "/reference/api/ecs/ecs/#getentity"
        },
        {
          "name": "Query",
          "kind": "method",
          "signature": "public Query<T1> Query<T1>() where T1 : unmanaged",
          "returns": {
            "type": "Query<T1>"
          },
          "typeParameters": [
            "T1"
          ],
          "constraints": [
            "where T1 : unmanaged"
          ],
          "summary": "Creates a cached query over one component type.",
          "documented": true,
          "url": "/reference/api/ecs/ecs/#queryt1"
        },
        {
          "name": "Query",
          "kind": "method",
          "signature": "public Query<T1, T2> Query<T1, T2>() where T1 : unmanaged where T2 : unmanaged",
          "returns": {
            "type": "Query<T1, T2>"
          },
          "typeParameters": [
            "T1",
            "T2"
          ],
          "constraints": [
            "where T1 : unmanaged",
            "where T2 : unmanaged"
          ],
          "summary": "Creates a cached query over two component types.",
          "documented": true,
          "url": "/reference/api/ecs/ecs/#queryt1-t2"
        },
        {
          "name": "Query",
          "kind": "method",
          "signature": "public Query<T1, T2, T3> Query<T1, T2, T3>() where T1 : unmanaged where T2 : unmanaged where T3 : unmanaged",
          "returns": {
            "type": "Query<T1, T2, T3>"
          },
          "typeParameters": [
            "T1",
            "T2",
            "T3"
          ],
          "constraints": [
            "where T1 : unmanaged",
            "where T2 : unmanaged",
            "where T3 : unmanaged"
          ],
          "summary": "Creates a cached query over three component types.",
          "documented": true,
          "url": "/reference/api/ecs/ecs/#queryt1-t2-t3"
        },
        {
          "name": "RegisterComponent",
          "kind": "method",
          "signature": "public ulong RegisterComponent<T>(string key) where T : unmanaged",
          "parameters": [
            {
              "name": "key",
              "type": "string"
            }
          ],
          "returns": {
            "type": "ulong"
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : unmanaged"
          ],
          "summary": "Registers (or re-binds) a plain-data component backed by a flecs component. Keys are global (\"myplugin:health\"); registering the same key with the same layout (field types and offsets) after a hot reload keeps existing component values. A changed layout drops the values, but is refused while another plugin is also bound to the key. Engine components can be bound by their registered name as long as the layout matches.",
          "remarks": "`T` must be a type owned by this plugin: `Component` caches one id per CLR type, so binding it to a second key throws. The binding is cleared when the plugin unloads.",
          "documented": true,
          "url": "/reference/api/ecs/ecs/#registercomponentt"
        },
        {
          "name": "Spawn",
          "kind": "method",
          "signature": "public Entity Spawn()",
          "returns": {
            "type": "Entity"
          },
          "summary": "Creates an empty ECS entity (not a game entity: it has no position and is never sent to clients).",
          "documented": true,
          "url": "/reference/api/ecs/ecs/#spawn"
        }
      ]
    },
    {
      "name": "Entity",
      "fullName": "Mc.Scripting.Entity",
      "namespace": "Mc.Scripting",
      "kind": "struct",
      "category": "ecs",
      "categoryLabel": "Entities, components, queries",
      "signature": "public readonly struct Entity : IEquatable<Entity>",
      "interfaces": [
        "IEquatable<Entity>"
      ],
      "summary": "Handle to an ECS entity (flecs id). Blittable: usable directly in events and components.",
      "remarks": "Refs returned by `Entity.Get` point into ECS storage and are invalidated by structural changes (adding/removing components, destroying entities). Don't keep them.\n\nA handle stays valid as a value forever; whether the entity behind it is alive is a separate question (`IsAlive`). Operations on a dead handle fail (`Get<T>` throws, `Has<T>` is false).",
      "examples": [
        "```csharp\npublic struct Mana { public int Value; }\n\n// in OnEnable:\nEcs.RegisterComponent<Mana>(\"hello:mana\");\n\n// in an event handler, where e is a PlayerJoinEvent:\nEntity player = e.Player;                             // a Player converts to its Entity\nplayer.Set(new Mana { Value = 10 });                  // add or overwrite\nif (player.Has<Mana>()) player.Get<Mana>().Value--;   // in-place edit through a ref\nif (player.TryGet<Mana>(out var copy)) Log.Info($\"mana {copy.Value}\");\nplayer.Remove<Mana>();\n```"
      ],
      "url": "/reference/api/ecs/entity/",
      "members": [
        {
          "name": "Entity",
          "kind": "ctor",
          "signature": "public Entity(ulong id)",
          "parameters": [
            {
              "name": "id",
              "type": "ulong"
            }
          ],
          "summary": "Wraps an entity id.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#constructor"
        },
        {
          "name": "Id",
          "kind": "field",
          "signature": "public readonly ulong Id;",
          "returns": {
            "type": "ulong"
          },
          "summary": "The flecs entity id (index and generation); 0 is the null entity.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#id"
        },
        {
          "name": "IsAlive",
          "kind": "property",
          "signature": "public bool IsAlive { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the entity exists. A destroyed entity's id goes stale (the generation no longer matches).",
          "documented": true,
          "url": "/reference/api/ecs/entity/#isalive"
        },
        {
          "name": "IsGameEntity",
          "kind": "property",
          "signature": "public bool IsGameEntity { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether this is an entity of the game world (a player, mob, item, orb, projectile ...) as opposed to a bare ECS entity.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#isgameentity"
        },
        {
          "name": "IsNull",
          "kind": "property",
          "signature": "public bool IsNull { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether this is the null entity.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#isnull"
        },
        {
          "name": "Location",
          "kind": "property",
          "signature": "public Location Location { get; }",
          "returns": {
            "type": "Location"
          },
          "summary": "The location of a game entity.",
          "throws": [
            {
              "type": "System.InvalidOperationException",
              "summary": "The handle is stale or the entity is not a game entity."
            }
          ],
          "documented": true,
          "url": "/reference/api/ecs/entity/#location"
        },
        {
          "name": "TypeKey",
          "kind": "property",
          "signature": "public string TypeKey { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The entity type key of a game entity (`\"minecraft:zombie\"`, `\"minecraft:item\"`, `\"minecraft:player\"`), empty for a stale handle or an entity that is not a game entity (one created with `Entity.Spawn`).",
          "documented": true,
          "url": "/reference/api/ecs/entity/#typekey"
        },
        {
          "name": "Null",
          "kind": "property",
          "signature": "public static Entity Null { get; }",
          "static": true,
          "returns": {
            "type": "Entity"
          },
          "summary": "The null entity.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#null"
        },
        {
          "name": "Despawn",
          "kind": "method",
          "signature": "public bool Despawn()",
          "returns": {
            "type": "bool",
            "summary": "True when the entity was removed (it disappears for the clients at the next tick)."
          },
          "summary": "Removes a game entity from the world without any death logic (no drops, no death event): items, orbs, mobs, projectiles. Players cannot be removed (use `Player.Kick`).",
          "documented": true,
          "url": "/reference/api/ecs/entity/#despawn"
        },
        {
          "name": "Destroy",
          "kind": "method",
          "signature": "public void Destroy()",
          "summary": "Destroys an entity created with `Entity.Spawn`. Does nothing for the null entity or a stale handle. Entities of the game (players, mobs, items, anything an event or a handle hands out) are not the plugin's to destroy: the call is ignored with a warning (use the game APIs, e.g. `Player.Kick`).",
          "documented": true,
          "url": "/reference/api/ecs/entity/#destroy"
        },
        {
          "name": "Equals",
          "kind": "method",
          "signature": "public bool Equals(Entity other)",
          "parameters": [
            {
              "name": "other",
              "type": "Entity"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Same entity id.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#equals"
        },
        {
          "name": "Equals",
          "kind": "method",
          "signature": "public override bool Equals(object? obj)",
          "parameters": [
            {
              "name": "obj",
              "type": "object?"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Same entity id.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#equals-1"
        },
        {
          "name": "Get",
          "kind": "method",
          "signature": "public ref T Get<T>() where T : unmanaged",
          "returns": {
            "type": "ref T"
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : unmanaged"
          ],
          "summary": "Reference to component `T`; throws if the entity lacks it. For a component the game registered itself (bound by its engine name) the reference points at a COPY: engine components are read only for plugins, writing through it changes nothing.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#gett"
        },
        {
          "name": "GetHashCode",
          "kind": "method",
          "signature": "public override int GetHashCode()",
          "returns": {
            "type": "int"
          },
          "summary": "Hash of the id.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#gethashcode"
        },
        {
          "name": "GetNbt",
          "kind": "method",
          "signature": "public NbtCompound? GetNbt()",
          "returns": {
            "type": "NbtCompound?",
            "summary": "A copy, or null for a stale handle or an entity without a save form."
          },
          "summary": "The data of a game entity as `/data get entity` shows it (position, motion, health, name, item, ...).",
          "documented": true,
          "url": "/reference/api/ecs/entity/#getnbt"
        },
        {
          "name": "GetOrAdd",
          "kind": "method",
          "signature": "public ref T GetOrAdd<T>() where T : unmanaged",
          "returns": {
            "type": "ref T"
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : unmanaged"
          ],
          "summary": "Reference to the component, adding it (zero-initialised) when missing.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#getoraddt"
        },
        {
          "name": "Has",
          "kind": "method",
          "signature": "public bool Has<T>() where T : unmanaged",
          "returns": {
            "type": "bool"
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : unmanaged"
          ],
          "summary": "Whether the entity has component `T`.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#hast"
        },
        {
          "name": "Kill",
          "kind": "method",
          "signature": "public bool Kill()",
          "returns": {
            "type": "bool",
            "summary": "True when something happened."
          },
          "summary": "Kills a living entity the way the `/kill` command does (generic kill damage: death events, drops and the death animation); other entities are removed.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#kill"
        },
        {
          "name": "Remove",
          "kind": "method",
          "signature": "public Entity Remove<T>() where T : unmanaged",
          "returns": {
            "type": "Entity"
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : unmanaged"
          ],
          "summary": "Removes a component.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#removet"
        },
        {
          "name": "Set",
          "kind": "method",
          "signature": "public Entity Set<T>(in T value) where T : unmanaged",
          "parameters": [
            {
              "name": "value",
              "type": "T",
              "modifier": "in"
            }
          ],
          "returns": {
            "type": "Entity"
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : unmanaged"
          ],
          "summary": "Sets (adds or overwrites) a component value.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#sett"
        },
        {
          "name": "SetGlowingFor",
          "kind": "method",
          "signature": "public bool SetGlowingFor(Player viewer, bool glowing)",
          "parameters": [
            {
              "name": "viewer",
              "type": "Player",
              "summary": "The player who sees the outline."
            },
            {
              "name": "glowing",
              "type": "bool",
              "summary": "Whether it glows for the viewer."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "False when the engine refused it (the entity is not tracked, or the glow table is full)."
          },
          "summary": "Makes this entity (a player or a mob) glow for one viewer: the viewer sees the glowing outline on it, the other players do not. The colour is the vanilla white (no team colour). The glow ends with `glowing = false`, with the entity, or with the plugin.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#setglowingfor"
        },
        {
          "name": "SetNbt",
          "kind": "method",
          "signature": "public bool SetNbt(NbtCompound data, bool merge = true)",
          "parameters": [
            {
              "name": "data",
              "type": "NbtCompound",
              "summary": "The data."
            },
            {
              "name": "merge",
              "type": "bool",
              "default": "true",
              "summary": "True merges into the current data (the usual choice); false replaces the editable data with the compound."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when the entity took the data."
          },
          "summary": "Changes the data of a game entity like `/data merge entity`. Players cannot be edited this way (use the player API).",
          "documented": true,
          "url": "/reference/api/ecs/entity/#setnbt"
        },
        {
          "name": "Teleport",
          "kind": "method",
          "signature": "public bool Teleport(Location location)",
          "parameters": [
            {
              "name": "location",
              "type": "Location",
              "summary": "The destination."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when the entity moved."
          },
          "summary": "Moves a game entity. Players go through `Player.Teleport` (with its event); mobs, items and the like move silently, within their dimension.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#teleport"
        },
        {
          "name": "ToString",
          "kind": "method",
          "signature": "public override string ToString()",
          "returns": {
            "type": "string"
          },
          "summary": "Debug text.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#tostring"
        },
        {
          "name": "TryGet",
          "kind": "method",
          "signature": "public bool TryGet<T>(out T value) where T : unmanaged",
          "parameters": [
            {
              "name": "value",
              "type": "T",
              "modifier": "out"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : unmanaged"
          ],
          "summary": "Copies the component if present.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#trygett"
        },
        {
          "name": "TryGetLocation",
          "kind": "method",
          "signature": "public bool TryGetLocation(out Location location)",
          "parameters": [
            {
              "name": "location",
              "type": "Location",
              "modifier": "out",
              "summary": "The world, position and rotation."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "False for a stale handle or a bare ECS entity."
          },
          "summary": "Where a game entity is.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#trygetlocation"
        },
        {
          "name": "TryGetRef",
          "kind": "method",
          "signature": "public ref T TryGetRef<T>() where T : unmanaged",
          "returns": {
            "type": "ref T"
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : unmanaged"
          ],
          "summary": "Pointer-style access: a null ref (check with Unsafe.IsNullRef) when absent.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#trygetreft"
        },
        {
          "name": "Spawn",
          "kind": "method",
          "signature": "public static Entity Spawn()",
          "static": true,
          "returns": {
            "type": "Entity"
          },
          "summary": "Creates an empty ECS entity (not a game entity).",
          "documented": true,
          "url": "/reference/api/ecs/entity/#spawn"
        },
        {
          "name": "!=",
          "kind": "operator",
          "signature": "public static bool operator !=(Entity a, Entity b)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "Entity"
            },
            {
              "name": "b",
              "type": "Entity"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Different entity id.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#operator-"
        },
        {
          "name": "==",
          "kind": "operator",
          "signature": "public static bool operator ==(Entity a, Entity b)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "Entity"
            },
            {
              "name": "b",
              "type": "Entity"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Same entity id.",
          "documented": true,
          "url": "/reference/api/ecs/entity/#operator--1"
        }
      ]
    },
    {
      "name": "EventBus",
      "fullName": "Mc.Scripting.EventBus",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "events",
      "categoryLabel": "Events (infrastructure)",
      "signature": "public static class EventBus",
      "summary": "Owner-less event firing helpers.",
      "url": "/reference/api/events/eventbus/",
      "members": [
        {
          "name": "Fire",
          "kind": "method",
          "signature": "public static bool Fire<T>(ref T ev) where T : struct, IEvent",
          "static": true,
          "parameters": [
            {
              "name": "ev",
              "type": "T",
              "modifier": "ref"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : struct, IEvent"
          ],
          "summary": "Fires an event through the native bus; returns false if it was cancelled.",
          "documented": true,
          "url": "/reference/api/events/eventbus/#firet"
        },
        {
          "name": "HasSubscribers",
          "kind": "method",
          "signature": "public static bool HasSubscribers<T>() where T : struct, IEvent",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : struct, IEvent"
          ],
          "summary": "Whether anybody (native or managed) listens to `T`.",
          "documented": true,
          "url": "/reference/api/events/eventbus/#hassubscriberst"
        }
      ]
    },
    {
      "name": "EventHeader",
      "fullName": "Mc.Scripting.EventHeader",
      "namespace": "Mc.Scripting",
      "kind": "struct",
      "category": "events",
      "categoryLabel": "Events (infrastructure)",
      "signature": "public struct EventHeader",
      "summary": "First field of every event struct (McEventHeader).",
      "remarks": "The first field of every event struct. Handlers use `Cancelled`; the other fields are managed by the runtime.",
      "url": "/reference/api/events/eventheader/",
      "members": [
        {
          "name": "Flags",
          "kind": "field",
          "signature": "public byte Flags;",
          "returns": {
            "type": "byte"
          },
          "summary": "Flag bits (bit 0 = cancellable).",
          "documented": true,
          "url": "/reference/api/events/eventheader/#flags"
        },
        {
          "name": "Id",
          "kind": "field",
          "signature": "public ushort Id;",
          "returns": {
            "type": "ushort"
          },
          "summary": "Event type id.",
          "documented": true,
          "url": "/reference/api/events/eventheader/#id"
        },
        {
          "name": "Size",
          "kind": "field",
          "signature": "public uint Size;",
          "returns": {
            "type": "uint"
          },
          "summary": "Size of the full event struct.",
          "documented": true,
          "url": "/reference/api/events/eventheader/#size"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether a handler cancelled the event (ignored if not cancellable).",
          "documented": true,
          "url": "/reference/api/events/eventheader/#cancelled"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public bool IsCancellable { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the event type can be cancelled.",
          "documented": true,
          "url": "/reference/api/events/eventheader/#iscancellable"
        },
        {
          "name": "For",
          "kind": "method",
          "signature": "public static EventHeader For<T>() where T : struct, IEvent",
          "static": true,
          "returns": {
            "type": "EventHeader"
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : struct, IEvent"
          ],
          "summary": "Creates the header for event type `T`.",
          "documented": true,
          "url": "/reference/api/events/eventheader/#fort"
        }
      ]
    },
    {
      "name": "EventListener<T>",
      "fullName": "Mc.Scripting.EventListener`1",
      "namespace": "Mc.Scripting",
      "kind": "delegate",
      "category": "events",
      "categoryLabel": "Events (infrastructure)",
      "signature": "public delegate void EventListener<T>(ref T ev) where T : struct, IEvent",
      "typeParameters": [
        "T"
      ],
      "summary": "Event handler; gets the event by reference (mutable fields and Cancelled are writable).",
      "url": "/reference/api/events/eventlistener-1/",
      "members": [],
      "parameters": [
        {
          "name": "ev",
          "type": "T"
        }
      ],
      "returns": "void"
    },
    {
      "name": "EventPriority",
      "fullName": "Mc.Scripting.EventPriority",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "events",
      "categoryLabel": "Events (infrastructure)",
      "signature": "public enum EventPriority : int",
      "summary": "Lower runs first. Any int is allowed; these are conventional values.",
      "url": "/reference/api/events/eventpriority/",
      "members": [
        {
          "name": "Lowest",
          "kind": "enumMember",
          "signature": "Lowest = -200",
          "value": "-200",
          "summary": "Runs first.",
          "documented": true,
          "url": "/reference/api/events/eventpriority/#lowest"
        },
        {
          "name": "Low",
          "kind": "enumMember",
          "signature": "Low = -100",
          "value": "-100",
          "summary": "Runs early.",
          "documented": true,
          "url": "/reference/api/events/eventpriority/#low"
        },
        {
          "name": "Normal",
          "kind": "enumMember",
          "signature": "Normal = 0",
          "value": "0",
          "summary": "Default.",
          "documented": true,
          "url": "/reference/api/events/eventpriority/#normal"
        },
        {
          "name": "High",
          "kind": "enumMember",
          "signature": "High = 100",
          "value": "100",
          "summary": "Runs late.",
          "documented": true,
          "url": "/reference/api/events/eventpriority/#high"
        },
        {
          "name": "Highest",
          "kind": "enumMember",
          "signature": "Highest = 200",
          "value": "200",
          "summary": "Runs last before monitors.",
          "documented": true,
          "url": "/reference/api/events/eventpriority/#highest"
        },
        {
          "name": "Monitor",
          "kind": "enumMember",
          "signature": "Monitor = 1000",
          "value": "1000",
          "summary": "Observe the final outcome; must not modify the event.",
          "documented": true,
          "url": "/reference/api/events/eventpriority/#monitor"
        }
      ]
    },
    {
      "name": "EventRegistry",
      "fullName": "Mc.Scripting.EventRegistry",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "events",
      "categoryLabel": "Events (infrastructure)",
      "signature": "public sealed class EventRegistry",
      "summary": "Event subscription and firing, scoped to a plugin (everything is released on unload).",
      "examples": [
        "```csharp\n// Block spam (High runs after Normal, so other plugins' edits are already applied)\nEvents.On((ref PlayerChatEvent e) =>\n{\n    if (e.Message.Contains(\"spam\", StringComparison.OrdinalIgnoreCase)) e.Cancelled = true;\n}, EventPriority.High);\n\n// Rewrite a mutable field\nEvents.On((ref EntityDamageEvent e) => e.Amount *= 0.5f);\n\n// Observe the final outcome without changing it\nEvents.On((ref PlayerChatEvent e) => Log.Info(e.Cancelled ? \"chat was blocked\" : \"chat delivered\"),\n          EventPriority.Monitor, receiveCancelled: true);\n```"
      ],
      "url": "/reference/api/events/eventregistry/",
      "members": [
        {
          "name": "Fire",
          "kind": "method",
          "signature": "public bool Fire<T>(ref T ev) where T : struct, IEvent",
          "parameters": [
            {
              "name": "ev",
              "type": "T",
              "modifier": "ref"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : struct, IEvent"
          ],
          "summary": "Fires an event through the native bus (native and managed handlers, by priority). Returns false if it was cancelled.",
          "documented": true,
          "url": "/reference/api/events/eventregistry/#firet"
        },
        {
          "name": "HasSubscribers",
          "kind": "method",
          "signature": "public bool HasSubscribers<T>() where T : struct, IEvent",
          "returns": {
            "type": "bool"
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : struct, IEvent"
          ],
          "summary": "Whether anybody (native or managed) listens to `T`.",
          "documented": true,
          "url": "/reference/api/events/eventregistry/#hassubscriberst"
        },
        {
          "name": "On",
          "kind": "method",
          "signature": "public Subscription On<T>(EventListener<T> listener, EventPriority priority = EventPriority.Normal, bool receiveCancelled = false) where T : struct, IEvent",
          "parameters": [
            {
              "name": "listener",
              "type": "EventListener<T>",
              "summary": "Handler, invoked on the tick thread with the event by reference."
            },
            {
              "name": "priority",
              "type": "EventPriority",
              "default": "EventPriority.Normal",
              "summary": "Lower runs first; native and managed handlers share one ordering."
            },
            {
              "name": "receiveCancelled",
              "type": "bool",
              "default": "false",
              "summary": "Also invoke the listener after a higher-priority handler cancelled the event."
            }
          ],
          "returns": {
            "type": "Subscription"
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : struct, IEvent"
          ],
          "summary": "Subscribes `listener` to events of type `T`.",
          "documented": true,
          "url": "/reference/api/events/eventregistry/#ont"
        }
      ]
    },
    {
      "name": "EventType<T>",
      "fullName": "Mc.Scripting.EventType`1",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "events",
      "categoryLabel": "Events (infrastructure)",
      "signature": "public static class EventType<T> where T : struct, IEvent",
      "typeParameters": [
        "T"
      ],
      "summary": "Resolved runtime id per event type.",
      "url": "/reference/api/events/eventtype-1/",
      "members": [
        {
          "name": "Id",
          "kind": "field",
          "signature": "public static readonly ushort Id;",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "The runtime event id.",
          "documented": true,
          "url": "/reference/api/events/eventtype-1/#id"
        }
      ]
    },
    {
      "name": "BlockBreakEvent",
      "fullName": "Mc.Scripting.Events.BlockBreakEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct BlockBreakEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player is about to break a block. Cancel to keep the block (the client is resynced).",
      "url": "/reference/api/event-types/blockbreakevent/",
      "event": 20,
      "members": [
        {
          "name": "BlockBreakEvent",
          "kind": "ctor",
          "signature": "public BlockBreakEvent(Player player, BlockPos pos, BlockState blockState, bool dropItems, int experience, ItemView tool)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            },
            {
              "name": "blockState",
              "type": "BlockState"
            },
            {
              "name": "dropItems",
              "type": "bool"
            },
            {
              "name": "experience",
              "type": "int"
            },
            {
              "name": "tool",
              "type": "ItemView"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/blockbreakevent/#constructor"
        },
        {
          "name": "BlockState",
          "kind": "property",
          "signature": "public BlockState BlockState { get; }",
          "returns": {
            "type": "BlockState"
          },
          "summary": "The block state about to be broken.",
          "documented": true,
          "url": "/reference/api/event-types/blockbreakevent/#blockstate"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/blockbreakevent/#cancelled"
        },
        {
          "name": "DropItems",
          "kind": "property",
          "signature": "public bool DropItems { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the block drops its loot (the experience is controlled by experience).",
          "documented": true,
          "url": "/reference/api/event-types/blockbreakevent/#dropitems"
        },
        {
          "name": "Experience",
          "kind": "property",
          "signature": "public int Experience { get; set; }",
          "returns": {
            "type": "int"
          },
          "summary": "The experience orbs dropped by the block, pre-filled with what vanilla would drop (ores, spawners, sculk; silk touch applied). Set 0 to drop none or any amount to drop that many; independent of drop_items.",
          "documented": true,
          "url": "/reference/api/event-types/blockbreakevent/#experience"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/blockbreakevent/#player"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The block.",
          "documented": true,
          "url": "/reference/api/event-types/blockbreakevent/#pos"
        },
        {
          "name": "Tool",
          "kind": "property",
          "signature": "public ItemView Tool { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The item in the main hand.",
          "documented": true,
          "url": "/reference/api/event-types/blockbreakevent/#tool"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/blockbreakevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockbreakevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockbreakevent/#key"
        }
      ]
    },
    {
      "name": "BlockBurnEvent",
      "fullName": "Mc.Scripting.Events.BlockBurnEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct BlockBurnEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "Fire is about to destroy a block. Cancel to keep it.",
      "url": "/reference/api/event-types/blockburnevent/",
      "event": 182,
      "members": [
        {
          "name": "BlockBurnEvent",
          "kind": "ctor",
          "signature": "public BlockBurnEvent(World world, BlockPos pos, BlockState blockState)",
          "parameters": [
            {
              "name": "world",
              "type": "World"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            },
            {
              "name": "blockState",
              "type": "BlockState"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/blockburnevent/#constructor"
        },
        {
          "name": "BlockState",
          "kind": "property",
          "signature": "public BlockState BlockState { get; }",
          "returns": {
            "type": "BlockState"
          },
          "summary": "Its state.",
          "documented": true,
          "url": "/reference/api/event-types/blockburnevent/#blockstate"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/blockburnevent/#cancelled"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The burning block.",
          "documented": true,
          "url": "/reference/api/event-types/blockburnevent/#pos"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/event-types/blockburnevent/#world"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/blockburnevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockburnevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockburnevent/#key"
        }
      ]
    },
    {
      "name": "BlockDamageEvent",
      "fullName": "Mc.Scripting.Events.BlockDamageEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct BlockDamageEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player started digging a block. Cancel to stop the dig. Set InstaBreak to break it at once.",
      "url": "/reference/api/event-types/blockdamageevent/",
      "event": 180,
      "members": [
        {
          "name": "BlockDamageEvent",
          "kind": "ctor",
          "signature": "public BlockDamageEvent(Player player, BlockPos pos, BlockFace face, ItemView tool, bool instaBreak)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            },
            {
              "name": "face",
              "type": "BlockFace"
            },
            {
              "name": "tool",
              "type": "ItemView"
            },
            {
              "name": "instaBreak",
              "type": "bool"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/blockdamageevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/blockdamageevent/#cancelled"
        },
        {
          "name": "Face",
          "kind": "property",
          "signature": "public BlockFace Face { get; }",
          "returns": {
            "type": "BlockFace"
          },
          "summary": "The face being dug.",
          "documented": true,
          "url": "/reference/api/event-types/blockdamageevent/#face"
        },
        {
          "name": "InstaBreak",
          "kind": "property",
          "signature": "public bool InstaBreak { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Break the block immediately (as in creative mode).",
          "documented": true,
          "url": "/reference/api/event-types/blockdamageevent/#instabreak"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/blockdamageevent/#player"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The block.",
          "documented": true,
          "url": "/reference/api/event-types/blockdamageevent/#pos"
        },
        {
          "name": "Tool",
          "kind": "property",
          "signature": "public ItemView Tool { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The item in the main hand.",
          "documented": true,
          "url": "/reference/api/event-types/blockdamageevent/#tool"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/blockdamageevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockdamageevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockdamageevent/#key"
        }
      ]
    },
    {
      "name": "BlockFadeEvent",
      "fullName": "Mc.Scripting.Events.BlockFadeEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct BlockFadeEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A block is melting, drying or fading (ice, snow, farmland, fire). Cancel to keep it.",
      "url": "/reference/api/event-types/blockfadeevent/",
      "event": 184,
      "members": [
        {
          "name": "BlockFadeEvent",
          "kind": "ctor",
          "signature": "public BlockFadeEvent(World world, BlockPos pos, BlockState blockState, BlockState newState)",
          "parameters": [
            {
              "name": "world",
              "type": "World"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            },
            {
              "name": "blockState",
              "type": "BlockState"
            },
            {
              "name": "newState",
              "type": "BlockState"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/blockfadeevent/#constructor"
        },
        {
          "name": "BlockState",
          "kind": "property",
          "signature": "public BlockState BlockState { get; }",
          "returns": {
            "type": "BlockState"
          },
          "summary": "The current state.",
          "documented": true,
          "url": "/reference/api/event-types/blockfadeevent/#blockstate"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/blockfadeevent/#cancelled"
        },
        {
          "name": "NewState",
          "kind": "property",
          "signature": "public BlockState NewState { get; }",
          "returns": {
            "type": "BlockState"
          },
          "summary": "The state it fades to.",
          "documented": true,
          "url": "/reference/api/event-types/blockfadeevent/#newstate"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The block.",
          "documented": true,
          "url": "/reference/api/event-types/blockfadeevent/#pos"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/event-types/blockfadeevent/#world"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/blockfadeevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockfadeevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockfadeevent/#key"
        }
      ]
    },
    {
      "name": "BlockFormEvent",
      "fullName": "Mc.Scripting.Events.BlockFormEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct BlockFormEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A block is forming through the environment (snow, ice, concrete, obsidian ...). Cancel to stop it.",
      "url": "/reference/api/event-types/blockformevent/",
      "event": 185,
      "members": [
        {
          "name": "BlockFormEvent",
          "kind": "ctor",
          "signature": "public BlockFormEvent(World world, BlockPos pos, BlockState blockState, BlockState newState)",
          "parameters": [
            {
              "name": "world",
              "type": "World"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            },
            {
              "name": "blockState",
              "type": "BlockState"
            },
            {
              "name": "newState",
              "type": "BlockState"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/blockformevent/#constructor"
        },
        {
          "name": "BlockState",
          "kind": "property",
          "signature": "public BlockState BlockState { get; }",
          "returns": {
            "type": "BlockState"
          },
          "summary": "The current state.",
          "documented": true,
          "url": "/reference/api/event-types/blockformevent/#blockstate"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/blockformevent/#cancelled"
        },
        {
          "name": "NewState",
          "kind": "property",
          "signature": "public BlockState NewState { get; }",
          "returns": {
            "type": "BlockState"
          },
          "summary": "The state that forms.",
          "documented": true,
          "url": "/reference/api/event-types/blockformevent/#newstate"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The position.",
          "documented": true,
          "url": "/reference/api/event-types/blockformevent/#pos"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/event-types/blockformevent/#world"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/blockformevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockformevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockformevent/#key"
        }
      ]
    },
    {
      "name": "BlockGrowEvent",
      "fullName": "Mc.Scripting.Events.BlockGrowEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct BlockGrowEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A plant is growing (crops, stems, cactus, sugar cane, ...). Cancel to stop it.",
      "url": "/reference/api/event-types/blockgrowevent/",
      "event": 186,
      "members": [
        {
          "name": "BlockGrowEvent",
          "kind": "ctor",
          "signature": "public BlockGrowEvent(World world, BlockPos pos, BlockState blockState, BlockState newState)",
          "parameters": [
            {
              "name": "world",
              "type": "World"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            },
            {
              "name": "blockState",
              "type": "BlockState"
            },
            {
              "name": "newState",
              "type": "BlockState"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/blockgrowevent/#constructor"
        },
        {
          "name": "BlockState",
          "kind": "property",
          "signature": "public BlockState BlockState { get; }",
          "returns": {
            "type": "BlockState"
          },
          "summary": "The current state.",
          "documented": true,
          "url": "/reference/api/event-types/blockgrowevent/#blockstate"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/blockgrowevent/#cancelled"
        },
        {
          "name": "NewState",
          "kind": "property",
          "signature": "public BlockState NewState { get; }",
          "returns": {
            "type": "BlockState"
          },
          "summary": "The state after growth.",
          "documented": true,
          "url": "/reference/api/event-types/blockgrowevent/#newstate"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The block.",
          "documented": true,
          "url": "/reference/api/event-types/blockgrowevent/#pos"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/event-types/blockgrowevent/#world"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/blockgrowevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockgrowevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockgrowevent/#key"
        }
      ]
    },
    {
      "name": "BlockIgniteEvent",
      "fullName": "Mc.Scripting.Events.BlockIgniteEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct BlockIgniteEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "Fire is about to be placed in the world. Cancel to prevent it.",
      "url": "/reference/api/event-types/blockigniteevent/",
      "event": 181,
      "members": [
        {
          "name": "BlockIgniteEvent",
          "kind": "ctor",
          "signature": "public BlockIgniteEvent(World world, BlockPos pos, IgniteCause cause, Entity ignitingEntity)",
          "parameters": [
            {
              "name": "world",
              "type": "World"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            },
            {
              "name": "cause",
              "type": "IgniteCause"
            },
            {
              "name": "ignitingEntity",
              "type": "Entity"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/blockigniteevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/blockigniteevent/#cancelled"
        },
        {
          "name": "Cause",
          "kind": "property",
          "signature": "public IgniteCause Cause { get; }",
          "returns": {
            "type": "IgniteCause"
          },
          "summary": "What ignites it.",
          "documented": true,
          "url": "/reference/api/event-types/blockigniteevent/#cause"
        },
        {
          "name": "IgnitingEntity",
          "kind": "property",
          "signature": "public Entity IgnitingEntity { get; }",
          "returns": {
            "type": "Entity"
          },
          "summary": "The player or entity responsible, if any.",
          "documented": true,
          "url": "/reference/api/event-types/blockigniteevent/#ignitingentity"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "Where the fire goes.",
          "documented": true,
          "url": "/reference/api/event-types/blockigniteevent/#pos"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/event-types/blockigniteevent/#world"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/blockigniteevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockigniteevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockigniteevent/#key"
        }
      ]
    },
    {
      "name": "BlockPistonExtendEvent",
      "fullName": "Mc.Scripting.Events.BlockPistonExtendEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct BlockPistonExtendEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A piston is about to extend. Cancel to keep it retracted.",
      "url": "/reference/api/event-types/blockpistonextendevent/",
      "event": 187,
      "members": [
        {
          "name": "BlockPistonExtendEvent",
          "kind": "ctor",
          "signature": "public BlockPistonExtendEvent(World world, BlockPos pos, BlockFace direction, bool sticky, int movedBlocks)",
          "parameters": [
            {
              "name": "world",
              "type": "World"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            },
            {
              "name": "direction",
              "type": "BlockFace"
            },
            {
              "name": "sticky",
              "type": "bool"
            },
            {
              "name": "movedBlocks",
              "type": "int"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/blockpistonextendevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/blockpistonextendevent/#cancelled"
        },
        {
          "name": "Direction",
          "kind": "property",
          "signature": "public BlockFace Direction { get; }",
          "returns": {
            "type": "BlockFace"
          },
          "summary": "The push direction.",
          "documented": true,
          "url": "/reference/api/event-types/blockpistonextendevent/#direction"
        },
        {
          "name": "MovedBlocks",
          "kind": "property",
          "signature": "public int MovedBlocks { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Number of blocks that move.",
          "documented": true,
          "url": "/reference/api/event-types/blockpistonextendevent/#movedblocks"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The piston.",
          "documented": true,
          "url": "/reference/api/event-types/blockpistonextendevent/#pos"
        },
        {
          "name": "Sticky",
          "kind": "property",
          "signature": "public bool Sticky { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether it is a sticky piston.",
          "documented": true,
          "url": "/reference/api/event-types/blockpistonextendevent/#sticky"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/event-types/blockpistonextendevent/#world"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/blockpistonextendevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockpistonextendevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockpistonextendevent/#key"
        }
      ]
    },
    {
      "name": "BlockPistonRetractEvent",
      "fullName": "Mc.Scripting.Events.BlockPistonRetractEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct BlockPistonRetractEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A piston is about to retract. Cancel to keep it extended.",
      "url": "/reference/api/event-types/blockpistonretractevent/",
      "event": 188,
      "members": [
        {
          "name": "BlockPistonRetractEvent",
          "kind": "ctor",
          "signature": "public BlockPistonRetractEvent(World world, BlockPos pos, BlockFace direction, bool sticky, int movedBlocks)",
          "parameters": [
            {
              "name": "world",
              "type": "World"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            },
            {
              "name": "direction",
              "type": "BlockFace"
            },
            {
              "name": "sticky",
              "type": "bool"
            },
            {
              "name": "movedBlocks",
              "type": "int"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/blockpistonretractevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/blockpistonretractevent/#cancelled"
        },
        {
          "name": "Direction",
          "kind": "property",
          "signature": "public BlockFace Direction { get; }",
          "returns": {
            "type": "BlockFace"
          },
          "summary": "The push direction.",
          "documented": true,
          "url": "/reference/api/event-types/blockpistonretractevent/#direction"
        },
        {
          "name": "MovedBlocks",
          "kind": "property",
          "signature": "public int MovedBlocks { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Number of blocks that move.",
          "documented": true,
          "url": "/reference/api/event-types/blockpistonretractevent/#movedblocks"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The piston.",
          "documented": true,
          "url": "/reference/api/event-types/blockpistonretractevent/#pos"
        },
        {
          "name": "Sticky",
          "kind": "property",
          "signature": "public bool Sticky { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether it is a sticky piston.",
          "documented": true,
          "url": "/reference/api/event-types/blockpistonretractevent/#sticky"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/event-types/blockpistonretractevent/#world"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/blockpistonretractevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockpistonretractevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockpistonretractevent/#key"
        }
      ]
    },
    {
      "name": "BlockPlaceEvent",
      "fullName": "Mc.Scripting.Events.BlockPlaceEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct BlockPlaceEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player is about to place a block. Cancel to refuse; 'block_state' may be rewritten.",
      "url": "/reference/api/event-types/blockplaceevent/",
      "event": 21,
      "members": [
        {
          "name": "BlockPlaceEvent",
          "kind": "ctor",
          "signature": "public BlockPlaceEvent(Player player, BlockPos pos, BlockPos against, BlockState blockState, byte hand, ItemView item)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            },
            {
              "name": "against",
              "type": "BlockPos"
            },
            {
              "name": "blockState",
              "type": "BlockState"
            },
            {
              "name": "hand",
              "type": "byte"
            },
            {
              "name": "item",
              "type": "ItemView"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/blockplaceevent/#constructor"
        },
        {
          "name": "Against",
          "kind": "property",
          "signature": "public BlockPos Against { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The clicked block.",
          "documented": true,
          "url": "/reference/api/event-types/blockplaceevent/#against"
        },
        {
          "name": "BlockState",
          "kind": "property",
          "signature": "public BlockState BlockState { get; set; }",
          "returns": {
            "type": "BlockState"
          },
          "summary": "The state that will be placed.",
          "documented": true,
          "url": "/reference/api/event-types/blockplaceevent/#blockstate"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/blockplaceevent/#cancelled"
        },
        {
          "name": "Hand",
          "kind": "property",
          "signature": "public byte Hand { get; }",
          "returns": {
            "type": "byte"
          },
          "summary": "The hand (Hand).",
          "documented": true,
          "url": "/reference/api/event-types/blockplaceevent/#hand"
        },
        {
          "name": "Item",
          "kind": "property",
          "signature": "public ItemView Item { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The block item used.",
          "documented": true,
          "url": "/reference/api/event-types/blockplaceevent/#item"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/blockplaceevent/#player"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "Where the block goes.",
          "documented": true,
          "url": "/reference/api/event-types/blockplaceevent/#pos"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/blockplaceevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockplaceevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockplaceevent/#key"
        }
      ]
    },
    {
      "name": "BlockRedstoneEvent",
      "fullName": "Mc.Scripting.Events.BlockRedstoneEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct BlockRedstoneEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A redstone component's output power changes. The new power may be changed.",
      "url": "/reference/api/event-types/blockredstoneevent/",
      "event": 189,
      "members": [
        {
          "name": "BlockRedstoneEvent",
          "kind": "ctor",
          "signature": "public BlockRedstoneEvent(World world, BlockPos pos, int oldPower, int newPower)",
          "parameters": [
            {
              "name": "world",
              "type": "World"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            },
            {
              "name": "oldPower",
              "type": "int"
            },
            {
              "name": "newPower",
              "type": "int"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/blockredstoneevent/#constructor"
        },
        {
          "name": "NewPower",
          "kind": "property",
          "signature": "public int NewPower { get; set; }",
          "returns": {
            "type": "int"
          },
          "summary": "Power after (0-15).",
          "documented": true,
          "url": "/reference/api/event-types/blockredstoneevent/#newpower"
        },
        {
          "name": "OldPower",
          "kind": "property",
          "signature": "public int OldPower { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Power before (0-15).",
          "documented": true,
          "url": "/reference/api/event-types/blockredstoneevent/#oldpower"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The block.",
          "documented": true,
          "url": "/reference/api/event-types/blockredstoneevent/#pos"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/event-types/blockredstoneevent/#world"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/blockredstoneevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockredstoneevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockredstoneevent/#key"
        }
      ]
    },
    {
      "name": "BlockSpreadEvent",
      "fullName": "Mc.Scripting.Events.BlockSpreadEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct BlockSpreadEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A block is spreading to a neighbour (grass, mycelium, vines, fire). Cancel to stop it.",
      "url": "/reference/api/event-types/blockspreadevent/",
      "event": 183,
      "members": [
        {
          "name": "BlockSpreadEvent",
          "kind": "ctor",
          "signature": "public BlockSpreadEvent(World world, BlockPos pos, BlockPos source, BlockState newState)",
          "parameters": [
            {
              "name": "world",
              "type": "World"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            },
            {
              "name": "source",
              "type": "BlockPos"
            },
            {
              "name": "newState",
              "type": "BlockState"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/blockspreadevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/blockspreadevent/#cancelled"
        },
        {
          "name": "NewState",
          "kind": "property",
          "signature": "public BlockState NewState { get; }",
          "returns": {
            "type": "BlockState"
          },
          "summary": "The state that would be placed.",
          "documented": true,
          "url": "/reference/api/event-types/blockspreadevent/#newstate"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The target position.",
          "documented": true,
          "url": "/reference/api/event-types/blockspreadevent/#pos"
        },
        {
          "name": "Source",
          "kind": "property",
          "signature": "public BlockPos Source { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The spreading block.",
          "documented": true,
          "url": "/reference/api/event-types/blockspreadevent/#source"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/event-types/blockspreadevent/#world"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/blockspreadevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockspreadevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/blockspreadevent/#key"
        }
      ]
    },
    {
      "name": "ChunkLoadEvent",
      "fullName": "Mc.Scripting.Events.ChunkLoadEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct ChunkLoadEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A chunk became loaded.",
      "url": "/reference/api/event-types/chunkloadevent/",
      "event": 50,
      "members": [
        {
          "name": "ChunkLoadEvent",
          "kind": "ctor",
          "signature": "public ChunkLoadEvent(int dimension, int x, int z, bool newlyGenerated)",
          "parameters": [
            {
              "name": "dimension",
              "type": "int"
            },
            {
              "name": "x",
              "type": "int"
            },
            {
              "name": "z",
              "type": "int"
            },
            {
              "name": "newlyGenerated",
              "type": "bool"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/chunkloadevent/#constructor"
        },
        {
          "name": "Dimension",
          "kind": "property",
          "signature": "public int Dimension { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Dimension index.",
          "documented": true,
          "url": "/reference/api/event-types/chunkloadevent/#dimension"
        },
        {
          "name": "NewlyGenerated",
          "kind": "property",
          "signature": "public bool NewlyGenerated { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "True when the chunk was generated, false when loaded from disk.",
          "documented": true,
          "url": "/reference/api/event-types/chunkloadevent/#newlygenerated"
        },
        {
          "name": "X",
          "kind": "property",
          "signature": "public int X { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Chunk x.",
          "documented": true,
          "url": "/reference/api/event-types/chunkloadevent/#x"
        },
        {
          "name": "Z",
          "kind": "property",
          "signature": "public int Z { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Chunk z.",
          "documented": true,
          "url": "/reference/api/event-types/chunkloadevent/#z"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/chunkloadevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/chunkloadevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/chunkloadevent/#key"
        }
      ]
    },
    {
      "name": "ChunkUnloadEvent",
      "fullName": "Mc.Scripting.Events.ChunkUnloadEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct ChunkUnloadEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A chunk is about to be unloaded.",
      "url": "/reference/api/event-types/chunkunloadevent/",
      "event": 51,
      "members": [
        {
          "name": "ChunkUnloadEvent",
          "kind": "ctor",
          "signature": "public ChunkUnloadEvent(int dimension, int x, int z)",
          "parameters": [
            {
              "name": "dimension",
              "type": "int"
            },
            {
              "name": "x",
              "type": "int"
            },
            {
              "name": "z",
              "type": "int"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/chunkunloadevent/#constructor"
        },
        {
          "name": "Dimension",
          "kind": "property",
          "signature": "public int Dimension { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Dimension index.",
          "documented": true,
          "url": "/reference/api/event-types/chunkunloadevent/#dimension"
        },
        {
          "name": "X",
          "kind": "property",
          "signature": "public int X { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Chunk x.",
          "documented": true,
          "url": "/reference/api/event-types/chunkunloadevent/#x"
        },
        {
          "name": "Z",
          "kind": "property",
          "signature": "public int Z { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Chunk z.",
          "documented": true,
          "url": "/reference/api/event-types/chunkunloadevent/#z"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/chunkunloadevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/chunkunloadevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/chunkunloadevent/#key"
        }
      ]
    },
    {
      "name": "CommandsRegisteredEvent",
      "fullName": "Mc.Scripting.Events.CommandsRegisteredEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct CommandsRegisteredEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "The command tree changed (a plugin registered or removed commands, or a permission changed). Fired once per tick at most, before the trees are resent to the players.",
      "url": "/reference/api/event-types/commandsregisteredevent/",
      "event": 101,
      "members": [
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/commandsregisteredevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/commandsregisteredevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/commandsregisteredevent/#key"
        }
      ]
    },
    {
      "name": "CraftItemEvent",
      "fullName": "Mc.Scripting.Events.CraftItemEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct CraftItemEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player took the result of a crafting recipe (cancel the InventoryClick event of the result slot to prevent crafting).",
      "url": "/reference/api/event-types/craftitemevent/",
      "event": 264,
      "members": [
        {
          "name": "CraftItemEvent",
          "kind": "ctor",
          "signature": "public CraftItemEvent(Player player, Utf8String recipe, ItemView result, bool shiftClick)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "recipe",
              "type": "Utf8String"
            },
            {
              "name": "result",
              "type": "ItemView"
            },
            {
              "name": "shiftClick",
              "type": "bool"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/craftitemevent/#constructor"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/craftitemevent/#player"
        },
        {
          "name": "Recipe",
          "kind": "property",
          "signature": "public Utf8String Recipe { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "Recipe id.",
          "documented": true,
          "url": "/reference/api/event-types/craftitemevent/#recipe"
        },
        {
          "name": "Result",
          "kind": "property",
          "signature": "public ItemView Result { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The crafted item.",
          "documented": true,
          "url": "/reference/api/event-types/craftitemevent/#result"
        },
        {
          "name": "ShiftClick",
          "kind": "property",
          "signature": "public bool ShiftClick { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether it is a quick-craft.",
          "documented": true,
          "url": "/reference/api/event-types/craftitemevent/#shiftclick"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/craftitemevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/craftitemevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/craftitemevent/#key"
        }
      ]
    },
    {
      "name": "CustomBlockBreakEvent",
      "fullName": "Mc.Scripting.Events.CustomBlockBreakEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct CustomBlockBreakEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player is breaking a custom block (fired by the content layer after BlockBreak). Cancel to keep the block.",
      "url": "/reference/api/event-types/customblockbreakevent/",
      "event": 274,
      "members": [
        {
          "name": "CustomBlockBreakEvent",
          "kind": "ctor",
          "signature": "public CustomBlockBreakEvent(Player player, Utf8String customId, World world, BlockPos pos, bool dropItems)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "customId",
              "type": "Utf8String"
            },
            {
              "name": "world",
              "type": "World"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            },
            {
              "name": "dropItems",
              "type": "bool"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/customblockbreakevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/customblockbreakevent/#cancelled"
        },
        {
          "name": "CustomId",
          "kind": "property",
          "signature": "public Utf8String CustomId { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The id of the custom block.",
          "documented": true,
          "url": "/reference/api/event-types/customblockbreakevent/#customid"
        },
        {
          "name": "DropItems",
          "kind": "property",
          "signature": "public bool DropItems { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the block's drops are spawned.",
          "documented": true,
          "url": "/reference/api/event-types/customblockbreakevent/#dropitems"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/customblockbreakevent/#player"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The block.",
          "documented": true,
          "url": "/reference/api/event-types/customblockbreakevent/#pos"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/event-types/customblockbreakevent/#world"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/customblockbreakevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/customblockbreakevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/customblockbreakevent/#key"
        }
      ]
    },
    {
      "name": "CustomBlockInteractEvent",
      "fullName": "Mc.Scripting.Events.CustomBlockInteractEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct CustomBlockInteractEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player right-clicked a custom block (fired by the content layer after PlayerInteractBlock). Cancel to stop the block handler and the item use.",
      "url": "/reference/api/event-types/customblockinteractevent/",
      "event": 275,
      "members": [
        {
          "name": "CustomBlockInteractEvent",
          "kind": "ctor",
          "signature": "public CustomBlockInteractEvent(Player player, Utf8String customId, World world, BlockPos pos, BlockFace face, Hand hand, ItemView item)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "customId",
              "type": "Utf8String"
            },
            {
              "name": "world",
              "type": "World"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            },
            {
              "name": "face",
              "type": "BlockFace"
            },
            {
              "name": "hand",
              "type": "Hand"
            },
            {
              "name": "item",
              "type": "ItemView"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/customblockinteractevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/customblockinteractevent/#cancelled"
        },
        {
          "name": "CustomId",
          "kind": "property",
          "signature": "public Utf8String CustomId { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The id of the custom block.",
          "documented": true,
          "url": "/reference/api/event-types/customblockinteractevent/#customid"
        },
        {
          "name": "Face",
          "kind": "property",
          "signature": "public BlockFace Face { get; }",
          "returns": {
            "type": "BlockFace"
          },
          "summary": "The clicked face.",
          "documented": true,
          "url": "/reference/api/event-types/customblockinteractevent/#face"
        },
        {
          "name": "Hand",
          "kind": "property",
          "signature": "public Hand Hand { get; }",
          "returns": {
            "type": "Hand"
          },
          "summary": "The hand.",
          "documented": true,
          "url": "/reference/api/event-types/customblockinteractevent/#hand"
        },
        {
          "name": "Item",
          "kind": "property",
          "signature": "public ItemView Item { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The item in that hand.",
          "documented": true,
          "url": "/reference/api/event-types/customblockinteractevent/#item"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/customblockinteractevent/#player"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The block.",
          "documented": true,
          "url": "/reference/api/event-types/customblockinteractevent/#pos"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/event-types/customblockinteractevent/#world"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/customblockinteractevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/customblockinteractevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/customblockinteractevent/#key"
        }
      ]
    },
    {
      "name": "CustomBlockPlaceEvent",
      "fullName": "Mc.Scripting.Events.CustomBlockPlaceEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct CustomBlockPlaceEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player is placing a custom block with a custom item. Cancel to refuse.",
      "url": "/reference/api/event-types/customblockplaceevent/",
      "event": 273,
      "members": [
        {
          "name": "CustomBlockPlaceEvent",
          "kind": "ctor",
          "signature": "public CustomBlockPlaceEvent(Player player, Utf8String customId, World world, BlockPos pos, BlockPos against, Hand hand)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "customId",
              "type": "Utf8String"
            },
            {
              "name": "world",
              "type": "World"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            },
            {
              "name": "against",
              "type": "BlockPos"
            },
            {
              "name": "hand",
              "type": "Hand"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/customblockplaceevent/#constructor"
        },
        {
          "name": "Against",
          "kind": "property",
          "signature": "public BlockPos Against { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The block that was clicked.",
          "documented": true,
          "url": "/reference/api/event-types/customblockplaceevent/#against"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/customblockplaceevent/#cancelled"
        },
        {
          "name": "CustomId",
          "kind": "property",
          "signature": "public Utf8String CustomId { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The id of the custom block.",
          "documented": true,
          "url": "/reference/api/event-types/customblockplaceevent/#customid"
        },
        {
          "name": "Hand",
          "kind": "property",
          "signature": "public Hand Hand { get; }",
          "returns": {
            "type": "Hand"
          },
          "summary": "The hand.",
          "documented": true,
          "url": "/reference/api/event-types/customblockplaceevent/#hand"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/customblockplaceevent/#player"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "Where it is placed.",
          "documented": true,
          "url": "/reference/api/event-types/customblockplaceevent/#pos"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/event-types/customblockplaceevent/#world"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/customblockplaceevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/customblockplaceevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/customblockplaceevent/#key"
        }
      ]
    },
    {
      "name": "CustomItemUseEvent",
      "fullName": "Mc.Scripting.Events.CustomItemUseEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct CustomItemUseEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player used a custom item (right click in the air or on a block). Fired by the content layer after PlayerInteract. Cancel to stop the item's own handler and the default action.",
      "url": "/reference/api/event-types/customitemuseevent/",
      "event": 272,
      "members": [
        {
          "name": "CustomItemUseEvent",
          "kind": "ctor",
          "signature": "public CustomItemUseEvent(Player player, Utf8String customId, Hand hand, ItemView item, bool hasBlock, BlockPos pos, BlockFace face)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "customId",
              "type": "Utf8String"
            },
            {
              "name": "hand",
              "type": "Hand"
            },
            {
              "name": "item",
              "type": "ItemView"
            },
            {
              "name": "hasBlock",
              "type": "bool"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            },
            {
              "name": "face",
              "type": "BlockFace"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/customitemuseevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/customitemuseevent/#cancelled"
        },
        {
          "name": "CustomId",
          "kind": "property",
          "signature": "public Utf8String CustomId { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The id of the custom item, \"myplugin:ruby\".",
          "documented": true,
          "url": "/reference/api/event-types/customitemuseevent/#customid"
        },
        {
          "name": "Face",
          "kind": "property",
          "signature": "public BlockFace Face { get; }",
          "returns": {
            "type": "BlockFace"
          },
          "summary": "The clicked face (only when has_block).",
          "documented": true,
          "url": "/reference/api/event-types/customitemuseevent/#face"
        },
        {
          "name": "Hand",
          "kind": "property",
          "signature": "public Hand Hand { get; }",
          "returns": {
            "type": "Hand"
          },
          "summary": "The hand.",
          "documented": true,
          "url": "/reference/api/event-types/customitemuseevent/#hand"
        },
        {
          "name": "HasBlock",
          "kind": "property",
          "signature": "public bool HasBlock { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the click was on a block.",
          "documented": true,
          "url": "/reference/api/event-types/customitemuseevent/#hasblock"
        },
        {
          "name": "Item",
          "kind": "property",
          "signature": "public ItemView Item { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The item stack.",
          "documented": true,
          "url": "/reference/api/event-types/customitemuseevent/#item"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/customitemuseevent/#player"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The clicked block (only when has_block).",
          "documented": true,
          "url": "/reference/api/event-types/customitemuseevent/#pos"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/customitemuseevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/customitemuseevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/customitemuseevent/#key"
        }
      ]
    },
    {
      "name": "EnchantItemEvent",
      "fullName": "Mc.Scripting.Events.EnchantItemEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct EnchantItemEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player is enchanting an item at an enchanting table. Cancel to refuse.",
      "url": "/reference/api/event-types/enchantitemevent/",
      "event": 268,
      "members": [
        {
          "name": "EnchantItemEvent",
          "kind": "ctor",
          "signature": "public EnchantItemEvent(Player player, ItemView item, int option, int cost)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "item",
              "type": "ItemView"
            },
            {
              "name": "option",
              "type": "int"
            },
            {
              "name": "cost",
              "type": "int"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/enchantitemevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/enchantitemevent/#cancelled"
        },
        {
          "name": "Cost",
          "kind": "property",
          "signature": "public int Cost { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Levels charged.",
          "documented": true,
          "url": "/reference/api/event-types/enchantitemevent/#cost"
        },
        {
          "name": "Item",
          "kind": "property",
          "signature": "public ItemView Item { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The item being enchanted.",
          "documented": true,
          "url": "/reference/api/event-types/enchantitemevent/#item"
        },
        {
          "name": "Option",
          "kind": "property",
          "signature": "public int Option { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The chosen option (0-2).",
          "documented": true,
          "url": "/reference/api/event-types/enchantitemevent/#option"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/enchantitemevent/#player"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/enchantitemevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/enchantitemevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/enchantitemevent/#key"
        }
      ]
    },
    {
      "name": "EntityCombustEvent",
      "fullName": "Mc.Scripting.Events.EntityCombustEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct EntityCombustEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "An entity is about to be set on fire. Cancel to prevent it; the duration may be changed.",
      "url": "/reference/api/event-types/entitycombustevent/",
      "event": 221,
      "members": [
        {
          "name": "EntityCombustEvent",
          "kind": "ctor",
          "signature": "public EntityCombustEvent(Entity entity, int durationTicks, Entity source)",
          "parameters": [
            {
              "name": "entity",
              "type": "Entity"
            },
            {
              "name": "durationTicks",
              "type": "int"
            },
            {
              "name": "source",
              "type": "Entity"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/entitycombustevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/entitycombustevent/#cancelled"
        },
        {
          "name": "DurationTicks",
          "kind": "property",
          "signature": "public int DurationTicks { get; set; }",
          "returns": {
            "type": "int"
          },
          "summary": "Burn time in ticks.",
          "documented": true,
          "url": "/reference/api/event-types/entitycombustevent/#durationticks"
        },
        {
          "name": "Entity",
          "kind": "property",
          "signature": "public Entity Entity { get; }",
          "returns": {
            "type": "Entity"
          },
          "summary": "The entity.",
          "documented": true,
          "url": "/reference/api/event-types/entitycombustevent/#entity"
        },
        {
          "name": "Source",
          "kind": "property",
          "signature": "public Entity Source { get; }",
          "returns": {
            "type": "Entity"
          },
          "summary": "The entity that ignites it, if any.",
          "documented": true,
          "url": "/reference/api/event-types/entitycombustevent/#source"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/entitycombustevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/entitycombustevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/entitycombustevent/#key"
        }
      ]
    },
    {
      "name": "EntityDamageEvent",
      "fullName": "Mc.Scripting.Events.EntityDamageEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct EntityDamageEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A living entity is about to take damage. Cancel to negate it. 'amount' (the damage after armor and enchantments, before absorption) may be rewritten.",
      "url": "/reference/api/event-types/entitydamageevent/",
      "event": 31,
      "members": [
        {
          "name": "EntityDamageEvent",
          "kind": "ctor",
          "signature": "public EntityDamageEvent(Entity target, Entity attacker, int damageType, float amount, DamageCause cause, float rawAmount, BlockPos blockSource, bool hasBlockSource)",
          "parameters": [
            {
              "name": "target",
              "type": "Entity"
            },
            {
              "name": "attacker",
              "type": "Entity"
            },
            {
              "name": "damageType",
              "type": "int"
            },
            {
              "name": "amount",
              "type": "float"
            },
            {
              "name": "cause",
              "type": "DamageCause"
            },
            {
              "name": "rawAmount",
              "type": "float"
            },
            {
              "name": "blockSource",
              "type": "BlockPos"
            },
            {
              "name": "hasBlockSource",
              "type": "bool"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/entitydamageevent/#constructor"
        },
        {
          "name": "Amount",
          "kind": "property",
          "signature": "public float Amount { get; set; }",
          "returns": {
            "type": "float"
          },
          "summary": "Final damage after armor and enchantments.",
          "documented": true,
          "url": "/reference/api/event-types/entitydamageevent/#amount"
        },
        {
          "name": "Attacker",
          "kind": "property",
          "signature": "public Entity Attacker { get; }",
          "returns": {
            "type": "Entity"
          },
          "summary": "The responsible entity, none when there is no attacking entity.",
          "documented": true,
          "url": "/reference/api/event-types/entitydamageevent/#attacker"
        },
        {
          "name": "BlockSource",
          "kind": "property",
          "signature": "public BlockPos BlockSource { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "Position of the block that caused the damage.",
          "documented": true,
          "url": "/reference/api/event-types/entitydamageevent/#blocksource"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/entitydamageevent/#cancelled"
        },
        {
          "name": "Cause",
          "kind": "property",
          "signature": "public DamageCause Cause { get; }",
          "returns": {
            "type": "DamageCause"
          },
          "summary": "The cause derived from the damage type.",
          "documented": true,
          "url": "/reference/api/event-types/entitydamageevent/#cause"
        },
        {
          "name": "DamageType",
          "kind": "property",
          "signature": "public string DamageType { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The damage type key, e.g. minecraft:fall. (a registry key such as \"minecraft:damage\"; resolved on first access).",
          "documented": true,
          "url": "/reference/api/event-types/entitydamageevent/#damagetype"
        },
        {
          "name": "HasBlockSource",
          "kind": "property",
          "signature": "public bool HasBlockSource { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether block_source is valid (cactus, magma, fire, ...).",
          "documented": true,
          "url": "/reference/api/event-types/entitydamageevent/#hasblocksource"
        },
        {
          "name": "RawAmount",
          "kind": "property",
          "signature": "public float RawAmount { get; }",
          "returns": {
            "type": "float"
          },
          "summary": "Damage before armor and enchantments.",
          "documented": true,
          "url": "/reference/api/event-types/entitydamageevent/#rawamount"
        },
        {
          "name": "Target",
          "kind": "property",
          "signature": "public Entity Target { get; }",
          "returns": {
            "type": "Entity"
          },
          "summary": "The damaged entity.",
          "documented": true,
          "url": "/reference/api/event-types/entitydamageevent/#target"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/entitydamageevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/entitydamageevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/entitydamageevent/#key"
        }
      ]
    },
    {
      "name": "EntityDeathEvent",
      "fullName": "Mc.Scripting.Events.EntityDeathEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct EntityDeathEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A living entity died.",
      "url": "/reference/api/event-types/entitydeathevent/",
      "event": 32,
      "members": [
        {
          "name": "EntityDeathEvent",
          "kind": "ctor",
          "signature": "public EntityDeathEvent(Entity entity, Entity killer, int damageType, DamageCause cause)",
          "parameters": [
            {
              "name": "entity",
              "type": "Entity"
            },
            {
              "name": "killer",
              "type": "Entity"
            },
            {
              "name": "damageType",
              "type": "int"
            },
            {
              "name": "cause",
              "type": "DamageCause"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/entitydeathevent/#constructor"
        },
        {
          "name": "Cause",
          "kind": "property",
          "signature": "public DamageCause Cause { get; }",
          "returns": {
            "type": "DamageCause"
          },
          "summary": "The cause derived from the damage type.",
          "documented": true,
          "url": "/reference/api/event-types/entitydeathevent/#cause"
        },
        {
          "name": "DamageType",
          "kind": "property",
          "signature": "public string DamageType { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The damage type key, e.g. minecraft:player_attack. (a registry key such as \"minecraft:damage\"; resolved on first access).",
          "documented": true,
          "url": "/reference/api/event-types/entitydeathevent/#damagetype"
        },
        {
          "name": "Entity",
          "kind": "property",
          "signature": "public Entity Entity { get; }",
          "returns": {
            "type": "Entity"
          },
          "summary": "The entity.",
          "documented": true,
          "url": "/reference/api/event-types/entitydeathevent/#entity"
        },
        {
          "name": "Killer",
          "kind": "property",
          "signature": "public Entity Killer { get; }",
          "returns": {
            "type": "Entity"
          },
          "summary": "The responsible entity (none if there is none).",
          "documented": true,
          "url": "/reference/api/event-types/entitydeathevent/#killer"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/entitydeathevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/entitydeathevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/entitydeathevent/#key"
        }
      ]
    },
    {
      "name": "EntitySpawnEvent",
      "fullName": "Mc.Scripting.Events.EntitySpawnEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct EntitySpawnEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "An entity is about to be added to the world. Cancel to prevent it.",
      "url": "/reference/api/event-types/entityspawnevent/",
      "event": 30,
      "members": [
        {
          "name": "EntitySpawnEvent",
          "kind": "ctor",
          "signature": "public EntitySpawnEvent(Entity entity, int entityType, Vec3d position, SpawnReason reason)",
          "parameters": [
            {
              "name": "entity",
              "type": "Entity"
            },
            {
              "name": "entityType",
              "type": "int"
            },
            {
              "name": "position",
              "type": "Vec3d"
            },
            {
              "name": "reason",
              "type": "SpawnReason"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/entityspawnevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/entityspawnevent/#cancelled"
        },
        {
          "name": "Entity",
          "kind": "property",
          "signature": "public Entity Entity { get; }",
          "returns": {
            "type": "Entity"
          },
          "summary": "The entity (already created).",
          "documented": true,
          "url": "/reference/api/event-types/entityspawnevent/#entity"
        },
        {
          "name": "EntityType",
          "kind": "property",
          "signature": "public string EntityType { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The entity type key, e.g. minecraft:zombie. (a registry key such as \"minecraft:entity\"; resolved on first access).",
          "documented": true,
          "url": "/reference/api/event-types/entityspawnevent/#entitytype"
        },
        {
          "name": "Position",
          "kind": "property",
          "signature": "public Vec3d Position { get; }",
          "returns": {
            "type": "Vec3d"
          },
          "summary": "Where it appears.",
          "documented": true,
          "url": "/reference/api/event-types/entityspawnevent/#position"
        },
        {
          "name": "Reason",
          "kind": "property",
          "signature": "public SpawnReason Reason { get; }",
          "returns": {
            "type": "SpawnReason"
          },
          "summary": "Why it spawns.",
          "documented": true,
          "url": "/reference/api/event-types/entityspawnevent/#reason"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/entityspawnevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/entityspawnevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/entityspawnevent/#key"
        }
      ]
    },
    {
      "name": "FurnaceBurnEvent",
      "fullName": "Mc.Scripting.Events.FurnaceBurnEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct FurnaceBurnEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A furnace is about to consume fuel. Cancel to not burn it; the burn time may be changed.",
      "url": "/reference/api/event-types/furnaceburnevent/",
      "event": 267,
      "members": [
        {
          "name": "FurnaceBurnEvent",
          "kind": "ctor",
          "signature": "public FurnaceBurnEvent(World world, BlockPos pos, ItemView fuel, int burnTicks)",
          "parameters": [
            {
              "name": "world",
              "type": "World"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            },
            {
              "name": "fuel",
              "type": "ItemView"
            },
            {
              "name": "burnTicks",
              "type": "int"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/furnaceburnevent/#constructor"
        },
        {
          "name": "BurnTicks",
          "kind": "property",
          "signature": "public int BurnTicks { get; set; }",
          "returns": {
            "type": "int"
          },
          "summary": "Burn time in ticks.",
          "documented": true,
          "url": "/reference/api/event-types/furnaceburnevent/#burnticks"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/furnaceburnevent/#cancelled"
        },
        {
          "name": "Fuel",
          "kind": "property",
          "signature": "public ItemView Fuel { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The fuel.",
          "documented": true,
          "url": "/reference/api/event-types/furnaceburnevent/#fuel"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The furnace.",
          "documented": true,
          "url": "/reference/api/event-types/furnaceburnevent/#pos"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/event-types/furnaceburnevent/#world"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/furnaceburnevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/furnaceburnevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/furnaceburnevent/#key"
        }
      ]
    },
    {
      "name": "FurnaceSmeltEvent",
      "fullName": "Mc.Scripting.Events.FurnaceSmeltEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct FurnaceSmeltEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A furnace, smoker or blast furnace finished smelting an item. Cancel to keep the input unsmelted.",
      "url": "/reference/api/event-types/furnacesmeltevent/",
      "event": 266,
      "members": [
        {
          "name": "FurnaceSmeltEvent",
          "kind": "ctor",
          "signature": "public FurnaceSmeltEvent(World world, BlockPos pos, ItemView source, ItemView result)",
          "parameters": [
            {
              "name": "world",
              "type": "World"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            },
            {
              "name": "source",
              "type": "ItemView"
            },
            {
              "name": "result",
              "type": "ItemView"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/furnacesmeltevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/furnacesmeltevent/#cancelled"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The furnace.",
          "documented": true,
          "url": "/reference/api/event-types/furnacesmeltevent/#pos"
        },
        {
          "name": "Result",
          "kind": "property",
          "signature": "public ItemView Result { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The product.",
          "documented": true,
          "url": "/reference/api/event-types/furnacesmeltevent/#result"
        },
        {
          "name": "Source",
          "kind": "property",
          "signature": "public ItemView Source { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The ingredient.",
          "documented": true,
          "url": "/reference/api/event-types/furnacesmeltevent/#source"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/event-types/furnacesmeltevent/#world"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/furnacesmeltevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/furnacesmeltevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/furnacesmeltevent/#key"
        }
      ]
    },
    {
      "name": "InventoryClickEvent",
      "fullName": "Mc.Scripting.Events.InventoryClickEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct InventoryClickEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player clicked a slot of an open container (also the player inventory). Cancel to undo the click (the client is resynced).",
      "url": "/reference/api/event-types/inventoryclickevent/",
      "event": 262,
      "members": [
        {
          "name": "InventoryClickEvent",
          "kind": "ctor",
          "signature": "public InventoryClickEvent(Player player, InventoryKind kind, int slot, ClickType clickType, int button, ItemView clicked, ItemView cursor)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "kind",
              "type": "InventoryKind"
            },
            {
              "name": "slot",
              "type": "int"
            },
            {
              "name": "clickType",
              "type": "ClickType"
            },
            {
              "name": "button",
              "type": "int"
            },
            {
              "name": "clicked",
              "type": "ItemView"
            },
            {
              "name": "cursor",
              "type": "ItemView"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/inventoryclickevent/#constructor"
        },
        {
          "name": "Button",
          "kind": "property",
          "signature": "public int Button { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Raw button of the packet.",
          "documented": true,
          "url": "/reference/api/event-types/inventoryclickevent/#button"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/inventoryclickevent/#cancelled"
        },
        {
          "name": "ClickType",
          "kind": "property",
          "signature": "public ClickType ClickType { get; }",
          "returns": {
            "type": "ClickType"
          },
          "summary": "How it was clicked.",
          "documented": true,
          "url": "/reference/api/event-types/inventoryclickevent/#clicktype"
        },
        {
          "name": "Clicked",
          "kind": "property",
          "signature": "public ItemView Clicked { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The item in the clicked slot.",
          "documented": true,
          "url": "/reference/api/event-types/inventoryclickevent/#clicked"
        },
        {
          "name": "Cursor",
          "kind": "property",
          "signature": "public ItemView Cursor { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The item on the cursor.",
          "documented": true,
          "url": "/reference/api/event-types/inventoryclickevent/#cursor"
        },
        {
          "name": "Kind",
          "kind": "property",
          "signature": "public InventoryKind Kind { get; }",
          "returns": {
            "type": "InventoryKind"
          },
          "summary": "The container kind.",
          "documented": true,
          "url": "/reference/api/event-types/inventoryclickevent/#kind"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/inventoryclickevent/#player"
        },
        {
          "name": "Slot",
          "kind": "property",
          "signature": "public int Slot { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The clicked slot index of the container (-999 outside the window).",
          "documented": true,
          "url": "/reference/api/event-types/inventoryclickevent/#slot"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/inventoryclickevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/inventoryclickevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/inventoryclickevent/#key"
        }
      ]
    },
    {
      "name": "InventoryCloseEvent",
      "fullName": "Mc.Scripting.Events.InventoryCloseEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct InventoryCloseEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player closed a container.",
      "url": "/reference/api/event-types/inventorycloseevent/",
      "event": 261,
      "members": [
        {
          "name": "InventoryCloseEvent",
          "kind": "ctor",
          "signature": "public InventoryCloseEvent(Player player, InventoryKind kind)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "kind",
              "type": "InventoryKind"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/inventorycloseevent/#constructor"
        },
        {
          "name": "Kind",
          "kind": "property",
          "signature": "public InventoryKind Kind { get; }",
          "returns": {
            "type": "InventoryKind"
          },
          "summary": "The container kind.",
          "documented": true,
          "url": "/reference/api/event-types/inventorycloseevent/#kind"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/inventorycloseevent/#player"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/inventorycloseevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/inventorycloseevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/inventorycloseevent/#key"
        }
      ]
    },
    {
      "name": "InventoryDragEvent",
      "fullName": "Mc.Scripting.Events.InventoryDragEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct InventoryDragEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player finished dragging a stack over several slots. Cancel to undo.",
      "url": "/reference/api/event-types/inventorydragevent/",
      "event": 263,
      "members": [
        {
          "name": "InventoryDragEvent",
          "kind": "ctor",
          "signature": "public InventoryDragEvent(Player player, InventoryKind kind, DragType dragType, NativeBytes slots, ItemView cursor)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "kind",
              "type": "InventoryKind"
            },
            {
              "name": "dragType",
              "type": "DragType"
            },
            {
              "name": "slots",
              "type": "NativeBytes"
            },
            {
              "name": "cursor",
              "type": "ItemView"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/inventorydragevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/inventorydragevent/#cancelled"
        },
        {
          "name": "Cursor",
          "kind": "property",
          "signature": "public ItemView Cursor { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The cursor stack being distributed.",
          "documented": true,
          "url": "/reference/api/event-types/inventorydragevent/#cursor"
        },
        {
          "name": "DragType",
          "kind": "property",
          "signature": "public DragType DragType { get; }",
          "returns": {
            "type": "DragType"
          },
          "summary": "The drag mode.",
          "documented": true,
          "url": "/reference/api/event-types/inventorydragevent/#dragtype"
        },
        {
          "name": "Kind",
          "kind": "property",
          "signature": "public InventoryKind Kind { get; }",
          "returns": {
            "type": "InventoryKind"
          },
          "summary": "The container kind.",
          "documented": true,
          "url": "/reference/api/event-types/inventorydragevent/#kind"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/inventorydragevent/#player"
        },
        {
          "name": "Slots",
          "kind": "property",
          "signature": "public NativeBytes Slots { get; }",
          "returns": {
            "type": "NativeBytes"
          },
          "summary": "The dragged slots as packed little-endian int32 values.",
          "documented": true,
          "url": "/reference/api/event-types/inventorydragevent/#slots"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/inventorydragevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/inventorydragevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/inventorydragevent/#key"
        }
      ]
    },
    {
      "name": "InventoryOpenEvent",
      "fullName": "Mc.Scripting.Events.InventoryOpenEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct InventoryOpenEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player is about to open a container (chest, furnace, crafting table, ...). Cancel to keep it closed.",
      "url": "/reference/api/event-types/inventoryopenevent/",
      "event": 260,
      "members": [
        {
          "name": "InventoryOpenEvent",
          "kind": "ctor",
          "signature": "public InventoryOpenEvent(Player player, InventoryKind kind, bool hasPos, BlockPos pos)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "kind",
              "type": "InventoryKind"
            },
            {
              "name": "hasPos",
              "type": "bool"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/inventoryopenevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/inventoryopenevent/#cancelled"
        },
        {
          "name": "HasPos",
          "kind": "property",
          "signature": "public bool HasPos { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the container is a block.",
          "documented": true,
          "url": "/reference/api/event-types/inventoryopenevent/#haspos"
        },
        {
          "name": "Kind",
          "kind": "property",
          "signature": "public InventoryKind Kind { get; }",
          "returns": {
            "type": "InventoryKind"
          },
          "summary": "The container kind.",
          "documented": true,
          "url": "/reference/api/event-types/inventoryopenevent/#kind"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/inventoryopenevent/#player"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The block position.",
          "documented": true,
          "url": "/reference/api/event-types/inventoryopenevent/#pos"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/inventoryopenevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/inventoryopenevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/inventoryopenevent/#key"
        }
      ]
    },
    {
      "name": "LoginDeferral",
      "fullName": "Mc.Scripting.Events.LoginDeferral",
      "namespace": "Mc.Scripting.Events",
      "kind": "class",
      "category": "events",
      "categoryLabel": "Events (infrastructure)",
      "signature": "public sealed class LoginDeferral : IDisposable, IPluginResource",
      "interfaces": [
        "IDisposable",
        "IPluginResource"
      ],
      "summary": "A login held by a plugin (see `PlayerPreLoginEvent.Defer`). Completing it is thread-safe and happens once.",
      "url": "/reference/api/events/logindeferral/",
      "members": [
        {
          "name": "IsCompleted",
          "kind": "property",
          "signature": "public bool IsCompleted { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the deferral was already completed.",
          "documented": true,
          "url": "/reference/api/events/logindeferral/#iscompleted"
        },
        {
          "name": "UnloadDenyMessage",
          "kind": "property",
          "signature": "public static Component UnloadDenyMessage { get; set; }",
          "static": true,
          "returns": {
            "type": "Component"
          },
          "summary": "What a player sees when the plugin holding his login unloaded before it answered (the safe default: a check that never finished is not a pass).",
          "documented": true,
          "url": "/reference/api/events/logindeferral/#unloaddenymessage"
        },
        {
          "name": "Allow",
          "kind": "method",
          "signature": "public void Allow()",
          "summary": "Lets the login continue. Callable from any thread.",
          "documented": true,
          "url": "/reference/api/events/logindeferral/#allow"
        },
        {
          "name": "Deny",
          "kind": "method",
          "signature": "public void Deny(Component? reason = null)",
          "parameters": [
            {
              "name": "reason",
              "type": "Component?",
              "default": "null",
              "summary": "Shown on the disconnect screen (a generic message when null)."
            }
          ],
          "summary": "Refuses the login. Callable from any thread.",
          "documented": true,
          "url": "/reference/api/events/logindeferral/#deny"
        },
        {
          "name": "Dispose",
          "kind": "method",
          "signature": "public void Dispose()",
          "summary": "The plugin unloaded with the deferral pending: the login is refused with `LoginDeferral.UnloadDenyMessage`. A check that never answered (a ban list lookup) must not turn into a pass; the player just reconnects. Complete the deferral yourself with `LoginDeferral.Allow` to decide otherwise.",
          "documented": true,
          "url": "/reference/api/events/logindeferral/#dispose"
        }
      ]
    },
    {
      "name": "MenuClickEvent",
      "fullName": "Mc.Scripting.Events.MenuClickEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct MenuClickEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player clicked in a custom GUI (Menu) of a plugin, after InventoryClick. Menus are locked: the click is denied (the client is resynced) unless a handler sets Allow, and a cancel always denies it. A click that could move items out of or into the menu (a slot of the menu, shift click, double click, drag, number key, off hand key) is delivered here with the slot of the menu's own numbering (top slots first, then the player's 27 + 9 slots).",
      "url": "/reference/api/event-types/menuclickevent/",
      "event": 270,
      "members": [
        {
          "name": "MenuClickEvent",
          "kind": "ctor",
          "signature": "public MenuClickEvent(Player player, int menu, int slot, ClickType clickType, int button, ItemView clicked, ItemView cursor, bool allow)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "menu",
              "type": "int"
            },
            {
              "name": "slot",
              "type": "int"
            },
            {
              "name": "clickType",
              "type": "ClickType"
            },
            {
              "name": "button",
              "type": "int"
            },
            {
              "name": "clicked",
              "type": "ItemView"
            },
            {
              "name": "cursor",
              "type": "ItemView"
            },
            {
              "name": "allow",
              "type": "bool"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/menuclickevent/#constructor"
        },
        {
          "name": "Allow",
          "kind": "property",
          "signature": "public bool Allow { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Set by a handler to let the click change items like in a chest (default false: the menu is a display).",
          "documented": true,
          "url": "/reference/api/event-types/menuclickevent/#allow"
        },
        {
          "name": "Button",
          "kind": "property",
          "signature": "public int Button { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Raw button of the packet.",
          "documented": true,
          "url": "/reference/api/event-types/menuclickevent/#button"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/menuclickevent/#cancelled"
        },
        {
          "name": "ClickType",
          "kind": "property",
          "signature": "public ClickType ClickType { get; }",
          "returns": {
            "type": "ClickType"
          },
          "summary": "How it was clicked.",
          "documented": true,
          "url": "/reference/api/event-types/menuclickevent/#clicktype"
        },
        {
          "name": "Clicked",
          "kind": "property",
          "signature": "public ItemView Clicked { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The item in the clicked slot.",
          "documented": true,
          "url": "/reference/api/event-types/menuclickevent/#clicked"
        },
        {
          "name": "Cursor",
          "kind": "property",
          "signature": "public ItemView Cursor { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The item on the cursor.",
          "documented": true,
          "url": "/reference/api/event-types/menuclickevent/#cursor"
        },
        {
          "name": "Menu",
          "kind": "property",
          "signature": "public int Menu { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The native id of the menu (what Menu uses to route the click).",
          "documented": true,
          "url": "/reference/api/event-types/menuclickevent/#menu"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/menuclickevent/#player"
        },
        {
          "name": "Slot",
          "kind": "property",
          "signature": "public int Slot { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The clicked slot, -999 outside the window.",
          "documented": true,
          "url": "/reference/api/event-types/menuclickevent/#slot"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/menuclickevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/menuclickevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/menuclickevent/#key"
        }
      ]
    },
    {
      "name": "MenuCloseEvent",
      "fullName": "Mc.Scripting.Events.MenuCloseEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct MenuCloseEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A plugin menu was closed for a player (for any reason). The player's cursor stack has already been given back.",
      "url": "/reference/api/event-types/menucloseevent/",
      "event": 271,
      "members": [
        {
          "name": "MenuCloseEvent",
          "kind": "ctor",
          "signature": "public MenuCloseEvent(Player player, int menu, MenuCloseReason reason)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "menu",
              "type": "int"
            },
            {
              "name": "reason",
              "type": "MenuCloseReason"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/menucloseevent/#constructor"
        },
        {
          "name": "Menu",
          "kind": "property",
          "signature": "public int Menu { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The native id of the menu.",
          "documented": true,
          "url": "/reference/api/event-types/menucloseevent/#menu"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/menucloseevent/#player"
        },
        {
          "name": "Reason",
          "kind": "property",
          "signature": "public MenuCloseReason Reason { get; }",
          "returns": {
            "type": "MenuCloseReason"
          },
          "summary": "Why it closed.",
          "documented": true,
          "url": "/reference/api/event-types/menucloseevent/#reason"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/menucloseevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/menucloseevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/menucloseevent/#key"
        }
      ]
    },
    {
      "name": "NpcInteractEvent",
      "fullName": "Mc.Scripting.Events.NpcInteractEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct NpcInteractEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player clicked an NPC made with Npcs.Create (a left click is an attack, a right click an interaction). Observed only: the click has no other effect.",
      "url": "/reference/api/event-types/npcinteractevent/",
      "event": 304,
      "members": [
        {
          "name": "NpcInteractEvent",
          "kind": "ctor",
          "signature": "public NpcInteractEvent(Player player, ulong npc, NpcClick action, Hand hand, bool sneaking)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "npc",
              "type": "ulong"
            },
            {
              "name": "action",
              "type": "NpcClick"
            },
            {
              "name": "hand",
              "type": "Hand"
            },
            {
              "name": "sneaking",
              "type": "bool"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/npcinteractevent/#constructor"
        },
        {
          "name": "Action",
          "kind": "property",
          "signature": "public NpcClick Action { get; }",
          "returns": {
            "type": "NpcClick"
          },
          "summary": "The click.",
          "documented": true,
          "url": "/reference/api/event-types/npcinteractevent/#action"
        },
        {
          "name": "Hand",
          "kind": "property",
          "signature": "public Hand Hand { get; }",
          "returns": {
            "type": "Hand"
          },
          "summary": "The hand (a left click is the main hand).",
          "documented": true,
          "url": "/reference/api/event-types/npcinteractevent/#hand"
        },
        {
          "name": "Npc",
          "kind": "property",
          "signature": "public ulong Npc { get; }",
          "returns": {
            "type": "ulong"
          },
          "summary": "The NPC's handle.",
          "documented": true,
          "url": "/reference/api/event-types/npcinteractevent/#npc"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/npcinteractevent/#player"
        },
        {
          "name": "Sneaking",
          "kind": "property",
          "signature": "public bool Sneaking { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the player was sneaking.",
          "documented": true,
          "url": "/reference/api/event-types/npcinteractevent/#sneaking"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/npcinteractevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/npcinteractevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/npcinteractevent/#key"
        }
      ]
    },
    {
      "name": "PacketReceiveEvent",
      "fullName": "Mc.Scripting.Events.PacketReceiveEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PacketReceiveEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A decoded-frame packet arrived (payload excludes the packet id). Cancel to drop it.",
      "url": "/reference/api/event-types/packetreceiveevent/",
      "event": 40,
      "members": [
        {
          "name": "PacketReceiveEvent",
          "kind": "ctor",
          "signature": "public PacketReceiveEvent(ulong connection, Player player, byte state, int packetId, NativeBytes payload)",
          "parameters": [
            {
              "name": "connection",
              "type": "ulong"
            },
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "state",
              "type": "byte"
            },
            {
              "name": "packetId",
              "type": "int"
            },
            {
              "name": "payload",
              "type": "NativeBytes"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/packetreceiveevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/packetreceiveevent/#cancelled"
        },
        {
          "name": "Connection",
          "kind": "property",
          "signature": "public ulong Connection { get; }",
          "returns": {
            "type": "ulong"
          },
          "summary": "Connection id.",
          "documented": true,
          "url": "/reference/api/event-types/packetreceiveevent/#connection"
        },
        {
          "name": "PacketId",
          "kind": "property",
          "signature": "public int PacketId { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Packet id.",
          "documented": true,
          "url": "/reference/api/event-types/packetreceiveevent/#packetid"
        },
        {
          "name": "Payload",
          "kind": "property",
          "signature": "public NativeBytes Payload { get; }",
          "returns": {
            "type": "NativeBytes"
          },
          "summary": "Packet body (borrowed).",
          "documented": true,
          "url": "/reference/api/event-types/packetreceiveevent/#payload"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player entity (none before play).",
          "documented": true,
          "url": "/reference/api/event-types/packetreceiveevent/#player"
        },
        {
          "name": "State",
          "kind": "property",
          "signature": "public byte State { get; }",
          "returns": {
            "type": "byte"
          },
          "summary": "Connection state.",
          "documented": true,
          "url": "/reference/api/event-types/packetreceiveevent/#state"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/packetreceiveevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/packetreceiveevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/packetreceiveevent/#key"
        }
      ]
    },
    {
      "name": "PacketSendEvent",
      "fullName": "Mc.Scripting.Events.PacketSendEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PacketSendEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "RESERVED: not fired yet (the per-connection send path encodes shared frames). A packet is about to be sent to one connection.",
      "url": "/reference/api/event-types/packetsendevent/",
      "event": 41,
      "members": [
        {
          "name": "PacketSendEvent",
          "kind": "ctor",
          "signature": "public PacketSendEvent(ulong connection, Player player, byte state, int packetId, NativeBytes payload)",
          "parameters": [
            {
              "name": "connection",
              "type": "ulong"
            },
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "state",
              "type": "byte"
            },
            {
              "name": "packetId",
              "type": "int"
            },
            {
              "name": "payload",
              "type": "NativeBytes"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/packetsendevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/packetsendevent/#cancelled"
        },
        {
          "name": "Connection",
          "kind": "property",
          "signature": "public ulong Connection { get; }",
          "returns": {
            "type": "ulong"
          },
          "summary": "Connection id.",
          "documented": true,
          "url": "/reference/api/event-types/packetsendevent/#connection"
        },
        {
          "name": "PacketId",
          "kind": "property",
          "signature": "public int PacketId { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Packet id.",
          "documented": true,
          "url": "/reference/api/event-types/packetsendevent/#packetid"
        },
        {
          "name": "Payload",
          "kind": "property",
          "signature": "public NativeBytes Payload { get; }",
          "returns": {
            "type": "NativeBytes"
          },
          "summary": "Packet body (borrowed).",
          "documented": true,
          "url": "/reference/api/event-types/packetsendevent/#payload"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player entity (none before play).",
          "documented": true,
          "url": "/reference/api/event-types/packetsendevent/#player"
        },
        {
          "name": "State",
          "kind": "property",
          "signature": "public byte State { get; }",
          "returns": {
            "type": "byte"
          },
          "summary": "Connection state.",
          "documented": true,
          "url": "/reference/api/event-types/packetsendevent/#state"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/packetsendevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/packetsendevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/packetsendevent/#key"
        }
      ]
    },
    {
      "name": "PermissionChangedEvent",
      "fullName": "Mc.Scripting.Events.PermissionChangedEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PermissionChangedEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A permission entry of a player changed (or of a group or everything: AllPlayers is true). Fired after the change; the command trees of the players are resent in the same tick.",
      "url": "/reference/api/event-types/permissionchangedevent/",
      "event": 104,
      "members": [
        {
          "name": "PermissionChangedEvent",
          "kind": "ctor",
          "signature": "public PermissionChangedEvent(Uuid player, bool allPlayers)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid"
            },
            {
              "name": "allPlayers",
              "type": "bool"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/permissionchangedevent/#constructor"
        },
        {
          "name": "AllPlayers",
          "kind": "property",
          "signature": "public bool AllPlayers { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "A group, the default group or the whole backend changed.",
          "documented": true,
          "url": "/reference/api/event-types/permissionchangedevent/#allplayers"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Uuid Player { get; }",
          "returns": {
            "type": "Uuid"
          },
          "summary": "The profile whose permissions changed (zero when AllPlayers).",
          "documented": true,
          "url": "/reference/api/event-types/permissionchangedevent/#player"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/permissionchangedevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/permissionchangedevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/permissionchangedevent/#key"
        }
      ]
    },
    {
      "name": "PermissionsReloadedEvent",
      "fullName": "Mc.Scripting.Events.PermissionsReloadedEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PermissionsReloadedEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "The permission backend was reloaded from disk (/perm reload or Permissions.Reload).",
      "url": "/reference/api/event-types/permissionsreloadedevent/",
      "event": 105,
      "members": [
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/permissionsreloadedevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/permissionsreloadedevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/permissionsreloadedevent/#key"
        }
      ]
    },
    {
      "name": "PlayerChangedWorldEvent",
      "fullName": "Mc.Scripting.Events.PlayerChangedWorldEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerChangedWorldEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player arrived in another dimension.",
      "url": "/reference/api/event-types/playerchangedworldevent/",
      "event": 126,
      "members": [
        {
          "name": "PlayerChangedWorldEvent",
          "kind": "ctor",
          "signature": "public PlayerChangedWorldEvent(Player player, World fromWorld, World toWorld)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "fromWorld",
              "type": "World"
            },
            {
              "name": "toWorld",
              "type": "World"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playerchangedworldevent/#constructor"
        },
        {
          "name": "FromWorld",
          "kind": "property",
          "signature": "public World FromWorld { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension left.",
          "documented": true,
          "url": "/reference/api/event-types/playerchangedworldevent/#fromworld"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playerchangedworldevent/#player"
        },
        {
          "name": "ToWorld",
          "kind": "property",
          "signature": "public World ToWorld { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension entered.",
          "documented": true,
          "url": "/reference/api/event-types/playerchangedworldevent/#toworld"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playerchangedworldevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerchangedworldevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerchangedworldevent/#key"
        }
      ]
    },
    {
      "name": "PlayerChatEvent",
      "fullName": "Mc.Scripting.Events.PlayerChatEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerChatEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player sent a chat message. Cancel to drop it. Changing Message or Rendered sends the line as an unsigned server message instead of the player's signed one. SenderName, ChatType, Decoration and the filter fields restyle the signed line without unsigning it: the signature covers only the typed text.",
      "url": "/reference/api/event-types/playerchatevent/",
      "event": 14,
      "members": [
        {
          "name": "PlayerChatEvent",
          "kind": "ctor",
          "signature": "public PlayerChatEvent(Player player, Utf8String message, Utf8String rendered, Utf8String senderName, ChatKind chatType, Utf8String decoration, ChatFilterKind filterKind, Utf8String filterBits)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "message",
              "type": "Utf8String"
            },
            {
              "name": "rendered",
              "type": "Utf8String"
            },
            {
              "name": "senderName",
              "type": "Utf8String"
            },
            {
              "name": "chatType",
              "type": "ChatKind"
            },
            {
              "name": "decoration",
              "type": "Utf8String"
            },
            {
              "name": "filterKind",
              "type": "ChatFilterKind"
            },
            {
              "name": "filterBits",
              "type": "Utf8String"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#cancelled"
        },
        {
          "name": "ChatType",
          "kind": "property",
          "signature": "public ChatKind ChatType { get; set; }",
          "returns": {
            "type": "ChatKind"
          },
          "summary": "The chat type of the line: Chat, EmoteCommand or SayCommand. The message kinds need a target and are refused here (Chat is used).",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#chattype"
        },
        {
          "name": "Decoration",
          "kind": "property",
          "signature": "public Component Decoration { get; }",
          "returns": {
            "type": "Component"
          },
          "summary": "The body as the line shows it (unsigned content: colours, highlights, glyphs). Equal to the typed text means none. Keeps the message signed. (parsed on access; allocates).",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#decoration"
        },
        {
          "name": "DecorationJson",
          "kind": "property",
          "signature": "public Utf8String DecorationJson { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The body as the line shows it (unsigned content: colours, highlights, glyphs). Equal to the typed text means none. Keeps the message signed. as JSON text (borrowed).",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#decorationjson"
        },
        {
          "name": "FilterBits",
          "kind": "property",
          "signature": "public Utf8String FilterBits { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "For PartiallyFiltered: one 0 or 1 per UTF-16 unit of the typed text, 1 hides the unit. A different length or character fully filters the message. (mutable: use `PlayerChatEvent.SetFilterBits`)",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#filterbits"
        },
        {
          "name": "FilterKind",
          "kind": "property",
          "signature": "public ChatFilterKind FilterKind { get; set; }",
          "returns": {
            "type": "ChatFilterKind"
          },
          "summary": "How the recipients who filter text see the message (vanilla FilterMask). Any other value fully filters the message.",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#filterkind"
        },
        {
          "name": "Message",
          "kind": "property",
          "signature": "public Utf8String Message { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "What the player typed. Changing it re-renders the line with the default format. (mutable: use `PlayerChatEvent.SetMessage`)",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#message"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The sender.",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#player"
        },
        {
          "name": "Rendered",
          "kind": "property",
          "signature": "public Component Rendered { get; }",
          "returns": {
            "type": "Component"
          },
          "summary": "The complete line shown to everybody (default: <name> message). Replace it to change the format; takes precedence over Message. (parsed on access; allocates).",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#rendered"
        },
        {
          "name": "RenderedJson",
          "kind": "property",
          "signature": "public Utf8String RenderedJson { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The complete line shown to everybody (default: <name> message). Replace it to change the format; takes precedence over Message. as JSON text (borrowed).",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#renderedjson"
        },
        {
          "name": "SenderName",
          "kind": "property",
          "signature": "public Component SenderName { get; }",
          "returns": {
            "type": "Component"
          },
          "summary": "The sender name as the line shows it (hover, click and insertion included). Changing it keeps the message signed. (parsed on access; allocates).",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#sendername"
        },
        {
          "name": "SenderNameJson",
          "kind": "property",
          "signature": "public Utf8String SenderNameJson { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The sender name as the line shows it (hover, click and insertion included). Changing it keeps the message signed. as JSON text (borrowed).",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#sendernamejson"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#key"
        },
        {
          "name": "SetDecoration",
          "kind": "method",
          "signature": "public void SetDecoration(Component value)",
          "parameters": [
            {
              "name": "value",
              "type": "Component"
            }
          ],
          "summary": "Replaces `PlayerChatEvent.Decoration`; an empty component clears it where the event says so.",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#setdecoration"
        },
        {
          "name": "SetFilterBits",
          "kind": "method",
          "signature": "public void SetFilterBits(string value)",
          "parameters": [
            {
              "name": "value",
              "type": "string"
            }
          ],
          "summary": "Replaces `PlayerChatEvent.FilterBits` (copied into the per-tick event arena; the engine reads it back after dispatch).",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#setfilterbits"
        },
        {
          "name": "SetMessage",
          "kind": "method",
          "signature": "public void SetMessage(string value)",
          "parameters": [
            {
              "name": "value",
              "type": "string"
            }
          ],
          "summary": "Replaces `PlayerChatEvent.Message` (copied into the per-tick event arena; the engine reads it back after dispatch).",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#setmessage"
        },
        {
          "name": "SetRendered",
          "kind": "method",
          "signature": "public void SetRendered(Component value)",
          "parameters": [
            {
              "name": "value",
              "type": "Component"
            }
          ],
          "summary": "Replaces `PlayerChatEvent.Rendered`; an empty component clears it where the event says so.",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#setrendered"
        },
        {
          "name": "SetSenderName",
          "kind": "method",
          "signature": "public void SetSenderName(Component value)",
          "parameters": [
            {
              "name": "value",
              "type": "Component"
            }
          ],
          "summary": "Replaces `PlayerChatEvent.SenderName`; an empty component clears it where the event says so.",
          "documented": true,
          "url": "/reference/api/event-types/playerchatevent/#setsendername"
        }
      ]
    },
    {
      "name": "PlayerCommandEvent",
      "fullName": "Mc.Scripting.Events.PlayerCommandEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerCommandEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player ran a command (without the leading slash). Cancel to suppress it; the command line may be rewritten.",
      "url": "/reference/api/event-types/playercommandevent/",
      "event": 15,
      "members": [
        {
          "name": "PlayerCommandEvent",
          "kind": "ctor",
          "signature": "public PlayerCommandEvent(Player player, Utf8String command)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "command",
              "type": "Utf8String"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playercommandevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/playercommandevent/#cancelled"
        },
        {
          "name": "Command",
          "kind": "property",
          "signature": "public Utf8String Command { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The command line without the slash. (mutable: use `PlayerCommandEvent.SetCommand`)",
          "documented": true,
          "url": "/reference/api/event-types/playercommandevent/#command"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playercommandevent/#player"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playercommandevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playercommandevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playercommandevent/#key"
        },
        {
          "name": "SetCommand",
          "kind": "method",
          "signature": "public void SetCommand(string value)",
          "parameters": [
            {
              "name": "value",
              "type": "string"
            }
          ],
          "summary": "Replaces `PlayerCommandEvent.Command` (copied into the per-tick event arena; the engine reads it back after dispatch).",
          "documented": true,
          "url": "/reference/api/event-types/playercommandevent/#setcommand"
        }
      ]
    },
    {
      "name": "PlayerConsumeEvent",
      "fullName": "Mc.Scripting.Events.PlayerConsumeEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerConsumeEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player finished eating or drinking. Cancel to prevent the effects and the item consumption.",
      "url": "/reference/api/event-types/playerconsumeevent/",
      "event": 117,
      "members": [
        {
          "name": "PlayerConsumeEvent",
          "kind": "ctor",
          "signature": "public PlayerConsumeEvent(Player player, ItemView item, Hand hand)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "item",
              "type": "ItemView"
            },
            {
              "name": "hand",
              "type": "Hand"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playerconsumeevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/playerconsumeevent/#cancelled"
        },
        {
          "name": "Hand",
          "kind": "property",
          "signature": "public Hand Hand { get; }",
          "returns": {
            "type": "Hand"
          },
          "summary": "The hand.",
          "documented": true,
          "url": "/reference/api/event-types/playerconsumeevent/#hand"
        },
        {
          "name": "Item",
          "kind": "property",
          "signature": "public ItemView Item { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The consumed item.",
          "documented": true,
          "url": "/reference/api/event-types/playerconsumeevent/#item"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playerconsumeevent/#player"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playerconsumeevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerconsumeevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerconsumeevent/#key"
        }
      ]
    },
    {
      "name": "PlayerCreativeSlotEvent",
      "fullName": "Mc.Scripting.Events.PlayerCreativeSlotEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerCreativeSlotEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A creative-mode player put a stack into an inventory slot from the creative menu (slot -1: threw one out of the menu). Cancel to refuse; the client is resynced.",
      "url": "/reference/api/event-types/playercreativeslotevent/",
      "event": 129,
      "members": [
        {
          "name": "PlayerCreativeSlotEvent",
          "kind": "ctor",
          "signature": "public PlayerCreativeSlotEvent(Player player, int slot, ItemView item)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "slot",
              "type": "int"
            },
            {
              "name": "item",
              "type": "ItemView"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playercreativeslotevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/playercreativeslotevent/#cancelled"
        },
        {
          "name": "Item",
          "kind": "property",
          "signature": "public ItemView Item { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The stack the client wants.",
          "documented": true,
          "url": "/reference/api/event-types/playercreativeslotevent/#item"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playercreativeslotevent/#player"
        },
        {
          "name": "Slot",
          "kind": "property",
          "signature": "public int Slot { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The menu slot (1-45), or -1 for a drop.",
          "documented": true,
          "url": "/reference/api/event-types/playercreativeslotevent/#slot"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playercreativeslotevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playercreativeslotevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playercreativeslotevent/#key"
        }
      ]
    },
    {
      "name": "PlayerDeathEvent",
      "fullName": "Mc.Scripting.Events.PlayerDeathEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerDeathEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player died. The death message, inventory/experience drops and level keeping can be changed.",
      "url": "/reference/api/event-types/playerdeathevent/",
      "event": 112,
      "members": [
        {
          "name": "PlayerDeathEvent",
          "kind": "ctor",
          "signature": "public PlayerDeathEvent(Player player, Entity killer, DamageCause cause, Utf8String deathMessage, bool dropInventory, bool keepLevel, int dropExperience)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "killer",
              "type": "Entity"
            },
            {
              "name": "cause",
              "type": "DamageCause"
            },
            {
              "name": "deathMessage",
              "type": "Utf8String"
            },
            {
              "name": "dropInventory",
              "type": "bool"
            },
            {
              "name": "keepLevel",
              "type": "bool"
            },
            {
              "name": "dropExperience",
              "type": "int"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playerdeathevent/#constructor"
        },
        {
          "name": "Cause",
          "kind": "property",
          "signature": "public DamageCause Cause { get; }",
          "returns": {
            "type": "DamageCause"
          },
          "summary": "The damage cause.",
          "documented": true,
          "url": "/reference/api/event-types/playerdeathevent/#cause"
        },
        {
          "name": "DeathMessage",
          "kind": "property",
          "signature": "public Component DeathMessage { get; }",
          "returns": {
            "type": "Component"
          },
          "summary": "Broadcast to everybody (empty = none). (parsed on access; allocates).",
          "documented": true,
          "url": "/reference/api/event-types/playerdeathevent/#deathmessage"
        },
        {
          "name": "DeathMessageJson",
          "kind": "property",
          "signature": "public Utf8String DeathMessageJson { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "Broadcast to everybody (empty = none). as JSON text (borrowed).",
          "documented": true,
          "url": "/reference/api/event-types/playerdeathevent/#deathmessagejson"
        },
        {
          "name": "DropExperience",
          "kind": "property",
          "signature": "public int DropExperience { get; set; }",
          "returns": {
            "type": "int"
          },
          "summary": "Experience points dropped as orbs at the death position (default the vanilla amount min(level*7, 100), 0 with keepInventory); independent of drop_inventory.",
          "documented": true,
          "url": "/reference/api/event-types/playerdeathevent/#dropexperience"
        },
        {
          "name": "DropInventory",
          "kind": "property",
          "signature": "public bool DropInventory { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Drop the items (false keeps them, like keepInventory). Only the items: the experience is controlled by the two fields below.",
          "documented": true,
          "url": "/reference/api/event-types/playerdeathevent/#dropinventory"
        },
        {
          "name": "KeepLevel",
          "kind": "property",
          "signature": "public bool KeepLevel { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Keep the experience level through the respawn (default: the keepInventory rule). True drops no experience orbs.",
          "documented": true,
          "url": "/reference/api/event-types/playerdeathevent/#keeplevel"
        },
        {
          "name": "Killer",
          "kind": "property",
          "signature": "public Entity Killer { get; }",
          "returns": {
            "type": "Entity"
          },
          "summary": "The entity responsible (none if there is none).",
          "documented": true,
          "url": "/reference/api/event-types/playerdeathevent/#killer"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playerdeathevent/#player"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playerdeathevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerdeathevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerdeathevent/#key"
        },
        {
          "name": "SetDeathMessage",
          "kind": "method",
          "signature": "public void SetDeathMessage(Component value)",
          "parameters": [
            {
              "name": "value",
              "type": "Component"
            }
          ],
          "summary": "Replaces `PlayerDeathEvent.DeathMessage`; an empty component clears it where the event says so.",
          "documented": true,
          "url": "/reference/api/event-types/playerdeathevent/#setdeathmessage"
        }
      ]
    },
    {
      "name": "PlayerDropItemEvent",
      "fullName": "Mc.Scripting.Events.PlayerDropItemEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerDropItemEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player drops an item from the hotbar or inventory (drop key). Cancel to keep it.",
      "url": "/reference/api/event-types/playerdropitemevent/",
      "event": 115,
      "members": [
        {
          "name": "PlayerDropItemEvent",
          "kind": "ctor",
          "signature": "public PlayerDropItemEvent(Player player, ItemView item, bool wholeStack)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "item",
              "type": "ItemView"
            },
            {
              "name": "wholeStack",
              "type": "bool"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playerdropitemevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/playerdropitemevent/#cancelled"
        },
        {
          "name": "Item",
          "kind": "property",
          "signature": "public ItemView Item { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The item (a single one, or the whole stack for the control-drop).",
          "documented": true,
          "url": "/reference/api/event-types/playerdropitemevent/#item"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playerdropitemevent/#player"
        },
        {
          "name": "WholeStack",
          "kind": "property",
          "signature": "public bool WholeStack { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Control-drop of the whole stack.",
          "documented": true,
          "url": "/reference/api/event-types/playerdropitemevent/#wholestack"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playerdropitemevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerdropitemevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerdropitemevent/#key"
        }
      ]
    },
    {
      "name": "PlayerGameModeChangeEvent",
      "fullName": "Mc.Scripting.Events.PlayerGameModeChangeEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerGameModeChangeEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player's game mode is about to change. Cancel to keep the old one.",
      "url": "/reference/api/event-types/playergamemodechangeevent/",
      "event": 123,
      "members": [
        {
          "name": "PlayerGameModeChangeEvent",
          "kind": "ctor",
          "signature": "public PlayerGameModeChangeEvent(Player player, GameMode oldMode, GameMode newMode, GameModeChangeCause cause)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "oldMode",
              "type": "GameMode"
            },
            {
              "name": "newMode",
              "type": "GameMode"
            },
            {
              "name": "cause",
              "type": "GameModeChangeCause"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playergamemodechangeevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/playergamemodechangeevent/#cancelled"
        },
        {
          "name": "Cause",
          "kind": "property",
          "signature": "public GameModeChangeCause Cause { get; }",
          "returns": {
            "type": "GameModeChangeCause"
          },
          "summary": "Why.",
          "documented": true,
          "url": "/reference/api/event-types/playergamemodechangeevent/#cause"
        },
        {
          "name": "NewMode",
          "kind": "property",
          "signature": "public GameMode NewMode { get; }",
          "returns": {
            "type": "GameMode"
          },
          "summary": "The new mode.",
          "documented": true,
          "url": "/reference/api/event-types/playergamemodechangeevent/#newmode"
        },
        {
          "name": "OldMode",
          "kind": "property",
          "signature": "public GameMode OldMode { get; }",
          "returns": {
            "type": "GameMode"
          },
          "summary": "The current mode.",
          "documented": true,
          "url": "/reference/api/event-types/playergamemodechangeevent/#oldmode"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playergamemodechangeevent/#player"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playergamemodechangeevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playergamemodechangeevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playergamemodechangeevent/#key"
        }
      ]
    },
    {
      "name": "PlayerInteractBlockEvent",
      "fullName": "Mc.Scripting.Events.PlayerInteractBlockEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerInteractBlockEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player right-clicked a block (fired after PlayerInteract). Cancel to stop the block interaction and item use.",
      "url": "/reference/api/event-types/playerinteractblockevent/",
      "event": 16,
      "members": [
        {
          "name": "PlayerInteractBlockEvent",
          "kind": "ctor",
          "signature": "public PlayerInteractBlockEvent(Player player, BlockPos pos, byte face, byte hand, ItemView item)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            },
            {
              "name": "face",
              "type": "byte"
            },
            {
              "name": "hand",
              "type": "byte"
            },
            {
              "name": "item",
              "type": "ItemView"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractblockevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractblockevent/#cancelled"
        },
        {
          "name": "Face",
          "kind": "property",
          "signature": "public byte Face { get; }",
          "returns": {
            "type": "byte"
          },
          "summary": "The clicked face (BlockFace).",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractblockevent/#face"
        },
        {
          "name": "Hand",
          "kind": "property",
          "signature": "public byte Hand { get; }",
          "returns": {
            "type": "byte"
          },
          "summary": "The hand (Hand).",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractblockevent/#hand"
        },
        {
          "name": "Item",
          "kind": "property",
          "signature": "public ItemView Item { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The item in that hand.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractblockevent/#item"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractblockevent/#player"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The clicked block.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractblockevent/#pos"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractblockevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractblockevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractblockevent/#key"
        }
      ]
    },
    {
      "name": "PlayerInteractEntityEvent",
      "fullName": "Mc.Scripting.Events.PlayerInteractEntityEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerInteractEntityEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player right-clicked an entity. Cancel to stop the interaction.",
      "url": "/reference/api/event-types/playerinteractentityevent/",
      "event": 119,
      "members": [
        {
          "name": "PlayerInteractEntityEvent",
          "kind": "ctor",
          "signature": "public PlayerInteractEntityEvent(Player player, Entity target, Hand hand, ItemView item)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "target",
              "type": "Entity"
            },
            {
              "name": "hand",
              "type": "Hand"
            },
            {
              "name": "item",
              "type": "ItemView"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractentityevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractentityevent/#cancelled"
        },
        {
          "name": "Hand",
          "kind": "property",
          "signature": "public Hand Hand { get; }",
          "returns": {
            "type": "Hand"
          },
          "summary": "The hand.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractentityevent/#hand"
        },
        {
          "name": "Item",
          "kind": "property",
          "signature": "public ItemView Item { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The item in that hand.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractentityevent/#item"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractentityevent/#player"
        },
        {
          "name": "Target",
          "kind": "property",
          "signature": "public Entity Target { get; }",
          "returns": {
            "type": "Entity"
          },
          "summary": "The clicked entity.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractentityevent/#target"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractentityevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractentityevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractentityevent/#key"
        }
      ]
    },
    {
      "name": "PlayerInteractEvent",
      "fullName": "Mc.Scripting.Events.PlayerInteractEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerInteractEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player clicked (left or right, air or block). Cancel to stop the default action: block breaking start, block use, item use.",
      "url": "/reference/api/event-types/playerinteractevent/",
      "event": 118,
      "members": [
        {
          "name": "PlayerInteractEvent",
          "kind": "ctor",
          "signature": "public PlayerInteractEvent(Player player, InteractAction action, Hand hand, ItemView item, BlockPos pos, BlockFace face, bool hasBlock)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "action",
              "type": "InteractAction"
            },
            {
              "name": "hand",
              "type": "Hand"
            },
            {
              "name": "item",
              "type": "ItemView"
            },
            {
              "name": "pos",
              "type": "BlockPos"
            },
            {
              "name": "face",
              "type": "BlockFace"
            },
            {
              "name": "hasBlock",
              "type": "bool"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractevent/#constructor"
        },
        {
          "name": "Action",
          "kind": "property",
          "signature": "public InteractAction Action { get; }",
          "returns": {
            "type": "InteractAction"
          },
          "summary": "What was clicked.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractevent/#action"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractevent/#cancelled"
        },
        {
          "name": "Face",
          "kind": "property",
          "signature": "public BlockFace Face { get; }",
          "returns": {
            "type": "BlockFace"
          },
          "summary": "The clicked face (only for block actions).",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractevent/#face"
        },
        {
          "name": "Hand",
          "kind": "property",
          "signature": "public Hand Hand { get; }",
          "returns": {
            "type": "Hand"
          },
          "summary": "The hand.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractevent/#hand"
        },
        {
          "name": "HasBlock",
          "kind": "property",
          "signature": "public bool HasBlock { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether pos/face are valid.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractevent/#hasblock"
        },
        {
          "name": "Item",
          "kind": "property",
          "signature": "public ItemView Item { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The item in that hand.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractevent/#item"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractevent/#player"
        },
        {
          "name": "Pos",
          "kind": "property",
          "signature": "public BlockPos Pos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The clicked block (only for block actions).",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractevent/#pos"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerinteractevent/#key"
        }
      ]
    },
    {
      "name": "PlayerItemHeldEvent",
      "fullName": "Mc.Scripting.Events.PlayerItemHeldEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerItemHeldEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player selected another hotbar slot. Cancel to revert the selection.",
      "url": "/reference/api/event-types/playeritemheldevent/",
      "event": 113,
      "members": [
        {
          "name": "PlayerItemHeldEvent",
          "kind": "ctor",
          "signature": "public PlayerItemHeldEvent(Player player, int previousSlot, int newSlot)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "previousSlot",
              "type": "int"
            },
            {
              "name": "newSlot",
              "type": "int"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playeritemheldevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/playeritemheldevent/#cancelled"
        },
        {
          "name": "NewSlot",
          "kind": "property",
          "signature": "public int NewSlot { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Hotbar slot selected (0-8).",
          "documented": true,
          "url": "/reference/api/event-types/playeritemheldevent/#newslot"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playeritemheldevent/#player"
        },
        {
          "name": "PreviousSlot",
          "kind": "property",
          "signature": "public int PreviousSlot { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Hotbar slot before (0-8).",
          "documented": true,
          "url": "/reference/api/event-types/playeritemheldevent/#previousslot"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playeritemheldevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playeritemheldevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playeritemheldevent/#key"
        }
      ]
    },
    {
      "name": "PlayerJoinEvent",
      "fullName": "Mc.Scripting.Events.PlayerJoinEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerJoinEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player entity entered the play state. The join message is broadcast after the handlers ran.",
      "url": "/reference/api/event-types/playerjoinevent/",
      "event": 11,
      "members": [
        {
          "name": "PlayerJoinEvent",
          "kind": "ctor",
          "signature": "public PlayerJoinEvent(Player player, Uuid uuid, Utf8String username, Utf8String joinMessage)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "uuid",
              "type": "Uuid"
            },
            {
              "name": "username",
              "type": "Utf8String"
            },
            {
              "name": "joinMessage",
              "type": "Utf8String"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playerjoinevent/#constructor"
        },
        {
          "name": "JoinMessage",
          "kind": "property",
          "signature": "public Component JoinMessage { get; }",
          "returns": {
            "type": "Component"
          },
          "summary": "The message broadcast to everybody (set to an empty component to suppress it). (parsed on access; allocates).",
          "documented": true,
          "url": "/reference/api/event-types/playerjoinevent/#joinmessage"
        },
        {
          "name": "JoinMessageJson",
          "kind": "property",
          "signature": "public Utf8String JoinMessageJson { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The message broadcast to everybody (set to an empty component to suppress it). as JSON text (borrowed).",
          "documented": true,
          "url": "/reference/api/event-types/playerjoinevent/#joinmessagejson"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playerjoinevent/#player"
        },
        {
          "name": "Username",
          "kind": "property",
          "signature": "public Utf8String Username { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The profile name.",
          "documented": true,
          "url": "/reference/api/event-types/playerjoinevent/#username"
        },
        {
          "name": "Uuid",
          "kind": "property",
          "signature": "public Uuid Uuid { get; }",
          "returns": {
            "type": "Uuid"
          },
          "summary": "The profile id.",
          "documented": true,
          "url": "/reference/api/event-types/playerjoinevent/#uuid"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playerjoinevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerjoinevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerjoinevent/#key"
        },
        {
          "name": "SetJoinMessage",
          "kind": "method",
          "signature": "public void SetJoinMessage(Component value)",
          "parameters": [
            {
              "name": "value",
              "type": "Component"
            }
          ],
          "summary": "Replaces `PlayerJoinEvent.JoinMessage`; an empty component clears it where the event says so.",
          "documented": true,
          "url": "/reference/api/event-types/playerjoinevent/#setjoinmessage"
        }
      ]
    },
    {
      "name": "PlayerKickEvent",
      "fullName": "Mc.Scripting.Events.PlayerKickEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerKickEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player is about to be kicked by a command or plugin. Cancel to keep the player. Not fired for protocol errors or disconnects.",
      "url": "/reference/api/event-types/playerkickevent/",
      "event": 110,
      "members": [
        {
          "name": "PlayerKickEvent",
          "kind": "ctor",
          "signature": "public PlayerKickEvent(Player player, Utf8String reason, Utf8String leaveMessage)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "reason",
              "type": "Utf8String"
            },
            {
              "name": "leaveMessage",
              "type": "Utf8String"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playerkickevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/playerkickevent/#cancelled"
        },
        {
          "name": "LeaveMessage",
          "kind": "property",
          "signature": "public Component LeaveMessage { get; }",
          "returns": {
            "type": "Component"
          },
          "summary": "The message broadcast to everybody (empty = the default quit message). (parsed on access; allocates).",
          "documented": true,
          "url": "/reference/api/event-types/playerkickevent/#leavemessage"
        },
        {
          "name": "LeaveMessageJson",
          "kind": "property",
          "signature": "public Utf8String LeaveMessageJson { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The message broadcast to everybody (empty = the default quit message). as JSON text (borrowed).",
          "documented": true,
          "url": "/reference/api/event-types/playerkickevent/#leavemessagejson"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playerkickevent/#player"
        },
        {
          "name": "Reason",
          "kind": "property",
          "signature": "public Component Reason { get; }",
          "returns": {
            "type": "Component"
          },
          "summary": "The disconnect screen text. (parsed on access; allocates).",
          "documented": true,
          "url": "/reference/api/event-types/playerkickevent/#reason"
        },
        {
          "name": "ReasonJson",
          "kind": "property",
          "signature": "public Utf8String ReasonJson { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The disconnect screen text. as JSON text (borrowed).",
          "documented": true,
          "url": "/reference/api/event-types/playerkickevent/#reasonjson"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playerkickevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerkickevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerkickevent/#key"
        },
        {
          "name": "SetLeaveMessage",
          "kind": "method",
          "signature": "public void SetLeaveMessage(Component value)",
          "parameters": [
            {
              "name": "value",
              "type": "Component"
            }
          ],
          "summary": "Replaces `PlayerKickEvent.LeaveMessage`; an empty component clears it where the event says so.",
          "documented": true,
          "url": "/reference/api/event-types/playerkickevent/#setleavemessage"
        },
        {
          "name": "SetReason",
          "kind": "method",
          "signature": "public void SetReason(Component value)",
          "parameters": [
            {
              "name": "value",
              "type": "Component"
            }
          ],
          "summary": "Replaces `PlayerKickEvent.Reason`; an empty component clears it where the event says so.",
          "documented": true,
          "url": "/reference/api/event-types/playerkickevent/#setreason"
        }
      ]
    },
    {
      "name": "PlayerLevelChangeEvent",
      "fullName": "Mc.Scripting.Events.PlayerLevelChangeEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerLevelChangeEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player's experience level changed.",
      "url": "/reference/api/event-types/playerlevelchangeevent/",
      "event": 128,
      "members": [
        {
          "name": "PlayerLevelChangeEvent",
          "kind": "ctor",
          "signature": "public PlayerLevelChangeEvent(Player player, int oldLevel, int newLevel)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "oldLevel",
              "type": "int"
            },
            {
              "name": "newLevel",
              "type": "int"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playerlevelchangeevent/#constructor"
        },
        {
          "name": "NewLevel",
          "kind": "property",
          "signature": "public int NewLevel { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Level after.",
          "documented": true,
          "url": "/reference/api/event-types/playerlevelchangeevent/#newlevel"
        },
        {
          "name": "OldLevel",
          "kind": "property",
          "signature": "public int OldLevel { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Level before.",
          "documented": true,
          "url": "/reference/api/event-types/playerlevelchangeevent/#oldlevel"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playerlevelchangeevent/#player"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playerlevelchangeevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerlevelchangeevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerlevelchangeevent/#key"
        }
      ]
    },
    {
      "name": "PlayerMoveEvent",
      "fullName": "Mc.Scripting.Events.PlayerMoveEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerMoveEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player moved or rotated. Cancel to teleport the player back; 'to', 'yaw' and 'pitch' may be rewritten. Fires for every accepted movement packet: keep handlers cheap.",
      "url": "/reference/api/event-types/playermoveevent/",
      "event": 13,
      "members": [
        {
          "name": "PlayerMoveEvent",
          "kind": "ctor",
          "signature": "public PlayerMoveEvent(Player player, Vec3d from, Vec3d to, float yaw, float pitch, bool onGround)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "from",
              "type": "Vec3d"
            },
            {
              "name": "to",
              "type": "Vec3d"
            },
            {
              "name": "yaw",
              "type": "float"
            },
            {
              "name": "pitch",
              "type": "float"
            },
            {
              "name": "onGround",
              "type": "bool"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playermoveevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/playermoveevent/#cancelled"
        },
        {
          "name": "From",
          "kind": "property",
          "signature": "public Vec3d From { get; }",
          "returns": {
            "type": "Vec3d"
          },
          "summary": "Position before the move.",
          "documented": true,
          "url": "/reference/api/event-types/playermoveevent/#from"
        },
        {
          "name": "OnGround",
          "kind": "property",
          "signature": "public bool OnGround { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the client reports being on the ground.",
          "documented": true,
          "url": "/reference/api/event-types/playermoveevent/#onground"
        },
        {
          "name": "Pitch",
          "kind": "property",
          "signature": "public float Pitch { get; set; }",
          "returns": {
            "type": "float"
          },
          "summary": "Pitch after the move.",
          "documented": true,
          "url": "/reference/api/event-types/playermoveevent/#pitch"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playermoveevent/#player"
        },
        {
          "name": "To",
          "kind": "property",
          "signature": "public Vec3d To { get; set; }",
          "returns": {
            "type": "Vec3d"
          },
          "summary": "Position after the move.",
          "documented": true,
          "url": "/reference/api/event-types/playermoveevent/#to"
        },
        {
          "name": "Yaw",
          "kind": "property",
          "signature": "public float Yaw { get; set; }",
          "returns": {
            "type": "float"
          },
          "summary": "Yaw after the move.",
          "documented": true,
          "url": "/reference/api/event-types/playermoveevent/#yaw"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playermoveevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playermoveevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playermoveevent/#key"
        }
      ]
    },
    {
      "name": "PlayerPickupItemEvent",
      "fullName": "Mc.Scripting.Events.PlayerPickupItemEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerPickupItemEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player is about to pick up an item entity. Cancel to leave it on the ground.",
      "url": "/reference/api/event-types/playerpickupitemevent/",
      "event": 116,
      "members": [
        {
          "name": "PlayerPickupItemEvent",
          "kind": "ctor",
          "signature": "public PlayerPickupItemEvent(Player player, Entity itemEntity, ItemView item)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "itemEntity",
              "type": "Entity"
            },
            {
              "name": "item",
              "type": "ItemView"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playerpickupitemevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/playerpickupitemevent/#cancelled"
        },
        {
          "name": "Item",
          "kind": "property",
          "signature": "public ItemView Item { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The stack on the ground.",
          "documented": true,
          "url": "/reference/api/event-types/playerpickupitemevent/#item"
        },
        {
          "name": "ItemEntity",
          "kind": "property",
          "signature": "public Entity ItemEntity { get; }",
          "returns": {
            "type": "Entity"
          },
          "summary": "The item entity.",
          "documented": true,
          "url": "/reference/api/event-types/playerpickupitemevent/#itementity"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playerpickupitemevent/#player"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playerpickupitemevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerpickupitemevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerpickupitemevent/#key"
        }
      ]
    },
    {
      "name": "PlayerPortalEvent",
      "fullName": "Mc.Scripting.Events.PlayerPortalEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerPortalEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player is about to travel through a portal (nether portal, end portal, end gateway). Cancel to stay.",
      "url": "/reference/api/event-types/playerportalevent/",
      "event": 125,
      "members": [
        {
          "name": "PlayerPortalEvent",
          "kind": "ctor",
          "signature": "public PlayerPortalEvent(Player player, Vec3d from, World fromWorld, World toWorld, TeleportCause cause)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "from",
              "type": "Vec3d"
            },
            {
              "name": "fromWorld",
              "type": "World"
            },
            {
              "name": "toWorld",
              "type": "World"
            },
            {
              "name": "cause",
              "type": "TeleportCause"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playerportalevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/playerportalevent/#cancelled"
        },
        {
          "name": "Cause",
          "kind": "property",
          "signature": "public TeleportCause Cause { get; }",
          "returns": {
            "type": "TeleportCause"
          },
          "summary": "Which portal.",
          "documented": true,
          "url": "/reference/api/event-types/playerportalevent/#cause"
        },
        {
          "name": "From",
          "kind": "property",
          "signature": "public Vec3d From { get; }",
          "returns": {
            "type": "Vec3d"
          },
          "summary": "Current position.",
          "documented": true,
          "url": "/reference/api/event-types/playerportalevent/#from"
        },
        {
          "name": "FromWorld",
          "kind": "property",
          "signature": "public World FromWorld { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "Current dimension.",
          "documented": true,
          "url": "/reference/api/event-types/playerportalevent/#fromworld"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playerportalevent/#player"
        },
        {
          "name": "ToWorld",
          "kind": "property",
          "signature": "public World ToWorld { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "Destination dimension.",
          "documented": true,
          "url": "/reference/api/event-types/playerportalevent/#toworld"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playerportalevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerportalevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerportalevent/#key"
        }
      ]
    },
    {
      "name": "PlayerPreLoginEvent",
      "fullName": "Mc.Scripting.Events.PlayerPreLoginEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerPreLoginEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A client finished authentication and is about to enter the configuration phase. Handlers run on the TICK thread: a blocking call (a database or web lookup) freezes the whole server, so do not look anything up here. Cancel to refuse the login (set the kick message first), or call Defer() and answer later from Scheduler.RunAsync: the login waits up to 30 seconds, continues when every deferral allowed it and is refused as soon as one denies. A plugin that unloads releases its pending deferrals (counted as allowed).",
      "url": "/reference/api/event-types/playerpreloginevent/",
      "event": 10,
      "members": [
        {
          "name": "PlayerPreLoginEvent",
          "kind": "ctor",
          "signature": "public PlayerPreLoginEvent(ulong connection, Uuid uuid, Utf8String username, Utf8String address, Utf8String kickMessage, int deferrals)",
          "parameters": [
            {
              "name": "connection",
              "type": "ulong"
            },
            {
              "name": "uuid",
              "type": "Uuid"
            },
            {
              "name": "username",
              "type": "Utf8String"
            },
            {
              "name": "address",
              "type": "Utf8String"
            },
            {
              "name": "kickMessage",
              "type": "Utf8String"
            },
            {
              "name": "deferrals",
              "type": "int"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playerpreloginevent/#constructor"
        },
        {
          "name": "Address",
          "kind": "property",
          "signature": "public Utf8String Address { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "Client address.",
          "documented": true,
          "url": "/reference/api/event-types/playerpreloginevent/#address"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/playerpreloginevent/#cancelled"
        },
        {
          "name": "Connection",
          "kind": "property",
          "signature": "public ulong Connection { get; }",
          "returns": {
            "type": "ulong"
          },
          "summary": "Connection id.",
          "documented": true,
          "url": "/reference/api/event-types/playerpreloginevent/#connection"
        },
        {
          "name": "Deferrals",
          "kind": "property",
          "signature": "public int Deferrals { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "How many plugins hold the login (each Defer() adds one): it continues when all of them allowed it, and any denial refuses it at once.",
          "documented": true,
          "url": "/reference/api/event-types/playerpreloginevent/#deferrals"
        },
        {
          "name": "KickMessage",
          "kind": "property",
          "signature": "public Component KickMessage { get; }",
          "returns": {
            "type": "Component"
          },
          "summary": "Shown to the client when the login is cancelled (default: a generic message). (parsed on access; allocates).",
          "documented": true,
          "url": "/reference/api/event-types/playerpreloginevent/#kickmessage"
        },
        {
          "name": "KickMessageJson",
          "kind": "property",
          "signature": "public Utf8String KickMessageJson { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "Shown to the client when the login is cancelled (default: a generic message). as JSON text (borrowed).",
          "documented": true,
          "url": "/reference/api/event-types/playerpreloginevent/#kickmessagejson"
        },
        {
          "name": "Username",
          "kind": "property",
          "signature": "public Utf8String Username { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The profile name.",
          "documented": true,
          "url": "/reference/api/event-types/playerpreloginevent/#username"
        },
        {
          "name": "Uuid",
          "kind": "property",
          "signature": "public Uuid Uuid { get; }",
          "returns": {
            "type": "Uuid"
          },
          "summary": "The authenticated profile id.",
          "documented": true,
          "url": "/reference/api/event-types/playerpreloginevent/#uuid"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playerpreloginevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerpreloginevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerpreloginevent/#key"
        },
        {
          "name": "Defer",
          "kind": "method",
          "signature": "public LoginDeferral Defer()",
          "returns": {
            "type": "LoginDeferral",
            "summary": "The deferral to complete with `LoginDeferral.Allow` or `LoginDeferral.Deny`."
          },
          "summary": "Holds the login until the returned `LoginDeferral` is completed (up to the server's login timeout, 30 seconds). Use it to decide asynchronously (database or web lookups): call `Scheduler.RunAsync` and complete the deferral from any thread. Cancelling the event instead refuses the login at once.",
          "documented": true,
          "url": "/reference/api/event-types/playerpreloginevent/#defer"
        },
        {
          "name": "SetKickMessage",
          "kind": "method",
          "signature": "public void SetKickMessage(Component value)",
          "parameters": [
            {
              "name": "value",
              "type": "Component"
            }
          ],
          "summary": "Replaces `PlayerPreLoginEvent.KickMessage`; an empty component clears it where the event says so.",
          "documented": true,
          "url": "/reference/api/event-types/playerpreloginevent/#setkickmessage"
        }
      ]
    },
    {
      "name": "PlayerQuitEvent",
      "fullName": "Mc.Scripting.Events.PlayerQuitEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerQuitEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player disconnected (the entity is still alive during dispatch).",
      "url": "/reference/api/event-types/playerquitevent/",
      "event": 12,
      "members": [
        {
          "name": "PlayerQuitEvent",
          "kind": "ctor",
          "signature": "public PlayerQuitEvent(Player player, Uuid uuid, Utf8String username, Utf8String reason, Utf8String quitMessage)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "uuid",
              "type": "Uuid"
            },
            {
              "name": "username",
              "type": "Utf8String"
            },
            {
              "name": "reason",
              "type": "Utf8String"
            },
            {
              "name": "quitMessage",
              "type": "Utf8String"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playerquitevent/#constructor"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playerquitevent/#player"
        },
        {
          "name": "QuitMessage",
          "kind": "property",
          "signature": "public Component QuitMessage { get; }",
          "returns": {
            "type": "Component"
          },
          "summary": "The message broadcast to everybody (set to an empty component to suppress it). (parsed on access; allocates).",
          "documented": true,
          "url": "/reference/api/event-types/playerquitevent/#quitmessage"
        },
        {
          "name": "QuitMessageJson",
          "kind": "property",
          "signature": "public Utf8String QuitMessageJson { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The message broadcast to everybody (set to an empty component to suppress it). as JSON text (borrowed).",
          "documented": true,
          "url": "/reference/api/event-types/playerquitevent/#quitmessagejson"
        },
        {
          "name": "Reason",
          "kind": "property",
          "signature": "public Utf8String Reason { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "Why the connection ended: disconnected, kicked, timeout, protocol_error, connection_lost or server_shutdown.",
          "documented": true,
          "url": "/reference/api/event-types/playerquitevent/#reason"
        },
        {
          "name": "Username",
          "kind": "property",
          "signature": "public Utf8String Username { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The profile name.",
          "documented": true,
          "url": "/reference/api/event-types/playerquitevent/#username"
        },
        {
          "name": "Uuid",
          "kind": "property",
          "signature": "public Uuid Uuid { get; }",
          "returns": {
            "type": "Uuid"
          },
          "summary": "The profile id.",
          "documented": true,
          "url": "/reference/api/event-types/playerquitevent/#uuid"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playerquitevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerquitevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerquitevent/#key"
        },
        {
          "name": "SetQuitMessage",
          "kind": "method",
          "signature": "public void SetQuitMessage(Component value)",
          "parameters": [
            {
              "name": "value",
              "type": "Component"
            }
          ],
          "summary": "Replaces `PlayerQuitEvent.QuitMessage`; an empty component clears it where the event says so.",
          "documented": true,
          "url": "/reference/api/event-types/playerquitevent/#setquitmessage"
        }
      ]
    },
    {
      "name": "PlayerResourcePackStatusEvent",
      "fullName": "Mc.Scripting.Events.PlayerResourcePackStatusEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerResourcePackStatusEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A client reported the state of a pushed resource pack.",
      "url": "/reference/api/event-types/playerresourcepackstatusevent/",
      "event": 127,
      "members": [
        {
          "name": "PlayerResourcePackStatusEvent",
          "kind": "ctor",
          "signature": "public PlayerResourcePackStatusEvent(Player player, Uuid packId, ResourcePackStatus status)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "packId",
              "type": "Uuid"
            },
            {
              "name": "status",
              "type": "ResourcePackStatus"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playerresourcepackstatusevent/#constructor"
        },
        {
          "name": "PackId",
          "kind": "property",
          "signature": "public Uuid PackId { get; }",
          "returns": {
            "type": "Uuid"
          },
          "summary": "The pack id given in the push.",
          "documented": true,
          "url": "/reference/api/event-types/playerresourcepackstatusevent/#packid"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playerresourcepackstatusevent/#player"
        },
        {
          "name": "Status",
          "kind": "property",
          "signature": "public ResourcePackStatus Status { get; }",
          "returns": {
            "type": "ResourcePackStatus"
          },
          "summary": "The reported state.",
          "documented": true,
          "url": "/reference/api/event-types/playerresourcepackstatusevent/#status"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playerresourcepackstatusevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerresourcepackstatusevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerresourcepackstatusevent/#key"
        }
      ]
    },
    {
      "name": "PlayerRespawnEvent",
      "fullName": "Mc.Scripting.Events.PlayerRespawnEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerRespawnEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player is respawning. The destination may be changed.",
      "url": "/reference/api/event-types/playerrespawnevent/",
      "event": 111,
      "members": [
        {
          "name": "PlayerRespawnEvent",
          "kind": "ctor",
          "signature": "public PlayerRespawnEvent(Player player, RespawnReason reason, Vec3d position, World world, bool isSpawnPoint)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "reason",
              "type": "RespawnReason"
            },
            {
              "name": "position",
              "type": "Vec3d"
            },
            {
              "name": "world",
              "type": "World"
            },
            {
              "name": "isSpawnPoint",
              "type": "bool"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playerrespawnevent/#constructor"
        },
        {
          "name": "IsSpawnPoint",
          "kind": "property",
          "signature": "public bool IsSpawnPoint { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "True when a bed or respawn anchor of the player is used, false for the world spawn.",
          "documented": true,
          "url": "/reference/api/event-types/playerrespawnevent/#isspawnpoint"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playerrespawnevent/#player"
        },
        {
          "name": "Position",
          "kind": "property",
          "signature": "public Vec3d Position { get; set; }",
          "returns": {
            "type": "Vec3d"
          },
          "summary": "Where the player appears.",
          "documented": true,
          "url": "/reference/api/event-types/playerrespawnevent/#position"
        },
        {
          "name": "Reason",
          "kind": "property",
          "signature": "public RespawnReason Reason { get; }",
          "returns": {
            "type": "RespawnReason"
          },
          "summary": "Why.",
          "documented": true,
          "url": "/reference/api/event-types/playerrespawnevent/#reason"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; set; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension the player appears in.",
          "documented": true,
          "url": "/reference/api/event-types/playerrespawnevent/#world"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playerrespawnevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerrespawnevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerrespawnevent/#key"
        }
      ]
    },
    {
      "name": "PlayerSwapHandsEvent",
      "fullName": "Mc.Scripting.Events.PlayerSwapHandsEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerSwapHandsEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player swapped the main hand and off hand items (F key). Cancel to keep them.",
      "url": "/reference/api/event-types/playerswaphandsevent/",
      "event": 114,
      "members": [
        {
          "name": "PlayerSwapHandsEvent",
          "kind": "ctor",
          "signature": "public PlayerSwapHandsEvent(Player player, ItemView mainHand, ItemView offHand)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "mainHand",
              "type": "ItemView"
            },
            {
              "name": "offHand",
              "type": "ItemView"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playerswaphandsevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/playerswaphandsevent/#cancelled"
        },
        {
          "name": "MainHand",
          "kind": "property",
          "signature": "public ItemView MainHand { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The item that moves to the off hand.",
          "documented": true,
          "url": "/reference/api/event-types/playerswaphandsevent/#mainhand"
        },
        {
          "name": "OffHand",
          "kind": "property",
          "signature": "public ItemView OffHand { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The item that moves to the main hand.",
          "documented": true,
          "url": "/reference/api/event-types/playerswaphandsevent/#offhand"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playerswaphandsevent/#player"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playerswaphandsevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerswaphandsevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerswaphandsevent/#key"
        }
      ]
    },
    {
      "name": "PlayerTeleportEvent",
      "fullName": "Mc.Scripting.Events.PlayerTeleportEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerTeleportEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player is about to be teleported (command, plugin, ender pearl, ...). Cancel to stay; the destination may be changed.",
      "url": "/reference/api/event-types/playerteleportevent/",
      "event": 124,
      "members": [
        {
          "name": "PlayerTeleportEvent",
          "kind": "ctor",
          "signature": "public PlayerTeleportEvent(Player player, Vec3d from, Vec3d to, World fromWorld, World toWorld, TeleportCause cause)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "from",
              "type": "Vec3d"
            },
            {
              "name": "to",
              "type": "Vec3d"
            },
            {
              "name": "fromWorld",
              "type": "World"
            },
            {
              "name": "toWorld",
              "type": "World"
            },
            {
              "name": "cause",
              "type": "TeleportCause"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playerteleportevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/playerteleportevent/#cancelled"
        },
        {
          "name": "Cause",
          "kind": "property",
          "signature": "public TeleportCause Cause { get; }",
          "returns": {
            "type": "TeleportCause"
          },
          "summary": "Why.",
          "documented": true,
          "url": "/reference/api/event-types/playerteleportevent/#cause"
        },
        {
          "name": "From",
          "kind": "property",
          "signature": "public Vec3d From { get; }",
          "returns": {
            "type": "Vec3d"
          },
          "summary": "Current position.",
          "documented": true,
          "url": "/reference/api/event-types/playerteleportevent/#from"
        },
        {
          "name": "FromWorld",
          "kind": "property",
          "signature": "public World FromWorld { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "Current dimension.",
          "documented": true,
          "url": "/reference/api/event-types/playerteleportevent/#fromworld"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playerteleportevent/#player"
        },
        {
          "name": "To",
          "kind": "property",
          "signature": "public Vec3d To { get; set; }",
          "returns": {
            "type": "Vec3d"
          },
          "summary": "Destination position.",
          "documented": true,
          "url": "/reference/api/event-types/playerteleportevent/#to"
        },
        {
          "name": "ToWorld",
          "kind": "property",
          "signature": "public World ToWorld { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "Destination dimension.",
          "documented": true,
          "url": "/reference/api/event-types/playerteleportevent/#toworld"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playerteleportevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerteleportevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playerteleportevent/#key"
        }
      ]
    },
    {
      "name": "PlayerToggleFlightEvent",
      "fullName": "Mc.Scripting.Events.PlayerToggleFlightEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerToggleFlightEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player started or stopped flying (creative / may-fly). Cancel to ignore the change.",
      "url": "/reference/api/event-types/playertoggleflightevent/",
      "event": 122,
      "members": [
        {
          "name": "PlayerToggleFlightEvent",
          "kind": "ctor",
          "signature": "public PlayerToggleFlightEvent(Player player, bool flying)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "flying",
              "type": "bool"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playertoggleflightevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/playertoggleflightevent/#cancelled"
        },
        {
          "name": "Flying",
          "kind": "property",
          "signature": "public bool Flying { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "The new flying state.",
          "documented": true,
          "url": "/reference/api/event-types/playertoggleflightevent/#flying"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playertoggleflightevent/#player"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playertoggleflightevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playertoggleflightevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playertoggleflightevent/#key"
        }
      ]
    },
    {
      "name": "PlayerToggleSneakEvent",
      "fullName": "Mc.Scripting.Events.PlayerToggleSneakEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerToggleSneakEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player started or stopped sneaking. Cancel to ignore the change.",
      "url": "/reference/api/event-types/playertogglesneakevent/",
      "event": 120,
      "members": [
        {
          "name": "PlayerToggleSneakEvent",
          "kind": "ctor",
          "signature": "public PlayerToggleSneakEvent(Player player, bool sneaking)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "sneaking",
              "type": "bool"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playertogglesneakevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/playertogglesneakevent/#cancelled"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playertogglesneakevent/#player"
        },
        {
          "name": "Sneaking",
          "kind": "property",
          "signature": "public bool Sneaking { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "The new sneaking state.",
          "documented": true,
          "url": "/reference/api/event-types/playertogglesneakevent/#sneaking"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playertogglesneakevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playertogglesneakevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playertogglesneakevent/#key"
        }
      ]
    },
    {
      "name": "PlayerToggleSprintEvent",
      "fullName": "Mc.Scripting.Events.PlayerToggleSprintEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PlayerToggleSprintEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player started or stopped sprinting. Cancel to ignore the change.",
      "url": "/reference/api/event-types/playertogglesprintevent/",
      "event": 121,
      "members": [
        {
          "name": "PlayerToggleSprintEvent",
          "kind": "ctor",
          "signature": "public PlayerToggleSprintEvent(Player player, bool sprinting)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "sprinting",
              "type": "bool"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/playertogglesprintevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/playertogglesprintevent/#cancelled"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/playertogglesprintevent/#player"
        },
        {
          "name": "Sprinting",
          "kind": "property",
          "signature": "public bool Sprinting { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "The new sprinting state.",
          "documented": true,
          "url": "/reference/api/event-types/playertogglesprintevent/#sprinting"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/playertogglesprintevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/playertogglesprintevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/playertogglesprintevent/#key"
        }
      ]
    },
    {
      "name": "PluginDisableEvent",
      "fullName": "Mc.Scripting.Events.PluginDisableEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PluginDisableEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A plugin was disabled (unload or hot reload); its registrations are already released.",
      "url": "/reference/api/event-types/plugindisableevent/",
      "event": 103,
      "members": [
        {
          "name": "PluginDisableEvent",
          "kind": "ctor",
          "signature": "public PluginDisableEvent(Utf8String pluginId, Utf8String pluginName, Utf8String version)",
          "parameters": [
            {
              "name": "pluginId",
              "type": "Utf8String"
            },
            {
              "name": "pluginName",
              "type": "Utf8String"
            },
            {
              "name": "version",
              "type": "Utf8String"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/plugindisableevent/#constructor"
        },
        {
          "name": "PluginId",
          "kind": "property",
          "signature": "public Utf8String PluginId { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The plugin id.",
          "documented": true,
          "url": "/reference/api/event-types/plugindisableevent/#pluginid"
        },
        {
          "name": "PluginName",
          "kind": "property",
          "signature": "public Utf8String PluginName { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The plugin name.",
          "documented": true,
          "url": "/reference/api/event-types/plugindisableevent/#pluginname"
        },
        {
          "name": "Version",
          "kind": "property",
          "signature": "public Utf8String Version { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The plugin version.",
          "documented": true,
          "url": "/reference/api/event-types/plugindisableevent/#version"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/plugindisableevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/plugindisableevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/plugindisableevent/#key"
        }
      ]
    },
    {
      "name": "PluginEnableEvent",
      "fullName": "Mc.Scripting.Events.PluginEnableEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PluginEnableEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A plugin finished enabling.",
      "url": "/reference/api/event-types/pluginenableevent/",
      "event": 102,
      "members": [
        {
          "name": "PluginEnableEvent",
          "kind": "ctor",
          "signature": "public PluginEnableEvent(Utf8String pluginId, Utf8String pluginName, Utf8String version)",
          "parameters": [
            {
              "name": "pluginId",
              "type": "Utf8String"
            },
            {
              "name": "pluginName",
              "type": "Utf8String"
            },
            {
              "name": "version",
              "type": "Utf8String"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/pluginenableevent/#constructor"
        },
        {
          "name": "PluginId",
          "kind": "property",
          "signature": "public Utf8String PluginId { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The plugin id.",
          "documented": true,
          "url": "/reference/api/event-types/pluginenableevent/#pluginid"
        },
        {
          "name": "PluginName",
          "kind": "property",
          "signature": "public Utf8String PluginName { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The plugin name.",
          "documented": true,
          "url": "/reference/api/event-types/pluginenableevent/#pluginname"
        },
        {
          "name": "Version",
          "kind": "property",
          "signature": "public Utf8String Version { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The plugin version.",
          "documented": true,
          "url": "/reference/api/event-types/pluginenableevent/#version"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/pluginenableevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/pluginenableevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/pluginenableevent/#key"
        }
      ]
    },
    {
      "name": "PortalCreateEvent",
      "fullName": "Mc.Scripting.Events.PortalCreateEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PortalCreateEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A nether portal frame is about to be filled or a destination portal built. Cancel to prevent it.",
      "url": "/reference/api/event-types/portalcreateevent/",
      "event": 303,
      "members": [
        {
          "name": "PortalCreateEvent",
          "kind": "ctor",
          "signature": "public PortalCreateEvent(World world, PortalCreateReason reason, int blockCount)",
          "parameters": [
            {
              "name": "world",
              "type": "World"
            },
            {
              "name": "reason",
              "type": "PortalCreateReason"
            },
            {
              "name": "blockCount",
              "type": "int"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/portalcreateevent/#constructor"
        },
        {
          "name": "BlockCount",
          "kind": "property",
          "signature": "public int BlockCount { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Portal blocks created.",
          "documented": true,
          "url": "/reference/api/event-types/portalcreateevent/#blockcount"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/portalcreateevent/#cancelled"
        },
        {
          "name": "Reason",
          "kind": "property",
          "signature": "public PortalCreateReason Reason { get; }",
          "returns": {
            "type": "PortalCreateReason"
          },
          "summary": "Why.",
          "documented": true,
          "url": "/reference/api/event-types/portalcreateevent/#reason"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/event-types/portalcreateevent/#world"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/portalcreateevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/portalcreateevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/portalcreateevent/#key"
        }
      ]
    },
    {
      "name": "PrepareAnvilEvent",
      "fullName": "Mc.Scripting.Events.PrepareAnvilEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PrepareAnvilEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "The anvil inputs changed and a result was computed. Cancel to show no result; the cost may be changed.",
      "url": "/reference/api/event-types/prepareanvilevent/",
      "event": 269,
      "members": [
        {
          "name": "PrepareAnvilEvent",
          "kind": "ctor",
          "signature": "public PrepareAnvilEvent(Player player, ItemView first, ItemView second, ItemView result, int repairCost, Utf8String renameText)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "first",
              "type": "ItemView"
            },
            {
              "name": "second",
              "type": "ItemView"
            },
            {
              "name": "result",
              "type": "ItemView"
            },
            {
              "name": "repairCost",
              "type": "int"
            },
            {
              "name": "renameText",
              "type": "Utf8String"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/prepareanvilevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/prepareanvilevent/#cancelled"
        },
        {
          "name": "First",
          "kind": "property",
          "signature": "public ItemView First { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "Left input.",
          "documented": true,
          "url": "/reference/api/event-types/prepareanvilevent/#first"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/prepareanvilevent/#player"
        },
        {
          "name": "RenameText",
          "kind": "property",
          "signature": "public Utf8String RenameText { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The text typed in the rename field.",
          "documented": true,
          "url": "/reference/api/event-types/prepareanvilevent/#renametext"
        },
        {
          "name": "RepairCost",
          "kind": "property",
          "signature": "public int RepairCost { get; set; }",
          "returns": {
            "type": "int"
          },
          "summary": "Levels the player pays.",
          "documented": true,
          "url": "/reference/api/event-types/prepareanvilevent/#repaircost"
        },
        {
          "name": "Result",
          "kind": "property",
          "signature": "public ItemView Result { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The computed result.",
          "documented": true,
          "url": "/reference/api/event-types/prepareanvilevent/#result"
        },
        {
          "name": "Second",
          "kind": "property",
          "signature": "public ItemView Second { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "Right input.",
          "documented": true,
          "url": "/reference/api/event-types/prepareanvilevent/#second"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/prepareanvilevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/prepareanvilevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/prepareanvilevent/#key"
        }
      ]
    },
    {
      "name": "PrepareCraftEvent",
      "fullName": "Mc.Scripting.Events.PrepareCraftEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PrepareCraftEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "The crafting grid matched a recipe. Cancel to show no result.",
      "url": "/reference/api/event-types/preparecraftevent/",
      "event": 265,
      "members": [
        {
          "name": "PrepareCraftEvent",
          "kind": "ctor",
          "signature": "public PrepareCraftEvent(Player player, Utf8String recipe, ItemView result)",
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "recipe",
              "type": "Utf8String"
            },
            {
              "name": "result",
              "type": "ItemView"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/preparecraftevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/preparecraftevent/#cancelled"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/event-types/preparecraftevent/#player"
        },
        {
          "name": "Recipe",
          "kind": "property",
          "signature": "public Utf8String Recipe { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "Recipe id.",
          "documented": true,
          "url": "/reference/api/event-types/preparecraftevent/#recipe"
        },
        {
          "name": "Result",
          "kind": "property",
          "signature": "public ItemView Result { get; }",
          "returns": {
            "type": "ItemView"
          },
          "summary": "The result that would be shown.",
          "documented": true,
          "url": "/reference/api/event-types/preparecraftevent/#result"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/preparecraftevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/preparecraftevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/preparecraftevent/#key"
        }
      ]
    },
    {
      "name": "PrivateMessageEvent",
      "fullName": "Mc.Scripting.Events.PrivateMessageEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct PrivateMessageEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A player sent a private message (/msg, /tell, /w) to one player. Cancel to drop the copy for that target. Changing the message sends it unsigned; a changed decoration keeps it signed. Console senders do not fire it.",
      "url": "/reference/api/event-types/privatemessageevent/",
      "event": 305,
      "members": [
        {
          "name": "PrivateMessageEvent",
          "kind": "ctor",
          "signature": "public PrivateMessageEvent(Player sender, Player target, Utf8String message, Utf8String decoration)",
          "parameters": [
            {
              "name": "sender",
              "type": "Player"
            },
            {
              "name": "target",
              "type": "Player"
            },
            {
              "name": "message",
              "type": "Utf8String"
            },
            {
              "name": "decoration",
              "type": "Utf8String"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/privatemessageevent/#constructor"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Cancelling stops lower-priority handlers (unless they opt in) and the action itself.",
          "documented": true,
          "url": "/reference/api/event-types/privatemessageevent/#cancelled"
        },
        {
          "name": "Decoration",
          "kind": "property",
          "signature": "public Component Decoration { get; }",
          "returns": {
            "type": "Component"
          },
          "summary": "The body as the line shows it (unsigned content). Equal to the typed text means none. Keeps the message signed. (parsed on access; allocates).",
          "documented": true,
          "url": "/reference/api/event-types/privatemessageevent/#decoration"
        },
        {
          "name": "DecorationJson",
          "kind": "property",
          "signature": "public Utf8String DecorationJson { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The body as the line shows it (unsigned content). Equal to the typed text means none. Keeps the message signed. as JSON text (borrowed).",
          "documented": true,
          "url": "/reference/api/event-types/privatemessageevent/#decorationjson"
        },
        {
          "name": "Message",
          "kind": "property",
          "signature": "public Utf8String Message { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The typed text. Changing it sends the message unsigned. (mutable: use `PrivateMessageEvent.SetMessage`)",
          "documented": true,
          "url": "/reference/api/event-types/privatemessageevent/#message"
        },
        {
          "name": "Sender",
          "kind": "property",
          "signature": "public Player Sender { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player who typed the command.",
          "documented": true,
          "url": "/reference/api/event-types/privatemessageevent/#sender"
        },
        {
          "name": "Target",
          "kind": "property",
          "signature": "public Player Target { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The recipient. A /msg with several targets fires once per target.",
          "documented": true,
          "url": "/reference/api/event-types/privatemessageevent/#target"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/privatemessageevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/privatemessageevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/privatemessageevent/#key"
        },
        {
          "name": "SetDecoration",
          "kind": "method",
          "signature": "public void SetDecoration(Component value)",
          "parameters": [
            {
              "name": "value",
              "type": "Component"
            }
          ],
          "summary": "Replaces `PrivateMessageEvent.Decoration`; an empty component clears it where the event says so.",
          "documented": true,
          "url": "/reference/api/event-types/privatemessageevent/#setdecoration"
        },
        {
          "name": "SetMessage",
          "kind": "method",
          "signature": "public void SetMessage(string value)",
          "parameters": [
            {
              "name": "value",
              "type": "string"
            }
          ],
          "summary": "Replaces `PrivateMessageEvent.Message` (copied into the per-tick event arena; the engine reads it back after dispatch).",
          "documented": true,
          "url": "/reference/api/event-types/privatemessageevent/#setmessage"
        }
      ]
    },
    {
      "name": "ServerListPingEvent",
      "fullName": "Mc.Scripting.Events.ServerListPingEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct ServerListPingEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "A client asked for the server list status. Change the MOTD, the player counts or hide the player sample.",
      "url": "/reference/api/event-types/serverlistpingevent/",
      "event": 100,
      "members": [
        {
          "name": "ServerListPingEvent",
          "kind": "ctor",
          "signature": "public ServerListPingEvent(ulong connection, Utf8String address, int protocolVersion, Utf8String motd, int maxPlayers, int onlinePlayers, bool hidePlayers)",
          "parameters": [
            {
              "name": "connection",
              "type": "ulong"
            },
            {
              "name": "address",
              "type": "Utf8String"
            },
            {
              "name": "protocolVersion",
              "type": "int"
            },
            {
              "name": "motd",
              "type": "Utf8String"
            },
            {
              "name": "maxPlayers",
              "type": "int"
            },
            {
              "name": "onlinePlayers",
              "type": "int"
            },
            {
              "name": "hidePlayers",
              "type": "bool"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/serverlistpingevent/#constructor"
        },
        {
          "name": "Address",
          "kind": "property",
          "signature": "public Utf8String Address { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "Client address.",
          "documented": true,
          "url": "/reference/api/event-types/serverlistpingevent/#address"
        },
        {
          "name": "Connection",
          "kind": "property",
          "signature": "public ulong Connection { get; }",
          "returns": {
            "type": "ulong"
          },
          "summary": "Connection id.",
          "documented": true,
          "url": "/reference/api/event-types/serverlistpingevent/#connection"
        },
        {
          "name": "HidePlayers",
          "kind": "property",
          "signature": "public bool HidePlayers { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Do not send the player sample.",
          "documented": true,
          "url": "/reference/api/event-types/serverlistpingevent/#hideplayers"
        },
        {
          "name": "MaxPlayers",
          "kind": "property",
          "signature": "public int MaxPlayers { get; set; }",
          "returns": {
            "type": "int"
          },
          "summary": "Maximum player count shown.",
          "documented": true,
          "url": "/reference/api/event-types/serverlistpingevent/#maxplayers"
        },
        {
          "name": "Motd",
          "kind": "property",
          "signature": "public Component Motd { get; }",
          "returns": {
            "type": "Component"
          },
          "summary": "The message of the day. (parsed on access; allocates).",
          "documented": true,
          "url": "/reference/api/event-types/serverlistpingevent/#motd"
        },
        {
          "name": "MotdJson",
          "kind": "property",
          "signature": "public Utf8String MotdJson { get; }",
          "returns": {
            "type": "Utf8String"
          },
          "summary": "The message of the day. as JSON text (borrowed).",
          "documented": true,
          "url": "/reference/api/event-types/serverlistpingevent/#motdjson"
        },
        {
          "name": "OnlinePlayers",
          "kind": "property",
          "signature": "public int OnlinePlayers { get; set; }",
          "returns": {
            "type": "int"
          },
          "summary": "Online player count shown.",
          "documented": true,
          "url": "/reference/api/event-types/serverlistpingevent/#onlineplayers"
        },
        {
          "name": "ProtocolVersion",
          "kind": "property",
          "signature": "public int ProtocolVersion { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Protocol version the client announced.",
          "documented": true,
          "url": "/reference/api/event-types/serverlistpingevent/#protocolversion"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/serverlistpingevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/serverlistpingevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/serverlistpingevent/#key"
        },
        {
          "name": "SetMotd",
          "kind": "method",
          "signature": "public void SetMotd(Component value)",
          "parameters": [
            {
              "name": "value",
              "type": "Component"
            }
          ],
          "summary": "Replaces `ServerListPingEvent.Motd`; an empty component clears it where the event says so.",
          "documented": true,
          "url": "/reference/api/event-types/serverlistpingevent/#setmotd"
        }
      ]
    },
    {
      "name": "ServerStartEvent",
      "fullName": "Mc.Scripting.Events.ServerStartEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct ServerStartEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "Fired once after the server finished starting, before the first tick.",
      "url": "/reference/api/event-types/serverstartevent/",
      "event": 1,
      "members": [
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/serverstartevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/serverstartevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/serverstartevent/#key"
        }
      ]
    },
    {
      "name": "ServerStopEvent",
      "fullName": "Mc.Scripting.Events.ServerStopEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct ServerStopEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "Fired once when the server begins shutting down.",
      "url": "/reference/api/event-types/serverstopevent/",
      "event": 2,
      "members": [
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/serverstopevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/serverstopevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/serverstopevent/#key"
        }
      ]
    },
    {
      "name": "TickEndEvent",
      "fullName": "Mc.Scripting.Events.TickEndEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct TickEndEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "Fired at the end of every server tick.",
      "url": "/reference/api/event-types/tickendevent/",
      "event": 4,
      "members": [
        {
          "name": "TickEndEvent",
          "kind": "ctor",
          "signature": "public TickEndEvent(ulong tick, long tickNanos)",
          "parameters": [
            {
              "name": "tick",
              "type": "ulong"
            },
            {
              "name": "tickNanos",
              "type": "long"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/tickendevent/#constructor"
        },
        {
          "name": "Tick",
          "kind": "property",
          "signature": "public ulong Tick { get; }",
          "returns": {
            "type": "ulong"
          },
          "summary": "The tick number.",
          "documented": true,
          "url": "/reference/api/event-types/tickendevent/#tick"
        },
        {
          "name": "TickNanos",
          "kind": "property",
          "signature": "public long TickNanos { get; }",
          "returns": {
            "type": "long"
          },
          "summary": "Wall time spent in this tick.",
          "documented": true,
          "url": "/reference/api/event-types/tickendevent/#ticknanos"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/tickendevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/tickendevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/tickendevent/#key"
        }
      ]
    },
    {
      "name": "TickStartEvent",
      "fullName": "Mc.Scripting.Events.TickStartEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct TickStartEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "Fired at the start of every server tick.",
      "url": "/reference/api/event-types/tickstartevent/",
      "event": 3,
      "members": [
        {
          "name": "TickStartEvent",
          "kind": "ctor",
          "signature": "public TickStartEvent(ulong tick)",
          "parameters": [
            {
              "name": "tick",
              "type": "ulong"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/tickstartevent/#constructor"
        },
        {
          "name": "Tick",
          "kind": "property",
          "signature": "public ulong Tick { get; }",
          "returns": {
            "type": "ulong"
          },
          "summary": "The tick number.",
          "documented": true,
          "url": "/reference/api/event-types/tickstartevent/#tick"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/tickstartevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/tickstartevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/tickstartevent/#key"
        }
      ]
    },
    {
      "name": "TimeSkipEvent",
      "fullName": "Mc.Scripting.Events.TimeSkipEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct TimeSkipEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "The day time jumped (sleeping through the night, /time set or /time add).",
      "url": "/reference/api/event-types/timeskipevent/",
      "event": 300,
      "members": [
        {
          "name": "TimeSkipEvent",
          "kind": "ctor",
          "signature": "public TimeSkipEvent(World world, TimeSkipReason reason, long skipAmount)",
          "parameters": [
            {
              "name": "world",
              "type": "World"
            },
            {
              "name": "reason",
              "type": "TimeSkipReason"
            },
            {
              "name": "skipAmount",
              "type": "long"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/timeskipevent/#constructor"
        },
        {
          "name": "Reason",
          "kind": "property",
          "signature": "public TimeSkipReason Reason { get; }",
          "returns": {
            "type": "TimeSkipReason"
          },
          "summary": "Why.",
          "documented": true,
          "url": "/reference/api/event-types/timeskipevent/#reason"
        },
        {
          "name": "SkipAmount",
          "kind": "property",
          "signature": "public long SkipAmount { get; }",
          "returns": {
            "type": "long"
          },
          "summary": "Ticks the clock advanced.",
          "documented": true,
          "url": "/reference/api/event-types/timeskipevent/#skipamount"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/event-types/timeskipevent/#world"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/timeskipevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/timeskipevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/timeskipevent/#key"
        }
      ]
    },
    {
      "name": "WeatherChangeEvent",
      "fullName": "Mc.Scripting.Events.WeatherChangeEvent",
      "namespace": "Mc.Scripting.Events",
      "kind": "struct",
      "category": "event-types",
      "categoryLabel": "Event types",
      "signature": "public ref struct WeatherChangeEvent : IEvent",
      "interfaces": [
        "IEvent"
      ],
      "summary": "The rain started or stopped (overworld weather).",
      "url": "/reference/api/event-types/weatherchangeevent/",
      "event": 301,
      "members": [
        {
          "name": "WeatherChangeEvent",
          "kind": "ctor",
          "signature": "public WeatherChangeEvent(World world, bool raining, bool thundering)",
          "parameters": [
            {
              "name": "world",
              "type": "World"
            },
            {
              "name": "raining",
              "type": "bool"
            },
            {
              "name": "thundering",
              "type": "bool"
            }
          ],
          "summary": "Creates the event (for firing it from a plugin; native code builds its own). Signature of API 1.0.",
          "documented": true,
          "url": "/reference/api/event-types/weatherchangeevent/#constructor"
        },
        {
          "name": "Raining",
          "kind": "property",
          "signature": "public bool Raining { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether it will be raining.",
          "documented": true,
          "url": "/reference/api/event-types/weatherchangeevent/#raining"
        },
        {
          "name": "Thundering",
          "kind": "property",
          "signature": "public bool Thundering { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether it will be thundering.",
          "documented": true,
          "url": "/reference/api/event-types/weatherchangeevent/#thundering"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/event-types/weatherchangeevent/#world"
        },
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "public static ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id (stable ABI).",
          "documented": true,
          "url": "/reference/api/event-types/weatherchangeevent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "public static bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/event-types/weatherchangeevent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public static string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key of the event.",
          "documented": true,
          "url": "/reference/api/event-types/weatherchangeevent/#key"
        }
      ]
    },
    {
      "name": "Facing",
      "fullName": "Mc.Scripting.Facing",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "worlds",
      "categoryLabel": "Worlds and blocks",
      "signature": "public enum Facing : int",
      "summary": "Values of the protocol enum Facing (the wire carries the ordinal).",
      "url": "/reference/api/worlds/facing/",
      "members": [
        {
          "name": "Down",
          "kind": "enumMember",
          "signature": "Down = 0",
          "value": "0",
          "summary": "Facing down (ordinal 0).",
          "documented": true,
          "url": "/reference/api/worlds/facing/#down"
        },
        {
          "name": "Up",
          "kind": "enumMember",
          "signature": "Up = 1",
          "value": "1",
          "summary": "Facing up (ordinal 1).",
          "documented": true,
          "url": "/reference/api/worlds/facing/#up"
        },
        {
          "name": "North",
          "kind": "enumMember",
          "signature": "North = 2",
          "value": "2",
          "summary": "Facing north (ordinal 2).",
          "documented": true,
          "url": "/reference/api/worlds/facing/#north"
        },
        {
          "name": "South",
          "kind": "enumMember",
          "signature": "South = 3",
          "value": "3",
          "summary": "Facing south (ordinal 3).",
          "documented": true,
          "url": "/reference/api/worlds/facing/#south"
        },
        {
          "name": "West",
          "kind": "enumMember",
          "signature": "West = 4",
          "value": "4",
          "summary": "Facing west (ordinal 4).",
          "documented": true,
          "url": "/reference/api/worlds/facing/#west"
        },
        {
          "name": "East",
          "kind": "enumMember",
          "signature": "East = 5",
          "value": "5",
          "summary": "Facing east (ordinal 5).",
          "documented": true,
          "url": "/reference/api/worlds/facing/#east"
        }
      ]
    },
    {
      "name": "GameMode",
      "fullName": "Mc.Scripting.GameMode",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "players",
      "categoryLabel": "Players",
      "signature": "public enum GameMode : byte",
      "summary": "Vanilla game mode (the numbers are the protocol ids).",
      "url": "/reference/api/players/gamemode/",
      "members": [
        {
          "name": "Survival",
          "kind": "enumMember",
          "signature": "Survival = 0",
          "value": "0",
          "summary": "Survival mode.",
          "documented": true,
          "url": "/reference/api/players/gamemode/#survival"
        },
        {
          "name": "Creative",
          "kind": "enumMember",
          "signature": "Creative = 1",
          "value": "1",
          "summary": "Creative mode.",
          "documented": true,
          "url": "/reference/api/players/gamemode/#creative"
        },
        {
          "name": "Adventure",
          "kind": "enumMember",
          "signature": "Adventure = 2",
          "value": "2",
          "summary": "Adventure mode.",
          "documented": true,
          "url": "/reference/api/players/gamemode/#adventure"
        },
        {
          "name": "Spectator",
          "kind": "enumMember",
          "signature": "Spectator = 3",
          "value": "3",
          "summary": "Spectator mode.",
          "documented": true,
          "url": "/reference/api/players/gamemode/#spectator"
        }
      ]
    },
    {
      "name": "GameModeChangeCause",
      "fullName": "Mc.Scripting.GameModeChangeCause",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "events",
      "categoryLabel": "Events (infrastructure)",
      "signature": "public enum GameModeChangeCause : byte",
      "summary": "Why a game mode changed.",
      "url": "/reference/api/events/gamemodechangecause/",
      "members": [
        {
          "name": "Unknown",
          "kind": "enumMember",
          "signature": "Unknown = 0",
          "value": "0",
          "summary": "Unknown cause.",
          "documented": true,
          "url": "/reference/api/events/gamemodechangecause/#unknown"
        },
        {
          "name": "Command",
          "kind": "enumMember",
          "signature": "Command = 1",
          "value": "1",
          "summary": "/gamemode or /defaultgamemode.",
          "documented": true,
          "url": "/reference/api/events/gamemodechangecause/#command"
        },
        {
          "name": "Plugin",
          "kind": "enumMember",
          "signature": "Plugin = 2",
          "value": "2",
          "summary": "A plugin set the game mode.",
          "documented": true,
          "url": "/reference/api/events/gamemodechangecause/#plugin"
        },
        {
          "name": "DefaultGameMode",
          "kind": "enumMember",
          "signature": "DefaultGameMode = 3",
          "value": "3",
          "summary": "The server default game mode was applied.",
          "documented": true,
          "url": "/reference/api/events/gamemodechangecause/#defaultgamemode"
        }
      ]
    },
    {
      "name": "Hand",
      "fullName": "Mc.Scripting.Hand",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "players",
      "categoryLabel": "Players",
      "signature": "public enum Hand : byte",
      "summary": "The hand an action was performed with.",
      "url": "/reference/api/players/hand/",
      "members": [
        {
          "name": "MainHand",
          "kind": "enumMember",
          "signature": "MainHand = 0",
          "value": "0",
          "summary": "The main hand.",
          "documented": true,
          "url": "/reference/api/players/hand/#mainhand"
        },
        {
          "name": "OffHand",
          "kind": "enumMember",
          "signature": "OffHand = 1",
          "value": "1",
          "summary": "The off hand.",
          "documented": true,
          "url": "/reference/api/players/hand/#offhand"
        }
      ]
    },
    {
      "name": "Hologram",
      "fullName": "Mc.Scripting.Hologram",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "visuals",
      "categoryLabel": "Holograms and NPCs",
      "signature": "public sealed class Hologram : IDisposable, IPluginResource",
      "interfaces": [
        "IDisposable",
        "IPluginResource"
      ],
      "summary": "Text that floats in the world. The players see it (it is an entity on their side only: the server has none), and it is not saved with the world. Create it with `Holograms.Create`. It disappears for every viewer when the plugin unloads or when `Hologram.Remove` is called. Holograms are shown to everybody until `Hologram.HideFromAll` or `Hologram.ShowTo`.",
      "url": "/reference/api/visuals/hologram/",
      "members": [
        {
          "name": "IsActive",
          "kind": "property",
          "signature": "public bool IsActive { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the hologram still exists.",
          "documented": true,
          "url": "/reference/api/visuals/hologram/#isactive"
        },
        {
          "name": "Options",
          "kind": "property",
          "signature": "public HologramOptions Options { get; set; }",
          "returns": {
            "type": "HologramOptions"
          },
          "summary": "The look of the hologram. Assign a new `HologramOptions` to change it.",
          "documented": true,
          "url": "/reference/api/visuals/hologram/#options"
        },
        {
          "name": "Position",
          "kind": "property",
          "signature": "public Vec3d Position { get; }",
          "returns": {
            "type": "Vec3d"
          },
          "summary": "Where it is.",
          "documented": true,
          "url": "/reference/api/visuals/hologram/#position"
        },
        {
          "name": "Text",
          "kind": "property",
          "signature": "public Component Text { get; set; }",
          "returns": {
            "type": "Component"
          },
          "summary": "The text (a component; a newline makes a line break).",
          "documented": true,
          "url": "/reference/api/visuals/hologram/#text"
        },
        {
          "name": "Dispose",
          "kind": "method",
          "signature": "public void Dispose()",
          "documented": false,
          "url": "/reference/api/visuals/hologram/#dispose"
        },
        {
          "name": "HideFrom",
          "kind": "method",
          "signature": "public Hologram HideFrom(Player player)",
          "parameters": [
            {
              "name": "player",
              "type": "Player",
              "summary": "The player."
            }
          ],
          "returns": {
            "type": "Hologram",
            "summary": "This hologram."
          },
          "summary": "Hides the hologram from one player (while it is shown to everybody).",
          "documented": true,
          "url": "/reference/api/visuals/hologram/#hidefrom"
        },
        {
          "name": "HideFromAll",
          "kind": "method",
          "signature": "public Hologram HideFromAll()",
          "returns": {
            "type": "Hologram",
            "summary": "This hologram."
          },
          "summary": "Hides the hologram from everybody (clears the list of players it is shown to or hidden from).",
          "documented": true,
          "url": "/reference/api/visuals/hologram/#hidefromall"
        },
        {
          "name": "Move",
          "kind": "method",
          "signature": "public Hologram Move(Vec3d position)",
          "parameters": [
            {
              "name": "position",
              "type": "Vec3d",
              "summary": "The new position."
            }
          ],
          "returns": {
            "type": "Hologram",
            "summary": "This hologram."
          },
          "summary": "Moves the hologram inside its world.",
          "documented": true,
          "url": "/reference/api/visuals/hologram/#move"
        },
        {
          "name": "Remove",
          "kind": "method",
          "signature": "public void Remove()",
          "summary": "Removes the hologram from every viewer and deletes it.",
          "documented": true,
          "url": "/reference/api/visuals/hologram/#remove"
        },
        {
          "name": "ShowTo",
          "kind": "method",
          "signature": "public Hologram ShowTo(Player player)",
          "parameters": [
            {
              "name": "player",
              "type": "Player",
              "summary": "The player."
            }
          ],
          "returns": {
            "type": "Hologram",
            "summary": "This hologram."
          },
          "summary": "Shows the hologram to one player (after `Hologram.HideFromAll`), or hides it from one player while it is shown to everybody.",
          "documented": true,
          "url": "/reference/api/visuals/hologram/#showto"
        },
        {
          "name": "ShowToAll",
          "kind": "method",
          "signature": "public Hologram ShowToAll()",
          "returns": {
            "type": "Hologram",
            "summary": "This hologram."
          },
          "summary": "Shows the hologram to everybody again (clears the list of players it is shown to or hidden from).",
          "documented": true,
          "url": "/reference/api/visuals/hologram/#showtoall"
        }
      ]
    },
    {
      "name": "HologramAlign",
      "fullName": "Mc.Scripting.HologramAlign",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "visuals",
      "categoryLabel": "Holograms and NPCs",
      "signature": "public enum HologramAlign : int",
      "summary": "How the lines of a hologram are aligned.",
      "url": "/reference/api/visuals/hologramalign/",
      "members": [
        {
          "name": "Center",
          "kind": "enumMember",
          "signature": "Center = 0",
          "value": "0",
          "summary": "Centred.",
          "documented": true,
          "url": "/reference/api/visuals/hologramalign/#center"
        },
        {
          "name": "Left",
          "kind": "enumMember",
          "signature": "Left = 8",
          "value": "8",
          "summary": "Left aligned.",
          "documented": true,
          "url": "/reference/api/visuals/hologramalign/#left"
        },
        {
          "name": "Right",
          "kind": "enumMember",
          "signature": "Right = 16",
          "value": "16",
          "summary": "Right aligned.",
          "documented": true,
          "url": "/reference/api/visuals/hologramalign/#right"
        }
      ]
    },
    {
      "name": "HologramBillboard",
      "fullName": "Mc.Scripting.HologramBillboard",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "visuals",
      "categoryLabel": "Holograms and NPCs",
      "signature": "public enum HologramBillboard : int",
      "summary": "How a hologram turns towards the players.",
      "url": "/reference/api/visuals/hologrambillboard/",
      "members": [
        {
          "name": "Fixed",
          "kind": "enumMember",
          "signature": "Fixed = 0",
          "value": "0",
          "summary": "Fixed in the world.",
          "documented": true,
          "url": "/reference/api/visuals/hologrambillboard/#fixed"
        },
        {
          "name": "Vertical",
          "kind": "enumMember",
          "signature": "Vertical = 1",
          "value": "1",
          "summary": "Turns around the vertical axis.",
          "documented": true,
          "url": "/reference/api/visuals/hologrambillboard/#vertical"
        },
        {
          "name": "Horizontal",
          "kind": "enumMember",
          "signature": "Horizontal = 2",
          "value": "2",
          "summary": "Turns around the horizontal axis.",
          "documented": true,
          "url": "/reference/api/visuals/hologrambillboard/#horizontal"
        },
        {
          "name": "Center",
          "kind": "enumMember",
          "signature": "Center = 3",
          "value": "3",
          "summary": "Always faces the player.",
          "documented": true,
          "url": "/reference/api/visuals/hologrambillboard/#center"
        }
      ]
    },
    {
      "name": "HologramOptions",
      "fullName": "Mc.Scripting.HologramOptions",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "visuals",
      "categoryLabel": "Holograms and NPCs",
      "signature": "public sealed class HologramOptions",
      "summary": "The look of a hologram (the fields of the client's text display; the defaults are vanilla's).",
      "url": "/reference/api/visuals/hologramoptions/",
      "members": [
        {
          "name": "HologramOptions",
          "kind": "ctor",
          "signature": "public HologramOptions()",
          "documented": false,
          "url": "/reference/api/visuals/hologramoptions/#constructor"
        },
        {
          "name": "Align",
          "kind": "property",
          "signature": "public HologramAlign Align { get; set; }",
          "returns": {
            "type": "HologramAlign"
          },
          "summary": "The alignment of the lines.",
          "documented": true,
          "url": "/reference/api/visuals/hologramoptions/#align"
        },
        {
          "name": "Background",
          "kind": "property",
          "signature": "public int Background { get; set; }",
          "returns": {
            "type": "int"
          },
          "summary": "The background colour, ARGB (0x40000000 is vanilla's translucent black).",
          "documented": true,
          "url": "/reference/api/visuals/hologramoptions/#background"
        },
        {
          "name": "Billboard",
          "kind": "property",
          "signature": "public HologramBillboard Billboard { get; set; }",
          "returns": {
            "type": "HologramBillboard"
          },
          "summary": "How the text turns towards the players.",
          "documented": true,
          "url": "/reference/api/visuals/hologramoptions/#billboard"
        },
        {
          "name": "DefaultBackground",
          "kind": "property",
          "signature": "public bool DefaultBackground { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Uses the client's default background instead of `HologramOptions.Background`.",
          "documented": true,
          "url": "/reference/api/visuals/hologramoptions/#defaultbackground"
        },
        {
          "name": "LineWidth",
          "kind": "property",
          "signature": "public int LineWidth { get; set; }",
          "returns": {
            "type": "int"
          },
          "summary": "The wrap width in pixels (1..1024).",
          "documented": true,
          "url": "/reference/api/visuals/hologramoptions/#linewidth"
        },
        {
          "name": "Scale",
          "kind": "property",
          "signature": "public float Scale { get; set; }",
          "returns": {
            "type": "float"
          },
          "summary": "The uniform scale (0 .. 64].",
          "documented": true,
          "url": "/reference/api/visuals/hologramoptions/#scale"
        },
        {
          "name": "SeeThrough",
          "kind": "property",
          "signature": "public bool SeeThrough { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "The text shows through blocks.",
          "documented": true,
          "url": "/reference/api/visuals/hologramoptions/#seethrough"
        },
        {
          "name": "Shadow",
          "kind": "property",
          "signature": "public bool Shadow { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Draws a shadow under the text.",
          "documented": true,
          "url": "/reference/api/visuals/hologramoptions/#shadow"
        },
        {
          "name": "ShadowRadius",
          "kind": "property",
          "signature": "public float ShadowRadius { get; set; }",
          "returns": {
            "type": "float"
          },
          "summary": "The shadow radius (0..16).",
          "documented": true,
          "url": "/reference/api/visuals/hologramoptions/#shadowradius"
        },
        {
          "name": "ShadowStrength",
          "kind": "property",
          "signature": "public float ShadowStrength { get; set; }",
          "returns": {
            "type": "float"
          },
          "summary": "The shadow strength (0..1).",
          "documented": true,
          "url": "/reference/api/visuals/hologramoptions/#shadowstrength"
        },
        {
          "name": "TextOpacity",
          "kind": "property",
          "signature": "public int? TextOpacity { get; set; }",
          "returns": {
            "type": "int?"
          },
          "summary": "The text opacity 0..255; null for the default.",
          "documented": true,
          "url": "/reference/api/visuals/hologramoptions/#textopacity"
        },
        {
          "name": "ViewRange",
          "kind": "property",
          "signature": "public float ViewRange { get; set; }",
          "returns": {
            "type": "float"
          },
          "summary": "The view distance multiplier (0..64).",
          "documented": true,
          "url": "/reference/api/visuals/hologramoptions/#viewrange"
        }
      ]
    },
    {
      "name": "Holograms",
      "fullName": "Mc.Scripting.Holograms",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "visuals",
      "categoryLabel": "Holograms and NPCs",
      "signature": "public sealed class Holograms",
      "summary": "Creates holograms for this plugin. Everything made here is removed when the plugin unloads.",
      "url": "/reference/api/visuals/holograms/",
      "members": [
        {
          "name": "Create",
          "kind": "method",
          "signature": "public Hologram Create(World world, Vec3d position, Component text, HologramOptions? options = null)",
          "parameters": [
            {
              "name": "world",
              "type": "World",
              "summary": "The world."
            },
            {
              "name": "position",
              "type": "Vec3d",
              "summary": "Where the text is."
            },
            {
              "name": "text",
              "type": "Component",
              "summary": "The text (a newline makes a line break)."
            },
            {
              "name": "options",
              "type": "HologramOptions?",
              "default": "null",
              "summary": "The look; null for the defaults."
            }
          ],
          "returns": {
            "type": "Hologram",
            "summary": "The hologram."
          },
          "summary": "Creates a hologram that everybody sees.",
          "throws": [
            {
              "type": "System.ArgumentException",
              "summary": "The text or the options are out of the engine's limits."
            },
            {
              "type": "System.InvalidOperationException",
              "summary": "The engine refused the hologram (the world, or the server's visual limit)."
            }
          ],
          "documented": true,
          "url": "/reference/api/visuals/holograms/#create"
        },
        {
          "name": "Create",
          "kind": "method",
          "signature": "public Hologram Create(World world, Vec3d position, IEnumerable<string> lines, HologramOptions? options = null)",
          "parameters": [
            {
              "name": "world",
              "type": "World",
              "summary": "The world."
            },
            {
              "name": "position",
              "type": "Vec3d",
              "summary": "Where the text is."
            },
            {
              "name": "lines",
              "type": "IEnumerable<string>",
              "summary": "The lines."
            },
            {
              "name": "options",
              "type": "HologramOptions?",
              "default": "null",
              "summary": "The look; null for the defaults."
            }
          ],
          "returns": {
            "type": "Hologram",
            "summary": "The hologram."
          },
          "summary": "Creates a hologram from plain lines (one per line of text).",
          "documented": true,
          "url": "/reference/api/visuals/holograms/#create-1"
        }
      ]
    },
    {
      "name": "Http",
      "fullName": "Mc.Scripting.Http",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "server",
      "categoryLabel": "Server, HTTP and logging",
      "signature": "public static class Http",
      "summary": "HTTP(S) for plugins. In the plugin worker the requests are performed by the server: its HTTP client resolves each name, refuses loopback, private, link-local and metadata addresses, limits request and response sizes and the rate, and enforces the timeouts (see docs/agents/http-egress.md, scripting.http.* in Ramjet.toml). In an in-process host (development only) requests go out directly. Use `Http.Client`, or `new HttpClient(Http.Handler)` for your own timeouts and headers. Do not dispose either: they are shared by every plugin.",
      "url": "/reference/api/server/http/",
      "members": [
        {
          "name": "Client",
          "kind": "property",
          "signature": "public static HttpClient Client { get; }",
          "static": true,
          "returns": {
            "type": "HttpClient"
          },
          "summary": "A shared client over `Http.Handler`. Set the time limit per request with a `CancellationToken`; the server applies its own total timeout as well. Do not dispose it.",
          "documented": true,
          "url": "/reference/api/server/http/#client"
        },
        {
          "name": "Handler",
          "kind": "property",
          "signature": "public static HttpMessageHandler Handler { get; }",
          "static": true,
          "returns": {
            "type": "HttpMessageHandler"
          },
          "summary": "The message handler behind every request. Share it; do not dispose it.",
          "documented": true,
          "url": "/reference/api/server/http/#handler"
        }
      ]
    },
    {
      "name": "IEvent",
      "fullName": "Mc.Scripting.IEvent",
      "namespace": "Mc.Scripting",
      "kind": "interface",
      "category": "events",
      "categoryLabel": "Events (infrastructure)",
      "signature": "public interface IEvent",
      "summary": "An event type. Catalogue events are `ref struct`s: a handler gets the event by reference and can neither store it nor capture it in a closure or an async method, so the borrowed native data it carries (strings, byte buffers) cannot outlive the dispatch. Plugin-defined events are ordinary blittable structs that start with an `EventHeader` field (or ref structs of the same layout).",
      "remarks": "Catalogue events are generated from src/scripting/events.json. Plugins can declare their own events: implement `IEvent.Key` (e.g. \"myplugin:thing\") and leave `IEvent.CatalogueId` at 0; an id is assigned at runtime.",
      "examples": [
        "```csharp\npublic struct HomeSetEvent : IEvent\n{\n    public EventHeader Header;      // must come first\n    public Entity Player;\n    public BlockPos Position;\n\n    public static string Key => \"homes:set\";\n    public static bool IsCancellable => true;\n}\n\n// fire it from your plugin\nvar ev = new HomeSetEvent { Player = p, Position = pos };\nif (Events.Fire(ref ev)) { /* nobody cancelled */ }\n```"
      ],
      "url": "/reference/api/events/ievent/",
      "members": [
        {
          "name": "CatalogueId",
          "kind": "property",
          "signature": "static virtual ushort CatalogueId { get; }",
          "static": true,
          "returns": {
            "type": "ushort"
          },
          "summary": "Catalogue id for built-in events, 0 for plugin-defined events.",
          "documented": true,
          "url": "/reference/api/events/ievent/#catalogueid"
        },
        {
          "name": "IsCancellable",
          "kind": "property",
          "signature": "static virtual bool IsCancellable { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether handlers can cancel the event.",
          "documented": true,
          "url": "/reference/api/events/ievent/#iscancellable"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "static abstract string Key { get; }",
          "static": true,
          "returns": {
            "type": "string"
          },
          "summary": "Registry key (\"plugin:name\" for plugin events).",
          "documented": true,
          "url": "/reference/api/events/ievent/#key"
        }
      ]
    },
    {
      "name": "IPlugin",
      "fullName": "Mc.Scripting.IPlugin",
      "namespace": "Mc.Scripting",
      "kind": "interface",
      "category": "plugins",
      "categoryLabel": "Plugins and lifecycle",
      "signature": "public interface IPlugin",
      "summary": "Plugin entry point. One public, non-abstract type with a parameterless constructor per plugin assembly. Most plugins derive from `Plugin` instead.",
      "url": "/reference/api/plugins/iplugin/",
      "members": [
        {
          "name": "Disable",
          "kind": "method",
          "signature": "void Disable()",
          "summary": "Called when the plugin is unloaded; registrations are released afterwards.",
          "documented": true,
          "url": "/reference/api/plugins/iplugin/#disable"
        },
        {
          "name": "Enable",
          "kind": "method",
          "signature": "void Enable(PluginContext context)",
          "parameters": [
            {
              "name": "context",
              "type": "PluginContext"
            }
          ],
          "summary": "Called once after load; register everything here.",
          "documented": true,
          "url": "/reference/api/plugins/iplugin/#enable"
        }
      ]
    },
    {
      "name": "IPluginResource",
      "fullName": "Mc.Scripting.IPluginResource",
      "namespace": "Mc.Scripting",
      "kind": "interface",
      "category": "plugins",
      "categoryLabel": "Plugins and lifecycle",
      "signature": "public interface IPluginResource : IDisposable",
      "interfaces": [
        "IDisposable"
      ],
      "summary": "Something owned by a plugin that must be released when it unloads.",
      "remarks": "Implement it for your own objects and call `PluginContext.Track` so they are disposed on unload.",
      "url": "/reference/api/plugins/ipluginresource/",
      "members": []
    },
    {
      "name": "IgniteCause",
      "fullName": "Mc.Scripting.IgniteCause",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "events",
      "categoryLabel": "Events (infrastructure)",
      "signature": "public enum IgniteCause : byte",
      "summary": "What set a block on fire.",
      "url": "/reference/api/events/ignitecause/",
      "members": [
        {
          "name": "FlintAndSteel",
          "kind": "enumMember",
          "signature": "FlintAndSteel = 0",
          "value": "0",
          "summary": "A player used flint and steel.",
          "documented": true,
          "url": "/reference/api/events/ignitecause/#flintandsteel"
        },
        {
          "name": "Lava",
          "kind": "enumMember",
          "signature": "Lava = 1",
          "value": "1",
          "summary": "Lava next to a flammable block.",
          "documented": true,
          "url": "/reference/api/events/ignitecause/#lava"
        },
        {
          "name": "Lightning",
          "kind": "enumMember",
          "signature": "Lightning = 2",
          "value": "2",
          "summary": "A lightning strike.",
          "documented": true,
          "url": "/reference/api/events/ignitecause/#lightning"
        },
        {
          "name": "Spread",
          "kind": "enumMember",
          "signature": "Spread = 3",
          "value": "3",
          "summary": "Fire spreading from another fire.",
          "documented": true,
          "url": "/reference/api/events/ignitecause/#spread"
        },
        {
          "name": "FireCharge",
          "kind": "enumMember",
          "signature": "FireCharge = 4",
          "value": "4",
          "summary": "A fire charge.",
          "documented": true,
          "url": "/reference/api/events/ignitecause/#firecharge"
        },
        {
          "name": "Explosion",
          "kind": "enumMember",
          "signature": "Explosion = 5",
          "value": "5",
          "summary": "An explosion.",
          "documented": true,
          "url": "/reference/api/events/ignitecause/#explosion"
        },
        {
          "name": "Arrow",
          "kind": "enumMember",
          "signature": "Arrow = 6",
          "value": "6",
          "summary": "A flaming arrow.",
          "documented": true,
          "url": "/reference/api/events/ignitecause/#arrow"
        },
        {
          "name": "Plugin",
          "kind": "enumMember",
          "signature": "Plugin = 7",
          "value": "7",
          "summary": "A plugin.",
          "documented": true,
          "url": "/reference/api/events/ignitecause/#plugin"
        },
        {
          "name": "Other",
          "kind": "enumMember",
          "signature": "Other = 8",
          "value": "8",
          "summary": "Anything else.",
          "documented": true,
          "url": "/reference/api/events/ignitecause/#other"
        }
      ]
    },
    {
      "name": "InteractAction",
      "fullName": "Mc.Scripting.InteractAction",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "events",
      "categoryLabel": "Events (infrastructure)",
      "signature": "public enum InteractAction : byte",
      "summary": "What a player clicked.",
      "url": "/reference/api/events/interactaction/",
      "members": [
        {
          "name": "LeftClickAir",
          "kind": "enumMember",
          "signature": "LeftClickAir = 0",
          "value": "0",
          "summary": "Left click without a block target.",
          "documented": true,
          "url": "/reference/api/events/interactaction/#leftclickair"
        },
        {
          "name": "LeftClickBlock",
          "kind": "enumMember",
          "signature": "LeftClickBlock = 1",
          "value": "1",
          "summary": "Left click (start digging) on a block.",
          "documented": true,
          "url": "/reference/api/events/interactaction/#leftclickblock"
        },
        {
          "name": "RightClickAir",
          "kind": "enumMember",
          "signature": "RightClickAir = 2",
          "value": "2",
          "summary": "Right click without a block target.",
          "documented": true,
          "url": "/reference/api/events/interactaction/#rightclickair"
        },
        {
          "name": "RightClickBlock",
          "kind": "enumMember",
          "signature": "RightClickBlock = 3",
          "value": "3",
          "summary": "Right click on a block.",
          "documented": true,
          "url": "/reference/api/events/interactaction/#rightclickblock"
        }
      ]
    },
    {
      "name": "InteractionHand",
      "fullName": "Mc.Scripting.InteractionHand",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "players",
      "categoryLabel": "Players",
      "signature": "public enum InteractionHand : int",
      "summary": "Values of the protocol enum InteractionHand (the wire carries the ordinal).",
      "url": "/reference/api/players/interactionhand/",
      "members": [
        {
          "name": "MainHand",
          "kind": "enumMember",
          "signature": "MainHand = 0",
          "value": "0",
          "summary": "InteractionHand main_hand (ordinal 0).",
          "documented": true,
          "url": "/reference/api/players/interactionhand/#mainhand"
        },
        {
          "name": "OffHand",
          "kind": "enumMember",
          "signature": "OffHand = 1",
          "value": "1",
          "summary": "InteractionHand off_hand (ordinal 1).",
          "documented": true,
          "url": "/reference/api/players/interactionhand/#offhand"
        }
      ]
    },
    {
      "name": "BlockInventory",
      "fullName": "Mc.Scripting.Inventories.BlockInventory",
      "namespace": "Mc.Scripting.Inventories",
      "kind": "class",
      "category": "inventories",
      "categoryLabel": "Inventories and menus",
      "signature": "public sealed class BlockInventory : EngineInventory",
      "baseType": "EngineInventory",
      "summary": "The inventory of a block entity by position: chests, trapped chests, barrels, furnaces, blast furnaces, smokers, hoppers, droppers, dispensers, brewing stands and shulker boxes. A double chest is two inventories of 27 slots (one per half). The handle holds a position, not the block entity: it is empty when the block goes away.",
      "url": "/reference/api/inventories/blockinventory/",
      "members": [
        {
          "name": "Position",
          "kind": "property",
          "signature": "public BlockPos Position { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The block position.",
          "documented": true,
          "url": "/reference/api/inventories/blockinventory/#position"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/inventories/blockinventory/#world"
        },
        {
          "name": "At",
          "kind": "method",
          "signature": "public static BlockInventory? At(World world, BlockPos pos)",
          "static": true,
          "parameters": [
            {
              "name": "world",
              "type": "World",
              "summary": "The dimension."
            },
            {
              "name": "pos",
              "type": "BlockPos",
              "summary": "The block position."
            }
          ],
          "returns": {
            "type": "BlockInventory?",
            "summary": "The inventory, or null when the chunk is not loaded or the block has no inventory."
          },
          "summary": "The inventory of the block entity at a position.",
          "documented": true,
          "url": "/reference/api/inventories/blockinventory/#at"
        }
      ]
    },
    {
      "name": "EngineInventory",
      "fullName": "Mc.Scripting.Inventories.EngineInventory",
      "namespace": "Mc.Scripting.Inventories",
      "kind": "class",
      "category": "inventories",
      "categoryLabel": "Inventories and menus",
      "signature": "public abstract class EngineInventory : IInventory",
      "interfaces": [
        "IInventory"
      ],
      "summary": "Shared implementation of the inventories the engine owns: one native call per operation, the inventory is addressed by (kind, world, reference) every time, so a handle never keeps anything alive and a block that was destroyed meanwhile simply reads as an empty inventory.",
      "url": "/reference/api/inventories/engineinventory/",
      "members": [
        {
          "name": "Contents",
          "kind": "property",
          "signature": "public IEnumerable<ItemStack> Contents { get; }",
          "returns": {
            "type": "IEnumerable<ItemStack>"
          },
          "documented": false,
          "url": "/reference/api/inventories/engineinventory/#contents"
        },
        {
          "name": "Exists",
          "kind": "property",
          "signature": "public bool Exists { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the inventory still exists (a destroyed block entity or a closed player has none).",
          "documented": true,
          "url": "/reference/api/inventories/engineinventory/#exists"
        },
        {
          "name": "Size",
          "kind": "property",
          "signature": "public virtual int Size { get; }",
          "returns": {
            "type": "int"
          },
          "documented": false,
          "url": "/reference/api/inventories/engineinventory/#size"
        },
        {
          "name": "AddItem",
          "kind": "method",
          "signature": "public virtual int AddItem(ItemStack stack)",
          "parameters": [
            {
              "name": "stack",
              "type": "ItemStack"
            }
          ],
          "returns": {
            "type": "int"
          },
          "documented": false,
          "url": "/reference/api/inventories/engineinventory/#additem"
        },
        {
          "name": "Clear",
          "kind": "method",
          "signature": "public virtual void Clear()",
          "documented": false,
          "url": "/reference/api/inventories/engineinventory/#clear"
        },
        {
          "name": "Contains",
          "kind": "method",
          "signature": "public bool Contains(ItemStack stack)",
          "parameters": [
            {
              "name": "stack",
              "type": "ItemStack",
              "summary": "The stack to look for."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when it does."
          },
          "summary": "Whether the inventory holds at least `stack`.Count items of its type.",
          "documented": true,
          "url": "/reference/api/inventories/engineinventory/#contains"
        },
        {
          "name": "Count",
          "kind": "method",
          "signature": "public int Count(ItemStack stack)",
          "parameters": [
            {
              "name": "stack",
              "type": "ItemStack",
              "summary": "The stack to look for (its count is ignored)."
            }
          ],
          "returns": {
            "type": "int",
            "summary": "The total count."
          },
          "summary": "How many items of this type (and components) the inventory holds in total.",
          "documented": true,
          "url": "/reference/api/inventories/engineinventory/#count"
        },
        {
          "name": "Get",
          "kind": "method",
          "signature": "public virtual ItemStack Get(int slot)",
          "parameters": [
            {
              "name": "slot",
              "type": "int"
            }
          ],
          "returns": {
            "type": "ItemStack"
          },
          "documented": false,
          "url": "/reference/api/inventories/engineinventory/#get"
        },
        {
          "name": "RemoveItem",
          "kind": "method",
          "signature": "public virtual int RemoveItem(ItemStack stack)",
          "parameters": [
            {
              "name": "stack",
              "type": "ItemStack"
            }
          ],
          "returns": {
            "type": "int"
          },
          "documented": false,
          "url": "/reference/api/inventories/engineinventory/#removeitem"
        },
        {
          "name": "Set",
          "kind": "method",
          "signature": "public virtual void Set(int slot, ItemStack stack)",
          "parameters": [
            {
              "name": "slot",
              "type": "int"
            },
            {
              "name": "stack",
              "type": "ItemStack"
            }
          ],
          "throws": [
            {
              "type": "System.ArgumentException",
              "summary": "The stack is not valid (unknown item, count above the stack size, a component that does not convert), or the slot does not exist."
            }
          ],
          "documented": false,
          "url": "/reference/api/inventories/engineinventory/#set"
        }
      ]
    },
    {
      "name": "IInventory",
      "fullName": "Mc.Scripting.Inventories.IInventory",
      "namespace": "Mc.Scripting.Inventories",
      "kind": "interface",
      "category": "inventories",
      "categoryLabel": "Inventories and menus",
      "signature": "public interface IInventory",
      "summary": "A list of item slots: a player's inventory, a chest, a plugin menu. Every read returns a copy of the stack in the slot and every write replaces the stack: no object aliases the engine's storage, so a stack can be kept and a slot can change under it without harm. Slots count from 0. Tick thread only.",
      "url": "/reference/api/inventories/iinventory/",
      "members": [
        {
          "name": "Contents",
          "kind": "property",
          "signature": "IEnumerable<ItemStack> Contents { get; }",
          "returns": {
            "type": "IEnumerable<ItemStack>"
          },
          "summary": "Every slot in order (a snapshot).",
          "documented": true,
          "url": "/reference/api/inventories/iinventory/#contents"
        },
        {
          "name": "Size",
          "kind": "property",
          "signature": "int Size { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The number of slots.",
          "documented": true,
          "url": "/reference/api/inventories/iinventory/#size"
        },
        {
          "name": "AddItem",
          "kind": "method",
          "signature": "int AddItem(ItemStack stack)",
          "parameters": [
            {
              "name": "stack",
              "type": "ItemStack",
              "summary": "The stack (the count may exceed the stack size: it is split)."
            }
          ],
          "returns": {
            "type": "int",
            "summary": "How many items did not fit."
          },
          "summary": "Adds a stack, merging into existing stacks first and then filling free slots.",
          "documented": true,
          "url": "/reference/api/inventories/iinventory/#additem"
        },
        {
          "name": "Clear",
          "kind": "method",
          "signature": "void Clear()",
          "summary": "Empties every slot.",
          "documented": true,
          "url": "/reference/api/inventories/iinventory/#clear"
        },
        {
          "name": "Get",
          "kind": "method",
          "signature": "ItemStack Get(int slot)",
          "parameters": [
            {
              "name": "slot",
              "type": "int",
              "summary": "The slot index."
            }
          ],
          "returns": {
            "type": "ItemStack",
            "summary": "The stack (empty for an empty slot)."
          },
          "summary": "Reads a slot.",
          "documented": true,
          "url": "/reference/api/inventories/iinventory/#get"
        },
        {
          "name": "RemoveItem",
          "kind": "method",
          "signature": "int RemoveItem(ItemStack stack)",
          "parameters": [
            {
              "name": "stack",
              "type": "ItemStack",
              "summary": "What to remove."
            }
          ],
          "returns": {
            "type": "int",
            "summary": "How many items were removed."
          },
          "summary": "Removes items of the stack's type (and components) from the slots.",
          "documented": true,
          "url": "/reference/api/inventories/iinventory/#removeitem"
        },
        {
          "name": "Set",
          "kind": "method",
          "signature": "void Set(int slot, ItemStack stack)",
          "parameters": [
            {
              "name": "slot",
              "type": "int",
              "summary": "The slot index."
            },
            {
              "name": "stack",
              "type": "ItemStack",
              "summary": "The new content."
            }
          ],
          "summary": "Replaces a slot.",
          "documented": true,
          "url": "/reference/api/inventories/iinventory/#set"
        }
      ]
    },
    {
      "name": "ItemStack",
      "fullName": "Mc.Scripting.Inventories.ItemStack",
      "namespace": "Mc.Scripting.Inventories",
      "kind": "struct",
      "category": "inventories",
      "categoryLabel": "Inventories and menus",
      "signature": "public readonly struct ItemStack : IEquatable<ItemStack>",
      "interfaces": [
        "IEquatable<ItemStack>"
      ],
      "summary": "An immutable item stack value: an item type, a count and data components. Every `With...` method returns a new stack; the value can be kept, compared and put into inventories, menus and the world (`IInventory.Set`, {{cref:M:Mc.Scripting.Inventories.Menu.Slot(System.Int32,Mc.Scripting.Inventories.ItemStack,System.Action{Mc.Scripting.Inventories.MenuClick})}}, `World.DropItem`).",
      "remarks": "Components are addressed by their registry key (`\"minecraft:custom_name\"`) and carry NBT values. The ones the server converts are given in a plugin friendly form: text components (`custom_name`, `item_name`, `lore` lines) as JSON strings (what `Component.ToJson` makes), integers (`damage`, `max_damage`, `max_stack_size`, `repair_cost`, `map_id`, `enchantable`, `dyed_color`), `rarity` as `\"common\"` .. `\"epic\"`, `enchantment_glint_override` as a byte, `unbreakable` / `glider` as an empty compound, `custom_data` as a compound, `item_model` and `tooltip_style` as identifier strings, `custom_model_data` as `{floats, flags, strings, colors}`, `enchantments` and `stored_enchantments` as `{\"minecraft:sharpness\": 3}`, `tooltip_display` as `{hide_tooltip, hidden_components}`, `use_cooldown` as `{seconds, group?}` and `food` as `{nutrition, saturation, can_always_eat}`. Every other component the server knows is read as an opaque byte array holding its network encoding: it survives copying a stack but cannot be edited. A component key starting with `!` removes a component of the item's prototype (`ItemStack.WithoutDefault`).\n\nA stack that no inventory accepts (unknown item, a count above the stack size, a component whose value does not convert) is refused by the call that receives it with an `ArgumentException`.",
      "url": "/reference/api/inventories/itemstack/",
      "members": [
        {
          "name": "ItemStack",
          "kind": "ctor",
          "signature": "public ItemStack(string type, int count = 1)",
          "parameters": [
            {
              "name": "type",
              "type": "string",
              "summary": "The item key, `\"minecraft:diamond_sword\"` (the namespace may be left out)."
            },
            {
              "name": "count",
              "type": "int",
              "default": "1",
              "summary": "The stack size (at least 1)."
            }
          ],
          "summary": "Creates a stack.",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#constructor"
        },
        {
          "name": "ComponentKeys",
          "kind": "property",
          "signature": "public IEnumerable<string> ComponentKeys { get; }",
          "returns": {
            "type": "IEnumerable<string>"
          },
          "summary": "The keys of the components added to the stack (and `!key` entries for removed defaults).",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#componentkeys"
        },
        {
          "name": "Count",
          "kind": "property",
          "signature": "public int Count { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The stack size (0 for an empty stack).",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#count"
        },
        {
          "name": "CustomData",
          "kind": "property",
          "signature": "public NbtCompound? CustomData { get; }",
          "returns": {
            "type": "NbtCompound?"
          },
          "summary": "The plugin data of the stack (`minecraft:custom_data`), or null.",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#customdata"
        },
        {
          "name": "CustomId",
          "kind": "property",
          "signature": "public string? CustomId { get; }",
          "returns": {
            "type": "string?"
          },
          "summary": "The id of the custom item this stack is (`custom_data.mc.id`, written by the content layer), or null for an ordinary stack.",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#customid"
        },
        {
          "name": "IsEmpty",
          "kind": "property",
          "signature": "public bool IsEmpty { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the stack holds nothing.",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#isempty"
        },
        {
          "name": "MaxStackSize",
          "kind": "property",
          "signature": "public int MaxStackSize { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The largest size a stack like this can have (the item's own, or its `max_stack_size` component). Asks the server.",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#maxstacksize"
        },
        {
          "name": "Type",
          "kind": "property",
          "signature": "public string Type { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The item key (`\"minecraft:air\"` for an empty stack).",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#type"
        },
        {
          "name": "Empty",
          "kind": "property",
          "signature": "public static ItemStack Empty { get; }",
          "static": true,
          "returns": {
            "type": "ItemStack"
          },
          "summary": "No item.",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#empty"
        },
        {
          "name": "Equals",
          "kind": "method",
          "signature": "public bool Equals(ItemStack other)",
          "parameters": [
            {
              "name": "other",
              "type": "ItemStack"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "documented": false,
          "url": "/reference/api/inventories/itemstack/#equals"
        },
        {
          "name": "Equals",
          "kind": "method",
          "signature": "public override bool Equals(object? obj)",
          "parameters": [
            {
              "name": "obj",
              "type": "object?"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "documented": false,
          "url": "/reference/api/inventories/itemstack/#equals-1"
        },
        {
          "name": "GetComponent",
          "kind": "method",
          "signature": "public NbtTag? GetComponent(string key)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The component key."
            }
          ],
          "returns": {
            "type": "NbtTag?",
            "summary": "A copy of the component, or null when the stack does not have it as an added component."
          },
          "summary": "Reads a data component.",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#getcomponent"
        },
        {
          "name": "GetHashCode",
          "kind": "method",
          "signature": "public override int GetHashCode()",
          "returns": {
            "type": "int"
          },
          "documented": false,
          "url": "/reference/api/inventories/itemstack/#gethashcode"
        },
        {
          "name": "HasComponent",
          "kind": "method",
          "signature": "public bool HasComponent(string key)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The component key."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when it does."
          },
          "summary": "Whether the stack carries a component that was added to it.",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#hascomponent"
        },
        {
          "name": "ToNbt",
          "kind": "method",
          "signature": "public NbtCompound ToNbt()",
          "returns": {
            "type": "NbtCompound",
            "summary": "The compound."
          },
          "summary": "The stack in its NBT form (`{id:\"minecraft:stick\",count:2,components:{...}}`), the form the server exchanges.",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#tonbt"
        },
        {
          "name": "ToString",
          "kind": "method",
          "signature": "public override string ToString()",
          "returns": {
            "type": "string"
          },
          "documented": false,
          "url": "/reference/api/inventories/itemstack/#tostring"
        },
        {
          "name": "WithComponent",
          "kind": "method",
          "signature": "public ItemStack WithComponent(string key, NbtTag value)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The component key, `\"minecraft:custom_data\"`."
            },
            {
              "name": "value",
              "type": "NbtTag",
              "summary": "The component value in its NBT form."
            }
          ],
          "returns": {
            "type": "ItemStack",
            "summary": "The new stack."
          },
          "summary": "The same stack with a data component set.",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#withcomponent"
        },
        {
          "name": "WithCount",
          "kind": "method",
          "signature": "public ItemStack WithCount(int count)",
          "parameters": [
            {
              "name": "count",
              "type": "int",
              "summary": "The new size (0 gives the empty stack)."
            }
          ],
          "returns": {
            "type": "ItemStack",
            "summary": "The new stack."
          },
          "summary": "The same stack with another size.",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#withcount"
        },
        {
          "name": "WithCustomData",
          "kind": "method",
          "signature": "public ItemStack WithCustomData(NbtCompound data)",
          "parameters": [
            {
              "name": "data",
              "type": "NbtCompound",
              "summary": "The data."
            }
          ],
          "returns": {
            "type": "ItemStack",
            "summary": "The new stack."
          },
          "summary": "The same stack with plugin data (`minecraft:custom_data`) replaced.",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#withcustomdata"
        },
        {
          "name": "WithCustomId",
          "kind": "method",
          "signature": "public ItemStack WithCustomId(string customId)",
          "parameters": [
            {
              "name": "customId",
              "type": "string",
              "summary": "The id, `\"myplugin:ruby\"`."
            }
          ],
          "returns": {
            "type": "ItemStack",
            "summary": "The new stack."
          },
          "summary": "The same stack marked as a custom item (`custom_data.mc.id`); other plugin data is kept.",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#withcustomid"
        },
        {
          "name": "WithCustomModelData",
          "kind": "method",
          "signature": "public ItemStack WithCustomModelData(float value)",
          "parameters": [
            {
              "name": "value",
              "type": "float",
              "summary": "The value."
            }
          ],
          "returns": {
            "type": "ItemStack",
            "summary": "The new stack."
          },
          "summary": "The same stack with one float of `minecraft:custom_model_data` (what `range_dispatch` model definitions of a resource pack read).",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#withcustommodeldata"
        },
        {
          "name": "WithDamage",
          "kind": "method",
          "signature": "public ItemStack WithDamage(int damage)",
          "parameters": [
            {
              "name": "damage",
              "type": "int",
              "summary": "The damage."
            }
          ],
          "returns": {
            "type": "ItemStack",
            "summary": "The new stack."
          },
          "summary": "The same stack with durability damage (`minecraft:damage`).",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#withdamage"
        },
        {
          "name": "WithEnchantment",
          "kind": "method",
          "signature": "public ItemStack WithEnchantment(string enchantment, int level)",
          "parameters": [
            {
              "name": "enchantment",
              "type": "string",
              "summary": "The enchantment key, `\"minecraft:sharpness\"`."
            },
            {
              "name": "level",
              "type": "int",
              "summary": "The level."
            }
          ],
          "returns": {
            "type": "ItemStack",
            "summary": "The new stack."
          },
          "summary": "The same stack with an enchantment level (`minecraft:enchantments`).",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#withenchantment"
        },
        {
          "name": "WithItemModel",
          "kind": "method",
          "signature": "public ItemStack WithItemModel(string modelId)",
          "parameters": [
            {
              "name": "modelId",
              "type": "string",
              "summary": "The model id, `\"myplugin:ruby\"`."
            }
          ],
          "returns": {
            "type": "ItemStack",
            "summary": "The new stack."
          },
          "summary": "The same stack with another model (`minecraft:item_model`): the id of an item definition of a resource pack (`assets/<namespace>/items/<path>.json`).",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#withitemmodel"
        },
        {
          "name": "WithItemName",
          "kind": "method",
          "signature": "public ItemStack WithItemName(Component name)",
          "parameters": [
            {
              "name": "name",
              "type": "Component",
              "summary": "The name."
            }
          ],
          "returns": {
            "type": "ItemStack",
            "summary": "The new stack."
          },
          "summary": "The same stack with an item name (`minecraft:item_name`: the base name of the item, not italic, replaced by a rename in an anvil).",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#withitemname"
        },
        {
          "name": "WithLore",
          "kind": "method",
          "signature": "public ItemStack WithLore(params Component[] lines)",
          "parameters": [
            {
              "name": "lines",
              "type": "Component[]",
              "modifier": "params",
              "summary": "The lines."
            }
          ],
          "returns": {
            "type": "ItemStack",
            "summary": "The new stack."
          },
          "summary": "The same stack with lore lines (`minecraft:lore`).",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#withlore"
        },
        {
          "name": "WithMaxStackSize",
          "kind": "method",
          "signature": "public ItemStack WithMaxStackSize(int max)",
          "parameters": [
            {
              "name": "max",
              "type": "int",
              "summary": "The size."
            }
          ],
          "returns": {
            "type": "ItemStack",
            "summary": "The new stack."
          },
          "summary": "The same stack with another maximum stack size (`minecraft:max_stack_size`, 1 to 99).",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#withmaxstacksize"
        },
        {
          "name": "WithName",
          "kind": "method",
          "signature": "public ItemStack WithName(Component name)",
          "parameters": [
            {
              "name": "name",
              "type": "Component",
              "summary": "The name."
            }
          ],
          "returns": {
            "type": "ItemStack",
            "summary": "The new stack."
          },
          "summary": "The same stack with a custom name (`minecraft:custom_name`: shown in italics like a renamed item).",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#withname"
        },
        {
          "name": "WithUnbreakable",
          "kind": "method",
          "signature": "public ItemStack WithUnbreakable()",
          "returns": {
            "type": "ItemStack",
            "summary": "The new stack."
          },
          "summary": "The same stack that cannot take durability damage (`minecraft:unbreakable`).",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#withunbreakable"
        },
        {
          "name": "WithoutComponent",
          "kind": "method",
          "signature": "public ItemStack WithoutComponent(string key)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The component key."
            }
          ],
          "returns": {
            "type": "ItemStack",
            "summary": "The new stack."
          },
          "summary": "The same stack without a component that was added to it (the item's own default of it, if it has one, stays).",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#withoutcomponent"
        },
        {
          "name": "WithoutDefault",
          "kind": "method",
          "signature": "public ItemStack WithoutDefault(string key)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The component key."
            }
          ],
          "returns": {
            "type": "ItemStack",
            "summary": "The new stack."
          },
          "summary": "The same stack without the default value of a component of its item (`minecraft:max_damage` of a tool, for example).",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#withoutdefault"
        },
        {
          "name": "FromNbt",
          "kind": "method",
          "signature": "public static ItemStack FromNbt(NbtCompound nbt)",
          "static": true,
          "parameters": [
            {
              "name": "nbt",
              "type": "NbtCompound",
              "summary": "The compound with `id`, `count` and optionally `components`."
            }
          ],
          "returns": {
            "type": "ItemStack",
            "summary": "The stack."
          },
          "summary": "Reads a stack from its NBT form.",
          "throws": [
            {
              "type": "System.FormatException",
              "summary": "The compound has no item id."
            }
          ],
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#fromnbt"
        },
        {
          "name": "IsSimilar",
          "kind": "method",
          "signature": "public static bool IsSimilar(ItemStack a, ItemStack b)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "ItemStack",
              "summary": "One stack."
            },
            {
              "name": "b",
              "type": "ItemStack",
              "summary": "The other."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when they would stack."
          },
          "summary": "Whether two stacks are the same item with the same components, whatever their sizes (the test of merging stacks).",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#issimilar"
        },
        {
          "name": "!=",
          "kind": "operator",
          "signature": "public static bool operator !=(ItemStack a, ItemStack b)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "ItemStack",
              "summary": "One stack."
            },
            {
              "name": "b",
              "type": "ItemStack",
              "summary": "The other."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when different."
          },
          "summary": "Inequality.",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#operator-"
        },
        {
          "name": "==",
          "kind": "operator",
          "signature": "public static bool operator ==(ItemStack a, ItemStack b)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "ItemStack",
              "summary": "One stack."
            },
            {
              "name": "b",
              "type": "ItemStack",
              "summary": "The other."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when equal."
          },
          "summary": "Equality.",
          "documented": true,
          "url": "/reference/api/inventories/itemstack/#operator--1"
        }
      ]
    },
    {
      "name": "ItemView",
      "fullName": "Mc.Scripting.Inventories.ItemView",
      "namespace": "Mc.Scripting.Inventories",
      "kind": "struct",
      "category": "inventories",
      "categoryLabel": "Inventories and menus",
      "signature": "public readonly struct ItemView",
      "summary": "A read-only view of an item stack inside an event: the item and the count. Blittable.",
      "remarks": "Valid only during the dispatch it came from. `ItemView.ToStack` turns it into a full `ItemStack` (components, names, lore) that can be kept.",
      "url": "/reference/api/inventories/itemview/",
      "members": [
        {
          "name": "Count",
          "kind": "property",
          "signature": "public int Count { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Stack size (0 when empty).",
          "documented": true,
          "url": "/reference/api/inventories/itemview/#count"
        },
        {
          "name": "CustomId",
          "kind": "property",
          "signature": "public string? CustomId { get; }",
          "returns": {
            "type": "string?"
          },
          "summary": "The id of the custom item this is (`ItemStack.CustomId`), or null. Costs nothing for a stack without components.",
          "documented": true,
          "url": "/reference/api/inventories/itemview/#customid"
        },
        {
          "name": "HasComponents",
          "kind": "property",
          "signature": "public bool HasComponents { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the engine has the data components of this stack (false for plain stacks).",
          "documented": true,
          "url": "/reference/api/inventories/itemview/#hascomponents"
        },
        {
          "name": "IsEmpty",
          "kind": "property",
          "signature": "public bool IsEmpty { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the stack is empty (no item, air or count 0).",
          "documented": true,
          "url": "/reference/api/inventories/itemview/#isempty"
        },
        {
          "name": "ItemId",
          "kind": "property",
          "signature": "public int ItemId { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Item registry id (0 for air / nothing).",
          "documented": true,
          "url": "/reference/api/inventories/itemview/#itemid"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public string Key { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The item key, e.g. \"minecraft:diamond_sword\" (empty for an empty stack).",
          "documented": true,
          "url": "/reference/api/inventories/itemview/#key"
        },
        {
          "name": "ToStack",
          "kind": "method",
          "signature": "public ItemStack ToStack()",
          "returns": {
            "type": "ItemStack",
            "summary": "The stack."
          },
          "summary": "A copy of the stack with all its data components (names, lore, custom data ...) that stays valid after the event. A view of a stack without components needs no call to the engine.",
          "documented": true,
          "url": "/reference/api/inventories/itemview/#tostack"
        },
        {
          "name": "ToString",
          "kind": "method",
          "signature": "public override string ToString()",
          "returns": {
            "type": "string"
          },
          "documented": false,
          "url": "/reference/api/inventories/itemview/#tostring"
        }
      ]
    },
    {
      "name": "Menu",
      "fullName": "Mc.Scripting.Inventories.Menu",
      "namespace": "Mc.Scripting.Inventories",
      "kind": "class",
      "category": "inventories",
      "categoryLabel": "Inventories and menus",
      "signature": "public sealed class Menu : IDisposable, IInventory, IPluginResource",
      "interfaces": [
        "IDisposable",
        "IInventory",
        "IPluginResource"
      ],
      "summary": "A custom GUI: a container with icons and click handlers that the client shows like a chest, a hopper or a dispenser. The menu is owned by the plugin and closed for every viewer when the plugin unloads or reloads.",
      "remarks": "**A menu is locked.** The engine keeps it a display: a click that could take an icon out or put an item in is denied (and the whole menu resynced to the client) unless a handler allows it with `MenuClick.Allow`; drags over its slots, shift clicks, double clicks, number keys, the off hand key and the drop key cannot move items out of it or into it; the creative clone click gives no copy of an icon. Whatever a handler decides, the server is authoritative: it only performs what vanilla would perform for the click, and a cancelled click changes nothing.\n\nCreate menus with `Menus.Chest` (`plugin.Menus`) or the static factories, which belong to the plugin whose code is running (OnEnable, an event handler, a command, a scheduled task); items in the slots are ordinary stacks, so the menu doubles as a small shared inventory (`Menu.Get`, `Menu.Set`).",
      "url": "/reference/api/inventories/menu/",
      "members": [
        {
          "name": "Contents",
          "kind": "property",
          "signature": "public IEnumerable<ItemStack> Contents { get; }",
          "returns": {
            "type": "IEnumerable<ItemStack>"
          },
          "documented": false,
          "url": "/reference/api/inventories/menu/#contents"
        },
        {
          "name": "IsDisposed",
          "kind": "property",
          "signature": "public bool IsDisposed { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the menu was disposed (or its plugin unloaded).",
          "documented": true,
          "url": "/reference/api/inventories/menu/#isdisposed"
        },
        {
          "name": "LockPlayerInventory",
          "kind": "property",
          "signature": "public bool LockPlayerInventory { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether every click in the menu is denied unless allowed, also the ones that only touch the player's own inventory (false by default: the player can rearrange his own slots).",
          "documented": true,
          "url": "/reference/api/inventories/menu/#lockplayerinventory"
        },
        {
          "name": "Rows",
          "kind": "property",
          "signature": "public int Rows { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The number of rows (1 for a hopper, 3 for a dispenser).",
          "documented": true,
          "url": "/reference/api/inventories/menu/#rows"
        },
        {
          "name": "Size",
          "kind": "property",
          "signature": "public int Size { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The number of slots of the menu itself (the player's own slots are not counted).",
          "documented": true,
          "url": "/reference/api/inventories/menu/#size"
        },
        {
          "name": "Title",
          "kind": "property",
          "signature": "public Component Title { get; set; }",
          "returns": {
            "type": "Component"
          },
          "summary": "The title shown above the slots; changing it re-opens the screen of the viewers with the same contents.",
          "documented": true,
          "url": "/reference/api/inventories/menu/#title"
        },
        {
          "name": "Type",
          "kind": "property",
          "signature": "public MenuType Type { get; }",
          "returns": {
            "type": "MenuType"
          },
          "summary": "The vanilla menu type.",
          "documented": true,
          "url": "/reference/api/inventories/menu/#type"
        },
        {
          "name": "Viewers",
          "kind": "property",
          "signature": "public IReadOnlySet<Player> Viewers { get; }",
          "returns": {
            "type": "IReadOnlySet<Player>"
          },
          "summary": "The players who have the menu open (a snapshot).",
          "documented": true,
          "url": "/reference/api/inventories/menu/#viewers"
        },
        {
          "name": "AddItem",
          "kind": "method",
          "signature": "public int AddItem(ItemStack stack)",
          "parameters": [
            {
              "name": "stack",
              "type": "ItemStack"
            }
          ],
          "returns": {
            "type": "int"
          },
          "documented": false,
          "url": "/reference/api/inventories/menu/#additem"
        },
        {
          "name": "Clear",
          "kind": "method",
          "signature": "public void Clear()",
          "documented": false,
          "url": "/reference/api/inventories/menu/#clear"
        },
        {
          "name": "Close",
          "kind": "method",
          "signature": "public int Close()",
          "returns": {
            "type": "int",
            "summary": "How many players had it open."
          },
          "summary": "Closes the menu for every viewer.",
          "documented": true,
          "url": "/reference/api/inventories/menu/#close"
        },
        {
          "name": "Close",
          "kind": "method",
          "signature": "public bool Close(Player player)",
          "parameters": [
            {
              "name": "player",
              "type": "Player",
              "summary": "The player."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when the player had the menu open."
          },
          "summary": "Closes the menu for one viewer (his cursor stack goes back to him).",
          "documented": true,
          "url": "/reference/api/inventories/menu/#close-1"
        },
        {
          "name": "Dispose",
          "kind": "method",
          "signature": "public void Dispose()",
          "summary": "Closes the menu for everybody and frees it (what unloading the plugin does).",
          "documented": true,
          "url": "/reference/api/inventories/menu/#dispose"
        },
        {
          "name": "FillEmpty",
          "kind": "method",
          "signature": "public Menu FillEmpty(ItemStack icon)",
          "parameters": [
            {
              "name": "icon",
              "type": "ItemStack",
              "summary": "The icon."
            }
          ],
          "returns": {
            "type": "Menu",
            "summary": "This menu, for chaining."
          },
          "summary": "Sets the icon of every empty slot (a border or a background).",
          "documented": true,
          "url": "/reference/api/inventories/menu/#fillempty"
        },
        {
          "name": "Get",
          "kind": "method",
          "signature": "public ItemStack Get(int slot)",
          "parameters": [
            {
              "name": "slot",
              "type": "int"
            }
          ],
          "returns": {
            "type": "ItemStack"
          },
          "documented": false,
          "url": "/reference/api/inventories/menu/#get"
        },
        {
          "name": "Icon",
          "kind": "method",
          "signature": "public ItemStack Icon(int slot)",
          "parameters": [
            {
              "name": "slot",
              "type": "int",
              "summary": "The slot."
            }
          ],
          "returns": {
            "type": "ItemStack",
            "summary": "The stack it was given."
          },
          "summary": "The icon the plugin set for a slot with {{cref:M:Mc.Scripting.Inventories.Menu.Slot(System.Int32,Mc.Scripting.Inventories.ItemStack,System.Action{Mc.Scripting.Inventories.MenuClick})}} (the stack in the slot now is `Menu.Get`).",
          "documented": true,
          "url": "/reference/api/inventories/menu/#icon"
        },
        {
          "name": "IsOpenFor",
          "kind": "method",
          "signature": "public bool IsOpenFor(Player player)",
          "parameters": [
            {
              "name": "player",
              "type": "Player",
              "summary": "The player."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when he does."
          },
          "summary": "Whether a player has this menu open.",
          "documented": true,
          "url": "/reference/api/inventories/menu/#isopenfor"
        },
        {
          "name": "OnClick",
          "kind": "method",
          "signature": "public Menu OnClick(Action<MenuClick> handler)",
          "parameters": [
            {
              "name": "handler",
              "type": "Action<MenuClick>",
              "summary": "The handler."
            }
          ],
          "returns": {
            "type": "Menu",
            "summary": "This menu, for chaining."
          },
          "summary": "Called for every click in the menu (the menu's own slots and the player's), before the handler of the slot.",
          "documented": true,
          "url": "/reference/api/inventories/menu/#onclick"
        },
        {
          "name": "OnClose",
          "kind": "method",
          "signature": "public Menu OnClose(Action<Player> handler)",
          "parameters": [
            {
              "name": "handler",
              "type": "Action<Player>",
              "summary": "The handler (the cursor stack has already been given back)."
            }
          ],
          "returns": {
            "type": "Menu",
            "summary": "This menu, for chaining."
          },
          "summary": "Sets what happens when a player closes the menu (or it is closed for him).",
          "documented": true,
          "url": "/reference/api/inventories/menu/#onclose"
        },
        {
          "name": "OnClose",
          "kind": "method",
          "signature": "public Menu OnClose(Action<Player, MenuCloseReason> handler)",
          "parameters": [
            {
              "name": "handler",
              "type": "Action<Player, MenuCloseReason>",
              "summary": "The handler."
            }
          ],
          "returns": {
            "type": "Menu",
            "summary": "This menu, for chaining."
          },
          "summary": "Sets what happens when a player closes the menu, with the reason.",
          "documented": true,
          "url": "/reference/api/inventories/menu/#onclose-1"
        },
        {
          "name": "Open",
          "kind": "method",
          "signature": "public bool Open(Player player)",
          "parameters": [
            {
              "name": "player",
              "type": "Player",
              "summary": "The player."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when the menu is open, false when a handler cancelled it or the player is offline."
          },
          "summary": "Opens the menu for a player, closing whatever container he has open. `InventoryOpenEvent` (kind `Custom`) fires first and can cancel it.",
          "documented": true,
          "url": "/reference/api/inventories/menu/#open"
        },
        {
          "name": "Refresh",
          "kind": "method",
          "signature": "public void Refresh()",
          "summary": "Sends the changed slots to the viewers now. (They are synced every tick anyway; this is for code that needs the packets within the current tick.)",
          "documented": true,
          "url": "/reference/api/inventories/menu/#refresh"
        },
        {
          "name": "RemoveItem",
          "kind": "method",
          "signature": "public int RemoveItem(ItemStack stack)",
          "parameters": [
            {
              "name": "stack",
              "type": "ItemStack"
            }
          ],
          "returns": {
            "type": "int"
          },
          "documented": false,
          "url": "/reference/api/inventories/menu/#removeitem"
        },
        {
          "name": "Set",
          "kind": "method",
          "signature": "public void Set(int slot, ItemStack stack)",
          "parameters": [
            {
              "name": "slot",
              "type": "int"
            },
            {
              "name": "stack",
              "type": "ItemStack"
            }
          ],
          "documented": false,
          "url": "/reference/api/inventories/menu/#set"
        },
        {
          "name": "Slot",
          "kind": "method",
          "signature": "public Menu Slot(int slot, ItemStack icon, Action<MenuClick>? onClick = null)",
          "parameters": [
            {
              "name": "slot",
              "type": "int",
              "summary": "The slot (0 to `Menu.Size` - 1)."
            },
            {
              "name": "icon",
              "type": "ItemStack",
              "summary": "What the slot shows (an ordinary stack; the empty stack clears it)."
            },
            {
              "name": "onClick",
              "type": "Action<MenuClick>?",
              "default": "null",
              "summary": "Called when a player clicks the slot (the click is denied unless the handler allows it)."
            }
          ],
          "returns": {
            "type": "Menu",
            "summary": "This menu, for chaining."
          },
          "summary": "Sets the icon and the click handler of a slot.",
          "documented": true,
          "url": "/reference/api/inventories/menu/#slot"
        },
        {
          "name": "Chest",
          "kind": "method",
          "signature": "public static Menu Chest(int rows, Component title)",
          "static": true,
          "parameters": [
            {
              "name": "rows",
              "type": "int",
              "summary": "1 to 6 rows."
            },
            {
              "name": "title",
              "type": "Component",
              "summary": "The title shown above the slots."
            }
          ],
          "returns": {
            "type": "Menu",
            "summary": "The menu."
          },
          "summary": "Creates a menu of 9-wide rows for the plugin whose code is running.",
          "throws": [
            {
              "type": "System.InvalidOperationException",
              "summary": "No plugin code is running (use `plugin.Menus.Chest` there)."
            }
          ],
          "documented": true,
          "url": "/reference/api/inventories/menu/#chest"
        },
        {
          "name": "Dispenser",
          "kind": "method",
          "signature": "public static Menu Dispenser(Component title)",
          "static": true,
          "parameters": [
            {
              "name": "title",
              "type": "Component",
              "summary": "The title."
            }
          ],
          "returns": {
            "type": "Menu",
            "summary": "The menu."
          },
          "summary": "Creates a dispenser-style menu (3 x 3 slots) for the plugin whose code is running.",
          "documented": true,
          "url": "/reference/api/inventories/menu/#dispenser"
        },
        {
          "name": "Hopper",
          "kind": "method",
          "signature": "public static Menu Hopper(Component title)",
          "static": true,
          "parameters": [
            {
              "name": "title",
              "type": "Component",
              "summary": "The title."
            }
          ],
          "returns": {
            "type": "Menu",
            "summary": "The menu."
          },
          "summary": "Creates a hopper menu (5 slots) for the plugin whose code is running.",
          "documented": true,
          "url": "/reference/api/inventories/menu/#hopper"
        }
      ]
    },
    {
      "name": "MenuClick",
      "fullName": "Mc.Scripting.Inventories.MenuClick",
      "namespace": "Mc.Scripting.Inventories",
      "kind": "class",
      "category": "inventories",
      "categoryLabel": "Inventories and menus",
      "signature": "public sealed class MenuClick",
      "summary": "A click in a `MenuClick.Menu`. A menu is locked: a click that could move items out of the menu or into it (a slot of the menu, shift click, double click, number key, the off hand key, the drop key, a middle click) is denied and the client is resynced unless the handler calls `MenuClick.Allow`; `MenuClick.Cancel` always denies. Clicks that only touch the player's own inventory slots pass unless a handler cancels them (or the menu locks the player inventory too). The object is valid during the handler only.",
      "url": "/reference/api/inventories/menuclick/",
      "members": [
        {
          "name": "Allowed",
          "kind": "property",
          "signature": "public bool Allowed { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the click will be processed (set by `MenuClick.Allow`; false by default for a click on the menu's own slots).",
          "documented": true,
          "url": "/reference/api/inventories/menuclick/#allowed"
        },
        {
          "name": "Button",
          "kind": "property",
          "signature": "public int Button { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The raw button of the click packet.",
          "documented": true,
          "url": "/reference/api/inventories/menuclick/#button"
        },
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the click is cancelled for good (`MenuClick.Cancel` or setting this).",
          "documented": true,
          "url": "/reference/api/inventories/menuclick/#cancelled"
        },
        {
          "name": "Clicked",
          "kind": "property",
          "signature": "public ItemStack Clicked { get; }",
          "returns": {
            "type": "ItemStack"
          },
          "summary": "The stack in the clicked slot (before the click).",
          "documented": true,
          "url": "/reference/api/inventories/menuclick/#clicked"
        },
        {
          "name": "Cursor",
          "kind": "property",
          "signature": "public ItemStack Cursor { get; }",
          "returns": {
            "type": "ItemStack"
          },
          "summary": "The stack the player holds on the cursor (before the click).",
          "documented": true,
          "url": "/reference/api/inventories/menuclick/#cursor"
        },
        {
          "name": "IsTopInventory",
          "kind": "property",
          "signature": "public bool IsTopInventory { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the click is on one of the menu's own slots.",
          "documented": true,
          "url": "/reference/api/inventories/menuclick/#istopinventory"
        },
        {
          "name": "Menu",
          "kind": "property",
          "signature": "public Menu Menu { get; }",
          "returns": {
            "type": "Menu"
          },
          "summary": "The menu.",
          "documented": true,
          "url": "/reference/api/inventories/menuclick/#menu"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player who clicked.",
          "documented": true,
          "url": "/reference/api/inventories/menuclick/#player"
        },
        {
          "name": "PlayerSlot",
          "kind": "property",
          "signature": "public int PlayerSlot { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "For a click on the player's own slots: the slot in `PlayerInventory` numbering; otherwise -1.",
          "documented": true,
          "url": "/reference/api/inventories/menuclick/#playerslot"
        },
        {
          "name": "Slot",
          "kind": "property",
          "signature": "public int Slot { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The clicked slot in the menu's numbering: 0 to `Menu.Size` - 1 are the menu's own slots, then the player's 27 main and 9 hotbar slots; -999 outside the window.",
          "documented": true,
          "url": "/reference/api/inventories/menuclick/#slot"
        },
        {
          "name": "Type",
          "kind": "property",
          "signature": "public MenuClickType Type { get; }",
          "returns": {
            "type": "MenuClickType"
          },
          "summary": "How the player clicked.",
          "documented": true,
          "url": "/reference/api/inventories/menuclick/#type"
        },
        {
          "name": "Allow",
          "kind": "method",
          "signature": "public void Allow()",
          "summary": "Lets the click change items like it would in a chest (take the stack out of the menu, put one in, shift click ...). The server only does what vanilla does.",
          "documented": true,
          "url": "/reference/api/inventories/menuclick/#allow"
        },
        {
          "name": "Cancel",
          "kind": "method",
          "signature": "public void Cancel()",
          "summary": "Denies the click: nothing changes and the client is resynced (also for clicks that would pass by default).",
          "documented": true,
          "url": "/reference/api/inventories/menuclick/#cancel"
        },
        {
          "name": "Close",
          "kind": "method",
          "signature": "public void Close()",
          "summary": "Closes the menu for the player after the click.",
          "documented": true,
          "url": "/reference/api/inventories/menuclick/#close"
        },
        {
          "name": "SetClicked",
          "kind": "method",
          "signature": "public void SetClicked(ItemStack stack)",
          "parameters": [
            {
              "name": "stack",
              "type": "ItemStack",
              "summary": "The new stack."
            }
          ],
          "summary": "Replaces the stack in the clicked slot (a slot of the menu or one of the player's).",
          "documented": true,
          "url": "/reference/api/inventories/menuclick/#setclicked"
        },
        {
          "name": "SetCursor",
          "kind": "method",
          "signature": "public void SetCursor(ItemStack stack)",
          "parameters": [
            {
              "name": "stack",
              "type": "ItemStack",
              "summary": "The new cursor stack."
            }
          ],
          "summary": "Replaces the stack on the player's cursor (the client is resynced after the click).",
          "documented": true,
          "url": "/reference/api/inventories/menuclick/#setcursor"
        }
      ]
    },
    {
      "name": "MenuClickType",
      "fullName": "Mc.Scripting.Inventories.MenuClickType",
      "namespace": "Mc.Scripting.Inventories",
      "kind": "enum",
      "category": "inventories",
      "categoryLabel": "Inventories and menus",
      "signature": "public enum MenuClickType : int",
      "summary": "The kind of a click in a menu.",
      "url": "/reference/api/inventories/menuclicktype/",
      "members": [
        {
          "name": "Left",
          "kind": "enumMember",
          "signature": "Left = 0",
          "value": "0",
          "summary": "A plain left click.",
          "documented": true,
          "url": "/reference/api/inventories/menuclicktype/#left"
        },
        {
          "name": "Right",
          "kind": "enumMember",
          "signature": "Right = 1",
          "value": "1",
          "summary": "A plain right click.",
          "documented": true,
          "url": "/reference/api/inventories/menuclicktype/#right"
        },
        {
          "name": "ShiftClick",
          "kind": "enumMember",
          "signature": "ShiftClick = 2",
          "value": "2",
          "summary": "Shift plus click.",
          "documented": true,
          "url": "/reference/api/inventories/menuclicktype/#shiftclick"
        },
        {
          "name": "NumberKey",
          "kind": "enumMember",
          "signature": "NumberKey = 3",
          "value": "3",
          "summary": "A number key swap.",
          "documented": true,
          "url": "/reference/api/inventories/menuclicktype/#numberkey"
        },
        {
          "name": "DoubleClick",
          "kind": "enumMember",
          "signature": "DoubleClick = 4",
          "value": "4",
          "summary": "A double click.",
          "documented": true,
          "url": "/reference/api/inventories/menuclicktype/#doubleclick"
        },
        {
          "name": "Drop",
          "kind": "enumMember",
          "signature": "Drop = 5",
          "value": "5",
          "summary": "A drop key.",
          "documented": true,
          "url": "/reference/api/inventories/menuclicktype/#drop"
        },
        {
          "name": "Drag",
          "kind": "enumMember",
          "signature": "Drag = 6",
          "value": "6",
          "summary": "The end of a drag over the player's own slots (`MenuClick.Slot` is the first dragged slot; a drag over one of the menu's own slots is denied by the engine before any handler sees it).",
          "documented": true,
          "url": "/reference/api/inventories/menuclicktype/#drag"
        },
        {
          "name": "Middle",
          "kind": "enumMember",
          "signature": "Middle = 7",
          "value": "7",
          "summary": "A middle click (the creative clone click).",
          "documented": true,
          "url": "/reference/api/inventories/menuclicktype/#middle"
        },
        {
          "name": "SwapOffhand",
          "kind": "enumMember",
          "signature": "SwapOffhand = 8",
          "value": "8",
          "summary": "The off hand key over a slot.",
          "documented": true,
          "url": "/reference/api/inventories/menuclicktype/#swapoffhand"
        },
        {
          "name": "ControlDrop",
          "kind": "enumMember",
          "signature": "ControlDrop = 9",
          "value": "9",
          "summary": "Control plus the drop key (the whole stack).",
          "documented": true,
          "url": "/reference/api/inventories/menuclicktype/#controldrop"
        },
        {
          "name": "Outside",
          "kind": "enumMember",
          "signature": "Outside = 10",
          "value": "10",
          "summary": "A click outside the window (drops the cursor stack).",
          "documented": true,
          "url": "/reference/api/inventories/menuclicktype/#outside"
        },
        {
          "name": "Unknown",
          "kind": "enumMember",
          "signature": "Unknown = 11",
          "value": "11",
          "summary": "Anything else.",
          "documented": true,
          "url": "/reference/api/inventories/menuclicktype/#unknown"
        }
      ]
    },
    {
      "name": "MenuType",
      "fullName": "Mc.Scripting.Inventories.MenuType",
      "namespace": "Mc.Scripting.Inventories",
      "kind": "enum",
      "category": "inventories",
      "categoryLabel": "Inventories and menus",
      "signature": "public enum MenuType : int",
      "summary": "The vanilla menu type a `Menu` uses (what the client draws).",
      "url": "/reference/api/inventories/menutype/",
      "members": [
        {
          "name": "Chest",
          "kind": "enumMember",
          "signature": "Chest = 0",
          "value": "0",
          "summary": "A chest: 1 to 6 rows of 9 slots.",
          "documented": true,
          "url": "/reference/api/inventories/menutype/#chest"
        },
        {
          "name": "Hopper",
          "kind": "enumMember",
          "signature": "Hopper = 1",
          "value": "1",
          "summary": "A hopper: 5 slots in a row.",
          "documented": true,
          "url": "/reference/api/inventories/menutype/#hopper"
        },
        {
          "name": "Dispenser",
          "kind": "enumMember",
          "signature": "Dispenser = 2",
          "value": "2",
          "summary": "A dispenser or dropper: 3 x 3 slots.",
          "documented": true,
          "url": "/reference/api/inventories/menutype/#dispenser"
        }
      ]
    },
    {
      "name": "Menus",
      "fullName": "Mc.Scripting.Inventories.Menus",
      "namespace": "Mc.Scripting.Inventories",
      "kind": "class",
      "category": "inventories",
      "categoryLabel": "Inventories and menus",
      "signature": "public sealed class Menus",
      "summary": "Creates menus owned by a plugin (`plugin.Menus`).",
      "url": "/reference/api/inventories/menus/",
      "members": [
        {
          "name": "Chest",
          "kind": "method",
          "signature": "public Menu Chest(int rows, Component title)",
          "parameters": [
            {
              "name": "rows",
              "type": "int",
              "summary": "1 to 6 rows."
            },
            {
              "name": "title",
              "type": "Component",
              "summary": "The title."
            }
          ],
          "returns": {
            "type": "Menu",
            "summary": "The menu."
          },
          "summary": "Creates a chest-style menu of 9-wide rows.",
          "documented": true,
          "url": "/reference/api/inventories/menus/#chest"
        },
        {
          "name": "Create",
          "kind": "method",
          "signature": "public Menu Create(MenuType type, Component title, int rows = 3)",
          "parameters": [
            {
              "name": "type",
              "type": "MenuType",
              "summary": "The vanilla menu type."
            },
            {
              "name": "title",
              "type": "Component",
              "summary": "The title shown above the slots."
            },
            {
              "name": "rows",
              "type": "int",
              "default": "3",
              "summary": "For `MenuType.Chest`: 1 to 6 rows."
            }
          ],
          "returns": {
            "type": "Menu",
            "summary": "The menu, closed."
          },
          "summary": "Creates a menu.",
          "documented": true,
          "url": "/reference/api/inventories/menus/#create"
        },
        {
          "name": "Dispenser",
          "kind": "method",
          "signature": "public Menu Dispenser(Component title)",
          "parameters": [
            {
              "name": "title",
              "type": "Component",
              "summary": "The title."
            }
          ],
          "returns": {
            "type": "Menu",
            "summary": "The menu."
          },
          "summary": "Creates a dispenser-style menu (3 x 3 slots).",
          "documented": true,
          "url": "/reference/api/inventories/menus/#dispenser"
        },
        {
          "name": "Hopper",
          "kind": "method",
          "signature": "public Menu Hopper(Component title)",
          "parameters": [
            {
              "name": "title",
              "type": "Component",
              "summary": "The title."
            }
          ],
          "returns": {
            "type": "Menu",
            "summary": "The menu."
          },
          "summary": "Creates a hopper menu (5 slots).",
          "documented": true,
          "url": "/reference/api/inventories/menus/#hopper"
        }
      ]
    },
    {
      "name": "PlayerInventory",
      "fullName": "Mc.Scripting.Inventories.PlayerInventory",
      "namespace": "Mc.Scripting.Inventories",
      "kind": "class",
      "category": "inventories",
      "categoryLabel": "Inventories and menus",
      "signature": "public sealed class PlayerInventory : EngineInventory",
      "baseType": "EngineInventory",
      "summary": "The inventory of a player: 41 slots numbered like the game's own inventory container, plus the cursor. Slots 0-8 are the hotbar, 9-35 the main inventory, 36 to 39 the armor (boots, leggings, chestplate, helmet) and 40 the off hand. A stale player (one who left) has no slots: reads are empty and writes are refused.",
      "url": "/reference/api/inventories/playerinventory/",
      "members": [
        {
          "name": "BootsSlot",
          "kind": "field",
          "signature": "public const int BootsSlot = 36;",
          "static": true,
          "returns": {
            "type": "int"
          },
          "summary": "The boots slot.",
          "documented": true,
          "url": "/reference/api/inventories/playerinventory/#bootsslot"
        },
        {
          "name": "ChestplateSlot",
          "kind": "field",
          "signature": "public const int ChestplateSlot = 38;",
          "static": true,
          "returns": {
            "type": "int"
          },
          "summary": "The chestplate slot.",
          "documented": true,
          "url": "/reference/api/inventories/playerinventory/#chestplateslot"
        },
        {
          "name": "FirstMainSlot",
          "kind": "field",
          "signature": "public const int FirstMainSlot = 9;",
          "static": true,
          "returns": {
            "type": "int"
          },
          "summary": "First slot of the main inventory (below the hotbar).",
          "documented": true,
          "url": "/reference/api/inventories/playerinventory/#firstmainslot"
        },
        {
          "name": "HelmetSlot",
          "kind": "field",
          "signature": "public const int HelmetSlot = 39;",
          "static": true,
          "returns": {
            "type": "int"
          },
          "summary": "The helmet slot.",
          "documented": true,
          "url": "/reference/api/inventories/playerinventory/#helmetslot"
        },
        {
          "name": "LeggingsSlot",
          "kind": "field",
          "signature": "public const int LeggingsSlot = 37;",
          "static": true,
          "returns": {
            "type": "int"
          },
          "summary": "The leggings slot.",
          "documented": true,
          "url": "/reference/api/inventories/playerinventory/#leggingsslot"
        },
        {
          "name": "OffHandSlot",
          "kind": "field",
          "signature": "public const int OffHandSlot = 40;",
          "static": true,
          "returns": {
            "type": "int"
          },
          "summary": "The off hand slot.",
          "documented": true,
          "url": "/reference/api/inventories/playerinventory/#offhandslot"
        },
        {
          "name": "SlotCount",
          "kind": "field",
          "signature": "public const int SlotCount = 41;",
          "static": true,
          "returns": {
            "type": "int"
          },
          "summary": "Number of slots.",
          "documented": true,
          "url": "/reference/api/inventories/playerinventory/#slotcount"
        },
        {
          "name": "Boots",
          "kind": "property",
          "signature": "public ItemStack Boots { get; set; }",
          "returns": {
            "type": "ItemStack"
          },
          "summary": "The boots.",
          "documented": true,
          "url": "/reference/api/inventories/playerinventory/#boots"
        },
        {
          "name": "Chestplate",
          "kind": "property",
          "signature": "public ItemStack Chestplate { get; set; }",
          "returns": {
            "type": "ItemStack"
          },
          "summary": "The chestplate.",
          "documented": true,
          "url": "/reference/api/inventories/playerinventory/#chestplate"
        },
        {
          "name": "Cursor",
          "kind": "property",
          "signature": "public ItemStack Cursor { get; set; }",
          "returns": {
            "type": "ItemStack"
          },
          "summary": "The stack the player carries on the cursor while a container or his inventory screen is open. Setting it resyncs the client.",
          "documented": true,
          "url": "/reference/api/inventories/playerinventory/#cursor"
        },
        {
          "name": "Helmet",
          "kind": "property",
          "signature": "public ItemStack Helmet { get; set; }",
          "returns": {
            "type": "ItemStack"
          },
          "summary": "The helmet.",
          "documented": true,
          "url": "/reference/api/inventories/playerinventory/#helmet"
        },
        {
          "name": "Leggings",
          "kind": "property",
          "signature": "public ItemStack Leggings { get; set; }",
          "returns": {
            "type": "ItemStack"
          },
          "summary": "The leggings.",
          "documented": true,
          "url": "/reference/api/inventories/playerinventory/#leggings"
        },
        {
          "name": "MainHand",
          "kind": "property",
          "signature": "public ItemStack MainHand { get; set; }",
          "returns": {
            "type": "ItemStack"
          },
          "summary": "The stack in the main hand (the selected hotbar slot).",
          "documented": true,
          "url": "/reference/api/inventories/playerinventory/#mainhand"
        },
        {
          "name": "OffHand",
          "kind": "property",
          "signature": "public ItemStack OffHand { get; set; }",
          "returns": {
            "type": "ItemStack"
          },
          "summary": "The stack in the off hand.",
          "documented": true,
          "url": "/reference/api/inventories/playerinventory/#offhand"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player.",
          "documented": true,
          "url": "/reference/api/inventories/playerinventory/#player"
        },
        {
          "name": "SelectedSlot",
          "kind": "property",
          "signature": "public int SelectedSlot { get; set; }",
          "returns": {
            "type": "int"
          },
          "summary": "The selected hotbar slot (0-8); setting it tells the client.",
          "documented": true,
          "url": "/reference/api/inventories/playerinventory/#selectedslot"
        },
        {
          "name": "Size",
          "kind": "property",
          "signature": "public override int Size { get; }",
          "returns": {
            "type": "int"
          },
          "documented": false,
          "url": "/reference/api/inventories/playerinventory/#size"
        },
        {
          "name": "Give",
          "kind": "method",
          "signature": "public int Give(ItemStack stack)",
          "parameters": [
            {
              "name": "stack",
              "type": "ItemStack",
              "summary": "The stack (any size: it is split)."
            }
          ],
          "returns": {
            "type": "int",
            "summary": "How many items were dropped because they did not fit."
          },
          "summary": "Gives a stack to the player: what does not fit into the inventory is dropped at his feet (like picking up with a full inventory).",
          "documented": true,
          "url": "/reference/api/inventories/playerinventory/#give"
        },
        {
          "name": "Hotbar",
          "kind": "method",
          "signature": "public ItemStack Hotbar(int index)",
          "parameters": [
            {
              "name": "index",
              "type": "int",
              "summary": "0 to 8."
            }
          ],
          "returns": {
            "type": "ItemStack",
            "summary": "The stack."
          },
          "summary": "The stack in a hotbar slot.",
          "documented": true,
          "url": "/reference/api/inventories/playerinventory/#hotbar"
        },
        {
          "name": "Of",
          "kind": "method",
          "signature": "public static PlayerInventory Of(Player player)",
          "static": true,
          "parameters": [
            {
              "name": "player",
              "type": "Player",
              "summary": "The player."
            }
          ],
          "returns": {
            "type": "PlayerInventory",
            "summary": "The inventory."
          },
          "summary": "The inventory of a player.",
          "documented": true,
          "url": "/reference/api/inventories/playerinventory/#of"
        }
      ]
    },
    {
      "name": "InventoryKind",
      "fullName": "Mc.Scripting.InventoryKind",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "inventories",
      "categoryLabel": "Inventories and menus",
      "signature": "public enum InventoryKind : byte",
      "summary": "The kind of container a player has open.",
      "url": "/reference/api/inventories/inventorykind/",
      "members": [
        {
          "name": "Chest",
          "kind": "enumMember",
          "signature": "Chest = 0",
          "value": "0",
          "summary": "Chest / ender chest / generic rows menu.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#chest"
        },
        {
          "name": "Dispenser",
          "kind": "enumMember",
          "signature": "Dispenser = 1",
          "value": "1",
          "summary": "Dispenser or dropper (3x3).",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#dispenser"
        },
        {
          "name": "Furnace",
          "kind": "enumMember",
          "signature": "Furnace = 2",
          "value": "2",
          "summary": "Furnace.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#furnace"
        },
        {
          "name": "BlastFurnace",
          "kind": "enumMember",
          "signature": "BlastFurnace = 3",
          "value": "3",
          "summary": "Blast furnace.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#blastfurnace"
        },
        {
          "name": "Smoker",
          "kind": "enumMember",
          "signature": "Smoker = 4",
          "value": "4",
          "summary": "Smoker.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#smoker"
        },
        {
          "name": "Workbench",
          "kind": "enumMember",
          "signature": "Workbench = 5",
          "value": "5",
          "summary": "Crafting table.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#workbench"
        },
        {
          "name": "Enchanting",
          "kind": "enumMember",
          "signature": "Enchanting = 6",
          "value": "6",
          "summary": "Enchanting table.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#enchanting"
        },
        {
          "name": "Brewing",
          "kind": "enumMember",
          "signature": "Brewing = 7",
          "value": "7",
          "summary": "Brewing stand.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#brewing"
        },
        {
          "name": "Hopper",
          "kind": "enumMember",
          "signature": "Hopper = 8",
          "value": "8",
          "summary": "Hopper.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#hopper"
        },
        {
          "name": "Anvil",
          "kind": "enumMember",
          "signature": "Anvil = 9",
          "value": "9",
          "summary": "Anvil.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#anvil"
        },
        {
          "name": "Grindstone",
          "kind": "enumMember",
          "signature": "Grindstone = 10",
          "value": "10",
          "summary": "Grindstone.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#grindstone"
        },
        {
          "name": "Stonecutter",
          "kind": "enumMember",
          "signature": "Stonecutter = 11",
          "value": "11",
          "summary": "Stonecutter.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#stonecutter"
        },
        {
          "name": "Smithing",
          "kind": "enumMember",
          "signature": "Smithing = 12",
          "value": "12",
          "summary": "Smithing table.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#smithing"
        },
        {
          "name": "Loom",
          "kind": "enumMember",
          "signature": "Loom = 13",
          "value": "13",
          "summary": "Loom.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#loom"
        },
        {
          "name": "Cartography",
          "kind": "enumMember",
          "signature": "Cartography = 14",
          "value": "14",
          "summary": "Cartography table.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#cartography"
        },
        {
          "name": "Beacon",
          "kind": "enumMember",
          "signature": "Beacon = 15",
          "value": "15",
          "summary": "Beacon.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#beacon"
        },
        {
          "name": "ShulkerBox",
          "kind": "enumMember",
          "signature": "ShulkerBox = 16",
          "value": "16",
          "summary": "Shulker box.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#shulkerbox"
        },
        {
          "name": "Barrel",
          "kind": "enumMember",
          "signature": "Barrel = 17",
          "value": "17",
          "summary": "Barrel.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#barrel"
        },
        {
          "name": "Lectern",
          "kind": "enumMember",
          "signature": "Lectern = 18",
          "value": "18",
          "summary": "Lectern.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#lectern"
        },
        {
          "name": "Merchant",
          "kind": "enumMember",
          "signature": "Merchant = 19",
          "value": "19",
          "summary": "Villager / wandering trader trades.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#merchant"
        },
        {
          "name": "PlayerInventory",
          "kind": "enumMember",
          "signature": "PlayerInventory = 20",
          "value": "20",
          "summary": "The player's own inventory.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#playerinventory"
        },
        {
          "name": "Custom",
          "kind": "enumMember",
          "signature": "Custom = 21",
          "value": "21",
          "summary": "A plugin-created menu.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#custom"
        },
        {
          "name": "Unknown",
          "kind": "enumMember",
          "signature": "Unknown = 22",
          "value": "22",
          "summary": "Anything else.",
          "documented": true,
          "url": "/reference/api/inventories/inventorykind/#unknown"
        }
      ]
    },
    {
      "name": "Location",
      "fullName": "Mc.Scripting.Location",
      "namespace": "Mc.Scripting",
      "kind": "struct",
      "category": "primitives",
      "categoryLabel": "Primitives",
      "signature": "public readonly struct Location : IEquatable<Location>",
      "interfaces": [
        "IEquatable<Location>"
      ],
      "summary": "A position with a rotation in a world.",
      "url": "/reference/api/primitives/location/",
      "members": [
        {
          "name": "Location",
          "kind": "ctor",
          "signature": "public Location(World World, Vec3d Position, float Yaw = 0f, float Pitch = 0f)",
          "parameters": [
            {
              "name": "World",
              "type": "World",
              "summary": "The dimension."
            },
            {
              "name": "Position",
              "type": "Vec3d",
              "summary": "Position in blocks."
            },
            {
              "name": "Yaw",
              "type": "float",
              "default": "0f",
              "summary": "Yaw in degrees (0 = south, 90 = west)."
            },
            {
              "name": "Pitch",
              "type": "float",
              "default": "0f",
              "summary": "Pitch in degrees (-90 = up, 90 = down)."
            }
          ],
          "summary": "A position with a rotation in a world.",
          "documented": true,
          "url": "/reference/api/primitives/location/#constructor"
        },
        {
          "name": "Location",
          "kind": "ctor",
          "signature": "public Location(World world, double x, double y, double z, float yaw = 0f, float pitch = 0f)",
          "parameters": [
            {
              "name": "world",
              "type": "World"
            },
            {
              "name": "x",
              "type": "double"
            },
            {
              "name": "y",
              "type": "double"
            },
            {
              "name": "z",
              "type": "double"
            },
            {
              "name": "yaw",
              "type": "float",
              "default": "0f"
            },
            {
              "name": "pitch",
              "type": "float",
              "default": "0f"
            }
          ],
          "summary": "Creates a location from coordinates.",
          "documented": true,
          "url": "/reference/api/primitives/location/#constructor-1"
        },
        {
          "name": "BlockPos",
          "kind": "property",
          "signature": "public BlockPos BlockPos { get; }",
          "returns": {
            "type": "BlockPos"
          },
          "summary": "The block containing the position.",
          "documented": true,
          "url": "/reference/api/primitives/location/#blockpos"
        },
        {
          "name": "Pitch",
          "kind": "property",
          "signature": "public float Pitch { get; init; }",
          "returns": {
            "type": "float"
          },
          "summary": "Pitch in degrees (-90 = up, 90 = down).",
          "documented": true,
          "url": "/reference/api/primitives/location/#pitch"
        },
        {
          "name": "Position",
          "kind": "property",
          "signature": "public Vec3d Position { get; init; }",
          "returns": {
            "type": "Vec3d"
          },
          "summary": "Position in blocks.",
          "documented": true,
          "url": "/reference/api/primitives/location/#position"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; init; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/primitives/location/#world"
        },
        {
          "name": "X",
          "kind": "property",
          "signature": "public double X { get; }",
          "returns": {
            "type": "double"
          },
          "summary": "X coordinate.",
          "documented": true,
          "url": "/reference/api/primitives/location/#x"
        },
        {
          "name": "Y",
          "kind": "property",
          "signature": "public double Y { get; }",
          "returns": {
            "type": "double"
          },
          "summary": "Y coordinate.",
          "documented": true,
          "url": "/reference/api/primitives/location/#y"
        },
        {
          "name": "Yaw",
          "kind": "property",
          "signature": "public float Yaw { get; init; }",
          "returns": {
            "type": "float"
          },
          "summary": "Yaw in degrees (0 = south, 90 = west).",
          "documented": true,
          "url": "/reference/api/primitives/location/#yaw"
        },
        {
          "name": "Z",
          "kind": "property",
          "signature": "public double Z { get; }",
          "returns": {
            "type": "double"
          },
          "summary": "Z coordinate.",
          "documented": true,
          "url": "/reference/api/primitives/location/#z"
        }
      ]
    },
    {
      "name": "Log",
      "fullName": "Mc.Scripting.Log",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "server",
      "categoryLabel": "Server, HTTP and logging",
      "signature": "public static class Log",
      "summary": "Global logger (prefix \"[scripting]\"). Plugins should prefer their own `Logger`.",
      "url": "/reference/api/server/log/",
      "members": [
        {
          "name": "Error",
          "kind": "method",
          "signature": "public static void Error(string message)",
          "static": true,
          "parameters": [
            {
              "name": "message",
              "type": "string"
            }
          ],
          "summary": "Writes an error.",
          "documented": true,
          "url": "/reference/api/server/log/#error"
        },
        {
          "name": "Error",
          "kind": "method",
          "signature": "public static void Error(string message, Exception e)",
          "static": true,
          "parameters": [
            {
              "name": "message",
              "type": "string"
            },
            {
              "name": "e",
              "type": "Exception"
            }
          ],
          "summary": "Writes an error with the exception.",
          "documented": true,
          "url": "/reference/api/server/log/#error-1"
        },
        {
          "name": "Info",
          "kind": "method",
          "signature": "public static void Info(string message)",
          "static": true,
          "parameters": [
            {
              "name": "message",
              "type": "string"
            }
          ],
          "summary": "Writes an info message with the \"[scripting]\" prefix.",
          "documented": true,
          "url": "/reference/api/server/log/#info"
        },
        {
          "name": "Warn",
          "kind": "method",
          "signature": "public static void Warn(string message)",
          "static": true,
          "parameters": [
            {
              "name": "message",
              "type": "string"
            }
          ],
          "summary": "Writes a warning.",
          "documented": true,
          "url": "/reference/api/server/log/#warn"
        }
      ]
    },
    {
      "name": "LogLevel",
      "fullName": "Mc.Scripting.LogLevel",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "server",
      "categoryLabel": "Server, HTTP and logging",
      "signature": "public enum LogLevel : int",
      "summary": "Log severity.",
      "url": "/reference/api/server/loglevel/",
      "members": [
        {
          "name": "Trace",
          "kind": "enumMember",
          "signature": "Trace = 0",
          "value": "0",
          "summary": "Very detailed diagnostics.",
          "documented": true,
          "url": "/reference/api/server/loglevel/#trace"
        },
        {
          "name": "Debug",
          "kind": "enumMember",
          "signature": "Debug = 1",
          "value": "1",
          "summary": "Debug output.",
          "documented": true,
          "url": "/reference/api/server/loglevel/#debug"
        },
        {
          "name": "Info",
          "kind": "enumMember",
          "signature": "Info = 2",
          "value": "2",
          "summary": "Normal operation.",
          "documented": true,
          "url": "/reference/api/server/loglevel/#info"
        },
        {
          "name": "Warn",
          "kind": "enumMember",
          "signature": "Warn = 3",
          "value": "3",
          "summary": "Something unexpected but harmless.",
          "documented": true,
          "url": "/reference/api/server/loglevel/#warn"
        },
        {
          "name": "Error",
          "kind": "enumMember",
          "signature": "Error = 4",
          "value": "4",
          "summary": "An error.",
          "documented": true,
          "url": "/reference/api/server/loglevel/#error"
        }
      ]
    },
    {
      "name": "Logger",
      "fullName": "Mc.Scripting.Logger",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "server",
      "categoryLabel": "Server, HTTP and logging",
      "signature": "public sealed class Logger",
      "summary": "Writes to the server log (native logger), prefixed with the plugin name.",
      "url": "/reference/api/server/logger/",
      "members": [
        {
          "name": "Logger",
          "kind": "ctor",
          "signature": "public Logger(string name)",
          "parameters": [
            {
              "name": "name",
              "type": "string"
            }
          ],
          "summary": "Creates a logger that prefixes `[name]`.",
          "documented": true,
          "url": "/reference/api/server/logger/#constructor"
        },
        {
          "name": "Debug",
          "kind": "method",
          "signature": "public void Debug(string message)",
          "parameters": [
            {
              "name": "message",
              "type": "string"
            }
          ],
          "summary": "Writes a debug message.",
          "documented": true,
          "url": "/reference/api/server/logger/#debug"
        },
        {
          "name": "Error",
          "kind": "method",
          "signature": "public void Error(string message)",
          "parameters": [
            {
              "name": "message",
              "type": "string"
            }
          ],
          "summary": "Writes an error.",
          "documented": true,
          "url": "/reference/api/server/logger/#error"
        },
        {
          "name": "Error",
          "kind": "method",
          "signature": "public void Error(string message, Exception exception)",
          "parameters": [
            {
              "name": "message",
              "type": "string"
            },
            {
              "name": "exception",
              "type": "Exception"
            }
          ],
          "summary": "Writes an error with the exception and its stack trace.",
          "documented": true,
          "url": "/reference/api/server/logger/#error-1"
        },
        {
          "name": "Info",
          "kind": "method",
          "signature": "public void Info(string message)",
          "parameters": [
            {
              "name": "message",
              "type": "string"
            }
          ],
          "summary": "Writes an info message.",
          "documented": true,
          "url": "/reference/api/server/logger/#info"
        },
        {
          "name": "Trace",
          "kind": "method",
          "signature": "public void Trace(string message)",
          "parameters": [
            {
              "name": "message",
              "type": "string"
            }
          ],
          "summary": "Writes a trace message.",
          "documented": true,
          "url": "/reference/api/server/logger/#trace"
        },
        {
          "name": "Warn",
          "kind": "method",
          "signature": "public void Warn(string message)",
          "parameters": [
            {
              "name": "message",
              "type": "string"
            }
          ],
          "summary": "Writes a warning.",
          "documented": true,
          "url": "/reference/api/server/logger/#warn"
        },
        {
          "name": "Write",
          "kind": "method",
          "signature": "public void Write(LogLevel level, string message)",
          "parameters": [
            {
              "name": "level",
              "type": "LogLevel"
            },
            {
              "name": "message",
              "type": "string"
            }
          ],
          "summary": "Writes a message at `level`.",
          "documented": true,
          "url": "/reference/api/server/logger/#write"
        }
      ]
    },
    {
      "name": "McPermissionAttribute",
      "fullName": "Mc.Scripting.McPermissionAttribute",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "permissions",
      "categoryLabel": "Permissions",
      "signature": "public sealed class McPermissionAttribute : Attribute",
      "baseType": "Attribute",
      "summary": "Declares a permission node of a source plugin (the `permissions` array of `plugin.json`): `[assembly: McPermission(\"homes.use\", Default = \"true\", Description = \"Use /home\")]`. Like `McPluginAttribute` it is read from the syntax before compiling, so the arguments must be string literals.",
      "url": "/reference/api/permissions/mcpermissionattribute/",
      "members": [
        {
          "name": "McPermissionAttribute",
          "kind": "ctor",
          "signature": "public McPermissionAttribute(string node)",
          "parameters": [
            {
              "name": "node",
              "type": "string"
            }
          ],
          "summary": "Declares a permission node of a source plugin (the `permissions` array of `plugin.json`): `[assembly: McPermission(\"homes.use\", Default = \"true\", Description = \"Use /home\")]`. Like `McPluginAttribute` it is read from the syntax before compiling, so the arguments must be string literals.",
          "documented": true,
          "url": "/reference/api/permissions/mcpermissionattribute/#constructor"
        },
        {
          "name": "Default",
          "kind": "property",
          "signature": "public string? Default { get; init; }",
          "returns": {
            "type": "string?"
          },
          "summary": "Who has it by default: `true`, `false`, `op`, `op:N` or `not_op` (default `op`).",
          "documented": true,
          "url": "/reference/api/permissions/mcpermissionattribute/#default"
        },
        {
          "name": "Description",
          "kind": "property",
          "signature": "public string? Description { get; init; }",
          "returns": {
            "type": "string?"
          },
          "summary": "What the permission allows.",
          "documented": true,
          "url": "/reference/api/permissions/mcpermissionattribute/#description"
        },
        {
          "name": "Node",
          "kind": "property",
          "signature": "public string Node { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The permission node.",
          "documented": true,
          "url": "/reference/api/permissions/mcpermissionattribute/#node"
        }
      ]
    },
    {
      "name": "McPluginAttribute",
      "fullName": "Mc.Scripting.McPluginAttribute",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "plugins",
      "categoryLabel": "Plugins and lifecycle",
      "signature": "public sealed class McPluginAttribute : Attribute",
      "baseType": "Attribute",
      "summary": "The manifest of a **source plugin** (a `.cs` file or folder the server compiles at startup), written as an assembly attribute at the top of one of its files: `[assembly: McPlugin(\"homes\", version: \"1.2.0\", depends: [\"economy >=1.0\"])]`. It carries the same information as `plugin.json` (a `plugin.json` next to the sources takes precedence). The server reads it from the syntax of the file **before** compiling, to compute the load order, so every argument must be a literal: string literals, `null`, and arrays or collection expressions of string literals (no constants, no `nameof`, no interpolation).",
      "remarks": "The attribute is ignored on a compiled plugin (it has a `plugin.json` or `PluginInfoAttribute`).",
      "url": "/reference/api/plugins/mcpluginattribute/",
      "members": [
        {
          "name": "McPluginAttribute",
          "kind": "ctor",
          "signature": "public McPluginAttribute(string id, string? version = null, string? name = null, string[]? depends = null, string[]? softDepends = null, string[]? loadBefore = null, string? description = null, string[]? authors = null, string? website = null, string? api = null, string? main = null)",
          "parameters": [
            {
              "name": "id",
              "type": "string",
              "summary": "The unique id: 1-32 characters from `a-z 0-9 - _`. It is also the name of the data folder `plugins/<id>/`."
            },
            {
              "name": "version",
              "type": "string?",
              "default": "null",
              "summary": "The plugin version (default `0.0.0`)."
            },
            {
              "name": "name",
              "type": "string?",
              "default": "null",
              "summary": "The display name, used as the log prefix (default: the id)."
            },
            {
              "name": "depends",
              "type": "string[]?",
              "default": "null",
              "summary": "Plugins that must be loaded first, optionally with a version constraint (`\"economy >=1.2\"`). Their types become available to the sources."
            },
            {
              "name": "softDepends",
              "type": "string[]?",
              "default": "null",
              "summary": "Plugins loaded first when present (their types are available to the sources, but the plugin must cope with their absence)."
            },
            {
              "name": "loadBefore",
              "type": "string[]?",
              "default": "null",
              "summary": "Plugins that should be loaded after this one."
            },
            {
              "name": "description",
              "type": "string?",
              "default": "null",
              "summary": "A one-line description."
            },
            {
              "name": "authors",
              "type": "string[]?",
              "default": "null",
              "summary": "The author names."
            },
            {
              "name": "website",
              "type": "string?",
              "default": "null",
              "summary": "A website or repository url."
            },
            {
              "name": "api",
              "type": "string?",
              "default": "null",
              "summary": "The plugin API version the plugin was written for (`\"1.0\"`)."
            },
            {
              "name": "main",
              "type": "string?",
              "default": "null",
              "summary": "The full name of the plugin class when the sources contain several candidates."
            }
          ],
          "summary": "Declares the plugin.",
          "documented": true,
          "url": "/reference/api/plugins/mcpluginattribute/#constructor"
        },
        {
          "name": "Api",
          "kind": "property",
          "signature": "public string? Api { get; }",
          "returns": {
            "type": "string?"
          },
          "summary": "The API version.",
          "documented": true,
          "url": "/reference/api/plugins/mcpluginattribute/#api"
        },
        {
          "name": "Authors",
          "kind": "property",
          "signature": "public string[]? Authors { get; }",
          "returns": {
            "type": "string[]?"
          },
          "summary": "The authors.",
          "documented": true,
          "url": "/reference/api/plugins/mcpluginattribute/#authors"
        },
        {
          "name": "Depends",
          "kind": "property",
          "signature": "public string[]? Depends { get; }",
          "returns": {
            "type": "string[]?"
          },
          "summary": "The hard dependencies.",
          "documented": true,
          "url": "/reference/api/plugins/mcpluginattribute/#depends"
        },
        {
          "name": "Description",
          "kind": "property",
          "signature": "public string? Description { get; }",
          "returns": {
            "type": "string?"
          },
          "summary": "The description.",
          "documented": true,
          "url": "/reference/api/plugins/mcpluginattribute/#description"
        },
        {
          "name": "Id",
          "kind": "property",
          "signature": "public string Id { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The plugin id.",
          "documented": true,
          "url": "/reference/api/plugins/mcpluginattribute/#id"
        },
        {
          "name": "LoadBefore",
          "kind": "property",
          "signature": "public string[]? LoadBefore { get; }",
          "returns": {
            "type": "string[]?"
          },
          "summary": "The plugins that load after this one.",
          "documented": true,
          "url": "/reference/api/plugins/mcpluginattribute/#loadbefore"
        },
        {
          "name": "Main",
          "kind": "property",
          "signature": "public string? Main { get; }",
          "returns": {
            "type": "string?"
          },
          "summary": "The plugin class.",
          "documented": true,
          "url": "/reference/api/plugins/mcpluginattribute/#main"
        },
        {
          "name": "Name",
          "kind": "property",
          "signature": "public string? Name { get; }",
          "returns": {
            "type": "string?"
          },
          "summary": "The display name.",
          "documented": true,
          "url": "/reference/api/plugins/mcpluginattribute/#name"
        },
        {
          "name": "SoftDepends",
          "kind": "property",
          "signature": "public string[]? SoftDepends { get; }",
          "returns": {
            "type": "string[]?"
          },
          "summary": "The soft dependencies.",
          "documented": true,
          "url": "/reference/api/plugins/mcpluginattribute/#softdepends"
        },
        {
          "name": "Version",
          "kind": "property",
          "signature": "public string? Version { get; }",
          "returns": {
            "type": "string?"
          },
          "summary": "The plugin version.",
          "documented": true,
          "url": "/reference/api/plugins/mcpluginattribute/#version"
        },
        {
          "name": "Website",
          "kind": "property",
          "signature": "public string? Website { get; }",
          "returns": {
            "type": "string?"
          },
          "summary": "The website.",
          "documented": true,
          "url": "/reference/api/plugins/mcpluginattribute/#website"
        }
      ]
    },
    {
      "name": "MenuCloseReason",
      "fullName": "Mc.Scripting.MenuCloseReason",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "inventories",
      "categoryLabel": "Inventories and menus",
      "signature": "public enum MenuCloseReason : byte",
      "summary": "Why a plugin menu was closed for a player.",
      "url": "/reference/api/inventories/menuclosereason/",
      "members": [
        {
          "name": "Player",
          "kind": "enumMember",
          "signature": "Player = 0",
          "value": "0",
          "summary": "The player closed it (Escape, the inventory key) or the client sent a close.",
          "documented": true,
          "url": "/reference/api/inventories/menuclosereason/#player"
        },
        {
          "name": "Plugin",
          "kind": "enumMember",
          "signature": "Plugin = 1",
          "value": "1",
          "summary": "A plugin called Menu.Close.",
          "documented": true,
          "url": "/reference/api/inventories/menuclosereason/#plugin"
        },
        {
          "name": "Unload",
          "kind": "enumMember",
          "signature": "Unload = 2",
          "value": "2",
          "summary": "The plugin that owns the menu unloaded or reloaded.",
          "documented": true,
          "url": "/reference/api/inventories/menuclosereason/#unload"
        },
        {
          "name": "Quit",
          "kind": "enumMember",
          "signature": "Quit = 3",
          "value": "3",
          "summary": "The player left the server.",
          "documented": true,
          "url": "/reference/api/inventories/menuclosereason/#quit"
        },
        {
          "name": "Replaced",
          "kind": "enumMember",
          "signature": "Replaced = 4",
          "value": "4",
          "summary": "Another container was opened for the player.",
          "documented": true,
          "url": "/reference/api/inventories/menuclosereason/#replaced"
        },
        {
          "name": "Invalid",
          "kind": "enumMember",
          "signature": "Invalid = 5",
          "value": "5",
          "summary": "The server closed it (death, dimension change, the menu no longer valid).",
          "documented": true,
          "url": "/reference/api/inventories/menuclosereason/#invalid"
        }
      ]
    },
    {
      "name": "NametagCollision",
      "fullName": "Mc.Scripting.NametagCollision",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "display",
      "categoryLabel": "Scoreboards, boss bars, tab list",
      "signature": "public enum NametagCollision : int",
      "summary": "Who a player collides with (bumps into).",
      "url": "/reference/api/display/nametagcollision/",
      "members": [
        {
          "name": "Always",
          "kind": "enumMember",
          "signature": "Always = 0",
          "value": "0",
          "summary": "Collides with everybody.",
          "documented": true,
          "url": "/reference/api/display/nametagcollision/#always"
        },
        {
          "name": "Never",
          "kind": "enumMember",
          "signature": "Never = 1",
          "value": "1",
          "summary": "Collides with nobody.",
          "documented": true,
          "url": "/reference/api/display/nametagcollision/#never"
        },
        {
          "name": "PushOtherTeams",
          "kind": "enumMember",
          "signature": "PushOtherTeams = 2",
          "value": "2",
          "summary": "Pushes the players of other teams only.",
          "documented": true,
          "url": "/reference/api/display/nametagcollision/#pushotherteams"
        },
        {
          "name": "PushOwnTeam",
          "kind": "enumMember",
          "signature": "PushOwnTeam = 3",
          "value": "3",
          "summary": "Pushes the players of its own team only.",
          "documented": true,
          "url": "/reference/api/display/nametagcollision/#pushownteam"
        }
      ]
    },
    {
      "name": "NametagStyle",
      "fullName": "Mc.Scripting.NametagStyle",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "display",
      "categoryLabel": "Scoreboards, boss bars, tab list",
      "signature": "public sealed class NametagStyle",
      "summary": "The look of a nametag for one viewer (see `Nametags.Set`).",
      "url": "/reference/api/display/nametagstyle/",
      "members": [
        {
          "name": "NametagStyle",
          "kind": "ctor",
          "signature": "public NametagStyle()",
          "documented": false,
          "url": "/reference/api/display/nametagstyle/#constructor"
        },
        {
          "name": "Collision",
          "kind": "property",
          "signature": "public NametagCollision Collision { get; init; }",
          "returns": {
            "type": "NametagCollision"
          },
          "summary": "Who the player collides with.",
          "documented": true,
          "url": "/reference/api/display/nametagstyle/#collision"
        },
        {
          "name": "Colour",
          "kind": "property",
          "signature": "public int? Colour { get; init; }",
          "returns": {
            "type": "int?"
          },
          "summary": "The team colour of the name, 0 to 15 (the colour codes), or null for none.",
          "documented": true,
          "url": "/reference/api/display/nametagstyle/#colour"
        },
        {
          "name": "FriendlyFire",
          "kind": "property",
          "signature": "public bool FriendlyFire { get; init; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the players of the team hit each other.",
          "documented": true,
          "url": "/reference/api/display/nametagstyle/#friendlyfire"
        },
        {
          "name": "Prefix",
          "kind": "property",
          "signature": "public Component? Prefix { get; init; }",
          "returns": {
            "type": "Component?"
          },
          "summary": "The text before the name, or null for none.",
          "documented": true,
          "url": "/reference/api/display/nametagstyle/#prefix"
        },
        {
          "name": "SeeInvisibles",
          "kind": "property",
          "signature": "public bool SeeInvisibles { get; init; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the players of the team see the invisible players of the team.",
          "documented": true,
          "url": "/reference/api/display/nametagstyle/#seeinvisibles"
        },
        {
          "name": "Suffix",
          "kind": "property",
          "signature": "public Component? Suffix { get; init; }",
          "returns": {
            "type": "Component?"
          },
          "summary": "The text after the name, or null for none. The prefix and the suffix together are at most 8000 bytes.",
          "documented": true,
          "url": "/reference/api/display/nametagstyle/#suffix"
        },
        {
          "name": "Visibility",
          "kind": "property",
          "signature": "public NametagVisibility Visibility { get; init; }",
          "returns": {
            "type": "NametagVisibility"
          },
          "summary": "Who sees the nametag.",
          "documented": true,
          "url": "/reference/api/display/nametagstyle/#visibility"
        }
      ]
    },
    {
      "name": "NametagVisibility",
      "fullName": "Mc.Scripting.NametagVisibility",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "display",
      "categoryLabel": "Scoreboards, boss bars, tab list",
      "signature": "public enum NametagVisibility : int",
      "summary": "Who sees a nametag.",
      "url": "/reference/api/display/nametagvisibility/",
      "members": [
        {
          "name": "Always",
          "kind": "enumMember",
          "signature": "Always = 0",
          "value": "0",
          "summary": "Everybody sees it.",
          "documented": true,
          "url": "/reference/api/display/nametagvisibility/#always"
        },
        {
          "name": "Never",
          "kind": "enumMember",
          "signature": "Never = 1",
          "value": "1",
          "summary": "Nobody sees it.",
          "documented": true,
          "url": "/reference/api/display/nametagvisibility/#never"
        },
        {
          "name": "HideForOtherTeams",
          "kind": "enumMember",
          "signature": "HideForOtherTeams = 2",
          "value": "2",
          "summary": "Only the players of the same team see it.",
          "documented": true,
          "url": "/reference/api/display/nametagvisibility/#hideforotherteams"
        },
        {
          "name": "HideForOwnTeam",
          "kind": "enumMember",
          "signature": "HideForOwnTeam = 3",
          "value": "3",
          "summary": "Only the players of other teams see it.",
          "documented": true,
          "url": "/reference/api/display/nametagvisibility/#hideforownteam"
        }
      ]
    },
    {
      "name": "Nametags",
      "fullName": "Mc.Scripting.Nametags",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "display",
      "categoryLabel": "Scoreboards, boss bars, tab list",
      "signature": "public sealed class Nametags",
      "summary": "Nametag styles per viewer: a prefix and a suffix around a player's name, a team colour, and the rules for seeing and bumping the team's players. Each style is a team of the client; the players with the same style share it. Reach it as `plugin.Nametags`. Call from the tick thread. What a plugin sets is removed when the plugin unloads.",
      "url": "/reference/api/display/nametags/",
      "members": [
        {
          "name": "Clear",
          "kind": "method",
          "signature": "public void Clear(Player viewer, Player target)",
          "parameters": [
            {
              "name": "viewer",
              "type": "Player",
              "summary": "The player who sees it."
            },
            {
              "name": "target",
              "type": "Player",
              "summary": "The player whose nametag changes."
            }
          ],
          "summary": "Puts one player's nametag back to the server's own for one viewer.",
          "documented": true,
          "url": "/reference/api/display/nametags/#clear"
        },
        {
          "name": "Set",
          "kind": "method",
          "signature": "public void Set(Player viewer, Player target, NametagStyle style)",
          "parameters": [
            {
              "name": "viewer",
              "type": "Player",
              "summary": "The player who sees the style."
            },
            {
              "name": "target",
              "type": "Player",
              "summary": "The player whose nametag changes."
            },
            {
              "name": "style",
              "type": "NametagStyle",
              "summary": "The style."
            }
          ],
          "summary": "Gives one player a nametag style as one viewer sees him. A player has one style per viewer; a new style replaces the old one.",
          "documented": true,
          "url": "/reference/api/display/nametags/#set"
        }
      ]
    },
    {
      "name": "NativeBytes",
      "fullName": "Mc.Scripting.NativeBytes",
      "namespace": "Mc.Scripting",
      "kind": "struct",
      "category": "primitives",
      "categoryLabel": "Primitives",
      "signature": "public readonly ref struct NativeBytes",
      "summary": "Borrowed byte buffer (McBytes). Only valid during the dispatch that provided it.",
      "url": "/reference/api/primitives/nativebytes/",
      "members": [
        {
          "name": "NativeBytes",
          "kind": "ctor",
          "signature": "public NativeBytes(byte* data, long size)",
          "parameters": [
            {
              "name": "data",
              "type": "byte*"
            },
            {
              "name": "size",
              "type": "long"
            }
          ],
          "summary": "Wraps native memory.",
          "documented": true,
          "url": "/reference/api/primitives/nativebytes/#constructor"
        },
        {
          "name": "Length",
          "kind": "property",
          "signature": "public int Length { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Length in bytes.",
          "documented": true,
          "url": "/reference/api/primitives/nativebytes/#length"
        },
        {
          "name": "Span",
          "kind": "property",
          "signature": "public ReadOnlySpan<byte> Span { get; }",
          "returns": {
            "type": "ReadOnlySpan<byte>"
          },
          "summary": "The bytes (borrowed).",
          "documented": true,
          "url": "/reference/api/primitives/nativebytes/#span"
        },
        {
          "name": "ToArray",
          "kind": "method",
          "signature": "public byte[] ToArray()",
          "returns": {
            "type": "byte[]"
          },
          "summary": "Copies the bytes.",
          "documented": true,
          "url": "/reference/api/primitives/nativebytes/#toarray"
        }
      ]
    },
    {
      "name": "NbtByte",
      "fullName": "Mc.Scripting.Nbt.NbtByte",
      "namespace": "Mc.Scripting.Nbt",
      "kind": "class",
      "category": "nbt",
      "categoryLabel": "NBT",
      "signature": "public sealed class NbtByte : NbtValueTag",
      "baseType": "NbtValueTag",
      "summary": "Signed 8 bit integer (also the game's boolean).",
      "url": "/reference/api/nbt/nbtbyte/",
      "members": [
        {
          "name": "NbtByte",
          "kind": "ctor",
          "signature": "public NbtByte(sbyte value)",
          "parameters": [
            {
              "name": "value",
              "type": "sbyte",
              "summary": "The value."
            }
          ],
          "summary": "Creates the tag.",
          "documented": true,
          "url": "/reference/api/nbt/nbtbyte/#constructor"
        },
        {
          "name": "Type",
          "kind": "property",
          "signature": "public override NbtType Type { get; }",
          "returns": {
            "type": "NbtType"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtbyte/#type"
        },
        {
          "name": "Value",
          "kind": "property",
          "signature": "public sbyte Value { get; set; }",
          "returns": {
            "type": "sbyte"
          },
          "summary": "The value.",
          "documented": true,
          "url": "/reference/api/nbt/nbtbyte/#value"
        },
        {
          "name": "Clone",
          "kind": "method",
          "signature": "public override NbtTag Clone()",
          "returns": {
            "type": "NbtTag"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtbyte/#clone"
        }
      ]
    },
    {
      "name": "NbtByteArray",
      "fullName": "Mc.Scripting.Nbt.NbtByteArray",
      "namespace": "Mc.Scripting.Nbt",
      "kind": "class",
      "category": "nbt",
      "categoryLabel": "NBT",
      "signature": "public sealed class NbtByteArray : NbtTag",
      "baseType": "NbtTag",
      "summary": "An array of bytes.",
      "url": "/reference/api/nbt/nbtbytearray/",
      "members": [
        {
          "name": "NbtByteArray",
          "kind": "ctor",
          "signature": "public NbtByteArray(sbyte[] value)",
          "parameters": [
            {
              "name": "value",
              "type": "sbyte[]",
              "summary": "The values."
            }
          ],
          "summary": "Creates the tag.",
          "documented": true,
          "url": "/reference/api/nbt/nbtbytearray/#constructor"
        },
        {
          "name": "Type",
          "kind": "property",
          "signature": "public override NbtType Type { get; }",
          "returns": {
            "type": "NbtType"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtbytearray/#type"
        },
        {
          "name": "Value",
          "kind": "property",
          "signature": "public sbyte[] Value { get; set; }",
          "returns": {
            "type": "sbyte[]"
          },
          "summary": "The values (not copied).",
          "documented": true,
          "url": "/reference/api/nbt/nbtbytearray/#value"
        },
        {
          "name": "Clone",
          "kind": "method",
          "signature": "public override NbtTag Clone()",
          "returns": {
            "type": "NbtTag"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtbytearray/#clone"
        }
      ]
    },
    {
      "name": "NbtCompound",
      "fullName": "Mc.Scripting.Nbt.NbtCompound",
      "namespace": "Mc.Scripting.Nbt",
      "kind": "class",
      "category": "nbt",
      "categoryLabel": "NBT",
      "signature": "public sealed class NbtCompound : NbtTag, IEnumerable, IEnumerable<KeyValuePair<string, NbtTag>>",
      "baseType": "NbtTag",
      "interfaces": [
        "IEnumerable",
        "IEnumerable<KeyValuePair<string, NbtTag>>"
      ],
      "summary": "A compound: named tags (keys are unique; the enumeration order is the insertion order).",
      "url": "/reference/api/nbt/nbtcompound/",
      "members": [
        {
          "name": "NbtCompound",
          "kind": "ctor",
          "signature": "public NbtCompound()",
          "documented": false,
          "url": "/reference/api/nbt/nbtcompound/#constructor"
        },
        {
          "name": "Count",
          "kind": "property",
          "signature": "public int Count { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Number of entries.",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#count"
        },
        {
          "name": "Keys",
          "kind": "property",
          "signature": "public IEnumerable<string> Keys { get; }",
          "returns": {
            "type": "IEnumerable<string>"
          },
          "summary": "The keys.",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#keys"
        },
        {
          "name": "Type",
          "kind": "property",
          "signature": "public override NbtType Type { get; }",
          "returns": {
            "type": "NbtType"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtcompound/#type"
        },
        {
          "name": "this[]",
          "kind": "indexer",
          "signature": "public NbtTag this[string key] { get; set; }",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            }
          ],
          "returns": {
            "type": "NbtTag"
          },
          "summary": "Gets or sets an entry.",
          "throws": [
            {
              "type": "System.Collections.Generic.KeyNotFoundException",
              "summary": "Reading a key that does not exist."
            }
          ],
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#this"
        },
        {
          "name": "Clear",
          "kind": "method",
          "signature": "public void Clear()",
          "summary": "Removes every entry.",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#clear"
        },
        {
          "name": "Clone",
          "kind": "method",
          "signature": "public override NbtTag Clone()",
          "returns": {
            "type": "NbtTag"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtcompound/#clone"
        },
        {
          "name": "Contains",
          "kind": "method",
          "signature": "public bool Contains(string key)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when present."
          },
          "summary": "Whether a key exists.",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#contains"
        },
        {
          "name": "Get",
          "kind": "method",
          "signature": "public T? Get<T>(string key) where T : NbtTag",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            }
          ],
          "returns": {
            "type": "T?",
            "summary": "The tag, or null when the key is missing or has another type."
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : NbtTag"
          ],
          "summary": "Gets an entry of a given type.",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#gett"
        },
        {
          "name": "GetBool",
          "kind": "method",
          "signature": "public bool GetBool(string key, bool fallback = false)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            },
            {
              "name": "fallback",
              "type": "bool",
              "default": "false",
              "summary": "What to return when the key is missing."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "The value."
          },
          "summary": "Reads a boolean (a non-zero numeric entry).",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#getbool"
        },
        {
          "name": "GetCompound",
          "kind": "method",
          "signature": "public NbtCompound? GetCompound(string key)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            }
          ],
          "returns": {
            "type": "NbtCompound?",
            "summary": "The compound, or null."
          },
          "summary": "Reads a compound entry.",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#getcompound"
        },
        {
          "name": "GetDouble",
          "kind": "method",
          "signature": "public double GetDouble(string key, double fallback = 0)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            },
            {
              "name": "fallback",
              "type": "double",
              "default": "0",
              "summary": "What to return when the key is missing or not numeric."
            }
          ],
          "returns": {
            "type": "double",
            "summary": "The value."
          },
          "summary": "Reads a numeric entry as a double.",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#getdouble"
        },
        {
          "name": "GetEnumerator",
          "kind": "method",
          "signature": "public IEnumerator<KeyValuePair<string, NbtTag>> GetEnumerator()",
          "returns": {
            "type": "IEnumerator<KeyValuePair<string, NbtTag>>"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtcompound/#getenumerator"
        },
        {
          "name": "GetInt",
          "kind": "method",
          "signature": "public int GetInt(string key, int fallback = 0)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            },
            {
              "name": "fallback",
              "type": "int",
              "default": "0",
              "summary": "What to return when the key is missing or not numeric."
            }
          ],
          "returns": {
            "type": "int",
            "summary": "The value."
          },
          "summary": "Reads a numeric entry as an int.",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#getint"
        },
        {
          "name": "GetList",
          "kind": "method",
          "signature": "public NbtList? GetList(string key)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            }
          ],
          "returns": {
            "type": "NbtList?",
            "summary": "The list, or null."
          },
          "summary": "Reads a list entry.",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#getlist"
        },
        {
          "name": "GetLong",
          "kind": "method",
          "signature": "public long GetLong(string key, long fallback = 0)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            },
            {
              "name": "fallback",
              "type": "long",
              "default": "0",
              "summary": "What to return when the key is missing or not numeric."
            }
          ],
          "returns": {
            "type": "long",
            "summary": "The value."
          },
          "summary": "Reads a numeric entry as a long (any integer or float type; floats are truncated).",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#getlong"
        },
        {
          "name": "GetString",
          "kind": "method",
          "signature": "public string GetString(string key, string fallback = \"\")",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            },
            {
              "name": "fallback",
              "type": "string",
              "default": "\"\"",
              "summary": "What to return when the key is missing or not a string."
            }
          ],
          "returns": {
            "type": "string",
            "summary": "The value."
          },
          "summary": "Reads a string entry.",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#getstring"
        },
        {
          "name": "Merge",
          "kind": "method",
          "signature": "public NbtCompound Merge(NbtCompound other)",
          "parameters": [
            {
              "name": "other",
              "type": "NbtCompound",
              "summary": "The compound to merge in."
            }
          ],
          "returns": {
            "type": "NbtCompound",
            "summary": "This compound."
          },
          "summary": "Deep-merges another compound into this one: nested compounds merge, everything else is copied (like `/data merge`).",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#merge"
        },
        {
          "name": "Put",
          "kind": "method",
          "signature": "public NbtCompound Put(string key, NbtTag tag)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            },
            {
              "name": "tag",
              "type": "NbtTag",
              "summary": "The tag."
            }
          ],
          "returns": {
            "type": "NbtCompound",
            "summary": "This compound, for chaining."
          },
          "summary": "Adds or replaces an entry.",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#put"
        },
        {
          "name": "PutBool",
          "kind": "method",
          "signature": "public NbtCompound PutBool(string key, bool value)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            },
            {
              "name": "value",
              "type": "bool",
              "summary": "The value."
            }
          ],
          "returns": {
            "type": "NbtCompound",
            "summary": "This compound."
          },
          "summary": "Sets a byte entry (the game's boolean).",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#putbool"
        },
        {
          "name": "PutByte",
          "kind": "method",
          "signature": "public NbtCompound PutByte(string key, sbyte value)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            },
            {
              "name": "value",
              "type": "sbyte",
              "summary": "The value."
            }
          ],
          "returns": {
            "type": "NbtCompound",
            "summary": "This compound."
          },
          "summary": "Sets a byte entry.",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#putbyte"
        },
        {
          "name": "PutDouble",
          "kind": "method",
          "signature": "public NbtCompound PutDouble(string key, double value)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            },
            {
              "name": "value",
              "type": "double",
              "summary": "The value."
            }
          ],
          "returns": {
            "type": "NbtCompound",
            "summary": "This compound."
          },
          "summary": "Sets a double entry.",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#putdouble"
        },
        {
          "name": "PutFloat",
          "kind": "method",
          "signature": "public NbtCompound PutFloat(string key, float value)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            },
            {
              "name": "value",
              "type": "float",
              "summary": "The value."
            }
          ],
          "returns": {
            "type": "NbtCompound",
            "summary": "This compound."
          },
          "summary": "Sets a float entry.",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#putfloat"
        },
        {
          "name": "PutInt",
          "kind": "method",
          "signature": "public NbtCompound PutInt(string key, int value)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            },
            {
              "name": "value",
              "type": "int",
              "summary": "The value."
            }
          ],
          "returns": {
            "type": "NbtCompound",
            "summary": "This compound."
          },
          "summary": "Sets an int entry.",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#putint"
        },
        {
          "name": "PutLong",
          "kind": "method",
          "signature": "public NbtCompound PutLong(string key, long value)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            },
            {
              "name": "value",
              "type": "long",
              "summary": "The value."
            }
          ],
          "returns": {
            "type": "NbtCompound",
            "summary": "This compound."
          },
          "summary": "Sets a long entry.",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#putlong"
        },
        {
          "name": "PutShort",
          "kind": "method",
          "signature": "public NbtCompound PutShort(string key, short value)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            },
            {
              "name": "value",
              "type": "short",
              "summary": "The value."
            }
          ],
          "returns": {
            "type": "NbtCompound",
            "summary": "This compound."
          },
          "summary": "Sets a short entry.",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#putshort"
        },
        {
          "name": "PutString",
          "kind": "method",
          "signature": "public NbtCompound PutString(string key, string value)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            },
            {
              "name": "value",
              "type": "string",
              "summary": "The value."
            }
          ],
          "returns": {
            "type": "NbtCompound",
            "summary": "This compound."
          },
          "summary": "Sets a string entry.",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#putstring"
        },
        {
          "name": "Remove",
          "kind": "method",
          "signature": "public bool Remove(string key)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when it existed."
          },
          "summary": "Removes an entry.",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#remove"
        },
        {
          "name": "TryGet",
          "kind": "method",
          "signature": "public bool TryGet(string key, out NbtTag tag)",
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key."
            },
            {
              "name": "tag",
              "type": "NbtTag",
              "modifier": "out",
              "summary": "The tag when present."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "Whether the key exists."
          },
          "summary": "Gets an entry.",
          "documented": true,
          "url": "/reference/api/nbt/nbtcompound/#tryget"
        }
      ]
    },
    {
      "name": "NbtDouble",
      "fullName": "Mc.Scripting.Nbt.NbtDouble",
      "namespace": "Mc.Scripting.Nbt",
      "kind": "class",
      "category": "nbt",
      "categoryLabel": "NBT",
      "signature": "public sealed class NbtDouble : NbtValueTag",
      "baseType": "NbtValueTag",
      "summary": "64 bit float.",
      "url": "/reference/api/nbt/nbtdouble/",
      "members": [
        {
          "name": "NbtDouble",
          "kind": "ctor",
          "signature": "public NbtDouble(double value)",
          "parameters": [
            {
              "name": "value",
              "type": "double",
              "summary": "The value."
            }
          ],
          "summary": "Creates the tag.",
          "documented": true,
          "url": "/reference/api/nbt/nbtdouble/#constructor"
        },
        {
          "name": "Type",
          "kind": "property",
          "signature": "public override NbtType Type { get; }",
          "returns": {
            "type": "NbtType"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtdouble/#type"
        },
        {
          "name": "Value",
          "kind": "property",
          "signature": "public double Value { get; set; }",
          "returns": {
            "type": "double"
          },
          "summary": "The value.",
          "documented": true,
          "url": "/reference/api/nbt/nbtdouble/#value"
        },
        {
          "name": "Clone",
          "kind": "method",
          "signature": "public override NbtTag Clone()",
          "returns": {
            "type": "NbtTag"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtdouble/#clone"
        }
      ]
    },
    {
      "name": "NbtFloat",
      "fullName": "Mc.Scripting.Nbt.NbtFloat",
      "namespace": "Mc.Scripting.Nbt",
      "kind": "class",
      "category": "nbt",
      "categoryLabel": "NBT",
      "signature": "public sealed class NbtFloat : NbtValueTag",
      "baseType": "NbtValueTag",
      "summary": "32 bit float.",
      "url": "/reference/api/nbt/nbtfloat/",
      "members": [
        {
          "name": "NbtFloat",
          "kind": "ctor",
          "signature": "public NbtFloat(float value)",
          "parameters": [
            {
              "name": "value",
              "type": "float",
              "summary": "The value."
            }
          ],
          "summary": "Creates the tag.",
          "documented": true,
          "url": "/reference/api/nbt/nbtfloat/#constructor"
        },
        {
          "name": "Type",
          "kind": "property",
          "signature": "public override NbtType Type { get; }",
          "returns": {
            "type": "NbtType"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtfloat/#type"
        },
        {
          "name": "Value",
          "kind": "property",
          "signature": "public float Value { get; set; }",
          "returns": {
            "type": "float"
          },
          "summary": "The value.",
          "documented": true,
          "url": "/reference/api/nbt/nbtfloat/#value"
        },
        {
          "name": "Clone",
          "kind": "method",
          "signature": "public override NbtTag Clone()",
          "returns": {
            "type": "NbtTag"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtfloat/#clone"
        }
      ]
    },
    {
      "name": "NbtInt",
      "fullName": "Mc.Scripting.Nbt.NbtInt",
      "namespace": "Mc.Scripting.Nbt",
      "kind": "class",
      "category": "nbt",
      "categoryLabel": "NBT",
      "signature": "public sealed class NbtInt : NbtValueTag",
      "baseType": "NbtValueTag",
      "summary": "Signed 32 bit integer.",
      "url": "/reference/api/nbt/nbtint/",
      "members": [
        {
          "name": "NbtInt",
          "kind": "ctor",
          "signature": "public NbtInt(int value)",
          "parameters": [
            {
              "name": "value",
              "type": "int",
              "summary": "The value."
            }
          ],
          "summary": "Creates the tag.",
          "documented": true,
          "url": "/reference/api/nbt/nbtint/#constructor"
        },
        {
          "name": "Type",
          "kind": "property",
          "signature": "public override NbtType Type { get; }",
          "returns": {
            "type": "NbtType"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtint/#type"
        },
        {
          "name": "Value",
          "kind": "property",
          "signature": "public int Value { get; set; }",
          "returns": {
            "type": "int"
          },
          "summary": "The value.",
          "documented": true,
          "url": "/reference/api/nbt/nbtint/#value"
        },
        {
          "name": "Clone",
          "kind": "method",
          "signature": "public override NbtTag Clone()",
          "returns": {
            "type": "NbtTag"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtint/#clone"
        }
      ]
    },
    {
      "name": "NbtIntArray",
      "fullName": "Mc.Scripting.Nbt.NbtIntArray",
      "namespace": "Mc.Scripting.Nbt",
      "kind": "class",
      "category": "nbt",
      "categoryLabel": "NBT",
      "signature": "public sealed class NbtIntArray : NbtTag",
      "baseType": "NbtTag",
      "summary": "An array of 32 bit integers.",
      "url": "/reference/api/nbt/nbtintarray/",
      "members": [
        {
          "name": "NbtIntArray",
          "kind": "ctor",
          "signature": "public NbtIntArray(int[] value)",
          "parameters": [
            {
              "name": "value",
              "type": "int[]",
              "summary": "The values."
            }
          ],
          "summary": "Creates the tag.",
          "documented": true,
          "url": "/reference/api/nbt/nbtintarray/#constructor"
        },
        {
          "name": "Type",
          "kind": "property",
          "signature": "public override NbtType Type { get; }",
          "returns": {
            "type": "NbtType"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtintarray/#type"
        },
        {
          "name": "Value",
          "kind": "property",
          "signature": "public int[] Value { get; set; }",
          "returns": {
            "type": "int[]"
          },
          "summary": "The values (not copied).",
          "documented": true,
          "url": "/reference/api/nbt/nbtintarray/#value"
        },
        {
          "name": "Clone",
          "kind": "method",
          "signature": "public override NbtTag Clone()",
          "returns": {
            "type": "NbtTag"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtintarray/#clone"
        }
      ]
    },
    {
      "name": "NbtIo",
      "fullName": "Mc.Scripting.Nbt.NbtIo",
      "namespace": "Mc.Scripting.Nbt",
      "kind": "class",
      "category": "nbt",
      "categoryLabel": "NBT",
      "signature": "public static class NbtIo",
      "summary": "Binary NBT (the file form of the game: type byte, name, payload; big endian; strings in Java's modified UTF-8). Reading enforces a nesting depth of 512 like the game.",
      "url": "/reference/api/nbt/nbtio/",
      "members": [
        {
          "name": "DefaultQuota",
          "kind": "field",
          "signature": "public const long DefaultQuota = 33554432;",
          "static": true,
          "returns": {
            "type": "long"
          },
          "summary": "How much memory (in the accounting of the game's NbtAccounter: about 48 bytes per tag, plus strings and arrays) a read may build: 32 MiB. A few bytes of input can describe a very large tree (a list of a million empty compounds is one megabyte of data and a hundred megabytes of objects); the quota stops it.",
          "documented": true,
          "url": "/reference/api/nbt/nbtio/#defaultquota"
        },
        {
          "name": "Read",
          "kind": "method",
          "signature": "public static NbtTag Read(ReadOnlySpan<byte> data)",
          "static": true,
          "parameters": [
            {
              "name": "data",
              "type": "ReadOnlySpan<byte>",
              "summary": "The bytes (not compressed)."
            }
          ],
          "returns": {
            "type": "NbtTag",
            "summary": "The tag."
          },
          "summary": "Parses a named root tag (the name is ignored).",
          "throws": [
            {
              "type": "System.FormatException",
              "summary": "The data is truncated or malformed."
            }
          ],
          "documented": true,
          "url": "/reference/api/nbt/nbtio/#read"
        },
        {
          "name": "Read",
          "kind": "method",
          "signature": "public static NbtTag Read(ReadOnlySpan<byte> data, long quota)",
          "static": true,
          "parameters": [
            {
              "name": "data",
              "type": "ReadOnlySpan<byte>",
              "summary": "The bytes (not compressed)."
            },
            {
              "name": "quota",
              "type": "long",
              "summary": "The most accounted memory the tree may take (see `NbtIo.DefaultQuota`)."
            }
          ],
          "returns": {
            "type": "NbtTag",
            "summary": "The tag."
          },
          "summary": "Parses a named root tag with an explicit memory quota.",
          "throws": [
            {
              "type": "System.FormatException",
              "summary": "The data is truncated, malformed, nested too deeply or larger than the quota."
            }
          ],
          "documented": true,
          "url": "/reference/api/nbt/nbtio/#read-1"
        },
        {
          "name": "Write",
          "kind": "method",
          "signature": "public static byte[] Write(NbtTag tag)",
          "static": true,
          "parameters": [
            {
              "name": "tag",
              "type": "NbtTag",
              "summary": "The tag."
            }
          ],
          "returns": {
            "type": "byte[]",
            "summary": "The bytes."
          },
          "summary": "Serialises a tag as a named root with an empty name.",
          "documented": true,
          "url": "/reference/api/nbt/nbtio/#write"
        }
      ]
    },
    {
      "name": "NbtList",
      "fullName": "Mc.Scripting.Nbt.NbtList",
      "namespace": "Mc.Scripting.Nbt",
      "kind": "class",
      "category": "nbt",
      "categoryLabel": "NBT",
      "signature": "public sealed class NbtList : NbtTag, ICollection<NbtTag>, IEnumerable, IEnumerable<NbtTag>, IList<NbtTag>",
      "baseType": "NbtTag",
      "interfaces": [
        "ICollection<NbtTag>",
        "IEnumerable",
        "IEnumerable<NbtTag>",
        "IList<NbtTag>"
      ],
      "summary": "A list of tags of one type.",
      "url": "/reference/api/nbt/nbtlist/",
      "members": [
        {
          "name": "NbtList",
          "kind": "ctor",
          "signature": "public NbtList()",
          "summary": "Creates an empty list.",
          "documented": true,
          "url": "/reference/api/nbt/nbtlist/#constructor"
        },
        {
          "name": "NbtList",
          "kind": "ctor",
          "signature": "public NbtList(IEnumerable<NbtTag> items)",
          "parameters": [
            {
              "name": "items",
              "type": "IEnumerable<NbtTag>",
              "summary": "The items (all of one type)."
            }
          ],
          "summary": "Creates a list with items.",
          "documented": true,
          "url": "/reference/api/nbt/nbtlist/#constructor-1"
        },
        {
          "name": "Count",
          "kind": "property",
          "signature": "public int Count { get; }",
          "returns": {
            "type": "int"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtlist/#count"
        },
        {
          "name": "ElementType",
          "kind": "property",
          "signature": "public NbtType ElementType { get; }",
          "returns": {
            "type": "NbtType"
          },
          "summary": "The type of the items (End while the list is empty).",
          "documented": true,
          "url": "/reference/api/nbt/nbtlist/#elementtype"
        },
        {
          "name": "IsReadOnly",
          "kind": "property",
          "signature": "public bool IsReadOnly { get; }",
          "returns": {
            "type": "bool"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtlist/#isreadonly"
        },
        {
          "name": "Type",
          "kind": "property",
          "signature": "public override NbtType Type { get; }",
          "returns": {
            "type": "NbtType"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtlist/#type"
        },
        {
          "name": "this[]",
          "kind": "indexer",
          "signature": "public NbtTag this[int index] { get; set; }",
          "parameters": [
            {
              "name": "index",
              "type": "int"
            }
          ],
          "returns": {
            "type": "NbtTag"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtlist/#this"
        },
        {
          "name": "Add",
          "kind": "method",
          "signature": "public void Add(NbtTag item)",
          "parameters": [
            {
              "name": "item",
              "type": "NbtTag"
            }
          ],
          "documented": false,
          "url": "/reference/api/nbt/nbtlist/#add"
        },
        {
          "name": "Clear",
          "kind": "method",
          "signature": "public void Clear()",
          "documented": false,
          "url": "/reference/api/nbt/nbtlist/#clear"
        },
        {
          "name": "Clone",
          "kind": "method",
          "signature": "public override NbtTag Clone()",
          "returns": {
            "type": "NbtTag"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtlist/#clone"
        },
        {
          "name": "Contains",
          "kind": "method",
          "signature": "public bool Contains(NbtTag item)",
          "parameters": [
            {
              "name": "item",
              "type": "NbtTag"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtlist/#contains"
        },
        {
          "name": "CopyTo",
          "kind": "method",
          "signature": "public void CopyTo(NbtTag[] array, int arrayIndex)",
          "parameters": [
            {
              "name": "array",
              "type": "NbtTag[]"
            },
            {
              "name": "arrayIndex",
              "type": "int"
            }
          ],
          "documented": false,
          "url": "/reference/api/nbt/nbtlist/#copyto"
        },
        {
          "name": "GetEnumerator",
          "kind": "method",
          "signature": "public IEnumerator<NbtTag> GetEnumerator()",
          "returns": {
            "type": "IEnumerator<NbtTag>"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtlist/#getenumerator"
        },
        {
          "name": "IndexOf",
          "kind": "method",
          "signature": "public int IndexOf(NbtTag item)",
          "parameters": [
            {
              "name": "item",
              "type": "NbtTag"
            }
          ],
          "returns": {
            "type": "int"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtlist/#indexof"
        },
        {
          "name": "Insert",
          "kind": "method",
          "signature": "public void Insert(int index, NbtTag item)",
          "parameters": [
            {
              "name": "index",
              "type": "int"
            },
            {
              "name": "item",
              "type": "NbtTag"
            }
          ],
          "documented": false,
          "url": "/reference/api/nbt/nbtlist/#insert"
        },
        {
          "name": "Remove",
          "kind": "method",
          "signature": "public bool Remove(NbtTag item)",
          "parameters": [
            {
              "name": "item",
              "type": "NbtTag"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtlist/#remove"
        },
        {
          "name": "RemoveAt",
          "kind": "method",
          "signature": "public void RemoveAt(int index)",
          "parameters": [
            {
              "name": "index",
              "type": "int"
            }
          ],
          "documented": false,
          "url": "/reference/api/nbt/nbtlist/#removeat"
        }
      ]
    },
    {
      "name": "NbtLong",
      "fullName": "Mc.Scripting.Nbt.NbtLong",
      "namespace": "Mc.Scripting.Nbt",
      "kind": "class",
      "category": "nbt",
      "categoryLabel": "NBT",
      "signature": "public sealed class NbtLong : NbtValueTag",
      "baseType": "NbtValueTag",
      "summary": "Signed 64 bit integer.",
      "url": "/reference/api/nbt/nbtlong/",
      "members": [
        {
          "name": "NbtLong",
          "kind": "ctor",
          "signature": "public NbtLong(long value)",
          "parameters": [
            {
              "name": "value",
              "type": "long",
              "summary": "The value."
            }
          ],
          "summary": "Creates the tag.",
          "documented": true,
          "url": "/reference/api/nbt/nbtlong/#constructor"
        },
        {
          "name": "Type",
          "kind": "property",
          "signature": "public override NbtType Type { get; }",
          "returns": {
            "type": "NbtType"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtlong/#type"
        },
        {
          "name": "Value",
          "kind": "property",
          "signature": "public long Value { get; set; }",
          "returns": {
            "type": "long"
          },
          "summary": "The value.",
          "documented": true,
          "url": "/reference/api/nbt/nbtlong/#value"
        },
        {
          "name": "Clone",
          "kind": "method",
          "signature": "public override NbtTag Clone()",
          "returns": {
            "type": "NbtTag"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtlong/#clone"
        }
      ]
    },
    {
      "name": "NbtLongArray",
      "fullName": "Mc.Scripting.Nbt.NbtLongArray",
      "namespace": "Mc.Scripting.Nbt",
      "kind": "class",
      "category": "nbt",
      "categoryLabel": "NBT",
      "signature": "public sealed class NbtLongArray : NbtTag",
      "baseType": "NbtTag",
      "summary": "An array of 64 bit integers.",
      "url": "/reference/api/nbt/nbtlongarray/",
      "members": [
        {
          "name": "NbtLongArray",
          "kind": "ctor",
          "signature": "public NbtLongArray(long[] value)",
          "parameters": [
            {
              "name": "value",
              "type": "long[]",
              "summary": "The values."
            }
          ],
          "summary": "Creates the tag.",
          "documented": true,
          "url": "/reference/api/nbt/nbtlongarray/#constructor"
        },
        {
          "name": "Type",
          "kind": "property",
          "signature": "public override NbtType Type { get; }",
          "returns": {
            "type": "NbtType"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtlongarray/#type"
        },
        {
          "name": "Value",
          "kind": "property",
          "signature": "public long[] Value { get; set; }",
          "returns": {
            "type": "long[]"
          },
          "summary": "The values (not copied).",
          "documented": true,
          "url": "/reference/api/nbt/nbtlongarray/#value"
        },
        {
          "name": "Clone",
          "kind": "method",
          "signature": "public override NbtTag Clone()",
          "returns": {
            "type": "NbtTag"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtlongarray/#clone"
        }
      ]
    },
    {
      "name": "NbtShort",
      "fullName": "Mc.Scripting.Nbt.NbtShort",
      "namespace": "Mc.Scripting.Nbt",
      "kind": "class",
      "category": "nbt",
      "categoryLabel": "NBT",
      "signature": "public sealed class NbtShort : NbtValueTag",
      "baseType": "NbtValueTag",
      "summary": "Signed 16 bit integer.",
      "url": "/reference/api/nbt/nbtshort/",
      "members": [
        {
          "name": "NbtShort",
          "kind": "ctor",
          "signature": "public NbtShort(short value)",
          "parameters": [
            {
              "name": "value",
              "type": "short",
              "summary": "The value."
            }
          ],
          "summary": "Creates the tag.",
          "documented": true,
          "url": "/reference/api/nbt/nbtshort/#constructor"
        },
        {
          "name": "Type",
          "kind": "property",
          "signature": "public override NbtType Type { get; }",
          "returns": {
            "type": "NbtType"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtshort/#type"
        },
        {
          "name": "Value",
          "kind": "property",
          "signature": "public short Value { get; set; }",
          "returns": {
            "type": "short"
          },
          "summary": "The value.",
          "documented": true,
          "url": "/reference/api/nbt/nbtshort/#value"
        },
        {
          "name": "Clone",
          "kind": "method",
          "signature": "public override NbtTag Clone()",
          "returns": {
            "type": "NbtTag"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtshort/#clone"
        }
      ]
    },
    {
      "name": "NbtString",
      "fullName": "Mc.Scripting.Nbt.NbtString",
      "namespace": "Mc.Scripting.Nbt",
      "kind": "class",
      "category": "nbt",
      "categoryLabel": "NBT",
      "signature": "public sealed class NbtString : NbtValueTag",
      "baseType": "NbtValueTag",
      "summary": "A string.",
      "url": "/reference/api/nbt/nbtstring/",
      "members": [
        {
          "name": "NbtString",
          "kind": "ctor",
          "signature": "public NbtString(string value)",
          "parameters": [
            {
              "name": "value",
              "type": "string",
              "summary": "The value."
            }
          ],
          "summary": "Creates the tag.",
          "documented": true,
          "url": "/reference/api/nbt/nbtstring/#constructor"
        },
        {
          "name": "Type",
          "kind": "property",
          "signature": "public override NbtType Type { get; }",
          "returns": {
            "type": "NbtType"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtstring/#type"
        },
        {
          "name": "Value",
          "kind": "property",
          "signature": "public string Value { get; set; }",
          "returns": {
            "type": "string"
          },
          "summary": "The value.",
          "documented": true,
          "url": "/reference/api/nbt/nbtstring/#value"
        },
        {
          "name": "Clone",
          "kind": "method",
          "signature": "public override NbtTag Clone()",
          "returns": {
            "type": "NbtTag"
          },
          "documented": false,
          "url": "/reference/api/nbt/nbtstring/#clone"
        }
      ]
    },
    {
      "name": "NbtTag",
      "fullName": "Mc.Scripting.Nbt.NbtTag",
      "namespace": "Mc.Scripting.Nbt",
      "kind": "class",
      "category": "nbt",
      "categoryLabel": "NBT",
      "signature": "public abstract class NbtTag",
      "summary": "An NBT value (the data format of block entities, entities, item components and level data). Tags are mutable managed objects: they are copies of the engine's data, so changing one changes nothing in the world until it is handed back (for example to `World.SetBlockEntityData`). Use `NbtTag.Clone` for a deep copy.",
      "url": "/reference/api/nbt/nbttag/",
      "members": [
        {
          "name": "NbtTag",
          "kind": "ctor",
          "signature": "protected NbtTag()",
          "documented": false,
          "url": "/reference/api/nbt/nbttag/#constructor"
        },
        {
          "name": "Type",
          "kind": "property",
          "signature": "public abstract NbtType Type { get; }",
          "abstract": true,
          "returns": {
            "type": "NbtType"
          },
          "summary": "The type of this tag.",
          "documented": true,
          "url": "/reference/api/nbt/nbttag/#type"
        },
        {
          "name": "Clone",
          "kind": "method",
          "signature": "public abstract NbtTag Clone()",
          "abstract": true,
          "returns": {
            "type": "NbtTag",
            "summary": "The copy."
          },
          "summary": "A deep copy.",
          "documented": true,
          "url": "/reference/api/nbt/nbttag/#clone"
        },
        {
          "name": "ToBytes",
          "kind": "method",
          "signature": "public byte[] ToBytes()",
          "returns": {
            "type": "byte[]",
            "summary": "The bytes."
          },
          "summary": "Serialises the tag to the binary file form (named root with an empty name, big endian).",
          "documented": true,
          "url": "/reference/api/nbt/nbttag/#tobytes"
        },
        {
          "name": "ToString",
          "kind": "method",
          "signature": "public override string ToString()",
          "returns": {
            "type": "string",
            "summary": "The SNBT text."
          },
          "summary": "The tag as stringified NBT (what `/data get` prints), compact, compound keys sorted.",
          "documented": true,
          "url": "/reference/api/nbt/nbttag/#tostring"
        },
        {
          "name": "DeepEquals",
          "kind": "method",
          "signature": "public static bool DeepEquals(NbtTag? a, NbtTag? b)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "NbtTag?",
              "summary": "One tag."
            },
            {
              "name": "b",
              "type": "NbtTag?",
              "summary": "The other."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when equal."
          },
          "summary": "Whether two tags have the same type and contents (compounds compare by keys, not by order).",
          "documented": true,
          "url": "/reference/api/nbt/nbttag/#deepequals"
        },
        {
          "name": "FromBytes",
          "kind": "method",
          "signature": "public static NbtTag FromBytes(ReadOnlySpan<byte> data)",
          "static": true,
          "parameters": [
            {
              "name": "data",
              "type": "ReadOnlySpan<byte>",
              "summary": "The bytes (not compressed)."
            }
          ],
          "returns": {
            "type": "NbtTag",
            "summary": "The root tag."
          },
          "summary": "Parses the binary file form.",
          "throws": [
            {
              "type": "System.FormatException",
              "summary": "The data is not valid NBT."
            }
          ],
          "documented": true,
          "url": "/reference/api/nbt/nbttag/#frombytes"
        },
        {
          "name": "Parse",
          "kind": "method",
          "signature": "public static NbtTag Parse(string snbt)",
          "static": true,
          "parameters": [
            {
              "name": "snbt",
              "type": "string",
              "summary": "The text."
            }
          ],
          "returns": {
            "type": "NbtTag",
            "summary": "The tag."
          },
          "summary": "Parses stringified NBT (`{Health:20.0f,Tags:[\"a\"]}`), with the grammar of the game (typed suffixes, quoted strings, `[B;1,2]` arrays ...).",
          "throws": [
            {
              "type": "System.FormatException",
              "summary": "The text is not valid SNBT."
            }
          ],
          "documented": true,
          "url": "/reference/api/nbt/nbttag/#parse"
        },
        {
          "name": "ParseCompound",
          "kind": "method",
          "signature": "public static NbtCompound ParseCompound(string snbt)",
          "static": true,
          "parameters": [
            {
              "name": "snbt",
              "type": "string",
              "summary": "The text."
            }
          ],
          "returns": {
            "type": "NbtCompound",
            "summary": "The compound."
          },
          "summary": "Parses stringified NBT that must be a compound.",
          "throws": [
            {
              "type": "System.FormatException",
              "summary": "The text is not valid SNBT or not a compound."
            }
          ],
          "documented": true,
          "url": "/reference/api/nbt/nbttag/#parsecompound"
        },
        {
          "name": "implicit",
          "kind": "operator",
          "signature": "public static implicit operator NbtTag(sbyte v)",
          "static": true,
          "parameters": [
            {
              "name": "v",
              "type": "sbyte",
              "summary": "The value."
            }
          ],
          "returns": {
            "type": "NbtTag"
          },
          "summary": "An 8 bit integer tag.",
          "documented": true,
          "url": "/reference/api/nbt/nbttag/#operator-implicit"
        },
        {
          "name": "implicit",
          "kind": "operator",
          "signature": "public static implicit operator NbtTag(short v)",
          "static": true,
          "parameters": [
            {
              "name": "v",
              "type": "short",
              "summary": "The value."
            }
          ],
          "returns": {
            "type": "NbtTag"
          },
          "summary": "A 16 bit integer tag.",
          "documented": true,
          "url": "/reference/api/nbt/nbttag/#operator-implicit-1"
        },
        {
          "name": "implicit",
          "kind": "operator",
          "signature": "public static implicit operator NbtTag(int v)",
          "static": true,
          "parameters": [
            {
              "name": "v",
              "type": "int",
              "summary": "The value."
            }
          ],
          "returns": {
            "type": "NbtTag"
          },
          "summary": "A 32 bit integer tag.",
          "documented": true,
          "url": "/reference/api/nbt/nbttag/#operator-implicit-2"
        },
        {
          "name": "implicit",
          "kind": "operator",
          "signature": "public static implicit operator NbtTag(long v)",
          "static": true,
          "parameters": [
            {
              "name": "v",
              "type": "long",
              "summary": "The value."
            }
          ],
          "returns": {
            "type": "NbtTag"
          },
          "summary": "A 64 bit integer tag.",
          "documented": true,
          "url": "/reference/api/nbt/nbttag/#operator-implicit-3"
        },
        {
          "name": "implicit",
          "kind": "operator",
          "signature": "public static implicit operator NbtTag(float v)",
          "static": true,
          "parameters": [
            {
              "name": "v",
              "type": "float",
              "summary": "The value."
            }
          ],
          "returns": {
            "type": "NbtTag"
          },
          "summary": "A float tag.",
          "documented": true,
          "url": "/reference/api/nbt/nbttag/#operator-implicit-4"
        },
        {
          "name": "implicit",
          "kind": "operator",
          "signature": "public static implicit operator NbtTag(double v)",
          "static": true,
          "parameters": [
            {
              "name": "v",
              "type": "double",
              "summary": "The value."
            }
          ],
          "returns": {
            "type": "NbtTag"
          },
          "summary": "A double tag.",
          "documented": true,
          "url": "/reference/api/nbt/nbttag/#operator-implicit-5"
        },
        {
          "name": "implicit",
          "kind": "operator",
          "signature": "public static implicit operator NbtTag(string v)",
          "static": true,
          "parameters": [
            {
              "name": "v",
              "type": "string",
              "summary": "The value."
            }
          ],
          "returns": {
            "type": "NbtTag"
          },
          "summary": "A string tag.",
          "documented": true,
          "url": "/reference/api/nbt/nbttag/#operator-implicit-6"
        },
        {
          "name": "implicit",
          "kind": "operator",
          "signature": "public static implicit operator NbtTag(bool v)",
          "static": true,
          "parameters": [
            {
              "name": "v",
              "type": "bool",
              "summary": "The value."
            }
          ],
          "returns": {
            "type": "NbtTag"
          },
          "summary": "A byte tag holding 1 or 0 (the game stores booleans as bytes).",
          "documented": true,
          "url": "/reference/api/nbt/nbttag/#operator-implicit-7"
        }
      ]
    },
    {
      "name": "NbtType",
      "fullName": "Mc.Scripting.Nbt.NbtType",
      "namespace": "Mc.Scripting.Nbt",
      "kind": "enum",
      "category": "nbt",
      "categoryLabel": "NBT",
      "signature": "public enum NbtType : byte",
      "summary": "The type of an NBT tag (the id byte of the binary format).",
      "url": "/reference/api/nbt/nbttype/",
      "members": [
        {
          "name": "End",
          "kind": "enumMember",
          "signature": "End = 0",
          "value": "0",
          "summary": "End marker (never a value).",
          "documented": true,
          "url": "/reference/api/nbt/nbttype/#end"
        },
        {
          "name": "Byte",
          "kind": "enumMember",
          "signature": "Byte = 1",
          "value": "1",
          "summary": "Signed 8 bit integer.",
          "documented": true,
          "url": "/reference/api/nbt/nbttype/#byte"
        },
        {
          "name": "Short",
          "kind": "enumMember",
          "signature": "Short = 2",
          "value": "2",
          "summary": "Signed 16 bit integer.",
          "documented": true,
          "url": "/reference/api/nbt/nbttype/#short"
        },
        {
          "name": "Int",
          "kind": "enumMember",
          "signature": "Int = 3",
          "value": "3",
          "summary": "Signed 32 bit integer.",
          "documented": true,
          "url": "/reference/api/nbt/nbttype/#int"
        },
        {
          "name": "Long",
          "kind": "enumMember",
          "signature": "Long = 4",
          "value": "4",
          "summary": "Signed 64 bit integer.",
          "documented": true,
          "url": "/reference/api/nbt/nbttype/#long"
        },
        {
          "name": "Float",
          "kind": "enumMember",
          "signature": "Float = 5",
          "value": "5",
          "summary": "32 bit float.",
          "documented": true,
          "url": "/reference/api/nbt/nbttype/#float"
        },
        {
          "name": "Double",
          "kind": "enumMember",
          "signature": "Double = 6",
          "value": "6",
          "summary": "64 bit float.",
          "documented": true,
          "url": "/reference/api/nbt/nbttype/#double"
        },
        {
          "name": "ByteArray",
          "kind": "enumMember",
          "signature": "ByteArray = 7",
          "value": "7",
          "summary": "Array of bytes.",
          "documented": true,
          "url": "/reference/api/nbt/nbttype/#bytearray"
        },
        {
          "name": "String",
          "kind": "enumMember",
          "signature": "String = 8",
          "value": "8",
          "summary": "UTF-8 string.",
          "documented": true,
          "url": "/reference/api/nbt/nbttype/#string"
        },
        {
          "name": "List",
          "kind": "enumMember",
          "signature": "List = 9",
          "value": "9",
          "summary": "List of tags of one type.",
          "documented": true,
          "url": "/reference/api/nbt/nbttype/#list"
        },
        {
          "name": "Compound",
          "kind": "enumMember",
          "signature": "Compound = 10",
          "value": "10",
          "summary": "Named tags.",
          "documented": true,
          "url": "/reference/api/nbt/nbttype/#compound"
        },
        {
          "name": "IntArray",
          "kind": "enumMember",
          "signature": "IntArray = 11",
          "value": "11",
          "summary": "Array of 32 bit integers.",
          "documented": true,
          "url": "/reference/api/nbt/nbttype/#intarray"
        },
        {
          "name": "LongArray",
          "kind": "enumMember",
          "signature": "LongArray = 12",
          "value": "12",
          "summary": "Array of 64 bit integers.",
          "documented": true,
          "url": "/reference/api/nbt/nbttype/#longarray"
        }
      ]
    },
    {
      "name": "NbtValueTag",
      "fullName": "Mc.Scripting.Nbt.NbtValueTag",
      "namespace": "Mc.Scripting.Nbt",
      "kind": "class",
      "category": "nbt",
      "categoryLabel": "NBT",
      "signature": "public abstract class NbtValueTag : NbtTag",
      "baseType": "NbtTag",
      "summary": "A tag with a single numeric or text value.",
      "url": "/reference/api/nbt/nbtvaluetag/",
      "members": [
        {
          "name": "NbtValueTag",
          "kind": "ctor",
          "signature": "protected NbtValueTag()",
          "documented": false,
          "url": "/reference/api/nbt/nbtvaluetag/#constructor"
        }
      ]
    },
    {
      "name": "Snbt",
      "fullName": "Mc.Scripting.Nbt.Snbt",
      "namespace": "Mc.Scripting.Nbt",
      "kind": "class",
      "category": "nbt",
      "categoryLabel": "NBT",
      "signature": "public static class Snbt",
      "summary": "Stringified NBT (the text form of `/data` and `/summon`), through the game's own parser and printer.",
      "url": "/reference/api/nbt/snbt/",
      "members": [
        {
          "name": "Format",
          "kind": "method",
          "signature": "public static string Format(NbtTag tag)",
          "static": true,
          "parameters": [
            {
              "name": "tag",
              "type": "NbtTag",
              "summary": "The tag."
            }
          ],
          "returns": {
            "type": "string",
            "summary": "The text."
          },
          "summary": "Formats a tag as SNBT.",
          "documented": true,
          "url": "/reference/api/nbt/snbt/#format"
        },
        {
          "name": "Parse",
          "kind": "method",
          "signature": "public static NbtTag Parse(string text)",
          "static": true,
          "parameters": [
            {
              "name": "text",
              "type": "string",
              "summary": "The text."
            }
          ],
          "returns": {
            "type": "NbtTag",
            "summary": "The tag."
          },
          "summary": "Parses SNBT.",
          "throws": [
            {
              "type": "System.FormatException",
              "summary": "The text is not valid SNBT."
            }
          ],
          "documented": true,
          "url": "/reference/api/nbt/snbt/#parse"
        }
      ]
    },
    {
      "name": "Npc",
      "fullName": "Mc.Scripting.Npc",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "visuals",
      "categoryLabel": "Holograms and NPCs",
      "signature": "public sealed class Npc : IDisposable, IPluginResource",
      "interfaces": [
        "IDisposable",
        "IPluginResource"
      ],
      "summary": "A fake player that stands in the world: the players see it with a name, a skin, equipment and an arm that swings, and a click on it fires {{cref:M:Mc.Scripting.Npcs.OnInteract(System.Action{Mc.Scripting.NpcInteraction})}}. Nothing of it exists on the server (it has no physics and no AI). Create it with `Npcs.Create`; it disappears for every viewer when the plugin unloads or when `Npc.Remove` is called.",
      "url": "/reference/api/visuals/npc/",
      "members": [
        {
          "name": "Handle",
          "kind": "property",
          "signature": "public ulong Handle { get; }",
          "returns": {
            "type": "ulong"
          },
          "summary": "The handle the engine gives a click on this NPC (see `NpcInteraction.Handle`).",
          "documented": true,
          "url": "/reference/api/visuals/npc/#handle"
        },
        {
          "name": "IsActive",
          "kind": "property",
          "signature": "public bool IsActive { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the NPC still exists.",
          "documented": true,
          "url": "/reference/api/visuals/npc/#isactive"
        },
        {
          "name": "Name",
          "kind": "property",
          "signature": "public string Name { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The profile name above its head.",
          "documented": true,
          "url": "/reference/api/visuals/npc/#name"
        },
        {
          "name": "Pitch",
          "kind": "property",
          "signature": "public float Pitch { get; }",
          "returns": {
            "type": "float"
          },
          "summary": "The vertical look, degrees.",
          "documented": true,
          "url": "/reference/api/visuals/npc/#pitch"
        },
        {
          "name": "Position",
          "kind": "property",
          "signature": "public Vec3d Position { get; }",
          "returns": {
            "type": "Vec3d"
          },
          "summary": "Where it stands.",
          "documented": true,
          "url": "/reference/api/visuals/npc/#position"
        },
        {
          "name": "Yaw",
          "kind": "property",
          "signature": "public float Yaw { get; }",
          "returns": {
            "type": "float"
          },
          "summary": "The horizontal look, degrees.",
          "documented": true,
          "url": "/reference/api/visuals/npc/#yaw"
        },
        {
          "name": "Dispose",
          "kind": "method",
          "signature": "public void Dispose()",
          "documented": false,
          "url": "/reference/api/visuals/npc/#dispose"
        },
        {
          "name": "HideFrom",
          "kind": "method",
          "signature": "public Npc HideFrom(Player player)",
          "parameters": [
            {
              "name": "player",
              "type": "Player",
              "summary": "The player."
            }
          ],
          "returns": {
            "type": "Npc",
            "summary": "This NPC."
          },
          "summary": "Hides the NPC from one player (while it is shown to everybody).",
          "documented": true,
          "url": "/reference/api/visuals/npc/#hidefrom"
        },
        {
          "name": "HideFromAll",
          "kind": "method",
          "signature": "public Npc HideFromAll()",
          "returns": {
            "type": "Npc",
            "summary": "This NPC."
          },
          "summary": "Hides the NPC from everybody.",
          "documented": true,
          "url": "/reference/api/visuals/npc/#hidefromall"
        },
        {
          "name": "Look",
          "kind": "method",
          "signature": "public Npc Look(float yaw, float pitch)",
          "parameters": [
            {
              "name": "yaw",
              "type": "float",
              "summary": "The horizontal look, degrees."
            },
            {
              "name": "pitch",
              "type": "float",
              "summary": "The vertical look, degrees."
            }
          ],
          "returns": {
            "type": "Npc",
            "summary": "This NPC."
          },
          "summary": "Turns the NPC where it stands.",
          "documented": true,
          "url": "/reference/api/visuals/npc/#look"
        },
        {
          "name": "Move",
          "kind": "method",
          "signature": "public Npc Move(Vec3d position, float yaw, float pitch)",
          "parameters": [
            {
              "name": "position",
              "type": "Vec3d",
              "summary": "The new position."
            },
            {
              "name": "yaw",
              "type": "float",
              "summary": "The horizontal look, degrees."
            },
            {
              "name": "pitch",
              "type": "float",
              "summary": "The vertical look, degrees."
            }
          ],
          "returns": {
            "type": "Npc",
            "summary": "This NPC."
          },
          "summary": "Moves the NPC (within its world) and turns it.",
          "documented": true,
          "url": "/reference/api/visuals/npc/#move"
        },
        {
          "name": "Remove",
          "kind": "method",
          "signature": "public void Remove()",
          "summary": "Removes the NPC from every viewer (and from the tab list) and deletes it.",
          "documented": true,
          "url": "/reference/api/visuals/npc/#remove"
        },
        {
          "name": "SetEquipment",
          "kind": "method",
          "signature": "public Npc SetEquipment(NpcSlot slot, ItemStack item)",
          "parameters": [
            {
              "name": "slot",
              "type": "NpcSlot",
              "summary": "The slot."
            },
            {
              "name": "item",
              "type": "ItemStack",
              "summary": "The stack."
            }
          ],
          "returns": {
            "type": "Npc",
            "summary": "This NPC."
          },
          "summary": "Sets what a slot of the NPC holds or wears (an empty stack clears it).",
          "documented": true,
          "url": "/reference/api/visuals/npc/#setequipment"
        },
        {
          "name": "SetPose",
          "kind": "method",
          "signature": "public Npc SetPose(NpcPose pose)",
          "parameters": [
            {
              "name": "pose",
              "type": "NpcPose",
              "summary": "The pose."
            }
          ],
          "returns": {
            "type": "Npc",
            "summary": "This NPC."
          },
          "summary": "Changes the pose (standing or sneaking).",
          "documented": true,
          "url": "/reference/api/visuals/npc/#setpose"
        },
        {
          "name": "ShowTo",
          "kind": "method",
          "signature": "public Npc ShowTo(Player player)",
          "parameters": [
            {
              "name": "player",
              "type": "Player",
              "summary": "The player."
            }
          ],
          "returns": {
            "type": "Npc",
            "summary": "This NPC."
          },
          "summary": "Shows the NPC to one player (after `Npc.HideFromAll`), or hides it from one player while it is shown to everybody.",
          "documented": true,
          "url": "/reference/api/visuals/npc/#showto"
        },
        {
          "name": "ShowToAll",
          "kind": "method",
          "signature": "public Npc ShowToAll()",
          "returns": {
            "type": "Npc",
            "summary": "This NPC."
          },
          "summary": "Shows the NPC to everybody again.",
          "documented": true,
          "url": "/reference/api/visuals/npc/#showtoall"
        },
        {
          "name": "Swing",
          "kind": "method",
          "signature": "public Npc Swing(bool offhand = false)",
          "parameters": [
            {
              "name": "offhand",
              "type": "bool",
              "default": "false",
              "summary": "The off hand instead of the main hand."
            }
          ],
          "returns": {
            "type": "Npc",
            "summary": "This NPC."
          },
          "summary": "Swings an arm.",
          "documented": true,
          "url": "/reference/api/visuals/npc/#swing"
        }
      ]
    },
    {
      "name": "NpcClick",
      "fullName": "Mc.Scripting.NpcClick",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "visuals",
      "categoryLabel": "Holograms and NPCs",
      "signature": "public enum NpcClick : byte",
      "summary": "What a player did to an NPC.",
      "url": "/reference/api/visuals/npcclick/",
      "members": [
        {
          "name": "Attack",
          "kind": "enumMember",
          "signature": "Attack = 0",
          "value": "0",
          "summary": "A left click (an attack).",
          "documented": true,
          "url": "/reference/api/visuals/npcclick/#attack"
        },
        {
          "name": "Interact",
          "kind": "enumMember",
          "signature": "Interact = 1",
          "value": "1",
          "summary": "A right click (an interaction).",
          "documented": true,
          "url": "/reference/api/visuals/npcclick/#interact"
        }
      ]
    },
    {
      "name": "NpcInteraction",
      "fullName": "Mc.Scripting.NpcInteraction",
      "namespace": "Mc.Scripting",
      "kind": "struct",
      "category": "visuals",
      "categoryLabel": "Holograms and NPCs",
      "signature": "public readonly struct NpcInteraction",
      "summary": "A click on an NPC ({{cref:M:Mc.Scripting.Npcs.OnInteract(System.Action{Mc.Scripting.NpcInteraction})}}).",
      "url": "/reference/api/visuals/npcinteraction/",
      "members": [
        {
          "name": "Action",
          "kind": "property",
          "signature": "public NpcClick Action { get; }",
          "returns": {
            "type": "NpcClick"
          },
          "summary": "A left click (an attack) or a right click (an interaction).",
          "documented": true,
          "url": "/reference/api/visuals/npcinteraction/#action"
        },
        {
          "name": "Hand",
          "kind": "property",
          "signature": "public Hand Hand { get; }",
          "returns": {
            "type": "Hand"
          },
          "summary": "The hand of the click (a left click is the main hand).",
          "documented": true,
          "url": "/reference/api/visuals/npcinteraction/#hand"
        },
        {
          "name": "Handle",
          "kind": "property",
          "signature": "public ulong Handle { get; }",
          "returns": {
            "type": "ulong"
          },
          "summary": "The handle of the NPC (the engine's; `NpcInteraction.Npc` of it is `NpcInteraction.Npc`.Handle).",
          "documented": true,
          "url": "/reference/api/visuals/npcinteraction/#handle"
        },
        {
          "name": "Npc",
          "kind": "property",
          "signature": "public Npc? Npc { get; }",
          "returns": {
            "type": "Npc?"
          },
          "summary": "The NPC, if it still exists.",
          "documented": true,
          "url": "/reference/api/visuals/npcinteraction/#npc"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player who clicked.",
          "documented": true,
          "url": "/reference/api/visuals/npcinteraction/#player"
        },
        {
          "name": "Sneaking",
          "kind": "property",
          "signature": "public bool Sneaking { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the player was sneaking.",
          "documented": true,
          "url": "/reference/api/visuals/npcinteraction/#sneaking"
        }
      ]
    },
    {
      "name": "NpcPose",
      "fullName": "Mc.Scripting.NpcPose",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "visuals",
      "categoryLabel": "Holograms and NPCs",
      "signature": "public enum NpcPose : int",
      "summary": "The pose of an NPC.",
      "url": "/reference/api/visuals/npcpose/",
      "members": [
        {
          "name": "Standing",
          "kind": "enumMember",
          "signature": "Standing = 0",
          "value": "0",
          "summary": "Standing.",
          "documented": true,
          "url": "/reference/api/visuals/npcpose/#standing"
        },
        {
          "name": "Crouching",
          "kind": "enumMember",
          "signature": "Crouching = 5",
          "value": "5",
          "summary": "Sneaking.",
          "documented": true,
          "url": "/reference/api/visuals/npcpose/#crouching"
        }
      ]
    },
    {
      "name": "NpcSkin",
      "fullName": "Mc.Scripting.NpcSkin",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "visuals",
      "categoryLabel": "Holograms and NPCs",
      "signature": "public sealed class NpcSkin",
      "summary": "The skin of an NPC: a texture (the value and signature of a \"textures\" profile property), or the skin of a player whose profile id is known.",
      "url": "/reference/api/visuals/npcskin/",
      "members": [
        {
          "name": "CopyOf",
          "kind": "property",
          "signature": "public Uuid CopyOf { get; }",
          "returns": {
            "type": "Uuid"
          },
          "summary": "The profile id whose skin is copied (default when the texture is given).",
          "documented": true,
          "url": "/reference/api/visuals/npcskin/#copyof"
        },
        {
          "name": "Signature",
          "kind": "property",
          "signature": "public string? Signature { get; }",
          "returns": {
            "type": "string?"
          },
          "summary": "The texture signature, when there is one.",
          "documented": true,
          "url": "/reference/api/visuals/npcskin/#signature"
        },
        {
          "name": "Value",
          "kind": "property",
          "signature": "public string Value { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The texture value (base64), empty when the skin is copied.",
          "documented": true,
          "url": "/reference/api/visuals/npcskin/#value"
        },
        {
          "name": "FromTexture",
          "kind": "method",
          "signature": "public static NpcSkin FromTexture(string value, string? signature = null)",
          "static": true,
          "parameters": [
            {
              "name": "value",
              "type": "string",
              "summary": "The base64 texture value."
            },
            {
              "name": "signature",
              "type": "string?",
              "default": "null",
              "summary": "The signature, if the texture has one."
            }
          ],
          "returns": {
            "type": "NpcSkin"
          },
          "summary": "A skin from a texture property (at most 8192 bytes of value and 1024 of signature).",
          "documented": true,
          "url": "/reference/api/visuals/npcskin/#fromtexture"
        },
        {
          "name": "OfPlayer",
          "kind": "method",
          "signature": "public static NpcSkin OfPlayer(Player player)",
          "static": true,
          "parameters": [
            {
              "name": "player",
              "type": "Player",
              "summary": "The player."
            }
          ],
          "returns": {
            "type": "NpcSkin"
          },
          "summary": "The skin of a player.",
          "documented": true,
          "url": "/reference/api/visuals/npcskin/#ofplayer"
        },
        {
          "name": "OfProfile",
          "kind": "method",
          "signature": "public static NpcSkin OfProfile(Uuid profile)",
          "static": true,
          "parameters": [
            {
              "name": "profile",
              "type": "Uuid",
              "summary": "The profile id."
            }
          ],
          "returns": {
            "type": "NpcSkin"
          },
          "summary": "The skin of a profile id (an online player's skin is copied; an offline one gives the default skin).",
          "documented": true,
          "url": "/reference/api/visuals/npcskin/#ofprofile"
        }
      ]
    },
    {
      "name": "NpcSlot",
      "fullName": "Mc.Scripting.NpcSlot",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "visuals",
      "categoryLabel": "Holograms and NPCs",
      "signature": "public enum NpcSlot : int",
      "summary": "The equipment slots of an NPC.",
      "url": "/reference/api/visuals/npcslot/",
      "members": [
        {
          "name": "MainHand",
          "kind": "enumMember",
          "signature": "MainHand = 0",
          "value": "0",
          "summary": "The main hand.",
          "documented": true,
          "url": "/reference/api/visuals/npcslot/#mainhand"
        },
        {
          "name": "OffHand",
          "kind": "enumMember",
          "signature": "OffHand = 1",
          "value": "1",
          "summary": "The off hand.",
          "documented": true,
          "url": "/reference/api/visuals/npcslot/#offhand"
        },
        {
          "name": "Feet",
          "kind": "enumMember",
          "signature": "Feet = 2",
          "value": "2",
          "summary": "The boots.",
          "documented": true,
          "url": "/reference/api/visuals/npcslot/#feet"
        },
        {
          "name": "Legs",
          "kind": "enumMember",
          "signature": "Legs = 3",
          "value": "3",
          "summary": "The leggings.",
          "documented": true,
          "url": "/reference/api/visuals/npcslot/#legs"
        },
        {
          "name": "Chest",
          "kind": "enumMember",
          "signature": "Chest = 4",
          "value": "4",
          "summary": "The chestplate.",
          "documented": true,
          "url": "/reference/api/visuals/npcslot/#chest"
        },
        {
          "name": "Head",
          "kind": "enumMember",
          "signature": "Head = 5",
          "value": "5",
          "summary": "The helmet.",
          "documented": true,
          "url": "/reference/api/visuals/npcslot/#head"
        }
      ]
    },
    {
      "name": "Npcs",
      "fullName": "Mc.Scripting.Npcs",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "visuals",
      "categoryLabel": "Holograms and NPCs",
      "signature": "public sealed class Npcs",
      "summary": "Creates NPCs for this plugin and listens to the clicks on them. Everything made here is removed when the plugin unloads.",
      "url": "/reference/api/visuals/npcs/",
      "members": [
        {
          "name": "Create",
          "kind": "method",
          "signature": "public Npc Create(World world, Vec3d position, string name, NpcSkin? skin = null, bool showInTab = false, float yaw = 0f, float pitch = 0f)",
          "parameters": [
            {
              "name": "world",
              "type": "World",
              "summary": "The world."
            },
            {
              "name": "position",
              "type": "Vec3d",
              "summary": "Where it stands."
            },
            {
              "name": "name",
              "type": "string",
              "summary": "The profile name (1..16 letters, digits or underscores)."
            },
            {
              "name": "skin",
              "type": "NpcSkin?",
              "default": "null",
              "summary": "The skin; null for the default one."
            },
            {
              "name": "showInTab",
              "type": "bool",
              "default": "false",
              "summary": "Whether it is in the tab list (unlisted by default)."
            },
            {
              "name": "yaw",
              "type": "float",
              "default": "0f",
              "summary": "The horizontal look, degrees."
            },
            {
              "name": "pitch",
              "type": "float",
              "default": "0f",
              "summary": "The vertical look, degrees."
            }
          ],
          "returns": {
            "type": "Npc",
            "summary": "The NPC."
          },
          "summary": "Creates an NPC that everybody sees.",
          "throws": [
            {
              "type": "System.ArgumentException",
              "summary": "The name is not a valid profile name."
            },
            {
              "type": "System.InvalidOperationException",
              "summary": "The engine refused the NPC (the world, or the server's visual limit)."
            }
          ],
          "documented": true,
          "url": "/reference/api/visuals/npcs/#create"
        },
        {
          "name": "OnInteract",
          "kind": "method",
          "signature": "public Subscription OnInteract(Action<NpcInteraction> handler)",
          "parameters": [
            {
              "name": "handler",
              "type": "Action<NpcInteraction>",
              "summary": "The handler."
            }
          ],
          "returns": {
            "type": "Subscription",
            "summary": "The subscription (removed when the plugin unloads)."
          },
          "summary": "Calls `handler` when a player clicks an NPC of this plugin's server (any NPC: check `NpcInteraction.Npc`).",
          "documented": true,
          "url": "/reference/api/visuals/npcs/#oninteract"
        }
      ]
    },
    {
      "name": "Objective",
      "fullName": "Mc.Scripting.Objective",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "display",
      "categoryLabel": "Scoreboards, boss bars, tab list",
      "signature": "public sealed class Objective",
      "summary": "An objective of the server scoreboard (the one `/scoreboard` edits and the world saves): scores per holder name, shown in a display slot. For content that differs per player use `Sidebar` instead.",
      "url": "/reference/api/display/objective/",
      "members": [
        {
          "name": "Name",
          "kind": "property",
          "signature": "public string Name { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The objective's name (what commands use).",
          "documented": true,
          "url": "/reference/api/display/objective/#name"
        },
        {
          "name": "AddScore",
          "kind": "method",
          "signature": "public int AddScore(string holder, int amount)",
          "parameters": [
            {
              "name": "holder",
              "type": "string",
              "summary": "The score holder."
            },
            {
              "name": "amount",
              "type": "int",
              "summary": "What to add."
            }
          ],
          "returns": {
            "type": "int",
            "summary": "The new score."
          },
          "summary": "Adds to the score of a holder (a missing score counts as 0).",
          "documented": true,
          "url": "/reference/api/display/objective/#addscore"
        },
        {
          "name": "GetScore",
          "kind": "method",
          "signature": "public int? GetScore(string holder)",
          "parameters": [
            {
              "name": "holder",
              "type": "string",
              "summary": "The score holder."
            }
          ],
          "returns": {
            "type": "int?"
          },
          "summary": "The score of a holder (a player name, or any text for a fake entry), null when none is set.",
          "documented": true,
          "url": "/reference/api/display/objective/#getscore"
        },
        {
          "name": "ResetScore",
          "kind": "method",
          "signature": "public bool ResetScore(string holder)",
          "parameters": [
            {
              "name": "holder",
              "type": "string",
              "summary": "The score holder."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "Whether there was one."
          },
          "summary": "Removes the score of a holder.",
          "documented": true,
          "url": "/reference/api/display/objective/#resetscore"
        },
        {
          "name": "SetScore",
          "kind": "method",
          "signature": "public void SetScore(string holder, int value)",
          "parameters": [
            {
              "name": "holder",
              "type": "string",
              "summary": "The score holder."
            },
            {
              "name": "value",
              "type": "int",
              "summary": "The score."
            }
          ],
          "summary": "Sets the score of a holder.",
          "documented": true,
          "url": "/reference/api/display/objective/#setscore"
        },
        {
          "name": "SetTitle",
          "kind": "method",
          "signature": "public void SetTitle(Component title)",
          "parameters": [
            {
              "name": "title",
              "type": "Component",
              "summary": "The title."
            }
          ],
          "summary": "Sets the title shown above the sidebar.",
          "documented": true,
          "url": "/reference/api/display/objective/#settitle"
        }
      ]
    },
    {
      "name": "OfflinePlayers",
      "fullName": "Mc.Scripting.OfflinePlayers",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "players",
      "categoryLabel": "Players",
      "signature": "public static class OfflinePlayers",
      "summary": "Players who are not online, looked up by name or uuid: the server's name cache (usercache.json, vanilla's), the first join and last seen times, and the saved player data. Reads only; a plugin that changes an offline player's data does it through the owner's own store. Thread: tick thread (the reads go to the engine).",
      "url": "/reference/api/players/offlineplayers/",
      "members": [
        {
          "name": "Find",
          "kind": "method",
          "signature": "public static Uuid? Find(string name)",
          "static": true,
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The name."
            }
          ],
          "returns": {
            "type": "Uuid?",
            "summary": "The uuid, or null."
          },
          "summary": "The uuid of a player name (case-insensitive) that the server remembers; null when it does not know the name.",
          "documented": true,
          "url": "/reference/api/players/offlineplayers/#find"
        },
        {
          "name": "Get",
          "kind": "method",
          "signature": "public static OfflineProfile? Get(Uuid uuid)",
          "static": true,
          "parameters": [
            {
              "name": "uuid",
              "type": "Uuid",
              "summary": "The uuid."
            }
          ],
          "returns": {
            "type": "OfflineProfile?",
            "summary": "The profile, or null when the server has never seen the uuid."
          },
          "summary": "The profile of a uuid the server knows, online or not (online players have their newer state in the player's own handle).",
          "documented": true,
          "url": "/reference/api/players/offlineplayers/#get"
        }
      ]
    },
    {
      "name": "OfflineProfile",
      "fullName": "Mc.Scripting.OfflineProfile",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "players",
      "categoryLabel": "Players",
      "signature": "public sealed class OfflineProfile : IEquatable<OfflineProfile>",
      "interfaces": [
        "IEquatable<OfflineProfile>"
      ],
      "summary": "What the server knows about a player who is not online: the name, the first join and the last time seen (both from the server's records; null when unknown), and the position in the saved player data (null when there is no saved data).",
      "url": "/reference/api/players/offlineprofile/",
      "members": [
        {
          "name": "OfflineProfile",
          "kind": "ctor",
          "signature": "public OfflineProfile(Uuid Id, string Name, DateTimeOffset? FirstJoin, DateTimeOffset? LastSeen, string? Dimension, Vec3d? Position, float Yaw, float Pitch)",
          "parameters": [
            {
              "name": "Id",
              "type": "Uuid",
              "summary": "The uuid."
            },
            {
              "name": "Name",
              "type": "string",
              "summary": "The newest name the server has for the uuid."
            },
            {
              "name": "FirstJoin",
              "type": "DateTimeOffset?",
              "summary": "When the player first joined (null when unknown)."
            },
            {
              "name": "LastSeen",
              "type": "DateTimeOffset?",
              "summary": "When the player was last saved or left (null when unknown)."
            },
            {
              "name": "Dimension",
              "type": "string?",
              "summary": "The dimension key (\"minecraft:overworld\") the player was saved in; null without saved data."
            },
            {
              "name": "Position",
              "type": "Vec3d?",
              "summary": "The saved feet position; null without saved data."
            },
            {
              "name": "Yaw",
              "type": "float",
              "summary": "The saved yaw; 0 without saved data."
            },
            {
              "name": "Pitch",
              "type": "float",
              "summary": "The saved pitch; 0 without saved data."
            }
          ],
          "summary": "What the server knows about a player who is not online: the name, the first join and the last time seen (both from the server's records; null when unknown), and the position in the saved player data (null when there is no saved data).",
          "documented": true,
          "url": "/reference/api/players/offlineprofile/#constructor"
        },
        {
          "name": "Dimension",
          "kind": "property",
          "signature": "public string? Dimension { get; init; }",
          "returns": {
            "type": "string?"
          },
          "summary": "The dimension key (\"minecraft:overworld\") the player was saved in; null without saved data.",
          "documented": true,
          "url": "/reference/api/players/offlineprofile/#dimension"
        },
        {
          "name": "FirstJoin",
          "kind": "property",
          "signature": "public DateTimeOffset? FirstJoin { get; init; }",
          "returns": {
            "type": "DateTimeOffset?"
          },
          "summary": "When the player first joined (null when unknown).",
          "documented": true,
          "url": "/reference/api/players/offlineprofile/#firstjoin"
        },
        {
          "name": "Id",
          "kind": "property",
          "signature": "public Uuid Id { get; init; }",
          "returns": {
            "type": "Uuid"
          },
          "summary": "The uuid.",
          "documented": true,
          "url": "/reference/api/players/offlineprofile/#id"
        },
        {
          "name": "LastSeen",
          "kind": "property",
          "signature": "public DateTimeOffset? LastSeen { get; init; }",
          "returns": {
            "type": "DateTimeOffset?"
          },
          "summary": "When the player was last saved or left (null when unknown).",
          "documented": true,
          "url": "/reference/api/players/offlineprofile/#lastseen"
        },
        {
          "name": "Name",
          "kind": "property",
          "signature": "public string Name { get; init; }",
          "returns": {
            "type": "string"
          },
          "summary": "The newest name the server has for the uuid.",
          "documented": true,
          "url": "/reference/api/players/offlineprofile/#name"
        },
        {
          "name": "Pitch",
          "kind": "property",
          "signature": "public float Pitch { get; init; }",
          "returns": {
            "type": "float"
          },
          "summary": "The saved pitch; 0 without saved data.",
          "documented": true,
          "url": "/reference/api/players/offlineprofile/#pitch"
        },
        {
          "name": "Position",
          "kind": "property",
          "signature": "public Vec3d? Position { get; init; }",
          "returns": {
            "type": "Vec3d?"
          },
          "summary": "The saved feet position; null without saved data.",
          "documented": true,
          "url": "/reference/api/players/offlineprofile/#position"
        },
        {
          "name": "Yaw",
          "kind": "property",
          "signature": "public float Yaw { get; init; }",
          "returns": {
            "type": "float"
          },
          "summary": "The saved yaw; 0 without saved data.",
          "documented": true,
          "url": "/reference/api/players/offlineprofile/#yaw"
        }
      ]
    },
    {
      "name": "PacketBase",
      "fullName": "Mc.Scripting.PacketBase",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "packets",
      "categoryLabel": "Packets",
      "signature": "public abstract class PacketBase",
      "summary": "Base of every typed packet (the generated classes derive from it). The wire form is the packet's fields in declaration order; the engine decodes and validates them (src/scripting/ipc/packets.g.cpp). Plugins read and write the public fields.",
      "url": "/reference/api/packets/packetbase/",
      "members": [
        {
          "name": "PacketBase",
          "kind": "ctor",
          "signature": "protected PacketBase()",
          "documented": false,
          "url": "/reference/api/packets/packetbase/#constructor"
        },
        {
          "name": "PacketIndex",
          "kind": "property",
          "signature": "public abstract int PacketIndex { get; }",
          "abstract": true,
          "returns": {
            "type": "int"
          },
          "summary": "The packet's index in the engine's catalogue (its class has the constant Index).",
          "documented": true,
          "url": "/reference/api/packets/packetbase/#packetindex"
        }
      ]
    },
    {
      "name": "PacketEvent<T>",
      "fullName": "Mc.Scripting.PacketEvent`1",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "packets",
      "categoryLabel": "Packets",
      "signature": "public sealed class PacketEvent<T> where T : PacketBase",
      "typeParameters": [
        "T"
      ],
      "summary": "One packet handed to a handler. In intercept mode the handler may change `PacketEvent.Packet` and call `PacketEvent.Cancel`.",
      "url": "/reference/api/packets/packetevent-1/",
      "members": [
        {
          "name": "Cancelled",
          "kind": "property",
          "signature": "public bool Cancelled { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "True once a handler cancelled the packet.",
          "documented": true,
          "url": "/reference/api/packets/packetevent-1/#cancelled"
        },
        {
          "name": "Packet",
          "kind": "property",
          "signature": "public T Packet { get; }",
          "returns": {
            "type": "T"
          },
          "summary": "The packet. Changing its fields changes what goes on (the engine validates the new values like any other).",
          "documented": true,
          "url": "/reference/api/packets/packetevent-1/#packet"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player the packet is from (serverbound) or to (clientbound).",
          "documented": true,
          "url": "/reference/api/packets/packetevent-1/#player"
        },
        {
          "name": "Cancel",
          "kind": "method",
          "signature": "public void Cancel()",
          "summary": "Stops the packet: a serverbound packet's handler does not run, a clientbound packet is not sent. Only in intercept mode; an observer's cancel is ignored.",
          "documented": true,
          "url": "/reference/api/packets/packetevent-1/#cancel"
        }
      ]
    },
    {
      "name": "PacketMode",
      "fullName": "Mc.Scripting.PacketMode",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "packets",
      "categoryLabel": "Packets",
      "signature": "public enum PacketMode : int",
      "summary": "How a packet handler is called (see `Packets.On`,Mc.Scripting.PacketMode,Mc.Scripting.EventPriority)}}).",
      "url": "/reference/api/packets/packetmode/",
      "members": [
        {
          "name": "Observe",
          "kind": "enumMember",
          "signature": "Observe = 0",
          "value": "0",
          "summary": "A copy of the packet after the fact: the handler cannot change or cancel it, and nothing waits for it.",
          "documented": true,
          "url": "/reference/api/packets/packetmode/#observe"
        },
        {
          "name": "Intercept",
          "kind": "enumMember",
          "signature": "Intercept = 1",
          "value": "1",
          "summary": "The handler runs before the packet goes on and may cancel it or change its fields. The engine waits for the answer within a small budget; when none comes in time the packet goes on unchanged.",
          "documented": true,
          "url": "/reference/api/packets/packetmode/#intercept"
        }
      ]
    },
    {
      "name": "PacketSendStatus",
      "fullName": "Mc.Scripting.PacketSendStatus",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "packets",
      "categoryLabel": "Packets",
      "signature": "public enum PacketSendStatus : int",
      "summary": "What `Packets.Send` did with the packet.",
      "url": "/reference/api/packets/packetsendstatus/",
      "members": [
        {
          "name": "Sent",
          "kind": "enumMember",
          "signature": "Sent = 0",
          "value": "0",
          "summary": "The packet is in the player's stream, in order with the engine's packets of the tick.",
          "documented": true,
          "url": "/reference/api/packets/packetsendstatus/#sent"
        },
        {
          "name": "Refused",
          "kind": "enumMember",
          "signature": "Refused = 1",
          "value": "1",
          "summary": "The packet was refused: a value out of range, an unknown registry id, an entity id this plugin may not name, or a packet the engine does not send to players.",
          "documented": true,
          "url": "/reference/api/packets/packetsendstatus/#refused"
        },
        {
          "name": "NotInPlay",
          "kind": "enumMember",
          "signature": "NotInPlay = 2",
          "value": "2",
          "summary": "The player is not in play (nothing was sent).",
          "documented": true,
          "url": "/reference/api/packets/packetsendstatus/#notinplay"
        },
        {
          "name": "OverBudget",
          "kind": "enumMember",
          "signature": "OverBudget = 3",
          "value": "3",
          "summary": "The player's (or the server's) byte budget for plugin packets of this tick is spent (nothing was sent).",
          "documented": true,
          "url": "/reference/api/packets/packetsendstatus/#overbudget"
        },
        {
          "name": "NotAvailable",
          "kind": "enumMember",
          "signature": "NotAvailable = 4",
          "value": "4",
          "summary": "The engine does not carry packets here (the in-process runtime, a test fixture): nothing was sent.",
          "documented": true,
          "url": "/reference/api/packets/packetsendstatus/#notavailable"
        }
      ]
    },
    {
      "name": "Packets",
      "fullName": "Mc.Scripting.Packets",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "packets",
      "categoryLabel": "Packets",
      "signature": "public static class Packets",
      "summary": "Typed packets: send a packet to a player, and observe, change or cancel the packets players send and the ones sent to them. The engine encodes every packet with its own codecs, so nothing malformed reaches a client. Remote mode only (the worker process). docs/agents/scripting.md, \"Packets\"; the ProtocolLib / PacketEvents equivalents are listed there.",
      "url": "/reference/api/packets/packets/",
      "members": [
        {
          "name": "AllocateEntityId",
          "kind": "method",
          "signature": "public static int AllocateEntityId()",
          "static": true,
          "returns": {
            "type": "int"
          },
          "summary": "A new entity id for a fake entity (an AddEntity of this plugin). The ids are reserved for plugins, so they never collide with a real entity. Release it with `Packets.ReleaseEntityId` when the client should forget it. 0 when none is available.",
          "documented": true,
          "url": "/reference/api/packets/packets/#allocateentityid"
        },
        {
          "name": "On",
          "kind": "method",
          "signature": "public static IDisposable On<T>(Action<PacketEvent<T>> handler, PacketMode mode = PacketMode.Observe, EventPriority priority = EventPriority.Normal) where T : PacketBase, new()",
          "static": true,
          "parameters": [
            {
              "name": "handler",
              "type": "Action<PacketEvent<T>>"
            },
            {
              "name": "mode",
              "type": "PacketMode",
              "default": "PacketMode.Observe"
            },
            {
              "name": "priority",
              "type": "EventPriority",
              "default": "EventPriority.Normal"
            }
          ],
          "returns": {
            "type": "IDisposable"
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : PacketBase, new()"
          ],
          "summary": "Subscribes to one packet type. In `PacketMode.Observe` the handler sees a copy of each packet; in `PacketMode.Intercept` it may cancel the packet or change its fields. Handlers run in priority order (lowest first). Returns the subscription: dispose it to unsubscribe (also done when the plugin unloads).",
          "throws": [
            {
              "type": "System.InvalidOperationException",
              "summary": "The packet cannot be observed or intercepted (its catalogue row has no such hook)."
            }
          ],
          "documented": true,
          "url": "/reference/api/packets/packets/#ont"
        },
        {
          "name": "ReleaseEntityId",
          "kind": "method",
          "signature": "public static bool ReleaseEntityId(int id)",
          "static": true,
          "parameters": [
            {
              "name": "id",
              "type": "int"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Gives back an id from `Packets.AllocateEntityId`. False when this plugin does not hold it.",
          "documented": true,
          "url": "/reference/api/packets/packets/#releaseentityid"
        },
        {
          "name": "Send",
          "kind": "method",
          "signature": "public static PacketSendStatus Send(Player player, PacketBase packet)",
          "static": true,
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "packet",
              "type": "PacketBase"
            }
          ],
          "returns": {
            "type": "PacketSendStatus"
          },
          "summary": "Sends a packet to a player. The packet is encoded by the engine, after the engine checks its values (ranges, registry ids, entity ids: an entity a plugin creates needs `Packets.AllocateEntityId`). It is written in order with the engine's own packets of the tick.",
          "documented": true,
          "url": "/reference/api/packets/packets/#send"
        },
        {
          "name": "SendPacket",
          "kind": "method",
          "signature": "public static PacketSendStatus SendPacket(Player player, PacketBase packet)",
          "static": true,
          "parameters": [
            {
              "name": "player",
              "type": "Player"
            },
            {
              "name": "packet",
              "type": "PacketBase"
            }
          ],
          "returns": {
            "type": "PacketSendStatus"
          },
          "summary": "Shorthand for `Packets.Send`: `player.SendPacket(new Packets.Clientbound.AddEntity { ... })`.",
          "documented": true,
          "url": "/reference/api/packets/packets/#sendpacket"
        }
      ]
    },
    {
      "name": "Particle",
      "fullName": "Mc.Scripting.Particle",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "players",
      "categoryLabel": "Players",
      "signature": "public static class Particle",
      "summary": "Helpers for the textual particle descriptions `Player.SpawnParticle` takes (the same syntax as the `/particle` command).",
      "url": "/reference/api/players/particle/",
      "members": [
        {
          "name": "Block",
          "kind": "method",
          "signature": "public static string Block(BlockState state)",
          "static": true,
          "parameters": [
            {
              "name": "state",
              "type": "BlockState",
              "summary": "The block state."
            }
          ],
          "returns": {
            "type": "string"
          },
          "summary": "Block breaking particles of a block state.",
          "documented": true,
          "url": "/reference/api/players/particle/#block"
        },
        {
          "name": "Dust",
          "kind": "method",
          "signature": "public static string Dust(float red, float green, float blue, float scale = 1f)",
          "static": true,
          "parameters": [
            {
              "name": "red",
              "type": "float",
              "summary": "Red, 0-1."
            },
            {
              "name": "green",
              "type": "float",
              "summary": "Green, 0-1."
            },
            {
              "name": "blue",
              "type": "float",
              "summary": "Blue, 0-1."
            },
            {
              "name": "scale",
              "type": "float",
              "default": "1f",
              "summary": "Size, 0.01-4."
            }
          ],
          "returns": {
            "type": "string"
          },
          "summary": "A coloured dust particle.",
          "documented": true,
          "url": "/reference/api/players/particle/#dust"
        },
        {
          "name": "Of",
          "kind": "method",
          "signature": "public static string Of(string key)",
          "static": true,
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The key; \"minecraft:\" is assumed when there is no namespace."
            }
          ],
          "returns": {
            "type": "string"
          },
          "summary": "A particle by its registry key (`minecraft:flame`, `happy_villager`, ...).",
          "documented": true,
          "url": "/reference/api/players/particle/#of"
        }
      ]
    },
    {
      "name": "FilePermissionProvider",
      "fullName": "Mc.Scripting.Permissions.FilePermissionProvider",
      "namespace": "Mc.Scripting.Permissions",
      "kind": "class",
      "category": "permissions",
      "categoryLabel": "Permissions",
      "signature": "public sealed class FilePermissionProvider : IPermissionProvider",
      "interfaces": [
        "IPermissionProvider"
      ],
      "summary": "The built-in backend: groups (weighted, inheriting, with prefix and suffix) and per-player overrides, stored in `permissions.json`. Resolution order: the player's own entries, then his groups by weight (highest first, parents after their child), then the implicit \"default\" group everybody belongs to. Within one layer the most specific node wins: an exact entry beats `a.b.*`, a longer wildcard beats a shorter one, `*` comes last; a `false` value is a denial. A key written as `\"-node\"` in the file means the same as `\"node\": false`.",
      "url": "/reference/api/permissions/filepermissionprovider/",
      "members": [
        {
          "name": "FilePermissionProvider",
          "kind": "ctor",
          "signature": "public FilePermissionProvider(string path)",
          "parameters": [
            {
              "name": "path",
              "type": "string",
              "summary": "The file path."
            }
          ],
          "summary": "Opens (and creates, when missing) the permission file. A file that cannot be read (malformed JSON) does not stop the server: the provider starts empty (the registered defaults apply), logs the problem once and leaves the file alone so that it can be fixed and reloaded with `FilePermissionProvider.Reload`.",
          "documented": true,
          "url": "/reference/api/permissions/filepermissionprovider/#constructor"
        },
        {
          "name": "GroupNames",
          "kind": "property",
          "signature": "public IReadOnlyList<string> GroupNames { get; }",
          "returns": {
            "type": "IReadOnlyList<string>"
          },
          "summary": "The group names.",
          "documented": true,
          "url": "/reference/api/permissions/filepermissionprovider/#groupnames"
        },
        {
          "name": "LoadError",
          "kind": "property",
          "signature": "public string? LoadError { get; }",
          "returns": {
            "type": "string?"
          },
          "summary": "Why the file could not be read (null when it was, or since it was fixed and reloaded).",
          "documented": true,
          "url": "/reference/api/permissions/filepermissionprovider/#loaderror"
        },
        {
          "name": "Name",
          "kind": "property",
          "signature": "public string Name { get; }",
          "returns": {
            "type": "string"
          },
          "documented": false,
          "url": "/reference/api/permissions/filepermissionprovider/#name"
        },
        {
          "name": "AddToGroup",
          "kind": "method",
          "signature": "public void AddToGroup(Uuid player, string group, string? name = null)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player's profile id."
            },
            {
              "name": "group",
              "type": "string",
              "summary": "The group (must exist)."
            },
            {
              "name": "name",
              "type": "string?",
              "default": "null",
              "summary": "The player's name, stored for readability of the file."
            }
          ],
          "summary": "Adds the player to a group.",
          "documented": true,
          "url": "/reference/api/permissions/filepermissionprovider/#addtogroup"
        },
        {
          "name": "CreateGroup",
          "kind": "method",
          "signature": "public void CreateGroup(string name, int weight = 0)",
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The group name."
            },
            {
              "name": "weight",
              "type": "int",
              "default": "0",
              "summary": "Higher weights win over lower ones when groups disagree."
            }
          ],
          "summary": "Creates a group (no-op when it exists).",
          "documented": true,
          "url": "/reference/api/permissions/filepermissionprovider/#creategroup"
        },
        {
          "name": "DeleteGroup",
          "kind": "method",
          "signature": "public bool DeleteGroup(string name)",
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The group name (\"default\" cannot be deleted)."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "Whether the group existed."
          },
          "summary": "Deletes a group and removes it from every player and parent list.",
          "documented": true,
          "url": "/reference/api/permissions/filepermissionprovider/#deletegroup"
        },
        {
          "name": "Get",
          "kind": "method",
          "signature": "public PermissionValue Get(Uuid player, string node)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid"
            },
            {
              "name": "node",
              "type": "string"
            }
          ],
          "returns": {
            "type": "PermissionValue"
          },
          "documented": false,
          "url": "/reference/api/permissions/filepermissionprovider/#get"
        },
        {
          "name": "GetPrefix",
          "kind": "method",
          "signature": "public string GetPrefix(Uuid player)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player."
            }
          ],
          "returns": {
            "type": "string",
            "summary": "The prefix text."
          },
          "summary": "The prefix of the player's highest-weight group that has one (empty if none).",
          "documented": true,
          "url": "/reference/api/permissions/filepermissionprovider/#getprefix"
        },
        {
          "name": "GetSuffix",
          "kind": "method",
          "signature": "public string GetSuffix(Uuid player)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player."
            }
          ],
          "returns": {
            "type": "string",
            "summary": "The suffix text."
          },
          "summary": "The suffix of the player's highest-weight group that has one (empty if none).",
          "documented": true,
          "url": "/reference/api/permissions/filepermissionprovider/#getsuffix"
        },
        {
          "name": "GroupEntries",
          "kind": "method",
          "signature": "public IReadOnlyDictionary<string, bool> GroupEntries(string group)",
          "parameters": [
            {
              "name": "group",
              "type": "string",
              "summary": "The group."
            }
          ],
          "returns": {
            "type": "IReadOnlyDictionary<string, bool>",
            "summary": "A snapshot of node -> value (empty for an unknown group)."
          },
          "summary": "The explicit entries of a group, for admin tools.",
          "documented": true,
          "url": "/reference/api/permissions/filepermissionprovider/#groupentries"
        },
        {
          "name": "Groups",
          "kind": "method",
          "signature": "public IReadOnlyCollection<string> Groups(Uuid player)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid"
            }
          ],
          "returns": {
            "type": "IReadOnlyCollection<string>"
          },
          "documented": false,
          "url": "/reference/api/permissions/filepermissionprovider/#groups"
        },
        {
          "name": "PlayerEntries",
          "kind": "method",
          "signature": "public IReadOnlyDictionary<string, bool> PlayerEntries(Uuid player)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player."
            }
          ],
          "returns": {
            "type": "IReadOnlyDictionary<string, bool>",
            "summary": "A snapshot of node -> value."
          },
          "summary": "The explicit entries of a player (without groups), for admin tools.",
          "documented": true,
          "url": "/reference/api/permissions/filepermissionprovider/#playerentries"
        },
        {
          "name": "Reload",
          "kind": "method",
          "signature": "public void Reload()",
          "summary": "Re-reads the file (a missing file is created with a \"default\" and an \"admin\" group).",
          "throws": [
            {
              "type": "System.IO.InvalidDataException",
              "summary": "The file is not valid JSON; the permissions in memory stay as they were."
            }
          ],
          "documented": true,
          "url": "/reference/api/permissions/filepermissionprovider/#reload"
        },
        {
          "name": "RemoveFromGroup",
          "kind": "method",
          "signature": "public bool RemoveFromGroup(Uuid player, string group)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player's profile id."
            },
            {
              "name": "group",
              "type": "string",
              "summary": "The group."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "Whether he was a member."
          },
          "summary": "Removes the player from a group.",
          "documented": true,
          "url": "/reference/api/permissions/filepermissionprovider/#removefromgroup"
        },
        {
          "name": "Save",
          "kind": "method",
          "signature": "public void Save()",
          "summary": "Writes the file if something changed. The engine writes it (a host call: the worker's sandbox refuses writes to the server folder), atomically (temp file, flushed, then renamed over the old one). The engine refuses a write that comes too soon after the last one (its rate limit): then the changes stay pending and the next call (the runtime's flush, a second later) tries again. Never throws; a refusal is logged once per streak.",
          "documented": true,
          "url": "/reference/api/permissions/filepermissionprovider/#save"
        },
        {
          "name": "SetGroupMeta",
          "kind": "method",
          "signature": "public void SetGroupMeta(string group, string prefix, string suffix)",
          "parameters": [
            {
              "name": "group",
              "type": "string",
              "summary": "The group."
            },
            {
              "name": "prefix",
              "type": "string",
              "summary": "The prefix."
            },
            {
              "name": "suffix",
              "type": "string",
              "summary": "The suffix."
            }
          ],
          "summary": "Sets prefix and suffix text of a group (metadata for chat plugins).",
          "documented": true,
          "url": "/reference/api/permissions/filepermissionprovider/#setgroupmeta"
        },
        {
          "name": "SetGroupParents",
          "kind": "method",
          "signature": "public void SetGroupParents(string group, IEnumerable<string> parents)",
          "parameters": [
            {
              "name": "group",
              "type": "string",
              "summary": "The group."
            },
            {
              "name": "parents",
              "type": "IEnumerable<string>",
              "summary": "The parent groups (cycles are ignored when evaluating)."
            }
          ],
          "summary": "Sets the groups a group inherits from.",
          "documented": true,
          "url": "/reference/api/permissions/filepermissionprovider/#setgroupparents"
        },
        {
          "name": "SetGroupPermission",
          "kind": "method",
          "signature": "public void SetGroupPermission(string group, string node, bool? value)",
          "parameters": [
            {
              "name": "group",
              "type": "string",
              "summary": "The group."
            },
            {
              "name": "node",
              "type": "string",
              "summary": "The node (wildcards allowed)."
            },
            {
              "name": "value",
              "type": "bool?",
              "summary": "The value, or null to remove the entry."
            }
          ],
          "summary": "Sets (true/false) or removes (null) a permission entry of a group.",
          "documented": true,
          "url": "/reference/api/permissions/filepermissionprovider/#setgrouppermission"
        },
        {
          "name": "SetPlayerPermission",
          "kind": "method",
          "signature": "public void SetPlayerPermission(Uuid player, string node, bool? value, string? name = null)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player's profile id."
            },
            {
              "name": "node",
              "type": "string",
              "summary": "The node (wildcards allowed)."
            },
            {
              "name": "value",
              "type": "bool?",
              "summary": "The value, or null to remove the entry."
            },
            {
              "name": "name",
              "type": "string?",
              "default": "null",
              "summary": "The player's name, stored for readability of the file."
            }
          ],
          "summary": "Sets (true/false) or removes (null) a permission entry of a player.",
          "documented": true,
          "url": "/reference/api/permissions/filepermissionprovider/#setplayerpermission"
        },
        {
          "name": "Changed",
          "kind": "event",
          "signature": "public event Action<Uuid?>? Changed;",
          "returns": {
            "type": "Action<Uuid?>?"
          },
          "documented": false,
          "url": "/reference/api/permissions/filepermissionprovider/#changed"
        }
      ]
    },
    {
      "name": "IPermissionProvider",
      "fullName": "Mc.Scripting.Permissions.IPermissionProvider",
      "namespace": "Mc.Scripting.Permissions",
      "kind": "interface",
      "category": "permissions",
      "categoryLabel": "Permissions",
      "signature": "public interface IPermissionProvider",
      "summary": "A permission backend: answers \"does this player have this node?\" with an explicit value or no opinion. Implement it to replace the built-in file-based backend (for example with a database or a LuckPerms-style system) and install it with `PermissionManager.SetProvider`.",
      "url": "/reference/api/permissions/ipermissionprovider/",
      "members": [
        {
          "name": "Name",
          "kind": "property",
          "signature": "string Name { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "A short name for logs and admin tools.",
          "documented": true,
          "url": "/reference/api/permissions/ipermissionprovider/#name"
        },
        {
          "name": "Get",
          "kind": "method",
          "signature": "PermissionValue Get(Uuid player, string node)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player's profile id."
            },
            {
              "name": "node",
              "type": "string",
              "summary": "The dotted permission node."
            }
          ],
          "returns": {
            "type": "PermissionValue",
            "summary": "The value."
          },
          "summary": "The explicit value of `node` for the player: wildcards (`a.b.*`, `*`) and groups are the provider's business. Return `PermissionValue.Unset` when nothing matches, so the node's registered default decides.",
          "documented": true,
          "url": "/reference/api/permissions/ipermissionprovider/#get"
        },
        {
          "name": "Groups",
          "kind": "method",
          "signature": "IReadOnlyCollection<string> Groups(Uuid player)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player's profile id."
            }
          ],
          "returns": {
            "type": "IReadOnlyCollection<string>",
            "summary": "The group names."
          },
          "summary": "The names of the groups the player belongs to (for display and admin commands).",
          "documented": true,
          "url": "/reference/api/permissions/ipermissionprovider/#groups"
        },
        {
          "name": "Changed",
          "kind": "event",
          "signature": "public event Action<Uuid?>? Changed;",
          "returns": {
            "type": "Action<Uuid?>?"
          },
          "summary": "Raised when permissions changed (the player's id, or null when a group or everything changed): the server refreshes the command trees.",
          "documented": true,
          "url": "/reference/api/permissions/ipermissionprovider/#changed"
        }
      ]
    },
    {
      "name": "NativePermissionTable",
      "fullName": "Mc.Scripting.Permissions.NativePermissionTable",
      "namespace": "Mc.Scripting.Permissions",
      "kind": "class",
      "category": "permissions",
      "categoryLabel": "Permissions",
      "signature": "public static class NativePermissionTable",
      "summary": "Feeds the engine's permission table (docs/agents/permissions.md): declares node defaults, sets and changes the rules of a player, claims the table, and reads its statistics. The engine validates every message as a whole; a refused message changes nothing (the status is the host call's: 0 applied, -1 malformed, -2 oversize, -3 refused, -4 version gap, -5 unknown kind). While a claim is held the engine answers the permission requirements of commands from the table; the rules describe a player's permissions, and a player whose rules were never sent gets the defaults.",
      "url": "/reference/api/permissions/nativepermissiontable/",
      "members": [
        {
          "name": "Any",
          "kind": "field",
          "signature": "public const byte Any = 255;",
          "static": true,
          "returns": {
            "type": "byte"
          },
          "summary": "The wildcard of a context position.",
          "documented": true,
          "url": "/reference/api/permissions/nativepermissiontable/#any"
        },
        {
          "name": "MaxMessageBytes",
          "kind": "field",
          "signature": "public const int MaxMessageBytes = 262144;",
          "static": true,
          "returns": {
            "type": "int"
          },
          "summary": "The largest message the engine accepts.",
          "documented": true,
          "url": "/reference/api/permissions/nativepermissiontable/#maxmessagebytes"
        },
        {
          "name": "MaxRulesPerMessage",
          "kind": "field",
          "signature": "public const int MaxRulesPerMessage = 512;",
          "static": true,
          "returns": {
            "type": "int"
          },
          "summary": "Rules in one message (a larger subject is sent with delta messages).",
          "documented": true,
          "url": "/reference/api/permissions/nativepermissiontable/#maxrulespermessage"
        },
        {
          "name": "Apply",
          "kind": "method",
          "signature": "public static int Apply(byte[] message)",
          "static": true,
          "parameters": [
            {
              "name": "message",
              "type": "byte[]",
              "summary": "The message."
            }
          ],
          "returns": {
            "type": "int",
            "summary": "0 when applied, else a negative status (see the type's remarks)."
          },
          "summary": "Applies a message built by one of the functions below.",
          "documented": true,
          "url": "/reference/api/permissions/nativepermissiontable/#apply"
        },
        {
          "name": "BeginSnapshot",
          "kind": "method",
          "signature": "public static byte[] BeginSnapshot()",
          "static": true,
          "returns": {
            "type": "byte[]",
            "summary": "The message."
          },
          "summary": "Starts a full resynchronisation (after a worker start): every subject sent before `NativePermissionTable.EndSnapshot` is kept, the others are dropped at the end. Until then the last state keeps answering.",
          "documented": true,
          "url": "/reference/api/permissions/nativepermissiontable/#beginsnapshot"
        },
        {
          "name": "Claim",
          "kind": "method",
          "signature": "public static bool Claim(bool on)",
          "static": true,
          "parameters": [
            {
              "name": "on",
              "type": "bool"
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when the engine accepted the change."
          },
          "summary": "Claims (true) or releases (false) the table. Releasing returns command requirements to the built-in backend.",
          "documented": true,
          "url": "/reference/api/permissions/nativepermissiontable/#claim"
        },
        {
          "name": "Declare",
          "kind": "method",
          "signature": "public static bool Declare(Permission permission)",
          "static": true,
          "parameters": [
            {
              "name": "permission",
              "type": "Permission",
              "summary": "The node."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when the engine has the node."
          },
          "summary": "Declares a node's defaults for its five operator levels (what the node answers for a subject without a rule). Called by the server for every registered permission node; a plugin does not need it for nodes it registers through `PermissionManager.Register`.",
          "documented": true,
          "url": "/reference/api/permissions/nativepermissiontable/#declare"
        },
        {
          "name": "DeltaSubject",
          "kind": "method",
          "signature": "public static byte[] DeltaSubject(Uuid subject, uint baseVersion, uint version, IReadOnlyList<ValueTuple<bool, NativeRule>> changes)",
          "static": true,
          "parameters": [
            {
              "name": "subject",
              "type": "Uuid",
              "summary": "The player's profile id."
            },
            {
              "name": "baseVersion",
              "type": "uint",
              "summary": "The version the subject has now."
            },
            {
              "name": "version",
              "type": "uint",
              "summary": "The version after this message."
            },
            {
              "name": "changes",
              "type": "IReadOnlyList<ValueTuple<bool, NativeRule>>",
              "summary": "Upserts (true: replaces the rule with the same node, layer and context, or adds it) and removals (false: the rule with the same node, layer and context is removed)."
            }
          ],
          "returns": {
            "type": "byte[]",
            "summary": "The message."
          },
          "summary": "Upserts or removes rules of a subject whose version is `baseVersion`; the engine refuses a delta on any other version (-4) and then the subject needs {{cref:M:Mc.Scripting.Permissions.NativePermissionTable.SetSubject(Mc.Scripting.Uuid,System.UInt32,System.Byte,System.Byte,System.Collections.Generic.IReadOnlyList{Mc.Scripting.Permissions.NativeRule})}}.",
          "documented": true,
          "url": "/reference/api/permissions/nativepermissiontable/#deltasubject"
        },
        {
          "name": "DropSubject",
          "kind": "method",
          "signature": "public static byte[] DropSubject(Uuid subject)",
          "static": true,
          "parameters": [
            {
              "name": "subject",
              "type": "Uuid",
              "summary": "The player's profile id."
            }
          ],
          "returns": {
            "type": "byte[]",
            "summary": "The message."
          },
          "summary": "Drops a subject's state (a player who left; the engine frees it).",
          "documented": true,
          "url": "/reference/api/permissions/nativepermissiontable/#dropsubject"
        },
        {
          "name": "EndSnapshot",
          "kind": "method",
          "signature": "public static byte[] EndSnapshot()",
          "static": true,
          "returns": {
            "type": "byte[]",
            "summary": "The message."
          },
          "summary": "Ends a full resynchronisation (see `NativePermissionTable.BeginSnapshot`).",
          "documented": true,
          "url": "/reference/api/permissions/nativepermissiontable/#endsnapshot"
        },
        {
          "name": "SetSlots",
          "kind": "method",
          "signature": "public static byte[] SetSlots(Uuid subject, byte slot0, byte slot1)",
          "static": true,
          "parameters": [
            {
              "name": "subject",
              "type": "Uuid",
              "summary": "The player's profile id."
            },
            {
              "name": "slot0",
              "type": "byte",
              "summary": "The first slot value."
            },
            {
              "name": "slot1",
              "type": "byte",
              "summary": "The second slot value."
            }
          ],
          "returns": {
            "type": "byte[]",
            "summary": "The message."
          },
          "summary": "Sets a subject's plugin context slot values without touching its rules.",
          "documented": true,
          "url": "/reference/api/permissions/nativepermissiontable/#setslots"
        },
        {
          "name": "SetSubject",
          "kind": "method",
          "signature": "public static byte[] SetSubject(Uuid subject, uint version, byte slot0, byte slot1, IReadOnlyList<NativeRule> rules)",
          "static": true,
          "parameters": [
            {
              "name": "subject",
              "type": "Uuid",
              "summary": "The player's profile id."
            },
            {
              "name": "version",
              "type": "uint",
              "summary": "The subject's version after this message; a delta must name it as its base."
            },
            {
              "name": "slot0",
              "type": "byte",
              "summary": "The value of the first plugin context slot of the subject (`NativePermissionTable.Any` when unknown)."
            },
            {
              "name": "slot1",
              "type": "byte",
              "summary": "The value of the second plugin context slot."
            },
            {
              "name": "rules",
              "type": "IReadOnlyList<NativeRule>",
              "summary": "The rules."
            }
          ],
          "returns": {
            "type": "byte[]",
            "summary": "The message."
          },
          "summary": "Replaces every rule of a subject (at most `NativePermissionTable.MaxRulesPerMessage` of them).",
          "documented": true,
          "url": "/reference/api/permissions/nativepermissiontable/#setsubject"
        },
        {
          "name": "Stats",
          "kind": "method",
          "signature": "public static NativeTableStats? Stats()",
          "static": true,
          "returns": {
            "type": "NativeTableStats?",
            "summary": "The values, or null when the host does not answer."
          },
          "summary": "The table's counters (the engine's `perm_stats`).",
          "documented": true,
          "url": "/reference/api/permissions/nativepermissiontable/#stats"
        },
        {
          "name": "WriteBuiltin",
          "kind": "method",
          "signature": "public static bool WriteBuiltin(string json)",
          "static": true,
          "parameters": [
            {
              "name": "json",
              "type": "string",
              "summary": "One JSON object."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when the engine wrote it."
          },
          "summary": "Writes the built-in backend's file (permissions.json) through the engine: the worker's own sandbox refuses the write.",
          "documented": true,
          "url": "/reference/api/permissions/nativepermissiontable/#writebuiltin"
        }
      ]
    },
    {
      "name": "NativeRule",
      "fullName": "Mc.Scripting.Permissions.NativeRule",
      "namespace": "Mc.Scripting.Permissions",
      "kind": "struct",
      "category": "permissions",
      "categoryLabel": "Permissions",
      "signature": "public readonly struct NativeRule : IEquatable<NativeRule>",
      "interfaces": [
        "IEquatable<NativeRule>"
      ],
      "summary": "A rule of the engine's permission table: a node or pattern over a context pattern, with a layer and a value.",
      "url": "/reference/api/permissions/nativerule/",
      "members": [
        {
          "name": "NativeRule",
          "kind": "ctor",
          "signature": "public NativeRule(string Node, bool Allow, ushort Layer = 0, byte[]? Context = null)",
          "parameters": [
            {
              "name": "Node",
              "type": "string",
              "summary": "The node or a pattern: \"homes.use\", \"homes.*\", \"*\"."
            },
            {
              "name": "Allow",
              "type": "bool",
              "summary": "True grants the node, false denies it."
            },
            {
              "name": "Layer",
              "type": "ushort",
              "default": "0",
              "summary": "Lower layers win: 0 the player's own rules, then the groups by weight (highest first), then the default group."
            },
            {
              "name": "Context",
              "type": "byte[]?",
              "default": "null",
              "summary": "The six context positions (world, dimension, gamemode, server, slot 0, slot 1); `NativePermissionTable.Any` matches every value. Null means any in every position."
            }
          ],
          "summary": "A rule of the engine's permission table: a node or pattern over a context pattern, with a layer and a value.",
          "documented": true,
          "url": "/reference/api/permissions/nativerule/#constructor"
        },
        {
          "name": "Allow",
          "kind": "property",
          "signature": "public bool Allow { get; init; }",
          "returns": {
            "type": "bool"
          },
          "summary": "True grants the node, false denies it.",
          "documented": true,
          "url": "/reference/api/permissions/nativerule/#allow"
        },
        {
          "name": "Context",
          "kind": "property",
          "signature": "public byte[]? Context { get; init; }",
          "returns": {
            "type": "byte[]?"
          },
          "summary": "The six context positions (world, dimension, gamemode, server, slot 0, slot 1); `NativePermissionTable.Any` matches every value. Null means any in every position.",
          "documented": true,
          "url": "/reference/api/permissions/nativerule/#context"
        },
        {
          "name": "Layer",
          "kind": "property",
          "signature": "public ushort Layer { get; init; }",
          "returns": {
            "type": "ushort"
          },
          "summary": "Lower layers win: 0 the player's own rules, then the groups by weight (highest first), then the default group.",
          "documented": true,
          "url": "/reference/api/permissions/nativerule/#layer"
        },
        {
          "name": "Node",
          "kind": "property",
          "signature": "public string Node { get; init; }",
          "returns": {
            "type": "string"
          },
          "summary": "The node or a pattern: \"homes.use\", \"homes.*\", \"*\".",
          "documented": true,
          "url": "/reference/api/permissions/nativerule/#node"
        }
      ]
    },
    {
      "name": "NativeTableStats",
      "fullName": "Mc.Scripting.Permissions.NativeTableStats",
      "namespace": "Mc.Scripting.Permissions",
      "kind": "struct",
      "category": "permissions",
      "categoryLabel": "Permissions",
      "signature": "public readonly struct NativeTableStats : IEquatable<NativeTableStats>",
      "interfaces": [
        "IEquatable<NativeTableStats>"
      ],
      "summary": "The engine's permission table counters.",
      "url": "/reference/api/permissions/nativetablestats/",
      "members": [
        {
          "name": "NativeTableStats",
          "kind": "ctor",
          "signature": "public NativeTableStats(ulong Subjects, ulong Rules, ulong Nodes, ulong Applied, ulong Rejected, ulong Generation, int LastStatus, bool Claimed)",
          "parameters": [
            {
              "name": "Subjects",
              "type": "ulong",
              "summary": "Subjects with state."
            },
            {
              "name": "Rules",
              "type": "ulong",
              "summary": "Rules over all subjects."
            },
            {
              "name": "Nodes",
              "type": "ulong",
              "summary": "Interned names."
            },
            {
              "name": "Applied",
              "type": "ulong",
              "summary": "Messages applied."
            },
            {
              "name": "Rejected",
              "type": "ulong",
              "summary": "Messages refused."
            },
            {
              "name": "Generation",
              "type": "ulong",
              "summary": "Snapshot generations begun."
            },
            {
              "name": "LastStatus",
              "type": "int",
              "summary": "Status of the last message."
            },
            {
              "name": "Claimed",
              "type": "bool",
              "summary": "Whether the table is claimed."
            }
          ],
          "summary": "The engine's permission table counters.",
          "documented": true,
          "url": "/reference/api/permissions/nativetablestats/#constructor"
        },
        {
          "name": "Applied",
          "kind": "property",
          "signature": "public ulong Applied { get; init; }",
          "returns": {
            "type": "ulong"
          },
          "summary": "Messages applied.",
          "documented": true,
          "url": "/reference/api/permissions/nativetablestats/#applied"
        },
        {
          "name": "Claimed",
          "kind": "property",
          "signature": "public bool Claimed { get; init; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the table is claimed.",
          "documented": true,
          "url": "/reference/api/permissions/nativetablestats/#claimed"
        },
        {
          "name": "Generation",
          "kind": "property",
          "signature": "public ulong Generation { get; init; }",
          "returns": {
            "type": "ulong"
          },
          "summary": "Snapshot generations begun.",
          "documented": true,
          "url": "/reference/api/permissions/nativetablestats/#generation"
        },
        {
          "name": "LastStatus",
          "kind": "property",
          "signature": "public int LastStatus { get; init; }",
          "returns": {
            "type": "int"
          },
          "summary": "Status of the last message.",
          "documented": true,
          "url": "/reference/api/permissions/nativetablestats/#laststatus"
        },
        {
          "name": "Nodes",
          "kind": "property",
          "signature": "public ulong Nodes { get; init; }",
          "returns": {
            "type": "ulong"
          },
          "summary": "Interned names.",
          "documented": true,
          "url": "/reference/api/permissions/nativetablestats/#nodes"
        },
        {
          "name": "Rejected",
          "kind": "property",
          "signature": "public ulong Rejected { get; init; }",
          "returns": {
            "type": "ulong"
          },
          "summary": "Messages refused.",
          "documented": true,
          "url": "/reference/api/permissions/nativetablestats/#rejected"
        },
        {
          "name": "Rules",
          "kind": "property",
          "signature": "public ulong Rules { get; init; }",
          "returns": {
            "type": "ulong"
          },
          "summary": "Rules over all subjects.",
          "documented": true,
          "url": "/reference/api/permissions/nativetablestats/#rules"
        },
        {
          "name": "Subjects",
          "kind": "property",
          "signature": "public ulong Subjects { get; init; }",
          "returns": {
            "type": "ulong"
          },
          "summary": "Subjects with state.",
          "documented": true,
          "url": "/reference/api/permissions/nativetablestats/#subjects"
        }
      ]
    },
    {
      "name": "Permission",
      "fullName": "Mc.Scripting.Permissions.Permission",
      "namespace": "Mc.Scripting.Permissions",
      "kind": "class",
      "category": "permissions",
      "categoryLabel": "Permissions",
      "signature": "public sealed class Permission : IEquatable<Permission>",
      "interfaces": [
        "IEquatable<Permission>"
      ],
      "summary": "A declared permission node: its name, default and description.",
      "url": "/reference/api/permissions/permission/",
      "members": [
        {
          "name": "Permission",
          "kind": "ctor",
          "signature": "public Permission(string Node, PermissionDefault Default, string Description = \"\")",
          "parameters": [
            {
              "name": "Node",
              "type": "string",
              "summary": "The dotted node, e.g. \"homes.use\"."
            },
            {
              "name": "Default",
              "type": "PermissionDefault",
              "summary": "The value when nothing else decides."
            },
            {
              "name": "Description",
              "type": "string",
              "default": "\"\"",
              "summary": "What the permission allows (shown by admin tools)."
            }
          ],
          "summary": "A declared permission node: its name, default and description.",
          "documented": true,
          "url": "/reference/api/permissions/permission/#constructor"
        },
        {
          "name": "Default",
          "kind": "property",
          "signature": "public PermissionDefault Default { get; init; }",
          "returns": {
            "type": "PermissionDefault"
          },
          "summary": "The value when nothing else decides.",
          "documented": true,
          "url": "/reference/api/permissions/permission/#default"
        },
        {
          "name": "Description",
          "kind": "property",
          "signature": "public string Description { get; init; }",
          "returns": {
            "type": "string"
          },
          "summary": "What the permission allows (shown by admin tools).",
          "documented": true,
          "url": "/reference/api/permissions/permission/#description"
        },
        {
          "name": "Node",
          "kind": "property",
          "signature": "public string Node { get; init; }",
          "returns": {
            "type": "string"
          },
          "summary": "The dotted node, e.g. \"homes.use\".",
          "documented": true,
          "url": "/reference/api/permissions/permission/#node"
        }
      ]
    },
    {
      "name": "PermissionDefault",
      "fullName": "Mc.Scripting.Permissions.PermissionDefault",
      "namespace": "Mc.Scripting.Permissions",
      "kind": "struct",
      "category": "permissions",
      "categoryLabel": "Permissions",
      "signature": "public readonly struct PermissionDefault : IEquatable<PermissionDefault>",
      "interfaces": [
        "IEquatable<PermissionDefault>"
      ],
      "summary": "What a permission node is worth when no group or player entry decides it.",
      "url": "/reference/api/permissions/permissiondefault/",
      "members": [
        {
          "name": "False",
          "kind": "property",
          "signature": "public static PermissionDefault False { get; }",
          "static": true,
          "returns": {
            "type": "PermissionDefault"
          },
          "summary": "Nobody has it (until granted).",
          "documented": true,
          "url": "/reference/api/permissions/permissiondefault/#false"
        },
        {
          "name": "NotOp",
          "kind": "property",
          "signature": "public static PermissionDefault NotOp { get; }",
          "static": true,
          "returns": {
            "type": "PermissionDefault"
          },
          "summary": "Everybody who is not an operator (level below 2).",
          "documented": true,
          "url": "/reference/api/permissions/permissiondefault/#notop"
        },
        {
          "name": "Op",
          "kind": "property",
          "signature": "public static PermissionDefault Op { get; }",
          "static": true,
          "returns": {
            "type": "PermissionDefault"
          },
          "summary": "Operators of vanilla permission level 2 and up (the \"gamemaster\" level: command blocks and most admin commands).",
          "documented": true,
          "url": "/reference/api/permissions/permissiondefault/#op"
        },
        {
          "name": "True",
          "kind": "property",
          "signature": "public static PermissionDefault True { get; }",
          "static": true,
          "returns": {
            "type": "PermissionDefault"
          },
          "summary": "Everybody has it.",
          "documented": true,
          "url": "/reference/api/permissions/permissiondefault/#true"
        },
        {
          "name": "Evaluate",
          "kind": "method",
          "signature": "public bool Evaluate(int permissionLevel)",
          "parameters": [
            {
              "name": "permissionLevel",
              "type": "int",
              "summary": "The player's operator level (0 for non-operators)."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "Whether the player has the permission by default."
          },
          "summary": "Evaluates the default for a player of the given vanilla permission level.",
          "documented": true,
          "url": "/reference/api/permissions/permissiondefault/#evaluate"
        },
        {
          "name": "ToString",
          "kind": "method",
          "signature": "public override string ToString()",
          "returns": {
            "type": "string"
          },
          "summary": "The name used in `plugin.json` and `permissions.json`: \"true\", \"false\", \"op\", \"op:3\", \"not_op\".",
          "documented": true,
          "url": "/reference/api/permissions/permissiondefault/#tostring"
        },
        {
          "name": "OpLevel",
          "kind": "method",
          "signature": "public static PermissionDefault OpLevel(int level)",
          "static": true,
          "parameters": [
            {
              "name": "level",
              "type": "int",
              "summary": "The minimum permission level, 0-4."
            }
          ],
          "returns": {
            "type": "PermissionDefault"
          },
          "summary": "Operators of at least vanilla level `level` (1 = bypass spawn protection, 2 = gamemaster, 3 = admin, 4 = owner).",
          "documented": true,
          "url": "/reference/api/permissions/permissiondefault/#oplevel"
        },
        {
          "name": "TryParse",
          "kind": "method",
          "signature": "public static bool TryParse(string? text, out PermissionDefault value)",
          "static": true,
          "parameters": [
            {
              "name": "text",
              "type": "string?",
              "summary": "The text."
            },
            {
              "name": "value",
              "type": "PermissionDefault",
              "modifier": "out",
              "summary": "The result."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "Whether the text was valid."
          },
          "summary": "Parses the text form (see `PermissionDefault.ToString`).",
          "documented": true,
          "url": "/reference/api/permissions/permissiondefault/#tryparse"
        }
      ]
    },
    {
      "name": "PermissionManager",
      "fullName": "Mc.Scripting.Permissions.PermissionManager",
      "namespace": "Mc.Scripting.Permissions",
      "kind": "class",
      "category": "permissions",
      "categoryLabel": "Permissions",
      "signature": "public static class PermissionManager",
      "summary": "The server's permission system: declared nodes with defaults, the active backend (`IPermissionProvider`) and the question \"does this player have this node?\". The default backend is a `FilePermissionProvider` on `permissions.json`; a plugin may replace it.",
      "remarks": "Resolution: the provider's explicit value (wildcards, groups and player overrides are its business); if it has no opinion, the node's registered default decides (`PermissionDefault.Op` and friends are evaluated against the player's vanilla operator level); an unregistered node without an entry is denied, except `minecraft.command.<name>` which defaults to the vanilla operator level of that command. The console always has every permission. Everything here runs on the tick thread.",
      "url": "/reference/api/permissions/permissionmanager/",
      "members": [
        {
          "name": "BuiltIn",
          "kind": "property",
          "signature": "public static FilePermissionProvider BuiltIn { get; }",
          "static": true,
          "returns": {
            "type": "FilePermissionProvider"
          },
          "summary": "The built-in file backend (created on first use at `permissions.json` in the server directory).",
          "documented": true,
          "url": "/reference/api/permissions/permissionmanager/#builtin"
        },
        {
          "name": "Provider",
          "kind": "property",
          "signature": "public static IPermissionProvider Provider { get; }",
          "static": true,
          "returns": {
            "type": "IPermissionProvider"
          },
          "summary": "The active backend.",
          "documented": true,
          "url": "/reference/api/permissions/permissionmanager/#provider"
        },
        {
          "name": "Registered",
          "kind": "property",
          "signature": "public static IReadOnlyList<Permission> Registered { get; }",
          "static": true,
          "returns": {
            "type": "IReadOnlyList<Permission>"
          },
          "summary": "A snapshot of the declared nodes.",
          "documented": true,
          "url": "/reference/api/permissions/permissionmanager/#registered"
        },
        {
          "name": "GetExplicit",
          "kind": "method",
          "signature": "public static PermissionValue GetExplicit(Uuid player, string node)",
          "static": true,
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The profile id."
            },
            {
              "name": "node",
              "type": "string",
              "summary": "The node."
            }
          ],
          "returns": {
            "type": "PermissionValue"
          },
          "summary": "The tri-state value the backend holds for the player, without applying defaults.",
          "documented": true,
          "url": "/reference/api/permissions/permissionmanager/#getexplicit"
        },
        {
          "name": "Has",
          "kind": "method",
          "signature": "public static bool Has(Player player, string node)",
          "static": true,
          "parameters": [
            {
              "name": "player",
              "type": "Player",
              "summary": "The player (a stale handle has nothing)."
            },
            {
              "name": "node",
              "type": "string",
              "summary": "The node."
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the player has the permission.",
          "documented": true,
          "url": "/reference/api/permissions/permissionmanager/#has"
        },
        {
          "name": "Has",
          "kind": "method",
          "signature": "public static bool Has(Uuid player, string node)",
          "static": true,
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The profile id."
            },
            {
              "name": "node",
              "type": "string",
              "summary": "The node."
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the player (online or not) has the permission. The operator level is looked up in the server's ops list.",
          "documented": true,
          "url": "/reference/api/permissions/permissionmanager/#has-1"
        },
        {
          "name": "Has",
          "kind": "method",
          "signature": "public static bool Has(Entity entity, string node)",
          "static": true,
          "parameters": [
            {
              "name": "entity",
              "type": "Entity",
              "summary": "A player entity or the null entity."
            },
            {
              "name": "node",
              "type": "string",
              "summary": "The node."
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the entity has the permission (`Entity.Null` is the console and has everything).",
          "documented": true,
          "url": "/reference/api/permissions/permissionmanager/#has-2"
        },
        {
          "name": "IsRegistered",
          "kind": "method",
          "signature": "public static bool IsRegistered(string node)",
          "static": true,
          "parameters": [
            {
              "name": "node",
              "type": "string",
              "summary": "The node."
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Whether a node was declared.",
          "documented": true,
          "url": "/reference/api/permissions/permissionmanager/#isregistered"
        },
        {
          "name": "Register",
          "kind": "method",
          "signature": "public static void Register(Permission permission)",
          "static": true,
          "parameters": [
            {
              "name": "permission",
              "type": "Permission",
              "summary": "The node, default and description."
            }
          ],
          "summary": "Declares a permission node (the plugin-scoped `plugin.Permissions.Register` unregisters it on unload).",
          "documented": true,
          "url": "/reference/api/permissions/permissionmanager/#register"
        },
        {
          "name": "Reload",
          "kind": "method",
          "signature": "public static void Reload()",
          "static": true,
          "summary": "Reloads the built-in backend's file and fires `PermissionsReloaded`.",
          "documented": true,
          "url": "/reference/api/permissions/permissionmanager/#reload"
        },
        {
          "name": "SetProvider",
          "kind": "method",
          "signature": "public static void SetProvider(IPermissionProvider provider)",
          "static": true,
          "parameters": [
            {
              "name": "provider",
              "type": "IPermissionProvider",
              "summary": "The new backend."
            }
          ],
          "summary": "Replaces the backend. The previous one is restored when the owning plugin unloads (use the plugin-scoped overload from plugins).",
          "documented": true,
          "url": "/reference/api/permissions/permissionmanager/#setprovider"
        }
      ]
    },
    {
      "name": "PermissionValue",
      "fullName": "Mc.Scripting.Permissions.PermissionValue",
      "namespace": "Mc.Scripting.Permissions",
      "kind": "enum",
      "category": "permissions",
      "categoryLabel": "Permissions",
      "signature": "public enum PermissionValue : int",
      "summary": "The three-valued answer of a permission provider.",
      "url": "/reference/api/permissions/permissionvalue/",
      "members": [
        {
          "name": "Unset",
          "kind": "enumMember",
          "signature": "Unset = 0",
          "value": "0",
          "summary": "The provider has no opinion; the node's default decides.",
          "documented": true,
          "url": "/reference/api/permissions/permissionvalue/#unset"
        },
        {
          "name": "True",
          "kind": "enumMember",
          "signature": "True = 1",
          "value": "1",
          "summary": "Explicitly granted.",
          "documented": true,
          "url": "/reference/api/permissions/permissionvalue/#true"
        },
        {
          "name": "False",
          "kind": "enumMember",
          "signature": "False = 2",
          "value": "2",
          "summary": "Explicitly denied (beats a grant of the same specificity).",
          "documented": true,
          "url": "/reference/api/permissions/permissionvalue/#false"
        }
      ]
    },
    {
      "name": "PluginPermissions",
      "fullName": "Mc.Scripting.Permissions.PluginPermissions",
      "namespace": "Mc.Scripting.Permissions",
      "kind": "class",
      "category": "permissions",
      "categoryLabel": "Permissions",
      "signature": "public sealed class PluginPermissions",
      "summary": "Permissions as seen by one plugin (`plugin.Permissions`): declare the nodes it uses, query players, and optionally replace the backend. Everything declared here is removed when the plugin unloads or hot-reloads.",
      "url": "/reference/api/permissions/pluginpermissions/",
      "members": [
        {
          "name": "BuiltIn",
          "kind": "property",
          "signature": "public FilePermissionProvider BuiltIn { get; }",
          "returns": {
            "type": "FilePermissionProvider"
          },
          "summary": "The built-in file backend (groups and player overrides stored in `permissions.json`).",
          "documented": true,
          "url": "/reference/api/permissions/pluginpermissions/#builtin"
        },
        {
          "name": "Has",
          "kind": "method",
          "signature": "public bool Has(Player player, string node)",
          "parameters": [
            {
              "name": "player",
              "type": "Player",
              "summary": "The player."
            },
            {
              "name": "node",
              "type": "string",
              "summary": "The node."
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the player has the permission.",
          "documented": true,
          "url": "/reference/api/permissions/pluginpermissions/#has"
        },
        {
          "name": "Has",
          "kind": "method",
          "signature": "public bool Has(Uuid player, string node)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The profile id."
            },
            {
              "name": "node",
              "type": "string",
              "summary": "The node."
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the player (online or not) has the permission.",
          "documented": true,
          "url": "/reference/api/permissions/pluginpermissions/#has-1"
        },
        {
          "name": "Register",
          "kind": "method",
          "signature": "public void Register(Permission permission)",
          "parameters": [
            {
              "name": "permission",
              "type": "Permission",
              "summary": "The node, default and description."
            }
          ],
          "summary": "Declares a permission node.",
          "documented": true,
          "url": "/reference/api/permissions/pluginpermissions/#register"
        },
        {
          "name": "Register",
          "kind": "method",
          "signature": "public void Register(string node, PermissionDefault default, string description = \"\")",
          "parameters": [
            {
              "name": "node",
              "type": "string",
              "summary": "The dotted node, e.g. \"homes.use\"."
            },
            {
              "name": "default",
              "type": "PermissionDefault",
              "summary": "What the node is worth when no group or player entry decides."
            },
            {
              "name": "description",
              "type": "string",
              "default": "\"\"",
              "summary": "What the permission allows."
            }
          ],
          "summary": "Declares a permission node with its default and a description.",
          "documented": true,
          "url": "/reference/api/permissions/pluginpermissions/#register-1"
        },
        {
          "name": "SetProvider",
          "kind": "method",
          "signature": "public void SetProvider(IPermissionProvider provider)",
          "parameters": [
            {
              "name": "provider",
              "type": "IPermissionProvider",
              "summary": "The backend."
            }
          ],
          "summary": "Replaces the permission backend for as long as this plugin is loaded (a LuckPerms-style plugin does this in `OnEnable`).",
          "documented": true,
          "url": "/reference/api/permissions/pluginpermissions/#setprovider"
        }
      ]
    },
    {
      "name": "Phase",
      "fullName": "Mc.Scripting.Phase",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "systems",
      "categoryLabel": "Systems and phases",
      "signature": "public enum Phase : int",
      "summary": "Server tick phases in execution order (the engine's phases). Deferred changes (entity creation, component add/set/remove) made in one phase are visible to every later phase of the same tick, e.g. an entity a native NetworkReceive system creates is seen by Tick systems.",
      "url": "/reference/api/systems/phase/",
      "members": [
        {
          "name": "NetworkReceive",
          "kind": "enumMember",
          "signature": "NetworkReceive = 0",
          "value": "0",
          "summary": "Drain inbound packets, apply them to entities.",
          "documented": true,
          "url": "/reference/api/systems/phase/#networkreceive"
        },
        {
          "name": "PreTick",
          "kind": "enumMember",
          "signature": "PreTick = 1",
          "value": "1",
          "summary": "Timers, scheduled tasks, input integration.",
          "documented": true,
          "url": "/reference/api/systems/phase/#pretick"
        },
        {
          "name": "Tick",
          "kind": "enumMember",
          "signature": "Tick = 2",
          "value": "2",
          "summary": "Game logic (entities, blocks, ...).",
          "documented": true,
          "url": "/reference/api/systems/phase/#tick"
        },
        {
          "name": "PostTick",
          "kind": "enumMember",
          "signature": "PostTick = 3",
          "value": "3",
          "summary": "Removals, collision resolution, derived state.",
          "documented": true,
          "url": "/reference/api/systems/phase/#posttick"
        },
        {
          "name": "Tracking",
          "kind": "enumMember",
          "signature": "Tracking = 4",
          "value": "4",
          "summary": "Spatial index update, view diffs.",
          "documented": true,
          "url": "/reference/api/systems/phase/#tracking"
        },
        {
          "name": "NetworkSend",
          "kind": "enumMember",
          "signature": "NetworkSend = 5",
          "value": "5",
          "summary": "Build and encode outbound packets.",
          "documented": true,
          "url": "/reference/api/systems/phase/#networksend"
        },
        {
          "name": "AsyncIntegration",
          "kind": "enumMember",
          "signature": "AsyncIntegration = 6",
          "value": "6",
          "summary": "Integrate worker results (chunk loads, lighting).",
          "documented": true,
          "url": "/reference/api/systems/phase/#asyncintegration"
        }
      ]
    },
    {
      "name": "Player",
      "fullName": "Mc.Scripting.Player",
      "namespace": "Mc.Scripting",
      "kind": "struct",
      "category": "players",
      "categoryLabel": "Players",
      "signature": "public readonly struct Player : IEquatable<Player>",
      "interfaces": [
        "IEquatable<Player>"
      ],
      "summary": "A handle to a connected player. Blittable (usable in events and ECS components).",
      "remarks": "A handle stays valid only while the player is online: after he leaves it goes stale. Stale handles fail safe: reads return defaults, actions do nothing (see `Player.IsOnline`). A player who rejoins gets a new handle. All members must be called on the tick thread.",
      "url": "/reference/api/players/player/",
      "members": [
        {
          "name": "Player",
          "kind": "ctor",
          "signature": "public Player(Entity entity)",
          "parameters": [
            {
              "name": "entity",
              "type": "Entity",
              "summary": "The player entity."
            }
          ],
          "summary": "Wraps an entity that is a player.",
          "documented": true,
          "url": "/reference/api/players/player/#constructor"
        },
        {
          "name": "Entity",
          "kind": "field",
          "signature": "public readonly Entity Entity;",
          "returns": {
            "type": "Entity"
          },
          "summary": "The underlying ECS entity.",
          "documented": true,
          "url": "/reference/api/players/player/#entity"
        },
        {
          "name": "Absorption",
          "kind": "property",
          "signature": "public double Absorption { get; set; }",
          "returns": {
            "type": "double"
          },
          "summary": "The golden hearts of absorption in half hearts.",
          "documented": true,
          "url": "/reference/api/players/player/#absorption"
        },
        {
          "name": "ActiveEffects",
          "kind": "property",
          "signature": "public IReadOnlyList<string> ActiveEffects { get; }",
          "returns": {
            "type": "IReadOnlyList<string>"
          },
          "summary": "The keys of the effects the player has.",
          "documented": true,
          "url": "/reference/api/players/player/#activeeffects"
        },
        {
          "name": "Address",
          "kind": "property",
          "signature": "public string Address { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The client's address as the server sees it (\"127.0.0.1:50321\"), empty for a stale handle.",
          "documented": true,
          "url": "/reference/api/players/player/#address"
        },
        {
          "name": "Air",
          "kind": "property",
          "signature": "public int Air { get; set; }",
          "returns": {
            "type": "int"
          },
          "summary": "The remaining air in ticks (300 is full; below 0 the player drowns).",
          "documented": true,
          "url": "/reference/api/players/player/#air"
        },
        {
          "name": "AllowFlight",
          "kind": "property",
          "signature": "public bool AllowFlight { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the player may fly (creative mode sets it automatically).",
          "documented": true,
          "url": "/reference/api/players/player/#allowflight"
        },
        {
          "name": "Channels",
          "kind": "property",
          "signature": "public IReadOnlyList<string> Channels { get; }",
          "returns": {
            "type": "IReadOnlyList<string>"
          },
          "summary": "The channels the player's client registered (minecraft:register), in the order it sent them. Empty for a stale handle.",
          "documented": true,
          "url": "/reference/api/players/player/#channels"
        },
        {
          "name": "DisplayName",
          "kind": "property",
          "signature": "public Component? DisplayName { get; set; }",
          "returns": {
            "type": "Component?"
          },
          "summary": "The name the server shows for this player where vanilla uses Player.getDisplayName: the join and leave lines, the chat sender, death and advancement messages (the team format applies to it). Null when none is set, and then the profile `Player.Name` is shown. Set it to null to clear it. Not persisted: it is cleared when the player leaves, so a plugin that keeps nicknames sets it again on join. The profile name stays the key of commands, the scoreboard and the click and insertion text of chat. Stale handles: reads give null, writes do nothing.",
          "documented": true,
          "url": "/reference/api/players/player/#displayname"
        },
        {
          "name": "Exhaustion",
          "kind": "property",
          "signature": "public double Exhaustion { get; set; }",
          "returns": {
            "type": "double"
          },
          "summary": "The exhaustion, 0..40: at 4 the saturation (or food level) drops by one.",
          "documented": true,
          "url": "/reference/api/players/player/#exhaustion"
        },
        {
          "name": "ExperienceLevel",
          "kind": "property",
          "signature": "public int ExperienceLevel { get; set; }",
          "returns": {
            "type": "int"
          },
          "summary": "The experience level shown in the HUD. Setting resets the progress within the level.",
          "documented": true,
          "url": "/reference/api/players/player/#experiencelevel"
        },
        {
          "name": "ExperienceProgress",
          "kind": "property",
          "signature": "public double ExperienceProgress { get; set; }",
          "returns": {
            "type": "double"
          },
          "summary": "The progress to the next level, 0..1 (the green bar).",
          "documented": true,
          "url": "/reference/api/players/player/#experienceprogress"
        },
        {
          "name": "FireTicks",
          "kind": "property",
          "signature": "public int FireTicks { get; set; }",
          "returns": {
            "type": "int"
          },
          "summary": "The ticks the player will keep burning (0 when not on fire). Setting 0 extinguishes.",
          "documented": true,
          "url": "/reference/api/players/player/#fireticks"
        },
        {
          "name": "FlySpeed",
          "kind": "property",
          "signature": "public float FlySpeed { get; set; }",
          "returns": {
            "type": "float"
          },
          "summary": "The flying speed, 0..1 (default 0.05).",
          "documented": true,
          "url": "/reference/api/players/player/#flyspeed"
        },
        {
          "name": "FoodLevel",
          "kind": "property",
          "signature": "public int FoodLevel { get; set; }",
          "returns": {
            "type": "int"
          },
          "summary": "The food level, 0..20 (the hunger bar; below 7 sprinting stops, at 0 the player starves).",
          "documented": true,
          "url": "/reference/api/players/player/#foodlevel"
        },
        {
          "name": "GameMode",
          "kind": "property",
          "signature": "public GameMode GameMode { get; set; }",
          "returns": {
            "type": "GameMode"
          },
          "summary": "The player's game mode. Setting it fires `PlayerGameModeChangeEvent` (a handler may cancel it).",
          "documented": true,
          "url": "/reference/api/players/player/#gamemode"
        },
        {
          "name": "Health",
          "kind": "property",
          "signature": "public double Health { get; set; }",
          "returns": {
            "type": "double"
          },
          "summary": "Health in half hearts (20 is full). Setting is clamped to 0..`Player.MaxHealth`; 0 kills the player through the normal death handling.",
          "documented": true,
          "url": "/reference/api/players/player/#health"
        },
        {
          "name": "HeldItem",
          "kind": "property",
          "signature": "public ItemStack HeldItem { get; }",
          "returns": {
            "type": "ItemStack"
          },
          "summary": "The stack in the player's main hand (empty for a stale handle).",
          "documented": true,
          "url": "/reference/api/players/player/#helditem"
        },
        {
          "name": "Inventory",
          "kind": "property",
          "signature": "public PlayerInventory Inventory { get; }",
          "returns": {
            "type": "PlayerInventory"
          },
          "summary": "The player's inventory: slots, hotbar, armor, off hand and the cursor (`PlayerInventory`). A stale handle (a player who left) gives an inventory with no slots.",
          "documented": true,
          "url": "/reference/api/players/player/#inventory"
        },
        {
          "name": "Invulnerable",
          "kind": "property",
          "signature": "public bool Invulnerable { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the player takes no damage (creative mode sets it automatically).",
          "documented": true,
          "url": "/reference/api/players/player/#invulnerable"
        },
        {
          "name": "IsFlying",
          "kind": "property",
          "signature": "public bool IsFlying { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the player is flying (creative or spectator flight, or `Player.AllowFlight`). Setting it only works while `Player.AllowFlight` is true.",
          "documented": true,
          "url": "/reference/api/players/player/#isflying"
        },
        {
          "name": "IsGliding",
          "kind": "property",
          "signature": "public bool IsGliding { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the player is gliding with elytra.",
          "documented": true,
          "url": "/reference/api/players/player/#isgliding"
        },
        {
          "name": "IsNone",
          "kind": "property",
          "signature": "public bool IsNone { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether this is the \"no player\" handle.",
          "documented": true,
          "url": "/reference/api/players/player/#isnone"
        },
        {
          "name": "IsOnGround",
          "kind": "property",
          "signature": "public bool IsOnGround { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the player is on the ground.",
          "documented": true,
          "url": "/reference/api/players/player/#isonground"
        },
        {
          "name": "IsOnline",
          "kind": "property",
          "signature": "public bool IsOnline { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the player is connected and in the play state.",
          "documented": true,
          "url": "/reference/api/players/player/#isonline"
        },
        {
          "name": "IsSneaking",
          "kind": "property",
          "signature": "public bool IsSneaking { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the player is sneaking (crouching).",
          "documented": true,
          "url": "/reference/api/players/player/#issneaking"
        },
        {
          "name": "IsSprinting",
          "kind": "property",
          "signature": "public bool IsSprinting { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the player is sprinting.",
          "documented": true,
          "url": "/reference/api/players/player/#issprinting"
        },
        {
          "name": "IsSwimming",
          "kind": "property",
          "signature": "public bool IsSwimming { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the player is swimming.",
          "documented": true,
          "url": "/reference/api/players/player/#isswimming"
        },
        {
          "name": "Latency",
          "kind": "property",
          "signature": "public int Latency { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The round trip time to the client in milliseconds (-1 for a stale handle).",
          "documented": true,
          "url": "/reference/api/players/player/#latency"
        },
        {
          "name": "Locale",
          "kind": "property",
          "signature": "public string Locale { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The client's language, e.g. \"en_us\".",
          "documented": true,
          "url": "/reference/api/players/player/#locale"
        },
        {
          "name": "Location",
          "kind": "property",
          "signature": "public Location Location { get; }",
          "returns": {
            "type": "Location"
          },
          "summary": "Position and rotation in the player's world.",
          "documented": true,
          "url": "/reference/api/players/player/#location"
        },
        {
          "name": "MaxHealth",
          "kind": "property",
          "signature": "public double MaxHealth { get; }",
          "returns": {
            "type": "double"
          },
          "summary": "The maximum health (the attribute value, 20 by default). Read only: change it with attribute modifiers.",
          "documented": true,
          "url": "/reference/api/players/player/#maxhealth"
        },
        {
          "name": "Name",
          "kind": "property",
          "signature": "public string Name { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The player's name, empty for a stale handle.",
          "documented": true,
          "url": "/reference/api/players/player/#name"
        },
        {
          "name": "PermissionLevel",
          "kind": "property",
          "signature": "public int PermissionLevel { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The vanilla operator level of the player (0-4, from ops.json); 0 for an offline handle.",
          "documented": true,
          "url": "/reference/api/players/player/#permissionlevel"
        },
        {
          "name": "Position",
          "kind": "property",
          "signature": "public Vec3d Position { get; }",
          "returns": {
            "type": "Vec3d"
          },
          "summary": "The player's position (feet), `default` for a stale handle.",
          "documented": true,
          "url": "/reference/api/players/player/#position"
        },
        {
          "name": "Saturation",
          "kind": "property",
          "signature": "public double Saturation { get; set; }",
          "returns": {
            "type": "double"
          },
          "summary": "The saturation, 0..`Player.FoodLevel`: the buffer that is used up before the food level drops.",
          "documented": true,
          "url": "/reference/api/players/player/#saturation"
        },
        {
          "name": "TotalExperience",
          "kind": "property",
          "signature": "public int TotalExperience { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The total experience points ever collected (drives the score on the death screen). Read only; use `Player.GiveExperience`.",
          "documented": true,
          "url": "/reference/api/players/player/#totalexperience"
        },
        {
          "name": "Uuid",
          "kind": "property",
          "signature": "public Uuid Uuid { get; }",
          "returns": {
            "type": "Uuid"
          },
          "summary": "The player's profile id, `default` for a stale handle.",
          "documented": true,
          "url": "/reference/api/players/player/#uuid"
        },
        {
          "name": "WalkSpeed",
          "kind": "property",
          "signature": "public float WalkSpeed { get; set; }",
          "returns": {
            "type": "float"
          },
          "summary": "The walking speed, 0..1 (default 0.1).",
          "documented": true,
          "url": "/reference/api/players/player/#walkspeed"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension the player is in (the overworld for a stale handle).",
          "documented": true,
          "url": "/reference/api/players/player/#world"
        },
        {
          "name": "None",
          "kind": "property",
          "signature": "public static Player None { get; }",
          "static": true,
          "returns": {
            "type": "Player"
          },
          "summary": "The \"no player\" handle.",
          "documented": true,
          "url": "/reference/api/players/player/#none"
        },
        {
          "name": "AddEffect",
          "kind": "method",
          "signature": "public bool AddEffect(PotionEffect effect)",
          "parameters": [
            {
              "name": "effect",
              "type": "PotionEffect",
              "summary": "The effect."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "Whether it was applied (false for an unknown effect key)."
          },
          "summary": "Adds a status effect (a stronger or longer effect of the same kind replaces the current one like in vanilla).",
          "documented": true,
          "url": "/reference/api/players/player/#addeffect"
        },
        {
          "name": "ClearEffects",
          "kind": "method",
          "signature": "public bool ClearEffects()",
          "returns": {
            "type": "bool",
            "summary": "Whether there was any."
          },
          "summary": "Removes every status effect.",
          "documented": true,
          "url": "/reference/api/players/player/#cleareffects"
        },
        {
          "name": "ClearFakeBlock",
          "kind": "method",
          "signature": "public bool ClearFakeBlock(BlockPos position)",
          "parameters": [
            {
              "name": "position",
              "type": "BlockPos",
              "summary": "The block position."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when there was a fake block there."
          },
          "summary": "Shows the world's real block at a position again.",
          "documented": true,
          "url": "/reference/api/players/player/#clearfakeblock"
        },
        {
          "name": "ClearFakeBlocks",
          "kind": "method",
          "signature": "public void ClearFakeBlocks()",
          "summary": "Ends every fake block of this player.",
          "documented": true,
          "url": "/reference/api/players/player/#clearfakeblocks"
        },
        {
          "name": "ClearTitle",
          "kind": "method",
          "signature": "public void ClearTitle(bool resetTimes = false)",
          "parameters": [
            {
              "name": "resetTimes",
              "type": "bool",
              "default": "false",
              "summary": "Whether the timings also return to the defaults."
            }
          ],
          "summary": "Hides the current title and subtitle.",
          "documented": true,
          "url": "/reference/api/players/player/#cleartitle"
        },
        {
          "name": "Equals",
          "kind": "method",
          "signature": "public bool Equals(Player other)",
          "parameters": [
            {
              "name": "other",
              "type": "Player"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "documented": false,
          "url": "/reference/api/players/player/#equals"
        },
        {
          "name": "Equals",
          "kind": "method",
          "signature": "public override bool Equals(object? obj)",
          "parameters": [
            {
              "name": "obj",
              "type": "object?"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "documented": false,
          "url": "/reference/api/players/player/#equals-1"
        },
        {
          "name": "Get",
          "kind": "method",
          "signature": "public ref T Get<T>() where T : unmanaged",
          "returns": {
            "type": "ref T",
            "summary": "A reference to the component."
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : unmanaged"
          ],
          "summary": "Reference to a plugin component on the player's entity; throws if the player lacks it. The reference points into ECS storage and dies with the next structural change: re-fetch instead of keeping it.",
          "documented": true,
          "url": "/reference/api/players/player/#gett"
        },
        {
          "name": "GetEffect",
          "kind": "method",
          "signature": "public PotionEffect? GetEffect(string effect)",
          "parameters": [
            {
              "name": "effect",
              "type": "string",
              "summary": "The effect key."
            }
          ],
          "returns": {
            "type": "PotionEffect?"
          },
          "summary": "The active effect of a kind, null when the player does not have it.",
          "documented": true,
          "url": "/reference/api/players/player/#geteffect"
        },
        {
          "name": "GetHashCode",
          "kind": "method",
          "signature": "public override int GetHashCode()",
          "returns": {
            "type": "int"
          },
          "documented": false,
          "url": "/reference/api/players/player/#gethashcode"
        },
        {
          "name": "GiveExperience",
          "kind": "method",
          "signature": "public void GiveExperience(int points)",
          "parameters": [
            {
              "name": "points",
              "type": "int",
              "summary": "The points."
            }
          ],
          "summary": "Gives experience points (negative takes them away), levelling up as needed, like `/xp add`.",
          "documented": true,
          "url": "/reference/api/players/player/#giveexperience"
        },
        {
          "name": "GiveExperienceLevels",
          "kind": "method",
          "signature": "public void GiveExperienceLevels(int levels)",
          "parameters": [
            {
              "name": "levels",
              "type": "int",
              "summary": "The levels."
            }
          ],
          "summary": "Gives whole experience levels (negative takes them away).",
          "documented": true,
          "url": "/reference/api/players/player/#giveexperiencelevels"
        },
        {
          "name": "Has",
          "kind": "method",
          "signature": "public bool Has<T>() where T : unmanaged",
          "returns": {
            "type": "bool",
            "summary": "True if present."
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : unmanaged"
          ],
          "summary": "Whether the player has a plugin component.",
          "documented": true,
          "url": "/reference/api/players/player/#hast"
        },
        {
          "name": "HasPermission",
          "kind": "method",
          "signature": "public bool HasPermission(string node)",
          "parameters": [
            {
              "name": "node",
              "type": "string",
              "summary": "The dotted node, e.g. \"homes.use\"."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when granted; false for an offline handle."
          },
          "summary": "Whether the player has a permission node (groups, per-player entries, wildcards and node defaults are resolved by the permission backend).",
          "documented": true,
          "url": "/reference/api/players/player/#haspermission"
        },
        {
          "name": "Kick",
          "kind": "method",
          "signature": "public void Kick(Component reason)",
          "parameters": [
            {
              "name": "reason",
              "type": "Component",
              "summary": "Shown on the disconnect screen."
            }
          ],
          "summary": "Disconnects the player. Fires `PlayerKickEvent` first (a handler may cancel it).",
          "documented": true,
          "url": "/reference/api/players/player/#kick"
        },
        {
          "name": "ListensOn",
          "kind": "method",
          "signature": "public bool ListensOn(string channel)",
          "parameters": [
            {
              "name": "channel",
              "type": "string",
              "summary": "A channel id, namespace:path."
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the player's client registered the channel (minecraft:register), that is, whether it listens on it. False for a stale handle.",
          "documented": true,
          "url": "/reference/api/players/player/#listenson"
        },
        {
          "name": "PlaySound",
          "kind": "method",
          "signature": "public void PlaySound(string sound, SoundCategory category = SoundCategory.Master, float volume = 1f, float pitch = 1f)",
          "parameters": [
            {
              "name": "sound",
              "type": "string",
              "summary": "The sound event id, e.g. `minecraft:entity.experience_orb.pickup`."
            },
            {
              "name": "category",
              "type": "SoundCategory",
              "default": "SoundCategory.Master",
              "summary": "The volume slider it belongs to."
            },
            {
              "name": "volume",
              "type": "float",
              "default": "1f",
              "summary": "1 is normal; above 1 the sound carries further."
            },
            {
              "name": "pitch",
              "type": "float",
              "default": "1f",
              "summary": "0.5 to 2; 1 is normal."
            }
          ],
          "summary": "Plays a sound to this player only, at his position.",
          "documented": true,
          "url": "/reference/api/players/player/#playsound"
        },
        {
          "name": "PlaySound",
          "kind": "method",
          "signature": "public void PlaySound(string sound, Vec3d position, SoundCategory category = SoundCategory.Master, float volume = 1f, float pitch = 1f)",
          "parameters": [
            {
              "name": "sound",
              "type": "string",
              "summary": "The sound event id."
            },
            {
              "name": "position",
              "type": "Vec3d",
              "summary": "Where it comes from."
            },
            {
              "name": "category",
              "type": "SoundCategory",
              "default": "SoundCategory.Master",
              "summary": "The volume slider it belongs to."
            },
            {
              "name": "volume",
              "type": "float",
              "default": "1f",
              "summary": "1 is normal; above 1 the sound carries further."
            },
            {
              "name": "pitch",
              "type": "float",
              "default": "1f",
              "summary": "0.5 to 2; 1 is normal."
            }
          ],
          "summary": "Plays a sound to this player only, coming from a position.",
          "documented": true,
          "url": "/reference/api/players/player/#playsound-1"
        },
        {
          "name": "Remove",
          "kind": "method",
          "signature": "public Player Remove<T>() where T : unmanaged",
          "returns": {
            "type": "Player",
            "summary": "This player."
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : unmanaged"
          ],
          "summary": "Removes a plugin component from the player.",
          "documented": true,
          "url": "/reference/api/players/player/#removet"
        },
        {
          "name": "RemoveAllResourcePacks",
          "kind": "method",
          "signature": "public void RemoveAllResourcePacks()",
          "summary": "Removes every resource pack the server pushed.",
          "documented": true,
          "url": "/reference/api/players/player/#removeallresourcepacks"
        },
        {
          "name": "RemoveEffect",
          "kind": "method",
          "signature": "public bool RemoveEffect(string effect)",
          "parameters": [
            {
              "name": "effect",
              "type": "string",
              "summary": "The effect key."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "Whether the player had it."
          },
          "summary": "Removes a status effect.",
          "documented": true,
          "url": "/reference/api/players/player/#removeeffect"
        },
        {
          "name": "RemoveResourcePack",
          "kind": "method",
          "signature": "public void RemoveResourcePack(Uuid id)",
          "parameters": [
            {
              "name": "id",
              "type": "Uuid",
              "summary": "The id of the pack that was sent."
            }
          ],
          "summary": "Removes a resource pack from the client.",
          "documented": true,
          "url": "/reference/api/players/player/#removeresourcepack"
        },
        {
          "name": "SendActionBar",
          "kind": "method",
          "signature": "public void SendActionBar(Component message)",
          "parameters": [
            {
              "name": "message",
              "type": "Component",
              "summary": "The message."
            }
          ],
          "summary": "Shows a message in the action bar above the hotbar. No-op for a stale handle.",
          "documented": true,
          "url": "/reference/api/players/player/#sendactionbar"
        },
        {
          "name": "SendMessage",
          "kind": "method",
          "signature": "public void SendMessage(Component message)",
          "parameters": [
            {
              "name": "message",
              "type": "Component",
              "summary": "The message (a string converts to a literal component)."
            }
          ],
          "summary": "Sends a chat (system) message to the player. No-op for a stale handle.",
          "documented": true,
          "url": "/reference/api/players/player/#sendmessage"
        },
        {
          "name": "SendPluginMessage",
          "kind": "method",
          "signature": "public bool SendPluginMessage(string channel, ReadOnlySpan<byte> data)",
          "parameters": [
            {
              "name": "channel",
              "type": "string",
              "summary": "A channel id, namespace:path. The minecraft:*, velocity:* and bungeecord:* channels are refused."
            },
            {
              "name": "data",
              "type": "ReadOnlySpan<byte>",
              "summary": "The payload, at most 1 MiB."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when the message was queued for the player; false when it was not sent: the player is not online, the channel is invalid or reserved, the payload is too large, or the tick's send budget is spent (scripting.channels.send_bytes_per_tick)."
          },
          "summary": "Sends a plugin message to the player on a channel (a custom payload of the play state). Vanilla clients ignore channels they did not register; clients with a mod or a proxy that listens on it receive the bytes.",
          "documented": true,
          "url": "/reference/api/players/player/#sendpluginmessage"
        },
        {
          "name": "SendResourcePack",
          "kind": "method",
          "signature": "public void SendResourcePack(ResourcePack pack)",
          "parameters": [
            {
              "name": "pack",
              "type": "ResourcePack",
              "summary": "The pack."
            }
          ],
          "summary": "Asks the client to download and apply a resource pack. The answer arrives as `PlayerResourcePackStatusEvent` events.",
          "documented": true,
          "url": "/reference/api/players/player/#sendresourcepack"
        },
        {
          "name": "Set",
          "kind": "method",
          "signature": "public Player Set<T>(in T value) where T : unmanaged",
          "parameters": [
            {
              "name": "value",
              "type": "T",
              "modifier": "in",
              "summary": "The value."
            }
          ],
          "returns": {
            "type": "Player",
            "summary": "This player."
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : unmanaged"
          ],
          "summary": "Adds or overwrites a plugin component on the player. The component disappears when the player leaves.",
          "documented": true,
          "url": "/reference/api/players/player/#sett"
        },
        {
          "name": "SetGlowingFor",
          "kind": "method",
          "signature": "public bool SetGlowingFor(Player viewer, bool glowing)",
          "parameters": [
            {
              "name": "viewer",
              "type": "Player",
              "summary": "The player who sees it."
            },
            {
              "name": "glowing",
              "type": "bool",
              "summary": "Whether it glows for the viewer."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "False when the engine refused it."
          },
          "summary": "Makes this player glow for one viewer: the viewer sees the outline (for him only, the others do not change). See `Entity.SetGlowingFor`.",
          "documented": true,
          "url": "/reference/api/players/player/#setglowingfor"
        },
        {
          "name": "SetListName",
          "kind": "method",
          "signature": "public void SetListName(Component? name)",
          "parameters": [
            {
              "name": "name",
              "type": "Component?",
              "summary": "The list name."
            }
          ],
          "summary": "Changes the name everybody sees for this player in the tab list (colours, prefixes). Null restores the profile name. The name is kept until the player leaves.",
          "documented": true,
          "url": "/reference/api/players/player/#setlistname"
        },
        {
          "name": "SetTabList",
          "kind": "method",
          "signature": "public void SetTabList(Component? header, Component? footer)",
          "parameters": [
            {
              "name": "header",
              "type": "Component?",
              "summary": "The header."
            },
            {
              "name": "footer",
              "type": "Component?",
              "summary": "The footer."
            }
          ],
          "summary": "Sets the text above and below the player list (Tab). Null clears a part.",
          "documented": true,
          "url": "/reference/api/players/player/#settablist"
        },
        {
          "name": "ShowBlock",
          "kind": "method",
          "signature": "public bool ShowBlock(BlockPos position, BlockState state)",
          "parameters": [
            {
              "name": "position",
              "type": "BlockPos",
              "summary": "The block position (in the player's world)."
            },
            {
              "name": "state",
              "type": "BlockState",
              "summary": "The block state to show."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "False when the engine refused it (the player is not in play, the state is invalid, or the per-player limit is reached)."
          },
          "summary": "Shows a block state at a position to this player only. The world keeps its real block; the server still collides with the real one, and the client predicts collisions against what it sees. The fake block is re-sent with its chunk and after real changes of its position, and dropped when the player changes world or leaves.",
          "documented": true,
          "url": "/reference/api/players/player/#showblock"
        },
        {
          "name": "ShowSubtitle",
          "kind": "method",
          "signature": "public void ShowSubtitle(Component subtitle)",
          "parameters": [
            {
              "name": "subtitle",
              "type": "Component",
              "summary": "The subtitle."
            }
          ],
          "summary": "Shows only a subtitle (it appears together with the next title; vanilla shows nothing for a subtitle without a title).",
          "documented": true,
          "url": "/reference/api/players/player/#showsubtitle"
        },
        {
          "name": "ShowTitle",
          "kind": "method",
          "signature": "public void ShowTitle(Component title, Component? subtitle = null, TitleTimes? times = null)",
          "parameters": [
            {
              "name": "title",
              "type": "Component",
              "summary": "The big text."
            },
            {
              "name": "subtitle",
              "type": "Component?",
              "default": "null",
              "summary": "The smaller text below it, null for none."
            },
            {
              "name": "times",
              "type": "TitleTimes?",
              "default": "null",
              "summary": "Fade in / stay / fade out in ticks; null keeps the client's current timings (vanilla defaults 10 / 70 / 20)."
            }
          ],
          "summary": "Shows a title (and optionally a subtitle) in the middle of the screen. No-op for a stale handle.",
          "documented": true,
          "url": "/reference/api/players/player/#showtitle"
        },
        {
          "name": "SpawnParticle",
          "kind": "method",
          "signature": "public bool SpawnParticle(string particle, Vec3d position, int count = 1, Vec3d offset = default, float speed = 0f, bool force = false)",
          "parameters": [
            {
              "name": "particle",
              "type": "string",
              "summary": "The particle (see `Particle`): `minecraft:flame`, `minecraft:dust 1 0 0 1`, `minecraft:block minecraft:stone`."
            },
            {
              "name": "position",
              "type": "Vec3d",
              "summary": "Where."
            },
            {
              "name": "count",
              "type": "int",
              "default": "1",
              "summary": "How many particles (0 makes `offset` the direction and `speed` the velocity, like vanilla)."
            },
            {
              "name": "offset",
              "type": "Vec3d",
              "default": "default",
              "summary": "The spread of the particles around `position`."
            },
            {
              "name": "speed",
              "type": "float",
              "default": "0f",
              "summary": "The particle speed."
            },
            {
              "name": "force",
              "type": "bool",
              "default": "false",
              "summary": "Whether to show it beyond the usual distance and ignore the client's particle setting."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "False when the particle is unknown or needs options this server does not encode."
          },
          "summary": "Shows a particle effect to this player only.",
          "documented": true,
          "url": "/reference/api/players/player/#spawnparticle"
        },
        {
          "name": "StopSound",
          "kind": "method",
          "signature": "public void StopSound(string? sound = null, SoundCategory? category = null)",
          "parameters": [
            {
              "name": "sound",
              "type": "string?",
              "default": "null",
              "summary": "The sound id to stop, null for any."
            },
            {
              "name": "category",
              "type": "SoundCategory?",
              "default": "null",
              "summary": "Only that category, null for all."
            }
          ],
          "summary": "Stops sounds this player is hearing.",
          "documented": true,
          "url": "/reference/api/players/player/#stopsound"
        },
        {
          "name": "Teleport",
          "kind": "method",
          "signature": "public bool Teleport(Location location)",
          "parameters": [
            {
              "name": "location",
              "type": "Location",
              "summary": "The destination."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when the player was teleported; false when a handler cancelled it, the world does not exist or the handle is stale."
          },
          "summary": "Teleports the player to a location, also into another dimension. Fires `PlayerTeleportEvent` (cause `TeleportCause.Plugin`); a handler may change the destination or cancel it.",
          "documented": true,
          "url": "/reference/api/players/player/#teleport"
        },
        {
          "name": "Teleport",
          "kind": "method",
          "signature": "public bool Teleport(Vec3d position)",
          "parameters": [
            {
              "name": "position",
              "type": "Vec3d",
              "summary": "The destination."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when the player was teleported."
          },
          "summary": "Teleports the player within his dimension, keeping his rotation.",
          "documented": true,
          "url": "/reference/api/players/player/#teleport-1"
        },
        {
          "name": "ToString",
          "kind": "method",
          "signature": "public override string ToString()",
          "returns": {
            "type": "string"
          },
          "documented": false,
          "url": "/reference/api/players/player/#tostring"
        },
        {
          "name": "Transfer",
          "kind": "method",
          "signature": "public void Transfer(string host, int port = 25565)",
          "parameters": [
            {
              "name": "host",
              "type": "string",
              "summary": "The host name."
            },
            {
              "name": "port",
              "type": "int",
              "default": "25565",
              "summary": "The port."
            }
          ],
          "summary": "Sends the client to another server (it must accept transfers: `accepts-transfers=true` there).",
          "documented": true,
          "url": "/reference/api/players/player/#transfer"
        },
        {
          "name": "TryGet",
          "kind": "method",
          "signature": "public bool TryGet<T>(out T value) where T : unmanaged",
          "parameters": [
            {
              "name": "value",
              "type": "T",
              "modifier": "out",
              "summary": "The value when found."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "Whether the player has the component."
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : unmanaged"
          ],
          "summary": "Copies a plugin component of the player if present.",
          "documented": true,
          "url": "/reference/api/players/player/#trygett"
        },
        {
          "name": "!=",
          "kind": "operator",
          "signature": "public static bool operator !=(Player a, Player b)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "Player"
            },
            {
              "name": "b",
              "type": "Player"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Inequality.",
          "documented": true,
          "url": "/reference/api/players/player/#operator-"
        },
        {
          "name": "==",
          "kind": "operator",
          "signature": "public static bool operator ==(Player a, Player b)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "Player"
            },
            {
              "name": "b",
              "type": "Player"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Equality (same entity id).",
          "documented": true,
          "url": "/reference/api/players/player/#operator--1"
        },
        {
          "name": "implicit",
          "kind": "operator",
          "signature": "public static implicit operator Entity(Player p)",
          "static": true,
          "parameters": [
            {
              "name": "p",
              "type": "Player"
            }
          ],
          "returns": {
            "type": "Entity"
          },
          "summary": "A player is the entity it wraps.",
          "documented": true,
          "url": "/reference/api/players/player/#operator-implicit"
        }
      ]
    },
    {
      "name": "PlayerAction",
      "fullName": "Mc.Scripting.PlayerAction",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "events",
      "categoryLabel": "Events (infrastructure)",
      "signature": "public enum PlayerAction : int",
      "summary": "Values of the protocol enum PlayerAction (the wire carries the ordinal).",
      "url": "/reference/api/events/playeraction/",
      "members": [
        {
          "name": "StartDestroyBlock",
          "kind": "enumMember",
          "signature": "StartDestroyBlock = 0",
          "value": "0",
          "summary": "PlayerAction start_destroy_block (ordinal 0).",
          "documented": true,
          "url": "/reference/api/events/playeraction/#startdestroyblock"
        },
        {
          "name": "ChangeDestroyDirection",
          "kind": "enumMember",
          "signature": "ChangeDestroyDirection = 1",
          "value": "1",
          "summary": "PlayerAction change_destroy_direction (ordinal 1).",
          "documented": true,
          "url": "/reference/api/events/playeraction/#changedestroydirection"
        },
        {
          "name": "AbortDestroyBlock",
          "kind": "enumMember",
          "signature": "AbortDestroyBlock = 2",
          "value": "2",
          "summary": "PlayerAction abort_destroy_block (ordinal 2).",
          "documented": true,
          "url": "/reference/api/events/playeraction/#abortdestroyblock"
        },
        {
          "name": "StopDestroyBlock",
          "kind": "enumMember",
          "signature": "StopDestroyBlock = 3",
          "value": "3",
          "summary": "PlayerAction stop_destroy_block (ordinal 3).",
          "documented": true,
          "url": "/reference/api/events/playeraction/#stopdestroyblock"
        },
        {
          "name": "DropAllItems",
          "kind": "enumMember",
          "signature": "DropAllItems = 4",
          "value": "4",
          "summary": "PlayerAction drop_all_items (ordinal 4).",
          "documented": true,
          "url": "/reference/api/events/playeraction/#dropallitems"
        },
        {
          "name": "DropItem",
          "kind": "enumMember",
          "signature": "DropItem = 5",
          "value": "5",
          "summary": "PlayerAction drop_item (ordinal 5).",
          "documented": true,
          "url": "/reference/api/events/playeraction/#dropitem"
        },
        {
          "name": "ReleaseUseItem",
          "kind": "enumMember",
          "signature": "ReleaseUseItem = 6",
          "value": "6",
          "summary": "PlayerAction release_use_item (ordinal 6).",
          "documented": true,
          "url": "/reference/api/events/playeraction/#releaseuseitem"
        },
        {
          "name": "SwapItemWithOffhand",
          "kind": "enumMember",
          "signature": "SwapItemWithOffhand = 7",
          "value": "7",
          "summary": "PlayerAction swap_item_with_offhand (ordinal 7).",
          "documented": true,
          "url": "/reference/api/events/playeraction/#swapitemwithoffhand"
        },
        {
          "name": "Stab",
          "kind": "enumMember",
          "signature": "Stab = 8",
          "value": "8",
          "summary": "PlayerAction stab (ordinal 8).",
          "documented": true,
          "url": "/reference/api/events/playeraction/#stab"
        }
      ]
    },
    {
      "name": "PlayerSnapshot",
      "fullName": "Mc.Scripting.PlayerSnapshot",
      "namespace": "Mc.Scripting",
      "kind": "struct",
      "category": "players",
      "categoryLabel": "Players",
      "signature": "public readonly struct PlayerSnapshot : IEquatable<PlayerSnapshot>",
      "interfaces": [
        "IEquatable<PlayerSnapshot>"
      ],
      "summary": "One online player as the engine reports him (see `Server.PlayersSnapshot`).",
      "url": "/reference/api/players/playersnapshot/",
      "members": [
        {
          "name": "PlayerSnapshot",
          "kind": "ctor",
          "signature": "public PlayerSnapshot(ulong EntityId, Guid Uuid, int World, int GameMode, int Ping, bool Listed, bool AllowsListing, bool HasDisplayName, string Name)",
          "parameters": [
            {
              "name": "EntityId",
              "type": "ulong",
              "summary": "The entity handle; `PlayerSnapshot.Player` wraps it."
            },
            {
              "name": "Uuid",
              "type": "Guid",
              "summary": "The profile id."
            },
            {
              "name": "World",
              "type": "int",
              "summary": "The index of his dimension, -1 when unknown (see `Server.Worlds`)."
            },
            {
              "name": "GameMode",
              "type": "int",
              "summary": "The game mode, 0 survival, 1 creative, 2 adventure, 3 spectator."
            },
            {
              "name": "Ping",
              "type": "int",
              "summary": "The latency in milliseconds."
            },
            {
              "name": "Listed",
              "type": "bool",
              "summary": "Whether he is listed in the tab list."
            },
            {
              "name": "AllowsListing",
              "type": "bool",
              "summary": "Whether he allows being listed (the server list setting of his client)."
            },
            {
              "name": "HasDisplayName",
              "type": "bool",
              "summary": "Whether he has a display name in the tab list."
            },
            {
              "name": "Name",
              "type": "string",
              "summary": "His name."
            }
          ],
          "summary": "One online player as the engine reports him (see `Server.PlayersSnapshot`).",
          "documented": true,
          "url": "/reference/api/players/playersnapshot/#constructor"
        },
        {
          "name": "AllowsListing",
          "kind": "property",
          "signature": "public bool AllowsListing { get; init; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether he allows being listed (the server list setting of his client).",
          "documented": true,
          "url": "/reference/api/players/playersnapshot/#allowslisting"
        },
        {
          "name": "EntityId",
          "kind": "property",
          "signature": "public ulong EntityId { get; init; }",
          "returns": {
            "type": "ulong"
          },
          "summary": "The entity handle; `PlayerSnapshot.Player` wraps it.",
          "documented": true,
          "url": "/reference/api/players/playersnapshot/#entityid"
        },
        {
          "name": "GameMode",
          "kind": "property",
          "signature": "public int GameMode { get; init; }",
          "returns": {
            "type": "int"
          },
          "summary": "The game mode, 0 survival, 1 creative, 2 adventure, 3 spectator.",
          "documented": true,
          "url": "/reference/api/players/playersnapshot/#gamemode"
        },
        {
          "name": "HasDisplayName",
          "kind": "property",
          "signature": "public bool HasDisplayName { get; init; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether he has a display name in the tab list.",
          "documented": true,
          "url": "/reference/api/players/playersnapshot/#hasdisplayname"
        },
        {
          "name": "Listed",
          "kind": "property",
          "signature": "public bool Listed { get; init; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether he is listed in the tab list.",
          "documented": true,
          "url": "/reference/api/players/playersnapshot/#listed"
        },
        {
          "name": "Name",
          "kind": "property",
          "signature": "public string Name { get; init; }",
          "returns": {
            "type": "string"
          },
          "summary": "His name.",
          "documented": true,
          "url": "/reference/api/players/playersnapshot/#name"
        },
        {
          "name": "Ping",
          "kind": "property",
          "signature": "public int Ping { get; init; }",
          "returns": {
            "type": "int"
          },
          "summary": "The latency in milliseconds.",
          "documented": true,
          "url": "/reference/api/players/playersnapshot/#ping"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Player Player { get; }",
          "returns": {
            "type": "Player"
          },
          "summary": "The player handle (valid while he is online).",
          "documented": true,
          "url": "/reference/api/players/playersnapshot/#player"
        },
        {
          "name": "Uuid",
          "kind": "property",
          "signature": "public Guid Uuid { get; init; }",
          "returns": {
            "type": "Guid"
          },
          "summary": "The profile id.",
          "documented": true,
          "url": "/reference/api/players/playersnapshot/#uuid"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public int World { get; init; }",
          "returns": {
            "type": "int"
          },
          "summary": "The index of his dimension, -1 when unknown (see `Server.Worlds`).",
          "documented": true,
          "url": "/reference/api/players/playersnapshot/#world"
        }
      ]
    },
    {
      "name": "Plugin",
      "fullName": "Mc.Scripting.Plugin",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "plugins",
      "categoryLabel": "Plugins and lifecycle",
      "signature": "public abstract class Plugin : IPlugin",
      "interfaces": [
        "IPlugin"
      ],
      "summary": "Convenience base class exposing the plugin's scoped services.",
      "examples": [
        "```csharp\nusing Mc.Scripting;\n\n[PluginInfo(\"Hello\", Version = \"1.0.0\", Author = \"you\")]\npublic sealed class Hello : Plugin\n{\n    protected override void OnEnable()\n    {\n        Events.On((ref PlayerJoinEvent e) => Log.Info($\"{e.Username.ToString()} joined\"));\n    }\n\n    protected override void OnDisable() => Log.Info(\"bye\");\n}\n```"
      ],
      "url": "/reference/api/plugins/plugin/",
      "members": [
        {
          "name": "Plugin",
          "kind": "ctor",
          "signature": "protected Plugin()",
          "summary": "Plugins have a parameterless constructor (implicit). Do not do work in it; use `OnEnable`.",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#constructor"
        },
        {
          "name": "BossBars",
          "kind": "property",
          "signature": "public BossBars BossBars { get; }",
          "returns": {
            "type": "BossBars"
          },
          "summary": "Boss bars of this plugin (removed from every viewer when the plugin unloads).",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#bossbars"
        },
        {
          "name": "Channels",
          "kind": "property",
          "signature": "public ChannelRegistry Channels { get; }",
          "returns": {
            "type": "ChannelRegistry"
          },
          "summary": "Plugin messaging channels: listen on a channel (`ChannelRegistry.On`).",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#channels"
        },
        {
          "name": "ChunkTickets",
          "kind": "property",
          "signature": "public ChunkTickets ChunkTickets { get; }",
          "returns": {
            "type": "ChunkTickets"
          },
          "summary": "Chunk tickets of this plugin: chunks it keeps loaded (released when the plugin unloads).",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#chunktickets"
        },
        {
          "name": "Commands",
          "kind": "property",
          "signature": "public CommandRegistry Commands { get; }",
          "returns": {
            "type": "CommandRegistry"
          },
          "summary": "Commands of this plugin.",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#commands"
        },
        {
          "name": "Config",
          "kind": "property",
          "signature": "public PluginConfig Config { get; }",
          "returns": {
            "type": "PluginConfig"
          },
          "summary": "Configuration files and the data folder of this plugin.",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#config"
        },
        {
          "name": "Context",
          "kind": "property",
          "signature": "public PluginContext Context { get; }",
          "returns": {
            "type": "PluginContext"
          },
          "summary": "The plugin's scoped services.",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#context"
        },
        {
          "name": "DataFolder",
          "kind": "property",
          "signature": "public string DataFolder { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The plugin's data folder (`plugins/<id>/`), created on first access.",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#datafolder"
        },
        {
          "name": "Ecs",
          "kind": "property",
          "signature": "public Ecs Ecs { get; }",
          "returns": {
            "type": "Ecs"
          },
          "summary": "ECS access (components, queries).",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#ecs"
        },
        {
          "name": "Events",
          "kind": "property",
          "signature": "public EventRegistry Events { get; }",
          "returns": {
            "type": "EventRegistry"
          },
          "summary": "Event subscriptions of this plugin.",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#events"
        },
        {
          "name": "Holograms",
          "kind": "property",
          "signature": "public Holograms Holograms { get; }",
          "returns": {
            "type": "Holograms"
          },
          "summary": "Holograms: text that floats in the world for the players (removed when the plugin unloads).",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#holograms"
        },
        {
          "name": "Info",
          "kind": "property",
          "signature": "public PluginMetadata Info { get; }",
          "returns": {
            "type": "PluginMetadata"
          },
          "summary": "What the plugin declares about itself (id, version, dependencies, ...).",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#info"
        },
        {
          "name": "Log",
          "kind": "property",
          "signature": "public Logger Log { get; }",
          "returns": {
            "type": "Logger"
          },
          "summary": "The plugin's logger.",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#log"
        },
        {
          "name": "Menus",
          "kind": "property",
          "signature": "public Menus Menus { get; }",
          "returns": {
            "type": "Menus"
          },
          "summary": "Custom GUIs of this plugin (closed for every viewer when the plugin unloads).",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#menus"
        },
        {
          "name": "Npcs",
          "kind": "property",
          "signature": "public Npcs Npcs { get; }",
          "returns": {
            "type": "Npcs"
          },
          "summary": "NPCs: fake players with a skin, equipment and click events (removed when the plugin unloads).",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#npcs"
        },
        {
          "name": "Permissions",
          "kind": "property",
          "signature": "public PluginPermissions Permissions { get; }",
          "returns": {
            "type": "PluginPermissions"
          },
          "summary": "Permission nodes of this plugin and permission queries.",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#permissions"
        },
        {
          "name": "Scheduler",
          "kind": "property",
          "signature": "public Scheduler Scheduler { get; }",
          "returns": {
            "type": "Scheduler"
          },
          "summary": "Scheduled tasks of this plugin.",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#scheduler"
        },
        {
          "name": "Services",
          "kind": "property",
          "signature": "public ServiceManager Services { get; }",
          "returns": {
            "type": "ServiceManager"
          },
          "summary": "Plugin-to-plugin services: register an implementation, look up another plugin's.",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#services"
        },
        {
          "name": "Sidebars",
          "kind": "property",
          "signature": "public Sidebars Sidebars { get; }",
          "returns": {
            "type": "Sidebars"
          },
          "summary": "Per-player sidebar scoreboards of this plugin (hidden when the plugin unloads).",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#sidebars"
        },
        {
          "name": "Systems",
          "kind": "property",
          "signature": "public SystemRegistry Systems { get; }",
          "returns": {
            "type": "SystemRegistry"
          },
          "summary": "ECS systems of this plugin.",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#systems"
        },
        {
          "name": "OnDisable",
          "kind": "method",
          "signature": "protected virtual void OnDisable()",
          "summary": "Optional cleanup; registrations are released automatically afterwards.",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#ondisable"
        },
        {
          "name": "OnEnable",
          "kind": "method",
          "signature": "protected abstract void OnEnable()",
          "abstract": true,
          "summary": "Register events, commands and systems here.",
          "documented": true,
          "url": "/reference/api/plugins/plugin/#onenable"
        }
      ]
    },
    {
      "name": "PluginContext",
      "fullName": "Mc.Scripting.PluginContext",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "plugins",
      "categoryLabel": "Plugins and lifecycle",
      "signature": "public sealed class PluginContext",
      "summary": "Per-plugin services. Everything registered through it is released automatically when the plugin unloads or hot-reloads.",
      "remarks": "Plugins normally use the same members through the `Plugin` base class properties (`Events`, `Commands`, ...). Use the context directly when your code lives outside the plugin class: pass it to helper classes so everything they register is released with the plugin.",
      "url": "/reference/api/plugins/plugincontext/",
      "members": [
        {
          "name": "AssemblyPath",
          "kind": "property",
          "signature": "public string AssemblyPath { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "Path of the plugin assembly.",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#assemblypath"
        },
        {
          "name": "BossBars",
          "kind": "property",
          "signature": "public BossBars BossBars { get; }",
          "returns": {
            "type": "BossBars"
          },
          "summary": "Boss bars.",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#bossbars"
        },
        {
          "name": "Channels",
          "kind": "property",
          "signature": "public ChannelRegistry Channels { get; }",
          "returns": {
            "type": "ChannelRegistry"
          },
          "summary": "Plugin messaging channels of this plugin (`ChannelRegistry`).",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#channels"
        },
        {
          "name": "ChunkTickets",
          "kind": "property",
          "signature": "public ChunkTickets ChunkTickets { get; }",
          "returns": {
            "type": "ChunkTickets"
          },
          "summary": "Chunk tickets.",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#chunktickets"
        },
        {
          "name": "Commands",
          "kind": "property",
          "signature": "public CommandRegistry Commands { get; }",
          "returns": {
            "type": "CommandRegistry"
          },
          "summary": "Commands.",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#commands"
        },
        {
          "name": "Config",
          "kind": "property",
          "signature": "public PluginConfig Config { get; }",
          "returns": {
            "type": "PluginConfig"
          },
          "summary": "Configuration files and the data folder.",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#config"
        },
        {
          "name": "Ecs",
          "kind": "property",
          "signature": "public Ecs Ecs { get; }",
          "returns": {
            "type": "Ecs"
          },
          "summary": "ECS access.",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#ecs"
        },
        {
          "name": "Events",
          "kind": "property",
          "signature": "public EventRegistry Events { get; }",
          "returns": {
            "type": "EventRegistry"
          },
          "summary": "Event subscriptions.",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#events"
        },
        {
          "name": "Holograms",
          "kind": "property",
          "signature": "public Holograms Holograms { get; }",
          "returns": {
            "type": "Holograms"
          },
          "summary": "Holograms (text displays).",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#holograms"
        },
        {
          "name": "Id",
          "kind": "property",
          "signature": "public int Id { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Stable plugin id (kept across hot reloads).",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#id"
        },
        {
          "name": "Info",
          "kind": "property",
          "signature": "public PluginMetadata Info { get; }",
          "returns": {
            "type": "PluginMetadata"
          },
          "summary": "What the plugin declares about itself (`plugin.json` or `PluginInfoAttribute`).",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#info"
        },
        {
          "name": "IsUnloaded",
          "kind": "property",
          "signature": "public bool IsUnloaded { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the plugin was unloaded.",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#isunloaded"
        },
        {
          "name": "Log",
          "kind": "property",
          "signature": "public Logger Log { get; }",
          "returns": {
            "type": "Logger"
          },
          "summary": "The plugin's logger.",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#log"
        },
        {
          "name": "Menus",
          "kind": "property",
          "signature": "public Menus Menus { get; }",
          "returns": {
            "type": "Menus"
          },
          "summary": "Custom GUIs (menus) owned by this plugin.",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#menus"
        },
        {
          "name": "Name",
          "kind": "property",
          "signature": "public string Name { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The plugin name.",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#name"
        },
        {
          "name": "Npcs",
          "kind": "property",
          "signature": "public Npcs Npcs { get; }",
          "returns": {
            "type": "Npcs"
          },
          "summary": "NPCs (fake players).",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#npcs"
        },
        {
          "name": "Permissions",
          "kind": "property",
          "signature": "public PluginPermissions Permissions { get; }",
          "returns": {
            "type": "PluginPermissions"
          },
          "summary": "Permissions.",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#permissions"
        },
        {
          "name": "Scheduler",
          "kind": "property",
          "signature": "public Scheduler Scheduler { get; }",
          "returns": {
            "type": "Scheduler"
          },
          "summary": "Scheduler.",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#scheduler"
        },
        {
          "name": "Services",
          "kind": "property",
          "signature": "public ServiceManager Services { get; }",
          "returns": {
            "type": "ServiceManager"
          },
          "summary": "Plugin-to-plugin services.",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#services"
        },
        {
          "name": "Sidebars",
          "kind": "property",
          "signature": "public Sidebars Sidebars { get; }",
          "returns": {
            "type": "Sidebars"
          },
          "summary": "Sidebars.",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#sidebars"
        },
        {
          "name": "Systems",
          "kind": "property",
          "signature": "public SystemRegistry Systems { get; }",
          "returns": {
            "type": "SystemRegistry"
          },
          "summary": "Systems.",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#systems"
        },
        {
          "name": "Version",
          "kind": "property",
          "signature": "public string Version { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The plugin version.",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#version"
        },
        {
          "name": "Track",
          "kind": "method",
          "signature": "public void Track(IPluginResource resource)",
          "parameters": [
            {
              "name": "resource",
              "type": "IPluginResource"
            }
          ],
          "summary": "Registers an arbitrary resource to be disposed on unload.",
          "documented": true,
          "url": "/reference/api/plugins/plugincontext/#track"
        }
      ]
    },
    {
      "name": "PluginDependency",
      "fullName": "Mc.Scripting.PluginDependency",
      "namespace": "Mc.Scripting",
      "kind": "struct",
      "category": "plugins",
      "categoryLabel": "Plugins and lifecycle",
      "signature": "public readonly struct PluginDependency : IEquatable<PluginDependency>",
      "interfaces": [
        "IEquatable<PluginDependency>"
      ],
      "summary": "A dependency declaration of a plugin: the id of the other plugin and an optional version constraint.",
      "url": "/reference/api/plugins/plugindependency/",
      "members": [
        {
          "name": "PluginDependency",
          "kind": "ctor",
          "signature": "public PluginDependency(string Id, string? Constraint)",
          "parameters": [
            {
              "name": "Id",
              "type": "string",
              "summary": "The other plugin's id."
            },
            {
              "name": "Constraint",
              "type": "string?",
              "summary": "A version constraint such as \">=1.2\", \"^1.2\", \"=1.2.3\" (null = any version)."
            }
          ],
          "summary": "A dependency declaration of a plugin: the id of the other plugin and an optional version constraint.",
          "documented": true,
          "url": "/reference/api/plugins/plugindependency/#constructor"
        },
        {
          "name": "Constraint",
          "kind": "property",
          "signature": "public string? Constraint { get; init; }",
          "returns": {
            "type": "string?"
          },
          "summary": "A version constraint such as \">=1.2\", \"^1.2\", \"=1.2.3\" (null = any version).",
          "documented": true,
          "url": "/reference/api/plugins/plugindependency/#constraint"
        },
        {
          "name": "Id",
          "kind": "property",
          "signature": "public string Id { get; init; }",
          "returns": {
            "type": "string"
          },
          "summary": "The other plugin's id.",
          "documented": true,
          "url": "/reference/api/plugins/plugindependency/#id"
        },
        {
          "name": "Accepts",
          "kind": "method",
          "signature": "public bool Accepts(string version)",
          "parameters": [
            {
              "name": "version",
              "type": "string",
              "summary": "A version text such as \"1.2.0\" or \"1.2.0-beta\"."
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Whether `version` satisfies the constraint.",
          "documented": true,
          "url": "/reference/api/plugins/plugindependency/#accepts"
        },
        {
          "name": "ToString",
          "kind": "method",
          "signature": "public override string ToString()",
          "returns": {
            "type": "string"
          },
          "documented": false,
          "url": "/reference/api/plugins/plugindependency/#tostring"
        },
        {
          "name": "Parse",
          "kind": "method",
          "signature": "public static PluginDependency Parse(string text)",
          "static": true,
          "parameters": [
            {
              "name": "text",
              "type": "string",
              "summary": "The text from `plugin.json`."
            }
          ],
          "returns": {
            "type": "PluginDependency",
            "summary": "The dependency."
          },
          "summary": "Parses \"economy\" or \"economy >=1.2\".",
          "documented": true,
          "url": "/reference/api/plugins/plugindependency/#parse"
        }
      ]
    },
    {
      "name": "PluginInfoAttribute",
      "fullName": "Mc.Scripting.PluginInfoAttribute",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "plugins",
      "categoryLabel": "Plugins and lifecycle",
      "signature": "public sealed class PluginInfoAttribute : Attribute",
      "baseType": "Attribute",
      "summary": "Optional metadata for a plugin type.",
      "examples": [
        "```csharp\n[PluginInfo(\"Homes\", Version = \"1.2.0\", Author = \"you\", Description = \"Set and teleport to homes\")]\npublic sealed class HomesPlugin : Plugin\n{\n    protected override void OnEnable() { /* ... */ }\n}\n```"
      ],
      "url": "/reference/api/plugins/plugininfoattribute/",
      "members": [
        {
          "name": "PluginInfoAttribute",
          "kind": "ctor",
          "signature": "public PluginInfoAttribute(string name)",
          "parameters": [
            {
              "name": "name",
              "type": "string"
            }
          ],
          "summary": "Optional metadata for a plugin type.",
          "documented": true,
          "url": "/reference/api/plugins/plugininfoattribute/#constructor"
        },
        {
          "name": "Author",
          "kind": "property",
          "signature": "public string? Author { get; init; }",
          "returns": {
            "type": "string?"
          },
          "summary": "Author.",
          "documented": true,
          "url": "/reference/api/plugins/plugininfoattribute/#author"
        },
        {
          "name": "Description",
          "kind": "property",
          "signature": "public string? Description { get; init; }",
          "returns": {
            "type": "string?"
          },
          "summary": "Description.",
          "documented": true,
          "url": "/reference/api/plugins/plugininfoattribute/#description"
        },
        {
          "name": "Name",
          "kind": "property",
          "signature": "public string Name { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "Display name.",
          "documented": true,
          "url": "/reference/api/plugins/plugininfoattribute/#name"
        },
        {
          "name": "Version",
          "kind": "property",
          "signature": "public string Version { get; init; }",
          "returns": {
            "type": "string"
          },
          "summary": "Version text.",
          "documented": true,
          "url": "/reference/api/plugins/plugininfoattribute/#version"
        }
      ]
    },
    {
      "name": "PluginMessageHandler",
      "fullName": "Mc.Scripting.PluginMessageHandler",
      "namespace": "Mc.Scripting",
      "kind": "delegate",
      "category": "plugins",
      "categoryLabel": "Plugins and lifecycle",
      "signature": "public delegate void PluginMessageHandler(Player player, ReadOnlySpan<byte> data)",
      "summary": "Receives a message a client sent on a channel the plugin listens on. `data` is valid for the call only.",
      "url": "/reference/api/plugins/pluginmessagehandler/",
      "members": [],
      "parameters": [
        {
          "name": "player",
          "type": "Player"
        },
        {
          "name": "data",
          "type": "ReadOnlySpan<byte>"
        }
      ],
      "returns": "void"
    },
    {
      "name": "PluginMetadata",
      "fullName": "Mc.Scripting.PluginMetadata",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "plugins",
      "categoryLabel": "Plugins and lifecycle",
      "signature": "public sealed class PluginMetadata",
      "summary": "What a plugin declares about itself: from `plugin.json`, or from `PluginInfoAttribute` when there is no manifest.",
      "url": "/reference/api/plugins/pluginmetadata/",
      "members": [
        {
          "name": "PluginMetadata",
          "kind": "ctor",
          "signature": "public PluginMetadata(string id, string name, string version)",
          "parameters": [
            {
              "name": "id",
              "type": "string"
            },
            {
              "name": "name",
              "type": "string"
            },
            {
              "name": "version",
              "type": "string"
            }
          ],
          "summary": "Creates metadata (the runtime does this; plugins read it from `PluginContext.Info`).",
          "documented": true,
          "url": "/reference/api/plugins/pluginmetadata/#constructor"
        },
        {
          "name": "Api",
          "kind": "property",
          "signature": "public ApiVersion Api { get; init; }",
          "returns": {
            "type": "ApiVersion"
          },
          "summary": "The plugin API version the plugin was written for.",
          "documented": true,
          "url": "/reference/api/plugins/pluginmetadata/#api"
        },
        {
          "name": "ApiDeclared",
          "kind": "property",
          "signature": "public bool ApiDeclared { get; init; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the manifest named an API version (otherwise 1.0 was assumed).",
          "documented": true,
          "url": "/reference/api/plugins/pluginmetadata/#apideclared"
        },
        {
          "name": "Authors",
          "kind": "property",
          "signature": "public IReadOnlyList<string> Authors { get; init; }",
          "returns": {
            "type": "IReadOnlyList<string>"
          },
          "summary": "The author names.",
          "documented": true,
          "url": "/reference/api/plugins/pluginmetadata/#authors"
        },
        {
          "name": "Depends",
          "kind": "property",
          "signature": "public IReadOnlyList<PluginDependency> Depends { get; init; }",
          "returns": {
            "type": "IReadOnlyList<PluginDependency>"
          },
          "summary": "Plugins that must be loaded (and enabled) before this one; a missing one prevents this plugin from loading.",
          "documented": true,
          "url": "/reference/api/plugins/pluginmetadata/#depends"
        },
        {
          "name": "Description",
          "kind": "property",
          "signature": "public string Description { get; init; }",
          "returns": {
            "type": "string"
          },
          "summary": "A one-line description.",
          "documented": true,
          "url": "/reference/api/plugins/pluginmetadata/#description"
        },
        {
          "name": "Id",
          "kind": "property",
          "signature": "public string Id { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "Unique id: lower case letters, digits, '-' and '_' (1-32 characters). Also the data folder name.",
          "documented": true,
          "url": "/reference/api/plugins/pluginmetadata/#id"
        },
        {
          "name": "LoadBefore",
          "kind": "property",
          "signature": "public IReadOnlyList<string> LoadBefore { get; init; }",
          "returns": {
            "type": "IReadOnlyList<string>"
          },
          "summary": "Plugins that should be loaded after this one (the reverse of a soft dependency).",
          "documented": true,
          "url": "/reference/api/plugins/pluginmetadata/#loadbefore"
        },
        {
          "name": "Main",
          "kind": "property",
          "signature": "public string? Main { get; init; }",
          "returns": {
            "type": "string?"
          },
          "summary": "The full name of the plugin class when the assembly has several candidates (default: the single public `IPlugin`).",
          "documented": true,
          "url": "/reference/api/plugins/pluginmetadata/#main"
        },
        {
          "name": "Name",
          "kind": "property",
          "signature": "public string Name { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "Display name (used as the log prefix).",
          "documented": true,
          "url": "/reference/api/plugins/pluginmetadata/#name"
        },
        {
          "name": "SoftDepends",
          "kind": "property",
          "signature": "public IReadOnlyList<PluginDependency> SoftDepends { get; init; }",
          "returns": {
            "type": "IReadOnlyList<PluginDependency>"
          },
          "summary": "Plugins that are loaded before this one when present.",
          "documented": true,
          "url": "/reference/api/plugins/pluginmetadata/#softdepends"
        },
        {
          "name": "Source",
          "kind": "property",
          "signature": "public string Source { get; init; }",
          "returns": {
            "type": "string"
          },
          "summary": "The path of the manifest or assembly this was read from.",
          "documented": true,
          "url": "/reference/api/plugins/pluginmetadata/#source"
        },
        {
          "name": "Version",
          "kind": "property",
          "signature": "public string Version { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "Plugin version.",
          "documented": true,
          "url": "/reference/api/plugins/pluginmetadata/#version"
        },
        {
          "name": "Website",
          "kind": "property",
          "signature": "public string Website { get; init; }",
          "returns": {
            "type": "string"
          },
          "summary": "A website or repository url.",
          "documented": true,
          "url": "/reference/api/plugins/pluginmetadata/#website"
        },
        {
          "name": "IsValidId",
          "kind": "method",
          "signature": "public static bool IsValidId(string id)",
          "static": true,
          "parameters": [
            {
              "name": "id",
              "type": "string",
              "summary": "The text."
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Whether `id` is a valid plugin id.",
          "documented": true,
          "url": "/reference/api/plugins/pluginmetadata/#isvalidid"
        }
      ]
    },
    {
      "name": "Plugins",
      "fullName": "Mc.Scripting.Plugins",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "plugins",
      "categoryLabel": "Plugins and lifecycle",
      "signature": "public static class Plugins",
      "summary": "Read-only view of the loaded plugins: for admin tools (a `/plugins` command), for plugins that adapt to an optional other plugin, and for diagnosing why a plugin did not load.",
      "url": "/reference/api/plugins/plugins/",
      "members": [
        {
          "name": "All",
          "kind": "property",
          "signature": "public static IReadOnlyList<PluginMetadata> All { get; }",
          "static": true,
          "returns": {
            "type": "IReadOnlyList<PluginMetadata>"
          },
          "summary": "The loaded (enabled) plugins in load order: dependencies before their dependents.",
          "documented": true,
          "url": "/reference/api/plugins/plugins/#all"
        },
        {
          "name": "Problems",
          "kind": "property",
          "signature": "public static IReadOnlyList<string> Problems { get; }",
          "static": true,
          "returns": {
            "type": "IReadOnlyList<string>"
          },
          "summary": "The problems found while discovering and loading plugins (bad manifests, missing or outdated dependencies, dependency cycles, an unsupported API version, failures in `OnEnable`), one readable sentence each, newest scan last.",
          "documented": true,
          "url": "/reference/api/plugins/plugins/#problems"
        },
        {
          "name": "Get",
          "kind": "method",
          "signature": "public static PluginMetadata? Get(string id)",
          "static": true,
          "parameters": [
            {
              "name": "id",
              "type": "string",
              "summary": "The plugin id (case-sensitive, lower case)."
            }
          ],
          "returns": {
            "type": "PluginMetadata?"
          },
          "summary": "The metadata of a loaded plugin, null when no plugin with this id is loaded.",
          "documented": true,
          "url": "/reference/api/plugins/plugins/#get"
        },
        {
          "name": "IsLoaded",
          "kind": "method",
          "signature": "public static bool IsLoaded(string id)",
          "static": true,
          "parameters": [
            {
              "name": "id",
              "type": "string",
              "summary": "The plugin id."
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Whether a plugin is loaded.",
          "documented": true,
          "url": "/reference/api/plugins/plugins/#isloaded"
        }
      ]
    },
    {
      "name": "PortalCreateReason",
      "fullName": "Mc.Scripting.PortalCreateReason",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "events",
      "categoryLabel": "Events (infrastructure)",
      "signature": "public enum PortalCreateReason : byte",
      "summary": "Why a portal is being created.",
      "url": "/reference/api/events/portalcreatereason/",
      "members": [
        {
          "name": "Fire",
          "kind": "enumMember",
          "signature": "Fire = 0",
          "value": "0",
          "summary": "Lit with fire.",
          "documented": true,
          "url": "/reference/api/events/portalcreatereason/#fire"
        },
        {
          "name": "NetherPair",
          "kind": "enumMember",
          "signature": "NetherPair = 1",
          "value": "1",
          "summary": "The destination portal of a nether portal trip.",
          "documented": true,
          "url": "/reference/api/events/portalcreatereason/#netherpair"
        },
        {
          "name": "Plugin",
          "kind": "enumMember",
          "signature": "Plugin = 2",
          "value": "2",
          "summary": "A plugin.",
          "documented": true,
          "url": "/reference/api/events/portalcreatereason/#plugin"
        }
      ]
    },
    {
      "name": "PotionEffect",
      "fullName": "Mc.Scripting.PotionEffect",
      "namespace": "Mc.Scripting",
      "kind": "struct",
      "category": "players",
      "categoryLabel": "Players",
      "signature": "public readonly struct PotionEffect : IEquatable<PotionEffect>",
      "interfaces": [
        "IEquatable<PotionEffect>"
      ],
      "summary": "A status effect to apply to a player (a potion effect in Bukkit terms).",
      "url": "/reference/api/players/potioneffect/",
      "members": [
        {
          "name": "PotionEffect",
          "kind": "ctor",
          "signature": "public PotionEffect(string Effect, int DurationTicks, int Amplifier = 0, bool Ambient = false, bool ShowParticles = true, bool ShowIcon = true)",
          "parameters": [
            {
              "name": "Effect",
              "type": "string",
              "summary": "The effect key, e.g. `minecraft:speed` (the namespace may be left out)."
            },
            {
              "name": "DurationTicks",
              "type": "int",
              "summary": "How long it lasts in ticks (20 per second), or `PotionEffect.Infinite`."
            },
            {
              "name": "Amplifier",
              "type": "int",
              "default": "0",
              "summary": "The level minus one: 0 is level I, 1 is level II, up to 255."
            },
            {
              "name": "Ambient",
              "type": "bool",
              "default": "false",
              "summary": "Whether it comes from a beacon (translucent particles)."
            },
            {
              "name": "ShowParticles",
              "type": "bool",
              "default": "true",
              "summary": "Whether the effect shows particles around the player."
            },
            {
              "name": "ShowIcon",
              "type": "bool",
              "default": "true",
              "summary": "Whether the effect shows in the player's HUD."
            }
          ],
          "summary": "A status effect to apply to a player (a potion effect in Bukkit terms).",
          "documented": true,
          "url": "/reference/api/players/potioneffect/#constructor"
        },
        {
          "name": "Infinite",
          "kind": "field",
          "signature": "public const int Infinite = -1;",
          "static": true,
          "returns": {
            "type": "int"
          },
          "summary": "The duration of an effect that never runs out.",
          "documented": true,
          "url": "/reference/api/players/potioneffect/#infinite"
        },
        {
          "name": "Ambient",
          "kind": "property",
          "signature": "public bool Ambient { get; init; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether it comes from a beacon (translucent particles).",
          "documented": true,
          "url": "/reference/api/players/potioneffect/#ambient"
        },
        {
          "name": "Amplifier",
          "kind": "property",
          "signature": "public int Amplifier { get; init; }",
          "returns": {
            "type": "int"
          },
          "summary": "The level minus one: 0 is level I, 1 is level II, up to 255.",
          "documented": true,
          "url": "/reference/api/players/potioneffect/#amplifier"
        },
        {
          "name": "DurationTicks",
          "kind": "property",
          "signature": "public int DurationTicks { get; init; }",
          "returns": {
            "type": "int"
          },
          "summary": "How long it lasts in ticks (20 per second), or `PotionEffect.Infinite`.",
          "documented": true,
          "url": "/reference/api/players/potioneffect/#durationticks"
        },
        {
          "name": "Effect",
          "kind": "property",
          "signature": "public string Effect { get; init; }",
          "returns": {
            "type": "string"
          },
          "summary": "The effect key, e.g. `minecraft:speed` (the namespace may be left out).",
          "documented": true,
          "url": "/reference/api/players/potioneffect/#effect"
        },
        {
          "name": "IsInfinite",
          "kind": "property",
          "signature": "public bool IsInfinite { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the effect never runs out.",
          "documented": true,
          "url": "/reference/api/players/potioneffect/#isinfinite"
        },
        {
          "name": "ShowIcon",
          "kind": "property",
          "signature": "public bool ShowIcon { get; init; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the effect shows in the player's HUD.",
          "documented": true,
          "url": "/reference/api/players/potioneffect/#showicon"
        },
        {
          "name": "ShowParticles",
          "kind": "property",
          "signature": "public bool ShowParticles { get; init; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the effect shows particles around the player.",
          "documented": true,
          "url": "/reference/api/players/potioneffect/#showparticles"
        },
        {
          "name": "For",
          "kind": "method",
          "signature": "public static PotionEffect For(string effect, TimeSpan duration, int amplifier = 0)",
          "static": true,
          "parameters": [
            {
              "name": "effect",
              "type": "string",
              "summary": "The effect key."
            },
            {
              "name": "duration",
              "type": "TimeSpan",
              "summary": "How long it lasts."
            },
            {
              "name": "amplifier",
              "type": "int",
              "default": "0",
              "summary": "The level minus one."
            }
          ],
          "returns": {
            "type": "PotionEffect"
          },
          "summary": "Creates an effect lasting a number of seconds.",
          "documented": true,
          "url": "/reference/api/players/potioneffect/#for"
        }
      ]
    },
    {
      "name": "PresenceExtensions",
      "fullName": "Mc.Scripting.PresenceExtensions",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "display",
      "categoryLabel": "Scoreboards, boss bars, tab list",
      "signature": "public static class PresenceExtensions",
      "summary": "The presence API of a plugin: `plugin.Tablist`, `plugin.Nametags` and `plugin.Belowname`, on the plugin base class and on the plugin context. Everything a plugin sets through them is restored and removed when the plugin unloads.",
      "url": "/reference/api/display/presenceextensions/",
      "members": [
        {
          "name": "get_Belowname",
          "kind": "method",
          "signature": "public static Belowname get_Belowname(Plugin plugin)",
          "static": true,
          "parameters": [
            {
              "name": "plugin",
              "type": "Plugin"
            }
          ],
          "returns": {
            "type": "Belowname"
          },
          "documented": false,
          "url": "/reference/api/display/presenceextensions/#get_belowname"
        },
        {
          "name": "get_Belowname",
          "kind": "method",
          "signature": "public static Belowname get_Belowname(PluginContext context)",
          "static": true,
          "parameters": [
            {
              "name": "context",
              "type": "PluginContext"
            }
          ],
          "returns": {
            "type": "Belowname"
          },
          "documented": false,
          "url": "/reference/api/display/presenceextensions/#get_belowname-1"
        },
        {
          "name": "get_Nametags",
          "kind": "method",
          "signature": "public static Nametags get_Nametags(Plugin plugin)",
          "static": true,
          "parameters": [
            {
              "name": "plugin",
              "type": "Plugin"
            }
          ],
          "returns": {
            "type": "Nametags"
          },
          "documented": false,
          "url": "/reference/api/display/presenceextensions/#get_nametags"
        },
        {
          "name": "get_Nametags",
          "kind": "method",
          "signature": "public static Nametags get_Nametags(PluginContext context)",
          "static": true,
          "parameters": [
            {
              "name": "context",
              "type": "PluginContext"
            }
          ],
          "returns": {
            "type": "Nametags"
          },
          "documented": false,
          "url": "/reference/api/display/presenceextensions/#get_nametags-1"
        },
        {
          "name": "get_Tablist",
          "kind": "method",
          "signature": "public static Tablist get_Tablist(Plugin plugin)",
          "static": true,
          "parameters": [
            {
              "name": "plugin",
              "type": "Plugin"
            }
          ],
          "returns": {
            "type": "Tablist"
          },
          "documented": false,
          "url": "/reference/api/display/presenceextensions/#get_tablist"
        },
        {
          "name": "get_Tablist",
          "kind": "method",
          "signature": "public static Tablist get_Tablist(PluginContext context)",
          "static": true,
          "parameters": [
            {
              "name": "context",
              "type": "PluginContext"
            }
          ],
          "returns": {
            "type": "Tablist"
          },
          "documented": false,
          "url": "/reference/api/display/presenceextensions/#get_tablist-1"
        }
      ]
    },
    {
      "name": "Query",
      "fullName": "Mc.Scripting.Query",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "ecs",
      "categoryLabel": "Entities, components, queries",
      "signature": "public abstract class Query : IDisposable, IPluginResource",
      "interfaces": [
        "IDisposable",
        "IPluginResource"
      ],
      "summary": "A cached ECS query. Iterate with `foreach (var chunk in query)` for the fastest path (SoA spans per archetype), or use `Each` for convenience.",
      "remarks": "Iterate `foreach (var chunk in query)` for the fastest path (one `QueryChunk` per archetype, with a `Span<T>` per component), or call `Each` on the typed query. Structural changes made while iterating (adding or removing components, destroying entities) are deferred until the iteration ends.",
      "url": "/reference/api/ecs/query/",
      "members": [
        {
          "name": "Count",
          "kind": "method",
          "signature": "public int Count()",
          "returns": {
            "type": "int"
          },
          "summary": "Number of matching entities (iterates).",
          "documented": true,
          "url": "/reference/api/ecs/query/#count"
        },
        {
          "name": "Dispose",
          "kind": "method",
          "signature": "public void Dispose()",
          "summary": "Destroys the query.",
          "documented": true,
          "url": "/reference/api/ecs/query/#dispose"
        },
        {
          "name": "GetEnumerator",
          "kind": "method",
          "signature": "public QueryEnumerator GetEnumerator()",
          "returns": {
            "type": "QueryEnumerator"
          },
          "summary": "Starts an iteration over the matching archetype chunks.",
          "documented": true,
          "url": "/reference/api/ecs/query/#getenumerator"
        }
      ]
    },
    {
      "name": "QueryAction<T1>",
      "fullName": "Mc.Scripting.QueryAction`1",
      "namespace": "Mc.Scripting",
      "kind": "delegate",
      "category": "ecs",
      "categoryLabel": "Entities, components, queries",
      "signature": "public delegate void QueryAction<T1>(Entity entity, ref T1? c1)",
      "typeParameters": [
        "T1"
      ],
      "summary": "Callback for `Each` over one component.",
      "url": "/reference/api/ecs/queryaction-1/",
      "members": [],
      "parameters": [
        {
          "name": "entity",
          "type": "Entity",
          "summary": "The matching entity."
        },
        {
          "name": "c1",
          "type": "T1?",
          "summary": "Reference to its first component."
        }
      ],
      "returns": "void"
    },
    {
      "name": "QueryAction<T1, T2>",
      "fullName": "Mc.Scripting.QueryAction`2",
      "namespace": "Mc.Scripting",
      "kind": "delegate",
      "category": "ecs",
      "categoryLabel": "Entities, components, queries",
      "signature": "public delegate void QueryAction<T1, T2>(Entity entity, ref T1? c1, ref T2? c2)",
      "typeParameters": [
        "T1",
        "T2"
      ],
      "summary": "Callback for `Each` over two components.",
      "url": "/reference/api/ecs/queryaction-2/",
      "members": [],
      "parameters": [
        {
          "name": "entity",
          "type": "Entity"
        },
        {
          "name": "c1",
          "type": "T1?"
        },
        {
          "name": "c2",
          "type": "T2?"
        }
      ],
      "returns": "void"
    },
    {
      "name": "QueryAction<T1, T2, T3>",
      "fullName": "Mc.Scripting.QueryAction`3",
      "namespace": "Mc.Scripting",
      "kind": "delegate",
      "category": "ecs",
      "categoryLabel": "Entities, components, queries",
      "signature": "public delegate void QueryAction<T1, T2, T3>(Entity entity, ref T1? c1, ref T2? c2, ref T3? c3)",
      "typeParameters": [
        "T1",
        "T2",
        "T3"
      ],
      "summary": "Callback for `Each` over three components.",
      "url": "/reference/api/ecs/queryaction-3/",
      "members": [],
      "parameters": [
        {
          "name": "entity",
          "type": "Entity"
        },
        {
          "name": "c1",
          "type": "T1?"
        },
        {
          "name": "c2",
          "type": "T2?"
        },
        {
          "name": "c3",
          "type": "T3?"
        }
      ],
      "returns": "void"
    },
    {
      "name": "QueryChunk",
      "fullName": "Mc.Scripting.QueryChunk",
      "namespace": "Mc.Scripting",
      "kind": "struct",
      "category": "ecs",
      "categoryLabel": "Entities, components, queries",
      "signature": "public readonly ref struct QueryChunk",
      "summary": "One archetype's worth of query results: entity ids and one column per query term.",
      "url": "/reference/api/ecs/querychunk/",
      "members": [
        {
          "name": "Count",
          "kind": "property",
          "signature": "public int Count { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Number of entities in the chunk.",
          "documented": true,
          "url": "/reference/api/ecs/querychunk/#count"
        },
        {
          "name": "Entities",
          "kind": "property",
          "signature": "public ReadOnlySpan<Entity> Entities { get; }",
          "returns": {
            "type": "ReadOnlySpan<Entity>"
          },
          "summary": "The entity ids of the chunk.",
          "documented": true,
          "url": "/reference/api/ecs/querychunk/#entities"
        },
        {
          "name": "Field",
          "kind": "method",
          "signature": "public Span<T> Field<T>(int index) where T : unmanaged",
          "parameters": [
            {
              "name": "index",
              "type": "int"
            }
          ],
          "returns": {
            "type": "Span<T>"
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : unmanaged"
          ],
          "summary": "Column for query term `index` (the order of the query's type arguments).",
          "documented": true,
          "url": "/reference/api/ecs/querychunk/#fieldt"
        }
      ]
    },
    {
      "name": "QueryEnumerator",
      "fullName": "Mc.Scripting.QueryEnumerator",
      "namespace": "Mc.Scripting",
      "kind": "struct",
      "category": "ecs",
      "categoryLabel": "Entities, components, queries",
      "signature": "public ref struct QueryEnumerator",
      "summary": "Iterates archetype chunks. Disposing early releases the native iterator.",
      "url": "/reference/api/ecs/queryenumerator/",
      "members": [
        {
          "name": "Current",
          "kind": "property",
          "signature": "public QueryChunk Current { get; }",
          "returns": {
            "type": "QueryChunk"
          },
          "summary": "The current chunk.",
          "documented": true,
          "url": "/reference/api/ecs/queryenumerator/#current"
        },
        {
          "name": "Dispose",
          "kind": "method",
          "signature": "public void Dispose()",
          "summary": "Releases the native iterator when abandoning the loop early.",
          "documented": true,
          "url": "/reference/api/ecs/queryenumerator/#dispose"
        },
        {
          "name": "MoveNext",
          "kind": "method",
          "signature": "public bool MoveNext()",
          "returns": {
            "type": "bool"
          },
          "summary": "Advances to the next chunk.",
          "documented": true,
          "url": "/reference/api/ecs/queryenumerator/#movenext"
        }
      ]
    },
    {
      "name": "Query<T1>",
      "fullName": "Mc.Scripting.Query`1",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "ecs",
      "categoryLabel": "Entities, components, queries",
      "signature": "public sealed class Query<T1> : Query where T1 : unmanaged",
      "baseType": "Query",
      "typeParameters": [
        "T1"
      ],
      "summary": "A query over one component type.",
      "examples": [
        "```csharp\n// _mana is a Query<Mana> created in OnEnable with Ecs.Query<Mana>()\n_mana.Each((Entity entity, ref Mana m) => m.Value++);\n```"
      ],
      "url": "/reference/api/ecs/query-1/",
      "members": [
        {
          "name": "Each",
          "kind": "method",
          "signature": "public void Each(QueryAction<T1> action)",
          "parameters": [
            {
              "name": "action",
              "type": "QueryAction<T1>"
            }
          ],
          "summary": "Calls `action` for every matching entity.",
          "documented": true,
          "url": "/reference/api/ecs/query-1/#each"
        }
      ]
    },
    {
      "name": "Query<T1, T2>",
      "fullName": "Mc.Scripting.Query`2",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "ecs",
      "categoryLabel": "Entities, components, queries",
      "signature": "public sealed class Query<T1, T2> : Query where T1 : unmanaged where T2 : unmanaged",
      "baseType": "Query",
      "typeParameters": [
        "T1",
        "T2"
      ],
      "summary": "A query over two component types.",
      "url": "/reference/api/ecs/query-2/",
      "members": [
        {
          "name": "Each",
          "kind": "method",
          "signature": "public void Each(QueryAction<T1, T2> action)",
          "parameters": [
            {
              "name": "action",
              "type": "QueryAction<T1, T2>"
            }
          ],
          "summary": "Calls `action` for every matching entity.",
          "documented": true,
          "url": "/reference/api/ecs/query-2/#each"
        }
      ]
    },
    {
      "name": "Query<T1, T2, T3>",
      "fullName": "Mc.Scripting.Query`3",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "ecs",
      "categoryLabel": "Entities, components, queries",
      "signature": "public sealed class Query<T1, T2, T3> : Query where T1 : unmanaged where T2 : unmanaged where T3 : unmanaged",
      "baseType": "Query",
      "typeParameters": [
        "T1",
        "T2",
        "T3"
      ],
      "summary": "A query over three component types.",
      "url": "/reference/api/ecs/query-3/",
      "members": [
        {
          "name": "Each",
          "kind": "method",
          "signature": "public void Each(QueryAction<T1, T2, T3> action)",
          "parameters": [
            {
              "name": "action",
              "type": "QueryAction<T1, T2, T3>"
            }
          ],
          "summary": "Calls `action` for every matching entity.",
          "documented": true,
          "url": "/reference/api/ecs/query-3/#each"
        }
      ]
    },
    {
      "name": "ResourcePack",
      "fullName": "Mc.Scripting.ResourcePack",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "players",
      "categoryLabel": "Players",
      "signature": "public sealed class ResourcePack : IEquatable<ResourcePack>",
      "interfaces": [
        "IEquatable<ResourcePack>"
      ],
      "summary": "A resource pack the server asks clients to download.",
      "url": "/reference/api/players/resourcepack/",
      "members": [
        {
          "name": "ResourcePack",
          "kind": "ctor",
          "signature": "public ResourcePack(Uuid Id, string Url, string? Sha1 = null, bool Required = false, Component? Prompt = null)",
          "parameters": [
            {
              "name": "Id",
              "type": "Uuid",
              "summary": "The pack id (clients keep one pack per id: pushing the same id replaces it)."
            },
            {
              "name": "Url",
              "type": "string",
              "summary": "The download address (http or https)."
            },
            {
              "name": "Sha1",
              "type": "string?",
              "default": "null",
              "summary": "The SHA-1 hash of the zip as 40 hex characters; null skips the check (clients then re-download on every push)."
            },
            {
              "name": "Required",
              "type": "bool",
              "default": "false",
              "summary": "Whether the client is disconnected when it declines the pack."
            },
            {
              "name": "Prompt",
              "type": "Component?",
              "default": "null",
              "summary": "Text shown in the download prompt, null for the default."
            }
          ],
          "summary": "A resource pack the server asks clients to download.",
          "documented": true,
          "url": "/reference/api/players/resourcepack/#constructor"
        },
        {
          "name": "Id",
          "kind": "property",
          "signature": "public Uuid Id { get; init; }",
          "returns": {
            "type": "Uuid"
          },
          "summary": "The pack id (clients keep one pack per id: pushing the same id replaces it).",
          "documented": true,
          "url": "/reference/api/players/resourcepack/#id"
        },
        {
          "name": "Prompt",
          "kind": "property",
          "signature": "public Component? Prompt { get; init; }",
          "returns": {
            "type": "Component?"
          },
          "summary": "Text shown in the download prompt, null for the default.",
          "documented": true,
          "url": "/reference/api/players/resourcepack/#prompt"
        },
        {
          "name": "Required",
          "kind": "property",
          "signature": "public bool Required { get; init; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the client is disconnected when it declines the pack.",
          "documented": true,
          "url": "/reference/api/players/resourcepack/#required"
        },
        {
          "name": "Sha1",
          "kind": "property",
          "signature": "public string? Sha1 { get; init; }",
          "returns": {
            "type": "string?"
          },
          "summary": "The SHA-1 hash of the zip as 40 hex characters; null skips the check (clients then re-download on every push).",
          "documented": true,
          "url": "/reference/api/players/resourcepack/#sha1"
        },
        {
          "name": "Url",
          "kind": "property",
          "signature": "public string Url { get; init; }",
          "returns": {
            "type": "string"
          },
          "summary": "The download address (http or https).",
          "documented": true,
          "url": "/reference/api/players/resourcepack/#url"
        },
        {
          "name": "FromUrl",
          "kind": "method",
          "signature": "public static ResourcePack FromUrl(string url, string? sha1 = null, bool required = false, Component? prompt = null)",
          "static": true,
          "parameters": [
            {
              "name": "url",
              "type": "string",
              "summary": "The download address."
            },
            {
              "name": "sha1",
              "type": "string?",
              "default": "null",
              "summary": "The SHA-1 hash (40 hex characters)."
            },
            {
              "name": "required",
              "type": "bool",
              "default": "false",
              "summary": "Whether declining disconnects the client."
            },
            {
              "name": "prompt",
              "type": "Component?",
              "default": "null",
              "summary": "Text shown in the prompt."
            }
          ],
          "returns": {
            "type": "ResourcePack"
          },
          "summary": "Creates a pack whose id is derived from its url, so pushing the same url twice replaces the first push.",
          "documented": true,
          "url": "/reference/api/players/resourcepack/#fromurl"
        }
      ]
    },
    {
      "name": "ResourcePackStatus",
      "fullName": "Mc.Scripting.ResourcePackStatus",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "players",
      "categoryLabel": "Players",
      "signature": "public enum ResourcePackStatus : byte",
      "summary": "Client report about a pushed resource pack (protocol order).",
      "url": "/reference/api/players/resourcepackstatus/",
      "members": [
        {
          "name": "SuccessfullyLoaded",
          "kind": "enumMember",
          "signature": "SuccessfullyLoaded = 0",
          "value": "0",
          "summary": "The pack was applied.",
          "documented": true,
          "url": "/reference/api/players/resourcepackstatus/#successfullyloaded"
        },
        {
          "name": "Declined",
          "kind": "enumMember",
          "signature": "Declined = 1",
          "value": "1",
          "summary": "The player declined it.",
          "documented": true,
          "url": "/reference/api/players/resourcepackstatus/#declined"
        },
        {
          "name": "FailedDownload",
          "kind": "enumMember",
          "signature": "FailedDownload = 2",
          "value": "2",
          "summary": "The download failed.",
          "documented": true,
          "url": "/reference/api/players/resourcepackstatus/#faileddownload"
        },
        {
          "name": "Accepted",
          "kind": "enumMember",
          "signature": "Accepted = 3",
          "value": "3",
          "summary": "The player accepted it (download starts).",
          "documented": true,
          "url": "/reference/api/players/resourcepackstatus/#accepted"
        },
        {
          "name": "Downloaded",
          "kind": "enumMember",
          "signature": "Downloaded = 4",
          "value": "4",
          "summary": "Downloaded, not applied yet.",
          "documented": true,
          "url": "/reference/api/players/resourcepackstatus/#downloaded"
        },
        {
          "name": "InvalidUrl",
          "kind": "enumMember",
          "signature": "InvalidUrl = 5",
          "value": "5",
          "summary": "The url was invalid.",
          "documented": true,
          "url": "/reference/api/players/resourcepackstatus/#invalidurl"
        },
        {
          "name": "FailedReload",
          "kind": "enumMember",
          "signature": "FailedReload = 6",
          "value": "6",
          "summary": "Applying the pack failed.",
          "documented": true,
          "url": "/reference/api/players/resourcepackstatus/#failedreload"
        },
        {
          "name": "Discarded",
          "kind": "enumMember",
          "signature": "Discarded = 7",
          "value": "7",
          "summary": "The pack was discarded.",
          "documented": true,
          "url": "/reference/api/players/resourcepackstatus/#discarded"
        }
      ]
    },
    {
      "name": "RespawnReason",
      "fullName": "Mc.Scripting.RespawnReason",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "events",
      "categoryLabel": "Events (infrastructure)",
      "signature": "public enum RespawnReason : byte",
      "summary": "Why a player is respawning.",
      "url": "/reference/api/events/respawnreason/",
      "members": [
        {
          "name": "Death",
          "kind": "enumMember",
          "signature": "Death = 0",
          "value": "0",
          "summary": "The player died.",
          "documented": true,
          "url": "/reference/api/events/respawnreason/#death"
        },
        {
          "name": "EndExit",
          "kind": "enumMember",
          "signature": "EndExit = 1",
          "value": "1",
          "summary": "Returning from the end after the credits.",
          "documented": true,
          "url": "/reference/api/events/respawnreason/#endexit"
        }
      ]
    },
    {
      "name": "ScheduledTask",
      "fullName": "Mc.Scripting.ScheduledTask",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "scheduler",
      "categoryLabel": "Scheduler and threading",
      "signature": "public sealed class ScheduledTask : IDisposable, IPluginResource",
      "interfaces": [
        "IDisposable",
        "IPluginResource"
      ],
      "summary": "A scheduled task. Dispose/Cancel to stop it.",
      "url": "/reference/api/scheduler/scheduledtask/",
      "members": [
        {
          "name": "IsCancelled",
          "kind": "property",
          "signature": "public bool IsCancelled { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the task was cancelled or finished.",
          "documented": true,
          "url": "/reference/api/scheduler/scheduledtask/#iscancelled"
        },
        {
          "name": "Cancel",
          "kind": "method",
          "signature": "public void Cancel()",
          "summary": "Stops the task.",
          "documented": true,
          "url": "/reference/api/scheduler/scheduledtask/#cancel"
        },
        {
          "name": "Dispose",
          "kind": "method",
          "signature": "public void Dispose()",
          "summary": "Same as `ScheduledTask.Cancel`.",
          "documented": true,
          "url": "/reference/api/scheduler/scheduledtask/#dispose"
        }
      ]
    },
    {
      "name": "Scheduler",
      "fullName": "Mc.Scripting.Scheduler",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "scheduler",
      "categoryLabel": "Scheduler and threading",
      "signature": "public sealed class Scheduler",
      "summary": "Tick-based scheduling (20 ticks = 1 second) and the bridge between the tick thread and worker threads. Scheduled tasks run on the tick thread and are cancelled when the plugin unloads.",
      "remarks": "`Scheduler.RunLater`/`Scheduler.RunEvery` must be called on the tick thread. `Scheduler.Post`, `Scheduler.RunSync`, `Scheduler.RunAsync` and the awaiters are thread-safe.",
      "examples": [
        "```csharp\nScheduler.RunLater(20, () => Server.Broadcast(\"one second later\"));\n\nScheduledTask autosave = Scheduler.RunEvery(20 * 60, SaveAll);   // every minute\n// autosave.Cancel();\n\n// from a thread-pool task: fetch off the tick thread, then apply on it\n_ = Task.Run(async () =>\n{\n    string json = await Http.Client.GetStringAsync(url);\n    Scheduler.Post(() => Apply(json));     // back on the tick thread\n});\n```"
      ],
      "url": "/reference/api/scheduler/scheduler/",
      "members": [
        {
          "name": "Delay",
          "kind": "method",
          "signature": "public Task Delay(long ticks)",
          "parameters": [
            {
              "name": "ticks",
              "type": "long",
              "summary": "Ticks to wait."
            }
          ],
          "returns": {
            "type": "Task",
            "summary": "The task."
          },
          "summary": "Awaitable that resumes on the tick thread after `ticks` ticks.",
          "documented": true,
          "url": "/reference/api/scheduler/scheduler/#delay"
        },
        {
          "name": "Post",
          "kind": "method",
          "signature": "public void Post(Action action)",
          "parameters": [
            {
              "name": "action",
              "type": "Action",
              "summary": "The work."
            }
          ],
          "summary": "Thread-safe: queue `action` to run on the tick thread next tick (fire and forget).",
          "documented": true,
          "url": "/reference/api/scheduler/scheduler/#post"
        },
        {
          "name": "RunAsync",
          "kind": "method",
          "signature": "public Task RunAsync(Action action)",
          "parameters": [
            {
              "name": "action",
              "type": "Action",
              "summary": "The work."
            }
          ],
          "returns": {
            "type": "Task",
            "summary": "A task for the work (exceptions are also logged with the plugin's name)."
          },
          "summary": "Runs `action` on the .NET thread pool. Must not touch game APIs (use `Scheduler.RunSync` to hop back).",
          "documented": true,
          "url": "/reference/api/scheduler/scheduler/#runasync"
        },
        {
          "name": "RunAsync",
          "kind": "method",
          "signature": "public Task<T?> RunAsync<T>(Func<T?> func)",
          "parameters": [
            {
              "name": "func",
              "type": "Func<T?>",
              "summary": "The work."
            }
          ],
          "returns": {
            "type": "Task<T?>",
            "summary": "A task with the result."
          },
          "typeParameters": [
            "T"
          ],
          "summary": "Runs `func` on the .NET thread pool.",
          "documented": true,
          "url": "/reference/api/scheduler/scheduler/#runasynct"
        },
        {
          "name": "RunEvery",
          "kind": "method",
          "signature": "public ScheduledTask RunEvery(long periodTicks, Action action, long initialDelayTicks = 0)",
          "parameters": [
            {
              "name": "periodTicks",
              "type": "long",
              "summary": "Ticks between runs."
            },
            {
              "name": "action",
              "type": "Action",
              "summary": "The work."
            },
            {
              "name": "initialDelayTicks",
              "type": "long",
              "default": "0",
              "summary": "Ticks before the first run."
            }
          ],
          "returns": {
            "type": "ScheduledTask",
            "summary": "The task handle (dispose to cancel)."
          },
          "summary": "Runs `action` every `periodTicks` ticks, starting after `initialDelayTicks` (at least 1).",
          "documented": true,
          "url": "/reference/api/scheduler/scheduler/#runevery"
        },
        {
          "name": "RunLater",
          "kind": "method",
          "signature": "public ScheduledTask RunLater(long delayTicks, Action action)",
          "parameters": [
            {
              "name": "delayTicks",
              "type": "long",
              "summary": "Ticks to wait (at least 1)."
            },
            {
              "name": "action",
              "type": "Action",
              "summary": "The work."
            }
          ],
          "returns": {
            "type": "ScheduledTask",
            "summary": "The task handle (dispose to cancel)."
          },
          "summary": "Runs `action` after `delayTicks` ticks on the tick thread.",
          "documented": true,
          "url": "/reference/api/scheduler/scheduler/#runlater"
        },
        {
          "name": "RunSync",
          "kind": "method",
          "signature": "public Task RunSync(Action action)",
          "parameters": [
            {
              "name": "action",
              "type": "Action",
              "summary": "The work."
            }
          ],
          "returns": {
            "type": "Task",
            "summary": "A task that completes (or faults with the action's exception) after it ran. It never completes if the plugin unloads first."
          },
          "summary": "Thread-safe: runs `action` on the tick thread at the next tick boundary (FIFO).",
          "documented": true,
          "url": "/reference/api/scheduler/scheduler/#runsync"
        },
        {
          "name": "RunSync",
          "kind": "method",
          "signature": "public Task<T?> RunSync<T>(Func<T?> func)",
          "parameters": [
            {
              "name": "func",
              "type": "Func<T?>",
              "summary": "The work."
            }
          ],
          "returns": {
            "type": "Task<T?>",
            "summary": "A task with the result."
          },
          "typeParameters": [
            "T"
          ],
          "summary": "Thread-safe: runs `func` on the tick thread at the next tick boundary and returns its result.",
          "documented": true,
          "url": "/reference/api/scheduler/scheduler/#runsynct"
        },
        {
          "name": "ToAsync",
          "kind": "method",
          "signature": "public TickAwaitable ToAsync()",
          "returns": {
            "type": "TickAwaitable",
            "summary": "The awaitable."
          },
          "summary": "Awaitable that resumes on a thread-pool thread: `await Scheduler.ToAsync();` (leave the tick thread before blocking work).",
          "documented": true,
          "url": "/reference/api/scheduler/scheduler/#toasync"
        },
        {
          "name": "ToTick",
          "kind": "method",
          "signature": "public TickAwaitable ToTick()",
          "returns": {
            "type": "TickAwaitable",
            "summary": "The awaitable."
          },
          "summary": "Awaitable that resumes on the tick thread at the next tick boundary: `await Scheduler.ToTick();`. If the plugin unloads first the continuation is dropped.",
          "documented": true,
          "url": "/reference/api/scheduler/scheduler/#totick"
        }
      ]
    },
    {
      "name": "ScoreFormat",
      "fullName": "Mc.Scripting.ScoreFormat",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "display",
      "categoryLabel": "Scoreboards, boss bars, tab list",
      "signature": "public enum ScoreFormat : int",
      "summary": "How a score is shown next to its holder.",
      "url": "/reference/api/display/scoreformat/",
      "members": [
        {
          "name": "None",
          "kind": "enumMember",
          "signature": "None = 0",
          "value": "0",
          "summary": "The number is shown.",
          "documented": true,
          "url": "/reference/api/display/scoreformat/#none"
        },
        {
          "name": "Blank",
          "kind": "enumMember",
          "signature": "Blank = 1",
          "value": "1",
          "summary": "The number is hidden.",
          "documented": true,
          "url": "/reference/api/display/scoreformat/#blank"
        },
        {
          "name": "Fixed",
          "kind": "enumMember",
          "signature": "Fixed = 2",
          "value": "2",
          "summary": "A fixed text is shown instead of the number.",
          "documented": true,
          "url": "/reference/api/display/scoreformat/#fixed"
        }
      ]
    },
    {
      "name": "Scoreboard",
      "fullName": "Mc.Scripting.Scoreboard",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "display",
      "categoryLabel": "Scoreboards, boss bars, tab list",
      "signature": "public static class Scoreboard",
      "summary": "The server's scoreboard (shared by all players, saved with the world, edited by `/scoreboard`): objectives with scores per holder name and their display slots. Every change reaches every player's client. Use `Sidebar` for per-player content.",
      "url": "/reference/api/display/scoreboard/",
      "members": [
        {
          "name": "CreateObjective",
          "kind": "method",
          "signature": "public static Objective CreateObjective(string name, Component? title = null, string criteria = \"dummy\")",
          "static": true,
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The name, 1 to 16 characters (letters, digits, `_ - . +`)."
            },
            {
              "name": "title",
              "type": "Component?",
              "default": "null",
              "summary": "The display name; defaults to the name."
            },
            {
              "name": "criteria",
              "type": "string",
              "default": "\"dummy\"",
              "summary": "The criterion; `dummy` (plugins and commands set the score) or `trigger`."
            }
          ],
          "returns": {
            "type": "Objective",
            "summary": "The objective."
          },
          "summary": "Creates an objective. Objectives are part of the world: they stay until removed (they are not owned by the plugin).",
          "throws": [
            {
              "type": "System.InvalidOperationException",
              "summary": "An objective with that name exists, or the name is not valid."
            }
          ],
          "documented": true,
          "url": "/reference/api/display/scoreboard/#createobjective"
        },
        {
          "name": "GetObjective",
          "kind": "method",
          "signature": "public static Objective? GetObjective(string name)",
          "static": true,
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The objective name."
            }
          ],
          "returns": {
            "type": "Objective?"
          },
          "summary": "An existing objective by name; null when there is none.",
          "documented": true,
          "url": "/reference/api/display/scoreboard/#getobjective"
        },
        {
          "name": "RemoveObjective",
          "kind": "method",
          "signature": "public static bool RemoveObjective(Objective objective)",
          "static": true,
          "parameters": [
            {
              "name": "objective",
              "type": "Objective",
              "summary": "The objective."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "Whether it existed."
          },
          "summary": "Deletes an objective and all its scores.",
          "documented": true,
          "url": "/reference/api/display/scoreboard/#removeobjective"
        },
        {
          "name": "SetDisplay",
          "kind": "method",
          "signature": "public static void SetDisplay(DisplaySlot slot, Objective? objective)",
          "static": true,
          "parameters": [
            {
              "name": "slot",
              "type": "DisplaySlot",
              "summary": "The slot."
            },
            {
              "name": "objective",
              "type": "Objective?",
              "summary": "The objective, null to clear."
            }
          ],
          "summary": "Shows an objective in a display slot (null clears the slot).",
          "documented": true,
          "url": "/reference/api/display/scoreboard/#setdisplay"
        }
      ]
    },
    {
      "name": "Server",
      "fullName": "Mc.Scripting.Server",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "server",
      "categoryLabel": "Server, HTTP and logging",
      "signature": "public static class Server",
      "summary": "Server-wide services: the tick clock, the online players, the worlds and broadcast messages.",
      "remarks": "Everything here except `Server.IsTickThread` and `Server.CurrentTick` must be called on the tick thread.",
      "url": "/reference/api/server/server/",
      "members": [
        {
          "name": "CommittedBytes",
          "kind": "property",
          "signature": "public static long CommittedBytes { get; }",
          "static": true,
          "returns": {
            "type": "long"
          },
          "summary": "The server's private commit in bytes, -1 when unknown.",
          "documented": true,
          "url": "/reference/api/server/server/#committedbytes"
        },
        {
          "name": "CurrentTick",
          "kind": "property",
          "signature": "public static ulong CurrentTick { get; }",
          "static": true,
          "returns": {
            "type": "ulong"
          },
          "summary": "Current server tick (as reported by the engine; thread-safe).",
          "documented": true,
          "url": "/reference/api/server/server/#currenttick"
        },
        {
          "name": "IsTickThread",
          "kind": "property",
          "signature": "public static bool IsTickThread { get; }",
          "static": true,
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the calling thread is the server tick thread (thread-safe, ~1 ns).",
          "documented": true,
          "url": "/reference/api/server/server/#istickthread"
        },
        {
          "name": "MemoryBytes",
          "kind": "property",
          "signature": "public static long MemoryBytes { get; }",
          "static": true,
          "returns": {
            "type": "long"
          },
          "summary": "The server's RAM in bytes as Task Manager's Memory column shows it (private working set; Linux: resident minus shared), -1 when the platform cannot tell. Plugins run in a separate worker process, so `Environment.WorkingSet` is the worker's, not the server's.",
          "documented": true,
          "url": "/reference/api/server/server/#memorybytes"
        },
        {
          "name": "Overworld",
          "kind": "property",
          "signature": "public static World Overworld { get; }",
          "static": true,
          "returns": {
            "type": "World"
          },
          "summary": "The overworld.",
          "documented": true,
          "url": "/reference/api/server/server/#overworld"
        },
        {
          "name": "PlayerCount",
          "kind": "property",
          "signature": "public static int PlayerCount { get; }",
          "static": true,
          "returns": {
            "type": "int"
          },
          "summary": "Number of players in the play state.",
          "documented": true,
          "url": "/reference/api/server/server/#playercount"
        },
        {
          "name": "PlayerMoveThreshold",
          "kind": "property",
          "signature": "public static double PlayerMoveThreshold { get; set; }",
          "static": true,
          "returns": {
            "type": "double"
          },
          "summary": "How far a player has to move (blocks) before `PlayerMoveEvent` fires again (a turn of one degree also counts). 0, the default, fires for every change of position or rotation (about 20 events a second per moving player): raise it when your handler only cares about coarse movement.",
          "documented": true,
          "url": "/reference/api/server/server/#playermovethreshold"
        },
        {
          "name": "Players",
          "kind": "property",
          "signature": "public static IReadOnlyList<Player> Players { get; }",
          "static": true,
          "returns": {
            "type": "IReadOnlyList<Player>"
          },
          "summary": "A snapshot of the online players (in the play state).",
          "documented": true,
          "url": "/reference/api/server/server/#players"
        },
        {
          "name": "PluginMemoryBytes",
          "kind": "property",
          "signature": "public static long PluginMemoryBytes { get; }",
          "static": true,
          "returns": {
            "type": "long"
          },
          "summary": "The RAM of the process the plugins run in (the worker; in-process plugins: the server), measured like `Server.MemoryBytes`: private working set (Linux: resident minus shared). One system call, no allocation, any thread; -1 when unknown. Prefer it to `Process.GetCurrentProcess()`, which snapshots every process of the machine.",
          "documented": true,
          "url": "/reference/api/server/server/#pluginmemorybytes"
        },
        {
          "name": "WorkingSetBytes",
          "kind": "property",
          "signature": "public static long WorkingSetBytes { get; }",
          "static": true,
          "returns": {
            "type": "long"
          },
          "summary": "The server's working set in bytes (resident, shared pages included), -1 when unknown.",
          "documented": true,
          "url": "/reference/api/server/server/#workingsetbytes"
        },
        {
          "name": "Worlds",
          "kind": "property",
          "signature": "public static IReadOnlyList<World> Worlds { get; }",
          "static": true,
          "returns": {
            "type": "IReadOnlyList<World>"
          },
          "summary": "The dimensions of the server (overworld first).",
          "documented": true,
          "url": "/reference/api/server/server/#worlds"
        },
        {
          "name": "Broadcast",
          "kind": "method",
          "signature": "public static void Broadcast(string message)",
          "static": true,
          "parameters": [
            {
              "name": "message",
              "type": "string",
              "summary": "Plain text."
            }
          ],
          "summary": "Sends a plain-text system message to everybody (and the console).",
          "documented": true,
          "url": "/reference/api/server/server/#broadcast"
        },
        {
          "name": "Broadcast",
          "kind": "method",
          "signature": "public static void Broadcast(Component message)",
          "static": true,
          "parameters": [
            {
              "name": "message",
              "type": "Component",
              "summary": "The message."
            }
          ],
          "summary": "Sends a rich text message to every online player and logs its plain text on the console.",
          "documented": true,
          "url": "/reference/api/server/server/#broadcast-1"
        },
        {
          "name": "GetPlayer",
          "kind": "method",
          "signature": "public static Player? GetPlayer(string name)",
          "static": true,
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The player name."
            }
          ],
          "returns": {
            "type": "Player?",
            "summary": "The player, or null if nobody with that name is online."
          },
          "summary": "Finds an online player by name (case-insensitive).",
          "documented": true,
          "url": "/reference/api/server/server/#getplayer"
        },
        {
          "name": "GetPlayer",
          "kind": "method",
          "signature": "public static Player? GetPlayer(Uuid uuid)",
          "static": true,
          "parameters": [
            {
              "name": "uuid",
              "type": "Uuid",
              "summary": "The profile id."
            }
          ],
          "returns": {
            "type": "Player?",
            "summary": "The player, or null if that profile is not online."
          },
          "summary": "Finds an online player by uuid.",
          "documented": true,
          "url": "/reference/api/server/server/#getplayer-1"
        },
        {
          "name": "GetWorld",
          "kind": "method",
          "signature": "public static World? GetWorld(string key)",
          "static": true,
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "The dimension key."
            }
          ],
          "returns": {
            "type": "World?",
            "summary": "The world, or null if there is no such dimension."
          },
          "summary": "Finds a dimension by key (\"minecraft:the_nether\"; \"the_nether\" also works for minecraft keys).",
          "documented": true,
          "url": "/reference/api/server/server/#getworld"
        },
        {
          "name": "PlayersSnapshot",
          "kind": "method",
          "signature": "public static IReadOnlyList<PlayerSnapshot> PlayersSnapshot()",
          "static": true,
          "returns": {
            "type": "IReadOnlyList<PlayerSnapshot>",
            "summary": "The players in the order of the engine's list."
          },
          "summary": "A snapshot of every online player with the data the engine keeps about him: the handle, the profile id, the dimension, the game mode, the ping and the tab list flags. One pass over the players, read in pages from the engine; use `Server.Players` when only the handles are needed.",
          "documented": true,
          "url": "/reference/api/server/server/#playerssnapshot"
        },
        {
          "name": "SendMessage",
          "kind": "method",
          "signature": "public static void SendMessage(Entity target, string message)",
          "static": true,
          "parameters": [
            {
              "name": "target",
              "type": "Entity",
              "summary": "A player entity, or `Entity.Null` for the console."
            },
            {
              "name": "message",
              "type": "string",
              "summary": "Plain text."
            }
          ],
          "summary": "Sends a system chat message to `target` (Entity.Null = console).",
          "documented": true,
          "url": "/reference/api/server/server/#sendmessage"
        },
        {
          "name": "TickTimes",
          "kind": "method",
          "signature": "public static TickTimes TickTimes(int ticks = 20)",
          "static": true,
          "parameters": [
            {
              "name": "ticks",
              "type": "int",
              "default": "20"
            }
          ],
          "returns": {
            "type": "TickTimes"
          },
          "summary": "The engine's own tick time over the last `ticks` ticks (1 to 6000), as `/tick query` reports it: the busy time of each tick. Prefer it to timing your own systems: plugins run in a separate worker process, and a Stopwatch there also counts the round trips to the engine. Values are -1 when the engine cannot tell.",
          "documented": true,
          "url": "/reference/api/server/server/#ticktimes"
        }
      ]
    },
    {
      "name": "ServiceUnavailableException",
      "fullName": "Mc.Scripting.ServiceUnavailableException",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "services",
      "categoryLabel": "Services",
      "signature": "public sealed class ServiceUnavailableException : InvalidOperationException",
      "baseType": "InvalidOperationException",
      "summary": "A plugin-to-plugin service that was registered is no longer available (its provider unloaded).",
      "url": "/reference/api/services/serviceunavailableexception/",
      "members": [
        {
          "name": "ServiceUnavailableException",
          "kind": "ctor",
          "signature": "public ServiceUnavailableException(Type serviceType)",
          "parameters": [
            {
              "name": "serviceType",
              "type": "Type",
              "summary": "The service interface."
            }
          ],
          "summary": "Creates the exception.",
          "documented": true,
          "url": "/reference/api/services/serviceunavailableexception/#constructor"
        }
      ]
    },
    {
      "name": "Affix",
      "fullName": "Mc.Scripting.Services.Affix",
      "namespace": "Mc.Scripting.Services",
      "kind": "class",
      "category": "services",
      "categoryLabel": "Services",
      "signature": "public sealed class Affix : IEquatable<Affix>",
      "interfaces": [
        "IEquatable<Affix>"
      ],
      "summary": "One prefix or suffix of a player: its text, its weight (the highest weight comes first) and the group or plugin that supplied it.",
      "url": "/reference/api/services/affix/",
      "members": [
        {
          "name": "Affix",
          "kind": "ctor",
          "signature": "public Affix(string Text, int Weight, string Group)",
          "parameters": [
            {
              "name": "Text",
              "type": "string",
              "summary": "The text, as the provider stores it (the chat and tab plugins decorate it)."
            },
            {
              "name": "Weight",
              "type": "int",
              "summary": "The rank among the affixes of the same kind; a higher weight comes first."
            },
            {
              "name": "Group",
              "type": "string",
              "summary": "Where it came from (a permission group, or a plugin's own name)."
            }
          ],
          "summary": "One prefix or suffix of a player: its text, its weight (the highest weight comes first) and the group or plugin that supplied it.",
          "documented": true,
          "url": "/reference/api/services/affix/#constructor"
        },
        {
          "name": "Group",
          "kind": "property",
          "signature": "public string Group { get; init; }",
          "returns": {
            "type": "string"
          },
          "summary": "Where it came from (a permission group, or a plugin's own name).",
          "documented": true,
          "url": "/reference/api/services/affix/#group"
        },
        {
          "name": "Text",
          "kind": "property",
          "signature": "public string Text { get; init; }",
          "returns": {
            "type": "string"
          },
          "summary": "The text, as the provider stores it (the chat and tab plugins decorate it).",
          "documented": true,
          "url": "/reference/api/services/affix/#text"
        },
        {
          "name": "Weight",
          "kind": "property",
          "signature": "public int Weight { get; init; }",
          "returns": {
            "type": "int"
          },
          "summary": "The rank among the affixes of the same kind; a higher weight comes first.",
          "documented": true,
          "url": "/reference/api/services/affix/#weight"
        }
      ]
    },
    {
      "name": "AffixKind",
      "fullName": "Mc.Scripting.Services.AffixKind",
      "namespace": "Mc.Scripting.Services",
      "kind": "enum",
      "category": "services",
      "categoryLabel": "Services",
      "signature": "public enum AffixKind : int",
      "summary": "Whether an affix goes before the player's name (a prefix) or after it (a suffix).",
      "url": "/reference/api/services/affixkind/",
      "members": [
        {
          "name": "Prefix",
          "kind": "enumMember",
          "signature": "Prefix = 0",
          "value": "0",
          "summary": "Before the name, as in \"[Admin] Steve\".",
          "documented": true,
          "url": "/reference/api/services/affixkind/#prefix"
        },
        {
          "name": "Suffix",
          "kind": "enumMember",
          "signature": "Suffix = 1",
          "value": "1",
          "summary": "After the name, as in \"Steve [AFK]\".",
          "documented": true,
          "url": "/reference/api/services/affixkind/#suffix"
        }
      ]
    },
    {
      "name": "BanEntry",
      "fullName": "Mc.Scripting.Services.BanEntry",
      "namespace": "Mc.Scripting.Services",
      "kind": "class",
      "category": "services",
      "categoryLabel": "Services",
      "signature": "public sealed class BanEntry : IEquatable<BanEntry>",
      "interfaces": [
        "IEquatable<BanEntry>"
      ],
      "summary": "One ban: a player (uuid and the name it was banned under) or an address. `BanEntry.Expires` null means forever.",
      "url": "/reference/api/services/banentry/",
      "members": [
        {
          "name": "BanEntry",
          "kind": "ctor",
          "signature": "public BanEntry(Uuid? Player, string? Address, string? Name, DateTimeOffset Created, DateTimeOffset? Expires, string Source, string? Reason)",
          "parameters": [
            {
              "name": "Player",
              "type": "Uuid?",
              "summary": "The banned player; null for an address ban."
            },
            {
              "name": "Address",
              "type": "string?",
              "summary": "The banned address without port; null for a player ban."
            },
            {
              "name": "Name",
              "type": "string?",
              "summary": "The name the player was banned under; null for an address ban."
            },
            {
              "name": "Created",
              "type": "DateTimeOffset",
              "summary": "When the ban was written."
            },
            {
              "name": "Expires",
              "type": "DateTimeOffset?",
              "summary": "When it ends; null = forever."
            },
            {
              "name": "Source",
              "type": "string",
              "summary": "Who wrote it (\"(Unknown)\" when nobody said)."
            },
            {
              "name": "Reason",
              "type": "string?",
              "summary": "The reason shown on the disconnect screen; null for the default text."
            }
          ],
          "summary": "One ban: a player (uuid and the name it was banned under) or an address. `BanEntry.Expires` null means forever.",
          "documented": true,
          "url": "/reference/api/services/banentry/#constructor"
        },
        {
          "name": "Address",
          "kind": "property",
          "signature": "public string? Address { get; init; }",
          "returns": {
            "type": "string?"
          },
          "summary": "The banned address without port; null for a player ban.",
          "documented": true,
          "url": "/reference/api/services/banentry/#address"
        },
        {
          "name": "Created",
          "kind": "property",
          "signature": "public DateTimeOffset Created { get; init; }",
          "returns": {
            "type": "DateTimeOffset"
          },
          "summary": "When the ban was written.",
          "documented": true,
          "url": "/reference/api/services/banentry/#created"
        },
        {
          "name": "Expires",
          "kind": "property",
          "signature": "public DateTimeOffset? Expires { get; init; }",
          "returns": {
            "type": "DateTimeOffset?"
          },
          "summary": "When it ends; null = forever.",
          "documented": true,
          "url": "/reference/api/services/banentry/#expires"
        },
        {
          "name": "Name",
          "kind": "property",
          "signature": "public string? Name { get; init; }",
          "returns": {
            "type": "string?"
          },
          "summary": "The name the player was banned under; null for an address ban.",
          "documented": true,
          "url": "/reference/api/services/banentry/#name"
        },
        {
          "name": "Player",
          "kind": "property",
          "signature": "public Uuid? Player { get; init; }",
          "returns": {
            "type": "Uuid?"
          },
          "summary": "The banned player; null for an address ban.",
          "documented": true,
          "url": "/reference/api/services/banentry/#player"
        },
        {
          "name": "Reason",
          "kind": "property",
          "signature": "public string? Reason { get; init; }",
          "returns": {
            "type": "string?"
          },
          "summary": "The reason shown on the disconnect screen; null for the default text.",
          "documented": true,
          "url": "/reference/api/services/banentry/#reason"
        },
        {
          "name": "Source",
          "kind": "property",
          "signature": "public string Source { get; init; }",
          "returns": {
            "type": "string"
          },
          "summary": "Who wrote it (\"(Unknown)\" when nobody said).",
          "documented": true,
          "url": "/reference/api/services/banentry/#source"
        }
      ]
    },
    {
      "name": "Currency",
      "fullName": "Mc.Scripting.Services.Currency",
      "namespace": "Mc.Scripting.Services",
      "kind": "class",
      "category": "services",
      "categoryLabel": "Services",
      "signature": "public sealed class Currency : IEquatable<Currency>",
      "interfaces": [
        "IEquatable<Currency>"
      ],
      "summary": "A currency. Amounts are long minor units (cents when `Currency.FractionDigits` is 2): no floating point on any path.",
      "url": "/reference/api/services/currency/",
      "members": [
        {
          "name": "Currency",
          "kind": "ctor",
          "signature": "public Currency(string Name, string Symbol, int FractionDigits, string PluralName)",
          "parameters": [
            {
              "name": "Name",
              "type": "string",
              "summary": "The name (\"dollar\")."
            },
            {
              "name": "Symbol",
              "type": "string",
              "summary": "The symbol written before the amount (\"$\")."
            },
            {
              "name": "FractionDigits",
              "type": "int",
              "summary": "Minor units per major unit as a power of ten (2 = cents), 0 to 9."
            },
            {
              "name": "PluralName",
              "type": "string",
              "summary": "The plural name (\"dollars\")."
            }
          ],
          "summary": "A currency. Amounts are long minor units (cents when `Currency.FractionDigits` is 2): no floating point on any path.",
          "documented": true,
          "url": "/reference/api/services/currency/#constructor"
        },
        {
          "name": "FractionDigits",
          "kind": "property",
          "signature": "public int FractionDigits { get; init; }",
          "returns": {
            "type": "int"
          },
          "summary": "Minor units per major unit as a power of ten, 0 to 9 (checked when the currency is made).",
          "throws": [
            {
              "type": "System.ArgumentOutOfRangeException",
              "summary": "The digits are outside 0 to 9."
            }
          ],
          "documented": true,
          "url": "/reference/api/services/currency/#fractiondigits"
        },
        {
          "name": "Name",
          "kind": "property",
          "signature": "public string Name { get; init; }",
          "returns": {
            "type": "string"
          },
          "summary": "The name (\"dollar\").",
          "documented": true,
          "url": "/reference/api/services/currency/#name"
        },
        {
          "name": "PluralName",
          "kind": "property",
          "signature": "public string PluralName { get; init; }",
          "returns": {
            "type": "string"
          },
          "summary": "The plural name (\"dollars\").",
          "documented": true,
          "url": "/reference/api/services/currency/#pluralname"
        },
        {
          "name": "Symbol",
          "kind": "property",
          "signature": "public string Symbol { get; init; }",
          "returns": {
            "type": "string"
          },
          "summary": "The symbol written before the amount (\"$\").",
          "documented": true,
          "url": "/reference/api/services/currency/#symbol"
        },
        {
          "name": "Format",
          "kind": "method",
          "signature": "public string Format(long minor)",
          "parameters": [
            {
              "name": "minor",
              "type": "long",
              "summary": "The amount in minor units."
            }
          ],
          "returns": {
            "type": "string",
            "summary": "The text."
          },
          "summary": "The amount as text: the symbol, the major units and the minor units after a point (\"$12.05\"). Negative amounts start with a minus sign.",
          "documented": true,
          "url": "/reference/api/services/currency/#format"
        }
      ]
    },
    {
      "name": "EconomyResult",
      "fullName": "Mc.Scripting.Services.EconomyResult",
      "namespace": "Mc.Scripting.Services",
      "kind": "enum",
      "category": "services",
      "categoryLabel": "Services",
      "signature": "public enum EconomyResult : int",
      "summary": "The outcome of a money operation.",
      "url": "/reference/api/services/economyresult/",
      "members": [
        {
          "name": "Ok",
          "kind": "enumMember",
          "signature": "Ok = 0",
          "value": "0",
          "summary": "Done.",
          "documented": true,
          "url": "/reference/api/services/economyresult/#ok"
        },
        {
          "name": "Unknown",
          "kind": "enumMember",
          "signature": "Unknown = 1",
          "value": "1",
          "summary": "The account does not exist (the player never had one, or the provider does not create it on demand).",
          "documented": true,
          "url": "/reference/api/services/economyresult/#unknown"
        },
        {
          "name": "NotEnough",
          "kind": "enumMember",
          "signature": "NotEnough = 2",
          "value": "2",
          "summary": "The account lacks the money.",
          "documented": true,
          "url": "/reference/api/services/economyresult/#notenough"
        },
        {
          "name": "OverMax",
          "kind": "enumMember",
          "signature": "OverMax = 3",
          "value": "3",
          "summary": "The deposit would go over the provider's maximum balance.",
          "documented": true,
          "url": "/reference/api/services/economyresult/#overmax"
        },
        {
          "name": "Refused",
          "kind": "enumMember",
          "signature": "Refused = 4",
          "value": "4",
          "summary": "Refused: a zero or negative amount, a frozen account, or another rule of the provider.",
          "documented": true,
          "url": "/reference/api/services/economyresult/#refused"
        }
      ]
    },
    {
      "name": "IBanList",
      "fullName": "Mc.Scripting.Services.IBanList",
      "namespace": "Mc.Scripting.Services",
      "kind": "interface",
      "category": "services",
      "categoryLabel": "Services",
      "signature": "public interface IBanList",
      "summary": "The server's ban lists: the vanilla files banned-players.json and banned-ips.json. The engine's login check reads the same files, so a ban written here, by /ban or by another plugin is enforced the same way; a plugin that replaces this service (a moderation plugin) must write the same files or keep them as its only store. A write does not kick an online player: the caller does that (`Player.Kick`). Thread: tick thread.",
      "url": "/reference/api/services/ibanlist/",
      "members": [
        {
          "name": "AddAddress",
          "kind": "method",
          "signature": "bool AddAddress(string address, string? reason, DateTimeOffset? expires, string source)",
          "parameters": [
            {
              "name": "address",
              "type": "string",
              "summary": "The address."
            },
            {
              "name": "reason",
              "type": "string?",
              "summary": "The reason, or null for the default text."
            },
            {
              "name": "expires",
              "type": "DateTimeOffset?",
              "summary": "When the ban ends; null = forever."
            },
            {
              "name": "source",
              "type": "string",
              "summary": "Who bans, for the list."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when a ban was written."
          },
          "summary": "Bans an address (the bare IP; a port is dropped).",
          "documented": true,
          "url": "/reference/api/services/ibanlist/#addaddress"
        },
        {
          "name": "AddPlayer",
          "kind": "method",
          "signature": "bool AddPlayer(Uuid player, string name, string? reason, DateTimeOffset? expires, string source)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player's uuid."
            },
            {
              "name": "name",
              "type": "string",
              "summary": "The player's name (shown in the list)."
            },
            {
              "name": "reason",
              "type": "string?",
              "summary": "The reason, or null for the default text."
            },
            {
              "name": "expires",
              "type": "DateTimeOffset?",
              "summary": "When the ban ends; null = forever."
            },
            {
              "name": "source",
              "type": "string",
              "summary": "Who bans, for the list."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when a ban was written."
          },
          "summary": "Bans a player. An identical ban that is still in force is kept as it is.",
          "documented": true,
          "url": "/reference/api/services/ibanlist/#addplayer"
        },
        {
          "name": "Addresses",
          "kind": "method",
          "signature": "IReadOnlyList<BanEntry> Addresses()",
          "returns": {
            "type": "IReadOnlyList<BanEntry>",
            "summary": "The bans."
          },
          "summary": "The address bans that are still in force.",
          "documented": true,
          "url": "/reference/api/services/ibanlist/#addresses"
        },
        {
          "name": "Check",
          "kind": "method",
          "signature": "BanEntry? Check(Uuid player, string? address)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player's uuid."
            },
            {
              "name": "address",
              "type": "string?",
              "summary": "The address the login comes from, or null to check the player only."
            }
          ],
          "returns": {
            "type": "BanEntry?",
            "summary": "The ban, or null."
          },
          "summary": "The ban that refuses a login of this player or address (the player ban first), null when none.",
          "documented": true,
          "url": "/reference/api/services/ibanlist/#check"
        },
        {
          "name": "Players",
          "kind": "method",
          "signature": "IReadOnlyList<BanEntry> Players()",
          "returns": {
            "type": "IReadOnlyList<BanEntry>",
            "summary": "The bans."
          },
          "summary": "The player bans that are still in force.",
          "documented": true,
          "url": "/reference/api/services/ibanlist/#players"
        },
        {
          "name": "RemoveAddress",
          "kind": "method",
          "signature": "bool RemoveAddress(string address)",
          "parameters": [
            {
              "name": "address",
              "type": "string",
              "summary": "The address."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when there was one."
          },
          "summary": "Removes an address ban.",
          "documented": true,
          "url": "/reference/api/services/ibanlist/#removeaddress"
        },
        {
          "name": "RemovePlayer",
          "kind": "method",
          "signature": "bool RemovePlayer(Uuid player)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player's uuid."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when there was one."
          },
          "summary": "Removes a player's ban.",
          "documented": true,
          "url": "/reference/api/services/ibanlist/#removeplayer"
        }
      ]
    },
    {
      "name": "IEconomy",
      "fullName": "Mc.Scripting.Services.IEconomy",
      "namespace": "Mc.Scripting.Services",
      "kind": "interface",
      "category": "services",
      "categoryLabel": "Services",
      "signature": "public interface IEconomy",
      "summary": "An economy: balances of players (online or offline, by uuid), the transfers between them, and the currency. Provided by an economy plugin (Essentials is the first-party default, at a lower priority than any real economy). Without a provider, money rules must do nothing rather than invent money: check `ServiceManager.TryGet` for null. Thread: tick thread.",
      "url": "/reference/api/services/ieconomy/",
      "members": [
        {
          "name": "Currency",
          "kind": "property",
          "signature": "Currency Currency { get; }",
          "returns": {
            "type": "Currency"
          },
          "summary": "The currency of the economy.",
          "documented": true,
          "url": "/reference/api/services/ieconomy/#currency"
        },
        {
          "name": "Balance",
          "kind": "method",
          "signature": "long Balance(Uuid player)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player."
            }
          ],
          "returns": {
            "type": "long",
            "summary": "The balance."
          },
          "summary": "The balance in minor units; 0 for an unknown account.",
          "documented": true,
          "url": "/reference/api/services/ieconomy/#balance"
        },
        {
          "name": "Deposit",
          "kind": "method",
          "signature": "EconomyResult Deposit(Uuid player, long minor, string reason)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player."
            },
            {
              "name": "minor",
              "type": "long",
              "summary": "The amount in minor units (positive)."
            },
            {
              "name": "reason",
              "type": "string",
              "summary": "Why, for the provider's log."
            }
          ],
          "returns": {
            "type": "EconomyResult",
            "summary": "The result."
          },
          "summary": "Adds money to an account.",
          "documented": true,
          "url": "/reference/api/services/ieconomy/#deposit"
        },
        {
          "name": "Has",
          "kind": "method",
          "signature": "bool Has(Uuid player, long minor)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player."
            },
            {
              "name": "minor",
              "type": "long",
              "summary": "The amount in minor units."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when the balance covers it."
          },
          "summary": "Whether the account holds at least the amount.",
          "documented": true,
          "url": "/reference/api/services/ieconomy/#has"
        },
        {
          "name": "HasAccount",
          "kind": "method",
          "signature": "bool HasAccount(Uuid player)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player (online or offline)."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when there is an account."
          },
          "summary": "Whether the uuid has an account.",
          "documented": true,
          "url": "/reference/api/services/ieconomy/#hasaccount"
        },
        {
          "name": "Transfer",
          "kind": "method",
          "signature": "EconomyResult Transfer(Uuid from, Uuid to, long minor, string reason)",
          "parameters": [
            {
              "name": "from",
              "type": "Uuid",
              "summary": "The paying player."
            },
            {
              "name": "to",
              "type": "Uuid",
              "summary": "The receiving player."
            },
            {
              "name": "minor",
              "type": "long",
              "summary": "The amount in minor units (positive)."
            },
            {
              "name": "reason",
              "type": "string",
              "summary": "Why, for the provider's log."
            }
          ],
          "returns": {
            "type": "EconomyResult",
            "summary": "The result."
          },
          "summary": "Moves money from one account to another as one step: both or neither.",
          "documented": true,
          "url": "/reference/api/services/ieconomy/#transfer"
        },
        {
          "name": "Withdraw",
          "kind": "method",
          "signature": "EconomyResult Withdraw(Uuid player, long minor, string reason)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player."
            },
            {
              "name": "minor",
              "type": "long",
              "summary": "The amount in minor units (positive)."
            },
            {
              "name": "reason",
              "type": "string",
              "summary": "Why, for the provider's log."
            }
          ],
          "returns": {
            "type": "EconomyResult",
            "summary": "The result."
          },
          "summary": "Takes money from an account, refusing to go below zero.",
          "documented": true,
          "url": "/reference/api/services/ieconomy/#withdraw"
        },
        {
          "name": "Changed",
          "kind": "event",
          "signature": "public event Action<Uuid?>? Changed;",
          "returns": {
            "type": "Action<Uuid?>?"
          },
          "summary": "Raised when an account's balance changed (tick thread). A null uuid means many accounts may have changed.",
          "documented": true,
          "url": "/reference/api/services/ieconomy/#changed"
        }
      ]
    },
    {
      "name": "IPlaceholders",
      "fullName": "Mc.Scripting.Services.IPlaceholders",
      "namespace": "Mc.Scripting.Services",
      "kind": "interface",
      "category": "services",
      "categoryLabel": "Services",
      "signature": "public interface IPlaceholders",
      "summary": "The placeholder registry: text templates such as \"Online: %server_online%\" are rendered through it, and any plugin can add its own placeholders (the chat format, the tab list, nametags, kits, the messages of other plugins). Process-wide: the built-in instance is registered with `ServiceManager`, so every plugin in the same process sees the same names. Rendering is pure managed code (no engine call of its own): a value that reads engine state pays for that read, which is why each placeholder declares how long its value may be reused. Thread: tick thread (the values are evaluated where the text is rendered).",
      "url": "/reference/api/services/iplaceholders/",
      "members": [
        {
          "name": "Invalidate",
          "kind": "method",
          "signature": "void Invalidate(string id)",
          "parameters": [
            {
              "name": "id",
              "type": "string",
              "summary": "The placeholder id."
            }
          ],
          "summary": "Drops every cached value of a placeholder so the next render evaluates it again.",
          "documented": true,
          "url": "/reference/api/services/iplaceholders/#invalidate"
        },
        {
          "name": "IsRegistered",
          "kind": "method",
          "signature": "bool IsRegistered(string id)",
          "parameters": [
            {
              "name": "id",
              "type": "string",
              "summary": "The id."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when a placeholder has it."
          },
          "summary": "Whether an id is registered.",
          "documented": true,
          "url": "/reference/api/services/iplaceholders/#isregistered"
        },
        {
          "name": "Register",
          "kind": "method",
          "signature": "IPluginResource Register(string id, PlaceholderScope scope, TimeSpan cacheFor, PlaceholderValue value)",
          "parameters": [
            {
              "name": "id",
              "type": "string",
              "summary": "The placeholder id, namespaced by its owner (\"tab_ping\", \"essentials_balance\")."
            },
            {
              "name": "scope",
              "type": "PlaceholderScope",
              "summary": "Global (one value) or per player."
            },
            {
              "name": "cacheFor",
              "type": "TimeSpan",
              "summary": "How long a value may be reused. Zero evaluates it every time it is rendered."
            },
            {
              "name": "value",
              "type": "PlaceholderValue",
              "summary": "The value function."
            }
          ],
          "returns": {
            "type": "IPluginResource",
            "summary": "The registration."
          },
          "summary": "Adds a placeholder. The id is lowercase letters, digits and underscores (\"charter_prefix\"); \"%charter_prefix%\" renders it. A registration with the same id replaces the earlier one (a hot-reload successor). Disposing the result (or unloading the owning plugin, when it registered from a plugin's enable or event handler) removes it.",
          "documented": true,
          "url": "/reference/api/services/iplaceholders/#register"
        },
        {
          "name": "Resolve",
          "kind": "method",
          "signature": "string Resolve(Player subject, string text)",
          "parameters": [
            {
              "name": "subject",
              "type": "Player",
              "summary": "The player the text is for (`Player.None` when there is none)."
            },
            {
              "name": "text",
              "type": "string",
              "summary": "The template."
            }
          ],
          "returns": {
            "type": "string",
            "summary": "The rendered text."
          },
          "summary": "Renders a template for a subject. \"%%\" is a literal percent sign; a token that is not a registered placeholder is left as written. Text without a percent sign comes back unchanged.",
          "documented": true,
          "url": "/reference/api/services/iplaceholders/#resolve"
        }
      ]
    },
    {
      "name": "IPlayerMeta",
      "fullName": "Mc.Scripting.Services.IPlayerMeta",
      "namespace": "Mc.Scripting.Services",
      "kind": "interface",
      "category": "services",
      "categoryLabel": "Services",
      "signature": "public interface IPlayerMeta",
      "summary": "Player meta and affixes: the prefix, suffix and typed values that a permission provider (or any plugin) supplies for a player, read by the chat, tab and nametag plugins. Registered with `ServiceManager`; the highest-priority provider answers. Thread: tick thread.",
      "remarks": "Ramjet's first-party permissions plugin implements it; without one, a built-in provider answers with no meta and no affixes. Contexts (a world, a server) are not part of this contract yet: a provider that needs them offers its own interface.",
      "url": "/reference/api/services/iplayermeta/",
      "members": [
        {
          "name": "Affixes",
          "kind": "method",
          "signature": "IReadOnlyList<Affix> Affixes(Uuid player, AffixKind kind)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player."
            },
            {
              "name": "kind",
              "type": "AffixKind",
              "summary": "Prefixes or suffixes."
            }
          ],
          "returns": {
            "type": "IReadOnlyList<Affix>",
            "summary": "The affixes (empty when there are none)."
          },
          "summary": "The prefixes or suffixes of a player, highest weight first.",
          "documented": true,
          "url": "/reference/api/services/iplayermeta/#affixes"
        },
        {
          "name": "TryGet",
          "kind": "method",
          "signature": "bool TryGet<T>(Uuid player, MetaKey<T?> key, out T? value)",
          "parameters": [
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player (online or offline)."
            },
            {
              "name": "key",
              "type": "MetaKey<T?>",
              "summary": "The key."
            },
            {
              "name": "value",
              "type": "T?",
              "modifier": "out",
              "summary": "The value when found; the default otherwise."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "Whether the player has a value for the key."
          },
          "typeParameters": [
            "T"
          ],
          "summary": "The value of a meta key for a player, from the provider's highest layer that has it.",
          "documented": true,
          "url": "/reference/api/services/iplayermeta/#trygett"
        },
        {
          "name": "Changed",
          "kind": "event",
          "signature": "public event Action<Uuid?>? Changed;",
          "returns": {
            "type": "Action<Uuid?>?"
          },
          "summary": "Raised when a player's meta or affixes changed (tick thread). A null uuid means every player may have changed.",
          "documented": true,
          "url": "/reference/api/services/iplayermeta/#changed"
        }
      ]
    },
    {
      "name": "MetaKey<T>",
      "fullName": "Mc.Scripting.Services.MetaKey`1",
      "namespace": "Mc.Scripting.Services",
      "kind": "class",
      "category": "services",
      "categoryLabel": "Services",
      "signature": "public sealed class MetaKey<T>",
      "typeParameters": [
        "T"
      ],
      "summary": "A typed key of player meta, declared by the plugin that owns the value (`new MetaKey<int>(\"charter:level\")`). Only string, int, bool and TimeSpan are allowed: a value of another type is refused by the provider, so readers never parse text.",
      "url": "/reference/api/services/metakey-1/",
      "members": [
        {
          "name": "MetaKey",
          "kind": "ctor",
          "signature": "public MetaKey(string name)",
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "The key, namespaced by its owner (\"charter:level\")."
            }
          ],
          "summary": "Creates a key. Throws for a value type other than string, int, bool or TimeSpan.",
          "documented": true,
          "url": "/reference/api/services/metakey-1/#constructor"
        },
        {
          "name": "Name",
          "kind": "property",
          "signature": "public string Name { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The key.",
          "documented": true,
          "url": "/reference/api/services/metakey-1/#name"
        },
        {
          "name": "ToString",
          "kind": "method",
          "signature": "public override string ToString()",
          "returns": {
            "type": "string"
          },
          "documented": false,
          "url": "/reference/api/services/metakey-1/#tostring"
        }
      ]
    },
    {
      "name": "PlaceholderScope",
      "fullName": "Mc.Scripting.Services.PlaceholderScope",
      "namespace": "Mc.Scripting.Services",
      "kind": "enum",
      "category": "services",
      "categoryLabel": "Services",
      "signature": "public enum PlaceholderScope : int",
      "summary": "Whether a placeholder has one value for everybody (`PlaceholderScope.Global`) or one value per player.",
      "url": "/reference/api/services/placeholderscope/",
      "members": [
        {
          "name": "Global",
          "kind": "enumMember",
          "signature": "Global = 0",
          "value": "0",
          "summary": "One value for everybody; the subject passed to the value is `Player.None`.",
          "documented": true,
          "url": "/reference/api/services/placeholderscope/#global"
        },
        {
          "name": "Player",
          "kind": "enumMember",
          "signature": "Player = 1",
          "value": "1",
          "summary": "One value per subject player.",
          "documented": true,
          "url": "/reference/api/services/placeholderscope/#player"
        }
      ]
    },
    {
      "name": "PlaceholderValue",
      "fullName": "Mc.Scripting.Services.PlaceholderValue",
      "namespace": "Mc.Scripting.Services",
      "kind": "delegate",
      "category": "services",
      "categoryLabel": "Services",
      "signature": "public delegate string PlaceholderValue(Player subject, string[] args)",
      "summary": "Computes a placeholder's value for a subject from the arguments written after its name: \"%id:arg1:arg2%\" passes [\"arg1\", \"arg2\"]. Throwing leaves the last good value in place (or the token as written) and logs the error once a minute.",
      "url": "/reference/api/services/placeholdervalue/",
      "members": [],
      "parameters": [
        {
          "name": "subject",
          "type": "Player",
          "summary": "The player the text is rendered for (`Player.None` for a global placeholder)."
        },
        {
          "name": "args",
          "type": "string[]",
          "summary": "The arguments (empty when there are none)."
        }
      ],
      "returns": "string"
    },
    {
      "name": "PlayerMetaExtensions",
      "fullName": "Mc.Scripting.Services.PlayerMetaExtensions",
      "namespace": "Mc.Scripting.Services",
      "kind": "class",
      "category": "services",
      "categoryLabel": "Services",
      "signature": "public static class PlayerMetaExtensions",
      "summary": "Helpers over `IPlayerMeta` for the plugins that only need text.",
      "url": "/reference/api/services/playermetaextensions/",
      "members": [
        {
          "name": "AffixText",
          "kind": "method",
          "signature": "public static string AffixText(IPlayerMeta meta, Uuid player, AffixKind kind, string separator = \" \")",
          "static": true,
          "parameters": [
            {
              "name": "meta",
              "type": "IPlayerMeta",
              "summary": "The provider."
            },
            {
              "name": "player",
              "type": "Uuid",
              "summary": "The player."
            },
            {
              "name": "kind",
              "type": "AffixKind",
              "summary": "Prefixes or suffixes."
            },
            {
              "name": "separator",
              "type": "string",
              "default": "\" \"",
              "summary": "Between two affixes."
            }
          ],
          "returns": {
            "type": "string",
            "summary": "The text (empty when there are none)."
          },
          "summary": "The affixes of one kind joined into one text, highest weight first.",
          "documented": true,
          "url": "/reference/api/services/playermetaextensions/#affixtext"
        }
      ]
    },
    {
      "name": "ServiceManager",
      "fullName": "Mc.Scripting.Services.ServiceManager",
      "namespace": "Mc.Scripting.Services",
      "kind": "class",
      "category": "services",
      "categoryLabel": "Services",
      "signature": "public sealed class ServiceManager",
      "summary": "Plugin-to-plugin services: a plugin registers an implementation of an interface (an economy, a chat formatter, a region lookup) and other plugins look it up without referencing the provider's code. The interface type lives in the provider's assembly or in a shared one; consumers declare `depends` / `softDepends` so the runtime resolves that assembly into their load context (the types then unify). Registrations are owned by the registering plugin and removed when it unloads, which fires `ServiceManager.Changed` so consumers drop their references.",
      "url": "/reference/api/services/servicemanager/",
      "members": [
        {
          "name": "Changed",
          "kind": "method",
          "signature": "public IDisposable Changed<T>(Action onChanged) where T : class",
          "parameters": [
            {
              "name": "onChanged",
              "type": "Action",
              "summary": "The callback."
            }
          ],
          "returns": {
            "type": "IDisposable",
            "summary": "The subscription (disposed automatically when the plugin unloads)."
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : class"
          ],
          "summary": "Calls `onChanged` (on the tick thread) whenever the set of providers of `T` changes: a registration, an unregistration or a provider plugin unloading. Use it to refresh a cached `ServiceManager.TryGet` result.",
          "documented": true,
          "url": "/reference/api/services/servicemanager/#changedt"
        },
        {
          "name": "Get",
          "kind": "method",
          "signature": "public T Get<T>() where T : class",
          "returns": {
            "type": "T"
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : class"
          ],
          "summary": "The highest-priority provider of `T`; throws `ServiceUnavailableException` when none is registered.",
          "documented": true,
          "url": "/reference/api/services/servicemanager/#gett"
        },
        {
          "name": "GetAll",
          "kind": "method",
          "signature": "public IReadOnlyList<ServiceRegistration<T>> GetAll<T>() where T : class",
          "returns": {
            "type": "IReadOnlyList<ServiceRegistration<T>>"
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : class"
          ],
          "summary": "All registrations of `T`, best first.",
          "documented": true,
          "url": "/reference/api/services/servicemanager/#getallt"
        },
        {
          "name": "Register",
          "kind": "method",
          "signature": "public void Register<T>(T instance, ServicePriority priority = ServicePriority.Normal) where T : class",
          "parameters": [
            {
              "name": "instance",
              "type": "T",
              "summary": "The implementation."
            },
            {
              "name": "priority",
              "type": "ServicePriority",
              "default": "ServicePriority.Normal",
              "summary": "Its rank among several providers."
            }
          ],
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : class"
          ],
          "summary": "Registers an implementation of `T`.",
          "documented": true,
          "url": "/reference/api/services/servicemanager/#registert"
        },
        {
          "name": "TryGet",
          "kind": "method",
          "signature": "public T? TryGet<T>() where T : class",
          "returns": {
            "type": "T?"
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : class"
          ],
          "summary": "The highest-priority provider of `T`, null when none is registered. Thread-safe.",
          "documented": true,
          "url": "/reference/api/services/servicemanager/#trygett"
        },
        {
          "name": "Unregister",
          "kind": "method",
          "signature": "public bool Unregister<T>() where T : class",
          "returns": {
            "type": "bool",
            "summary": "Whether a registration was removed."
          },
          "typeParameters": [
            "T"
          ],
          "constraints": [
            "where T : class"
          ],
          "summary": "Removes this plugin's registration of `T`.",
          "documented": true,
          "url": "/reference/api/services/servicemanager/#unregistert"
        }
      ]
    },
    {
      "name": "ServicePriority",
      "fullName": "Mc.Scripting.Services.ServicePriority",
      "namespace": "Mc.Scripting.Services",
      "kind": "enum",
      "category": "services",
      "categoryLabel": "Services",
      "signature": "public enum ServicePriority : int",
      "summary": "How a provider ranks when several plugins register the same service type (the highest wins).",
      "url": "/reference/api/services/servicepriority/",
      "members": [
        {
          "name": "Lowest",
          "kind": "enumMember",
          "signature": "Lowest = -2",
          "value": "-2",
          "summary": "Used only when nothing better is registered.",
          "documented": true,
          "url": "/reference/api/services/servicepriority/#lowest"
        },
        {
          "name": "Low",
          "kind": "enumMember",
          "signature": "Low = -1",
          "value": "-1",
          "summary": "Below normal.",
          "documented": true,
          "url": "/reference/api/services/servicepriority/#low"
        },
        {
          "name": "Normal",
          "kind": "enumMember",
          "signature": "Normal = 0",
          "value": "0",
          "summary": "The default.",
          "documented": true,
          "url": "/reference/api/services/servicepriority/#normal"
        },
        {
          "name": "High",
          "kind": "enumMember",
          "signature": "High = 1",
          "value": "1",
          "summary": "Preferred over normal providers.",
          "documented": true,
          "url": "/reference/api/services/servicepriority/#high"
        },
        {
          "name": "Highest",
          "kind": "enumMember",
          "signature": "Highest = 2",
          "value": "2",
          "summary": "Preferred over everything else.",
          "documented": true,
          "url": "/reference/api/services/servicepriority/#highest"
        }
      ]
    },
    {
      "name": "ServiceRegistration<T>",
      "fullName": "Mc.Scripting.Services.ServiceRegistration`1",
      "namespace": "Mc.Scripting.Services",
      "kind": "class",
      "category": "services",
      "categoryLabel": "Services",
      "signature": "public sealed class ServiceRegistration<T> : IEquatable<ServiceRegistration<T>> where T : class",
      "interfaces": [
        "IEquatable<ServiceRegistration<T>>"
      ],
      "typeParameters": [
        "T"
      ],
      "summary": "One registered service: the implementation, who provided it and how it ranks.",
      "url": "/reference/api/services/serviceregistration-1/",
      "members": [
        {
          "name": "ServiceRegistration",
          "kind": "ctor",
          "signature": "public ServiceRegistration(T Instance, string Provider, ServicePriority Priority)",
          "parameters": [
            {
              "name": "Instance",
              "type": "T",
              "summary": "The implementation."
            },
            {
              "name": "Provider",
              "type": "string",
              "summary": "The id of the registering plugin."
            },
            {
              "name": "Priority",
              "type": "ServicePriority",
              "summary": "Its rank."
            }
          ],
          "summary": "One registered service: the implementation, who provided it and how it ranks.",
          "documented": true,
          "url": "/reference/api/services/serviceregistration-1/#constructor"
        },
        {
          "name": "Instance",
          "kind": "property",
          "signature": "public T Instance { get; init; }",
          "returns": {
            "type": "T"
          },
          "summary": "The implementation.",
          "documented": true,
          "url": "/reference/api/services/serviceregistration-1/#instance"
        },
        {
          "name": "Priority",
          "kind": "property",
          "signature": "public ServicePriority Priority { get; init; }",
          "returns": {
            "type": "ServicePriority"
          },
          "summary": "Its rank.",
          "documented": true,
          "url": "/reference/api/services/serviceregistration-1/#priority"
        },
        {
          "name": "Provider",
          "kind": "property",
          "signature": "public string Provider { get; init; }",
          "returns": {
            "type": "string"
          },
          "summary": "The id of the registering plugin.",
          "documented": true,
          "url": "/reference/api/services/serviceregistration-1/#provider"
        }
      ]
    },
    {
      "name": "Sidebar",
      "fullName": "Mc.Scripting.Sidebar",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "display",
      "categoryLabel": "Scoreboards, boss bars, tab list",
      "signature": "public sealed class Sidebar : IDisposable, IPluginResource",
      "interfaces": [
        "IDisposable",
        "IPluginResource"
      ],
      "summary": "A sidebar scoreboard (the list of lines at the right of the screen) shown to chosen players. Each sidebar is a private objective sent only to its viewers, so different players can see different content at the same time (create one sidebar per player for personal lines). Lines are rich text, line 0 is the top; vanilla shows at most 15. Create it with `Sidebars.Create`; it disappears from the viewers when the plugin unloads.",
      "url": "/reference/api/display/sidebar/",
      "members": [
        {
          "name": "MaxLines",
          "kind": "field",
          "signature": "public const int MaxLines = 15;",
          "static": true,
          "returns": {
            "type": "int"
          },
          "summary": "The number of lines the client can show.",
          "documented": true,
          "url": "/reference/api/display/sidebar/#maxlines"
        },
        {
          "name": "LineCount",
          "kind": "property",
          "signature": "public int LineCount { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The number of lines currently set.",
          "documented": true,
          "url": "/reference/api/display/sidebar/#linecount"
        },
        {
          "name": "Title",
          "kind": "property",
          "signature": "public Component Title { get; set; }",
          "returns": {
            "type": "Component"
          },
          "summary": "The title above the lines.",
          "documented": true,
          "url": "/reference/api/display/sidebar/#title"
        },
        {
          "name": "Viewers",
          "kind": "property",
          "signature": "public IReadOnlyList<Player> Viewers { get; }",
          "returns": {
            "type": "IReadOnlyList<Player>"
          },
          "summary": "The players who currently see this sidebar (those who left are dropped).",
          "documented": true,
          "url": "/reference/api/display/sidebar/#viewers"
        },
        {
          "name": "Clear",
          "kind": "method",
          "signature": "public void Clear()",
          "summary": "Removes every line.",
          "documented": true,
          "url": "/reference/api/display/sidebar/#clear"
        },
        {
          "name": "Dispose",
          "kind": "method",
          "signature": "public void Dispose()",
          "documented": false,
          "url": "/reference/api/display/sidebar/#dispose"
        },
        {
          "name": "Hide",
          "kind": "method",
          "signature": "public void Hide(Player player)",
          "parameters": [
            {
              "name": "player",
              "type": "Player",
              "summary": "The player."
            }
          ],
          "summary": "Hides the sidebar from a player.",
          "documented": true,
          "url": "/reference/api/display/sidebar/#hide"
        },
        {
          "name": "IsShownTo",
          "kind": "method",
          "signature": "public bool IsShownTo(Player player)",
          "parameters": [
            {
              "name": "player",
              "type": "Player",
              "summary": "The player."
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the player sees this sidebar.",
          "documented": true,
          "url": "/reference/api/display/sidebar/#isshownto"
        },
        {
          "name": "Remove",
          "kind": "method",
          "signature": "public void Remove()",
          "summary": "Hides the sidebar from everybody and releases it.",
          "documented": true,
          "url": "/reference/api/display/sidebar/#remove"
        },
        {
          "name": "SetLine",
          "kind": "method",
          "signature": "public void SetLine(int index, Component? text)",
          "parameters": [
            {
              "name": "index",
              "type": "int",
              "summary": "The line, 0 to `Sidebar.MaxLines` - 1."
            },
            {
              "name": "text",
              "type": "Component?",
              "summary": "The text, null to remove."
            }
          ],
          "summary": "Sets one line (0 is the top). A null text removes the line.",
          "documented": true,
          "url": "/reference/api/display/sidebar/#setline"
        },
        {
          "name": "SetLines",
          "kind": "method",
          "signature": "public void SetLines(IReadOnlyList<Component> lines)",
          "parameters": [
            {
              "name": "lines",
              "type": "IReadOnlyList<Component>",
              "summary": "The texts."
            }
          ],
          "summary": "Replaces all lines: the first text becomes line 0, lines beyond the given ones are removed.",
          "documented": true,
          "url": "/reference/api/display/sidebar/#setlines"
        },
        {
          "name": "Show",
          "kind": "method",
          "signature": "public void Show(Player player)",
          "parameters": [
            {
              "name": "player",
              "type": "Player",
              "summary": "The player."
            }
          ],
          "summary": "Shows the sidebar to a player (replacing any sidebar of the server scoreboard on his screen).",
          "documented": true,
          "url": "/reference/api/display/sidebar/#show"
        }
      ]
    },
    {
      "name": "Sidebars",
      "fullName": "Mc.Scripting.Sidebars",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "display",
      "categoryLabel": "Scoreboards, boss bars, tab list",
      "signature": "public sealed class Sidebars",
      "summary": "Creates sidebars owned by a plugin (`plugin.Sidebars`).",
      "url": "/reference/api/display/sidebars/",
      "members": [
        {
          "name": "Create",
          "kind": "method",
          "signature": "public Sidebar Create(Component title)",
          "parameters": [
            {
              "name": "title",
              "type": "Component",
              "summary": "The title."
            }
          ],
          "returns": {
            "type": "Sidebar",
            "summary": "The sidebar; call `Sidebar.Show` for each player."
          },
          "summary": "Creates a sidebar nobody sees yet.",
          "documented": true,
          "url": "/reference/api/display/sidebars/#create"
        }
      ]
    },
    {
      "name": "SoundCategory",
      "fullName": "Mc.Scripting.SoundCategory",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "players",
      "categoryLabel": "Players",
      "signature": "public enum SoundCategory : int",
      "summary": "Where a sound is mixed in the client's volume sliders.",
      "url": "/reference/api/players/soundcategory/",
      "members": [
        {
          "name": "Master",
          "kind": "enumMember",
          "signature": "Master = 0",
          "value": "0",
          "summary": "The master volume only.",
          "documented": true,
          "url": "/reference/api/players/soundcategory/#master"
        },
        {
          "name": "Music",
          "kind": "enumMember",
          "signature": "Music = 1",
          "value": "1",
          "summary": "Music.",
          "documented": true,
          "url": "/reference/api/players/soundcategory/#music"
        },
        {
          "name": "Records",
          "kind": "enumMember",
          "signature": "Records = 2",
          "value": "2",
          "summary": "Jukebox and note blocks.",
          "documented": true,
          "url": "/reference/api/players/soundcategory/#records"
        },
        {
          "name": "Weather",
          "kind": "enumMember",
          "signature": "Weather = 3",
          "value": "3",
          "summary": "Weather.",
          "documented": true,
          "url": "/reference/api/players/soundcategory/#weather"
        },
        {
          "name": "Blocks",
          "kind": "enumMember",
          "signature": "Blocks = 4",
          "value": "4",
          "summary": "Blocks.",
          "documented": true,
          "url": "/reference/api/players/soundcategory/#blocks"
        },
        {
          "name": "Hostile",
          "kind": "enumMember",
          "signature": "Hostile = 5",
          "value": "5",
          "summary": "Hostile creatures.",
          "documented": true,
          "url": "/reference/api/players/soundcategory/#hostile"
        },
        {
          "name": "Neutral",
          "kind": "enumMember",
          "signature": "Neutral = 6",
          "value": "6",
          "summary": "Friendly creatures.",
          "documented": true,
          "url": "/reference/api/players/soundcategory/#neutral"
        },
        {
          "name": "Players",
          "kind": "enumMember",
          "signature": "Players = 7",
          "value": "7",
          "summary": "Players.",
          "documented": true,
          "url": "/reference/api/players/soundcategory/#players"
        },
        {
          "name": "Ambient",
          "kind": "enumMember",
          "signature": "Ambient = 8",
          "value": "8",
          "summary": "Ambient and cave sounds.",
          "documented": true,
          "url": "/reference/api/players/soundcategory/#ambient"
        },
        {
          "name": "Voice",
          "kind": "enumMember",
          "signature": "Voice = 9",
          "value": "9",
          "summary": "Voice (narration).",
          "documented": true,
          "url": "/reference/api/players/soundcategory/#voice"
        },
        {
          "name": "Ui",
          "kind": "enumMember",
          "signature": "Ui = 10",
          "value": "10",
          "summary": "User interface sounds.",
          "documented": true,
          "url": "/reference/api/players/soundcategory/#ui"
        }
      ]
    },
    {
      "name": "SpawnReason",
      "fullName": "Mc.Scripting.SpawnReason",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "events",
      "categoryLabel": "Events (infrastructure)",
      "signature": "public enum SpawnReason : byte",
      "summary": "Why an entity is being added to the world.",
      "url": "/reference/api/events/spawnreason/",
      "members": [
        {
          "name": "Default",
          "kind": "enumMember",
          "signature": "Default = 0",
          "value": "0",
          "summary": "Unknown / not classified.",
          "documented": true,
          "url": "/reference/api/events/spawnreason/#default"
        },
        {
          "name": "Natural",
          "kind": "enumMember",
          "signature": "Natural = 1",
          "value": "1",
          "summary": "Natural mob spawning.",
          "documented": true,
          "url": "/reference/api/events/spawnreason/#natural"
        },
        {
          "name": "ChunkGeneration",
          "kind": "enumMember",
          "signature": "ChunkGeneration = 2",
          "value": "2",
          "summary": "Created with a freshly generated chunk.",
          "documented": true,
          "url": "/reference/api/events/spawnreason/#chunkgeneration"
        },
        {
          "name": "Breeding",
          "kind": "enumMember",
          "signature": "Breeding = 3",
          "value": "3",
          "summary": "A baby from breeding.",
          "documented": true,
          "url": "/reference/api/events/spawnreason/#breeding"
        },
        {
          "name": "SpawnEgg",
          "kind": "enumMember",
          "signature": "SpawnEgg = 4",
          "value": "4",
          "summary": "A spawn egg.",
          "documented": true,
          "url": "/reference/api/events/spawnreason/#spawnegg"
        },
        {
          "name": "Spawner",
          "kind": "enumMember",
          "signature": "Spawner = 5",
          "value": "5",
          "summary": "A mob spawner.",
          "documented": true,
          "url": "/reference/api/events/spawnreason/#spawner"
        },
        {
          "name": "Command",
          "kind": "enumMember",
          "signature": "Command = 6",
          "value": "6",
          "summary": "/summon.",
          "documented": true,
          "url": "/reference/api/events/spawnreason/#command"
        },
        {
          "name": "Plugin",
          "kind": "enumMember",
          "signature": "Plugin = 7",
          "value": "7",
          "summary": "Spawned by a plugin.",
          "documented": true,
          "url": "/reference/api/events/spawnreason/#plugin"
        },
        {
          "name": "Structure",
          "kind": "enumMember",
          "signature": "Structure = 8",
          "value": "8",
          "summary": "Spawned by a structure.",
          "documented": true,
          "url": "/reference/api/events/spawnreason/#structure"
        },
        {
          "name": "Reinforcements",
          "kind": "enumMember",
          "signature": "Reinforcements = 9",
          "value": "9",
          "summary": "Zombie reinforcements.",
          "documented": true,
          "url": "/reference/api/events/spawnreason/#reinforcements"
        },
        {
          "name": "Lightning",
          "kind": "enumMember",
          "signature": "Lightning = 10",
          "value": "10",
          "summary": "Lightning (skeleton trap, zombified piglin ...).",
          "documented": true,
          "url": "/reference/api/events/spawnreason/#lightning"
        },
        {
          "name": "SlimeSplit",
          "kind": "enumMember",
          "signature": "SlimeSplit = 11",
          "value": "11",
          "summary": "A slime split.",
          "documented": true,
          "url": "/reference/api/events/spawnreason/#slimesplit"
        },
        {
          "name": "Mount",
          "kind": "enumMember",
          "signature": "Mount = 12",
          "value": "12",
          "summary": "A jockey / mount.",
          "documented": true,
          "url": "/reference/api/events/spawnreason/#mount"
        },
        {
          "name": "Dispenser",
          "kind": "enumMember",
          "signature": "Dispenser = 13",
          "value": "13",
          "summary": "Spawned by a dispenser.",
          "documented": true,
          "url": "/reference/api/events/spawnreason/#dispenser"
        },
        {
          "name": "Drop",
          "kind": "enumMember",
          "signature": "Drop = 14",
          "value": "14",
          "summary": "Created by a game mechanic: item drops, experience orbs, falling blocks, projectiles.",
          "documented": true,
          "url": "/reference/api/events/spawnreason/#drop"
        },
        {
          "name": "Portal",
          "kind": "enumMember",
          "signature": "Portal = 15",
          "value": "15",
          "summary": "Spawned by a portal.",
          "documented": true,
          "url": "/reference/api/events/spawnreason/#portal"
        }
      ]
    },
    {
      "name": "Subscription",
      "fullName": "Mc.Scripting.Subscription",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "events",
      "categoryLabel": "Events (infrastructure)",
      "signature": "public sealed class Subscription : IDisposable, IPluginResource",
      "interfaces": [
        "IDisposable",
        "IPluginResource"
      ],
      "summary": "An active event subscription. Dispose to unsubscribe.",
      "url": "/reference/api/events/subscription/",
      "members": [
        {
          "name": "IsActive",
          "kind": "property",
          "signature": "public bool IsActive { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the subscription is still active.",
          "documented": true,
          "url": "/reference/api/events/subscription/#isactive"
        },
        {
          "name": "Dispose",
          "kind": "method",
          "signature": "public void Dispose()",
          "summary": "Unsubscribes the listener.",
          "documented": true,
          "url": "/reference/api/events/subscription/#dispose"
        }
      ]
    },
    {
      "name": "SystemCallback",
      "fullName": "Mc.Scripting.SystemCallback",
      "namespace": "Mc.Scripting",
      "kind": "delegate",
      "category": "systems",
      "categoryLabel": "Systems and phases",
      "signature": "public delegate void SystemCallback(float deltaTime)",
      "summary": "Per-tick system callback; receives the tick's delta time in seconds.",
      "url": "/reference/api/systems/systemcallback/",
      "members": [],
      "parameters": [
        {
          "name": "deltaTime",
          "type": "float",
          "summary": "The tick's delta time in seconds."
        }
      ],
      "returns": "void"
    },
    {
      "name": "SystemHandle",
      "fullName": "Mc.Scripting.SystemHandle",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "systems",
      "categoryLabel": "Systems and phases",
      "signature": "public sealed class SystemHandle : IDisposable, IPluginResource",
      "interfaces": [
        "IDisposable",
        "IPluginResource"
      ],
      "summary": "A registered system. Dispose to remove it from the pipeline.",
      "url": "/reference/api/systems/systemhandle/",
      "members": [
        {
          "name": "Name",
          "kind": "property",
          "signature": "public string Name { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The system's effective registry name: the requested one (namespaced by the plugin, see `SystemRegistry.Register`), or, while a hot-reload predecessor still holds that name, the temporary \"name#2\" form. Renamed back to the plain name once the predecessor is released.",
          "documented": true,
          "url": "/reference/api/systems/systemhandle/#name"
        },
        {
          "name": "Dispose",
          "kind": "method",
          "signature": "public void Dispose()",
          "summary": "Removes the system from the pipeline.",
          "documented": true,
          "url": "/reference/api/systems/systemhandle/#dispose"
        }
      ]
    },
    {
      "name": "SystemPlacement",
      "fullName": "Mc.Scripting.SystemPlacement",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "systems",
      "categoryLabel": "Systems and phases",
      "signature": "public enum SystemPlacement : int",
      "summary": "Where a system goes relative to the engine's registry.",
      "url": "/reference/api/systems/systemplacement/",
      "members": [
        {
          "name": "Append",
          "kind": "enumMember",
          "signature": "Append = 0",
          "value": "0",
          "summary": "End of the phase.",
          "documented": true,
          "url": "/reference/api/systems/systemplacement/#append"
        },
        {
          "name": "After",
          "kind": "enumMember",
          "signature": "After = 1",
          "value": "1",
          "summary": "Right after the system named by the anchor (same phase).",
          "documented": true,
          "url": "/reference/api/systems/systemplacement/#after"
        },
        {
          "name": "Before",
          "kind": "enumMember",
          "signature": "Before = 2",
          "value": "2",
          "summary": "Right before the system named by the anchor (same phase).",
          "documented": true,
          "url": "/reference/api/systems/systemplacement/#before"
        },
        {
          "name": "Replace",
          "kind": "enumMember",
          "signature": "Replace = 3",
          "value": "3",
          "summary": "Takes the anchor's place: the anchor is disabled and this runs right after it. Disposing the handle (or unloading the plugin) re-enables the original.",
          "documented": true,
          "url": "/reference/api/systems/systemplacement/#replace"
        }
      ]
    },
    {
      "name": "SystemRegistry",
      "fullName": "Mc.Scripting.SystemRegistry",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "systems",
      "categoryLabel": "Systems and phases",
      "signature": "public sealed class SystemRegistry",
      "summary": "Registers ECS systems in the engine's tick pipeline, scoped to a plugin (released on unload).",
      "examples": [
        "```csharp\nSystems.Add(\"regen\", Phase.Tick, dt => { /* runs every tick */ });\nSystems.After(\"vanilla:physics\", \"after_physics\", dt => { });\nvar h = Systems.Replace(\"vanilla:ai\", \"my_ai\", dt => { });   // disables vanilla:ai\nh.Dispose();                                                   // restores it\n```"
      ],
      "url": "/reference/api/systems/systemregistry/",
      "members": [
        {
          "name": "Add",
          "kind": "method",
          "signature": "public SystemHandle Add(string name, Phase phase, SystemCallback callback)",
          "parameters": [
            {
              "name": "name",
              "type": "string"
            },
            {
              "name": "phase",
              "type": "Phase"
            },
            {
              "name": "callback",
              "type": "SystemCallback"
            }
          ],
          "returns": {
            "type": "SystemHandle"
          },
          "summary": "Adds a system that runs once per tick at the end of `phase` on the tick thread.",
          "documented": true,
          "url": "/reference/api/systems/systemregistry/#add"
        },
        {
          "name": "After",
          "kind": "method",
          "signature": "public SystemHandle After(string anchor, string name, SystemCallback callback)",
          "parameters": [
            {
              "name": "anchor",
              "type": "string"
            },
            {
              "name": "name",
              "type": "string"
            },
            {
              "name": "callback",
              "type": "SystemCallback"
            }
          ],
          "returns": {
            "type": "SystemHandle"
          },
          "summary": "Registers `name` to run right after the system `anchor`.",
          "documented": true,
          "url": "/reference/api/systems/systemregistry/#after"
        },
        {
          "name": "Before",
          "kind": "method",
          "signature": "public SystemHandle Before(string anchor, string name, SystemCallback callback)",
          "parameters": [
            {
              "name": "anchor",
              "type": "string"
            },
            {
              "name": "name",
              "type": "string"
            },
            {
              "name": "callback",
              "type": "SystemCallback"
            }
          ],
          "returns": {
            "type": "SystemHandle"
          },
          "summary": "Registers `name` to run right before the system `anchor`.",
          "documented": true,
          "url": "/reference/api/systems/systemregistry/#before"
        },
        {
          "name": "Register",
          "kind": "method",
          "signature": "public SystemHandle Register(Phase phase, string name, SystemCallback callback, SystemPlacement placement = SystemPlacement.Append, string? anchor = null)",
          "parameters": [
            {
              "name": "phase",
              "type": "Phase"
            },
            {
              "name": "name",
              "type": "string"
            },
            {
              "name": "callback",
              "type": "SystemCallback"
            },
            {
              "name": "placement",
              "type": "SystemPlacement",
              "default": "SystemPlacement.Append"
            },
            {
              "name": "anchor",
              "type": "string?",
              "default": "null"
            }
          ],
          "returns": {
            "type": "SystemHandle"
          },
          "summary": "Registers a system in the engine's registry. The registry name is namespaced by the plugin: `\"{plugin name}:{name}\"` (left as is when `name` already starts with that prefix), so plugins cannot collide; a collision with a native system or with another plugin's system throws. `anchor` is the full registry name of an existing (native or scripted) system for After/Before/Replace (the phase is then the anchor's and `phase` is ignored). Called from inside a system, the registration takes effect when the tick ends.",
          "documented": true,
          "url": "/reference/api/systems/systemregistry/#register"
        },
        {
          "name": "Replace",
          "kind": "method",
          "signature": "public SystemHandle Replace(string target, string name, SystemCallback callback)",
          "parameters": [
            {
              "name": "target",
              "type": "string"
            },
            {
              "name": "name",
              "type": "string"
            },
            {
              "name": "callback",
              "type": "SystemCallback"
            }
          ],
          "returns": {
            "type": "SystemHandle"
          },
          "summary": "Replaces the (native or scripted) system `target`: it is disabled and `name` runs in its place. Dispose the handle (or unload the plugin) to restore it.",
          "documented": true,
          "url": "/reference/api/systems/systemregistry/#replace"
        },
        {
          "name": "SetEnabled",
          "kind": "method",
          "signature": "public bool SetEnabled(string name, bool enabled)",
          "parameters": [
            {
              "name": "name",
              "type": "string"
            },
            {
              "name": "enabled",
              "type": "bool"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Enables or disables a registered system by name (native or scripted). A system this plugin disabled is re-enabled when the plugin unloads. Returns false if no such system exists.",
          "documented": true,
          "url": "/reference/api/systems/systemregistry/#setenabled"
        }
      ]
    },
    {
      "name": "TabEntry",
      "fullName": "Mc.Scripting.TabEntry",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "display",
      "categoryLabel": "Scoreboards, boss bars, tab list",
      "signature": "public sealed class TabEntry",
      "summary": "The fields of one player's tab entry for one viewer. A null field keeps what it was (see `Tablist.Set`).",
      "url": "/reference/api/display/tabentry/",
      "members": [
        {
          "name": "TabEntry",
          "kind": "ctor",
          "signature": "public TabEntry()",
          "documented": false,
          "url": "/reference/api/display/tabentry/#constructor"
        },
        {
          "name": "Display",
          "kind": "property",
          "signature": "public Component? Display { get; init; }",
          "returns": {
            "type": "Component?"
          },
          "summary": "The name shown in the list, or null to keep it.",
          "documented": true,
          "url": "/reference/api/display/tabentry/#display"
        },
        {
          "name": "GameMode",
          "kind": "property",
          "signature": "public GameMode? GameMode { get; init; }",
          "returns": {
            "type": "GameMode?"
          },
          "summary": "The game mode shown, or null to keep it.",
          "documented": true,
          "url": "/reference/api/display/tabentry/#gamemode"
        },
        {
          "name": "Latency",
          "kind": "property",
          "signature": "public int? Latency { get; init; }",
          "returns": {
            "type": "int?"
          },
          "summary": "The latency shown in milliseconds (0 to 60000), or null to keep it.",
          "documented": true,
          "url": "/reference/api/display/tabentry/#latency"
        },
        {
          "name": "Listed",
          "kind": "property",
          "signature": "public bool? Listed { get; init; }",
          "returns": {
            "type": "bool?"
          },
          "summary": "Whether the player is listed, or null to keep it.",
          "documented": true,
          "url": "/reference/api/display/tabentry/#listed"
        },
        {
          "name": "Order",
          "kind": "property",
          "signature": "public int? Order { get; init; }",
          "returns": {
            "type": "int?"
          },
          "summary": "The order in the list (lower first), or null to keep it.",
          "documented": true,
          "url": "/reference/api/display/tabentry/#order"
        }
      ]
    },
    {
      "name": "Tablist",
      "fullName": "Mc.Scripting.Tablist",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "display",
      "categoryLabel": "Scoreboards, boss bars, tab list",
      "signature": "public sealed class Tablist",
      "summary": "The tab list as one viewer sees it: the name, order, latency and game mode of each player in the list, the header and footer, fake entries (extra slots with their own name and skin) and the objectives shown in the list or under the names. Every change is seen by the viewer only. What a plugin sets is restored and removed when the plugin unloads. Reach it as `plugin.Tablist`. Call from the tick thread.",
      "url": "/reference/api/display/tablist/",
      "members": [
        {
          "name": "AddFakeEntry",
          "kind": "method",
          "signature": "public void AddFakeEntry(Player viewer, Guid slotId, string name, string? skinValue, string? skinSignature, int latency, int order, Component? display, bool hat)",
          "parameters": [
            {
              "name": "viewer",
              "type": "Player",
              "summary": "The player who sees it."
            },
            {
              "name": "slotId",
              "type": "Guid",
              "summary": "The entry's id; use it to remove the entry again."
            },
            {
              "name": "name",
              "type": "string",
              "summary": "The name shown: 1 to 16 printable ASCII characters, no space."
            },
            {
              "name": "skinValue",
              "type": "string?",
              "summary": "The skin texture value, or null or empty for no skin."
            },
            {
              "name": "skinSignature",
              "type": "string?",
              "summary": "The skin signature, or null or empty for an unsigned skin."
            },
            {
              "name": "latency",
              "type": "int",
              "summary": "The latency shown, in milliseconds (0 to 60000)."
            },
            {
              "name": "order",
              "type": "int",
              "summary": "The order in the list (lower first)."
            },
            {
              "name": "display",
              "type": "Component?",
              "summary": "The text shown instead of the name, or null for none."
            },
            {
              "name": "hat",
              "type": "bool",
              "summary": "Whether the skin's hat layer is shown."
            }
          ],
          "summary": "Adds a fake entry: an extra row of the tab list with its own name and skin, for one viewer.",
          "documented": true,
          "url": "/reference/api/display/tablist/#addfakeentry"
        },
        {
          "name": "Header",
          "kind": "method",
          "signature": "public void Header(Player viewer, Component? header, Component? footer)",
          "parameters": [
            {
              "name": "viewer",
              "type": "Player",
              "summary": "The player who sees them."
            },
            {
              "name": "header",
              "type": "Component?",
              "summary": "The header text."
            },
            {
              "name": "footer",
              "type": "Component?",
              "summary": "The footer text."
            }
          ],
          "summary": "Sets the header and footer of the tab list for one viewer. Null (or an empty component) is no header or footer.",
          "documented": true,
          "url": "/reference/api/display/tablist/#header"
        },
        {
          "name": "RemoveFakeEntry",
          "kind": "method",
          "signature": "public void RemoveFakeEntry(Player viewer, Guid slotId)",
          "parameters": [
            {
              "name": "viewer",
              "type": "Player",
              "summary": "The player who sees it."
            },
            {
              "name": "slotId",
              "type": "Guid",
              "summary": "The entry's id."
            }
          ],
          "summary": "Removes a fake entry added with `Tablist.AddFakeEntry`.",
          "documented": true,
          "url": "/reference/api/display/tablist/#removefakeentry"
        },
        {
          "name": "RemoveObjective",
          "kind": "method",
          "signature": "public void RemoveObjective(Player viewer, string name)",
          "parameters": [
            {
              "name": "viewer",
              "type": "Player",
              "summary": "The player who sees it."
            },
            {
              "name": "name",
              "type": "string",
              "summary": "The objective name."
            }
          ],
          "summary": "Removes an objective of one viewer, with its scores.",
          "documented": true,
          "url": "/reference/api/display/tablist/#removeobjective"
        },
        {
          "name": "ResetScore",
          "kind": "method",
          "signature": "public void ResetScore(Player viewer, string objective, string holder)",
          "parameters": [
            {
              "name": "viewer",
              "type": "Player",
              "summary": "The player who sees it."
            },
            {
              "name": "objective",
              "type": "string",
              "summary": "The objective name."
            },
            {
              "name": "holder",
              "type": "string",
              "summary": "The holder."
            }
          ],
          "summary": "Removes one holder's score from an objective of one viewer.",
          "documented": true,
          "url": "/reference/api/display/tablist/#resetscore"
        },
        {
          "name": "Restore",
          "kind": "method",
          "signature": "public void Restore(Player viewer, Player target)",
          "parameters": [
            {
              "name": "viewer",
              "type": "Player",
              "summary": "The player who sees the list."
            },
            {
              "name": "target",
              "type": "Player",
              "summary": "The player in the list."
            }
          ],
          "summary": "Puts back the server's own tab values of one player for one viewer (name, listed, order, latency and game mode), whoever set them.",
          "documented": true,
          "url": "/reference/api/display/tablist/#restore"
        },
        {
          "name": "Set",
          "kind": "method",
          "signature": "public void Set(Player viewer, Player target, TabEntry entry)",
          "parameters": [
            {
              "name": "viewer",
              "type": "Player",
              "summary": "The player who sees the change."
            },
            {
              "name": "target",
              "type": "Player",
              "summary": "The player in the list."
            },
            {
              "name": "entry",
              "type": "TabEntry",
              "summary": "The fields to change."
            }
          ],
          "summary": "Changes how one viewer sees one player in the tab list. A field left null keeps what it was.",
          "documented": true,
          "url": "/reference/api/display/tablist/#set"
        },
        {
          "name": "SetObjective",
          "kind": "method",
          "signature": "public void SetObjective(Player viewer, int slot, string name, Component title)",
          "parameters": [
            {
              "name": "viewer",
              "type": "Player",
              "summary": "The player who sees it."
            },
            {
              "name": "slot",
              "type": "int",
              "summary": "0 for the tab list, 2 for below the name."
            },
            {
              "name": "name",
              "type": "string",
              "summary": "The objective name: 1 to 16 printable ASCII characters, no space."
            },
            {
              "name": "title",
              "type": "Component",
              "summary": "The title."
            }
          ],
          "summary": "Defines an objective for one viewer: slot 0 is the tab list (the value after each name), slot 2 is below the name.",
          "documented": true,
          "url": "/reference/api/display/tablist/#setobjective"
        },
        {
          "name": "SetScore",
          "kind": "method",
          "signature": "public void SetScore(Player viewer, string objective, string holder, int score, Component? display, ScoreFormat format, Component? fixedFormat)",
          "parameters": [
            {
              "name": "viewer",
              "type": "Player",
              "summary": "The player who sees it."
            },
            {
              "name": "objective",
              "type": "string",
              "summary": "The objective name (defined for this viewer)."
            },
            {
              "name": "holder",
              "type": "string",
              "summary": "The holder: a player name or any text of 1 to 40 bytes."
            },
            {
              "name": "score",
              "type": "int",
              "summary": "The score."
            },
            {
              "name": "display",
              "type": "Component?",
              "summary": "The text shown instead of the name, or null for none."
            },
            {
              "name": "format",
              "type": "ScoreFormat",
              "summary": "How the number is shown."
            },
            {
              "name": "fixedFormat",
              "type": "Component?",
              "summary": "The text shown instead of the number; needed with `ScoreFormat.Fixed`."
            }
          ],
          "summary": "Sets one holder's score on an objective of one viewer.",
          "documented": true,
          "url": "/reference/api/display/tablist/#setscore"
        }
      ]
    },
    {
      "name": "TeleportCause",
      "fullName": "Mc.Scripting.TeleportCause",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "events",
      "categoryLabel": "Events (infrastructure)",
      "signature": "public enum TeleportCause : byte",
      "summary": "Why a player is being teleported.",
      "url": "/reference/api/events/teleportcause/",
      "members": [
        {
          "name": "Unknown",
          "kind": "enumMember",
          "signature": "Unknown = 0",
          "value": "0",
          "summary": "Unknown cause.",
          "documented": true,
          "url": "/reference/api/events/teleportcause/#unknown"
        },
        {
          "name": "Command",
          "kind": "enumMember",
          "signature": "Command = 1",
          "value": "1",
          "summary": "/tp or another command.",
          "documented": true,
          "url": "/reference/api/events/teleportcause/#command"
        },
        {
          "name": "Plugin",
          "kind": "enumMember",
          "signature": "Plugin = 2",
          "value": "2",
          "summary": "A plugin called Teleport.",
          "documented": true,
          "url": "/reference/api/events/teleportcause/#plugin"
        },
        {
          "name": "EnderPearl",
          "kind": "enumMember",
          "signature": "EnderPearl = 3",
          "value": "3",
          "summary": "An ender pearl.",
          "documented": true,
          "url": "/reference/api/events/teleportcause/#enderpearl"
        },
        {
          "name": "ChorusFruit",
          "kind": "enumMember",
          "signature": "ChorusFruit = 4",
          "value": "4",
          "summary": "A chorus fruit.",
          "documented": true,
          "url": "/reference/api/events/teleportcause/#chorusfruit"
        },
        {
          "name": "NetherPortal",
          "kind": "enumMember",
          "signature": "NetherPortal = 5",
          "value": "5",
          "summary": "A nether portal.",
          "documented": true,
          "url": "/reference/api/events/teleportcause/#netherportal"
        },
        {
          "name": "EndPortal",
          "kind": "enumMember",
          "signature": "EndPortal = 6",
          "value": "6",
          "summary": "An end portal.",
          "documented": true,
          "url": "/reference/api/events/teleportcause/#endportal"
        },
        {
          "name": "EndGateway",
          "kind": "enumMember",
          "signature": "EndGateway = 7",
          "value": "7",
          "summary": "An end gateway.",
          "documented": true,
          "url": "/reference/api/events/teleportcause/#endgateway"
        },
        {
          "name": "Spectate",
          "kind": "enumMember",
          "signature": "Spectate = 8",
          "value": "8",
          "summary": "Teleporting to an entity as a spectator.",
          "documented": true,
          "url": "/reference/api/events/teleportcause/#spectate"
        },
        {
          "name": "Respawn",
          "kind": "enumMember",
          "signature": "Respawn = 9",
          "value": "9",
          "summary": "Respawning.",
          "documented": true,
          "url": "/reference/api/events/teleportcause/#respawn"
        },
        {
          "name": "Dismount",
          "kind": "enumMember",
          "signature": "Dismount = 10",
          "value": "10",
          "summary": "Dismounting a vehicle.",
          "documented": true,
          "url": "/reference/api/events/teleportcause/#dismount"
        }
      ]
    },
    {
      "name": "ClickAction",
      "fullName": "Mc.Scripting.Text.ClickAction",
      "namespace": "Mc.Scripting.Text",
      "kind": "enum",
      "category": "chat",
      "categoryLabel": "Chat and text",
      "signature": "public enum ClickAction : int",
      "summary": "What happens when a player clicks a text component.",
      "url": "/reference/api/chat/clickaction/",
      "members": [
        {
          "name": "OpenUrl",
          "kind": "enumMember",
          "signature": "OpenUrl = 0",
          "value": "0",
          "summary": "Opens a URL (the client asks for confirmation).",
          "documented": true,
          "url": "/reference/api/chat/clickaction/#openurl"
        },
        {
          "name": "RunCommand",
          "kind": "enumMember",
          "signature": "RunCommand = 1",
          "value": "1",
          "summary": "Runs a command as the player (the value includes the slash).",
          "documented": true,
          "url": "/reference/api/chat/clickaction/#runcommand"
        },
        {
          "name": "SuggestCommand",
          "kind": "enumMember",
          "signature": "SuggestCommand = 2",
          "value": "2",
          "summary": "Puts text into the chat box.",
          "documented": true,
          "url": "/reference/api/chat/clickaction/#suggestcommand"
        },
        {
          "name": "CopyToClipboard",
          "kind": "enumMember",
          "signature": "CopyToClipboard = 3",
          "value": "3",
          "summary": "Copies the value to the clipboard.",
          "documented": true,
          "url": "/reference/api/chat/clickaction/#copytoclipboard"
        },
        {
          "name": "ChangePage",
          "kind": "enumMember",
          "signature": "ChangePage = 4",
          "value": "4",
          "summary": "Changes the page of a book.",
          "documented": true,
          "url": "/reference/api/chat/clickaction/#changepage"
        }
      ]
    },
    {
      "name": "ClickEvent",
      "fullName": "Mc.Scripting.Text.ClickEvent",
      "namespace": "Mc.Scripting.Text",
      "kind": "struct",
      "category": "chat",
      "categoryLabel": "Chat and text",
      "signature": "public readonly struct ClickEvent : IEquatable<ClickEvent>",
      "interfaces": [
        "IEquatable<ClickEvent>"
      ],
      "summary": "A click event of a text component.",
      "url": "/reference/api/chat/clickevent/",
      "members": [
        {
          "name": "ClickEvent",
          "kind": "ctor",
          "signature": "public ClickEvent(ClickAction Action, string Value)",
          "parameters": [
            {
              "name": "Action",
              "type": "ClickAction",
              "summary": "What happens."
            },
            {
              "name": "Value",
              "type": "string",
              "summary": "Url / command / clipboard text / page number."
            }
          ],
          "summary": "A click event of a text component.",
          "documented": true,
          "url": "/reference/api/chat/clickevent/#constructor"
        },
        {
          "name": "Action",
          "kind": "property",
          "signature": "public ClickAction Action { get; init; }",
          "returns": {
            "type": "ClickAction"
          },
          "summary": "What happens.",
          "documented": true,
          "url": "/reference/api/chat/clickevent/#action"
        },
        {
          "name": "Value",
          "kind": "property",
          "signature": "public string Value { get; init; }",
          "returns": {
            "type": "string"
          },
          "summary": "Url / command / clipboard text / page number.",
          "documented": true,
          "url": "/reference/api/chat/clickevent/#value"
        },
        {
          "name": "ChangePage",
          "kind": "method",
          "signature": "public static ClickEvent ChangePage(int page)",
          "static": true,
          "parameters": [
            {
              "name": "page",
              "type": "int"
            }
          ],
          "returns": {
            "type": "ClickEvent"
          },
          "summary": "Change the book page.",
          "documented": true,
          "url": "/reference/api/chat/clickevent/#changepage"
        },
        {
          "name": "CopyToClipboard",
          "kind": "method",
          "signature": "public static ClickEvent CopyToClipboard(string text)",
          "static": true,
          "parameters": [
            {
              "name": "text",
              "type": "string"
            }
          ],
          "returns": {
            "type": "ClickEvent"
          },
          "summary": "Copy text to the clipboard.",
          "documented": true,
          "url": "/reference/api/chat/clickevent/#copytoclipboard"
        },
        {
          "name": "OpenUrl",
          "kind": "method",
          "signature": "public static ClickEvent OpenUrl(string url)",
          "static": true,
          "parameters": [
            {
              "name": "url",
              "type": "string"
            }
          ],
          "returns": {
            "type": "ClickEvent"
          },
          "summary": "Open a URL.",
          "documented": true,
          "url": "/reference/api/chat/clickevent/#openurl"
        },
        {
          "name": "RunCommand",
          "kind": "method",
          "signature": "public static ClickEvent RunCommand(string command)",
          "static": true,
          "parameters": [
            {
              "name": "command",
              "type": "string"
            }
          ],
          "returns": {
            "type": "ClickEvent"
          },
          "summary": "Run a command as the player (\"/spawn\").",
          "documented": true,
          "url": "/reference/api/chat/clickevent/#runcommand"
        },
        {
          "name": "SuggestCommand",
          "kind": "method",
          "signature": "public static ClickEvent SuggestCommand(string command)",
          "static": true,
          "parameters": [
            {
              "name": "command",
              "type": "string"
            }
          ],
          "returns": {
            "type": "ClickEvent"
          },
          "summary": "Suggest a command in the chat box.",
          "documented": true,
          "url": "/reference/api/chat/clickevent/#suggestcommand"
        }
      ]
    },
    {
      "name": "Component",
      "fullName": "Mc.Scripting.Text.Component",
      "namespace": "Mc.Scripting.Text",
      "kind": "class",
      "category": "ecs",
      "categoryLabel": "Entities, components, queries",
      "signature": "public sealed class Component",
      "summary": "An immutable rich text component (vanilla \"text component\"): text, translatable text, keybind, score or selector content with a style and children. Every method that \"changes\" a component returns a new one.",
      "remarks": "Strings convert implicitly to a literal text component (no formatting codes are interpreted, so user input is safe); use `Component.Legacy` for `&` codes and `Component.Parse` for MiniMessage-style tags.",
      "url": "/reference/api/ecs/component/",
      "members": [
        {
          "name": "Children",
          "kind": "property",
          "signature": "public IReadOnlyList<Component> Children { get; }",
          "returns": {
            "type": "IReadOnlyList<Component>"
          },
          "summary": "The children appended after this component's own content.",
          "documented": true,
          "url": "/reference/api/ecs/component/#children"
        },
        {
          "name": "Content",
          "kind": "property",
          "signature": "public string Content { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The literal text of a text component (empty for other kinds).",
          "documented": true,
          "url": "/reference/api/ecs/component/#content"
        },
        {
          "name": "IsEmpty",
          "kind": "property",
          "signature": "public bool IsEmpty { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether this is the empty literal component without style or children.",
          "documented": true,
          "url": "/reference/api/ecs/component/#isempty"
        },
        {
          "name": "TextColour",
          "kind": "property",
          "signature": "public TextColor TextColour { get; }",
          "returns": {
            "type": "TextColor"
          },
          "summary": "The colour, `TextColor.None` if inherited.",
          "documented": true,
          "url": "/reference/api/ecs/component/#textcolour"
        },
        {
          "name": "Empty",
          "kind": "property",
          "signature": "public static Component Empty { get; }",
          "static": true,
          "returns": {
            "type": "Component"
          },
          "summary": "The empty component.",
          "documented": true,
          "url": "/reference/api/ecs/component/#empty"
        },
        {
          "name": "Append",
          "kind": "method",
          "signature": "public Component Append(Component child)",
          "parameters": [
            {
              "name": "child",
              "type": "Component"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "Appends a child component.",
          "documented": true,
          "url": "/reference/api/ecs/component/#append"
        },
        {
          "name": "Append",
          "kind": "method",
          "signature": "public Component Append(string text)",
          "parameters": [
            {
              "name": "text",
              "type": "string"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "Appends literal text.",
          "documented": true,
          "url": "/reference/api/ecs/component/#append-1"
        },
        {
          "name": "Bold",
          "kind": "method",
          "signature": "public Component Bold(bool value = true)",
          "parameters": [
            {
              "name": "value",
              "type": "bool",
              "default": "true"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "Sets bold.",
          "documented": true,
          "url": "/reference/api/ecs/component/#bold"
        },
        {
          "name": "Color",
          "kind": "method",
          "signature": "public Component Color(TextColor color)",
          "parameters": [
            {
              "name": "color",
              "type": "TextColor"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "Sets the colour.",
          "documented": true,
          "url": "/reference/api/ecs/component/#color"
        },
        {
          "name": "Font",
          "kind": "method",
          "signature": "public Component Font(string font)",
          "parameters": [
            {
              "name": "font",
              "type": "string"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "Sets the font resource key.",
          "documented": true,
          "url": "/reference/api/ecs/component/#font"
        },
        {
          "name": "Insertion",
          "kind": "method",
          "signature": "public Component Insertion(string text)",
          "parameters": [
            {
              "name": "text",
              "type": "string"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "Text inserted into the chat box when the component is shift-clicked.",
          "documented": true,
          "url": "/reference/api/ecs/component/#insertion"
        },
        {
          "name": "Italic",
          "kind": "method",
          "signature": "public Component Italic(bool value = true)",
          "parameters": [
            {
              "name": "value",
              "type": "bool",
              "default": "true"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "Sets italic.",
          "documented": true,
          "url": "/reference/api/ecs/component/#italic"
        },
        {
          "name": "Obfuscated",
          "kind": "method",
          "signature": "public Component Obfuscated(bool value = true)",
          "parameters": [
            {
              "name": "value",
              "type": "bool",
              "default": "true"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "Sets obfuscated (random characters).",
          "documented": true,
          "url": "/reference/api/ecs/component/#obfuscated"
        },
        {
          "name": "OnClick",
          "kind": "method",
          "signature": "public Component OnClick(ClickEvent click)",
          "parameters": [
            {
              "name": "click",
              "type": "ClickEvent"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "Sets the click event.",
          "documented": true,
          "url": "/reference/api/ecs/component/#onclick"
        },
        {
          "name": "OnHover",
          "kind": "method",
          "signature": "public Component OnHover(HoverEvent hover)",
          "parameters": [
            {
              "name": "hover",
              "type": "HoverEvent"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "Sets the hover event.",
          "documented": true,
          "url": "/reference/api/ecs/component/#onhover"
        },
        {
          "name": "Strikethrough",
          "kind": "method",
          "signature": "public Component Strikethrough(bool value = true)",
          "parameters": [
            {
              "name": "value",
              "type": "bool",
              "default": "true"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "Sets strikethrough.",
          "documented": true,
          "url": "/reference/api/ecs/component/#strikethrough"
        },
        {
          "name": "ToJson",
          "kind": "method",
          "signature": "public string ToJson()",
          "returns": {
            "type": "string"
          },
          "summary": "Serialises to the vanilla JSON text component form (what the native layer parses).",
          "documented": true,
          "url": "/reference/api/ecs/component/#tojson"
        },
        {
          "name": "ToPlainText",
          "kind": "method",
          "signature": "public string ToPlainText()",
          "returns": {
            "type": "string"
          },
          "summary": "The text of this component and its children without formatting (translatable components show their key).",
          "documented": true,
          "url": "/reference/api/ecs/component/#toplaintext"
        },
        {
          "name": "ToString",
          "kind": "method",
          "signature": "public override string ToString()",
          "returns": {
            "type": "string"
          },
          "documented": false,
          "url": "/reference/api/ecs/component/#tostring"
        },
        {
          "name": "Tooltip",
          "kind": "method",
          "signature": "public Component Tooltip(Component text)",
          "parameters": [
            {
              "name": "text",
              "type": "Component"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "Shortcut for a text tooltip.",
          "documented": true,
          "url": "/reference/api/ecs/component/#tooltip"
        },
        {
          "name": "Underlined",
          "kind": "method",
          "signature": "public Component Underlined(bool value = true)",
          "parameters": [
            {
              "name": "value",
              "type": "bool",
              "default": "true"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "Sets underlined.",
          "documented": true,
          "url": "/reference/api/ecs/component/#underlined"
        },
        {
          "name": "FromJson",
          "kind": "method",
          "signature": "public static Component FromJson(string json)",
          "static": true,
          "parameters": [
            {
              "name": "json",
              "type": "string"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "Parses the vanilla JSON form (also a bare JSON string).",
          "throws": [
            {
              "type": "System.FormatException",
              "summary": "The text is not a valid component."
            }
          ],
          "documented": true,
          "url": "/reference/api/ecs/component/#fromjson"
        },
        {
          "name": "FromJson",
          "kind": "method",
          "signature": "public static Component FromJson(Utf8String json)",
          "static": true,
          "parameters": [
            {
              "name": "json",
              "type": "Utf8String"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "Parses the vanilla JSON form from engine memory.",
          "documented": true,
          "url": "/reference/api/ecs/component/#fromjson-1"
        },
        {
          "name": "Join",
          "kind": "method",
          "signature": "public static Component Join(params Component[] parts)",
          "static": true,
          "parameters": [
            {
              "name": "parts",
              "type": "Component[]",
              "modifier": "params"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "Concatenates components into one (an empty parent with the parts as children).",
          "documented": true,
          "url": "/reference/api/ecs/component/#join"
        },
        {
          "name": "Join",
          "kind": "method",
          "signature": "public static Component Join(Component separator, IEnumerable<Component> parts)",
          "static": true,
          "parameters": [
            {
              "name": "separator",
              "type": "Component"
            },
            {
              "name": "parts",
              "type": "IEnumerable<Component>"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "Joins with a separator.",
          "documented": true,
          "url": "/reference/api/ecs/component/#join-1"
        },
        {
          "name": "Keybind",
          "kind": "method",
          "signature": "public static Component Keybind(string key)",
          "static": true,
          "parameters": [
            {
              "name": "key",
              "type": "string"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "A component showing the client's key binding (e.g. \"key.jump\").",
          "documented": true,
          "url": "/reference/api/ecs/component/#keybind"
        },
        {
          "name": "Legacy",
          "kind": "method",
          "signature": "public static Component Legacy(string text, char prefix = '&')",
          "static": true,
          "parameters": [
            {
              "name": "text",
              "type": "string"
            },
            {
              "name": "prefix",
              "type": "char",
              "default": "'&'"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "Converts text with `&` colour/format codes (\"&aGreen &lbold\") to a component. `&&` is a literal ampersand, `&#RRGGBB` a custom colour, `&r` resets.",
          "documented": true,
          "url": "/reference/api/ecs/component/#legacy"
        },
        {
          "name": "Parse",
          "kind": "method",
          "signature": "public static Component Parse(string markup)",
          "static": true,
          "parameters": [
            {
              "name": "markup",
              "type": "string"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "Parses MiniMessage-style tags: `<red>`, `<#ff8800>`, `<bold>`, `<italic>`, `<underlined>`, `<strikethrough>`, `<obfuscated>`, `<reset>`, `<click:run_command:/cmd>`, `<hover:show_text:'text'>`, and closing tags `</red>`. Unknown tags are kept as text. Escape a literal `<` as `\\<`.",
          "documented": true,
          "url": "/reference/api/ecs/component/#parse"
        },
        {
          "name": "Score",
          "kind": "method",
          "signature": "public static Component Score(string name, string objective)",
          "static": true,
          "parameters": [
            {
              "name": "name",
              "type": "string",
              "summary": "Score holder name or selector."
            },
            {
              "name": "objective",
              "type": "string",
              "summary": "Objective name."
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "A scoreboard score.",
          "documented": true,
          "url": "/reference/api/ecs/component/#score"
        },
        {
          "name": "Selector",
          "kind": "method",
          "signature": "public static Component Selector(string selector)",
          "static": true,
          "parameters": [
            {
              "name": "selector",
              "type": "string"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "An entity selector (resolved when sent).",
          "documented": true,
          "url": "/reference/api/ecs/component/#selector"
        },
        {
          "name": "Text",
          "kind": "method",
          "signature": "public static Component Text(string text)",
          "static": true,
          "parameters": [
            {
              "name": "text",
              "type": "string",
              "summary": "The text, shown verbatim."
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "A literal text component.",
          "documented": true,
          "url": "/reference/api/ecs/component/#text"
        },
        {
          "name": "Translatable",
          "kind": "method",
          "signature": "public static Component Translatable(string key, params Component[] args)",
          "static": true,
          "parameters": [
            {
              "name": "key",
              "type": "string",
              "summary": "Translation key, e.g. \"chat.type.admin\"."
            },
            {
              "name": "args",
              "type": "Component[]",
              "modifier": "params",
              "summary": "Arguments substituted for %s / %1$s."
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "A translatable component (resolved by the client's language).",
          "documented": true,
          "url": "/reference/api/ecs/component/#translatable"
        },
        {
          "name": "implicit",
          "kind": "operator",
          "signature": "public static implicit operator Component(string text)",
          "static": true,
          "parameters": [
            {
              "name": "text",
              "type": "string"
            }
          ],
          "returns": {
            "type": "Component"
          },
          "summary": "Literal text converts implicitly.",
          "documented": true,
          "url": "/reference/api/ecs/component/#operator-implicit"
        }
      ]
    },
    {
      "name": "HoverEvent",
      "fullName": "Mc.Scripting.Text.HoverEvent",
      "namespace": "Mc.Scripting.Text",
      "kind": "class",
      "category": "chat",
      "categoryLabel": "Chat and text",
      "signature": "public sealed class HoverEvent",
      "summary": "A hover event of a text component.",
      "url": "/reference/api/chat/hoverevent/",
      "members": [
        {
          "name": "ShowEntity",
          "kind": "method",
          "signature": "public static HoverEvent ShowEntity(string entityTypeKey, Uuid uuid, Component? name = null)",
          "static": true,
          "parameters": [
            {
              "name": "entityTypeKey",
              "type": "string"
            },
            {
              "name": "uuid",
              "type": "Uuid"
            },
            {
              "name": "name",
              "type": "Component?",
              "default": "null"
            }
          ],
          "returns": {
            "type": "HoverEvent"
          },
          "summary": "Shows an entity tooltip.",
          "documented": true,
          "url": "/reference/api/chat/hoverevent/#showentity"
        },
        {
          "name": "ShowItem",
          "kind": "method",
          "signature": "public static HoverEvent ShowItem(string itemKey, int count = 1)",
          "static": true,
          "parameters": [
            {
              "name": "itemKey",
              "type": "string"
            },
            {
              "name": "count",
              "type": "int",
              "default": "1"
            }
          ],
          "returns": {
            "type": "HoverEvent"
          },
          "summary": "Shows an item tooltip (item key and count; components are not part of v1).",
          "documented": true,
          "url": "/reference/api/chat/hoverevent/#showitem"
        },
        {
          "name": "ShowText",
          "kind": "method",
          "signature": "public static HoverEvent ShowText(Component text)",
          "static": true,
          "parameters": [
            {
              "name": "text",
              "type": "Component"
            }
          ],
          "returns": {
            "type": "HoverEvent"
          },
          "summary": "Shows a text tooltip.",
          "documented": true,
          "url": "/reference/api/chat/hoverevent/#showtext"
        }
      ]
    },
    {
      "name": "TextColor",
      "fullName": "Mc.Scripting.Text.TextColor",
      "namespace": "Mc.Scripting.Text",
      "kind": "struct",
      "category": "chat",
      "categoryLabel": "Chat and text",
      "signature": "public readonly struct TextColor : IEquatable<TextColor>",
      "interfaces": [
        "IEquatable<TextColor>"
      ],
      "summary": "A named or RGB text colour.",
      "url": "/reference/api/chat/textcolor/",
      "members": [
        {
          "name": "IsSet",
          "kind": "property",
          "signature": "public bool IsSet { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether a colour is set.",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#isset"
        },
        {
          "name": "Rgb",
          "kind": "property",
          "signature": "public int Rgb { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The colour as 0xRRGGBB (0 when unset).",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#rgb"
        },
        {
          "name": "Aqua",
          "kind": "property",
          "signature": "public static TextColor Aqua { get; }",
          "static": true,
          "returns": {
            "type": "TextColor"
          },
          "summary": "Aqua (&b).",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#aqua"
        },
        {
          "name": "Black",
          "kind": "property",
          "signature": "public static TextColor Black { get; }",
          "static": true,
          "returns": {
            "type": "TextColor"
          },
          "summary": "Black (&0).",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#black"
        },
        {
          "name": "Blue",
          "kind": "property",
          "signature": "public static TextColor Blue { get; }",
          "static": true,
          "returns": {
            "type": "TextColor"
          },
          "summary": "Blue (&9).",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#blue"
        },
        {
          "name": "DarkAqua",
          "kind": "property",
          "signature": "public static TextColor DarkAqua { get; }",
          "static": true,
          "returns": {
            "type": "TextColor"
          },
          "summary": "Dark aqua (&3).",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#darkaqua"
        },
        {
          "name": "DarkBlue",
          "kind": "property",
          "signature": "public static TextColor DarkBlue { get; }",
          "static": true,
          "returns": {
            "type": "TextColor"
          },
          "summary": "Dark blue (&1).",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#darkblue"
        },
        {
          "name": "DarkGray",
          "kind": "property",
          "signature": "public static TextColor DarkGray { get; }",
          "static": true,
          "returns": {
            "type": "TextColor"
          },
          "summary": "Dark gray (&8).",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#darkgray"
        },
        {
          "name": "DarkGreen",
          "kind": "property",
          "signature": "public static TextColor DarkGreen { get; }",
          "static": true,
          "returns": {
            "type": "TextColor"
          },
          "summary": "Dark green (&2).",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#darkgreen"
        },
        {
          "name": "DarkPurple",
          "kind": "property",
          "signature": "public static TextColor DarkPurple { get; }",
          "static": true,
          "returns": {
            "type": "TextColor"
          },
          "summary": "Dark purple (&5).",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#darkpurple"
        },
        {
          "name": "DarkRed",
          "kind": "property",
          "signature": "public static TextColor DarkRed { get; }",
          "static": true,
          "returns": {
            "type": "TextColor"
          },
          "summary": "Dark red (&4).",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#darkred"
        },
        {
          "name": "Gold",
          "kind": "property",
          "signature": "public static TextColor Gold { get; }",
          "static": true,
          "returns": {
            "type": "TextColor"
          },
          "summary": "Gold (&6).",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#gold"
        },
        {
          "name": "Gray",
          "kind": "property",
          "signature": "public static TextColor Gray { get; }",
          "static": true,
          "returns": {
            "type": "TextColor"
          },
          "summary": "Gray (&7).",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#gray"
        },
        {
          "name": "Green",
          "kind": "property",
          "signature": "public static TextColor Green { get; }",
          "static": true,
          "returns": {
            "type": "TextColor"
          },
          "summary": "Green (&a).",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#green"
        },
        {
          "name": "LightPurple",
          "kind": "property",
          "signature": "public static TextColor LightPurple { get; }",
          "static": true,
          "returns": {
            "type": "TextColor"
          },
          "summary": "Light purple (&d).",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#lightpurple"
        },
        {
          "name": "None",
          "kind": "property",
          "signature": "public static TextColor None { get; }",
          "static": true,
          "returns": {
            "type": "TextColor"
          },
          "summary": "No colour (inherit).",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#none"
        },
        {
          "name": "Red",
          "kind": "property",
          "signature": "public static TextColor Red { get; }",
          "static": true,
          "returns": {
            "type": "TextColor"
          },
          "summary": "Red (&c).",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#red"
        },
        {
          "name": "White",
          "kind": "property",
          "signature": "public static TextColor White { get; }",
          "static": true,
          "returns": {
            "type": "TextColor"
          },
          "summary": "White (&f).",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#white"
        },
        {
          "name": "Yellow",
          "kind": "property",
          "signature": "public static TextColor Yellow { get; }",
          "static": true,
          "returns": {
            "type": "TextColor"
          },
          "summary": "Yellow (&e).",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#yellow"
        },
        {
          "name": "Equals",
          "kind": "method",
          "signature": "public bool Equals(TextColor other)",
          "parameters": [
            {
              "name": "other",
              "type": "TextColor"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "documented": false,
          "url": "/reference/api/chat/textcolor/#equals"
        },
        {
          "name": "Equals",
          "kind": "method",
          "signature": "public override bool Equals(object? obj)",
          "parameters": [
            {
              "name": "obj",
              "type": "object?"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "documented": false,
          "url": "/reference/api/chat/textcolor/#equals-1"
        },
        {
          "name": "GetHashCode",
          "kind": "method",
          "signature": "public override int GetHashCode()",
          "returns": {
            "type": "int"
          },
          "documented": false,
          "url": "/reference/api/chat/textcolor/#gethashcode"
        },
        {
          "name": "ToString",
          "kind": "method",
          "signature": "public override string ToString()",
          "returns": {
            "type": "string"
          },
          "summary": "The vanilla serialisation: a colour name for the 16 named colours, \"#RRGGBB\" otherwise.",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#tostring"
        },
        {
          "name": "FromRgb",
          "kind": "method",
          "signature": "public static TextColor FromRgb(int rgb)",
          "static": true,
          "parameters": [
            {
              "name": "rgb",
              "type": "int",
              "summary": "0xRRGGBB."
            }
          ],
          "returns": {
            "type": "TextColor"
          },
          "summary": "A custom 24-bit colour.",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#fromrgb"
        },
        {
          "name": "Parse",
          "kind": "method",
          "signature": "public static TextColor Parse(string text)",
          "static": true,
          "parameters": [
            {
              "name": "text",
              "type": "string"
            }
          ],
          "returns": {
            "type": "TextColor",
            "summary": "The colour, or `TextColor.None` when the text is not a colour."
          },
          "summary": "Parses a vanilla colour name (\"red\") or \"#RRGGBB\".",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#parse"
        },
        {
          "name": "!=",
          "kind": "operator",
          "signature": "public static bool operator !=(TextColor a, TextColor b)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "TextColor"
            },
            {
              "name": "b",
              "type": "TextColor"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Inequality.",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#operator-"
        },
        {
          "name": "==",
          "kind": "operator",
          "signature": "public static bool operator ==(TextColor a, TextColor b)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "TextColor"
            },
            {
              "name": "b",
              "type": "TextColor"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Equality.",
          "documented": true,
          "url": "/reference/api/chat/textcolor/#operator--1"
        }
      ]
    },
    {
      "name": "TickAwaitable",
      "fullName": "Mc.Scripting.TickAwaitable",
      "namespace": "Mc.Scripting",
      "kind": "struct",
      "category": "scheduler",
      "categoryLabel": "Scheduler and threading",
      "signature": "public readonly struct TickAwaitable : ICriticalNotifyCompletion, INotifyCompletion",
      "interfaces": [
        "ICriticalNotifyCompletion",
        "INotifyCompletion"
      ],
      "summary": "The awaitable returned by `Scheduler.ToTick` / `Scheduler.ToAsync`.",
      "url": "/reference/api/scheduler/tickawaitable/",
      "members": [
        {
          "name": "IsCompleted",
          "kind": "property",
          "signature": "public bool IsCompleted { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Awaiter protocol: already on the target thread means no hop.",
          "documented": true,
          "url": "/reference/api/scheduler/tickawaitable/#iscompleted"
        },
        {
          "name": "GetAwaiter",
          "kind": "method",
          "signature": "public TickAwaitable GetAwaiter()",
          "returns": {
            "type": "TickAwaitable",
            "summary": "This awaiter."
          },
          "summary": "Awaiter protocol.",
          "documented": true,
          "url": "/reference/api/scheduler/tickawaitable/#getawaiter"
        },
        {
          "name": "GetResult",
          "kind": "method",
          "signature": "public void GetResult()",
          "summary": "Awaiter protocol.",
          "documented": true,
          "url": "/reference/api/scheduler/tickawaitable/#getresult"
        },
        {
          "name": "OnCompleted",
          "kind": "method",
          "signature": "public void OnCompleted(Action continuation)",
          "parameters": [
            {
              "name": "continuation",
              "type": "Action",
              "summary": "The continuation."
            }
          ],
          "summary": "Awaiter protocol.",
          "documented": true,
          "url": "/reference/api/scheduler/tickawaitable/#oncompleted"
        },
        {
          "name": "UnsafeOnCompleted",
          "kind": "method",
          "signature": "public void UnsafeOnCompleted(Action continuation)",
          "parameters": [
            {
              "name": "continuation",
              "type": "Action",
              "summary": "The continuation."
            }
          ],
          "summary": "Awaiter protocol.",
          "documented": true,
          "url": "/reference/api/scheduler/tickawaitable/#unsafeoncompleted"
        }
      ]
    },
    {
      "name": "TickTimes",
      "fullName": "Mc.Scripting.TickTimes",
      "namespace": "Mc.Scripting",
      "kind": "struct",
      "category": "server",
      "categoryLabel": "Server, HTTP and logging",
      "signature": "public readonly struct TickTimes : IEquatable<TickTimes>",
      "interfaces": [
        "IEquatable<TickTimes>"
      ],
      "summary": "The engine's tick time over a window of ticks (`Server.TickTimes`): average (MSPT), max, p95 and p50 in milliseconds, the ticks per second over the window's length, and the last tick.",
      "url": "/reference/api/server/ticktimes/",
      "members": [
        {
          "name": "TickTimes",
          "kind": "ctor",
          "signature": "public TickTimes(double AverageMs, double MaxMs, double P95Ms, double P50Ms, double Tps, double LastMs)",
          "parameters": [
            {
              "name": "AverageMs",
              "type": "double"
            },
            {
              "name": "MaxMs",
              "type": "double"
            },
            {
              "name": "P95Ms",
              "type": "double"
            },
            {
              "name": "P50Ms",
              "type": "double"
            },
            {
              "name": "Tps",
              "type": "double"
            },
            {
              "name": "LastMs",
              "type": "double"
            }
          ],
          "summary": "The engine's tick time over a window of ticks (`Server.TickTimes`): average (MSPT), max, p95 and p50 in milliseconds, the ticks per second over the window's length, and the last tick.",
          "documented": true,
          "url": "/reference/api/server/ticktimes/#constructor"
        },
        {
          "name": "AverageMs",
          "kind": "property",
          "signature": "public double AverageMs { get; init; }",
          "returns": {
            "type": "double"
          },
          "documented": false,
          "url": "/reference/api/server/ticktimes/#averagems"
        },
        {
          "name": "LastMs",
          "kind": "property",
          "signature": "public double LastMs { get; init; }",
          "returns": {
            "type": "double"
          },
          "documented": false,
          "url": "/reference/api/server/ticktimes/#lastms"
        },
        {
          "name": "MaxMs",
          "kind": "property",
          "signature": "public double MaxMs { get; init; }",
          "returns": {
            "type": "double"
          },
          "documented": false,
          "url": "/reference/api/server/ticktimes/#maxms"
        },
        {
          "name": "P50Ms",
          "kind": "property",
          "signature": "public double P50Ms { get; init; }",
          "returns": {
            "type": "double"
          },
          "documented": false,
          "url": "/reference/api/server/ticktimes/#p50ms"
        },
        {
          "name": "P95Ms",
          "kind": "property",
          "signature": "public double P95Ms { get; init; }",
          "returns": {
            "type": "double"
          },
          "documented": false,
          "url": "/reference/api/server/ticktimes/#p95ms"
        },
        {
          "name": "Tps",
          "kind": "property",
          "signature": "public double Tps { get; init; }",
          "returns": {
            "type": "double"
          },
          "documented": false,
          "url": "/reference/api/server/ticktimes/#tps"
        }
      ]
    },
    {
      "name": "TimeSkipReason",
      "fullName": "Mc.Scripting.TimeSkipReason",
      "namespace": "Mc.Scripting",
      "kind": "enum",
      "category": "events",
      "categoryLabel": "Events (infrastructure)",
      "signature": "public enum TimeSkipReason : byte",
      "summary": "Why the day time jumped.",
      "url": "/reference/api/events/timeskipreason/",
      "members": [
        {
          "name": "Commands",
          "kind": "enumMember",
          "signature": "Commands = 0",
          "value": "0",
          "summary": "/time set or /time add.",
          "documented": true,
          "url": "/reference/api/events/timeskipreason/#commands"
        },
        {
          "name": "NightSkip",
          "kind": "enumMember",
          "signature": "NightSkip = 1",
          "value": "1",
          "summary": "Players slept through the night.",
          "documented": true,
          "url": "/reference/api/events/timeskipreason/#nightskip"
        },
        {
          "name": "Custom",
          "kind": "enumMember",
          "signature": "Custom = 2",
          "value": "2",
          "summary": "A plugin.",
          "documented": true,
          "url": "/reference/api/events/timeskipreason/#custom"
        }
      ]
    },
    {
      "name": "TitleTimes",
      "fullName": "Mc.Scripting.TitleTimes",
      "namespace": "Mc.Scripting",
      "kind": "struct",
      "category": "display",
      "categoryLabel": "Scoreboards, boss bars, tab list",
      "signature": "public readonly struct TitleTimes : IEquatable<TitleTimes>",
      "interfaces": [
        "IEquatable<TitleTimes>"
      ],
      "summary": "The timings of a title, in ticks (20 per second).",
      "url": "/reference/api/display/titletimes/",
      "members": [
        {
          "name": "TitleTimes",
          "kind": "ctor",
          "signature": "public TitleTimes(int FadeIn, int Stay, int FadeOut)",
          "parameters": [
            {
              "name": "FadeIn",
              "type": "int",
              "summary": "Time to fade in."
            },
            {
              "name": "Stay",
              "type": "int",
              "summary": "Time on screen."
            },
            {
              "name": "FadeOut",
              "type": "int",
              "summary": "Time to fade out."
            }
          ],
          "summary": "The timings of a title, in ticks (20 per second).",
          "documented": true,
          "url": "/reference/api/display/titletimes/#constructor"
        },
        {
          "name": "FadeIn",
          "kind": "property",
          "signature": "public int FadeIn { get; init; }",
          "returns": {
            "type": "int"
          },
          "summary": "Time to fade in.",
          "documented": true,
          "url": "/reference/api/display/titletimes/#fadein"
        },
        {
          "name": "FadeOut",
          "kind": "property",
          "signature": "public int FadeOut { get; init; }",
          "returns": {
            "type": "int"
          },
          "summary": "Time to fade out.",
          "documented": true,
          "url": "/reference/api/display/titletimes/#fadeout"
        },
        {
          "name": "Stay",
          "kind": "property",
          "signature": "public int Stay { get; init; }",
          "returns": {
            "type": "int"
          },
          "summary": "Time on screen.",
          "documented": true,
          "url": "/reference/api/display/titletimes/#stay"
        },
        {
          "name": "Default",
          "kind": "property",
          "signature": "public static TitleTimes Default { get; }",
          "static": true,
          "returns": {
            "type": "TitleTimes"
          },
          "summary": "The vanilla defaults: 0.5 s in, 3.5 s on screen, 1 s out.",
          "documented": true,
          "url": "/reference/api/display/titletimes/#default"
        },
        {
          "name": "From",
          "kind": "method",
          "signature": "public static TitleTimes From(TimeSpan fadeIn, TimeSpan stay, TimeSpan fadeOut)",
          "static": true,
          "parameters": [
            {
              "name": "fadeIn",
              "type": "TimeSpan",
              "summary": "Fade in."
            },
            {
              "name": "stay",
              "type": "TimeSpan",
              "summary": "On screen."
            },
            {
              "name": "fadeOut",
              "type": "TimeSpan",
              "summary": "Fade out."
            }
          ],
          "returns": {
            "type": "TitleTimes"
          },
          "summary": "Creates timings from durations.",
          "documented": true,
          "url": "/reference/api/display/titletimes/#from"
        }
      ]
    },
    {
      "name": "Utf8String",
      "fullName": "Mc.Scripting.Utf8String",
      "namespace": "Mc.Scripting",
      "kind": "struct",
      "category": "primitives",
      "categoryLabel": "Primitives",
      "signature": "public readonly ref struct Utf8String",
      "summary": "Borrowed UTF-8 string (McStr). Only valid during the call/dispatch that provided it: call `Utf8String.ToString` to keep a copy.",
      "remarks": "Event string fields (`Message`, `Username`, ...) are this type: borrowed UTF-8 memory owned by the engine. Only `ToString()` and `Contains()` allocate.",
      "examples": [
        "```csharp\nEvents.On((ref PlayerChatEvent e) =>\n{\n    if (e.Message.IsEmpty) return;                       // no allocation\n    if (e.Message.EqualsAscii(\"!help\"u8)) { /* ... */ }  // byte compare, no allocation\n    string copy = e.Message.ToString();                  // allocates; safe to keep\n});\n```"
      ],
      "url": "/reference/api/primitives/utf8string/",
      "members": [
        {
          "name": "Utf8String",
          "kind": "ctor",
          "signature": "public Utf8String(byte* data, long size)",
          "parameters": [
            {
              "name": "data",
              "type": "byte*"
            },
            {
              "name": "size",
              "type": "long"
            }
          ],
          "summary": "Wraps native memory (the engine does this; plugins receive these in events).",
          "documented": true,
          "url": "/reference/api/primitives/utf8string/#constructor"
        },
        {
          "name": "Bytes",
          "kind": "property",
          "signature": "public ReadOnlySpan<byte> Bytes { get; }",
          "returns": {
            "type": "ReadOnlySpan<byte>"
          },
          "summary": "The UTF-8 bytes (borrowed).",
          "documented": true,
          "url": "/reference/api/primitives/utf8string/#bytes"
        },
        {
          "name": "IsEmpty",
          "kind": "property",
          "signature": "public bool IsEmpty { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the string is empty.",
          "documented": true,
          "url": "/reference/api/primitives/utf8string/#isempty"
        },
        {
          "name": "Length",
          "kind": "property",
          "signature": "public int Length { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "Length in bytes.",
          "documented": true,
          "url": "/reference/api/primitives/utf8string/#length"
        },
        {
          "name": "Contains",
          "kind": "method",
          "signature": "public bool Contains(string text, StringComparison comparison = StringComparison.Ordinal)",
          "parameters": [
            {
              "name": "text",
              "type": "string"
            },
            {
              "name": "comparison",
              "type": "StringComparison",
              "default": "StringComparison.Ordinal"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the decoded text contains `text` (allocates).",
          "documented": true,
          "url": "/reference/api/primitives/utf8string/#contains"
        },
        {
          "name": "EqualsAscii",
          "kind": "method",
          "signature": "public bool EqualsAscii(ReadOnlySpan<byte> utf8)",
          "parameters": [
            {
              "name": "utf8",
              "type": "ReadOnlySpan<byte>"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Byte-wise equality with an ASCII/UTF-8 literal (no allocation).",
          "documented": true,
          "url": "/reference/api/primitives/utf8string/#equalsascii"
        },
        {
          "name": "ToString",
          "kind": "method",
          "signature": "public override string ToString()",
          "returns": {
            "type": "string"
          },
          "summary": "Copies the text into a managed string.",
          "documented": true,
          "url": "/reference/api/primitives/utf8string/#tostring"
        }
      ]
    },
    {
      "name": "Uuid",
      "fullName": "Mc.Scripting.Uuid",
      "namespace": "Mc.Scripting",
      "kind": "struct",
      "category": "primitives",
      "categoryLabel": "Primitives",
      "signature": "public readonly struct Uuid : IEquatable<Uuid>",
      "interfaces": [
        "IEquatable<Uuid>"
      ],
      "summary": "Java-style UUID (two big-endian halves).",
      "url": "/reference/api/primitives/uuid/",
      "members": [
        {
          "name": "Uuid",
          "kind": "ctor",
          "signature": "public Uuid(ulong most, ulong least)",
          "parameters": [
            {
              "name": "most",
              "type": "ulong"
            },
            {
              "name": "least",
              "type": "ulong"
            }
          ],
          "summary": "Creates a uuid from its two halves.",
          "documented": true,
          "url": "/reference/api/primitives/uuid/#constructor"
        },
        {
          "name": "Least",
          "kind": "field",
          "signature": "public readonly ulong Least;",
          "returns": {
            "type": "ulong"
          },
          "summary": "Least significant 64 bits.",
          "documented": true,
          "url": "/reference/api/primitives/uuid/#least"
        },
        {
          "name": "Most",
          "kind": "field",
          "signature": "public readonly ulong Most;",
          "returns": {
            "type": "ulong"
          },
          "summary": "Most significant 64 bits.",
          "documented": true,
          "url": "/reference/api/primitives/uuid/#most"
        },
        {
          "name": "Equals",
          "kind": "method",
          "signature": "public bool Equals(Uuid other)",
          "parameters": [
            {
              "name": "other",
              "type": "Uuid"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Equality.",
          "documented": true,
          "url": "/reference/api/primitives/uuid/#equals"
        },
        {
          "name": "Equals",
          "kind": "method",
          "signature": "public override bool Equals(object? obj)",
          "parameters": [
            {
              "name": "obj",
              "type": "object?"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Equality.",
          "documented": true,
          "url": "/reference/api/primitives/uuid/#equals-1"
        },
        {
          "name": "GetHashCode",
          "kind": "method",
          "signature": "public override int GetHashCode()",
          "returns": {
            "type": "int"
          },
          "summary": "Hash code.",
          "documented": true,
          "url": "/reference/api/primitives/uuid/#gethashcode"
        },
        {
          "name": "ToString",
          "kind": "method",
          "signature": "public override string ToString()",
          "returns": {
            "type": "string"
          },
          "summary": "The canonical 8-4-4-4-12 text form.",
          "documented": true,
          "url": "/reference/api/primitives/uuid/#tostring"
        },
        {
          "name": "!=",
          "kind": "operator",
          "signature": "public static bool operator !=(Uuid a, Uuid b)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "Uuid"
            },
            {
              "name": "b",
              "type": "Uuid"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Inequality.",
          "documented": true,
          "url": "/reference/api/primitives/uuid/#operator-"
        },
        {
          "name": "==",
          "kind": "operator",
          "signature": "public static bool operator ==(Uuid a, Uuid b)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "Uuid"
            },
            {
              "name": "b",
              "type": "Uuid"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Equality.",
          "documented": true,
          "url": "/reference/api/primitives/uuid/#operator--1"
        }
      ]
    },
    {
      "name": "Vec3d",
      "fullName": "Mc.Scripting.Vec3d",
      "namespace": "Mc.Scripting",
      "kind": "struct",
      "category": "primitives",
      "categoryLabel": "Primitives",
      "signature": "public struct Vec3d : IEquatable<Vec3d>",
      "interfaces": [
        "IEquatable<Vec3d>"
      ],
      "summary": "A 3D vector of doubles (positions, velocities).",
      "url": "/reference/api/primitives/vec3d/",
      "members": [
        {
          "name": "Vec3d",
          "kind": "ctor",
          "signature": "public Vec3d(double x, double y, double z)",
          "parameters": [
            {
              "name": "x",
              "type": "double"
            },
            {
              "name": "y",
              "type": "double"
            },
            {
              "name": "z",
              "type": "double"
            }
          ],
          "summary": "Creates a vector.",
          "documented": true,
          "url": "/reference/api/primitives/vec3d/#constructor"
        },
        {
          "name": "X",
          "kind": "field",
          "signature": "public double X;",
          "returns": {
            "type": "double"
          },
          "summary": "Components.",
          "documented": true,
          "url": "/reference/api/primitives/vec3d/#x"
        },
        {
          "name": "Y",
          "kind": "field",
          "signature": "public double Y;",
          "returns": {
            "type": "double"
          },
          "summary": "Components.",
          "documented": true,
          "url": "/reference/api/primitives/vec3d/#y"
        },
        {
          "name": "Z",
          "kind": "field",
          "signature": "public double Z;",
          "returns": {
            "type": "double"
          },
          "summary": "Components.",
          "documented": true,
          "url": "/reference/api/primitives/vec3d/#z"
        },
        {
          "name": "Length",
          "kind": "property",
          "signature": "public double Length { get; }",
          "returns": {
            "type": "double"
          },
          "summary": "The length of the vector.",
          "documented": true,
          "url": "/reference/api/primitives/vec3d/#length"
        },
        {
          "name": "Zero",
          "kind": "property",
          "signature": "public static Vec3d Zero { get; }",
          "static": true,
          "returns": {
            "type": "Vec3d"
          },
          "summary": "The zero vector.",
          "documented": true,
          "url": "/reference/api/primitives/vec3d/#zero"
        },
        {
          "name": "DistanceTo",
          "kind": "method",
          "signature": "public double DistanceTo(Vec3d other)",
          "parameters": [
            {
              "name": "other",
              "type": "Vec3d",
              "summary": "The other point."
            }
          ],
          "returns": {
            "type": "double"
          },
          "summary": "The distance to another point.",
          "documented": true,
          "url": "/reference/api/primitives/vec3d/#distanceto"
        },
        {
          "name": "Equals",
          "kind": "method",
          "signature": "public bool Equals(Vec3d o)",
          "parameters": [
            {
              "name": "o",
              "type": "Vec3d"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Equality.",
          "documented": true,
          "url": "/reference/api/primitives/vec3d/#equals"
        },
        {
          "name": "Equals",
          "kind": "method",
          "signature": "public override bool Equals(object? obj)",
          "parameters": [
            {
              "name": "obj",
              "type": "object?"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Equality.",
          "documented": true,
          "url": "/reference/api/primitives/vec3d/#equals-1"
        },
        {
          "name": "GetHashCode",
          "kind": "method",
          "signature": "public override int GetHashCode()",
          "returns": {
            "type": "int"
          },
          "summary": "Hash code.",
          "documented": true,
          "url": "/reference/api/primitives/vec3d/#gethashcode"
        },
        {
          "name": "ToString",
          "kind": "method",
          "signature": "public override string ToString()",
          "returns": {
            "type": "string"
          },
          "summary": "Text form.",
          "documented": true,
          "url": "/reference/api/primitives/vec3d/#tostring"
        },
        {
          "name": "!=",
          "kind": "operator",
          "signature": "public static bool operator !=(Vec3d a, Vec3d b)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "Vec3d"
            },
            {
              "name": "b",
              "type": "Vec3d"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Inequality.",
          "documented": true,
          "url": "/reference/api/primitives/vec3d/#operator-"
        },
        {
          "name": "*",
          "kind": "operator",
          "signature": "public static Vec3d operator *(Vec3d a, double s)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "Vec3d"
            },
            {
              "name": "s",
              "type": "double"
            }
          ],
          "returns": {
            "type": "Vec3d"
          },
          "summary": "Scales the vector.",
          "documented": true,
          "url": "/reference/api/primitives/vec3d/#operator--1"
        },
        {
          "name": "+",
          "kind": "operator",
          "signature": "public static Vec3d operator +(Vec3d a, Vec3d b)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "Vec3d"
            },
            {
              "name": "b",
              "type": "Vec3d"
            }
          ],
          "returns": {
            "type": "Vec3d"
          },
          "summary": "Component-wise sum.",
          "documented": true,
          "url": "/reference/api/primitives/vec3d/#operator--2"
        },
        {
          "name": "-",
          "kind": "operator",
          "signature": "public static Vec3d operator -(Vec3d a, Vec3d b)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "Vec3d"
            },
            {
              "name": "b",
              "type": "Vec3d"
            }
          ],
          "returns": {
            "type": "Vec3d"
          },
          "summary": "Component-wise difference.",
          "documented": true,
          "url": "/reference/api/primitives/vec3d/#operator--"
        },
        {
          "name": "==",
          "kind": "operator",
          "signature": "public static bool operator ==(Vec3d a, Vec3d b)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "Vec3d"
            },
            {
              "name": "b",
              "type": "Vec3d"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Equality.",
          "documented": true,
          "url": "/reference/api/primitives/vec3d/#operator--3"
        }
      ]
    },
    {
      "name": "VersionConstraint",
      "fullName": "Mc.Scripting.VersionConstraint",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "plugins",
      "categoryLabel": "Plugins and lifecycle",
      "signature": "public static class VersionConstraint",
      "summary": "Compares dotted versions against constraints (`>=`, `>`, `=`, `<`, `<=`, `^` = same major and at least).",
      "url": "/reference/api/plugins/versionconstraint/",
      "members": [
        {
          "name": "Satisfies",
          "kind": "method",
          "signature": "public static bool Satisfies(string? constraint, string version)",
          "static": true,
          "parameters": [
            {
              "name": "constraint",
              "type": "string?",
              "summary": "The constraint, null or empty for any."
            },
            {
              "name": "version",
              "type": "string",
              "summary": "The version text (a pre-release suffix after '-' is ignored)."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when satisfied; an unparsable version satisfies only an absent constraint."
          },
          "summary": "Whether a version satisfies a constraint.",
          "documented": true,
          "url": "/reference/api/plugins/versionconstraint/#satisfies"
        }
      ]
    },
    {
      "name": "BlockState",
      "fullName": "Mc.Scripting.Worlds.BlockState",
      "namespace": "Mc.Scripting.Worlds",
      "kind": "struct",
      "category": "worlds",
      "categoryLabel": "Worlds and blocks",
      "signature": "public readonly struct BlockState : IEquatable<BlockState>",
      "interfaces": [
        "IEquatable<BlockState>"
      ],
      "summary": "A block state: a block plus its properties, as the numeric id of the global palette. Blittable.",
      "url": "/reference/api/worlds/blockstate/",
      "members": [
        {
          "name": "BlockState",
          "kind": "ctor",
          "signature": "public BlockState(uint id)",
          "parameters": [
            {
              "name": "id",
              "type": "uint",
              "summary": "The global palette id."
            }
          ],
          "summary": "Wraps a state id.",
          "documented": true,
          "url": "/reference/api/worlds/blockstate/#constructor"
        },
        {
          "name": "Id",
          "kind": "field",
          "signature": "public readonly uint Id;",
          "returns": {
            "type": "uint"
          },
          "summary": "The numeric id in the vanilla block state registry (0 = air).",
          "documented": true,
          "url": "/reference/api/worlds/blockstate/#id"
        },
        {
          "name": "BlockKey",
          "kind": "property",
          "signature": "public string BlockKey { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The block key without properties (\"minecraft:oak_stairs\").",
          "documented": true,
          "url": "/reference/api/worlds/blockstate/#blockkey"
        },
        {
          "name": "IsAir",
          "kind": "property",
          "signature": "public bool IsAir { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether this is the air block.",
          "documented": true,
          "url": "/reference/api/worlds/blockstate/#isair"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public string Key { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The state as text, e.g. \"minecraft:oak_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]\".",
          "documented": true,
          "url": "/reference/api/worlds/blockstate/#key"
        },
        {
          "name": "Air",
          "kind": "property",
          "signature": "public static BlockState Air { get; }",
          "static": true,
          "returns": {
            "type": "BlockState"
          },
          "summary": "Air (id 0).",
          "documented": true,
          "url": "/reference/api/worlds/blockstate/#air"
        },
        {
          "name": "Equals",
          "kind": "method",
          "signature": "public bool Equals(BlockState other)",
          "parameters": [
            {
              "name": "other",
              "type": "BlockState"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "documented": false,
          "url": "/reference/api/worlds/blockstate/#equals"
        },
        {
          "name": "Equals",
          "kind": "method",
          "signature": "public override bool Equals(object? obj)",
          "parameters": [
            {
              "name": "obj",
              "type": "object?"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "documented": false,
          "url": "/reference/api/worlds/blockstate/#equals-1"
        },
        {
          "name": "GetHashCode",
          "kind": "method",
          "signature": "public override int GetHashCode()",
          "returns": {
            "type": "int"
          },
          "documented": false,
          "url": "/reference/api/worlds/blockstate/#gethashcode"
        },
        {
          "name": "ToString",
          "kind": "method",
          "signature": "public override string ToString()",
          "returns": {
            "type": "string"
          },
          "documented": false,
          "url": "/reference/api/worlds/blockstate/#tostring"
        },
        {
          "name": "Parse",
          "kind": "method",
          "signature": "public static BlockState Parse(string text)",
          "static": true,
          "parameters": [
            {
              "name": "text",
              "type": "string",
              "summary": "The block state text."
            }
          ],
          "returns": {
            "type": "BlockState",
            "summary": "The state."
          },
          "summary": "Parses \"minecraft:stone\" or \"minecraft:oak_stairs[facing=north]\" (missing properties take the block's defaults).",
          "throws": [
            {
              "type": "System.FormatException",
              "summary": "The text names no known block state."
            }
          ],
          "documented": true,
          "url": "/reference/api/worlds/blockstate/#parse"
        },
        {
          "name": "TryParse",
          "kind": "method",
          "signature": "public static bool TryParse(string text, out BlockState state)",
          "static": true,
          "parameters": [
            {
              "name": "text",
              "type": "string",
              "summary": "The text."
            },
            {
              "name": "state",
              "type": "BlockState",
              "modifier": "out",
              "summary": "The state when parsing succeeded."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "Whether the text named a known block state."
          },
          "summary": "Parses a block state text.",
          "documented": true,
          "url": "/reference/api/worlds/blockstate/#tryparse"
        },
        {
          "name": "!=",
          "kind": "operator",
          "signature": "public static bool operator !=(BlockState a, BlockState b)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "BlockState"
            },
            {
              "name": "b",
              "type": "BlockState"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Inequality.",
          "documented": true,
          "url": "/reference/api/worlds/blockstate/#operator-"
        },
        {
          "name": "==",
          "kind": "operator",
          "signature": "public static bool operator ==(BlockState a, BlockState b)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "BlockState"
            },
            {
              "name": "b",
              "type": "BlockState"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Equality.",
          "documented": true,
          "url": "/reference/api/worlds/blockstate/#operator--1"
        }
      ]
    },
    {
      "name": "BlockUpdateFlags",
      "fullName": "Mc.Scripting.Worlds.BlockUpdateFlags",
      "namespace": "Mc.Scripting.Worlds",
      "kind": "enum",
      "category": "worlds",
      "categoryLabel": "Worlds and blocks",
      "signature": "public enum BlockUpdateFlags : int",
      "summary": "How a block change is propagated, the update flags of the game's `Level.setBlock` (combine with `|`).",
      "url": "/reference/api/worlds/blockupdateflags/",
      "members": [
        {
          "name": "None",
          "kind": "enumMember",
          "signature": "None = 0",
          "value": "0",
          "summary": "Nothing: the block is written silently (no neighbour update, clients are not told). Rarely what you want.",
          "documented": true,
          "url": "/reference/api/worlds/blockupdateflags/#none"
        },
        {
          "name": "Neighbors",
          "kind": "enumMember",
          "signature": "Neighbors = 1",
          "value": "1",
          "summary": "Notify the neighbouring blocks (`neighborChanged`): redstone, doors, plants that lose their support ...",
          "documented": true,
          "url": "/reference/api/worlds/blockupdateflags/#neighbors"
        },
        {
          "name": "Clients",
          "kind": "enumMember",
          "signature": "Clients = 2",
          "value": "2",
          "summary": "Send the change to the players tracking the chunk.",
          "documented": true,
          "url": "/reference/api/worlds/blockupdateflags/#clients"
        },
        {
          "name": "All",
          "kind": "enumMember",
          "signature": "All = 3",
          "value": "3",
          "summary": "Neighbours and clients: the default of `World.SetBlock`.",
          "documented": true,
          "url": "/reference/api/worlds/blockupdateflags/#all"
        },
        {
          "name": "NoRender",
          "kind": "enumMember",
          "signature": "NoRender = 4",
          "value": "4",
          "summary": "Do not re-render the block on the clients (they still get the data).",
          "documented": true,
          "url": "/reference/api/worlds/blockupdateflags/#norender"
        },
        {
          "name": "Immediate",
          "kind": "enumMember",
          "signature": "Immediate = 8",
          "value": "8",
          "summary": "Run the update on the client immediately instead of at the next frame.",
          "documented": true,
          "url": "/reference/api/worlds/blockupdateflags/#immediate"
        },
        {
          "name": "KnownShape",
          "kind": "enumMember",
          "signature": "KnownShape = 16",
          "value": "16",
          "summary": "The neighbour shape updates (a fence connecting to its neighbours) are skipped: the new state is taken as it is.",
          "documented": true,
          "url": "/reference/api/worlds/blockupdateflags/#knownshape"
        },
        {
          "name": "SuppressDrops",
          "kind": "enumMember",
          "signature": "SuppressDrops = 32",
          "value": "32",
          "summary": "The old block does not drop its items when it is replaced (for example a flower on a block that is removed).",
          "documented": true,
          "url": "/reference/api/worlds/blockupdateflags/#suppressdrops"
        },
        {
          "name": "MovedByPiston",
          "kind": "enumMember",
          "signature": "MovedByPiston = 64",
          "value": "64",
          "summary": "The change is a piston moving the block.",
          "documented": true,
          "url": "/reference/api/worlds/blockupdateflags/#movedbypiston"
        },
        {
          "name": "SkipShapeUpdateOnWire",
          "kind": "enumMember",
          "signature": "SkipShapeUpdateOnWire = 128",
          "value": "128",
          "summary": "Redstone wire: the shape updates of the wire's neighbours are skipped (the game uses it while it recalculates a wire network).",
          "documented": true,
          "url": "/reference/api/worlds/blockupdateflags/#skipshapeupdateonwire"
        },
        {
          "name": "SkipBlockEntitySideEffects",
          "kind": "enumMember",
          "signature": "SkipBlockEntitySideEffects = 256",
          "value": "256",
          "summary": "The old block entity is replaced without its removal side effects (no contents drop).",
          "documented": true,
          "url": "/reference/api/worlds/blockupdateflags/#skipblockentitysideeffects"
        },
        {
          "name": "SkipOnPlace",
          "kind": "enumMember",
          "signature": "SkipOnPlace = 512",
          "value": "512",
          "summary": "The new block's placement logic (`onPlace`) does not run.",
          "documented": true,
          "url": "/reference/api/worlds/blockupdateflags/#skiponplace"
        }
      ]
    },
    {
      "name": "ChunkTicket",
      "fullName": "Mc.Scripting.Worlds.ChunkTicket",
      "namespace": "Mc.Scripting.Worlds",
      "kind": "class",
      "category": "worlds",
      "categoryLabel": "Worlds and blocks",
      "signature": "public sealed class ChunkTicket : IDisposable, IPluginResource",
      "interfaces": [
        "IDisposable",
        "IPluginResource"
      ],
      "summary": "A hold on a chunk: while the ticket exists the chunk is kept loaded (and ticking when a player is near enough, like any chunk). Tickets are counted: the chunk unloads after the last holder released it. Create tickets with `plugin.ChunkTickets`; all of a plugin's tickets are released when it unloads.",
      "url": "/reference/api/worlds/chunkticket/",
      "members": [
        {
          "name": "ChunkX",
          "kind": "property",
          "signature": "public int ChunkX { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The chunk x.",
          "documented": true,
          "url": "/reference/api/worlds/chunkticket/#chunkx"
        },
        {
          "name": "ChunkZ",
          "kind": "property",
          "signature": "public int ChunkZ { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The chunk z.",
          "documented": true,
          "url": "/reference/api/worlds/chunkticket/#chunkz"
        },
        {
          "name": "IsActive",
          "kind": "property",
          "signature": "public bool IsActive { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the ticket is still held.",
          "documented": true,
          "url": "/reference/api/worlds/chunkticket/#isactive"
        },
        {
          "name": "IsLoaded",
          "kind": "property",
          "signature": "public bool IsLoaded { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the chunk has finished loading (loading takes a few ticks, and a chunk that has to be generated takes longer).",
          "documented": true,
          "url": "/reference/api/worlds/chunkticket/#isloaded"
        },
        {
          "name": "World",
          "kind": "property",
          "signature": "public World World { get; }",
          "returns": {
            "type": "World"
          },
          "summary": "The dimension.",
          "documented": true,
          "url": "/reference/api/worlds/chunkticket/#world"
        },
        {
          "name": "Dispose",
          "kind": "method",
          "signature": "public void Dispose()",
          "summary": "Same as `ChunkTicket.Release`.",
          "documented": true,
          "url": "/reference/api/worlds/chunkticket/#dispose"
        },
        {
          "name": "Release",
          "kind": "method",
          "signature": "public void Release()",
          "summary": "Gives the chunk back (it may unload after a grace period). Does nothing a second time.",
          "documented": true,
          "url": "/reference/api/worlds/chunkticket/#release"
        }
      ]
    },
    {
      "name": "ChunkTickets",
      "fullName": "Mc.Scripting.Worlds.ChunkTickets",
      "namespace": "Mc.Scripting.Worlds",
      "kind": "class",
      "category": "worlds",
      "categoryLabel": "Worlds and blocks",
      "signature": "public sealed class ChunkTickets",
      "summary": "Chunk tickets of one plugin (`plugin.ChunkTickets`): they are released automatically when the plugin unloads or reloads.",
      "url": "/reference/api/worlds/chunktickets/",
      "members": [
        {
          "name": "MaxTicketsPerPlugin",
          "kind": "field",
          "signature": "public const int MaxTicketsPerPlugin = 4096;",
          "static": true,
          "returns": {
            "type": "int"
          },
          "summary": "How many chunks one plugin may hold at once (a ticket keeps a chunk in memory and ticking: a runaway loop must not load the whole world).",
          "documented": true,
          "url": "/reference/api/worlds/chunktickets/#maxticketsperplugin"
        },
        {
          "name": "ActiveCount",
          "kind": "property",
          "signature": "public int ActiveCount { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "How many tickets this plugin currently holds.",
          "documented": true,
          "url": "/reference/api/worlds/chunktickets/#activecount"
        },
        {
          "name": "Add",
          "kind": "method",
          "signature": "public ChunkTicket Add(World world, int chunkX, int chunkZ)",
          "parameters": [
            {
              "name": "world",
              "type": "World",
              "summary": "The dimension."
            },
            {
              "name": "chunkX",
              "type": "int",
              "summary": "The chunk x (block x >> 4)."
            },
            {
              "name": "chunkZ",
              "type": "int",
              "summary": "The chunk z."
            }
          ],
          "returns": {
            "type": "ChunkTicket",
            "summary": "The ticket. Check `ChunkTicket.IsLoaded` (or poll `World.IsChunkLoaded`): loading is asynchronous."
          },
          "summary": "Asks for a chunk to be loaded and kept.",
          "throws": [
            {
              "type": "System.InvalidOperationException",
              "summary": "The dimension does not exist, or the plugin already holds `ChunkTickets.MaxTicketsPerPlugin` chunks."
            },
            {
              "type": "System.ArgumentOutOfRangeException",
              "summary": "The chunk is outside the world border (blocks beyond +-30,000,000)."
            }
          ],
          "documented": true,
          "url": "/reference/api/worlds/chunktickets/#add"
        },
        {
          "name": "AddArea",
          "kind": "method",
          "signature": "public IReadOnlyList<ChunkTicket> AddArea(World world, int centerX, int centerZ, int radius)",
          "parameters": [
            {
              "name": "world",
              "type": "World",
              "summary": "The dimension."
            },
            {
              "name": "centerX",
              "type": "int",
              "summary": "The centre chunk x."
            },
            {
              "name": "centerZ",
              "type": "int",
              "summary": "The centre chunk z."
            },
            {
              "name": "radius",
              "type": "int",
              "summary": "The radius in chunks (at most 32)."
            }
          ],
          "returns": {
            "type": "IReadOnlyList<ChunkTicket>",
            "summary": "The tickets, one per chunk."
          },
          "summary": "Asks for the chunks of a square around a centre chunk (`radius` 0 is one chunk, 1 is 3 x 3).",
          "documented": true,
          "url": "/reference/api/worlds/chunktickets/#addarea"
        }
      ]
    },
    {
      "name": "HeightMap",
      "fullName": "Mc.Scripting.Worlds.HeightMap",
      "namespace": "Mc.Scripting.Worlds",
      "kind": "enum",
      "category": "worlds",
      "categoryLabel": "Worlds and blocks",
      "signature": "public enum HeightMap : int",
      "summary": "Which surface `World.HighestBlockY` looks for.",
      "url": "/reference/api/worlds/heightmap/",
      "members": [
        {
          "name": "Surface",
          "kind": "enumMember",
          "signature": "Surface = 0",
          "value": "0",
          "summary": "The highest block that is not air.",
          "documented": true,
          "url": "/reference/api/worlds/heightmap/#surface"
        },
        {
          "name": "OceanFloor",
          "kind": "enumMember",
          "signature": "OceanFloor = 1",
          "value": "1",
          "summary": "The highest block of the sea floor: not air and not water.",
          "documented": true,
          "url": "/reference/api/worlds/heightmap/#oceanfloor"
        },
        {
          "name": "MotionBlocking",
          "kind": "enumMember",
          "signature": "MotionBlocking = 2",
          "value": "2",
          "summary": "The highest block that stops movement or holds a fluid (what rain and the sun see).",
          "documented": true,
          "url": "/reference/api/worlds/heightmap/#motionblocking"
        },
        {
          "name": "MotionBlockingNoLeaves",
          "kind": "enumMember",
          "signature": "MotionBlockingNoLeaves = 3",
          "value": "3",
          "summary": "Like `HeightMap.MotionBlocking` but leaves do not count.",
          "documented": true,
          "url": "/reference/api/worlds/heightmap/#motionblockingnoleaves"
        }
      ]
    },
    {
      "name": "WeatherType",
      "fullName": "Mc.Scripting.Worlds.WeatherType",
      "namespace": "Mc.Scripting.Worlds",
      "kind": "enum",
      "category": "worlds",
      "categoryLabel": "Worlds and blocks",
      "signature": "public enum WeatherType : int",
      "summary": "The weather of a dimension.",
      "url": "/reference/api/worlds/weathertype/",
      "members": [
        {
          "name": "Clear",
          "kind": "enumMember",
          "signature": "Clear = 0",
          "value": "0",
          "summary": "No precipitation.",
          "documented": true,
          "url": "/reference/api/worlds/weathertype/#clear"
        },
        {
          "name": "Rain",
          "kind": "enumMember",
          "signature": "Rain = 1",
          "value": "1",
          "summary": "Rain (snow in cold biomes).",
          "documented": true,
          "url": "/reference/api/worlds/weathertype/#rain"
        },
        {
          "name": "Thunder",
          "kind": "enumMember",
          "signature": "Thunder = 2",
          "value": "2",
          "summary": "Rain with thunderstorms and lightning.",
          "documented": true,
          "url": "/reference/api/worlds/weathertype/#thunder"
        }
      ]
    },
    {
      "name": "World",
      "fullName": "Mc.Scripting.Worlds.World",
      "namespace": "Mc.Scripting.Worlds",
      "kind": "struct",
      "category": "worlds",
      "categoryLabel": "Worlds and blocks",
      "signature": "public readonly struct World : IEquatable<World>",
      "interfaces": [
        "IEquatable<World>"
      ],
      "summary": "A handle to a dimension (overworld, nether, end ...). Blittable. Dimensions live as long as the server. The members are split over several files by topic: blocks and block entities (`World.Blocks.cs`), entities and effects (`World.Entities.cs`), time, weather, spawn and chunk loading (`World.Environment.cs`). Everything here must be called on the tick thread.",
      "url": "/reference/api/worlds/world/",
      "members": [
        {
          "name": "World",
          "kind": "ctor",
          "signature": "public World(int index)",
          "parameters": [
            {
              "name": "index",
              "type": "int",
              "summary": "The slot."
            }
          ],
          "summary": "Wraps a dimension slot.",
          "documented": true,
          "url": "/reference/api/worlds/world/#constructor"
        },
        {
          "name": "Index",
          "kind": "field",
          "signature": "public readonly int Index;",
          "returns": {
            "type": "int"
          },
          "summary": "The dimension slot (overworld 0, nether 1, end 2).",
          "documented": true,
          "url": "/reference/api/worlds/world/#index"
        },
        {
          "name": "DayTime",
          "kind": "property",
          "signature": "public long DayTime { get; set; }",
          "returns": {
            "type": "long"
          },
          "summary": "The time of day clock in ticks since the world was created (a day is 24000 ticks: 0 is sunrise, 6000 noon, 12000 sunset, 18000 midnight). Setting it moves the sun for every player at once and fires `TimeSkipEvent` (reason `Custom`).",
          "throws": [
            {
              "type": "System.InvalidOperationException",
              "summary": "The dimension has no clock (see `World.HasDayTime`)."
            }
          ],
          "documented": true,
          "url": "/reference/api/worlds/world/#daytime"
        },
        {
          "name": "DayTimePaused",
          "kind": "property",
          "signature": "public bool DayTimePaused { get; set; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the day/night clock is stopped (`/time pause`).",
          "documented": true,
          "url": "/reference/api/worlds/world/#daytimepaused"
        },
        {
          "name": "DayTimeRate",
          "kind": "property",
          "signature": "public float DayTimeRate { get; set; }",
          "returns": {
            "type": "float"
          },
          "summary": "How fast the day/night clock runs (1 = normal, 2 = twice as fast).",
          "documented": true,
          "url": "/reference/api/worlds/world/#daytimerate"
        },
        {
          "name": "Entities",
          "kind": "property",
          "signature": "public IReadOnlyList<Entity> Entities { get; }",
          "returns": {
            "type": "IReadOnlyList<Entity>"
          },
          "summary": "Every entity of the dimension (players, mobs, item entities, experience orbs, projectiles, falling blocks ...). A snapshot: entities that spawn or vanish afterwards are not reflected.",
          "documented": true,
          "url": "/reference/api/worlds/world/#entities"
        },
        {
          "name": "GameTime",
          "kind": "property",
          "signature": "public long GameTime { get; }",
          "returns": {
            "type": "long"
          },
          "summary": "The number of ticks the dimension has been running (does not change with `/time set`; 20 per second).",
          "documented": true,
          "url": "/reference/api/worlds/world/#gametime"
        },
        {
          "name": "GeneratedChunkCount",
          "kind": "property",
          "signature": "public long GeneratedChunkCount { get; }",
          "returns": {
            "type": "long"
          },
          "summary": "How many chunks this dimension has generated from scratch since the server started (chunks loaded from disk do not count): sample it twice to get a generation rate.",
          "documented": true,
          "url": "/reference/api/worlds/world/#generatedchunkcount"
        },
        {
          "name": "HasDayTime",
          "kind": "property",
          "signature": "public bool HasDayTime { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether this dimension has a day/night clock. In this server version only the overworld has one; the nether and the end have a fixed time.",
          "documented": true,
          "url": "/reference/api/worlds/world/#hasdaytime"
        },
        {
          "name": "Height",
          "kind": "property",
          "signature": "public int Height { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The build height: the number of block layers (384 in the overworld). The highest block y is `MinY + Height - 1`.",
          "documented": true,
          "url": "/reference/api/worlds/world/#height"
        },
        {
          "name": "IsRaining",
          "kind": "property",
          "signature": "public bool IsRaining { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether it is raining (also during a thunderstorm).",
          "documented": true,
          "url": "/reference/api/worlds/world/#israining"
        },
        {
          "name": "IsThundering",
          "kind": "property",
          "signature": "public bool IsThundering { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether a thunderstorm is going on.",
          "documented": true,
          "url": "/reference/api/worlds/world/#isthundering"
        },
        {
          "name": "IsValid",
          "kind": "property",
          "signature": "public bool IsValid { get; }",
          "returns": {
            "type": "bool"
          },
          "summary": "Whether the slot names a dimension of this server.",
          "documented": true,
          "url": "/reference/api/worlds/world/#isvalid"
        },
        {
          "name": "Key",
          "kind": "property",
          "signature": "public string Key { get; }",
          "returns": {
            "type": "string"
          },
          "summary": "The dimension key, e.g. \"minecraft:overworld\" (empty if the index is invalid).",
          "documented": true,
          "url": "/reference/api/worlds/world/#key"
        },
        {
          "name": "LoadedChunkCount",
          "kind": "property",
          "signature": "public int LoadedChunkCount { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "How many chunks are loaded in this dimension right now.",
          "documented": true,
          "url": "/reference/api/worlds/world/#loadedchunkcount"
        },
        {
          "name": "MaxY",
          "kind": "property",
          "signature": "public int MaxY { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The highest block y of the dimension.",
          "documented": true,
          "url": "/reference/api/worlds/world/#maxy"
        },
        {
          "name": "MinY",
          "kind": "property",
          "signature": "public int MinY { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The lowest block y of the dimension (-64 in the overworld).",
          "documented": true,
          "url": "/reference/api/worlds/world/#miny"
        },
        {
          "name": "Players",
          "kind": "property",
          "signature": "public IReadOnlyList<Player> Players { get; }",
          "returns": {
            "type": "IReadOnlyList<Player>"
          },
          "summary": "The players in the dimension.",
          "documented": true,
          "url": "/reference/api/worlds/world/#players"
        },
        {
          "name": "SeaLevel",
          "kind": "property",
          "signature": "public int SeaLevel { get; }",
          "returns": {
            "type": "int"
          },
          "summary": "The sea level (63 in the overworld).",
          "documented": true,
          "url": "/reference/api/worlds/world/#sealevel"
        },
        {
          "name": "SpawnLocation",
          "kind": "property",
          "signature": "public Location SpawnLocation { get; }",
          "returns": {
            "type": "Location"
          },
          "summary": "The spawn point of the dimension (where new players appear and where players without a bed respawn) and its facing. Only the overworld has a world spawn the game keeps and saves; the other dimensions report a placeholder.",
          "documented": true,
          "url": "/reference/api/worlds/world/#spawnlocation"
        },
        {
          "name": "Weather",
          "kind": "property",
          "signature": "public WeatherType Weather { get; }",
          "returns": {
            "type": "WeatherType"
          },
          "summary": "The weather. Only the overworld has weather in this server version; the other dimensions always report `WeatherType.Clear`.",
          "documented": true,
          "url": "/reference/api/worlds/world/#weather"
        },
        {
          "name": "End",
          "kind": "property",
          "signature": "public static World End { get; }",
          "static": true,
          "returns": {
            "type": "World"
          },
          "summary": "The end.",
          "documented": true,
          "url": "/reference/api/worlds/world/#end"
        },
        {
          "name": "Nether",
          "kind": "property",
          "signature": "public static World Nether { get; }",
          "static": true,
          "returns": {
            "type": "World"
          },
          "summary": "The nether.",
          "documented": true,
          "url": "/reference/api/worlds/world/#nether"
        },
        {
          "name": "Overworld",
          "kind": "property",
          "signature": "public static World Overworld { get; }",
          "static": true,
          "returns": {
            "type": "World"
          },
          "summary": "The overworld.",
          "documented": true,
          "url": "/reference/api/worlds/world/#overworld"
        },
        {
          "name": "AddDayTime",
          "kind": "method",
          "signature": "public void AddDayTime(long ticks)",
          "parameters": [
            {
              "name": "ticks",
              "type": "long",
              "summary": "The amount."
            }
          ],
          "summary": "Moves the day time forward (or back with a negative amount).",
          "throws": [
            {
              "type": "System.InvalidOperationException",
              "summary": "The dimension has no clock."
            }
          ],
          "documented": true,
          "url": "/reference/api/worlds/world/#adddaytime"
        },
        {
          "name": "DestroyBlock",
          "kind": "method",
          "signature": "public bool DestroyBlock(BlockPos pos, bool dropItems = true, Entity breaker = default)",
          "parameters": [
            {
              "name": "pos",
              "type": "BlockPos",
              "summary": "The position."
            },
            {
              "name": "dropItems",
              "type": "bool",
              "default": "true",
              "summary": "Whether the block drops its loot."
            },
            {
              "name": "breaker",
              "type": "Entity",
              "default": "default",
              "summary": "The entity that breaks it (for the loot context), or none."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when a block was destroyed."
          },
          "summary": "Breaks a block the way the game does (`Level.destroyBlock`): the break particles and sound, optionally the loot, and the block becomes air (or its fluid). A block entity's contents drop too.",
          "documented": true,
          "url": "/reference/api/worlds/world/#destroyblock"
        },
        {
          "name": "DropItem",
          "kind": "method",
          "signature": "public Entity DropItem(BlockPos block, ItemStack stack)",
          "parameters": [
            {
              "name": "block",
              "type": "BlockPos",
              "summary": "The block position."
            },
            {
              "name": "stack",
              "type": "ItemStack",
              "summary": "The stack."
            }
          ],
          "returns": {
            "type": "Entity",
            "summary": "The item entity, or `Entity.Null`."
          },
          "summary": "Drops a stack at the centre of a block (the way a broken block drops its loot).",
          "documented": true,
          "url": "/reference/api/worlds/world/#dropitem"
        },
        {
          "name": "DropItem",
          "kind": "method",
          "signature": "public Entity DropItem(Vec3d position, ItemStack stack, bool randomMotion = true)",
          "parameters": [
            {
              "name": "position",
              "type": "Vec3d",
              "summary": "Where the item appears."
            },
            {
              "name": "stack",
              "type": "ItemStack",
              "summary": "The stack (1 up to the stack size)."
            },
            {
              "name": "randomMotion",
              "type": "bool",
              "default": "true",
              "summary": "Whether the item drifts like a block drop (false: it falls straight down)."
            }
          ],
          "returns": {
            "type": "Entity",
            "summary": "The item entity, or `Entity.Null` when the chunk is not loaded, the stack is not valid or a handler cancelled the spawn."
          },
          "summary": "Drops an item entity with the full stack (data components included) at a position, like a broken block's drop: a small random sideways drift and a short pickup delay. `EntitySpawnEvent` fires with reason `Plugin` and can cancel it.",
          "documented": true,
          "url": "/reference/api/worlds/world/#dropitem-1"
        },
        {
          "name": "Equals",
          "kind": "method",
          "signature": "public bool Equals(World other)",
          "parameters": [
            {
              "name": "other",
              "type": "World"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "documented": false,
          "url": "/reference/api/worlds/world/#equals"
        },
        {
          "name": "Equals",
          "kind": "method",
          "signature": "public override bool Equals(object? obj)",
          "parameters": [
            {
              "name": "obj",
              "type": "object?"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "documented": false,
          "url": "/reference/api/worlds/world/#equals-1"
        },
        {
          "name": "Explode",
          "kind": "method",
          "signature": "public bool Explode(Vec3d position, float power, bool setFire = false, bool breakBlocks = true, Entity source = default)",
          "parameters": [
            {
              "name": "position",
              "type": "Vec3d",
              "summary": "The centre."
            },
            {
              "name": "power",
              "type": "float",
              "summary": "The radius-like strength (TNT is 4, a creeper 3, a charged creeper 6; the work grows with its cube, so values above 32 are refused)."
            },
            {
              "name": "setFire",
              "type": "bool",
              "default": "false",
              "summary": "Whether fires start in the explosion's wake."
            },
            {
              "name": "breakBlocks",
              "type": "bool",
              "default": "true",
              "summary": "Whether blocks are destroyed (false: only the entities are affected)."
            },
            {
              "name": "source",
              "type": "Entity",
              "default": "default",
              "summary": "The entity that causes it (excluded from the damage, used as the damage source), or none."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when the explosion happened; false for a power outside 0-32 (exclusive of 0), an unloaded centre or an unknown world."
          },
          "summary": "Creates an explosion like a creeper's: it damages and pushes entities (with exposure and distance falloff), destroys blocks (dropping loot, with decay), optionally lights fires, and the clients get the particles and the sound.",
          "documented": true,
          "url": "/reference/api/worlds/world/#explode"
        },
        {
          "name": "GetBlock",
          "kind": "method",
          "signature": "public BlockState GetBlock(BlockPos pos)",
          "parameters": [
            {
              "name": "pos",
              "type": "BlockPos",
              "summary": "The position."
            }
          ],
          "returns": {
            "type": "BlockState",
            "summary": "The block state."
          },
          "summary": "Reads a block state. A position in an unloaded chunk or outside the build height reads as air (check `World.IsBlockLoaded` to tell); the chunk is not loaded by the read.",
          "documented": true,
          "url": "/reference/api/worlds/world/#getblock"
        },
        {
          "name": "GetBlockEntityData",
          "kind": "method",
          "signature": "public NbtCompound? GetBlockEntityData(BlockPos pos)",
          "parameters": [
            {
              "name": "pos",
              "type": "BlockPos",
              "summary": "The position."
            }
          ],
          "returns": {
            "type": "NbtCompound?",
            "summary": "A copy of the data, or null when there is no block entity (or its chunk is not loaded)."
          },
          "summary": "The data of the block entity at a position (a chest's items, a sign's text, a spawner ...) in the form `/data get block` shows, including the `id` and the position keys.",
          "documented": true,
          "url": "/reference/api/worlds/world/#getblockentitydata"
        },
        {
          "name": "GetHashCode",
          "kind": "method",
          "signature": "public override int GetHashCode()",
          "returns": {
            "type": "int"
          },
          "documented": false,
          "url": "/reference/api/worlds/world/#gethashcode"
        },
        {
          "name": "GetInventory",
          "kind": "method",
          "signature": "public BlockInventory? GetInventory(BlockPos pos)",
          "parameters": [
            {
              "name": "pos",
              "type": "BlockPos",
              "summary": "The block position."
            }
          ],
          "returns": {
            "type": "BlockInventory?",
            "summary": "The inventory, or null when the block has none."
          },
          "summary": "The inventory of the block entity at a position (`BlockInventory.At`).",
          "documented": true,
          "url": "/reference/api/worlds/world/#getinventory"
        },
        {
          "name": "HighestBlockY",
          "kind": "method",
          "signature": "public int HighestBlockY(int x, int z, HeightMap kind = HeightMap.MotionBlocking)",
          "parameters": [
            {
              "name": "x",
              "type": "int",
              "summary": "Block x."
            },
            {
              "name": "z",
              "type": "int",
              "summary": "Block z."
            },
            {
              "name": "kind",
              "type": "HeightMap",
              "default": "HeightMap.MotionBlocking",
              "summary": "Which surface."
            }
          ],
          "returns": {
            "type": "int",
            "summary": "The y of the highest matching block, or `World.MinY` - 1 when the column has none or its chunk is not loaded."
          },
          "summary": "The y of the highest block of a column (read from the chunk's height maps, so it is cheap).",
          "documented": true,
          "url": "/reference/api/worlds/world/#highestblocky"
        },
        {
          "name": "IsBlockLoaded",
          "kind": "method",
          "signature": "public bool IsBlockLoaded(BlockPos pos)",
          "parameters": [
            {
              "name": "pos",
              "type": "BlockPos",
              "summary": "The position."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when `World.GetBlock` returns real data for it."
          },
          "summary": "Whether the block position is inside a loaded chunk and within the build height.",
          "documented": true,
          "url": "/reference/api/worlds/world/#isblockloaded"
        },
        {
          "name": "IsChunkLoaded",
          "kind": "method",
          "signature": "public bool IsChunkLoaded(int chunkX, int chunkZ)",
          "parameters": [
            {
              "name": "chunkX",
              "type": "int",
              "summary": "The chunk x (block x >> 4)."
            },
            {
              "name": "chunkZ",
              "type": "int",
              "summary": "The chunk z."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when loaded."
          },
          "summary": "Whether the chunk is loaded and ready (generated, lit, in memory). Blocks of other chunks read as air and cannot be changed.",
          "documented": true,
          "url": "/reference/api/worlds/world/#ischunkloaded"
        },
        {
          "name": "PlaySound",
          "kind": "method",
          "signature": "public int PlaySound(string sound, Vec3d position, SoundCategory category = SoundCategory.Master, float volume = 1f, float pitch = 1f)",
          "parameters": [
            {
              "name": "sound",
              "type": "string",
              "summary": "The sound id, `\"minecraft:entity.generic.explode\"`, or a sound of a resource pack."
            },
            {
              "name": "position",
              "type": "Vec3d",
              "summary": "Where it comes from."
            },
            {
              "name": "category",
              "type": "SoundCategory",
              "default": "SoundCategory.Master",
              "summary": "The volume slider category."
            },
            {
              "name": "volume",
              "type": "float",
              "default": "1f",
              "summary": "The volume (1 = normal; above 1 carries farther)."
            },
            {
              "name": "pitch",
              "type": "float",
              "default": "1f",
              "summary": "The pitch (1 = normal, 0.5 - 2)."
            }
          ],
          "returns": {
            "type": "int",
            "summary": "How many players received it."
          },
          "summary": "Plays a sound at a position to every player of the dimension who is close enough to hear it (16 blocks, or farther for a volume above 1).",
          "documented": true,
          "url": "/reference/api/worlds/world/#playsound"
        },
        {
          "name": "SetBlock",
          "kind": "method",
          "signature": "public bool SetBlock(BlockPos pos, BlockState state, BlockUpdateFlags flags = BlockUpdateFlags.All)",
          "parameters": [
            {
              "name": "pos",
              "type": "BlockPos",
              "summary": "The position."
            },
            {
              "name": "state",
              "type": "BlockState",
              "summary": "The new state."
            },
            {
              "name": "flags",
              "type": "BlockUpdateFlags",
              "default": "BlockUpdateFlags.All",
              "summary": "What to propagate."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when the block changed; false when the state was already there, the position is outside the build height or its chunk is not loaded (changes to chunks that are not fully loaded are dropped, load them first with a `ChunkTickets` ticket)."
          },
          "summary": "Changes a block, like `/setblock`: the old block entity goes away, the new block's placement logic and the neighbour updates run (per `flags`), the clients are told. No player event fires (this is not a player placing the block); the engine's own block events (a fire spreading, a piston moving) are the ones the block triggers itself.",
          "documented": true,
          "url": "/reference/api/worlds/world/#setblock"
        },
        {
          "name": "SetBlock",
          "kind": "method",
          "signature": "public bool SetBlock(BlockPos pos, string state, BlockUpdateFlags flags = BlockUpdateFlags.All)",
          "parameters": [
            {
              "name": "pos",
              "type": "BlockPos",
              "summary": "The position."
            },
            {
              "name": "state",
              "type": "string",
              "summary": "The block state text."
            },
            {
              "name": "flags",
              "type": "BlockUpdateFlags",
              "default": "BlockUpdateFlags.All",
              "summary": "What to propagate."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "See `World.SetBlock`."
          },
          "summary": "Changes a block to the state parsed from text (`\"minecraft:oak_stairs[facing=north]\"`).",
          "throws": [
            {
              "type": "System.FormatException",
              "summary": "The text names no block state."
            }
          ],
          "documented": true,
          "url": "/reference/api/worlds/world/#setblock-1"
        },
        {
          "name": "SetBlockEntityData",
          "kind": "method",
          "signature": "public bool SetBlockEntityData(BlockPos pos, NbtCompound data, bool merge = true)",
          "parameters": [
            {
              "name": "pos",
              "type": "BlockPos",
              "summary": "The position."
            },
            {
              "name": "data",
              "type": "NbtCompound",
              "summary": "The data."
            },
            {
              "name": "merge",
              "type": "bool",
              "default": "true",
              "summary": "True merges the compound into the existing data (nested compounds merge, other tags are replaced); false replaces all data except what the engine keeps (the type and the position)."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "True when the block entity took the data; false when there is no block entity, it cannot be edited this way or the data is invalid for it."
          },
          "summary": "Changes the data of a block entity, like `/data merge block` (or `/data modify` with the full compound). The clients receive the new data.",
          "documented": true,
          "url": "/reference/api/worlds/world/#setblockentitydata"
        },
        {
          "name": "SetSpawn",
          "kind": "method",
          "signature": "public bool SetSpawn(BlockPos pos, float yaw = 0f, float pitch = 0f)",
          "parameters": [
            {
              "name": "pos",
              "type": "BlockPos",
              "summary": "The block."
            },
            {
              "name": "yaw",
              "type": "float",
              "default": "0f",
              "summary": "The facing of a player who spawns there."
            },
            {
              "name": "pitch",
              "type": "float",
              "default": "0f",
              "summary": "The pitch of a player who spawns there."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "False in the nether and the end: only the overworld has a world spawn."
          },
          "summary": "Changes the spawn point (like `/setworldspawn`; the clients are told the new position of the compass and of the respawn, and it is saved with the world).",
          "documented": true,
          "url": "/reference/api/worlds/world/#setspawn"
        },
        {
          "name": "SetWeather",
          "kind": "method",
          "signature": "public bool SetWeather(WeatherType weather, int? durationTicks = null)",
          "parameters": [
            {
              "name": "weather",
              "type": "WeatherType",
              "summary": "The new weather."
            },
            {
              "name": "durationTicks",
              "type": "int?",
              "default": "null",
              "summary": "How long it lasts before the natural cycle takes over, or null for the vanilla random duration."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "False in dimensions without weather."
          },
          "summary": "Sets the weather like `/weather`. The change reaches the players immediately and fires `WeatherChangeEvent`.",
          "documented": true,
          "url": "/reference/api/worlds/world/#setweather"
        },
        {
          "name": "SpawnEntity",
          "kind": "method",
          "signature": "public Entity SpawnEntity(string type, Vec3d position, NbtCompound? nbt = null, float yaw = 0f, float pitch = 0f)",
          "parameters": [
            {
              "name": "type",
              "type": "string",
              "summary": "The entity type key, `\"minecraft:zombie\"` (the namespace may be left out)."
            },
            {
              "name": "position",
              "type": "Vec3d",
              "summary": "Where to spawn it."
            },
            {
              "name": "nbt",
              "type": "NbtCompound?",
              "default": "null",
              "summary": "Entity data, or null."
            },
            {
              "name": "yaw",
              "type": "float",
              "default": "0f",
              "summary": "The initial yaw in degrees (an NBT `Rotation` overrides it)."
            },
            {
              "name": "pitch",
              "type": "float",
              "default": "0f",
              "summary": "The initial pitch in degrees."
            }
          ],
          "returns": {
            "type": "Entity",
            "summary": "The entity (a handle: check `Entity.IsAlive` before keeping it), or `Entity.Null` when the type is unknown or cannot be spawned here (a type the engine does not simulate yet, the chunk is not loaded, a monster in peaceful, a handler cancelled it)."
          },
          "summary": "Spawns an entity of a type, like `/summon`. Mobs the engine simulates (zombies, cows, creepers ...) get their normal spawn logic: with no NBT their random attributes and equipment are rolled; with NBT the data is applied as given (`{Health:5f,CustomName:'\"Bob\"'}`). Item entities (`minecraft:item` with `Item:{id:\"minecraft:diamond\",count:3}`) and experience orbs (`minecraft:experience_orb` with `Value`) are supported too. The spawn fires `EntitySpawnEvent` (reason `Plugin`) where the entity kind has that event, and a handler may cancel it.",
          "documented": true,
          "url": "/reference/api/worlds/world/#spawnentity"
        },
        {
          "name": "SpawnParticle",
          "kind": "method",
          "signature": "public int SpawnParticle(string particle, Vec3d position, int count = 1, Vec3d offset = default, float speed = 0f, bool force = false)",
          "parameters": [
            {
              "name": "particle",
              "type": "string",
              "summary": "The particle as the `/particle` command writes it: `\"flame\"`, `\"dust 1 0 0 1\"`, `\"block minecraft:stone\"`."
            },
            {
              "name": "position",
              "type": "Vec3d",
              "summary": "The centre."
            },
            {
              "name": "count",
              "type": "int",
              "default": "1",
              "summary": "How many (0: a single particle whose motion is the offset and the speed)."
            },
            {
              "name": "offset",
              "type": "Vec3d",
              "default": "default",
              "summary": "The random spread on each axis."
            },
            {
              "name": "speed",
              "type": "float",
              "default": "0f",
              "summary": "The particle speed."
            },
            {
              "name": "force",
              "type": "bool",
              "default": "false",
              "summary": "Show it even when the client's particle setting is minimal."
            }
          ],
          "returns": {
            "type": "int",
            "summary": "How many players received it; 0 when the particle text is invalid."
          },
          "summary": "Shows a particle effect at a position to the players of the dimension within 32 blocks (512 with `force`).",
          "documented": true,
          "url": "/reference/api/worlds/world/#spawnparticle"
        },
        {
          "name": "ToString",
          "kind": "method",
          "signature": "public override string ToString()",
          "returns": {
            "type": "string"
          },
          "documented": false,
          "url": "/reference/api/worlds/world/#tostring"
        },
        {
          "name": "TryGetBlock",
          "kind": "method",
          "signature": "public bool TryGetBlock(BlockPos pos, out BlockState state)",
          "parameters": [
            {
              "name": "pos",
              "type": "BlockPos",
              "summary": "The position."
            },
            {
              "name": "state",
              "type": "BlockState",
              "modifier": "out",
              "summary": "The state, air when the position is not readable."
            }
          ],
          "returns": {
            "type": "bool",
            "summary": "False for an unloaded chunk or a position outside the build height."
          },
          "summary": "Reads a block state, saying whether the position was readable.",
          "documented": true,
          "url": "/reference/api/worlds/world/#trygetblock"
        },
        {
          "name": "!=",
          "kind": "operator",
          "signature": "public static bool operator !=(World a, World b)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "World"
            },
            {
              "name": "b",
              "type": "World"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Inequality.",
          "documented": true,
          "url": "/reference/api/worlds/world/#operator-"
        },
        {
          "name": "==",
          "kind": "operator",
          "signature": "public static bool operator ==(World a, World b)",
          "static": true,
          "parameters": [
            {
              "name": "a",
              "type": "World"
            },
            {
              "name": "b",
              "type": "World"
            }
          ],
          "returns": {
            "type": "bool"
          },
          "summary": "Equality.",
          "documented": true,
          "url": "/reference/api/worlds/world/#operator--1"
        }
      ]
    },
    {
      "name": "WrongThreadException",
      "fullName": "Mc.Scripting.WrongThreadException",
      "namespace": "Mc.Scripting",
      "kind": "class",
      "category": "scheduler",
      "categoryLabel": "Scheduler and threading",
      "signature": "public sealed class WrongThreadException : InvalidOperationException",
      "baseType": "InvalidOperationException",
      "summary": "A game-facing API was called from a thread other than the server tick thread.",
      "remarks": "Use `Scheduler.RunSync` to hop to the tick thread.",
      "url": "/reference/api/scheduler/wrongthreadexception/",
      "members": [
        {
          "name": "WrongThreadException",
          "kind": "ctor",
          "signature": "public WrongThreadException(string api)",
          "parameters": [
            {
              "name": "api",
              "type": "string",
              "summary": "What was called."
            }
          ],
          "summary": "Creates the exception for the named API.",
          "documented": true,
          "url": "/reference/api/scheduler/wrongthreadexception/#constructor"
        }
      ]
    }
  ],
  "events": [
    {
      "id": 1,
      "name": "ServerStart",
      "struct": "ServerStartEvent",
      "key": "mc:server_start",
      "cancellable": false,
      "group": "Server and tick",
      "summary": "Fired once after the server finished starting, before the first tick.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp",
        "src/scripting/ipc/session.cpp",
        "src/server/main.cpp"
      ],
      "engineWired": true,
      "fields": [],
      "url": "/reference/api/event-types/serverstartevent/"
    },
    {
      "id": 2,
      "name": "ServerStop",
      "struct": "ServerStopEvent",
      "key": "mc:server_stop",
      "cancellable": false,
      "group": "Server and tick",
      "summary": "Fired once when the server begins shutting down.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp",
        "src/scripting/ipc/session.cpp",
        "src/server/main.cpp"
      ],
      "engineWired": true,
      "fields": [],
      "url": "/reference/api/event-types/serverstopevent/"
    },
    {
      "id": 3,
      "name": "TickStart",
      "struct": "TickStartEvent",
      "key": "mc:tick_start",
      "cancellable": false,
      "group": "Server and tick",
      "summary": "Fired at the start of every server tick.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp",
        "src/scripting/ipc/session.cpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "tick",
          "csName": "Tick",
          "type": "u64",
          "csType": "ulong",
          "mutable": false,
          "summary": "The tick number."
        }
      ],
      "url": "/reference/api/event-types/tickstartevent/"
    },
    {
      "id": 4,
      "name": "TickEnd",
      "struct": "TickEndEvent",
      "key": "mc:tick_end",
      "cancellable": false,
      "group": "Server and tick",
      "summary": "Fired at the end of every server tick.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp",
        "src/scripting/ipc/session.cpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "tick",
          "csName": "Tick",
          "type": "u64",
          "csType": "ulong",
          "mutable": false,
          "summary": "The tick number."
        },
        {
          "name": "tick_nanos",
          "csName": "TickNanos",
          "type": "i64",
          "csType": "long",
          "mutable": false,
          "summary": "Wall time spent in this tick."
        }
      ],
      "url": "/reference/api/event-types/tickendevent/"
    },
    {
      "id": 100,
      "name": "ServerListPing",
      "struct": "ServerListPingEvent",
      "key": "mc:server_list_ping",
      "cancellable": false,
      "group": "Other",
      "summary": "A client asked for the server list status. Change the MOTD, the player counts or hide the player sample.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "connection",
          "csName": "Connection",
          "type": "u64",
          "csType": "ulong",
          "mutable": false,
          "summary": "Connection id."
        },
        {
          "name": "address",
          "csName": "Address",
          "type": "string",
          "csType": "Utf8String",
          "mutable": false,
          "summary": "Client address."
        },
        {
          "name": "protocol_version",
          "csName": "ProtocolVersion",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "Protocol version the client announced."
        },
        {
          "name": "motd",
          "csName": "Motd",
          "type": "component",
          "csType": "component",
          "mutable": true,
          "summary": "The message of the day."
        },
        {
          "name": "max_players",
          "csName": "MaxPlayers",
          "type": "i32",
          "csType": "int",
          "mutable": true,
          "summary": "Maximum player count shown."
        },
        {
          "name": "online_players",
          "csName": "OnlinePlayers",
          "type": "i32",
          "csType": "int",
          "mutable": true,
          "summary": "Online player count shown."
        },
        {
          "name": "hide_players",
          "csName": "HidePlayers",
          "type": "bool",
          "csType": "bool",
          "mutable": true,
          "summary": "Do not send the player sample."
        }
      ],
      "url": "/reference/api/event-types/serverlistpingevent/"
    },
    {
      "id": 101,
      "name": "CommandsRegistered",
      "struct": "CommandsRegisteredEvent",
      "key": "mc:commands_registered",
      "cancellable": false,
      "group": "Other",
      "summary": "The command tree changed (a plugin registered or removed commands, or a permission changed). Fired once per tick at most, before the trees are resent to the players.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp",
        "src/scripting/ipc/session.cpp"
      ],
      "engineWired": true,
      "fields": [],
      "url": "/reference/api/event-types/commandsregisteredevent/"
    },
    {
      "id": 102,
      "name": "PluginEnable",
      "struct": "PluginEnableEvent",
      "key": "mc:plugin_enable",
      "cancellable": false,
      "group": "Other",
      "summary": "A plugin finished enabling.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp",
        "src/scripting/ipc/session.cpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "plugin_id",
          "csName": "PluginId",
          "type": "string",
          "csType": "Utf8String",
          "mutable": false,
          "summary": "The plugin id."
        },
        {
          "name": "plugin_name",
          "csName": "PluginName",
          "type": "string",
          "csType": "Utf8String",
          "mutable": false,
          "summary": "The plugin name."
        },
        {
          "name": "version",
          "csName": "Version",
          "type": "string",
          "csType": "Utf8String",
          "mutable": false,
          "summary": "The plugin version."
        }
      ],
      "url": "/reference/api/event-types/pluginenableevent/"
    },
    {
      "id": 103,
      "name": "PluginDisable",
      "struct": "PluginDisableEvent",
      "key": "mc:plugin_disable",
      "cancellable": false,
      "group": "Other",
      "summary": "A plugin was disabled (unload or hot reload); its registrations are already released.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp",
        "src/scripting/ipc/session.cpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "plugin_id",
          "csName": "PluginId",
          "type": "string",
          "csType": "Utf8String",
          "mutable": false,
          "summary": "The plugin id."
        },
        {
          "name": "plugin_name",
          "csName": "PluginName",
          "type": "string",
          "csType": "Utf8String",
          "mutable": false,
          "summary": "The plugin name."
        },
        {
          "name": "version",
          "csName": "Version",
          "type": "string",
          "csType": "Utf8String",
          "mutable": false,
          "summary": "The plugin version."
        }
      ],
      "url": "/reference/api/event-types/plugindisableevent/"
    },
    {
      "id": 104,
      "name": "PermissionChanged",
      "struct": "PermissionChangedEvent",
      "key": "mc:permission_changed",
      "cancellable": false,
      "group": "Other",
      "summary": "A permission entry of a player changed (or of a group or everything: AllPlayers is true). Fired after the change; the command trees of the players are resent in the same tick.",
      "firedBy": [
        "src/game/scriptbridge/bridge_permissions.cpp",
        "src/scripting/ipc/ipc_events.g.hpp",
        "src/scripting/ipc/session.cpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "uuid",
          "csType": "Uuid",
          "mutable": false,
          "summary": "The profile whose permissions changed (zero when AllPlayers)."
        },
        {
          "name": "all_players",
          "csName": "AllPlayers",
          "type": "bool",
          "csType": "bool",
          "mutable": false,
          "summary": "A group, the default group or the whole backend changed."
        }
      ],
      "url": "/reference/api/event-types/permissionchangedevent/"
    },
    {
      "id": 105,
      "name": "PermissionsReloaded",
      "struct": "PermissionsReloadedEvent",
      "key": "mc:permissions_reloaded",
      "cancellable": false,
      "group": "Other",
      "summary": "The permission backend was reloaded from disk (/perm reload or Permissions.Reload).",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp",
        "src/scripting/ipc/session.cpp"
      ],
      "engineWired": true,
      "fields": [],
      "url": "/reference/api/event-types/permissionsreloadedevent/"
    },
    {
      "id": 10,
      "name": "PlayerPreLogin",
      "struct": "PlayerPreLoginEvent",
      "key": "mc:player_pre_login",
      "cancellable": true,
      "group": "Player",
      "summary": "A client finished authentication and is about to enter the configuration phase. Handlers run on the TICK thread: a blocking call (a database or web lookup) freezes the whole server, so do not look anything up here. Cancel to refuse the login (set the kick message first), or call Defer() and answer later from Scheduler.RunAsync: the login waits up to 30 seconds, continues when every deferral allowed it and is refused as soon as one denies. A plugin that unloads releases its pending deferrals (counted as allowed).",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp",
        "src/scripting/ipc/session.cpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "connection",
          "csName": "Connection",
          "type": "u64",
          "csType": "ulong",
          "mutable": false,
          "summary": "Connection id."
        },
        {
          "name": "uuid",
          "csName": "Uuid",
          "type": "uuid",
          "csType": "Uuid",
          "mutable": false,
          "summary": "The authenticated profile id."
        },
        {
          "name": "username",
          "csName": "Username",
          "type": "string",
          "csType": "Utf8String",
          "mutable": false,
          "summary": "The profile name."
        },
        {
          "name": "address",
          "csName": "Address",
          "type": "string",
          "csType": "Utf8String",
          "mutable": false,
          "summary": "Client address."
        },
        {
          "name": "kick_message",
          "csName": "KickMessage",
          "type": "component",
          "csType": "component",
          "mutable": true,
          "summary": "Shown to the client when the login is cancelled (default: a generic message)."
        },
        {
          "name": "deferrals",
          "csName": "Deferrals",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "How many plugins hold the login (each Defer() adds one): it continues when all of them allowed it, and any denial refuses it at once."
        }
      ],
      "url": "/reference/api/event-types/playerpreloginevent/"
    },
    {
      "id": 11,
      "name": "PlayerJoin",
      "struct": "PlayerJoinEvent",
      "key": "mc:player_join",
      "cancellable": false,
      "group": "Player",
      "summary": "A player entity entered the play state. The join message is broadcast after the handlers ran.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp",
        "src/scripting/ipc/session.cpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "uuid",
          "csName": "Uuid",
          "type": "uuid",
          "csType": "Uuid",
          "mutable": false,
          "summary": "The profile id."
        },
        {
          "name": "username",
          "csName": "Username",
          "type": "string",
          "csType": "Utf8String",
          "mutable": false,
          "summary": "The profile name."
        },
        {
          "name": "join_message",
          "csName": "JoinMessage",
          "type": "component",
          "csType": "component",
          "mutable": true,
          "summary": "The message broadcast to everybody (set to an empty component to suppress it)."
        }
      ],
      "url": "/reference/api/event-types/playerjoinevent/"
    },
    {
      "id": 12,
      "name": "PlayerQuit",
      "struct": "PlayerQuitEvent",
      "key": "mc:player_quit",
      "cancellable": false,
      "group": "Player",
      "summary": "A player disconnected (the entity is still alive during dispatch).",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp",
        "src/scripting/ipc/session.cpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "uuid",
          "csName": "Uuid",
          "type": "uuid",
          "csType": "Uuid",
          "mutable": false,
          "summary": "The profile id."
        },
        {
          "name": "username",
          "csName": "Username",
          "type": "string",
          "csType": "Utf8String",
          "mutable": false,
          "summary": "The profile name."
        },
        {
          "name": "reason",
          "csName": "Reason",
          "type": "string",
          "csType": "Utf8String",
          "mutable": false,
          "summary": "Why the connection ended: disconnected, kicked, timeout, protocol_error, connection_lost or server_shutdown."
        },
        {
          "name": "quit_message",
          "csName": "QuitMessage",
          "type": "component",
          "csType": "component",
          "mutable": true,
          "summary": "The message broadcast to everybody (set to an empty component to suppress it)."
        }
      ],
      "url": "/reference/api/event-types/playerquitevent/"
    },
    {
      "id": 13,
      "name": "PlayerMove",
      "struct": "PlayerMoveEvent",
      "key": "mc:player_move",
      "cancellable": true,
      "group": "Player",
      "summary": "A player moved or rotated. Cancel to teleport the player back; 'to', 'yaw' and 'pitch' may be rewritten. Fires for every accepted movement packet: keep handlers cheap.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "from",
          "csName": "From",
          "type": "vec3d",
          "csType": "Vec3d",
          "mutable": false,
          "summary": "Position before the move."
        },
        {
          "name": "to",
          "csName": "To",
          "type": "vec3d",
          "csType": "Vec3d",
          "mutable": true,
          "summary": "Position after the move."
        },
        {
          "name": "yaw",
          "csName": "Yaw",
          "type": "f32",
          "csType": "float",
          "mutable": true,
          "summary": "Yaw after the move."
        },
        {
          "name": "pitch",
          "csName": "Pitch",
          "type": "f32",
          "csType": "float",
          "mutable": true,
          "summary": "Pitch after the move."
        },
        {
          "name": "on_ground",
          "csName": "OnGround",
          "type": "bool",
          "csType": "bool",
          "mutable": false,
          "summary": "Whether the client reports being on the ground."
        }
      ],
      "url": "/reference/api/event-types/playermoveevent/"
    },
    {
      "id": 14,
      "name": "PlayerChat",
      "struct": "PlayerChatEvent",
      "key": "mc:player_chat",
      "cancellable": true,
      "group": "Player",
      "summary": "A player sent a chat message. Cancel to drop it. Changing Message or Rendered sends the line as an unsigned server message instead of the player's signed one. SenderName, ChatType, Decoration and the filter fields restyle the signed line without unsigning it: the signature covers only the typed text.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The sender."
        },
        {
          "name": "message",
          "csName": "Message",
          "type": "string",
          "csType": "Utf8String",
          "mutable": true,
          "summary": "What the player typed. Changing it re-renders the line with the default format."
        },
        {
          "name": "rendered",
          "csName": "Rendered",
          "type": "component",
          "csType": "component",
          "mutable": true,
          "summary": "The complete line shown to everybody (default: <name> message). Replace it to change the format; takes precedence over Message."
        },
        {
          "name": "sender_name",
          "csName": "SenderName",
          "type": "component",
          "csType": "component",
          "mutable": true,
          "summary": "The sender name as the line shows it (hover, click and insertion included). Changing it keeps the message signed."
        },
        {
          "name": "chat_type",
          "csName": "ChatType",
          "type": "enum:ChatKind",
          "csType": "enum:ChatKind",
          "mutable": true,
          "summary": "The chat type of the line: Chat, EmoteCommand or SayCommand. The message kinds need a target and are refused here (Chat is used)."
        },
        {
          "name": "decoration",
          "csName": "Decoration",
          "type": "component",
          "csType": "component",
          "mutable": true,
          "summary": "The body as the line shows it (unsigned content: colours, highlights, glyphs). Equal to the typed text means none. Keeps the message signed."
        },
        {
          "name": "filter_kind",
          "csName": "FilterKind",
          "type": "enum:ChatFilterKind",
          "csType": "enum:ChatFilterKind",
          "mutable": true,
          "summary": "How the recipients who filter text see the message (vanilla FilterMask). Any other value fully filters the message."
        },
        {
          "name": "filter_bits",
          "csName": "FilterBits",
          "type": "string",
          "csType": "Utf8String",
          "mutable": true,
          "summary": "For PartiallyFiltered: one 0 or 1 per UTF-16 unit of the typed text, 1 hides the unit. A different length or character fully filters the message."
        }
      ],
      "url": "/reference/api/event-types/playerchatevent/"
    },
    {
      "id": 305,
      "name": "PrivateMessage",
      "struct": "PrivateMessageEvent",
      "key": "mc:player_private_message",
      "cancellable": true,
      "group": "Other",
      "summary": "A player sent a private message (/msg, /tell, /w) to one player. Cancel to drop the copy for that target. Changing the message sends it unsigned; a changed decoration keeps it signed. Console senders do not fire it.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "sender",
          "csName": "Sender",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player who typed the command."
        },
        {
          "name": "target",
          "csName": "Target",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The recipient. A /msg with several targets fires once per target."
        },
        {
          "name": "message",
          "csName": "Message",
          "type": "string",
          "csType": "Utf8String",
          "mutable": true,
          "summary": "The typed text. Changing it sends the message unsigned."
        },
        {
          "name": "decoration",
          "csName": "Decoration",
          "type": "component",
          "csType": "component",
          "mutable": true,
          "summary": "The body as the line shows it (unsigned content). Equal to the typed text means none. Keeps the message signed."
        }
      ],
      "url": "/reference/api/event-types/privatemessageevent/"
    },
    {
      "id": 15,
      "name": "PlayerCommand",
      "struct": "PlayerCommandEvent",
      "key": "mc:player_command",
      "cancellable": true,
      "group": "Player",
      "summary": "A player ran a command (without the leading slash). Cancel to suppress it; the command line may be rewritten.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "command",
          "csName": "Command",
          "type": "string",
          "csType": "Utf8String",
          "mutable": true,
          "summary": "The command line without the slash."
        }
      ],
      "url": "/reference/api/event-types/playercommandevent/"
    },
    {
      "id": 16,
      "name": "PlayerInteractBlock",
      "struct": "PlayerInteractBlockEvent",
      "key": "mc:player_interact_block",
      "cancellable": true,
      "group": "Player",
      "summary": "A player right-clicked a block (fired after PlayerInteract). Cancel to stop the block interaction and item use.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The clicked block."
        },
        {
          "name": "face",
          "csName": "Face",
          "type": "u8",
          "csType": "byte",
          "mutable": false,
          "summary": "The clicked face (BlockFace)."
        },
        {
          "name": "hand",
          "csName": "Hand",
          "type": "u8",
          "csType": "byte",
          "mutable": false,
          "summary": "The hand (Hand)."
        },
        {
          "name": "item",
          "csName": "Item",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The item in that hand."
        }
      ],
      "url": "/reference/api/event-types/playerinteractblockevent/"
    },
    {
      "id": 110,
      "name": "PlayerKick",
      "struct": "PlayerKickEvent",
      "key": "mc:player_kick",
      "cancellable": true,
      "group": "Player",
      "summary": "A player is about to be kicked by a command or plugin. Cancel to keep the player. Not fired for protocol errors or disconnects.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp",
        "src/scripting/ipc/session.cpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "reason",
          "csName": "Reason",
          "type": "component",
          "csType": "component",
          "mutable": true,
          "summary": "The disconnect screen text."
        },
        {
          "name": "leave_message",
          "csName": "LeaveMessage",
          "type": "component",
          "csType": "component",
          "mutable": true,
          "summary": "The message broadcast to everybody (empty = the default quit message)."
        }
      ],
      "url": "/reference/api/event-types/playerkickevent/"
    },
    {
      "id": 111,
      "name": "PlayerRespawn",
      "struct": "PlayerRespawnEvent",
      "key": "mc:player_respawn",
      "cancellable": false,
      "group": "Player",
      "summary": "A player is respawning. The destination may be changed.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "reason",
          "csName": "Reason",
          "type": "enum:RespawnReason",
          "csType": "enum:RespawnReason",
          "mutable": false,
          "summary": "Why."
        },
        {
          "name": "position",
          "csName": "Position",
          "type": "vec3d",
          "csType": "Vec3d",
          "mutable": true,
          "summary": "Where the player appears."
        },
        {
          "name": "world",
          "csName": "World",
          "type": "world",
          "csType": "world",
          "mutable": true,
          "summary": "The dimension the player appears in."
        },
        {
          "name": "is_spawn_point",
          "csName": "IsSpawnPoint",
          "type": "bool",
          "csType": "bool",
          "mutable": false,
          "summary": "True when a bed or respawn anchor of the player is used, false for the world spawn."
        }
      ],
      "url": "/reference/api/event-types/playerrespawnevent/"
    },
    {
      "id": 112,
      "name": "PlayerDeath",
      "struct": "PlayerDeathEvent",
      "key": "mc:player_death",
      "cancellable": false,
      "group": "Player",
      "summary": "A player died. The death message, inventory/experience drops and level keeping can be changed.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "killer",
          "csName": "Killer",
          "type": "entity",
          "csType": "Entity",
          "mutable": false,
          "summary": "The entity responsible (none if there is none)."
        },
        {
          "name": "cause",
          "csName": "Cause",
          "type": "enum:DamageCause",
          "csType": "enum:DamageCause",
          "mutable": false,
          "summary": "The damage cause."
        },
        {
          "name": "death_message",
          "csName": "DeathMessage",
          "type": "component",
          "csType": "component",
          "mutable": true,
          "summary": "Broadcast to everybody (empty = none)."
        },
        {
          "name": "drop_inventory",
          "csName": "DropInventory",
          "type": "bool",
          "csType": "bool",
          "mutable": true,
          "summary": "Drop the items (false keeps them, like keepInventory). Only the items: the experience is controlled by the two fields below."
        },
        {
          "name": "keep_level",
          "csName": "KeepLevel",
          "type": "bool",
          "csType": "bool",
          "mutable": true,
          "summary": "Keep the experience level through the respawn (default: the keepInventory rule). True drops no experience orbs."
        },
        {
          "name": "drop_experience",
          "csName": "DropExperience",
          "type": "i32",
          "csType": "int",
          "mutable": true,
          "summary": "Experience points dropped as orbs at the death position (default the vanilla amount min(level*7, 100), 0 with keepInventory); independent of drop_inventory."
        }
      ],
      "url": "/reference/api/event-types/playerdeathevent/"
    },
    {
      "id": 129,
      "name": "PlayerCreativeSlot",
      "struct": "PlayerCreativeSlotEvent",
      "key": "mc:player_creative_slot",
      "cancellable": true,
      "group": "Player",
      "summary": "A creative-mode player put a stack into an inventory slot from the creative menu (slot -1: threw one out of the menu). Cancel to refuse; the client is resynced.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "slot",
          "csName": "Slot",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "The menu slot (1-45), or -1 for a drop."
        },
        {
          "name": "item",
          "csName": "Item",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The stack the client wants."
        }
      ],
      "url": "/reference/api/event-types/playercreativeslotevent/"
    },
    {
      "id": 113,
      "name": "PlayerItemHeld",
      "struct": "PlayerItemHeldEvent",
      "key": "mc:player_item_held",
      "cancellable": true,
      "group": "Player",
      "summary": "A player selected another hotbar slot. Cancel to revert the selection.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "previous_slot",
          "csName": "PreviousSlot",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "Hotbar slot before (0-8)."
        },
        {
          "name": "new_slot",
          "csName": "NewSlot",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "Hotbar slot selected (0-8)."
        }
      ],
      "url": "/reference/api/event-types/playeritemheldevent/"
    },
    {
      "id": 114,
      "name": "PlayerSwapHands",
      "struct": "PlayerSwapHandsEvent",
      "key": "mc:player_swap_hands",
      "cancellable": true,
      "group": "Player",
      "summary": "A player swapped the main hand and off hand items (F key). Cancel to keep them.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "main_hand",
          "csName": "MainHand",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The item that moves to the off hand."
        },
        {
          "name": "off_hand",
          "csName": "OffHand",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The item that moves to the main hand."
        }
      ],
      "url": "/reference/api/event-types/playerswaphandsevent/"
    },
    {
      "id": 115,
      "name": "PlayerDropItem",
      "struct": "PlayerDropItemEvent",
      "key": "mc:player_drop_item",
      "cancellable": true,
      "group": "Player",
      "summary": "A player drops an item from the hotbar or inventory (drop key). Cancel to keep it.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "item",
          "csName": "Item",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The item (a single one, or the whole stack for the control-drop)."
        },
        {
          "name": "whole_stack",
          "csName": "WholeStack",
          "type": "bool",
          "csType": "bool",
          "mutable": false,
          "summary": "Control-drop of the whole stack."
        }
      ],
      "url": "/reference/api/event-types/playerdropitemevent/"
    },
    {
      "id": 116,
      "name": "PlayerPickupItem",
      "struct": "PlayerPickupItemEvent",
      "key": "mc:player_pickup_item",
      "cancellable": true,
      "group": "Player",
      "summary": "A player is about to pick up an item entity. Cancel to leave it on the ground.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "item_entity",
          "csName": "ItemEntity",
          "type": "entity",
          "csType": "Entity",
          "mutable": false,
          "summary": "The item entity."
        },
        {
          "name": "item",
          "csName": "Item",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The stack on the ground."
        }
      ],
      "url": "/reference/api/event-types/playerpickupitemevent/"
    },
    {
      "id": 117,
      "name": "PlayerConsume",
      "struct": "PlayerConsumeEvent",
      "key": "mc:player_consume",
      "cancellable": true,
      "group": "Player",
      "summary": "A player finished eating or drinking. Cancel to prevent the effects and the item consumption.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "item",
          "csName": "Item",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The consumed item."
        },
        {
          "name": "hand",
          "csName": "Hand",
          "type": "enum:Hand",
          "csType": "enum:Hand",
          "mutable": false,
          "summary": "The hand."
        }
      ],
      "url": "/reference/api/event-types/playerconsumeevent/"
    },
    {
      "id": 118,
      "name": "PlayerInteract",
      "struct": "PlayerInteractEvent",
      "key": "mc:player_interact",
      "cancellable": true,
      "group": "Player",
      "summary": "A player clicked (left or right, air or block). Cancel to stop the default action: block breaking start, block use, item use.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "action",
          "csName": "Action",
          "type": "enum:InteractAction",
          "csType": "enum:InteractAction",
          "mutable": false,
          "summary": "What was clicked."
        },
        {
          "name": "hand",
          "csName": "Hand",
          "type": "enum:Hand",
          "csType": "enum:Hand",
          "mutable": false,
          "summary": "The hand."
        },
        {
          "name": "item",
          "csName": "Item",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The item in that hand."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The clicked block (only for block actions)."
        },
        {
          "name": "face",
          "csName": "Face",
          "type": "enum:BlockFace",
          "csType": "enum:BlockFace",
          "mutable": false,
          "summary": "The clicked face (only for block actions)."
        },
        {
          "name": "has_block",
          "csName": "HasBlock",
          "type": "bool",
          "csType": "bool",
          "mutable": false,
          "summary": "Whether pos/face are valid."
        }
      ],
      "url": "/reference/api/event-types/playerinteractevent/"
    },
    {
      "id": 119,
      "name": "PlayerInteractEntity",
      "struct": "PlayerInteractEntityEvent",
      "key": "mc:player_interact_entity",
      "cancellable": true,
      "group": "Player",
      "summary": "A player right-clicked an entity. Cancel to stop the interaction.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "target",
          "csName": "Target",
          "type": "entity",
          "csType": "Entity",
          "mutable": false,
          "summary": "The clicked entity."
        },
        {
          "name": "hand",
          "csName": "Hand",
          "type": "enum:Hand",
          "csType": "enum:Hand",
          "mutable": false,
          "summary": "The hand."
        },
        {
          "name": "item",
          "csName": "Item",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The item in that hand."
        }
      ],
      "url": "/reference/api/event-types/playerinteractentityevent/"
    },
    {
      "id": 120,
      "name": "PlayerToggleSneak",
      "struct": "PlayerToggleSneakEvent",
      "key": "mc:player_toggle_sneak",
      "cancellable": true,
      "group": "Player",
      "summary": "A player started or stopped sneaking. Cancel to ignore the change.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "sneaking",
          "csName": "Sneaking",
          "type": "bool",
          "csType": "bool",
          "mutable": false,
          "summary": "The new sneaking state."
        }
      ],
      "url": "/reference/api/event-types/playertogglesneakevent/"
    },
    {
      "id": 121,
      "name": "PlayerToggleSprint",
      "struct": "PlayerToggleSprintEvent",
      "key": "mc:player_toggle_sprint",
      "cancellable": true,
      "group": "Player",
      "summary": "A player started or stopped sprinting. Cancel to ignore the change.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "sprinting",
          "csName": "Sprinting",
          "type": "bool",
          "csType": "bool",
          "mutable": false,
          "summary": "The new sprinting state."
        }
      ],
      "url": "/reference/api/event-types/playertogglesprintevent/"
    },
    {
      "id": 122,
      "name": "PlayerToggleFlight",
      "struct": "PlayerToggleFlightEvent",
      "key": "mc:player_toggle_flight",
      "cancellable": true,
      "group": "Player",
      "summary": "A player started or stopped flying (creative / may-fly). Cancel to ignore the change.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "flying",
          "csName": "Flying",
          "type": "bool",
          "csType": "bool",
          "mutable": false,
          "summary": "The new flying state."
        }
      ],
      "url": "/reference/api/event-types/playertoggleflightevent/"
    },
    {
      "id": 123,
      "name": "PlayerGameModeChange",
      "struct": "PlayerGameModeChangeEvent",
      "key": "mc:player_game_mode_change",
      "cancellable": true,
      "group": "Player",
      "summary": "A player's game mode is about to change. Cancel to keep the old one.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "old_mode",
          "csName": "OldMode",
          "type": "enum:GameMode",
          "csType": "enum:GameMode",
          "mutable": false,
          "summary": "The current mode."
        },
        {
          "name": "new_mode",
          "csName": "NewMode",
          "type": "enum:GameMode",
          "csType": "enum:GameMode",
          "mutable": false,
          "summary": "The new mode."
        },
        {
          "name": "cause",
          "csName": "Cause",
          "type": "enum:GameModeChangeCause",
          "csType": "enum:GameModeChangeCause",
          "mutable": false,
          "summary": "Why."
        }
      ],
      "url": "/reference/api/event-types/playergamemodechangeevent/"
    },
    {
      "id": 124,
      "name": "PlayerTeleport",
      "struct": "PlayerTeleportEvent",
      "key": "mc:player_teleport",
      "cancellable": true,
      "group": "Player",
      "summary": "A player is about to be teleported (command, plugin, ender pearl, ...). Cancel to stay; the destination may be changed.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "from",
          "csName": "From",
          "type": "vec3d",
          "csType": "Vec3d",
          "mutable": false,
          "summary": "Current position."
        },
        {
          "name": "to",
          "csName": "To",
          "type": "vec3d",
          "csType": "Vec3d",
          "mutable": true,
          "summary": "Destination position."
        },
        {
          "name": "from_world",
          "csName": "FromWorld",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "Current dimension."
        },
        {
          "name": "to_world",
          "csName": "ToWorld",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "Destination dimension."
        },
        {
          "name": "cause",
          "csName": "Cause",
          "type": "enum:TeleportCause",
          "csType": "enum:TeleportCause",
          "mutable": false,
          "summary": "Why."
        }
      ],
      "url": "/reference/api/event-types/playerteleportevent/"
    },
    {
      "id": 125,
      "name": "PlayerPortal",
      "struct": "PlayerPortalEvent",
      "key": "mc:player_portal",
      "cancellable": true,
      "group": "Player",
      "summary": "A player is about to travel through a portal (nether portal, end portal, end gateway). Cancel to stay.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "from",
          "csName": "From",
          "type": "vec3d",
          "csType": "Vec3d",
          "mutable": false,
          "summary": "Current position."
        },
        {
          "name": "from_world",
          "csName": "FromWorld",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "Current dimension."
        },
        {
          "name": "to_world",
          "csName": "ToWorld",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "Destination dimension."
        },
        {
          "name": "cause",
          "csName": "Cause",
          "type": "enum:TeleportCause",
          "csType": "enum:TeleportCause",
          "mutable": false,
          "summary": "Which portal."
        }
      ],
      "url": "/reference/api/event-types/playerportalevent/"
    },
    {
      "id": 126,
      "name": "PlayerChangedWorld",
      "struct": "PlayerChangedWorldEvent",
      "key": "mc:player_changed_world",
      "cancellable": false,
      "group": "Player",
      "summary": "A player arrived in another dimension.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "from_world",
          "csName": "FromWorld",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "The dimension left."
        },
        {
          "name": "to_world",
          "csName": "ToWorld",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "The dimension entered."
        }
      ],
      "url": "/reference/api/event-types/playerchangedworldevent/"
    },
    {
      "id": 127,
      "name": "PlayerResourcePackStatus",
      "struct": "PlayerResourcePackStatusEvent",
      "key": "mc:player_resource_pack_status",
      "cancellable": false,
      "group": "Player",
      "summary": "A client reported the state of a pushed resource pack.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "pack_id",
          "csName": "PackId",
          "type": "uuid",
          "csType": "Uuid",
          "mutable": false,
          "summary": "The pack id given in the push."
        },
        {
          "name": "status",
          "csName": "Status",
          "type": "enum:ResourcePackStatus",
          "csType": "enum:ResourcePackStatus",
          "mutable": false,
          "summary": "The reported state."
        }
      ],
      "url": "/reference/api/event-types/playerresourcepackstatusevent/"
    },
    {
      "id": 128,
      "name": "PlayerLevelChange",
      "struct": "PlayerLevelChangeEvent",
      "key": "mc:player_level_change",
      "cancellable": false,
      "group": "Player",
      "summary": "A player's experience level changed.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "old_level",
          "csName": "OldLevel",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "Level before."
        },
        {
          "name": "new_level",
          "csName": "NewLevel",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "Level after."
        }
      ],
      "url": "/reference/api/event-types/playerlevelchangeevent/"
    },
    {
      "id": 20,
      "name": "BlockBreak",
      "struct": "BlockBreakEvent",
      "key": "mc:block_break",
      "cancellable": true,
      "group": "Block",
      "summary": "A player is about to break a block. Cancel to keep the block (the client is resynced).",
      "firedBy": [
        "src/scripting/event_bus.hpp",
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The block."
        },
        {
          "name": "block_state",
          "csName": "BlockState",
          "type": "blockstate",
          "csType": "blockstate",
          "mutable": false,
          "summary": "The block state about to be broken."
        },
        {
          "name": "drop_items",
          "csName": "DropItems",
          "type": "bool",
          "csType": "bool",
          "mutable": true,
          "summary": "Whether the block drops its loot (the experience is controlled by experience)."
        },
        {
          "name": "experience",
          "csName": "Experience",
          "type": "i32",
          "csType": "int",
          "mutable": true,
          "summary": "The experience orbs dropped by the block, pre-filled with what vanilla would drop (ores, spawners, sculk; silk touch applied). Set 0 to drop none or any amount to drop that many; independent of drop_items."
        },
        {
          "name": "tool",
          "csName": "Tool",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The item in the main hand."
        }
      ],
      "url": "/reference/api/event-types/blockbreakevent/"
    },
    {
      "id": 21,
      "name": "BlockPlace",
      "struct": "BlockPlaceEvent",
      "key": "mc:block_place",
      "cancellable": true,
      "group": "Block",
      "summary": "A player is about to place a block. Cancel to refuse; 'block_state' may be rewritten.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "Where the block goes."
        },
        {
          "name": "against",
          "csName": "Against",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The clicked block."
        },
        {
          "name": "block_state",
          "csName": "BlockState",
          "type": "blockstate",
          "csType": "blockstate",
          "mutable": true,
          "summary": "The state that will be placed."
        },
        {
          "name": "hand",
          "csName": "Hand",
          "type": "u8",
          "csType": "byte",
          "mutable": false,
          "summary": "The hand (Hand)."
        },
        {
          "name": "item",
          "csName": "Item",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The block item used."
        }
      ],
      "url": "/reference/api/event-types/blockplaceevent/"
    },
    {
      "id": 180,
      "name": "BlockDamage",
      "struct": "BlockDamageEvent",
      "key": "mc:block_damage",
      "cancellable": true,
      "group": "Block",
      "summary": "A player started digging a block. Cancel to stop the dig. Set InstaBreak to break it at once.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The block."
        },
        {
          "name": "face",
          "csName": "Face",
          "type": "enum:BlockFace",
          "csType": "enum:BlockFace",
          "mutable": false,
          "summary": "The face being dug."
        },
        {
          "name": "tool",
          "csName": "Tool",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The item in the main hand."
        },
        {
          "name": "insta_break",
          "csName": "InstaBreak",
          "type": "bool",
          "csType": "bool",
          "mutable": true,
          "summary": "Break the block immediately (as in creative mode)."
        }
      ],
      "url": "/reference/api/event-types/blockdamageevent/"
    },
    {
      "id": 181,
      "name": "BlockIgnite",
      "struct": "BlockIgniteEvent",
      "key": "mc:block_ignite",
      "cancellable": true,
      "group": "Block",
      "summary": "Fire is about to be placed in the world. Cancel to prevent it.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "world",
          "csName": "World",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "The dimension."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "Where the fire goes."
        },
        {
          "name": "cause",
          "csName": "Cause",
          "type": "enum:IgniteCause",
          "csType": "enum:IgniteCause",
          "mutable": false,
          "summary": "What ignites it."
        },
        {
          "name": "igniting_entity",
          "csName": "IgnitingEntity",
          "type": "entity",
          "csType": "Entity",
          "mutable": false,
          "summary": "The player or entity responsible, if any."
        }
      ],
      "url": "/reference/api/event-types/blockigniteevent/"
    },
    {
      "id": 182,
      "name": "BlockBurn",
      "struct": "BlockBurnEvent",
      "key": "mc:block_burn",
      "cancellable": true,
      "group": "Block",
      "summary": "Fire is about to destroy a block. Cancel to keep it.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "world",
          "csName": "World",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "The dimension."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The burning block."
        },
        {
          "name": "block_state",
          "csName": "BlockState",
          "type": "blockstate",
          "csType": "blockstate",
          "mutable": false,
          "summary": "Its state."
        }
      ],
      "url": "/reference/api/event-types/blockburnevent/"
    },
    {
      "id": 183,
      "name": "BlockSpread",
      "struct": "BlockSpreadEvent",
      "key": "mc:block_spread",
      "cancellable": true,
      "group": "Block",
      "summary": "A block is spreading to a neighbour (grass, mycelium, vines, fire). Cancel to stop it.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "world",
          "csName": "World",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "The dimension."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The target position."
        },
        {
          "name": "source",
          "csName": "Source",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The spreading block."
        },
        {
          "name": "new_state",
          "csName": "NewState",
          "type": "blockstate",
          "csType": "blockstate",
          "mutable": false,
          "summary": "The state that would be placed."
        }
      ],
      "url": "/reference/api/event-types/blockspreadevent/"
    },
    {
      "id": 184,
      "name": "BlockFade",
      "struct": "BlockFadeEvent",
      "key": "mc:block_fade",
      "cancellable": true,
      "group": "Block",
      "summary": "A block is melting, drying or fading (ice, snow, farmland, fire). Cancel to keep it.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "world",
          "csName": "World",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "The dimension."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The block."
        },
        {
          "name": "block_state",
          "csName": "BlockState",
          "type": "blockstate",
          "csType": "blockstate",
          "mutable": false,
          "summary": "The current state."
        },
        {
          "name": "new_state",
          "csName": "NewState",
          "type": "blockstate",
          "csType": "blockstate",
          "mutable": false,
          "summary": "The state it fades to."
        }
      ],
      "url": "/reference/api/event-types/blockfadeevent/"
    },
    {
      "id": 185,
      "name": "BlockForm",
      "struct": "BlockFormEvent",
      "key": "mc:block_form",
      "cancellable": true,
      "group": "Block",
      "summary": "A block is forming through the environment (snow, ice, concrete, obsidian ...). Cancel to stop it.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "world",
          "csName": "World",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "The dimension."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The position."
        },
        {
          "name": "block_state",
          "csName": "BlockState",
          "type": "blockstate",
          "csType": "blockstate",
          "mutable": false,
          "summary": "The current state."
        },
        {
          "name": "new_state",
          "csName": "NewState",
          "type": "blockstate",
          "csType": "blockstate",
          "mutable": false,
          "summary": "The state that forms."
        }
      ],
      "url": "/reference/api/event-types/blockformevent/"
    },
    {
      "id": 186,
      "name": "BlockGrow",
      "struct": "BlockGrowEvent",
      "key": "mc:block_grow",
      "cancellable": true,
      "group": "Block",
      "summary": "A plant is growing (crops, stems, cactus, sugar cane, ...). Cancel to stop it.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "world",
          "csName": "World",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "The dimension."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The block."
        },
        {
          "name": "block_state",
          "csName": "BlockState",
          "type": "blockstate",
          "csType": "blockstate",
          "mutable": false,
          "summary": "The current state."
        },
        {
          "name": "new_state",
          "csName": "NewState",
          "type": "blockstate",
          "csType": "blockstate",
          "mutable": false,
          "summary": "The state after growth."
        }
      ],
      "url": "/reference/api/event-types/blockgrowevent/"
    },
    {
      "id": 187,
      "name": "BlockPistonExtend",
      "struct": "BlockPistonExtendEvent",
      "key": "mc:block_piston_extend",
      "cancellable": true,
      "group": "Block",
      "summary": "A piston is about to extend. Cancel to keep it retracted.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "world",
          "csName": "World",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "The dimension."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The piston."
        },
        {
          "name": "direction",
          "csName": "Direction",
          "type": "enum:BlockFace",
          "csType": "enum:BlockFace",
          "mutable": false,
          "summary": "The push direction."
        },
        {
          "name": "sticky",
          "csName": "Sticky",
          "type": "bool",
          "csType": "bool",
          "mutable": false,
          "summary": "Whether it is a sticky piston."
        },
        {
          "name": "moved_blocks",
          "csName": "MovedBlocks",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "Number of blocks that move."
        }
      ],
      "url": "/reference/api/event-types/blockpistonextendevent/"
    },
    {
      "id": 188,
      "name": "BlockPistonRetract",
      "struct": "BlockPistonRetractEvent",
      "key": "mc:block_piston_retract",
      "cancellable": true,
      "group": "Block",
      "summary": "A piston is about to retract. Cancel to keep it extended.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "world",
          "csName": "World",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "The dimension."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The piston."
        },
        {
          "name": "direction",
          "csName": "Direction",
          "type": "enum:BlockFace",
          "csType": "enum:BlockFace",
          "mutable": false,
          "summary": "The push direction."
        },
        {
          "name": "sticky",
          "csName": "Sticky",
          "type": "bool",
          "csType": "bool",
          "mutable": false,
          "summary": "Whether it is a sticky piston."
        },
        {
          "name": "moved_blocks",
          "csName": "MovedBlocks",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "Number of blocks that move."
        }
      ],
      "url": "/reference/api/event-types/blockpistonretractevent/"
    },
    {
      "id": 189,
      "name": "BlockRedstone",
      "struct": "BlockRedstoneEvent",
      "key": "mc:block_redstone",
      "cancellable": false,
      "group": "Block",
      "summary": "A redstone component's output power changes. The new power may be changed.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "world",
          "csName": "World",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "The dimension."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The block."
        },
        {
          "name": "old_power",
          "csName": "OldPower",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "Power before (0-15)."
        },
        {
          "name": "new_power",
          "csName": "NewPower",
          "type": "i32",
          "csType": "int",
          "mutable": true,
          "summary": "Power after (0-15)."
        }
      ],
      "url": "/reference/api/event-types/blockredstoneevent/"
    },
    {
      "id": 30,
      "name": "EntitySpawn",
      "struct": "EntitySpawnEvent",
      "key": "mc:entity_spawn",
      "cancellable": true,
      "group": "Entity",
      "summary": "An entity is about to be added to the world. Cancel to prevent it.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "entity",
          "csName": "Entity",
          "type": "entity",
          "csType": "Entity",
          "mutable": false,
          "summary": "The entity (already created)."
        },
        {
          "name": "entity_type",
          "csName": "EntityType",
          "type": "key.entity_type",
          "csType": "key.entity_type",
          "mutable": false,
          "summary": "The entity type key, e.g. minecraft:zombie."
        },
        {
          "name": "position",
          "csName": "Position",
          "type": "vec3d",
          "csType": "Vec3d",
          "mutable": false,
          "summary": "Where it appears."
        },
        {
          "name": "reason",
          "csName": "Reason",
          "type": "enum:SpawnReason",
          "csType": "enum:SpawnReason",
          "mutable": false,
          "summary": "Why it spawns."
        }
      ],
      "url": "/reference/api/event-types/entityspawnevent/"
    },
    {
      "id": 31,
      "name": "EntityDamage",
      "struct": "EntityDamageEvent",
      "key": "mc:entity_damage",
      "cancellable": true,
      "group": "Entity",
      "summary": "A living entity is about to take damage. Cancel to negate it. 'amount' (the damage after armor and enchantments, before absorption) may be rewritten.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "target",
          "csName": "Target",
          "type": "entity",
          "csType": "Entity",
          "mutable": false,
          "summary": "The damaged entity."
        },
        {
          "name": "attacker",
          "csName": "Attacker",
          "type": "entity",
          "csType": "Entity",
          "mutable": false,
          "summary": "The responsible entity, none when there is no attacking entity."
        },
        {
          "name": "damage_type",
          "csName": "DamageType",
          "type": "key.damage_type",
          "csType": "key.damage_type",
          "mutable": false,
          "summary": "The damage type key, e.g. minecraft:fall."
        },
        {
          "name": "amount",
          "csName": "Amount",
          "type": "f32",
          "csType": "float",
          "mutable": true,
          "summary": "Final damage after armor and enchantments."
        },
        {
          "name": "cause",
          "csName": "Cause",
          "type": "enum:DamageCause",
          "csType": "enum:DamageCause",
          "mutable": false,
          "summary": "The cause derived from the damage type."
        },
        {
          "name": "raw_amount",
          "csName": "RawAmount",
          "type": "f32",
          "csType": "float",
          "mutable": false,
          "summary": "Damage before armor and enchantments."
        },
        {
          "name": "block_source",
          "csName": "BlockSource",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "Position of the block that caused the damage."
        },
        {
          "name": "has_block_source",
          "csName": "HasBlockSource",
          "type": "bool",
          "csType": "bool",
          "mutable": false,
          "summary": "Whether block_source is valid (cactus, magma, fire, ...)."
        }
      ],
      "url": "/reference/api/event-types/entitydamageevent/"
    },
    {
      "id": 32,
      "name": "EntityDeath",
      "struct": "EntityDeathEvent",
      "key": "mc:entity_death",
      "cancellable": false,
      "group": "Entity",
      "summary": "A living entity died.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "entity",
          "csName": "Entity",
          "type": "entity",
          "csType": "Entity",
          "mutable": false,
          "summary": "The entity."
        },
        {
          "name": "killer",
          "csName": "Killer",
          "type": "entity",
          "csType": "Entity",
          "mutable": false,
          "summary": "The responsible entity (none if there is none)."
        },
        {
          "name": "damage_type",
          "csName": "DamageType",
          "type": "key.damage_type",
          "csType": "key.damage_type",
          "mutable": false,
          "summary": "The damage type key, e.g. minecraft:player_attack."
        },
        {
          "name": "cause",
          "csName": "Cause",
          "type": "enum:DamageCause",
          "csType": "enum:DamageCause",
          "mutable": false,
          "summary": "The cause derived from the damage type."
        }
      ],
      "url": "/reference/api/event-types/entitydeathevent/"
    },
    {
      "id": 221,
      "name": "EntityCombust",
      "struct": "EntityCombustEvent",
      "key": "mc:entity_combust",
      "cancellable": true,
      "group": "Entity",
      "summary": "An entity is about to be set on fire. Cancel to prevent it; the duration may be changed.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "entity",
          "csName": "Entity",
          "type": "entity",
          "csType": "Entity",
          "mutable": false,
          "summary": "The entity."
        },
        {
          "name": "duration_ticks",
          "csName": "DurationTicks",
          "type": "i32",
          "csType": "int",
          "mutable": true,
          "summary": "Burn time in ticks."
        },
        {
          "name": "source",
          "csName": "Source",
          "type": "entity",
          "csType": "Entity",
          "mutable": false,
          "summary": "The entity that ignites it, if any."
        }
      ],
      "url": "/reference/api/event-types/entitycombustevent/"
    },
    {
      "id": 260,
      "name": "InventoryOpen",
      "struct": "InventoryOpenEvent",
      "key": "mc:inventory_open",
      "cancellable": true,
      "group": "Other",
      "summary": "A player is about to open a container (chest, furnace, crafting table, ...). Cancel to keep it closed.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "kind",
          "csName": "Kind",
          "type": "enum:InventoryKind",
          "csType": "enum:InventoryKind",
          "mutable": false,
          "summary": "The container kind."
        },
        {
          "name": "has_pos",
          "csName": "HasPos",
          "type": "bool",
          "csType": "bool",
          "mutable": false,
          "summary": "Whether the container is a block."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The block position."
        }
      ],
      "url": "/reference/api/event-types/inventoryopenevent/"
    },
    {
      "id": 261,
      "name": "InventoryClose",
      "struct": "InventoryCloseEvent",
      "key": "mc:inventory_close",
      "cancellable": false,
      "group": "Other",
      "summary": "A player closed a container.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "kind",
          "csName": "Kind",
          "type": "enum:InventoryKind",
          "csType": "enum:InventoryKind",
          "mutable": false,
          "summary": "The container kind."
        }
      ],
      "url": "/reference/api/event-types/inventorycloseevent/"
    },
    {
      "id": 262,
      "name": "InventoryClick",
      "struct": "InventoryClickEvent",
      "key": "mc:inventory_click",
      "cancellable": true,
      "group": "Other",
      "summary": "A player clicked a slot of an open container (also the player inventory). Cancel to undo the click (the client is resynced).",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "kind",
          "csName": "Kind",
          "type": "enum:InventoryKind",
          "csType": "enum:InventoryKind",
          "mutable": false,
          "summary": "The container kind."
        },
        {
          "name": "slot",
          "csName": "Slot",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "The clicked slot index of the container (-999 outside the window)."
        },
        {
          "name": "click_type",
          "csName": "ClickType",
          "type": "enum:ClickType",
          "csType": "enum:ClickType",
          "mutable": false,
          "summary": "How it was clicked."
        },
        {
          "name": "button",
          "csName": "Button",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "Raw button of the packet."
        },
        {
          "name": "clicked",
          "csName": "Clicked",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The item in the clicked slot."
        },
        {
          "name": "cursor",
          "csName": "Cursor",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The item on the cursor."
        }
      ],
      "url": "/reference/api/event-types/inventoryclickevent/"
    },
    {
      "id": 263,
      "name": "InventoryDrag",
      "struct": "InventoryDragEvent",
      "key": "mc:inventory_drag",
      "cancellable": true,
      "group": "Other",
      "summary": "A player finished dragging a stack over several slots. Cancel to undo.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "kind",
          "csName": "Kind",
          "type": "enum:InventoryKind",
          "csType": "enum:InventoryKind",
          "mutable": false,
          "summary": "The container kind."
        },
        {
          "name": "drag_type",
          "csName": "DragType",
          "type": "enum:DragType",
          "csType": "enum:DragType",
          "mutable": false,
          "summary": "The drag mode."
        },
        {
          "name": "slots",
          "csName": "Slots",
          "type": "bytes",
          "csType": "NativeBytes",
          "mutable": false,
          "summary": "The dragged slots as packed little-endian int32 values."
        },
        {
          "name": "cursor",
          "csName": "Cursor",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The cursor stack being distributed."
        }
      ],
      "url": "/reference/api/event-types/inventorydragevent/"
    },
    {
      "id": 264,
      "name": "CraftItem",
      "struct": "CraftItemEvent",
      "key": "mc:craft_item",
      "cancellable": false,
      "group": "Other",
      "summary": "A player took the result of a crafting recipe (cancel the InventoryClick event of the result slot to prevent crafting).",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "recipe",
          "csName": "Recipe",
          "type": "string",
          "csType": "Utf8String",
          "mutable": false,
          "summary": "Recipe id."
        },
        {
          "name": "result",
          "csName": "Result",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The crafted item."
        },
        {
          "name": "shift_click",
          "csName": "ShiftClick",
          "type": "bool",
          "csType": "bool",
          "mutable": false,
          "summary": "Whether it is a quick-craft."
        }
      ],
      "url": "/reference/api/event-types/craftitemevent/"
    },
    {
      "id": 265,
      "name": "PrepareCraft",
      "struct": "PrepareCraftEvent",
      "key": "mc:prepare_craft",
      "cancellable": true,
      "group": "Other",
      "summary": "The crafting grid matched a recipe. Cancel to show no result.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "recipe",
          "csName": "Recipe",
          "type": "string",
          "csType": "Utf8String",
          "mutable": false,
          "summary": "Recipe id."
        },
        {
          "name": "result",
          "csName": "Result",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The result that would be shown."
        }
      ],
      "url": "/reference/api/event-types/preparecraftevent/"
    },
    {
      "id": 266,
      "name": "FurnaceSmelt",
      "struct": "FurnaceSmeltEvent",
      "key": "mc:furnace_smelt",
      "cancellable": true,
      "group": "Other",
      "summary": "A furnace, smoker or blast furnace finished smelting an item. Cancel to keep the input unsmelted.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "world",
          "csName": "World",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "The dimension."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The furnace."
        },
        {
          "name": "source",
          "csName": "Source",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The ingredient."
        },
        {
          "name": "result",
          "csName": "Result",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The product."
        }
      ],
      "url": "/reference/api/event-types/furnacesmeltevent/"
    },
    {
      "id": 267,
      "name": "FurnaceBurn",
      "struct": "FurnaceBurnEvent",
      "key": "mc:furnace_burn",
      "cancellable": true,
      "group": "Other",
      "summary": "A furnace is about to consume fuel. Cancel to not burn it; the burn time may be changed.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "world",
          "csName": "World",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "The dimension."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The furnace."
        },
        {
          "name": "fuel",
          "csName": "Fuel",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The fuel."
        },
        {
          "name": "burn_ticks",
          "csName": "BurnTicks",
          "type": "i32",
          "csType": "int",
          "mutable": true,
          "summary": "Burn time in ticks."
        }
      ],
      "url": "/reference/api/event-types/furnaceburnevent/"
    },
    {
      "id": 268,
      "name": "EnchantItem",
      "struct": "EnchantItemEvent",
      "key": "mc:enchant_item",
      "cancellable": true,
      "group": "Other",
      "summary": "A player is enchanting an item at an enchanting table. Cancel to refuse.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "item",
          "csName": "Item",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The item being enchanted."
        },
        {
          "name": "option",
          "csName": "Option",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "The chosen option (0-2)."
        },
        {
          "name": "cost",
          "csName": "Cost",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "Levels charged."
        }
      ],
      "url": "/reference/api/event-types/enchantitemevent/"
    },
    {
      "id": 269,
      "name": "PrepareAnvil",
      "struct": "PrepareAnvilEvent",
      "key": "mc:prepare_anvil",
      "cancellable": true,
      "group": "Other",
      "summary": "The anvil inputs changed and a result was computed. Cancel to show no result; the cost may be changed.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "first",
          "csName": "First",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "Left input."
        },
        {
          "name": "second",
          "csName": "Second",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "Right input."
        },
        {
          "name": "result",
          "csName": "Result",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The computed result."
        },
        {
          "name": "repair_cost",
          "csName": "RepairCost",
          "type": "i32",
          "csType": "int",
          "mutable": true,
          "summary": "Levels the player pays."
        },
        {
          "name": "rename_text",
          "csName": "RenameText",
          "type": "string",
          "csType": "Utf8String",
          "mutable": false,
          "summary": "The text typed in the rename field."
        }
      ],
      "url": "/reference/api/event-types/prepareanvilevent/"
    },
    {
      "id": 40,
      "name": "PacketReceive",
      "struct": "PacketReceiveEvent",
      "key": "mc:packet_receive",
      "cancellable": true,
      "group": "Network",
      "summary": "A decoded-frame packet arrived (payload excludes the packet id). Cancel to drop it.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "connection",
          "csName": "Connection",
          "type": "u64",
          "csType": "ulong",
          "mutable": false,
          "summary": "Connection id."
        },
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player entity (none before play)."
        },
        {
          "name": "state",
          "csName": "State",
          "type": "u8",
          "csType": "byte",
          "mutable": false,
          "summary": "Connection state."
        },
        {
          "name": "packet_id",
          "csName": "PacketId",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "Packet id."
        },
        {
          "name": "payload",
          "csName": "Payload",
          "type": "bytes",
          "csType": "NativeBytes",
          "mutable": false,
          "summary": "Packet body (borrowed)."
        }
      ],
      "url": "/reference/api/event-types/packetreceiveevent/"
    },
    {
      "id": 41,
      "name": "PacketSend",
      "struct": "PacketSendEvent",
      "key": "mc:packet_send",
      "cancellable": true,
      "group": "Network",
      "summary": "RESERVED: not fired yet (the per-connection send path encodes shared frames). A packet is about to be sent to one connection.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "connection",
          "csName": "Connection",
          "type": "u64",
          "csType": "ulong",
          "mutable": false,
          "summary": "Connection id."
        },
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player entity (none before play)."
        },
        {
          "name": "state",
          "csName": "State",
          "type": "u8",
          "csType": "byte",
          "mutable": false,
          "summary": "Connection state."
        },
        {
          "name": "packet_id",
          "csName": "PacketId",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "Packet id."
        },
        {
          "name": "payload",
          "csName": "Payload",
          "type": "bytes",
          "csType": "NativeBytes",
          "mutable": false,
          "summary": "Packet body (borrowed)."
        }
      ],
      "url": "/reference/api/event-types/packetsendevent/"
    },
    {
      "id": 50,
      "name": "ChunkLoad",
      "struct": "ChunkLoadEvent",
      "key": "mc:chunk_load",
      "cancellable": false,
      "group": "World",
      "summary": "A chunk became loaded.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "dimension",
          "csName": "Dimension",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "Dimension index."
        },
        {
          "name": "x",
          "csName": "X",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "Chunk x."
        },
        {
          "name": "z",
          "csName": "Z",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "Chunk z."
        },
        {
          "name": "newly_generated",
          "csName": "NewlyGenerated",
          "type": "bool",
          "csType": "bool",
          "mutable": false,
          "summary": "True when the chunk was generated, false when loaded from disk."
        }
      ],
      "url": "/reference/api/event-types/chunkloadevent/"
    },
    {
      "id": 51,
      "name": "ChunkUnload",
      "struct": "ChunkUnloadEvent",
      "key": "mc:chunk_unload",
      "cancellable": false,
      "group": "World",
      "summary": "A chunk is about to be unloaded.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "dimension",
          "csName": "Dimension",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "Dimension index."
        },
        {
          "name": "x",
          "csName": "X",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "Chunk x."
        },
        {
          "name": "z",
          "csName": "Z",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "Chunk z."
        }
      ],
      "url": "/reference/api/event-types/chunkunloadevent/"
    },
    {
      "id": 300,
      "name": "TimeSkip",
      "struct": "TimeSkipEvent",
      "key": "mc:time_skip",
      "cancellable": false,
      "group": "Other",
      "summary": "The day time jumped (sleeping through the night, /time set or /time add).",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "world",
          "csName": "World",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "The dimension."
        },
        {
          "name": "reason",
          "csName": "Reason",
          "type": "enum:TimeSkipReason",
          "csType": "enum:TimeSkipReason",
          "mutable": false,
          "summary": "Why."
        },
        {
          "name": "skip_amount",
          "csName": "SkipAmount",
          "type": "i64",
          "csType": "long",
          "mutable": false,
          "summary": "Ticks the clock advanced."
        }
      ],
      "url": "/reference/api/event-types/timeskipevent/"
    },
    {
      "id": 301,
      "name": "WeatherChange",
      "struct": "WeatherChangeEvent",
      "key": "mc:weather_change",
      "cancellable": false,
      "group": "Other",
      "summary": "The rain started or stopped (overworld weather).",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "world",
          "csName": "World",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "The dimension."
        },
        {
          "name": "raining",
          "csName": "Raining",
          "type": "bool",
          "csType": "bool",
          "mutable": false,
          "summary": "Whether it will be raining."
        },
        {
          "name": "thundering",
          "csName": "Thundering",
          "type": "bool",
          "csType": "bool",
          "mutable": false,
          "summary": "Whether it will be thundering."
        }
      ],
      "url": "/reference/api/event-types/weatherchangeevent/"
    },
    {
      "id": 303,
      "name": "PortalCreate",
      "struct": "PortalCreateEvent",
      "key": "mc:portal_create",
      "cancellable": true,
      "group": "Other",
      "summary": "A nether portal frame is about to be filled or a destination portal built. Cancel to prevent it.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "world",
          "csName": "World",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "The dimension."
        },
        {
          "name": "reason",
          "csName": "Reason",
          "type": "enum:PortalCreateReason",
          "csType": "enum:PortalCreateReason",
          "mutable": false,
          "summary": "Why."
        },
        {
          "name": "block_count",
          "csName": "BlockCount",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "Portal blocks created."
        }
      ],
      "url": "/reference/api/event-types/portalcreateevent/"
    },
    {
      "id": 270,
      "name": "MenuClick",
      "struct": "MenuClickEvent",
      "key": "mc:menu_click",
      "cancellable": true,
      "group": "Other",
      "summary": "A player clicked in a custom GUI (Menu) of a plugin, after InventoryClick. Menus are locked: the click is denied (the client is resynced) unless a handler sets Allow, and a cancel always denies it. A click that could move items out of or into the menu (a slot of the menu, shift click, double click, drag, number key, off hand key) is delivered here with the slot of the menu's own numbering (top slots first, then the player's 27 + 9 slots).",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "menu",
          "csName": "Menu",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "The native id of the menu (what Menu uses to route the click)."
        },
        {
          "name": "slot",
          "csName": "Slot",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "The clicked slot, -999 outside the window."
        },
        {
          "name": "click_type",
          "csName": "ClickType",
          "type": "enum:ClickType",
          "csType": "enum:ClickType",
          "mutable": false,
          "summary": "How it was clicked."
        },
        {
          "name": "button",
          "csName": "Button",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "Raw button of the packet."
        },
        {
          "name": "clicked",
          "csName": "Clicked",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The item in the clicked slot."
        },
        {
          "name": "cursor",
          "csName": "Cursor",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The item on the cursor."
        },
        {
          "name": "allow",
          "csName": "Allow",
          "type": "bool",
          "csType": "bool",
          "mutable": true,
          "summary": "Set by a handler to let the click change items like in a chest (default false: the menu is a display)."
        }
      ],
      "url": "/reference/api/event-types/menuclickevent/"
    },
    {
      "id": 271,
      "name": "MenuClose",
      "struct": "MenuCloseEvent",
      "key": "mc:menu_close",
      "cancellable": false,
      "group": "Other",
      "summary": "A plugin menu was closed for a player (for any reason). The player's cursor stack has already been given back.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "menu",
          "csName": "Menu",
          "type": "i32",
          "csType": "int",
          "mutable": false,
          "summary": "The native id of the menu."
        },
        {
          "name": "reason",
          "csName": "Reason",
          "type": "enum:MenuCloseReason",
          "csType": "enum:MenuCloseReason",
          "mutable": false,
          "summary": "Why it closed."
        }
      ],
      "url": "/reference/api/event-types/menucloseevent/"
    },
    {
      "id": 272,
      "name": "CustomItemUse",
      "struct": "CustomItemUseEvent",
      "key": "mc:custom_item_use",
      "cancellable": true,
      "group": "Other",
      "summary": "A player used a custom item (right click in the air or on a block). Fired by the content layer after PlayerInteract. Cancel to stop the item's own handler and the default action.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "custom_id",
          "csName": "CustomId",
          "type": "string",
          "csType": "Utf8String",
          "mutable": false,
          "summary": "The id of the custom item, \"myplugin:ruby\"."
        },
        {
          "name": "hand",
          "csName": "Hand",
          "type": "enum:Hand",
          "csType": "enum:Hand",
          "mutable": false,
          "summary": "The hand."
        },
        {
          "name": "item",
          "csName": "Item",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The item stack."
        },
        {
          "name": "has_block",
          "csName": "HasBlock",
          "type": "bool",
          "csType": "bool",
          "mutable": false,
          "summary": "Whether the click was on a block."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The clicked block (only when has_block)."
        },
        {
          "name": "face",
          "csName": "Face",
          "type": "enum:BlockFace",
          "csType": "enum:BlockFace",
          "mutable": false,
          "summary": "The clicked face (only when has_block)."
        }
      ],
      "url": "/reference/api/event-types/customitemuseevent/"
    },
    {
      "id": 273,
      "name": "CustomBlockPlace",
      "struct": "CustomBlockPlaceEvent",
      "key": "mc:custom_block_place",
      "cancellable": true,
      "group": "Other",
      "summary": "A player is placing a custom block with a custom item. Cancel to refuse.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "custom_id",
          "csName": "CustomId",
          "type": "string",
          "csType": "Utf8String",
          "mutable": false,
          "summary": "The id of the custom block."
        },
        {
          "name": "world",
          "csName": "World",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "The dimension."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "Where it is placed."
        },
        {
          "name": "against",
          "csName": "Against",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The block that was clicked."
        },
        {
          "name": "hand",
          "csName": "Hand",
          "type": "enum:Hand",
          "csType": "enum:Hand",
          "mutable": false,
          "summary": "The hand."
        }
      ],
      "url": "/reference/api/event-types/customblockplaceevent/"
    },
    {
      "id": 274,
      "name": "CustomBlockBreak",
      "struct": "CustomBlockBreakEvent",
      "key": "mc:custom_block_break",
      "cancellable": true,
      "group": "Other",
      "summary": "A player is breaking a custom block (fired by the content layer after BlockBreak). Cancel to keep the block.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "custom_id",
          "csName": "CustomId",
          "type": "string",
          "csType": "Utf8String",
          "mutable": false,
          "summary": "The id of the custom block."
        },
        {
          "name": "world",
          "csName": "World",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "The dimension."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The block."
        },
        {
          "name": "drop_items",
          "csName": "DropItems",
          "type": "bool",
          "csType": "bool",
          "mutable": true,
          "summary": "Whether the block's drops are spawned."
        }
      ],
      "url": "/reference/api/event-types/customblockbreakevent/"
    },
    {
      "id": 275,
      "name": "CustomBlockInteract",
      "struct": "CustomBlockInteractEvent",
      "key": "mc:custom_block_interact",
      "cancellable": true,
      "group": "Other",
      "summary": "A player right-clicked a custom block (fired by the content layer after PlayerInteractBlock). Cancel to stop the block handler and the item use.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "custom_id",
          "csName": "CustomId",
          "type": "string",
          "csType": "Utf8String",
          "mutable": false,
          "summary": "The id of the custom block."
        },
        {
          "name": "world",
          "csName": "World",
          "type": "world",
          "csType": "world",
          "mutable": false,
          "summary": "The dimension."
        },
        {
          "name": "pos",
          "csName": "Pos",
          "type": "blockpos",
          "csType": "BlockPos",
          "mutable": false,
          "summary": "The block."
        },
        {
          "name": "face",
          "csName": "Face",
          "type": "enum:BlockFace",
          "csType": "enum:BlockFace",
          "mutable": false,
          "summary": "The clicked face."
        },
        {
          "name": "hand",
          "csName": "Hand",
          "type": "enum:Hand",
          "csType": "enum:Hand",
          "mutable": false,
          "summary": "The hand."
        },
        {
          "name": "item",
          "csName": "Item",
          "type": "item",
          "csType": "item",
          "mutable": false,
          "summary": "The item in that hand."
        }
      ],
      "url": "/reference/api/event-types/customblockinteractevent/"
    },
    {
      "id": 304,
      "name": "NpcInteract",
      "struct": "NpcInteractEvent",
      "key": "mc:npc_interact",
      "cancellable": false,
      "group": "Other",
      "summary": "A player clicked an NPC made with Npcs.Create (a left click is an attack, a right click an interaction). Observed only: the click has no other effect.",
      "firedBy": [
        "src/scripting/ipc/ipc_events.g.hpp"
      ],
      "engineWired": true,
      "fields": [
        {
          "name": "player",
          "csName": "Player",
          "type": "player",
          "csType": "player",
          "mutable": false,
          "summary": "The player."
        },
        {
          "name": "npc",
          "csName": "Npc",
          "type": "u64",
          "csType": "ulong",
          "mutable": false,
          "summary": "The NPC's handle."
        },
        {
          "name": "action",
          "csName": "Action",
          "type": "enum:NpcClick",
          "csType": "enum:NpcClick",
          "mutable": false,
          "summary": "The click."
        },
        {
          "name": "hand",
          "csName": "Hand",
          "type": "enum:Hand",
          "csType": "enum:Hand",
          "mutable": false,
          "summary": "The hand (a left click is the main hand)."
        },
        {
          "name": "sneaking",
          "csName": "Sneaking",
          "type": "bool",
          "csType": "bool",
          "mutable": false,
          "summary": "Whether the player was sneaking."
        }
      ],
      "url": "/reference/api/event-types/npcinteractevent/"
    }
  ],
  "eventPriorities": [
    {
      "name": "Lowest",
      "value": -200,
      "summary": "Runs first."
    },
    {
      "name": "Low",
      "value": -100,
      "summary": "Runs early."
    },
    {
      "name": "Normal",
      "value": 0,
      "summary": "Default."
    },
    {
      "name": "High",
      "value": 100,
      "summary": "Runs late."
    },
    {
      "name": "Highest",
      "value": 200,
      "summary": "Runs last before monitors."
    },
    {
      "name": "Monitor",
      "value": 1000,
      "summary": "Observe the final outcome; must not modify the event."
    }
  ],
  "phases": [
    {
      "name": "NetworkReceive",
      "value": 0,
      "summary": "Drain inbound packets, apply them to entities."
    },
    {
      "name": "PreTick",
      "value": 1,
      "summary": "Timers, scheduled tasks, input integration."
    },
    {
      "name": "Tick",
      "value": 2,
      "summary": "Game logic (entities, blocks, ...)."
    },
    {
      "name": "PostTick",
      "value": 3,
      "summary": "Removals, collision resolution, derived state."
    },
    {
      "name": "Tracking",
      "value": 4,
      "summary": "Spatial index update, view diffs."
    },
    {
      "name": "NetworkSend",
      "value": 5,
      "summary": "Build and encode outbound packets."
    },
    {
      "name": "AsyncIntegration",
      "value": 6,
      "summary": "Integrate worker results (chunk loads, lighting)."
    }
  ],
  "commandArgumentTypes": [
    {
      "id": "brigadier:bool",
      "protocolId": 0,
      "namespace": "brigadier",
      "name": "bool",
      "description": "true or false."
    },
    {
      "id": "brigadier:float",
      "protocolId": 1,
      "namespace": "brigadier",
      "name": "float",
      "description": "Single-precision number, optional min/max."
    },
    {
      "id": "brigadier:double",
      "protocolId": 2,
      "namespace": "brigadier",
      "name": "double",
      "description": "Double-precision number, optional min/max."
    },
    {
      "id": "brigadier:integer",
      "protocolId": 3,
      "namespace": "brigadier",
      "name": "integer",
      "description": "Signed 32-bit integer, optional min/max."
    },
    {
      "id": "brigadier:long",
      "protocolId": 4,
      "namespace": "brigadier",
      "name": "long",
      "description": "Signed 64-bit integer, optional min/max."
    },
    {
      "id": "brigadier:string",
      "protocolId": 5,
      "namespace": "brigadier",
      "name": "string",
      "description": "A word, a quoted phrase, or the rest of the line (single word / quotable phrase / greedy phrase)."
    },
    {
      "id": "minecraft:entity",
      "protocolId": 6,
      "namespace": "minecraft",
      "name": "entity",
      "description": "An entity selector or player name; single or multiple, players only or any entity."
    },
    {
      "id": "minecraft:game_profile",
      "protocolId": 7,
      "namespace": "minecraft",
      "name": "game_profile",
      "description": "A player profile: a name, a selector or a UUID (may name offline players)."
    },
    {
      "id": "minecraft:block_pos",
      "protocolId": 8,
      "namespace": "minecraft",
      "name": "block_pos",
      "description": "Integer block coordinates; supports ~ relative and ^ local coordinates."
    },
    {
      "id": "minecraft:column_pos",
      "protocolId": 9,
      "namespace": "minecraft",
      "name": "column_pos",
      "description": "X and Z block coordinates."
    },
    {
      "id": "minecraft:vec3",
      "protocolId": 10,
      "namespace": "minecraft",
      "name": "vec3",
      "description": "Three double coordinates (x y z), with ~ and ^."
    },
    {
      "id": "minecraft:vec2",
      "protocolId": 11,
      "namespace": "minecraft",
      "name": "vec2",
      "description": "Two double coordinates (x z)."
    },
    {
      "id": "minecraft:block_state",
      "protocolId": 12,
      "namespace": "minecraft",
      "name": "block_state",
      "description": "A block id with optional [properties] and {nbt}."
    },
    {
      "id": "minecraft:block_predicate",
      "protocolId": 13,
      "namespace": "minecraft",
      "name": "block_predicate",
      "description": "A block state or #tag with optional [properties] and {nbt}."
    },
    {
      "id": "minecraft:item_stack",
      "protocolId": 14,
      "namespace": "minecraft",
      "name": "item_stack",
      "description": "An item id with optional [component=value] list."
    },
    {
      "id": "minecraft:item_predicate",
      "protocolId": 15,
      "namespace": "minecraft",
      "name": "item_predicate",
      "description": "An item id, #tag or * with component tests."
    },
    {
      "id": "minecraft:team_color",
      "protocolId": 16,
      "namespace": "minecraft",
      "name": "team_color",
      "description": ""
    },
    {
      "id": "minecraft:hex_color",
      "protocolId": 17,
      "namespace": "minecraft",
      "name": "hex_color",
      "description": "An RRGGBB hex colour."
    },
    {
      "id": "minecraft:component",
      "protocolId": 18,
      "namespace": "minecraft",
      "name": "component",
      "description": "A text component as SNBT or JSON."
    },
    {
      "id": "minecraft:style",
      "protocolId": 19,
      "namespace": "minecraft",
      "name": "style",
      "description": "A text component style."
    },
    {
      "id": "minecraft:message",
      "protocolId": 20,
      "namespace": "minecraft",
      "name": "message",
      "description": "The rest of the line, with entity selectors expanded."
    },
    {
      "id": "minecraft:nbt_compound_tag",
      "protocolId": 21,
      "namespace": "minecraft",
      "name": "nbt_compound_tag",
      "description": "A compound tag in SNBT."
    },
    {
      "id": "minecraft:nbt_tag",
      "protocolId": 22,
      "namespace": "minecraft",
      "name": "nbt_tag",
      "description": "Any NBT tag in SNBT."
    },
    {
      "id": "minecraft:nbt_path",
      "protocolId": 23,
      "namespace": "minecraft",
      "name": "nbt_path",
      "description": "A path into an NBT structure."
    },
    {
      "id": "minecraft:objective",
      "protocolId": 24,
      "namespace": "minecraft",
      "name": "objective",
      "description": "The name of a scoreboard objective."
    },
    {
      "id": "minecraft:objective_criteria",
      "protocolId": 25,
      "namespace": "minecraft",
      "name": "objective_criteria",
      "description": "A scoreboard criterion (dummy, health, stat types ...)."
    },
    {
      "id": "minecraft:operation",
      "protocolId": 26,
      "namespace": "minecraft",
      "name": "operation",
      "description": "A scoreboard operation (=, +=, <, > ...)."
    },
    {
      "id": "minecraft:particle",
      "protocolId": 27,
      "namespace": "minecraft",
      "name": "particle",
      "description": "A particle id with its options."
    },
    {
      "id": "minecraft:angle",
      "protocolId": 28,
      "namespace": "minecraft",
      "name": "angle",
      "description": "A yaw angle, with ~ for relative."
    },
    {
      "id": "minecraft:rotation",
      "protocolId": 29,
      "namespace": "minecraft",
      "name": "rotation",
      "description": "Yaw and pitch (two angles)."
    },
    {
      "id": "minecraft:scoreboard_slot",
      "protocolId": 30,
      "namespace": "minecraft",
      "name": "scoreboard_slot",
      "description": "A scoreboard display slot."
    },
    {
      "id": "minecraft:score_holder",
      "protocolId": 31,
      "namespace": "minecraft",
      "name": "score_holder",
      "description": "An entity, selector, name or * that holds scores."
    },
    {
      "id": "minecraft:swizzle",
      "protocolId": 32,
      "namespace": "minecraft",
      "name": "swizzle",
      "description": "A combination of x, y and z axes."
    },
    {
      "id": "minecraft:team",
      "protocolId": 33,
      "namespace": "minecraft",
      "name": "team",
      "description": "The name of a team."
    },
    {
      "id": "minecraft:item_slot",
      "protocolId": 34,
      "namespace": "minecraft",
      "name": "item_slot",
      "description": "One inventory slot name (container.0, armor.head ...)."
    },
    {
      "id": "minecraft:item_slots",
      "protocolId": 35,
      "namespace": "minecraft",
      "name": "item_slots",
      "description": "A slot range name such as container.* or hotbar.*."
    },
    {
      "id": "minecraft:resource_location",
      "protocolId": 36,
      "namespace": "minecraft",
      "name": "resource_location",
      "description": "A namespaced id such as minecraft:stone."
    },
    {
      "id": "minecraft:function",
      "protocolId": 37,
      "namespace": "minecraft",
      "name": "function",
      "description": "A function id or #tag."
    },
    {
      "id": "minecraft:entity_anchor",
      "protocolId": 38,
      "namespace": "minecraft",
      "name": "entity_anchor",
      "description": "feet or eyes."
    },
    {
      "id": "minecraft:int_range",
      "protocolId": 39,
      "namespace": "minecraft",
      "name": "int_range",
      "description": "An integer range such as 1..5."
    },
    {
      "id": "minecraft:float_range",
      "protocolId": 40,
      "namespace": "minecraft",
      "name": "float_range",
      "description": "A decimal range such as 0.5..2."
    },
    {
      "id": "minecraft:dimension",
      "protocolId": 41,
      "namespace": "minecraft",
      "name": "dimension",
      "description": "A dimension id."
    },
    {
      "id": "minecraft:gamemode",
      "protocolId": 42,
      "namespace": "minecraft",
      "name": "gamemode",
      "description": "survival, creative, adventure or spectator."
    },
    {
      "id": "minecraft:time",
      "protocolId": 43,
      "namespace": "minecraft",
      "name": "time",
      "description": "A duration with an optional unit (t, s, d)."
    },
    {
      "id": "minecraft:resource_or_tag",
      "protocolId": 44,
      "namespace": "minecraft",
      "name": "resource_or_tag",
      "description": "A registry entry id or #tag."
    },
    {
      "id": "minecraft:resource_or_tag_key",
      "protocolId": 45,
      "namespace": "minecraft",
      "name": "resource_or_tag_key",
      "description": ""
    },
    {
      "id": "minecraft:resource",
      "protocolId": 46,
      "namespace": "minecraft",
      "name": "resource",
      "description": "A registry entry id."
    },
    {
      "id": "minecraft:resource_key",
      "protocolId": 47,
      "namespace": "minecraft",
      "name": "resource_key",
      "description": ""
    },
    {
      "id": "minecraft:resource_selector",
      "protocolId": 48,
      "namespace": "minecraft",
      "name": "resource_selector",
      "description": ""
    },
    {
      "id": "minecraft:template_mirror",
      "protocolId": 49,
      "namespace": "minecraft",
      "name": "template_mirror",
      "description": "none, left_right or front_back."
    },
    {
      "id": "minecraft:template_rotation",
      "protocolId": 50,
      "namespace": "minecraft",
      "name": "template_rotation",
      "description": "none, clockwise_90, 180 or counterclockwise_90."
    },
    {
      "id": "minecraft:heightmap",
      "protocolId": 51,
      "namespace": "minecraft",
      "name": "heightmap",
      "description": "A heightmap type."
    },
    {
      "id": "minecraft:loot_table",
      "protocolId": 52,
      "namespace": "minecraft",
      "name": "loot_table",
      "description": "A loot table id or inline definition."
    },
    {
      "id": "minecraft:loot_predicate",
      "protocolId": 53,
      "namespace": "minecraft",
      "name": "loot_predicate",
      "description": ""
    },
    {
      "id": "minecraft:loot_modifier",
      "protocolId": 54,
      "namespace": "minecraft",
      "name": "loot_modifier",
      "description": ""
    },
    {
      "id": "minecraft:context_float_provider",
      "protocolId": 55,
      "namespace": "minecraft",
      "name": "context_float_provider",
      "description": ""
    },
    {
      "id": "minecraft:context_int_provider",
      "protocolId": 56,
      "namespace": "minecraft",
      "name": "context_int_provider",
      "description": ""
    },
    {
      "id": "minecraft:slot_source",
      "protocolId": 57,
      "namespace": "minecraft",
      "name": "slot_source",
      "description": ""
    },
    {
      "id": "minecraft:dialog",
      "protocolId": 58,
      "namespace": "minecraft",
      "name": "dialog",
      "description": ""
    },
    {
      "id": "minecraft:feature",
      "protocolId": 59,
      "namespace": "minecraft",
      "name": "feature",
      "description": ""
    },
    {
      "id": "minecraft:swing_animation",
      "protocolId": 60,
      "namespace": "minecraft",
      "name": "swing_animation",
      "description": ""
    },
    {
      "id": "minecraft:uuid",
      "protocolId": 61,
      "namespace": "minecraft",
      "name": "uuid",
      "description": "A UUID."
    }
  ],
  "status": {
    "hostServer": {
      "sendMessage": true,
      "broadcast": true,
      "currentTick": true
    },
    "pluginCommandsDispatchedInGame": true,
    "manifest": true
  },
  "nativeSystems": [
    {
      "name": "dragon:removals",
      "phase": "PreTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/dragon/system.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "dragon:tick",
      "phase": null,
      "anchor": "mobs:post",
      "placement": "after",
      "file": "src/game/dragon/system.cpp",
      "phaseResolved": null
    },
    {
      "name": "dragon:tracking",
      "phase": null,
      "anchor": "ramjet:mob_tracking",
      "placement": "before",
      "file": "src/game/dragon/system.cpp",
      "phaseResolved": "Tracking"
    },
    {
      "name": "dragon:untrack_removed",
      "phase": null,
      "anchor": "mobs:removals",
      "placement": "before",
      "file": "src/game/dragon/system.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "entities:removals",
      "phase": "PreTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/entities/system.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "entities:thunder",
      "phase": null,
      "anchor": "entities:tick",
      "placement": "after",
      "file": "src/game/entities/system.cpp",
      "phaseResolved": null
    },
    {
      "name": "entities:tick",
      "phase": null,
      "anchor": "mobs:post",
      "placement": "after",
      "file": "src/game/entities/system.cpp",
      "phaseResolved": null
    },
    {
      "name": "entities:tracking",
      "phase": null,
      "anchor": "ramjet:mob_tracking",
      "placement": "before",
      "file": "src/game/entities/system.cpp",
      "phaseResolved": "Tracking"
    },
    {
      "name": "entities:untrack_removed",
      "phase": null,
      "anchor": "mobs:removals",
      "placement": "before",
      "file": "src/game/entities/system.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "gamecmd:locator_bar",
      "phase": "PostTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/gamecmd/waypoints.cpp",
      "phaseResolved": "PostTick"
    },
    {
      "name": "gamecmd:profiler",
      "phase": "PreTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/gamecmd/cmd_profiler.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "gamecmd:profiling",
      "phase": "PreTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/gamecmd/cmd_profiling.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "gamecmd:schedule",
      "phase": "PreTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/gamecmd/functions.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "gamecmd:store_pool",
      "phase": "PostTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/gamecmd/cmd_execute.cpp",
      "phaseResolved": "PostTick"
    },
    {
      "name": "gamecmd:world_border",
      "phase": "PreTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/gamecmd/cmd_worldborder.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "inventory:item_removals",
      "phase": "PreTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/inventory/item_entity.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "inventory:items",
      "phase": "Tick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/inventory/item_entity.cpp",
      "phaseResolved": "Tick"
    },
    {
      "name": "mobs:ai",
      "phase": null,
      "anchor": "vanilla:living_physics",
      "placement": "before",
      "file": "src/game/mobs/service.cpp",
      "phaseResolved": null
    },
    {
      "name": "mobs:autosave",
      "phase": "PostTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/mobs/system.cpp",
      "phaseResolved": "PostTick"
    },
    {
      "name": "mobs:boss_bars",
      "phase": "PostTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/mobs/system.cpp",
      "phaseResolved": "PostTick"
    },
    {
      "name": "mobs:carriers",
      "phase": null,
      "anchor": "mobs:prepare",
      "placement": "before",
      "file": "src/game/mobs/service.cpp",
      "phaseResolved": null
    },
    {
      "name": "mobs:dormancy",
      "phase": "PreTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/mobs/system.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "mobs:entity_io",
      "phase": "PreTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/mobs/system.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "mobs:eyes_of_ender",
      "phase": null,
      "anchor": "mobs:falling_blocks",
      "placement": "after",
      "file": "src/game/mobs/eye_of_ender.cpp",
      "phaseResolved": null
    },
    {
      "name": "mobs:falling_blocks",
      "phase": null,
      "anchor": "mobs:post",
      "placement": "after",
      "file": "src/game/mobs/falling.cpp",
      "phaseResolved": null
    },
    {
      "name": "mobs:game_events",
      "phase": "PostTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/mobs/system.cpp",
      "phaseResolved": "PostTick"
    },
    {
      "name": "mobs:post",
      "phase": null,
      "anchor": "vanilla:living_physics",
      "placement": "after",
      "file": "src/game/mobs/service.cpp",
      "phaseResolved": null
    },
    {
      "name": "mobs:prepare",
      "phase": null,
      "anchor": "vanilla:living_physics",
      "placement": "before",
      "file": "src/game/mobs/service.cpp",
      "phaseResolved": null
    },
    {
      "name": "mobs:push",
      "phase": null,
      "anchor": "mobs:ai",
      "placement": "after",
      "file": "src/game/mobs/service.cpp",
      "phaseResolved": null
    },
    {
      "name": "mobs:removals",
      "phase": "PreTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/mobs/service.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "mobs:riders",
      "phase": null,
      "anchor": "mobs:post",
      "placement": "after",
      "file": "src/game/mobs/service.cpp",
      "phaseResolved": null
    },
    {
      "name": "mobs:spawner",
      "phase": null,
      "anchor": "mobs:ai",
      "placement": "before",
      "file": "src/game/mobs/spawner.cpp",
      "phaseResolved": null
    },
    {
      "name": "mobs:status",
      "phase": "PostTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/mobs/system.cpp",
      "phaseResolved": "PostTick"
    },
    {
      "name": "mobs:untrack_removed",
      "phase": null,
      "anchor": "mobs:removals",
      "placement": "before",
      "file": "src/game/mobs/system.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "ramjet:advancements",
      "phase": "PostTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/advancements/service.cpp",
      "phaseResolved": "PostTick"
    },
    {
      "name": "ramjet:block_entities[per dimension]",
      "phase": "Tick",
      "anchor": null,
      "placement": "append",
      "file": "src/server/main.cpp",
      "phaseResolved": "Tick"
    },
    {
      "name": "ramjet:chunk_integration",
      "phase": "AsyncIntegration",
      "anchor": null,
      "placement": "append",
      "file": "src/game/session/game_server.cpp",
      "phaseResolved": "AsyncIntegration"
    },
    {
      "name": "ramjet:chunk_profile",
      "phase": "PostTick",
      "anchor": null,
      "placement": "append",
      "file": "src/server/main.cpp",
      "phaseResolved": "PostTick"
    },
    {
      "name": "ramjet:chunk_pump",
      "phase": "PreTick",
      "anchor": null,
      "placement": "append",
      "file": "src/server/main.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "ramjet:combat",
      "phase": "Tick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/combat/server_glue.cpp",
      "phaseResolved": "Tick"
    },
    {
      "name": "ramjet:entity_tracking",
      "phase": "Tracking",
      "anchor": null,
      "placement": "append",
      "file": "src/game/tracking/player_tracking.cpp",
      "phaseResolved": "Tracking"
    },
    {
      "name": "ramjet:level_time",
      "phase": "PreTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/session/game_server.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "ramjet:memory_governor",
      "phase": "PreTick",
      "anchor": null,
      "placement": "append",
      "file": "src/server/main.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "ramjet:memory_report",
      "phase": "PostTick",
      "anchor": null,
      "placement": "append",
      "file": "src/server/main.cpp",
      "phaseResolved": "PostTick"
    },
    {
      "name": "ramjet:mob_tracking",
      "phase": "Tracking",
      "anchor": null,
      "placement": "append",
      "file": "src/game/mobs/system.cpp",
      "phaseResolved": "Tracking"
    },
    {
      "name": "ramjet:network_receive",
      "phase": "NetworkReceive",
      "anchor": null,
      "placement": "append",
      "file": "src/game/session/game_server.cpp",
      "phaseResolved": "NetworkReceive"
    },
    {
      "name": "ramjet:network_send",
      "phase": "NetworkSend",
      "anchor": null,
      "placement": "append",
      "file": "src/game/session/game_server.cpp",
      "phaseResolved": "NetworkSend"
    },
    {
      "name": "ramjet:orb_tracking",
      "phase": "Tracking",
      "anchor": null,
      "placement": "append",
      "file": "src/game/session/game_server.cpp",
      "phaseResolved": "Tracking"
    },
    {
      "name": "ramjet:player_sync",
      "phase": "PostTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/session/game_server.cpp",
      "phaseResolved": "PostTick"
    },
    {
      "name": "ramjet:portals",
      "phase": "PostTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/dimension/service.cpp",
      "phaseResolved": "PostTick"
    },
    {
      "name": "ramjet:script_ban_flush",
      "phase": "NetworkSend",
      "anchor": null,
      "placement": "append",
      "file": "src/game/scriptbridge/bridge.cpp",
      "phaseResolved": "NetworkSend"
    },
    {
      "name": "ramjet:script_menu_events",
      "phase": "AsyncIntegration",
      "anchor": null,
      "placement": "append",
      "file": "src/game/scriptbridge/bridge.cpp",
      "phaseResolved": "AsyncIntegration"
    },
    {
      "name": "ramjet:script_sidebar_guard",
      "phase": "AsyncIntegration",
      "anchor": null,
      "placement": "append",
      "file": "src/game/scriptbridge/bridge.cpp",
      "phaseResolved": "AsyncIntegration"
    },
    {
      "name": "ramjet:script_tick_end",
      "phase": "AsyncIntegration",
      "anchor": null,
      "placement": "append",
      "file": "src/game/scriptbridge/bridge.cpp",
      "phaseResolved": "AsyncIntegration"
    },
    {
      "name": "ramjet:script_tick_start",
      "phase": null,
      "anchor": "ramjet:network_receive",
      "placement": "before",
      "file": "src/game/scriptbridge/bridge.cpp",
      "phaseResolved": "NetworkReceive"
    },
    {
      "name": "ramjet:sleep",
      "phase": "Tick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/sleep/sleep_system.cpp",
      "phaseResolved": "Tick"
    },
    {
      "name": "ramjet:spawner_anim",
      "phase": "PreTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/blockentity/spawner_glue.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "ramjet:spectator_camera",
      "phase": "PostTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/session/game_server.cpp",
      "phaseResolved": "PostTick"
    },
    {
      "name": "ramjet:stats",
      "phase": "PostTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/stats/stats_service.cpp",
      "phaseResolved": "PostTick"
    },
    {
      "name": "ramjet:system_profile",
      "phase": "PreTick",
      "anchor": null,
      "placement": "append",
      "file": "src/server/main.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "vehicles:removals",
      "phase": "PreTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/vehicles/system.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "vehicles:snapshot",
      "phase": null,
      "anchor": "mobs:prepare",
      "placement": "before",
      "file": "src/game/vehicles/system.cpp",
      "phaseResolved": null
    },
    {
      "name": "vehicles:tick",
      "phase": null,
      "anchor": "mobs:post",
      "placement": "after",
      "file": "src/game/vehicles/system.cpp",
      "phaseResolved": null
    },
    {
      "name": "vehicles:tracking",
      "phase": null,
      "anchor": "ramjet:mob_tracking",
      "placement": "before",
      "file": "src/game/vehicles/system.cpp",
      "phaseResolved": "Tracking"
    },
    {
      "name": "vehicles:untrack_removed",
      "phase": null,
      "anchor": "mobs:removals",
      "placement": "before",
      "file": "src/game/vehicles/system.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "village:tick",
      "phase": null,
      "anchor": "mobs:riders",
      "placement": "after",
      "file": "src/game/village/service.cpp",
      "phaseResolved": null
    },
    {
      "name": "xp:orb_removals",
      "phase": "PreTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/xp/service.cpp",
      "phaseResolved": "PreTick"
    },
    {
      "name": "xp:orbs",
      "phase": "Tick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/xp/service.cpp",
      "phaseResolved": "Tick"
    },
    {
      "name": "xp:players",
      "phase": "PostTick",
      "anchor": null,
      "placement": "append",
      "file": "src/game/xp/service.cpp",
      "phaseResolved": "PostTick"
    }
  ]
}
