Plugin API AutoDoc

AutoDoc: qexed_config_to_mdx

  • Commit: c74f9372d61056392610ce80b3b5d9c8c7194fd0
  • ABI: wasm32-unknown-unknown
  • Encoding: postcard

Runtime ABI

Plugins must export linear memory and an allocator. Except for qexed_plugin_init(), event and query functions read postcard payloads through (ptr: i32, len: i32). Query functions return an i64 where the high 32 bits are the response pointer and the low 32 bits are the response length.

qexed_plugin_sdk::qexed_plugin_memory!();

#[unsafe(no_mangle)]
pub extern "C" fn qexed_plugin_priority() -> i32 { 100 }
  • memory: WASM linear memory export.
  • qexed_plugin_alloc(len: i32) -> i32: Required; the host uses it to write payloads.
  • qexed_plugin_dealloc(ptr: i32, len: i32): Optional; releases buffers written by the host or returned by the plugin.
  • qexed_plugin_priority() -> i32: Optional; larger values run earlier.

Events And Queries

ExportKindPayloadResponseDescription
qexed_plugin_initEvent--Called once after a plugin is loaded and instantiated. Use it for configuration bootstrap, host resource registration, or startup logs.
qexed_plugin_player_joinEventPlayerPayload-Emitted when a player joins the server.
qexed_plugin_player_leaveEventPlayerPayload-Emitted when a player leaves the server.
qexed_plugin_chunk_loadEventChunkPayload-Emitted when a chunk enters the server-side loaded view.
qexed_plugin_chunk_unloadEventChunkPayload-Emitted when a chunk leaves the server-side loaded view.
qexed_plugin_config_reloadEventConfigReloadPayload-Emitted after a config file is loaded or reloaded; the payload contains the config path.
qexed_plugin_language_changeEventLanguagePayload-Emitted when the runtime language changes.
qexed_plugin_mining_speedQueryMiningSpeedQueryMiningSpeedResponseLets plugins adjust mining speed by block, tool, and enchantments.
qexed_plugin_block_dropsQueryBlockDropQueryBlockDropResponseLets plugins replace or append block drops.
qexed_plugin_commandsQuery-PluginCommandDefinitionCollects player command definitions provided by plugins.
qexed_plugin_command_executeQueryPluginCommandQueryPluginCommandResponseCalled when a player runs a plugin command and returns player actions.
qexed_plugin_npc_mutationsQueryNpcMutationQueryNpcMutationResponseLets plugins dynamically add, update, or remove NPCs.
qexed_plugin_npc_interactEvent/QueryNpcInteractPayloadPluginCommandResponseTriggered when a player interacts with an NPC; it can return actions for main-hand, off-hand, and attack events.
qexed_plugin_proxy_connect_resultEventProxyConnectResultPayload-Called after a proxy transfer succeeds or fails.
qexed_plugin_placeholdersQueryPlaceholderQueryPlaceholderResponseResolves plugin placeholders in server text.
qexed_plugin_player_block_stepQueryBlockStepPayloadPluginCommandResponseCalled when a player steps on a block; useful for jump pads, region triggers, and similar logic.
qexed_plugin_player_moveQueryPlayerMovePayloadPluginCommandResponseCalled when a player's position changes.
qexed_plugin_player_inputQueryPlayerInputPayloadPluginCommandResponseCalled when a player's input state changes; useful for mechanics such as double jump.
qexed_plugin_click_detectedEventClickDetectedPayload-Notifies plugins when click detection reports a burst.
qexed_plugin_pathfindingQueryPathfindingQueryPathfindingResponseReserved pathfinding query event; currently prefer the qexed::pathfinding_find host import.
qexed_plugin_custom_entitiesQuery-CustomEntityRegistryResponseRegisters plugin-defined entity types with their backing Minecraft entity type and AI identifier.
qexed_plugin_entity_ai_tickQueryEntityAiTickQueryEntityAiTickResponseCalled during an entity AI tick; plugins may return movement, look-at, or removal operations.

Host Imports

These functions are registered by the server under the qexed import module; prefer the wrappers provided by qexed_plugin_sdk.

