This package provides the TypeScript bindings for building Pumpkin plugins using WebAssembly (Wasm) components.
- Type-safe API: Full TypeScript definitions for all Pumpkin plugin interfaces.
- Easy Build Process: Includes a build script to bundle your TypeScript code and componentize it into a
.wasmfile. - Wasm Components: Built on the WebAssembly Component Model for high performance and portability.
You'll want to download the latest version of the bindings from the CI release.
We don't have stable versions as Pumpkin and its API is still pre-release.
Then npm install the downloaded .tgz. e.g.
npm install pumpkinmc-pumpkin-api-ts-50917277.tgzYou may also choose to install directly from the download URL (after determining it; commit hash changes)
npm install https://github.com/Pumpkin-MC/pumpkin-api-ts/releases/download/CI/pumpkinmc-pumpkin-api-ts-XXXXXXXX.tgz- Create a new TypeScript file (e.g.,
my-plugin.ts). - Extend the
Pluginclass and implement themetadata()method. - Register your plugin using
registerPlugin(). - Add
export * from "@pumpkinmc/pumpkin-api-ts";at the end.
Example:
import { Plugin, registerPlugin } from "@pumpkinmc/pumpkin-api-ts";
import { PluginMetadata } from "pumpkin:plugin/metadata@0.1.0";
import { Context } from "pumpkin:plugin/context@0.1.0";
import { TextComponent } from "pumpkin:plugin/text@0.1.0";
import * as logging from "pumpkin:plugin/logging@0.1.0";
import { PlayerJoinEventData } from "pumpkin:plugin/event@0.1.0";
class MyPlugin extends Plugin {
metadata(): PluginMetadata {
return {
name: "My TypeScript Plugin",
version: "0.1.0",
authors: ["alex"],
description: "A sample plugin written in TypeScript",
dependencies: [],
permissions: [],
};
}
onLoad(ctx: Context): void {
super.onLoad(ctx);
logging.log("info", "Hello from TypeScript plugin!");
this.registerEvent(
ctx,
"player-join-event",
(_srv, evt: PlayerJoinEventData) => {
logging.log("info", `Player ${evt.player.getName()} joined!`);
evt.player
.getWorld()
.broadcastSystemMessage(
TextComponent.text(
`Welcome ${evt.player.getName()} to the server!`,
),
false,
);
},
);
}
}
registerPlugin(new MyPlugin());
export * from "@pumpkinmc/pumpkin-api-ts";To build your plugin into a .wasm component, use the provided build script:
./node_modules/.bin/pumpkin-plugin-build <entry-file.ts> <output-file.wasm>Example:
./node_modules/.bin/pumpkin-plugin-build my-plugin.ts build/my-plugin.wasmFor convience, it's recommended to add a scripts section to your package.json
{
"scripts": {
"build": "pumpkin-plugin-build my-plugin.ts build/my-plugin.wasm"
},
"dependencies": {
...
}
}Execute with npm run build