Skip to content

Writing the basic logic

Plugin Entry Point

In Go, your plugin must implement the api.Plugin interface and register itself in the init() function. You also need to import wit_exports for WebAssembly compatibility.

go
package main

import (
	"github.com/Pumpkin-MC/pumpkin-api-go/api"
	"github.com/Pumpkin-MC/pumpkin-api-go/pkg/pumpkin_plugin_context"
	"github.com/Pumpkin-MC/pumpkin-api-go/pkg/pumpkin_plugin_logging"
	_ "github.com/Pumpkin-MC/pumpkin-api-go/pkg/wit_exports" // Required for WASM exports
)

type MyPlugin struct {
	api.DefaultPlugin
}

func (p *MyPlugin) Metadata() api.Metadata {
	return api.Metadata{
		Name:    "my-go-plugin",
		Version: "0.1.0",
		Authors: []string{"you"},
	}
}

func (p *MyPlugin) OnLoad(ctx *pumpkin_plugin_context.Context) {
	pumpkin_plugin_logging.Log(pumpkin_plugin_logging.LevelInfo(), "Go plugin loaded!")
}

func init() {
	api.RegisterPlugin(&MyPlugin{})
}

func main() {}

Compiling the plugin

To compile your plugin to WebAssembly, you must use TinyGo. The standard Go compiler does not yet support the specific WASI targets required by Pumpkin in the same way.

Run the following command in your project folder:

bash
tinygo build -o my_plugin.wasm -target=wasi main.go

This will generate a my_plugin.wasm file that can be loaded by Pumpkin.

Testing the plugin

Installing a plugin is as simple as putting the plugin binary (.wasm) into the plugins/ folder of your Pumpkin server!

When you start up the server and run the /plugins command, you should see your plugin listed.

Released under the MIT License.