NameHost SignatureSDK WrapperDescription
logqexed::log(ptr: i32, len: i32)qexed_plugin_sdk::log(message)Writes a server-side plugin log line.
config_existsqexed::config_exists(ptr: i32, len: i32) -> i32qexed_plugin_sdk::config_exists(path)Checks whether a plugin config file exists.
config_readqexed::config_read(path_ptr: i32, path_len: i32, out_ptr: i32, out_len: i32) -> i64qexed_plugin_sdk::config_read(path)Reads a plugin config file. A negative return value asks the caller to grow the output buffer.
config_writeqexed::config_write(path_ptr: i32, path_len: i32, data_ptr: i32, data_len: i32) -> i32qexed_plugin_sdk::config_write(path, contents)Writes a plugin config file.
economy_register_currencyqexed::economy_register_currency(id_ptr, id_len, name_ptr, name_len, symbol_ptr, symbol_len, fractional_digits) -> i32qexed_plugin_sdk::economy_register_currency(id, name, symbol, fractional_digits)Registers an economy currency.
economy_currency_infoqexed::economy_currency_info(currency_ptr, currency_len, out_ptr, out_len) -> i64qexed_plugin_sdk::economy_currency_info(currency)Reads economy currency information.
economy_balanceqexed::economy_balance(player_ptr, player_len, currency_ptr, currency_len) -> i64qexed_plugin_sdk::economy_balance(player, currency)Reads a player's balance.
economy_set_balanceqexed::economy_set_balance(player_ptr, player_len, currency_ptr, currency_len, amount) -> i64qexed_plugin_sdk::economy_set_balance(player, currency, amount)Sets a player's balance.
economy_depositqexed::economy_deposit(player_ptr, player_len, currency_ptr, currency_len, amount) -> i64qexed_plugin_sdk::economy_deposit(player, currency, amount)Deposits into a player's balance.
economy_withdrawqexed::economy_withdraw(player_ptr, player_len, currency_ptr, currency_len, amount) -> i64qexed_plugin_sdk::economy_withdraw(player, currency, amount)Withdraws from a player's balance.
lottery_rollqexed::lottery_roll(entries_ptr: i32, entries_len: i32, out_ptr: i32, out_len: i32) -> i64qexed_plugin_sdk::lottery_roll(entries)Rolls one weighted random value.
pathfinding_findqexed::pathfinding_find(query_ptr: i32, query_len: i32, out_ptr: i32, out_len: i32) -> i64qexed_plugin_sdk::pathfinding_find(dimension, start, goal, max_nodes)Asks the server pathfinding service for path nodes.

Payload Types

PlayerPayload

Player event payload.

Field/VariantTypeDefaultDescription
uuidString-Player UUID.
usernameString-Username.
entity_idi32-Server entity ID.
languageString""Player language.
dimensionString"minecraft:overworld"Player dimension.

PlayerPayloadOwned

Owned player payload used by query structures that need nested player data.

Field/VariantTypeDefaultDescription
uuidString-Player UUID.
usernameString-Username.
entity_idi32-Server entity ID.
languageString""Player language.
dimensionString"minecraft:overworld"Player dimension.

ChunkPayload

Chunk load/unload event payload.

Field/VariantTypeDefaultDescription
dimensionString-Dimension resource key.
chunk_xi32-Chunk X coordinate.
chunk_zi32-Chunk Z coordinate.

ConfigReloadPayload

Config reload event payload.

Field/VariantTypeDefaultDescription
pathString-Config path.

LanguagePayload

Language change event payload.

Field/VariantTypeDefaultDescription
languageString-Current language.

ItemEnchantment

Vanilla enchantment entry.

Field/VariantTypeDefaultDescription
idString-Enchantment resource key.
leveli32-Enchantment level.

PluginEnchantment

Plugin-defined enchantment entry.

Field/VariantTypeDefaultDescription
idString-Custom enchantment ID.
leveli32-Enchantment level.

MiningSpeedQuery

Mining speed query.

Field/VariantTypeDefaultDescription
block_statei32-Block state ID.
block_nameString-Block resource key.
item_idOption<i32>NoneTool item ID.
enchantmentsVec<ItemEnchantment>[]Vanilla enchantments.
plugin_enchantmentsVec<PluginEnchantment>[]Plugin enchantments.
speedf32-Current mining speed.

MiningSpeedResponse

Mining speed response.

Field/VariantTypeDefaultDescription
speedOption<f32>NoneOverride speed.
multiplierOption<f32>NoneMultiplicative modifier.
addOption<f32>NoneAdditive modifier.

BlockDropPosition

Block position.

Field/VariantTypeDefaultDescription
xi32-X coordinate.
yi32-Y coordinate.
zi32-Z coordinate.

BlockDropQuery

Block drop query.

Field/VariantTypeDefaultDescription
block_statei32-Block state ID.
block_nameString-Block resource key.
positionBlockDropPosition-Block position.
tool_item_idOption<i32>NoneTool item ID.
enchantmentsVec<ItemEnchantment>[]Vanilla enchantments.
plugin_enchantmentsVec<PluginEnchantment>[]Plugin enchantments.
default_item_idOption<i32>NoneDefault drop item ID.

BlockDropResponse

Block drop response.

