Skip to content

Creating Your First Command

Registering and handling custom commands in Pumpkin with Python is designed to be straightforward and expressive.


1. Quick Example

Here is a complete, minimal Python plugin (main.py) that registers a /hello command with permission checks and sends a response back to the player.

python
from pumpkin_api import (
    Plugin, PluginMetadata, register_plugin,
    permission, command, context, server
)

class HelloCommand:
    def handle(self, sender: command.CommandSender, srv: server.Server, args: command.ConsumedArgs) -> int:
        sender.send_message("Hello from Python Plugin!")
        return 1

class MyPlugin(Plugin):
    def metadata(self) -> PluginMetadata:
        return PluginMetadata(
            name="my_python_plugin",
            version="0.1.0",
            authors=["Developer"],
            description="My first Pumpkin Python plugin"
        )

    def on_load(self, ctx: context.Context) -> None:
        # 1. Register permission node
        ctx.register_permission(permission.Permission(
            node="my_python_plugin:hello",
            description="Allows executing the /hello command",
            default=permission.PermissionDefault.ALLOW,
            children=[]
        ))

        # 2. Build the command tree with aliases & executor
        cmd = command.Command(["hello", "hi"], "Greets the player")
        cmd.execute(HelloCommand())

        # 3. Register the command
        ctx.register_command(cmd, "my_python_plugin:hello")

register_plugin(MyPlugin)

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

Commands in Pumpkin require a permission node. Register it with permission.PermissionDefault.ALLOW to allow execution by default:

python
ctx.register_permission(permission.Permission(
    node="my_python_plugin:hello",
    description="Allows executing the /hello command",
    default=permission.PermissionDefault.ALLOW,
    children=[]
))

Step 2: Build the Command Tree

Create a command.Command instance with primary names and aliases, then attach your handler with .execute(...):

python
cmd = command.Command(["hello", "hi"], "Greets the player")
cmd.execute(HelloCommand())

Step 3: Register with Context

Pass the command tree and permission node string to ctx.register_command:

python
ctx.register_command(cmd, "my_python_plugin:hello")

Next Steps

  • Check out Events to handle player actions and server events in Python.
  • Learn more about Basic Logic.

Released under the MIT License.