Skip to content

Creating Your First Command

Writing commands in C for Pumpkin is low-overhead, fast, and uses C WIT bindings.


1. Quick Example

Here is a complete C plugin file (main.c) that registers a /hello command with permission checks and sends a response back to the player.

c
#include <stdio.h>
#include "pumpkin.h"

void plugin_on_load(pumpkin_context_t ctx) {
    // 1. Register permission node
    pumpkin_permission_t perm = {
        .node = "my_c_plugin:hello",
        .description = "Allows executing the /hello command",
        .default_access = PERMISSION_DEFAULT_ALLOW
    };
    pumpkin_register_permission(ctx, &perm);

    // 2. Build and register command tree
    const char* names[] = {"hello", "hi"};
    pumpkin_command_t cmd = pumpkin_command_new(names, 2, "Greets the player");
    
    pumpkin_register_command(ctx, cmd, "my_c_plugin:hello");
}

int32_t plugin_handle_command(uint32_t command_id, pumpkin_sender_t sender, pumpkin_server_t server) {
    pumpkin_sender_send_message(sender, "Hello from C Plugin!");
    return 1;
}

pumpkin_metadata_t plugin_get_metadata() {
    pumpkin_metadata_t meta = {
        .name = "my_c_plugin",
        .version = "0.1.0",
        .description = "My first Pumpkin C plugin"
    };
    return meta;
}

2. In-Game Preview

Once registered, your command automatically gains client-side autocompletion, syntax validation, and color highlighting in Minecraft:

In-Game Command Autocompletion Preview

3. How It Works

Step-by-Step Breakdown

Step 1: Define the Permission Struct

Populate a pumpkin_permission_t struct and call pumpkin_register_permission:

c
pumpkin_permission_t perm = {
    .node = "my_c_plugin:hello",
    .description = "Allows executing the /hello command",
    .default_access = PERMISSION_DEFAULT_ALLOW
};
pumpkin_register_permission(ctx, &perm);

Step 2: Build the Command Tree

Create the command tree by passing name array and description:

c
const char* names[] = {"hello", "hi"};
pumpkin_command_t cmd = pumpkin_command_new(names, 2, "Greets the player");

Step 3: Register Command & Handle Execution

Pass the command handle to pumpkin_register_command and handle responses inside plugin_handle_command:

c
pumpkin_register_command(ctx, cmd, "my_c_plugin:hello");

Next Steps

Released under the MIT License.