Field/VariantTypeDefaultDescription
replaceboolfalseWhether to replace default drops.
itemsVec<BlockDropItem>[]Items to append or replace with.

BlockDropItem

Drop item entry.

Field/VariantTypeDefaultDescription
item_idi32-Item ID.
counti321Count.

BlockStepPosition

Block position stepped on by a player.

Field/VariantTypeDefaultDescription
xi32-X coordinate.
yi32-Y coordinate.
zi32-Z coordinate.

PlayerPositionPayload

Player or entity position.

Field/VariantTypeDefaultDescription
xf64-X coordinate.
yf64-Y coordinate.
zf64-Z coordinate.
yawf32-Yaw.
pitchf32-Pitch.
on_groundbool-Whether the entity is on the ground.

BlockStepPayload

Player block-step query.

Field/VariantTypeDefaultDescription
playerPlayerPayloadOwned-Player.
dimensionString-Dimension resource key.
block_statei32-Block state ID.
block_nameString-Block resource key.
positionBlockStepPosition-Block position.
player_positionPlayerPositionPayload-Player position.

PlayerMovePayload

Player movement query.

Field/VariantTypeDefaultDescription
playerPlayerPayloadOwned-Player.
dimensionString-Dimension resource key.
previous_positionPlayerPositionPayload-Previous position.
positionPlayerPositionPayload-Current position.

PlayerInputState

Player input state.

Field/VariantTypeDefaultDescription
forwardbool-Forward key.
backwardbool-Backward key.
leftbool-Left key.
rightbool-Right key.
jumpbool-Jump key.
shiftbool-Sneak key.
sprintbool-Sprint key.

PlayerInputPayload

Player input query.

Field/VariantTypeDefaultDescription
playerPlayerPayloadOwned-Player.
dimensionString-Dimension resource key.
positionPlayerPositionPayload-Player position.
previous_inputPlayerInputState-Previous input state.
inputPlayerInputState-Current input state.

ClickDetectedPayload

Click detection event payload.

Field/VariantTypeDefaultDescription
playerPlayerPayloadOwned-Player.
dimensionString-Dimension resource key.
positionPlayerPositionPayload-Player position.
actionString-Click action.
clicksu32-Clicks inside the window.
window_msu64-Counting window in milliseconds.

PathfindingQuery

Pathfinding query.

Field/VariantTypeDefaultDescription
dimensionString-Dimension resource key.
startBlockDropPosition-Start position.
goalBlockDropPosition-Goal position.
max_nodesusize0Maximum searched node count.

PathfindingResponse

Pathfinding response.

Field/VariantTypeDefaultDescription
foundboolfalseWhether a path was found.
pathVec<BlockDropPosition>[]Path nodes.

PluginCommandDefinition

Plugin command definition.

Field/VariantTypeDefaultDescription
nameString-Command name without slash.
description_keyString""Command description translation key.

PluginCommandQuery

Plugin command execution query.

Field/VariantTypeDefaultDescription
commandString-Command name.
argumentString-Raw argument text.
playerPlayerPayloadOwned-Player executing the command.

PluginCommandResponse

Plugin action response.

Field/VariantTypeDefaultDescription
handledboolfalseWhether the plugin handled the call.
actionsVec<PlayerAction>[]Player actions for the server to run.

ProxyConnectResultPayload

Proxy connection result event payload.

Field/VariantTypeDefaultDescription
playerPlayerPayloadOwned-Player.
target_serverString-Target server.
current_serverString""Current server.
proxy_protocolString""Proxy protocol.
status_codei32-Status code.
statusString-Status text.
successbool-Whether the transfer succeeded.
messageString""Additional message.

PlaceholderQuery

Placeholder resolution query.

Field/VariantTypeDefaultDescription
playerOption<PlayerPayloadOwned>NoneOptional player context.
textString-Text to resolve.
contextVec<PlaceholderContext>[]Additional context.

PlaceholderContext

Placeholder context key/value pair.

Field/VariantTypeDefaultDescription
keyString-Context key.
valueString-Context value.

PlaceholderResponse

Placeholder response.

Field/VariantTypeDefaultDescription
replacementsVec<PlaceholderReplacement>[]Replacements.

PlaceholderReplacement

Placeholder replacement.

Field/VariantTypeDefaultDescription
keyString-Placeholder key.
valueString-Replacement value.

NpcInteractPayload

NPC interaction payload.

Field/VariantTypeDefaultDescription
playerPlayerPayloadOwned-Player.
entityNpcEntityPayload-NPC entity.
actionString-Action type.
handString""Interaction hand.
configured_eventString""Event name configured for the NPC.

NpcEntityPayload

NPC entity payload.

Field/VariantTypeDefaultDescription
keyString-NPC config key.
entity_idi32-Server entity ID.
dimensionString-Dimension resource key.
xf64-X coordinate.
yf64-Y coordinate.
zf64-Z coordinate.
yawf32-Yaw.
pitchf32-Pitch.

NpcMutationQuery

NPC mutation query.

Field/VariantTypeDefaultDescription
reasonString-Reason for the query.

NpcMutationResponse

NPC mutation response.

Field/VariantTypeDefaultDescription
operationsVec<NpcMutationOp>[]Mutation operations.

NpcMutationOp

NPC mutation operation enum: Upsert or Remove.

Field/VariantTypeDefaultDescription
Upsert { npc }NpcUpsert-Adds or updates an NPC.
Remove { key }String-Removes an NPC by key.

NpcUpsert

NPC upsert data.

Field/VariantTypeDefaultDescription
keyString-Stable NPC key.
dimensionString"minecraft:overworld"Dimension resource key.
xf64-X coordinate.
yf64-Y coordinate.
zf64-Z coordinate.
yawf320Yaw.
pitchf320Pitch.
nameString""NPC player name.
display_nameString""Display name.
skin_texturesString""Mojang texture property.
skin_signatureString""Mojang texture signature.
look_at_playersboolfalseWhether the NPC looks at nearby players.
main_hand_eventString"interact"Main-hand interaction event name.
off_hand_eventString"interact_off_hand"Off-hand interaction event name.
attack_eventString"attack"Attack interaction event name.

CustomEntityDefinition

Plugin-defined custom entity definition.

Field/VariantTypeDefaultDescription
idString-Custom entity ID, for example demo:patrol_guard.
entity_typeString"minecraft:armor_stand"Backing Minecraft entity type.
display_nameString""Default display name.
aiString""Default AI identifier, for example plugin:demo_patrol.

CustomEntityRegistryResponse

Custom entity registry response.

Field/VariantTypeDefaultDescription
entitiesVec<CustomEntityDefinition>[]Custom entity definitions.

EntityAiTickQuery

Entity AI tick query.

Field/VariantTypeDefaultDescription
entityEntityAiEntityPayload-Current entity.
nearby_playersVec<EntityAiPlayerPayload>[]Nearby players.
tick_msu64-AI tick interval in milliseconds.

EntityAiEntityPayload

Entity information for an AI tick.

Field/VariantTypeDefaultDescription
keyString-Stable entity key.
entity_idi32-Server entity ID.
entity_typeString-Backing Minecraft entity type.
custom_typeString""Plugin custom entity type.
aiString""AI identifier.
spawn_ruleString""Spawn rule that produced the entity.
dimensionString-Dimension resource key.
positionPlayerPositionPayload-Entity position.

EntityAiPlayerPayload

Nearby player information for an AI tick.

Field/VariantTypeDefaultDescription
playerPlayerPayloadOwned-Player.
positionPlayerPositionPayload-Player position.

EntityAiTickResponse

Entity AI tick response.

Field/VariantTypeDefaultDescription
operationsVec<EntityAiOperation>[]AI operations.

EntityAiOperation

Entity AI operation enum: MoveDelta, LookAt, or Remove.

Field/VariantTypeDefaultDescription
MoveDelta { x, y, z, yaw, pitch }f64 / Option<f32>-Moves the entity by a delta and optionally updates rotation.
LookAt { x, y, z }f64-Makes the entity look at a position.
Removeunit-Removes the entity.

PlayerAction

Server-side action enum for a player.

Field/VariantTypeDefaultDescription
SystemMessage{ text, translate, with, overlay }-Sends a system message.
Teleport{ dimension, x, y, z, yaw, pitch }-Teleports the player.
Transfer{ host, port, message }-Transfers the client connection.
ProxyConnect{ server, message }-Connects through the proxy to a backend server.
OpenMenu{ menu }-Opens a configured menu.
SetPlayersVisible{ visible }-Toggles visibility of other players.
Velocity{ x, y, z, additive }-Sets or adds player velocity.

Minimal Example

use qexed_plugin_sdk::{PlayerPayload, decode_payload};

qexed_plugin_sdk::qexed_plugin_memory!();

#[unsafe(no_mangle)]
pub extern "C" fn qexed_plugin_player_join(ptr: i32, len: i32) {
    let Some(player) = (unsafe { decode_payload::<PlayerPayload>(ptr, len) }) else {
        qexed_plugin_sdk::log("player_join decode failed");
        return;
    };
    qexed_plugin_sdk::log(&format!("{} joined", player.username));
}

See plugins/examples for complete examples. command_npc_demo covers commands, NPCs, placeholders, custom entities, and plugin AI.