Convert pumpkin-plugin-wit folder to a git submodule

This commit is contained in:
Alexander Medvedev
2026-05-19 18:29:14 +02:00
parent 6f2b137e70
commit 8f562b3d78
34 changed files with 4 additions and 6765 deletions

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "pumpkin-plugin-wit"]
path = pumpkin-plugin-wit
url = https://github.com/Pumpkin-MC/pumpkin-plugin-wit

1
pumpkin-plugin-wit Submodule

Submodule pumpkin-plugin-wit added at 41d8c71c65

View File

@@ -1,400 +0,0 @@
package pumpkin:plugin@0.1.0;
interface bedrock-packets {
use uuid.{ uuid };
record s-animate {
action: string,
runtime-entity-id: string,
boat-rowing-time: option<f32>,
}
record s-client-cache-status {
cache-supported: bool,
}
record s-command-request {
command: string,
command-type: string,
command-uuid: uuid,
request-id: string,
player-actor-unique-id: s64,
is-internal-source: bool,
version: string,
}
record s-container-close {
container-id: u8,
container-type: u8,
server-initiated: bool,
}
record s-interaction {
action: string,
target-runtime-id: string,
position: option<tuple<f64, f64, f64>>,
}
record s-loading-screen {
status: s32,
id: option<s32>,
}
record s-login {
protocol-version: s32,
jwt: list<u8>,
raw-token: list<u8>,
}
record s-modal-form-response {
form-id: s32,
form-data: option<string>,
}
record s-player-action {
runtime-id: s32,
action: string,
block-pos: tuple<s32, s32, s32>,
result-pos: tuple<s32, s32, s32>,
face: s32,
}
record s-player-auth-input {
pitch: f32,
yaw: f32,
position: tuple<f64, f64, f64>,
move-vec: string,
head-yaw: f32,
input-data: string,
input-mode: s32,
play-mode: s32,
interaction-model: s32,
interact-pitch: f32,
interact-yaw: f32,
tick: string,
delta: tuple<f64, f64, f64>,
block-actions: option<list<string>>,
vehicle-rotation: option<string>,
vehicle-unique-id: option<string>,
analog-move: string,
camera-orientation: tuple<f64, f64, f64>,
raw-move: string,
}
record s-connected-ping {
time: s64,
}
record s-connection-request {
client-guid: s64,
time: s64,
security: bool,
}
record s-new-incoming-connection {
server-address: string,
internal-address: string,
ping-time: s64,
pong-time: s64,
}
record s-open-connection-request1 {
magic: string,
protocol-version: u8,
mtu: s32,
}
record s-open-connection-request2 {
magic: string,
server-address: string,
mtu: s32,
client-guid: s64,
}
record s-unconnected-ping {
time: s64,
magic: string,
client-guid: s64,
}
record s-request-chunk-radius {
chunk-radius: s32,
max-radius: u8,
}
record s-request-network-settings {
protocol-version: s32,
}
record s-resource-pack-response {
response: u8,
download-size: s32,
}
record s-set-local-player-as-initialized {
runtime-entity-id: string,
}
record s-text {
needs-translation: bool,
r-type: string,
source-name: string,
message: string,
parameters: list<string>,
xuid: string,
platform-chat-id: string,
filtered-message: option<string>,
}
record c-available-commands {
enum-values: list<string>,
chained-subcommand-values: list<string>,
suffixes: list<string>,
enums: list<string>,
chained-subcommands: list<string>,
commands: list<string>,
soft-enums: list<string>,
constraints: list<string>,
}
record c-chunk-radius-update {
chunk-radius: s32,
}
record c-container-open {
container-id: u8,
container-type: u8,
position: tuple<s32, s32, s32>,
target-entity-id: string,
}
record c-correct-player-move {
prediction-type: u8,
pos: tuple<f64, f64, f64>,
pos-delta: tuple<f64, f64, f64>,
on-ground: bool,
tick: string,
}
record creative-content {
groups: list<string>,
entries: list<string>,
}
record c-disconnect-player {
reason: s32,
skip-message: bool,
message: string,
filtered-message: string,
}
record c-gamerules-changed {
rule-data: string,
}
record c-handshake {
jwt-data: string,
}
record c-inventory-content {
inventory-id: s32,
slots: list<string>,
container-name: u8,
dynamic-id: option<s32>,
storage-item: string,
}
record c-level-chunk {
dimension: s32,
cache-enabled: bool,
chunk: string,
}
record c-level-event {
event-id: s32,
position: tuple<f64, f64, f64>,
data: s32,
}
record c-modal-form-request {
form-id: s32,
form-data: string,
}
record c-move-player {
player-runtime-id: string,
position: tuple<f64, f64, f64>,
pitch: f32,
yaw: f32,
head-yaw: f32,
mode: u8,
on-ground: bool,
riding-runtime-id: string,
tick: string,
}
record c-network-chunk-publisher-update {
pos-for-view: tuple<s32, s32, s32>,
new-radius: s32,
server-build-chunk-list: list<string>,
}
record c-network-settings {
compression-threshold: s32,
compression-method: s32,
client-throttle-enabled: bool,
client-throttle-threshold: u8,
client-throttle-scalar: f32,
}
record c-player-hotbar {
selected-slot: s32,
container-id: u8,
should-select-block: bool,
}
record c-connected-pong {
ping: s64,
pong: s64,
}
record c-connection-request-accepted {
client-address: string,
system-index: s32,
system-addresses: string,
requested-timestamp: s64,
timestamp: s64,
}
record c-incompatible-protocol-version {
protocol-version: u8,
magic: string,
server-guid: s64,
}
record c-open-connection-reply1 {
magic: string,
server-guid: s64,
has-server-security: bool,
mtu: s32,
}
record c-open-connection-reply2 {
magic: string,
server-guid: s64,
client-address: string,
mtu: s32,
security: bool,
}
record c-unconnected-pong {
time: s64,
server-guid: s64,
magic: string,
server-id: string,
}
record c-resource-pack-stack-packet {
resource-pack-required: bool,
resource-packs: list<string>,
game-version: string,
experiments: string,
include-editor-packs: bool,
}
record c-resource-packs-info {
resource-pack-required: bool,
has-addon-packs: bool,
has-scripts: bool,
is-vibrant-visuals-force-disabled: bool,
world-template-id: uuid,
world-template-version: string,
resource-packs: list<string>,
}
record c-set-actor-data {
actor-runtime-id: string,
metadata: string,
synced-properties: string,
tick: string,
}
record c-set-actor-motion {
target-runtime-id: string,
motion: tuple<f64, f64, f64>,
tick: string,
}
record c-set-health {
health: s32,
}
record c-set-player-gamemode {
gamemode: string,
}
record c-set-time {
time: s32,
}
record c-set-title {
action-type: s32,
text: string,
fade-in-duration: s32,
remain-duration: s32,
fade-out-duration: s32,
xuid: string,
platform-online-id: string,
filtered-message: string,
}
record c-start-game {
entity-id: string,
runtime-entity-id: string,
player-gamemode: string,
position: tuple<f64, f64, f64>,
pitch: f32,
yaw: f32,
level-settings: string,
level-id: string,
level-name: string,
premium-world-template-id: string,
is-trial: bool,
rewind-history-size: s32,
server-authoritative-block-breaking: bool,
current-level-time: s64,
enchantment-seed: s32,
block-properties-size: s32,
multiplayer-correlation-id: string,
enable-itemstack-net-manager: bool,
server-version: string,
compound-id: u8,
compound-len: s32,
compound-end: u8,
block-registry-checksum: s64,
world-template-id: uuid,
enable-clientside-generation: bool,
blocknetwork-ids-are-hashed: bool,
server-auth-sounds: bool,
server-join-information: option<string>,
telemetry: string,
}
record c-update-abilities {
target-player-raw-id: s64,
player-permission: u8,
command-permission: u8,
layers: list<string>,
}
record c-update-attributes {
runtime-id: string,
attributes: list<string>,
player-tick: string,
}
variant serverbound-packet {
s-animate(s-animate),
s-client-cache-status(s-client-cache-status),
s-command-request(s-command-request),
s-container-close(s-container-close),
s-interaction(s-interaction),
s-loading-screen(s-loading-screen),
s-login(s-login),
s-modal-form-response(s-modal-form-response),
s-player-action(s-player-action),
s-player-auth-input(s-player-auth-input),
s-connected-ping(s-connected-ping),
s-connection-request(s-connection-request),
s-new-incoming-connection(s-new-incoming-connection),
s-disconnect,
s-open-connection-request1(s-open-connection-request1),
s-open-connection-request2(s-open-connection-request2),
s-unconnected-ping(s-unconnected-ping),
s-request-chunk-radius(s-request-chunk-radius),
s-request-network-settings(s-request-network-settings),
s-resource-pack-response(s-resource-pack-response),
s-set-local-player-as-initialized(s-set-local-player-as-initialized),
s-text(s-text),
}
variant clientbound-packet {
c-available-commands(c-available-commands),
c-chunk-radius-update(c-chunk-radius-update),
c-container-open(c-container-open),
c-correct-player-move(c-correct-player-move),
creative-content(creative-content),
c-disconnect-player(c-disconnect-player),
c-gamerules-changed(c-gamerules-changed),
c-handshake(c-handshake),
c-inventory-content(c-inventory-content),
c-level-chunk(c-level-chunk),
c-level-event(c-level-event),
c-modal-form-request(c-modal-form-request),
c-move-player(c-move-player),
c-network-chunk-publisher-update(c-network-chunk-publisher-update),
c-network-settings(c-network-settings),
c-player-hotbar(c-player-hotbar),
c-connected-pong(c-connected-pong),
c-connection-request-accepted(c-connection-request-accepted),
c-incompatible-protocol-version(c-incompatible-protocol-version),
c-open-connection-reply1(c-open-connection-reply1),
c-open-connection-reply2(c-open-connection-reply2),
c-unconnected-pong(c-unconnected-pong),
c-resource-pack-stack-packet(c-resource-pack-stack-packet),
c-resource-packs-info(c-resource-packs-info),
c-set-actor-data(c-set-actor-data),
c-set-actor-motion(c-set-actor-motion),
c-set-health(c-set-health),
c-set-player-gamemode(c-set-player-gamemode),
c-set-time(c-set-time),
c-set-title(c-set-title),
c-start-game(c-start-game),
c-update-abilities(c-update-abilities),
c-update-attributes(c-update-attributes),
}
}

View File

@@ -1,71 +0,0 @@
package pumpkin:plugin@0.1.0;
interface biomes {
enum biome {
badlands,
bamboo-jungle,
basalt-deltas,
beach,
birch-forest,
cherry-grove,
cold-ocean,
crimson-forest,
dark-forest,
deep-cold-ocean,
deep-dark,
deep-frozen-ocean,
deep-lukewarm-ocean,
deep-ocean,
desert,
dripstone-caves,
end-barrens,
end-highlands,
end-midlands,
eroded-badlands,
flower-forest,
forest,
frozen-ocean,
frozen-peaks,
frozen-river,
grove,
ice-spikes,
jagged-peaks,
jungle,
lukewarm-ocean,
lush-caves,
mangrove-swamp,
meadow,
mushroom-fields,
nether-wastes,
ocean,
old-growth-birch-forest,
old-growth-pine-taiga,
old-growth-spruce-taiga,
pale-garden,
plains,
river,
savanna,
savanna-plateau,
small-end-islands,
snowy-beach,
snowy-plains,
snowy-slopes,
snowy-taiga,
soul-sand-valley,
sparse-jungle,
stony-peaks,
stony-shore,
sunflower-plains,
swamp,
taiga,
the-end,
the-void,
warm-ocean,
warped-forest,
windswept-forest,
windswept-gravelly-hills,
windswept-hills,
windswept-savanna,
wooded-badlands,
}
}

View File

@@ -1,84 +0,0 @@
interface block-entity {
use common.{block-pos};
resource block-entity {
resource-location: func() -> string;
get-position: func() -> block-pos;
get-id: func() -> u32;
is-dirty: func() -> bool;
clear-dirty: func();
}
resource command-block-entity {
get-block-entity: func () -> block-entity;
last-output: func() -> string;
track-output: func() -> bool;
success-count: func() -> u32;
command: func() -> string;
auto: func() -> bool;
condition-met: func() -> bool;
powered: func() -> bool;
}
enum dye-color {
white,
orange,
magenta,
light-blue,
yellow,
lime,
pink,
gray,
light-gray,
cyan,
purple,
blue,
brown,
green,
red,
black,
}
record sign-text {
messages: list<string>,
color: dye-color,
has-glowing-text: bool,
}
resource sign-block-entity {
get-block-entity: func() -> block-entity;
get-front-text: func() -> sign-text;
set-front-text: func(text: sign-text);
get-back-text: func() -> sign-text;
set-back-text: func(text: sign-text);
is-waxed: func() -> bool;
set-waxed: func(waxed: bool);
}
resource jukebox-block-entity {
get-block-entity: func() -> block-entity;
is-playing: func() -> bool;
stop-playing: func();
start-playing: func(length-in-ticks: u64);
}
resource chest-block-entity {
get-block-entity: func() -> block-entity;
viewer-count: func() -> u32;
}
resource mob-spawner-block-entity {
get-block-entity: func() -> block-entity;
get-spawn-count: func() -> s32;
get-spawn-range: func() -> s32;
get-delay: func() -> s32;
}
variant block-entity-type {
command-block-entity(command-block-entity),
sign-block-entity(sign-block-entity),
jukebox-block-entity(jukebox-block-entity),
chest-block-entity(chest-block-entity),
mob-spawner-block-entity(mob-spawner-block-entity),
}
}

View File

@@ -1,83 +0,0 @@
interface boss-bar {
use text.{text-component};
use player.{player};
/// Represents the color of a boss bar.
enum boss-bar-color {
pink,
blue,
red,
green,
yellow,
purple,
white,
}
/// Represents the notches/divisions of a boss bar.
enum boss-bar-division {
no-division,
notches-6,
notches-10,
notches-12,
notches-20,
}
/// Metadata flags that can be toggled on a boss bar.
record boss-bar-metadata {
/// Darkens the sky for players who see the boss bar.
darken-sky: bool,
/// If true, the bar is considered a "dragon bar" (used for Ender Dragon).
dragon-bar: bool,
/// If true, fog is created around the players who see the boss bar.
create-fog: bool,
}
/// Represents a boss bar that can be shown to players.
resource boss-bar {
/// Creates a new boss bar.
constructor(title: text-component, color: boss-bar-color, division: boss-bar-division);
/// Returns the title of this boss bar.
get-title: func() -> text-component;
/// Sets the title of this boss bar.
set-title: func(title: text-component);
/// Returns the health (0.0 to 1.0) of this boss bar.
get-health: func() -> f32;
/// Sets the health (0.0 to 1.0) of this boss bar.
set-health: func(health: f32);
/// Returns the color of this boss bar.
get-color: func() -> boss-bar-color;
/// Sets the color of this boss bar.
set-color: func(color: boss-bar-color);
/// Returns the division of this boss bar.
get-division: func() -> boss-bar-division;
/// Sets the division of this boss bar.
set-division: func(division: boss-bar-division);
/// Returns the currently active metadata on this boss bar.
get-metadata: func() -> boss-bar-metadata;
/// Updates the metadata on this boss bar.
set-metadata: func(metadata: boss-bar-metadata);
/// Adds a player to this boss bar, making it visible to them.
add-player: func(player: player);
/// Removes a player from this boss bar, hiding it from them.
remove-player: func(player: player);
/// Returns a list of all players currently seeing this boss bar.
get-players: func() -> list<player>;
/// Removes this boss bar from all players and cleans it up.
remove-all: func();
}
}

View File

@@ -1,224 +0,0 @@
interface command {
use %world.{%world, entity};
use player.{player};
use block-entity.{command-block-entity};
use common.{position, block-pos, locale, game-mode};
use item-stack.{item-stack};
use server.{server, difficulty};
use text.{text-component};
variant command-error {
invalid-consumption(option<string>),
invalid-requirement,
permission-denied,
command-failed(text-component),
}
resource command-node {
literal: static func(name: string) -> command-node;
argument: static func(name: string, %type: argument-type) -> command-node;
then: func(node: command-node);
execute-with-handler-id: func(handler-id: u32);
require-with-handler-id: func(handler-id: u32);
}
variant argument-type {
%bool,
float(tuple<option<f32>, option<f32>>),
double(tuple<option<f64>, option<f64>>),
integer(tuple<option<s32>, option<s32>>),
long(tuple<option<s64>, option<s64>>),
%string(string-type),
entities,
entity,
players,
game-profile,
block-pos,
column-pos,
position3d,
position2d,
block-state,
block-predicate,
item,
item-predicate,
color,
component,
style,
message,
nbt-compound-tag,
nbt-tag,
nbt-path,
objective,
objective-criteria,
operation,
particle,
angle,
rotation,
scoreboard-slot,
score-holder(bool),
swizzle,
team,
item-slot,
resource-location,
mob-effect,
function,
entity-anchor,
int-range,
float-range,
dimension,
gamemode,
difficulty,
time(option<s32>),
%resource(string),
resource-or-tag(string),
resource-or-tag-key(string),
resource-key(string),
template-mirror,
template-rotation,
uuid,
}
record entity-argument {
single: bool,
players-only: bool,
}
variant command-sender-type {
rcon,
console,
player(player),
command-block(tuple<command-block-entity, %world>),
dummy,
}
enum permission-level {
zero,
one,
two,
three,
four,
}
resource command-sender {
get-command-sender-type: func() -> command-sender-type;
get-name: func() -> string;
send-message: func(text: text-component);
send-system-message: func(text: text-component);
send-error: func(text: text-component);
set-success-count: func(count: s32);
is-player: func() -> bool;
is-console: func() -> bool;
as-player: func() -> option<player>;
permission-level: func() -> permission-level;
has-permission-level: func(level: permission-level) -> bool;
has-permission: func(server: borrow<server>, node: string) -> bool;
position: func() -> option<position>;
%world: func() -> option<%world>;
get-locale: func() -> locale;
should-receive-feedback: func() -> bool;
should-broadcast-console-to-ops: func() -> bool;
should-track-output: func() -> bool;
}
enum string-type {
single-word,
quotable,
greedy,
}
enum suggestion-type {
ask-server,
all-recipes,
available-sounds,
available-biomes,
summonable-entities,
}
variant arg {
simple(string),
msg(string),
%bool(bool),
item(string),
item-predicate(string),
resource-location(string),
block(string),
block-predicate(string),
time(s32),
num(result<number, not-in-bounds>),
block-pos(block-pos),
pos3d(tuple<f64, f64, f64>),
pos2d(tuple<f64, f64>),
rotation(tuple<f32, bool, f32, bool>),
gamemode(game-mode),
difficulty(difficulty),
players(list<player>),
particle(string),
text-component(text-component),
bossbar-color(bossbar-color),
bossbar-style(bossbar-style),
sound-category(sound-category),
damage-type(string),
effect(string),
enchantment(string),
entity-anchor(entity-anchor),
}
enum bossbar-color {
pink,
blue,
red,
green,
yellow,
purple,
white,
}
enum bossbar-style {
no-division,
notches6,
notches10,
notches12,
notches20,
}
enum sound-category {
master,
music,
records,
weather,
blocks,
hostile,
neutral,
players,
ambient,
voice,
}
enum entity-anchor {
eyes,
feet,
}
variant number {
float64(f64),
float32(f32),
int32(s32),
int64(s64),
}
variant not-in-bounds {
lower-bound(tuple<number, number>),
upper-bound(tuple<number, number>),
}
resource consumed-args {
get-value: func(key: string) -> arg;
}
resource command {
/// First name is primary, rest are aliases
constructor(names: list<string>, description: string);
then: func(node: command-node);
execute-with-handler-id: func(handler-id: u32);
}
}

View File

@@ -1,233 +0,0 @@
/// Provides common types and utilities used across the entire plugin API.
interface common {
/// Serialized text component as a postcard byte array.
/// @deprecated Use the text-component resource from the text interface instead.
type raw-text-component = list<u8>;
/// A position in the world grid (integers).
record block-pos {
x: s32,
y: s32,
z: s32,
}
/// A precise coordinate in the world (floats).
type position = tuple<f64, f64, f64>;
/// Represents the hands of a player.
enum hand {
left,
right,
}
/// Represents the game modes available in Minecraft.
enum game-mode {
survival,
creative,
adventure,
spectator,
}
/// The 16 base Minecraft colors.
enum named-color {
black,
dark-blue,
dark-green,
dark-aqua,
dark-red,
dark-purple,
gold,
gray,
dark-gray,
blue,
green,
aqua,
red,
light-purple,
yellow,
white,
}
/// An RGB color represented by its red, green, and blue components.
record rgb-color {
r: u8,
g: u8,
b: u8,
}
/// An ARGB color with alpha (transparency) channel.
record argb-color {
a: u8,
r: u8,
g: u8,
b: u8,
}
/// Represents the type of click interaction in a GUI.
enum click-type {
left,
right,
shift-left,
shift-right,
middle,
drop,
control-drop,
double-click,
number-key,
unknown,
}
/// Represents the various poses an entity can be in.
enum entity-pose {
standing,
fall-flying,
sleeping,
swimming,
spin-attack,
crouching,
long-jumping,
dying,
croaking,
using-tongue,
sitting,
roaring,
sniffing,
emerging,
digging,
sliding,
shooting,
inhaling,
}
/// All Minecraft-supported locales.
enum locale {
af-za,
ar-sa,
ast-es,
az-az,
ba-ru,
bar,
be-by,
bg-bg,
br-fr,
brb,
bs-ba,
ca-es,
cs-cz,
cy-gb,
da-dk,
de-at,
de-ch,
de-de,
el-gr,
en-au,
en-ca,
en-gb,
en-nz,
en-pt,
en-ud,
en-us,
enp,
enws,
eo-uy,
es-ar,
es-cl,
es-ec,
es-es,
es-mx,
es-uy,
es-ve,
esan,
et-ee,
eu-es,
fa-ir,
fi-fi,
fil-ph,
fo-fo,
fr-ca,
fr-fr,
fra-de,
fur-it,
fy-nl,
ga-ie,
gd-gb,
gl-es,
haw-us,
he-il,
hi-in,
hr-hr,
hu-hu,
hy-am,
id-id,
ig-ng,
io-en,
is-is,
isv,
it-it,
ja-jp,
jbo-en,
ka-ge,
kk-kz,
kn-in,
ko-kr,
ksh,
kw-gb,
la-la,
lb-lu,
li-li,
lmo,
lo-la,
lol-us,
lt-lt,
lv-lv,
lzh,
mk-mk,
mn-mn,
ms-my,
mt-mt,
nah,
nds-de,
nl-be,
nl-nl,
nn-no,
no-no,
oc-fr,
ovd,
pl-pl,
pt-br,
pt-pt,
qya-aa,
ro-ro,
rpr,
ru-ru,
ry-ua,
sah-sah,
se-no,
sk-sk,
sl-si,
so-so,
sq-al,
sr-cs,
sr-sp,
sv-se,
sxu,
szl,
ta-in,
th-th,
tl-ph,
tlh-aa,
tok,
tr-tr,
tt-ru,
uk-ua,
val-es,
vec-it,
vi-vn,
yi-de,
yo-ng,
zh-cn,
zh-hk,
zh-tw,
zlm-arab,
}
}

View File

@@ -1,33 +0,0 @@
/// The core context provided to a plugin during initialization and event handling.
interface context {
use server.{server};
use event.{event-type, event-priority};
use command.{command};
use permission.{permission};
/// A contextual handle for plugin-related operations.
resource context {
/// Registers a handler for a specific event.
///
/// * `handler-id`: Unique ID for the event handler.
/// * `event-type`: The type of event to listen for.
/// * `event-priority`: When this handler should be called relative to others.
/// * `blocking`: Whether the event should wait for this handler to finish.
register-event: func(handler-id: u32, event-type: event-type, event-priority: event-priority, blocking: bool);
/// Registers a new command.
///
/// * `command`: The command definition.
/// * `permission`: The required permission node to execute this command.
register-command: func(command: command, permission: string);
/// Registers a permission node with the server.
register-permission: func(permission: permission) -> result<_, string>;
/// Returns the path to the plugin's private data folder.
get-data-folder: func() -> string;
/// Returns the global server instance.
get-server: func() -> server;
}
}

View File

@@ -1,116 +0,0 @@
package pumpkin:plugin@0.1.0;
interface data-components {
enum data-component {
custom-data,
max-stack-size,
max-damage,
damage,
unbreakable,
use-effects,
custom-name,
minimum-attack-charge,
damage-type,
item-name,
item-model,
lore,
rarity,
enchantments,
can-place-on,
can-break,
attribute-modifiers,
custom-model-data,
tooltip-display,
repair-cost,
creative-slot-lock,
enchantment-glint-override,
intangible-projectile,
food,
consumable,
use-remainder,
use-cooldown,
damage-resistant,
tool,
weapon,
attack-range,
enchantable,
equippable,
repairable,
glider,
tooltip-style,
death-protection,
blocks-attacks,
piercing-weapon,
kinetic-weapon,
swing-animation,
additional-trade-cost,
stored-enchantments,
dye,
dyed-color,
map-color,
map-id,
map-decorations,
map-post-processing,
charged-projectiles,
bundle-contents,
potion-contents,
potion-duration-scale,
suspicious-stew-effects,
writable-book-content,
written-book-content,
trim,
debug-stick-state,
entity-data,
bucket-entity-data,
block-entity-data,
instrument,
provides-trim-material,
ominous-bottle-amplifier,
jukebox-playable,
provides-banner-patterns,
recipes,
lodestone-tracker,
firework-explosion,
fireworks,
profile,
note-block-sound,
banner-patterns,
base-color,
pot-decorations,
container,
block-state,
bees,
lock,
container-loot,
break-sound,
villager-variant,
wolf-variant,
wolf-sound-variant,
wolf-collar,
fox-variant,
salmon-size,
parrot-variant,
tropical-fish-pattern,
tropical-fish-base-color,
tropical-fish-pattern-color,
mooshroom-variant,
rabbit-variant,
pig-variant,
pig-sound-variant,
cow-variant,
cow-sound-variant,
chicken-variant,
chicken-sound-variant,
zombie-nautilus-variant,
frog-variant,
horse-variant,
painting-variant,
llama-variant,
axolotl-variant,
cat-variant,
cat-sound-variant,
cat-collar,
sheep-color,
shulker-color,
}
}

View File

@@ -1,49 +0,0 @@
package pumpkin:plugin@0.1.0;
interface enchantments {
enum enchantment {
aqua-affinity,
bane-of-arthropods,
binding-curse,
blast-protection,
breach,
channeling,
density,
depth-strider,
efficiency,
feather-falling,
fire-aspect,
fire-protection,
flame,
fortune,
frost-walker,
impaling,
infinity,
knockback,
looting,
loyalty,
luck-of-the-sea,
lunge,
lure,
mending,
multishot,
piercing,
power,
projectile-protection,
protection,
punch,
quick-charge,
respiration,
riptide,
sharpness,
silk-touch,
smite,
soul-speed,
sweeping-edge,
swift-sneak,
thorns,
unbreaking,
vanishing-curse,
wind-burst,
}
}

View File

@@ -1,163 +0,0 @@
package pumpkin:plugin@0.1.0;
interface entity-types {
enum entity-type {
acacia-boat,
acacia-chest-boat,
allay,
area-effect-cloud,
armadillo,
armor-stand,
arrow,
axolotl,
bamboo-chest-raft,
bamboo-raft,
bat,
bee,
birch-boat,
birch-chest-boat,
blaze,
block-display,
bogged,
breeze,
breeze-wind-charge,
camel,
camel-husk,
cat,
cave-spider,
cherry-boat,
cherry-chest-boat,
chest-minecart,
chicken,
cod,
command-block-minecart,
copper-golem,
cow,
creaking,
creeper,
dark-oak-boat,
dark-oak-chest-boat,
dolphin,
donkey,
dragon-fireball,
drowned,
egg,
elder-guardian,
end-crystal,
ender-dragon,
ender-pearl,
enderman,
endermite,
evoker,
evoker-fangs,
experience-bottle,
experience-orb,
eye-of-ender,
falling-block,
fireball,
firework-rocket,
fishing-bobber,
fox,
frog,
furnace-minecart,
ghast,
giant,
glow-item-frame,
glow-squid,
goat,
guardian,
happy-ghast,
hoglin,
hopper-minecart,
horse,
husk,
illusioner,
interaction,
iron-golem,
item,
item-display,
item-frame,
jungle-boat,
jungle-chest-boat,
leash-knot,
lightning-bolt,
lingering-potion,
llama,
llama-spit,
magma-cube,
mangrove-boat,
mangrove-chest-boat,
mannequin,
marker,
minecart,
mooshroom,
mule,
nautilus,
oak-boat,
oak-chest-boat,
ocelot,
ominous-item-spawner,
painting,
pale-oak-boat,
pale-oak-chest-boat,
panda,
parched,
parrot,
phantom,
pig,
piglin,
piglin-brute,
pillager,
player,
polar-bear,
pufferfish,
rabbit,
ravager,
salmon,
sheep,
shulker,
shulker-bullet,
silverfish,
skeleton,
skeleton-horse,
slime,
small-fireball,
sniffer,
snow-golem,
snowball,
spawner-minecart,
spectral-arrow,
spider,
splash-potion,
spruce-boat,
spruce-chest-boat,
squid,
stray,
strider,
tadpole,
text-display,
tnt,
tnt-minecart,
trader-llama,
trident,
tropical-fish,
turtle,
vex,
villager,
vindicator,
wandering-trader,
warden,
wind-charge,
witch,
wither,
wither-skeleton,
wither-skull,
wolf,
zoglin,
zombie,
zombie-horse,
zombie-nautilus,
zombie-villager,
zombified-piglin,
}
}

View File

@@ -1 +0,0 @@
interface entity { use %world.{entity, raycast-result, block-direction}; }

View File

@@ -1,392 +0,0 @@
interface event {
use common.{block-pos, game-mode, hand, position, click-type};
use item-stack.{item-stack};
use player.{player};
use text.{text-component};
use %world.{%world};
use java-packets.{serverbound-packet as java-serverbound-packet, clientbound-packet as java-clientbound-packet};
use bedrock-packets.{serverbound-packet as bedrock-serverbound-packet, clientbound-packet as bedrock-clientbound-packet};
use uuid.{uuid};
variant serverbound-packet {
java(java-serverbound-packet),
bedrock(bedrock-serverbound-packet),
}
variant clientbound-packet {
java(java-clientbound-packet),
bedrock(bedrock-clientbound-packet),
}
enum event-priority {
highest,
high,
normal,
low,
lowest,
}
record player-join-event-data {
player: player,
join-message: text-component,
cancelled: bool
}
record player-leave-event-data {
player: player,
leave-message: text-component,
cancelled: bool
}
record player-login-event-data {
player: player,
kick-message: text-component,
cancelled: bool
}
record player-chat-event-data {
player: player,
message: string,
recipients: list<player>,
cancelled: bool
}
record player-command-send-event-data {
player: player,
command: string,
cancelled: bool
}
record player-permission-check-event-data {
player: player,
permission: string,
permission-result: bool
}
record player-move-event-data {
player: player,
from-position: position,
to-position: position,
cancelled: bool
}
record player-teleport-event-data {
player: player,
from-position: position,
to-position: position,
cancelled: bool
}
record player-change-world-event-data {
player: player,
previous-world: %world,
new-world: %world,
position: position,
yaw: f32,
pitch: f32,
cancelled: bool
}
record player-exp-change-event-data {
player: player,
amount: s32
}
record player-item-held-event-data {
player: player,
previous-slot: u8,
new-slot: u8,
cancelled: bool
}
record player-changed-main-hand-event-data {
player: player,
main-hand: hand
}
record player-gamemode-change-event-data {
player: player,
previous-gamemode: game-mode,
new-gamemode: game-mode,
cancelled: bool
}
record player-custom-payload-event-data {
player: player,
channel: string,
data: list<u8>
}
enum player-fish-state {
fishing,
caught-fish,
caught-entity,
in-ground,
failed-attempt,
reel-in,
bite,
}
record player-fish-event-data {
player: player,
caught-uuid: option<uuid>,
caught-type: string,
hook-uuid: uuid,
state: player-fish-state,
hand: hand,
exp-to-drop: s32,
cancelled: bool
}
record player-egg-throw-event-data {
player: player,
egg-uuid: uuid,
hatching: bool,
num-hatches: u8,
hatching-type: string,
cancelled: bool
}
enum entity-interaction-action {
interact,
attack,
interact-at,
}
enum interact-action {
left-click-block,
left-click-air,
right-click-air,
right-click-block,
}
record player-interact-event-data {
player: player,
action: interact-action,
clicked-pos: option<block-pos>,
block: string,
cancelled: bool
}
record player-toggle-sneak-event-data {
player: player,
is-sneaking: bool,
cancelled: bool
}
record player-toggle-flight-event-data {
player: player,
is-flying: bool,
cancelled: bool
}
record player-toggle-sprint-event-data {
player: player,
is-sprinting: bool,
cancelled: bool
}
record player-interact-unknown-entity-event-data {
player: player,
entity-id: s32,
action: entity-interaction-action,
cancelled: bool
}
record inventory-click-event-data {
player: player,
window-type: option<string>,
click-type: click-type,
slot: s16,
raw-slot: s16,
clicked-item: option<item-stack>,
cursor: option<item-stack>,
hotbar-button: s32,
cancelled: bool
}
record inventory-close-event-data {
player: player,
window-type: option<string>
}
record block-redstone-event-data {
target-world: %world,
state-id: u16,
block-pos: block-pos,
old-current: s32,
new-current: s32,
cancelled: bool
}
record block-break-event-data {
player: option<player>,
block: string,
block-pos: block-pos,
exp: u32,
should-drop: bool,
cancelled: bool
}
record block-burn-event-data {
igniting-block: string,
block: string,
cancelled: bool
}
record block-can-build-event-data {
block-to-build: string,
buildable: bool,
player: player,
block: string,
cancelled: bool
}
record block-grow-event-data {
target-world: %world,
old-block: string,
old-state-id: u16,
new-block: string,
new-state-id: u16,
block-pos: block-pos,
cancelled: bool
}
record block-place-event-data {
player: player,
block-placed: string,
block-placed-against: string,
block-pos: block-pos,
can-build: bool,
cancelled: bool
}
record bedrock-form-response-event-data {
player: player,
form-id: u32,
response-data: option<string>,
}
record custom-click-action-event-data {
player: player,
id: string,
payload: option<list<u8>>,
}
record server-command-event-data {
command: string,
cancelled: bool
}
record spawn-change-event-data {
target-world: %world,
previous-position: block-pos,
previous-yaw: f32,
previous-pitch: f32,
new-position: block-pos,
new-yaw: f32,
new-pitch: f32
}
record server-broadcast-event-data {
message: text-component,
sender: text-component,
cancelled: bool
}
record server-tick-start-event-data {
tick: s32
}
record packet-received-event-data {
player: player,
packet: serverbound-packet,
cancelled: bool
}
record packet-sent-event-data {
player: player,
packet: clientbound-packet,
cancelled: bool
}
enum event-type {
player-join-event,
player-leave-event,
player-login-event,
player-chat-event,
player-command-send-event,
player-permission-check-event,
player-move-event,
player-teleport-event,
player-change-world-event,
player-exp-change-event,
player-item-held-event,
player-changed-main-hand-event,
player-gamemode-change-event,
player-custom-payload-event,
player-fish-event,
player-egg-throw-event,
player-interact-unknown-entity-event,
player-interact-event,
player-toggle-sneak-event,
player-toggle-flight-event,
player-toggle-sprint-event,
inventory-click-event,
inventory-close-event,
block-redstone-event,
block-break-event,
block-burn-event,
block-can-build-event,
block-grow-event,
block-place-event,
bedrock-form-response-event,
custom-click-action-event,
server-command-event,
spawn-change-event,
server-broadcast-event,
server-tick-start-event,
packet-received-event,
packet-sent-event,
}
variant event {
player-join-event(player-join-event-data),
player-leave-event(player-leave-event-data),
player-login-event(player-login-event-data),
player-chat-event(player-chat-event-data),
player-command-send-event(player-command-send-event-data),
player-permission-check-event(player-permission-check-event-data),
player-move-event(player-move-event-data),
player-teleport-event(player-teleport-event-data),
player-change-world-event(player-change-world-event-data),
player-exp-change-event(player-exp-change-event-data),
player-item-held-event(player-item-held-event-data),
player-changed-main-hand-event(player-changed-main-hand-event-data),
player-gamemode-change-event(player-gamemode-change-event-data),
player-custom-payload-event(player-custom-payload-event-data),
player-fish-event(player-fish-event-data),
player-egg-throw-event(player-egg-throw-event-data),
player-interact-unknown-entity-event(player-interact-unknown-entity-event-data),
player-interact-event(player-interact-event-data),
player-toggle-sneak-event(player-toggle-sneak-event-data),
player-toggle-flight-event(player-toggle-flight-event-data),
player-toggle-sprint-event(player-toggle-sprint-event-data),
inventory-click-event(inventory-click-event-data),
inventory-close-event(inventory-close-event-data),
block-redstone-event(block-redstone-event-data),
block-break-event(block-break-event-data),
block-burn-event(block-burn-event-data),
block-can-build-event(block-can-build-event-data),
block-grow-event(block-grow-event-data),
block-place-event(block-place-event-data),
bedrock-form-response-event(bedrock-form-response-event-data),
custom-click-action-event(custom-click-action-event-data),
server-command-event(server-command-event-data),
spawn-change-event(spawn-change-event-data),
server-broadcast-event(server-broadcast-event-data),
server-tick-start-event(server-tick-start-event-data),
packet-received-event(packet-received-event-data),
packet-sent-event(packet-sent-event-data),
}
}

View File

@@ -1,51 +0,0 @@
interface forms {
use text.{text-component};
enum image-type {
url,
path,
}
record form-image {
%type: image-type,
data: string,
}
record simple-form-button {
text: text-component,
image: option<form-image>,
}
record simple-form {
title: text-component,
content: text-component,
buttons: list<simple-form-button>,
}
record modal-form {
title: text-component,
content: text-component,
button1: text-component,
button2: text-component,
}
variant custom-form-element {
label(text-component),
toggle(tuple<text-component, bool>),
slider(tuple<text-component, f32, f32, f32, f32>), // text, min, max, step, default
step-slider(tuple<text-component, list<string>, u32>), // text, steps, default
dropdown(tuple<text-component, list<string>, u32>), // text, options, default
input(tuple<text-component, string, string>), // text, placeholder, default
}
record custom-form {
title: text-component,
elements: list<custom-form-element>,
}
variant form {
simple(simple-form),
modal(modal-form),
custom(custom-form),
}
}

View File

@@ -1,63 +0,0 @@
interface gui {
use text.{text-component};
use common.{click-type};
use item-stack.{item-stack};
enum gui-type {
generic-9x1,
generic-9x2,
generic-9x3,
generic-9x4,
generic-9x5,
generic-9x6,
generic-3x3,
crafter-3x3,
anvil,
beacon,
blast-furnace,
brewing-stand,
crafting,
enchantment,
furnace,
grindstone,
hopper,
lectern,
loom,
merchant,
shulker-box,
smithing,
smoker,
cartography-table,
stonecutter,
}
resource gui {
constructor(%type: gui-type, title: text-component);
set-item: func(slot: u32, item: item-stack);
get-item: func(slot: u32) -> option<item-stack>;
/// Returns the type of this GUI.
get-type: func() -> gui-type;
/// Returns the title of this GUI.
get-title: func() -> text-component;
/// Returns the number of slots in this GUI.
get-size: func() -> u32;
/// Clears all items from the GUI.
clear-items: func();
/// Sets whether players can grab items out of the inventory.
set-allow-grab-items: func(allow: bool);
/// Returns whether players can grab items out of the inventory.
get-allow-grab-items: func() -> bool;
/// Sets whether players can put items into the inventory from their own.
set-allow-put-items: func(allow: bool);
/// Returns whether players can put items into the inventory from their own.
get-allow-put-items: func() -> bool;
}
}

View File

@@ -1,21 +0,0 @@
interface i18n {
use common.{locale};
/// Retrieves a translated string from the host.
///
/// # Arguments
/// * `key`: The namespaced translation key (e.g. `pumpkin:my_key`).
/// * `locale`: The target locale.
///
/// # Returns
/// The localized string, falling back to English or the key itself.
translate: func(key: string, locale: locale) -> string;
/// Loads custom translations from a JSON string.
///
/// # Arguments
/// * `namespace`: The namespace to associate these keys with.
/// * `json`: A JSON string containing a flat map of translations.
/// * `locale`: The target locale for these translations.
load-translations: func(namespace: string, json: string, locale: locale);
}

View File

@@ -1,59 +0,0 @@
interface item-stack {
use data-components.{data-component};
use enchantments.{enchantment};
use text.{text-component};
/// Represents an enchantment and its level.
record enchantment-value {
enchantment: enchantment,
level: u32,
}
/// Represents a data component and its serialized value.
record data-component-value {
component: data-component,
/// The serialized value of the component.
value: list<u8>,
}
resource item-stack {
constructor(registry-key: string, count: u8);
/// Returns the unique registry key of the item (e.g., "minecraft:diamond").
get-registry-key: func() -> string;
/// Returns the number of items in the stack.
get-count: func() -> u8;
/// Sets the number of items in the stack.
set-count: func(count: u8);
/// Returns the maximum number of items that can be in this stack.
get-max-count: func() -> u8;
/// Returns all enchantments on this item stack.
get-enchantments: func() -> list<enchantment-value>;
/// Adds an enchantment to this item stack.
add-enchantment: func(enchantment: enchantment, level: u32);
/// Removes an enchantment from this item stack.
remove-enchantment: func(enchantment: enchantment);
/// Returns the lore of this item stack.
get-lore: func() -> list<text-component>;
/// Sets the lore of this item stack.
set-lore: func(lore: list<text-component>);
/// Adds a line to the lore of this item stack.
add-lore: func(line: text-component);
/// Returns the custom name of this item stack, if set.
get-custom-name: func() -> option<text-component>;
/// Sets the custom name of this item stack.
set-custom-name: func(name: option<text-component>);
/// Returns all data components on this item stack.
get-components: func() -> list<data-component-value>;
/// Sets a data component on this item stack.
set-component: func(component: data-component, value: list<u8>);
/// Removes a data component from this item stack.
remove-component: func(component: data-component);
}
}

View File

@@ -1,155 +0,0 @@
/// Provides types and utilities for displaying rich dialogs to Java Edition players.
/// These dialogs support various layouts, body elements (text and items),
/// and interactive inputs (checkboxes, text fields, sliders).
interface java-dialogs {
use text.{text-component};
use item-stack.{item-stack};
/// Represents the layout and button configuration of a dialog.
enum dialog-type {
/// A simple dialog with a single "OK" button.
notice,
/// A dialog with "Yes" and "No" buttons.
confirmation,
/// A scrollable list of custom buttons.
multi-action,
/// A list of buttons that open other registered dialogs.
dialog-list,
/// A dedicated menu for displaying server-related links.
server-links,
}
/// Represents an element in the main content area of a dialog.
variant dialog-body {
/// A simple text message.
plain-message(text-component),
/// A visual item display.
item(item-stack),
}
/// Represents an interactive input control in a dialog.
variant dialog-input {
/// A checkbox for true/false states.
%bool(dialog-input-bool),
/// A simple string input field.
%text(dialog-input-text),
/// A slider for numerical input within a range.
number-range(dialog-input-number-range),
/// A multiple-choice selection button.
single-option(dialog-input-single-option),
}
/// A checkbox input control.
record dialog-input-bool {
label: text-component,
default-value: bool,
}
/// A text field input control.
record dialog-input-text {
label: text-component,
placeholder: text-component,
default-value: string,
}
/// A numerical range slider input control.
record dialog-input-number-range {
label: text-component,
min-value: f32,
max-value: f32,
initial-value: f32,
step: f32,
label-format: option<string>,
}
/// A multiple-choice selection input control.
record dialog-input-single-option {
label: text-component,
options: list<text-component>,
initial-index: u32,
}
/// Defines what happens after a dialog is closed.
enum after-action {
/// Returns the player to the previous screen (e.g., keeping an inventory open).
peek,
/// Closes all open screens.
pop,
}
/// Represents a clickable button in a dialog.
record action-button {
text: text-component,
tooltip: option<text-component>,
width: option<u32>,
action: action,
}
/// Represents an action triggered by a button click.
variant action {
/// Opens an external URL.
open-url(string),
/// Triggers a custom server-side callback with an ID and optional payload.
custom-click(custom-click-action),
}
/// Represents a custom server-side action.
record custom-click-action {
/// A unique identifier for the action (sent back to the server).
id: string,
/// Optional binary data to send with the action.
payload: option<list<u8>>,
}
/// Represents a link displayed in a Java Edition dialog.
record link {
/// The label to display for the link.
label: link-label,
/// The URL the link points to.
url: string,
}
/// The label for a link, which can be a built-in type or custom text.
variant link-label {
/// A built-in link type with a predefined icon/label.
built-in(link-type),
/// A custom text component label.
custom(text-component),
}
/// Built-in link types recognized by the Java Edition client.
enum link-type {
bug-report,
community-guidelines,
support,
status,
feedback,
community,
website,
forums,
news,
announcements,
}
/// Represents a dialog shown to a Java Edition player.
record dialog {
/// The main title of the dialog.
title: text-component,
/// The layout type of the dialog.
%type: dialog-type,
/// A list of body elements to display in the main area.
body: list<dialog-body>,
/// A list of interactive input controls.
inputs: list<dialog-input>,
/// A list of clickable buttons (for multi-action and other types).
buttons: list<action-button>,
/// A list of links (primarily for server-links type).
links: list<link>,
/// What to do after the dialog is closed.
after-action: option<after-action>,
/// Whether the player can exit the dialog using the Esc key.
can-close-with-escape: bool,
/// The text shown on buttons that link to/open this dialog.
external-title: option<text-component>,
}
}

View File

@@ -1,864 +0,0 @@
package pumpkin:plugin@0.1.0;
interface java-packets {
use uuid.{ uuid };
record s-attack {
entity-id: s32,
}
record s-change-game-mode {
game-mode: string,
}
record s-chat-command {
command: string,
}
record s-chat-message {
message: string,
timestamp: s64,
salt: s64,
signature: option<list<list<u8>>>,
message-count: s32,
acknowledged: list<list<u8>>,
checksum: u8,
}
record s-chunk-batch {
chunks-per-tick: f32,
}
record s-click-slot {
sync-id: s32,
revision: s32,
slot: s32,
button: u8,
mode: string,
length-of-array: s32,
array-of-changed-slots: list<string>,
carried-item: string,
}
record s-client-command {
action-id: s32,
}
record s-client-information-play {
locale: string,
view-distance: u8,
chat-mode: s32,
chat-colors: bool,
skin-parts: u8,
main-hand: s32,
text-filtering: bool,
server-listing: bool,
}
record s-close-container {
window-id: s32,
}
record s-command-suggestion {
id: s32,
command: string,
}
record s-confirm-teleport {
teleport-id: s32,
}
record s-container-button-click {
window-id: s32,
button-id: s32,
}
record s-cookie-response {
key: string,
payload: option<list<list<u8>>>,
}
record s-custom-click-action {
action-id: string,
payload: option<list<list<u8>>>,
}
record s-custom-payload {
channel: string,
data: list<list<u8>>,
}
record s-interact {
entity-id: s32,
r-type: s32,
target-position: option<tuple<f64, f64, f64>>,
hand: option<s32>,
sneaking: bool,
}
record s-keep-alive {
keep-alive-id: s64,
}
record s-move-vehicle {
x: f64,
y: f64,
z: f64,
yaw: f32,
pitch: f32,
}
record s-paddle-boat {
left-paddle: bool,
right-paddle: bool,
}
record s-pick-item-from-block {
pos: tuple<s32, s32, s32>,
include-data: bool,
}
record s-pick-item-from-entity {
id: s32,
include-data: bool,
}
record s-play-ping-request {
payload: s64,
}
record s-place-recipe {
container-id: u8,
recipe-display-id: s32,
use-max-items: bool,
}
record s-player-abilities {
%flags: u8,
}
record s-player-action {
status: s32,
position: tuple<s32, s32, s32>,
face: u8,
sequence: s32,
}
record s-player-command {
entity-id: s32,
action: string,
jump-boost: s32,
}
record s-set-player-ground {
on-ground: bool,
}
record s-player-input {
input: u8,
}
record s-player-position {
position: tuple<f64, f64, f64>,
collision: u8,
}
record s-player-position-rotation {
position: tuple<f64, f64, f64>,
yaw: f32,
pitch: f32,
collision: u8,
}
record s-player-rotation {
yaw: f32,
pitch: f32,
ground: bool,
}
record s-player-session {
session-id: uuid,
expires-at: s64,
public-key: list<list<u8>>,
key-signature: list<list<u8>>,
}
record s-recipe-book-change-settings {
book-type: s32,
is-open: bool,
is-filtering: bool,
}
record s-recipe-book-seen-recipe {
recipe-display-id: s32,
}
record s-rename-item {
item-name: string,
}
record s-select-trade {
selected-slot: s32,
}
record s-set-beacon {
primary-effect: option<s32>,
secondary-effect: option<s32>,
}
record s-set-command-block {
pos: tuple<s32, s32, s32>,
command: string,
mode: s32,
%flags: u8,
}
record s-set-creative-slot {
slot: s32,
clicked-item: string,
}
record s-set-held-item {
slot: s32,
}
record s-swing-arm {
hand: s32,
}
record s-update-sign {
location: tuple<s32, s32, s32>,
is-front-text: bool,
line-1: string,
line-2: string,
line-3: string,
line-4: string,
}
record s-use-item {
hand: s32,
sequence: s32,
yaw: f32,
pitch: f32,
}
record s-use-item-on {
hand: s32,
position: tuple<s32, s32, s32>,
face: s32,
cursor-pos: tuple<f64, f64, f64>,
inside-block: bool,
is-against-world-border: bool,
sequence: s32,
}
record c-acknowledge-block-change {
sequence-id: s32,
}
record c-action-bar {
action-bar: string,
}
record c-set-block-destroy-stage {
entity-id: s32,
location: tuple<s32, s32, s32>,
destroy-stage: u8,
}
record c-block-entity-data {
location: tuple<s32, s32, s32>,
r-type: s32,
nbt-data: list<list<u8>>,
}
record c-block-event {
location: tuple<s32, s32, s32>,
action-id: u8,
action-parameter: u8,
block-type: s32,
}
record c-block-update {
location: tuple<s32, s32, s32>,
state-id: s32,
}
record c-boss-event {
uuid: uuid,
action: string,
}
record c-center-chunk {
chunk-x: s32,
chunk-z: s32,
}
record c-change-difficulty {
difficulty: u8,
locked: bool,
}
record c-chunk-batch-end {
batch-size: s32,
}
record c-clear-title {
reset: bool,
}
record c-close-container {
sync-id: s32,
}
record c-combat-death {
player-id: s32,
message: string,
}
record c-command-suggestions {
id: s32,
start: s32,
length: s32,
matches: list<list<string>>,
}
record c-commands {
nodes: list<list<string>>,
root-node-index: s32,
}
record c-play-cookie-request {
key: string,
}
record c-custom-payload {
channel: string,
data: list<u8>,
}
record c-damage-event {
entity-id: s32,
source-type-id: s32,
source-cause-id: s32,
source-direct-id: s32,
source-position: option<tuple<f64, f64, f64>>,
}
record c-play-disconnect {
reason: string,
}
record c-disguised-chat-message {
message: string,
chat-type: s32,
sender-name: string,
target-name: option<string>,
}
record c-display-objective {
position: s32,
score-name: string,
}
record c-entity-animation {
entity-id: s32,
animation: u8,
}
record c-set-entity-metadata {
entity-id: s32,
metadata: list<list<u8>>,
}
record c-entity-position-sync {
entity-id: s32,
position: tuple<f64, f64, f64>,
delta: tuple<f64, f64, f64>,
yaw: f32,
pitch: f32,
on-ground: bool,
}
record c-entity-sound-effect {
sound-event: string,
sound-category: s32,
entity-id: s32,
volume: f32,
pitch: f32,
seed: s64,
}
record c-entity-status {
entity-id: s32,
entity-status: u8,
}
record c-entity-velocity {
entity-id: s32,
velocity: string,
}
record c-explosion {
center: tuple<f64, f64, f64>,
radius: f32,
block-count: s32,
knockback: option<tuple<f64, f64, f64>>,
particle: s32,
sound: string,
block-particles-pool-size: s32,
}
record c-game-event {
event: u8,
value: f32,
}
record c-head-rot {
entity-id: s32,
head-yaw: u8,
}
record c-hurt-animation {
entity-id: s32,
yaw: f32,
}
record c-initialize-world-border {
x: f64,
z: f64,
old-diameter: f64,
new-diameter: f64,
speed: string,
portal-teleport-boundary: s32,
warning-blocks: s32,
warning-time: s32,
}
record c-item-cooldown {
group: string,
cooldown: s32,
}
record c-keep-alive {
keep-alive-id: s64,
}
record c-level-event {
event: s32,
location: tuple<s32, s32, s32>,
data: s32,
disable-relative-volume: bool,
}
record c-login {
entity-id: s32,
is-hardcore: bool,
dimension-names: list<string>,
max-players: s32,
view-distance: s32,
simulated-distance: s32,
reduced-debug-info: bool,
enabled-respawn-screen: bool,
limited-crafting: bool,
dimension: string,
hashed-seed: s64,
game-mode: u8,
previous-gamemode: u8,
debug: bool,
is-flat: bool,
death-dimension-name: option<string>,
portal-cooldown: s32,
sealevel: s32,
enforce-secure-chat: bool,
}
record c-map-item-data {
map-id: s32,
scale: u8,
locked: bool,
icons: option<list<string>>,
data: option<string>,
}
record c-merchant-offers {
window-id: s32,
offers: list<string>,
villager-level: s32,
experience: s32,
is-regular-villager: bool,
can-restock: bool,
}
record c-multi-block-update {
chunk-section: s64,
updates: list<string>,
}
record c-open-screen {
sync-id: s32,
window-type: s32,
window-title: string,
}
record c-open-sign-editor {
location: tuple<s32, s32, s32>,
is-front-text: bool,
}
record c-particle {
force-spawn: bool,
important: bool,
position: tuple<f64, f64, f64>,
offset: tuple<f64, f64, f64>,
max-speed: f32,
particle-count: s32,
particle-id: s32,
data: list<u8>,
}
record c-ping-response {
payload: s64,
}
record c-player-abilities {
%flags: u8,
flying-speed: f32,
field-of-view: f32,
}
record c-player-chat-message {
global-index: s32,
sender: uuid,
index: s32,
message-signature: option<list<list<u8>>>,
message: string,
timestamp: s64,
salt: s64,
previous-messages: list<list<string>>,
unsigned-content: option<string>,
filter-type: string,
chat-type: s32,
sender-name: string,
target-name: option<string>,
}
record c-player-info-update {
actions: u8,
players: list<string>,
}
record c-player-position {
teleport-id: s32,
position: tuple<f64, f64, f64>,
delta: tuple<f64, f64, f64>,
yaw: f32,
pitch: f32,
relatives: list<string>,
}
record c-remove-player-info {
players: list<uuid>,
}
record c-player-spawn-position {
dimension-name: string,
location: tuple<s32, s32, s32>,
yaw: f32,
pitch: f32,
}
record c-recipe-book-add {
replace: bool,
}
record c-recipe-book-settings {
crafting-open: bool,
crafting-filtering: bool,
furnace-open: bool,
furnace-filtering: bool,
blast-furnace-open: bool,
blast-furnace-filtering: bool,
smoker-open: bool,
smoker-filtering: bool,
}
record c-remove-entities {
entity-ids: list<s32>,
}
record c-remove-mob-effect {
entity-id: s32,
effect-id: s32,
}
record c-reset-score {
entity-name: string,
objective-name: option<string>,
}
record c-respawn {
dimension-type: s32,
dimension-name: string,
hashed-seed: s64,
game-mode: u8,
previous-gamemode: u8,
debug: bool,
is-flat: bool,
death-dimension-name: option<string>,
portal-cooldown: s32,
sealevel: s32,
data-kept: u8,
}
record c-play-server-links {
links: list<string>,
}
record c-set-border-center {
x: f64,
z: f64,
}
record c-set-border-lerp-size {
old-diameter: f64,
new-diameter: f64,
speed: string,
}
record c-set-border-size {
diameter: f64,
}
record c-set-border-warning-delay {
warning-time: s32,
}
record c-set-border-warning-distance {
warning-blocks: s32,
}
record c-set-container-content {
window-id: s32,
state-id: s32,
slot-data: list<string>,
carried-item: string,
}
record c-set-container-property {
window-id: s32,
property: s32,
value: s32,
}
record c-set-container-slot {
window-id: u8,
state-id: s32,
slot: s32,
slot-data: string,
}
record c-set-cursor-item {
stack: string,
}
record c-set-equipment {
entity-id: s32,
equipment: list<string>,
}
record c-set-experience {
progress: f32,
level: s32,
total-experience: s32,
}
record c-set-health {
health: f32,
food: s32,
food-saturation: f32,
}
record c-set-passengers {
entity-id: s32,
passengers: list<s32>,
}
record c-set-player-inventory {
slot: s32,
item: string,
}
record c-set-player-team {
team-name: string,
method: string,
parameters: option<string>,
players: list<string>,
}
record c-update-time {
game-time: s64,
clock-updates: list<string>,
}
record c-title-text {
title: string,
}
record c-title-animation {
fade-in-ticks: s32,
stay-ticks: s32,
fade-out-ticks: s32,
}
record c-play-show-dialog {
dialog: string,
}
record c-sound-effect {
sound-event: string,
sound-category: s32,
position: tuple<f64, f64, f64>,
volume: f32,
pitch: f32,
seed: f64,
}
record c-spawn-entity {
entity-id: s32,
entity-uuid: uuid,
r-type: s32,
position: tuple<f64, f64, f64>,
velocity: string,
pitch: u8,
yaw: u8,
head-yaw: u8,
data: s32,
}
record c-stop-sound {
sound-id: option<string>,
category: option<string>,
}
record c-store-cookie {
key: string,
payload: list<u8>,
}
record c-subtitle {
subtitle: string,
}
record c-system-chat-message {
content: string,
overlay: bool,
}
record c-tab-list {
header: string,
footer: string,
}
record c-take-item-entity {
entity-id: s32,
collector-entity-id: s32,
stack-amount: s32,
}
record c-teleport-entity {
entity-id: s32,
position: tuple<f64, f64, f64>,
delta: tuple<f64, f64, f64>,
yaw: f32,
pitch: f32,
relatives: list<string>,
on-ground: bool,
}
record c-ticking-state {
tick-rate: f32,
is-frozen: bool,
}
record c-ticking-step {
tick-steps: s32,
}
record c-transfer {
host: string,
port: s32,
}
record c-unload-chunk {
z: s32,
x: s32,
}
record c-update-attributes {
entity-id: s32,
properties: list<string>,
}
record c-update-entity-pos {
entity-id: s32,
delta: tuple<f64, f64, f64>,
on-ground: bool,
}
record c-update-entity-pos-rot {
entity-id: s32,
delta: tuple<f64, f64, f64>,
yaw: u8,
pitch: u8,
on-ground: bool,
}
record c-update-entity-rot {
entity-id: s32,
yaw: u8,
pitch: u8,
on-ground: bool,
}
record c-update-mob-effect {
entity-id: s32,
effect-id: s32,
amplifier: s32,
duration: s32,
%flags: u8,
}
record c-update-objectives {
objective-name: string,
mode: u8,
display-name: string,
render-type: s32,
number-format: option<string>,
}
record c-update-score {
entity-name: string,
objective-name: string,
value: s32,
display-name: option<string>,
number-format: option<string>,
}
record c-world-event {
event: s32,
location: tuple<s32, s32, s32>,
data: s32,
disable-relative-volume: bool,
}
variant serverbound-packet {
s-attack(s-attack),
s-change-game-mode(s-change-game-mode),
s-chat-command(s-chat-command),
s-chat-message(s-chat-message),
s-chunk-batch(s-chunk-batch),
s-click-slot(s-click-slot),
s-client-command(s-client-command),
s-client-information-play(s-client-information-play),
s-client-tick-end,
s-close-container(s-close-container),
s-command-suggestion(s-command-suggestion),
s-confirm-teleport(s-confirm-teleport),
s-container-button-click(s-container-button-click),
s-cookie-response(s-cookie-response),
s-custom-click-action(s-custom-click-action),
s-custom-payload(s-custom-payload),
s-interact(s-interact),
s-keep-alive(s-keep-alive),
s-move-vehicle(s-move-vehicle),
s-paddle-boat(s-paddle-boat),
s-pick-item-from-block(s-pick-item-from-block),
s-pick-item-from-entity(s-pick-item-from-entity),
s-play-ping-request(s-play-ping-request),
s-place-recipe(s-place-recipe),
s-player-abilities(s-player-abilities),
s-player-action(s-player-action),
s-player-command(s-player-command),
s-set-player-ground(s-set-player-ground),
s-player-input(s-player-input),
s-player-loaded,
s-player-position(s-player-position),
s-player-position-rotation(s-player-position-rotation),
s-player-rotation(s-player-rotation),
s-player-session(s-player-session),
s-recipe-book-change-settings(s-recipe-book-change-settings),
s-recipe-book-seen-recipe(s-recipe-book-seen-recipe),
s-rename-item(s-rename-item),
s-select-trade(s-select-trade),
s-set-beacon(s-set-beacon),
s-set-command-block(s-set-command-block),
s-set-creative-slot(s-set-creative-slot),
s-set-held-item(s-set-held-item),
s-swing-arm(s-swing-arm),
s-update-sign(s-update-sign),
s-use-item(s-use-item),
s-use-item-on(s-use-item-on),
}
variant clientbound-packet {
c-acknowledge-block-change(c-acknowledge-block-change),
c-action-bar(c-action-bar),
c-set-block-destroy-stage(c-set-block-destroy-stage),
c-block-entity-data(c-block-entity-data),
c-block-event(c-block-event),
c-block-update(c-block-update),
c-boss-event(c-boss-event),
c-center-chunk(c-center-chunk),
c-change-difficulty(c-change-difficulty),
c-chunk-batch-end(c-chunk-batch-end),
c-chunk-batch-start,
c-chunk-data,
c-play-clear-dialog,
c-clear-title(c-clear-title),
c-close-container(c-close-container),
c-combat-death(c-combat-death),
c-command-suggestions(c-command-suggestions),
c-commands(c-commands),
c-play-cookie-request(c-play-cookie-request),
c-custom-payload(c-custom-payload),
c-damage-event(c-damage-event),
c-play-disconnect(c-play-disconnect),
c-disguised-chat-message(c-disguised-chat-message),
c-display-objective(c-display-objective),
c-entity-animation(c-entity-animation),
c-set-entity-metadata(c-set-entity-metadata),
c-entity-position-sync(c-entity-position-sync),
c-entity-sound-effect(c-entity-sound-effect),
c-entity-status(c-entity-status),
c-entity-velocity(c-entity-velocity),
c-explosion(c-explosion),
c-game-event(c-game-event),
c-head-rot(c-head-rot),
c-hurt-animation(c-hurt-animation),
c-initialize-world-border(c-initialize-world-border),
c-item-cooldown(c-item-cooldown),
c-keep-alive(c-keep-alive),
c-level-event(c-level-event),
c-light-update,
c-login(c-login),
c-map-item-data(c-map-item-data),
c-merchant-offers(c-merchant-offers),
c-multi-block-update(c-multi-block-update),
c-open-screen(c-open-screen),
c-open-sign-editor(c-open-sign-editor),
c-particle(c-particle),
c-ping-response(c-ping-response),
c-player-abilities(c-player-abilities),
c-player-chat-message(c-player-chat-message),
c-player-info-update(c-player-info-update),
c-player-position(c-player-position),
c-remove-player-info(c-remove-player-info),
c-player-spawn-position(c-player-spawn-position),
c-recipe-book-add(c-recipe-book-add),
c-recipe-book-settings(c-recipe-book-settings),
c-remove-entities(c-remove-entities),
c-remove-mob-effect(c-remove-mob-effect),
c-reset-score(c-reset-score),
c-respawn(c-respawn),
c-play-server-links(c-play-server-links),
c-set-border-center(c-set-border-center),
c-set-border-lerp-size(c-set-border-lerp-size),
c-set-border-size(c-set-border-size),
c-set-border-warning-delay(c-set-border-warning-delay),
c-set-border-warning-distance(c-set-border-warning-distance),
c-set-container-content(c-set-container-content),
c-set-container-property(c-set-container-property),
c-set-container-slot(c-set-container-slot),
c-set-cursor-item(c-set-cursor-item),
c-set-equipment(c-set-equipment),
c-set-experience(c-set-experience),
c-set-health(c-set-health),
c-set-passengers(c-set-passengers),
c-set-player-inventory(c-set-player-inventory),
c-set-player-team(c-set-player-team),
c-update-time(c-update-time),
c-title-text(c-title-text),
c-title-animation(c-title-animation),
c-play-show-dialog(c-play-show-dialog),
c-sound-effect(c-sound-effect),
c-spawn-entity(c-spawn-entity),
c-stop-sound(c-stop-sound),
c-store-cookie(c-store-cookie),
c-subtitle(c-subtitle),
c-system-chat-message(c-system-chat-message),
c-tab-list(c-tab-list),
c-take-item-entity(c-take-item-entity),
c-teleport-entity(c-teleport-entity),
c-ticking-state(c-ticking-state),
c-ticking-step(c-ticking-step),
c-transfer(c-transfer),
c-unload-chunk(c-unload-chunk),
c-update-attributes(c-update-attributes),
c-update-entity-pos(c-update-entity-pos),
c-update-entity-pos-rot(c-update-entity-pos-rot),
c-update-entity-rot(c-update-entity-rot),
c-update-mob-effect(c-update-mob-effect),
c-update-objectives(c-update-objectives),
c-update-score(c-update-score),
c-world-event(c-world-event),
}
}

View File

@@ -1,14 +0,0 @@
interface logging {
enum level {
trace,
debug,
info,
warn,
error,
}
/// log any general purpose message
log: func(level: level, message: string);
/// This function is meant to be used by the tracing crate.
log-tracing: func(event: list<u8>);
}

View File

@@ -1,19 +0,0 @@
/// Plugin metadata describing the plugin and its compatibility.
interface metadata {
record plugin-metadata {
/// Name of the plugin.
name: string,
/// Plugin version (semver).
version: string,
/// Plugin authors.
authors: list<string>,
/// Short description of the plugin.
description: string,
/// Plugin dependencies.
dependencies: list<string>,
/// Permissions requested by the plugin.
permissions: list<string>,
}
get-metadata: func() -> plugin-metadata;
}

View File

@@ -1,123 +0,0 @@
package pumpkin:plugin@0.1.0;
interface particles {
enum particle {
angry-villager,
block,
block-marker,
bubble,
cloud,
copper-fire-flame,
crit,
damage-indicator,
dragon-breath,
dripping-lava,
falling-lava,
landing-lava,
dripping-water,
falling-water,
dust,
dust-color-transition,
effect,
elder-guardian,
enchanted-hit,
enchant,
end-rod,
entity-effect,
explosion-emitter,
explosion,
gust,
small-gust,
gust-emitter-large,
gust-emitter-small,
sonic-boom,
falling-dust,
firework,
fishing,
flame,
infested,
cherry-leaves,
pale-oak-leaves,
tinted-leaves,
sculk-soul,
sculk-charge,
sculk-charge-pop,
soul-fire-flame,
soul,
flash,
happy-villager,
composter,
heart,
instant-effect,
item,
vibration,
trail,
pause-mob-growth,
reset-mob-growth,
item-slime,
item-cobweb,
item-snowball,
large-smoke,
lava,
mycelium,
note,
poof,
portal,
rain,
smoke,
white-smoke,
sneeze,
spit,
squid-ink,
sweep-attack,
totem-of-undying,
underwater,
splash,
witch,
bubble-pop,
current-down,
bubble-column-up,
nautilus,
dolphin,
campfire-cosy-smoke,
campfire-signal-smoke,
dripping-honey,
falling-honey,
landing-honey,
falling-nectar,
falling-spore-blossom,
ash,
crimson-spore,
warped-spore,
spore-blossom-air,
dripping-obsidian-tear,
falling-obsidian-tear,
landing-obsidian-tear,
reverse-portal,
white-ash,
small-flame,
snowflake,
dripping-dripstone-lava,
falling-dripstone-lava,
dripping-dripstone-water,
falling-dripstone-water,
glow-squid-ink,
glow,
wax-on,
wax-off,
electric-spark,
scrape,
shriek,
egg-crack,
dust-plume,
trial-spawner-detection,
trial-spawner-detection-ominous,
vault-connection,
dust-pillar,
ominous-spawning,
raid-omen,
trial-omen,
block-crumble,
firefly,
}
}

View File

@@ -1,46 +0,0 @@
interface permission {
/// Represents the player's permission level
///
/// Permission levels determine the player's access to commands and server operations.
/// Each numeric level corresponds to a specific role:
/// - `Zero`: `normal`: Player can use basic commands.
/// - `One`: `moderator`: Player can bypass spawn protection.
/// - `Two`: `gamemaster`: Player or executor can use more commands and player can use command blocks.
/// - `Three`: `admin`: Player or executor can use commands related to multiplayer management.
/// - `Four`: `owner`: Player or executor can use all of the commands, including commands related to server management.
enum permission-level {
zero,
one,
two,
three,
four,
}
/// Describes the default behavior for permissions
variant permission-default {
/// Permission is not granted by default
deny,
/// Permission is granted by default
allow,
/// Permission is granted by default to operators
op(permission-level),
}
/// A child permission entry
record permission-child {
node: string,
value: bool,
}
/// Defines a permission node in the system
record permission {
/// The full node name (e.g., "minecraft:command.gamemode")
node: string,
/// Description of what this permission does
description: string,
/// The default value of this permission
default: permission-default,
/// Children nodes that are affected by this permission
children: list<permission-child>,
}
}

View File

@@ -1,796 +0,0 @@
/// Represents a player connected to the Minecraft server.
interface player {
use common.{hand, position, game-mode};
use item-stack.{item-stack};
use %world.{%world, entity};
use permission.{permission-level};
use text.{text-component};
use gui.{gui};
use forms.{form};
use java-dialogs.{dialog};
use java-packets.{clientbound-packet as java-packet};
use bedrock-packets.{clientbound-packet as bedrock-packet};
use uuid.{uuid};
/// Various abilities a player can have.
record player-abilities {
/// Whether the player is invulnerable to damage.
invulnerable: bool,
/// Whether the player is currently flying.
flying: bool,
/// Whether the player is allowed to fly.
allow-flying: bool,
/// Whether the player is in creative mode.
creative: bool,
/// Whether the player can modify the world.
allow-modify-world: bool,
/// The speed at which the player flies.
fly-speed: f32,
/// The speed at which the player walks.
walk-speed: f32,
}
/// Represents a player's skin textures and metadata.
record player-skin {
/// The base64-encoded texture data (usually JSON containing skin/cape URLs).
value: string,
/// The optional signature for the texture data.
signature: option<string>,
}
/// Represents which skin parts are visible.
flags skin-parts {
cape,
jacket,
left-sleeve,
right-sleeve,
left-pants-leg,
right-pants-leg,
hat,
}
/// Represents the various abilities a Bedrock Edition player can have.
enum bedrock-ability {
/// Whether the player can build.
build,
/// Whether the player can mine blocks.
mine,
/// Whether the player can use doors and switches.
doors-and-switches,
/// Whether the player can open containers.
open-containers,
/// Whether the player can attack other players.
attack-players,
/// Whether the player can attack mobs.
attack-mobs,
/// Whether the player can use operator commands.
operator-commands,
/// Whether the player can teleport.
teleport,
/// Whether the player is invulnerable.
invulnerable,
/// Whether the player is currently flying.
flying,
/// Whether the player is allowed to fly.
may-fly,
/// Whether the player has instant build (creative).
instabuild,
/// Whether the player can use lightning-related abilities.
lightning,
/// The speed at which the player flies.
fly-speed,
/// The speed at which the player walks.
walk-speed,
/// Whether the player is muted.
muted,
/// Whether the player is a world builder.
world-builder,
/// Whether the player has no-clip enabled.
no-clip,
/// Whether the player is a privileged builder.
privileged-builder,
/// The speed at which the player flies vertically.
vertical-fly-speed,
}
/// Represents the various status flags a Bedrock Edition entity can have.
/// These flags control client-side rendering and behavior.
enum bedrock-status-flag {
/// Whether the entity is currently on fire.
on-fire,
/// Whether the entity is sneaking.
sneaking,
/// Whether the entity is riding another entity.
riding,
/// Whether the entity is sprinting.
sprinting,
/// Whether the entity is using an item (e.g., eating, blocking).
using-item,
/// Whether the entity is invisible.
invisible,
/// Whether the entity is tempted by an item.
tempted,
/// Whether the entity is in love (breeding).
in-love,
/// Whether the entity is saddled.
saddled,
/// Whether the entity is powered (e.g., charged creeper).
powered,
/// Whether the entity is ignited.
ignited,
/// Whether the entity is a baby.
baby,
/// Whether the entity is currently converting to another type.
converting,
/// Whether the entity is in a critical state.
critical,
/// Whether to show the entity's name tag.
show-name,
/// Whether to always show the entity's name tag.
always-show-name,
/// Whether the entity has no AI.
no-ai,
/// Whether the entity is silent.
silent,
/// Whether the entity is climbing a wall.
wall-climbing,
/// Whether the entity is climbing.
climb,
/// Whether the entity is swimming.
swim,
/// Whether the entity is flying.
fly,
/// Whether the entity is walking.
walk,
/// Whether the entity is resting.
resting,
/// Whether the entity is sitting.
sitting,
/// Whether the entity is angry.
angry,
/// Whether the entity is interested.
interested,
/// Whether the entity is charged.
charged,
/// Whether the entity is tamed.
tamed,
/// Whether the entity is orphaned.
orphaned,
/// Whether the entity is leashed.
leashed,
/// Whether the entity is sheared.
sheared,
/// Whether the entity is gliding (elytra).
gliding,
/// Whether the entity is an elder (e.g., elder guardian).
elder,
/// Whether the entity is moving.
moving,
/// Whether the entity is breathing.
breathing,
/// Whether the entity has a chest (e.g., donkey).
chested,
/// Whether the entity is stackable.
stackable,
/// Whether to show the bottom of the entity.
show-bottom,
/// Whether the entity is standing.
standing,
/// Whether the entity is shaking.
shaking,
/// Whether the entity is idling.
idling,
/// Whether the entity is casting (e.g., evoker).
casting,
/// Whether the entity is charging an attack.
charging,
/// Whether the entity is controlled by a keyboard.
keyboard-controlled,
/// Whether the entity is performing a power jump.
power-jump,
/// Whether the entity is dashing.
dash,
/// Whether the entity is lingering.
lingering,
/// Whether the entity has collision.
has-collision,
/// Whether the entity has gravity.
has-gravity,
/// Whether the entity is immune to fire.
fire-immune,
/// Whether the entity is dancing.
dancing,
/// Whether the entity is enchanted.
enchanted,
/// Whether a trident will return to the entity.
return-trident,
/// Whether the container is private.
container-private,
/// Whether the entity is transforming.
transforming,
/// Whether the entity damages nearby mobs.
damage-nearby-mobs,
/// Whether the entity is swimming.
swimming,
/// Whether the entity has been bribed.
bribed,
/// Whether the entity is pregnant.
pregnant,
/// Whether the entity is laying an egg.
laying-egg,
/// Whether a passenger can pick up the entity.
passenger-can-pick,
/// Whether the entity is transitioning to sitting.
transition-sitting,
/// Whether the entity is eating.
eating,
/// Whether the entity is laying down.
laying-down,
/// Whether the entity is sneezing.
sneezing,
/// Whether the entity is trusting.
trusting,
/// Whether the entity is rolling.
rolling,
/// Whether the entity is scared.
scared,
/// Whether the entity is in scaffolding.
in-scaffolding,
/// Whether the entity is over scaffolding.
over-scaffolding,
/// Whether the entity is descending through a block.
descend-through-block,
/// Whether the entity is blocking.
blocking,
/// Whether the entity is transitioning to blocking.
transition-blocking,
/// Whether the entity is blocked using a shield.
blocked-using-shield,
/// Whether the entity is blocked using a damaged shield.
blocked-using-damaged-shield,
/// Whether the entity is sleeping.
sleeping,
/// Whether the entity wants to wake up.
wants-to-wake,
/// Whether the entity shows interest in trading.
trade-interest,
/// Whether the entity can break doors.
door-breaker,
/// Whether the entity is breaking an obstruction.
breaking-obstruction,
/// Whether the entity can open doors.
door-opener,
/// Whether the entity is a captain (raid).
captain,
/// Whether the entity is stunned.
stunned,
/// Whether the entity is roaring.
roaring,
/// Whether the entity has a delayed attack.
delayed-attack,
/// Whether the entity is avoiding mobs.
avoiding-mobs,
/// Whether the entity is avoiding a block.
avoiding-block,
/// Whether the entity is facing a target for a ranged attack.
facing-target-to-range-attack,
/// Whether the entity is hidden when invisible.
hidden-when-invisible,
/// Whether the entity is in a UI.
in-ui,
/// Whether the entity is stalking.
stalking,
/// Whether the entity is emoting.
emoting,
/// Whether the entity is celebrating.
celebrating,
/// Whether the entity is admiring (piglin).
admiring,
/// Whether the entity is celebrating a special event.
celebrating-special,
/// Whether the entity is out of control.
out-of-control,
/// Whether the entity is performing a ram attack.
ram-attack,
/// Whether the entity is playing dead.
playing-dead,
/// Whether the entity is in an ascending block.
in-ascending-block,
/// Whether the entity is over a descending block.
over-descending-block,
/// Whether the entity is croaking (frog).
croaking,
/// Whether the entity is digesting a mob.
digest-mob,
/// Whether the entity has a jump goal.
jump-goal,
/// Whether the entity is emerging.
emerging,
/// Whether the entity is sniffing.
sniffing,
/// Whether the entity is digging.
digging,
/// Whether the entity is performing a sonic boom.
sonic-boom,
/// Whether the entity has a dash timeout.
has-dash-timeout,
/// Whether the entity is pushed towards the closest space.
push-towards-closest-space,
/// Whether the entity is scenting.
scenting,
/// Whether the entity is rising.
rising,
/// Whether the entity is feeling happy.
feeling-happy,
/// Whether the entity is searching.
searching,
/// Whether the entity is crawling.
crawling,
/// Whether the entity's body rotation is blocked.
body-rotation-blocked,
/// Whether the entity is rendered when invisible.
render-when-invisible,
/// Whether the entity's body rotation is axis-aligned.
body-rotation-axis-aligned,
/// Whether the entity is collidable.
collidable,
/// Whether the entity is air-controlled via WASD.
wasd-air-controlled,
/// Whether only the server can authorize a dismount.
does-server-auth-only-dismount,
/// Whether the body rotation always follows the head.
body-rotation-always-follows-head,
/// Whether the entity can use vertical movement actions.
can-use-vertical-movement-action,
/// Whether rotation is locked to the vehicle.
rotation-locked-to-vehicle,
}
/// Represents a specific version of the Minecraft Java Edition protocol.
enum java-minecraft-version {
v-1-7-2,
v-1-7-6,
v-1-8,
v-1-9,
v-1-9-1,
v-1-9-2,
v-1-9-3,
v-1-10,
v-1-11,
v-1-11-1,
v-1-12,
v-1-12-1,
v-1-12-2,
v-1-13,
v-1-13-1,
v-1-13-2,
v-1-14,
v-1-14-1,
v-1-14-2,
v-1-14-3,
v-1-14-4,
v-1-15,
v-1-15-1,
v-1-15-2,
v-1-16,
v-1-16-1,
v-1-16-2,
v-1-16-3,
v-1-16-4,
v-1-17,
v-1-17-1,
v-1-18,
v-1-18-2,
v-1-19,
v-1-19-1,
v-1-19-3,
v-1-19-4,
v-1-20,
v-1-20-2,
v-1-20-3,
v-1-20-5,
v-1-21,
v-1-21-2,
v-1-21-4,
v-1-21-5,
v-1-21-6,
v-1-21-7,
v-1-21-9,
v-1-21-11,
v-26-1,
unknown,
}
/// Represents a specific version of the Minecraft Bedrock Edition protocol.
enum bedrock-minecraft-version {
v-1-21,
v-1-26-20,
unknown,
}
/// Represents settings for a Java Edition player.
record java-player-settings {
/// The player's preferred language (e.g., \"en_us\").
locale: string,
/// The maximum distance at which chunks are rendered.
view-distance: u8,
/// The player's chat visibility settings.
chat-mode: chat-mode,
/// Whether chat colors are enabled.
chat-colors: bool,
/// The player's skin configuration options.
skin-parts: skin-parts,
/// The player's dominant hand (left or right).
main-hand: hand,
/// Whether text filtering is enabled.
text-filtering: bool,
/// Whether the player wants to appear in the server list.
server-listing: bool,
}
/// The chat visibility settings for a player.
enum chat-mode {
/// Chat is fully enabled.
enabled,
/// Only system messages and commands are shown.
commands-only,
/// Chat is completely hidden.
hidden,
}
/// Represents the operating system of a Bedrock Edition client.
enum bedrock-device-os {
android,
ios,
osx,
amazon,
gear-vr,
holo-lens,
windows-10,
win-32,
dedicated,
tv-os,
playstation,
nintendo,
xbox,
windows-phone,
linux,
/// Fallback for unrecognized operating systems.
unknown,
}
/// Represents the input mode used by a Bedrock Edition client.
enum bedrock-input-mode {
/// Unknown input mode.
unknown,
/// Mouse and keyboard.
mouse,
/// Touch screen.
touch,
/// Game controller.
game-pad,
/// Motion-based controller.
motion-controller,
}
/// Represents the UI profile used by a Bedrock Edition client.
enum bedrock-ui-profile {
/// Classic desktop UI.
classic,
/// Pocket/Mobile optimized UI.
pocket,
/// Unknown UI profile.
unknown,
}
/// Represents the graphics mode used by a Bedrock Edition client.
enum bedrock-graphics-mode {
simple,
fancy,
ray-traced,
unknown,
}
/// Represents settings and client data for a Bedrock Edition player.
record bedrock-player-settings {
/// The client's specific game version string.
game-version: string,
/// The operating system of the client device.
device-os: bedrock-device-os,
/// A unique identifier for the client device.
device-id: string,
/// The model name of the client device.
device-model: string,
/// The player's preferred language code (e.g., \"en_US\").
language-code: string,
/// The input mode currently used by the player.
current-input-mode: bedrock-input-mode,
/// The default input mode for the client device.
default-input-mode: bedrock-input-mode,
/// The UI layout profile used by the client.
ui-profile: bedrock-ui-profile,
/// The current GUI scale setting.
gui-scale: s32,
/// Whether the player is in Editor mode.
is-editor-mode: bool,
/// The maximum view distance the client supports.
max-view-distance: s32,
/// The memory tier of the client device (indicates performance level).
memory-tier: s32,
/// The graphics mode used by the client.
graphics-mode: bedrock-graphics-mode,
/// The player's unique PlayFab identifier.
playfab-id: string,
/// A random 64-bit ID generated by the client.
client-random-id: s64,
/// Platform-specific offline identifier.
platform-offline-id: string,
/// Platform-specific online identifier.
platform-online-id: string,
/// The unique ID of the player's current skin.
skin-id: string,
/// The model arm size (e.g., \"wide\" or \"slim\").
arm-size: string,
/// Whether the player is using a Character Creator (Persona) skin.
is-persona-skin: bool,
/// Whether the skin is a premium (paid) skin.
is-premium-skin: bool,
/// Whether the skin is from a trusted source.
is-trusted-skin: bool,
}
/// A handle to a player on the server.
resource player {
/// Returns the player as an entity.
as-entity: func () -> entity;
/// Returns the player's unique UUID as a string.
get-id: func () -> uuid;
/// Returns the player's username.
get-name: func () -> string;
// Basic state
/// Returns the player's current position in the world.
get-position: func () -> position;
/// Returns the player's current yaw (horizontal rotation).
get-yaw: func () -> f32;
/// Returns the player's current pitch (vertical rotation).
get-pitch: func () -> f32;
/// Returns the world the player is currently in.
get-world: func () -> %world;
/// Returns the player's current game mode.
get-gamemode: func () -> game-mode;
/// Changes the player's game mode. Returns true if successful.
set-gamemode: func (mode: game-mode) -> bool;
/// Returns the player's locale (e.g., \"en_us\").
get-locale: func () -> string;
/// Returns the player's current ping in milliseconds.
get-ping: func () -> u32;
// Permissions & metadata
/// Returns the player's permission level (0-4).
get-permission-level: func () -> permission-level;
/// Sets the player's permission level.
set-permission-level: func (level: permission-level);
/// Grants or denies a specific permission node for the player.
set-permission: func(node: string, value: bool);
/// Removes an explicitly set permission node from the player.
unset-permission: func(node: string);
/// Returns `Some(true)` if granted, `Some(false)` if denied, or `None` if not set.
has-permission-set: func (node: string) -> option<bool>;
/// Checks if the player has a specific permission node.
has-permission: func (node: string) -> bool;
/// Returns the player's display name, which may include formatting.
get-display-name: func () -> text-component;
/// Sets the player's display name.
set-display-name: func (display-name: text-component);
/// Gets the player's custom tab list name.
get-tab-list-name: func () -> option<text-component>;
/// Sets the player's custom tab list name.
set-tab-list-name: func (name: option<text-component>);
// Messaging & titles
/// Sends a system message to the player's chat.
send-system-message: func (text: text-component, overlay: bool);
/// Sets the header and footer of the player's Tab list.
set-tab-list-header-footer: func (header: text-component, footer: text-component);
/// Sets the sorting order of the player in the Tab list.
set-tab-list-order: func (order: s32);
/// Sets the latency (ping) shown for the player in the Tab list.
set-tab-list-latency: func (latency: s32);
/// Sets whether the player is visible in the Tab list.
set-tab-list-listed: func (listed: bool);
/// Shows a large title on the player's screen.
show-title: func (text: text-component);
/// Shows a smaller subtitle on the player's screen.
show-subtitle: func (text: text-component);
/// Shows a message in the action bar area.
show-actionbar: func (text: text-component);
/// Sets the fade-in, stay, and fade-out times for titles.
send-title-animation: func (fade-in: s32, stay: s32, fade-out: s32);
// Teleport & kick
/// Teleports the player to a position in a world.
teleport: func (position: position, yaw: option<f32>, pitch: option<f32>, %world: %world);
/// Teleports the player to another world at a specific position.
teleport-world: func (world-ref: %world, position: position, yaw: option<f32>, pitch: option<f32>);
/// Kicks the player from the server with the specified reason.
kick: func (message: text-component);
/// Forces the player to respawn.
respawn: func ();
/// Opens a GUI for the player.
open-gui: func (gui-ref: gui);
/// Bans the player with an optional reason.
ban: func (reason: option<text-component>);
/// Bans the player's IP address with an optional reason.
ban-ip: func (reason: option<text-component>);
/// Transfers the player to another server.
transfer: func (host: string, port: u16);
// Inventory
/// Returns the index of the currently selected hotbar slot (0-8).
get-selected-slot: func () -> u8;
/// Returns the item currently in the specified hand.
get-item-in-hand: func (hand: hand) -> option<item-stack>;
/// Returns the item in the specified inventory slot.
get-inventory-item: func (slot: u8) -> option<item-stack>;
/// Sets the item in the specified hand.
set-item-in-hand: func (hand: hand, stack: option<item-stack>);
/// Sets the item in the specified inventory slot.
set-inventory-item: func (slot: u8, stack: option<item-stack>);
// Status
/// Returns the player's current health.
get-health: func () -> f32;
/// Sets the player's current health.
set-health: func (health: f32);
/// Returns the player's maximum health.
get-max-health: func () -> f32;
/// Sets the player's maximum health.
set-max-health: func (max-health: f32);
/// Returns the player's food level (0-20).
get-food-level: func () -> u8;
/// Sets the player's food level.
set-food-level: func (food-level: u8);
/// Returns the player's food saturation level.
get-saturation: func () -> f32;
/// Sets the player's food saturation level.
set-saturation: func (saturation: f32);
/// Returns the player's food exhaustion level.
get-exhaustion: func () -> f32;
/// Sets the player's food exhaustion level.
set-exhaustion: func (exhaustion: f32);
/// Returns the player's current absorption amount.
get-absorption: func () -> f32;
/// Sets the player's current absorption amount.
set-absorption: func (absorption: f32);
/// Returns the player's total experience level.
get-experience-level: func() -> s32;
/// Returns the player's progress toward the next level (0.0 to 1.0).
get-experience-progress: func() -> f32;
/// Returns the total experience points the player has.
get-experience-points: func() -> s32;
/// Sets the player's total experience level.
set-experience-level: func(level: s32);
/// Sets the player's progress toward the next level.
set-experience-progress: func(progress: f32);
/// Sets the player's total experience points.
set-experience-points: func(points: s32);
/// Adds experience levels to the player.
add-experience-levels: func(levels: s32);
/// Adds experience points to the player.
add-experience-points: func(points: s32);
/// Returns whether the player is currently flying.
is-flying: func() -> bool;
/// Sets whether the player should be flying.
set-flying: func(flying: bool);
/// Returns the player's current abilities.
get-abilities: func() -> player-abilities;
/// Updates the player's abilities.
set-abilities: func(abilities: player-abilities);
/// Returns the player's IP address.
get-ip: func() -> string;
/// Returns the player's current skin textures.
get-skin: func() -> option<player-skin>;
/// Updates the player's skin textures.
/// Note: this only updates the fields, it doesn't reload the skin.
set-skin: func(skin: player-skin);
/// Returns which skin parts are visible.
get-skin-parts: func() -> skin-parts;
/// Sets which skin parts are visible.
set-skin-parts: func(parts: skin-parts);
/// Returns a Java-specific player handle, if the player is connected via Java Edition.
///
/// This allows access to Java-exclusive features like sending specific packets
/// or retrieving the client brand.
as-java: func() -> option<java-player>;
/// Returns a Bedrock-specific player handle, if the player is connected via Bedrock Edition.
///
/// This allows access to Bedrock-exclusive features like custom forms
/// or detailed device information.
as-bedrock: func() -> option<bedrock-player>;
}
/// A handle to a player connected via the Java Edition.
resource java-player {
/// Returns the Minecraft Java Edition version of the player.
get-version: func() -> java-minecraft-version;
/// Returns the brand of the player's client (e.g., \"vanilla\", \"fabric\").
get-brand: func() -> string;
/// Returns the server address the player used to connect.
get-server-address: func() -> string;
/// Returns the player's configuration settings.
get-settings: func() -> java-player-settings;
/// Sends a Java-specific clientbound packet to the player.
send-packet: func(packet: java-packet);
/// Sends a custom payload packet (plugin message) to the player.
send-custom-payload: func(channel: string, data: list<u8>);
/// Shows a dialog to the player.
show-dialog: func(dialog: dialog);
/// Clears any currently shown dialog for the player.
clear-dialog: func();
}
/// A handle to a player connected via the Bedrock Edition.
resource bedrock-player {
/// Returns the Minecraft Bedrock Edition version of the player.
get-version: func() -> bedrock-minecraft-version;
/// Returns the player's configuration settings.
get-settings: func() -> bedrock-player-settings;
/// Returns whether a specific Bedrock-only ability is enabled for the player.
get-ability: func(ability: bedrock-ability) -> bool;
/// Sets whether a specific Bedrock-only ability is enabled for the player.
set-ability: func(ability: bedrock-ability, value: bool);
/// Returns whether a specific Bedrock-only status flag is enabled for the player.
///
/// Status flags control things like whether the player is on fire, sneaking,
/// sprinting, or has specific visual effects.
get-status-flag: func(flag: bedrock-status-flag) -> bool;
/// Sets whether a specific Bedrock-only status flag is enabled for the player.
///
/// This can be used to manually trigger client-side visual states.
set-status-flag: func(flag: bedrock-status-flag, value: bool);
/// Sends a Bedrock-specific clientbound packet to the player.
send-packet: func(packet: bedrock-packet);
/// Opens a Bedrock custom form for the player.
open-form: func(form: form) -> u32;
}
/// Returns a list of all players in a specific world.
get-world-players: func(world-ref: %world) -> list<player>;
}

View File

@@ -1,68 +0,0 @@
/// The main entry point for a Pumpkin plugin.
/// This world defines the exports that the plugin must provide to the host
/// and the imports that the host provides to the plugin.
package pumpkin:plugin@0.1.0;
world plugin {
use context.{context};
use event.{event};
use server.{server as server-instance};
use command.{command-sender, consumed-args, command-error};
// --- Host-provided imports ---
/// Provides logging capabilities to the plugin.
import logging;
/// Provides GUI creation and management.
import gui;
/// Provides scoreboard management.
import scoreboard;
/// Provides global server information and player lookup.
import server;
/// Provides text component building and formatting.
import text;
/// Provides command registration and argument parsing.
import command;
/// Provides the plugin execution context.
import context;
/// Provides internationalization and translation support.
import i18n;
/// Provides task scheduling for delayed or repeating logic.
import scheduler;
/// Provides world information and block manipulation.
import %world;
/// Provides entity types and manipulation.
import entity;
/// Provides boss bar creation and management.
import boss-bar;
/// Provides Bedrock custom forms.
import forms;
/// Provides Java Edition dialogs.
import java-dialogs;
// --- Plugin-provided exports ---
/// Called by the host once to initialize the plugin.
/// Internal use only; plugins should use the `register_plugin!` macro.
export init-plugin: func();
/// Called when the plugin is being loaded.
/// Use this to register commands, events, and perform initial setup.
export on-load: func(context: context) -> result<_, string>;
/// Called when the plugin is being unloaded.
/// Use this to save data and clean up resources.
export on-unload: func(context: context) -> result<_, string>;
/// Provides plugin metadata (name, version, etc.) to the host.
export metadata;
/// Dispatches an event to the plugin for handling.
export handle-event: func(event-id: u32, server: server-instance, event: event) -> event;
/// Dispatches a command execution to the plugin.
export handle-command: func(command-id: u32, sender: command-sender, server: server-instance, args: consumed-args) -> result<s32, command-error>;
/// Dispatches a scheduled task execution to the plugin.
export handle-task: func(handler-id: u32, server: server-instance);
}

View File

@@ -1,67 +0,0 @@
interface recipe {
use item-stack.{item-stack};
/// Represents an ingredient in a recipe.
variant ingredient {
/// A specific item.
item(string),
/// A tag group of items (e.g., "minecraft:logs").
tag(string),
}
/// Represents a shaped crafting recipe.
record shaped-recipe {
/// The pattern of the recipe (e.g., ["# #", " s ", "# #"]).
pattern: list<string>,
/// Mapping of characters in the pattern to ingredients.
key: list<tuple<string, ingredient>>,
/// The resulting item stack.
output: item-stack,
/// The recipe group (optional).
group: option<string>,
}
/// Represents a shapeless crafting recipe.
record shapeless-recipe {
/// The list of ingredients required.
ingredients: list<ingredient>,
/// The resulting item stack.
output: item-stack,
/// The recipe group (optional).
group: option<string>,
}
/// Represents a cooking recipe (Smelting, Blasting, Smoking, Campfire).
record cooking-recipe {
/// The ingredient to cook.
ingredient: ingredient,
/// The resulting item stack.
output: item-stack,
/// Experience points awarded.
experience: f32,
/// Cooking time in ticks.
cooking-time: u32,
/// The recipe group (optional).
group: option<string>,
}
/// Types of cooking stations.
enum cooking-type {
smelting,
blasting,
smoking,
campfire,
}
/// Common interface for registering recipes.
resource recipe-manager {
/// Registers a shaped crafting recipe.
register-shaped: func(id: string, recipe: shaped-recipe);
/// Registers a shapeless crafting recipe.
register-shapeless: func(id: string, recipe: shapeless-recipe);
/// Registers a cooking recipe.
register-cooking: func(id: string, station-type: cooking-type, recipe: cooking-recipe);
}
}

View File

@@ -1,24 +0,0 @@
/// Provides functionality to schedule tasks to be executed later on the server.
interface scheduler {
/// Schedules a task to be executed once after the specified number of ticks.
///
/// * `handler-id`: The unique ID of the handler to call when the task executes.
/// * `delay-ticks`: The number of game ticks to wait before execution (20 ticks = 1 second).
///
/// Returns a unique task ID that can be used to cancel the task.
schedule-delayed-task: func(handler-id: u32, delay-ticks: u64) -> u32;
/// Schedules a task to be executed repeatedly.
///
/// * `handler-id`: The unique ID of the handler to call when the task executes.
/// * `delay-ticks`: The number of game ticks to wait before the first execution.
/// * `period-ticks`: The number of game ticks between subsequent executions.
///
/// Returns a unique task ID that can be used to cancel the task.
schedule-repeating-task: func(handler-id: u32, delay-ticks: u64, period-ticks: u64) -> u32;
/// Cancels a scheduled task if it hasn't finished yet.
///
/// * `task-id`: The ID of the task to cancel.
cancel-task: func(task-id: u32);
}

View File

@@ -1,72 +0,0 @@
interface scoreboard {
use text.{text-component};
use common.{named-color};
enum render-type {
integer,
hearts
}
enum display-slot {
player-list,
sidebar,
below-name,
sidebar-team-black,
sidebar-team-dark-blue,
sidebar-team-dark-green,
sidebar-team-dark-aqua,
sidebar-team-dark-red,
sidebar-team-dark-purple,
sidebar-team-gold,
sidebar-team-gray,
sidebar-team-dark-gray,
sidebar-team-blue,
sidebar-team-green,
sidebar-team-aqua,
sidebar-team-red,
sidebar-team-light-purple,
sidebar-team-yellow,
sidebar-team-white,
}
enum nametag-visibility {
always,
never,
hide-for-other-teams,
hide-for-own-team
}
enum collision-rule {
always,
never,
push-other-teams,
push-own-team
}
record team-settings {
display-name: text-component,
friendly-fire: bool,
see-friendly-invisibles: bool,
nametag-visibility: nametag-visibility,
collision-rule: collision-rule,
color: named-color,
prefix: text-component,
suffix: text-component
}
resource scoreboard {
add-objective: func(name: string, display-name: text-component, render-type: render-type);
remove-objective: func(name: string);
set-display-slot: func(slot: display-slot, objective-name: string);
update-score: func(entity-name: string, objective-name: string, value: s32);
remove-score: func(entity-name: string, objective-name: string);
create-team: func(name: string, settings: team-settings);
remove-team: func(name: string);
update-team: func(name: string, settings: team-settings);
add-player-to-team: func(team-name: string, player-name: string);
remove-player-from-team: func(team-name: string, player-name: string);
}
}

View File

@@ -1,122 +0,0 @@
interface server {
use player.{player};
use common.{game-mode};
use %world.{%world};
use text.{text-component};
use uuid.{uuid};
use recipe.{recipe-manager};
/// Represents the difficulty setting of a Minecraft server.
enum difficulty {
/// Hostile mobs do not spawn. Players regain health automatically.
peaceful,
/// Hostile mobs deal less damage.
easy,
/// Standard Minecraft difficulty.
normal,
/// Hostile mobs deal more damage.
hard,
}
/// Represents the three main Minecraft dimensions.
enum dimension {
overworld,
nether,
end,
}
record sys-info {
cpu-count: option<u32>,
total-memory: option<u64>,
used-memory: option<u64>,
os-name: option<string>,
os-version: option<string>,
pumpkin-version: string,
}
variant command-sender {
console,
player(player),
}
/// Represents the global server instance.
resource server {
/// Returns system information (CPU, Memory, OS).
/// Fields are returned only if the plugin has the corresponding permissions.
get-sys-info: func() -> sys-info;
/// Returns the current difficulty level of the server.
get-difficulty: func() -> difficulty;
/// Returns the total number of players currently connected to the server.
get-player-count: func() -> u32;
/// Returns the rolling average Milliseconds Per Tick (MSPT).
/// A value below 50.0 is required for a stable 20 TPS.
get-mspt: func() -> f64;
/// Returns the effective Ticks Per Second (TPS).
/// Ideal value is 20.0.
get-tps: func() -> f64;
/// Returns a list of all online players across all worlds.
get-all-players: func() -> list<player>;
/// Searches for a player by their exact name.
get-player-by-name: func(name: string) -> option<player>;
/// Searches for a player by their UUID string.
get-player-by-uuid: func(id: uuid) -> option<player>;
/// Returns a list of all worlds on this server.
get-all-worlds: func() -> list<%world>;
/// Gets a world by its dimension name (e.g., "minecraft:overworld").
get-world-by-name: func(name: string) -> option<%world>;
execute-command: func(command: string, sender: command-sender);
/// Creates or loads a world by its name and dimension.
/// If a world with the given name already exists, it will be returned.
create-world: func(name: string, dimension: dimension) -> %world;
/// Broadcasts a system chat message to all players.
broadcast: func(message: string);
/// Broadcasts a tab list header and footer to all players.
broadcast-tab-list-header-footer: func(header: text-component, footer: text-component);
/// Returns the maximum number of players allowed on the server.
get-max-players: func() -> u32;
/// Returns whether the server is in hardcore mode.
is-hardcore: func() -> bool;
/// Returns whether the server is in online mode (authenticates with Mojang).
is-online-mode: func() -> bool;
/// Returns the server's Message of the Day (MOTD).
get-motd: func() -> string;
/// Returns whether the server has a whitelist enabled.
has-whitelist: func() -> bool;
/// Returns whether the server allows the Nether dimension.
get-allow-nether: func() -> bool;
/// Returns whether the server allows the End dimension.
get-allow-end: func() -> bool;
/// Returns the server's maximum view distance.
get-view-distance: func() -> u8;
/// Returns the server's maximum simulation distance.
get-simulation-distance: func() -> u8;
/// Returns the server's default gamemode.
get-default-gamemode: func() -> game-mode;
/// Returns the recipe manager to register custom recipes.
get-recipe-manager: func() -> recipe-manager;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,41 +0,0 @@
interface text {
use common.{named-color, rgb-color, argb-color};
resource text-component {
text: static func(plain: string) -> text-component;
translate: static func(key: string, %with: list<text-component>) -> text-component;
add-child: func(child: text-component);
add-text: func(text: string);
get-text: func() -> string;
encode: func() -> list<u8>;
// Style
color-named: func(color: named-color);
color-rgb: func(color: rgb-color);
bold: func(value: bool);
italic: func(value: bool);
underlined: func(value: bool);
strikethrough: func(value: bool);
obfuscated: func(value: bool);
/// Text inserted into chat when shift-clicked
insertion: func(text: string);
font: func(font: string);
shadow-color: func(color: argb-color);
// Click events
click-open-url: func(url: string);
click-run-command: func(command: string);
click-suggest-command: func(command: string);
click-copy-to-clipboard: func(text: string);
// Hover events
hover-show-text: func(text: text-component);
/// Item data as SNBT string
hover-show-item: func(item: string);
hover-show-entity: func(entity-type: string, id: string, name: option<text-component>);
}
}

View File

@@ -1,16 +0,0 @@
interface uuid {
/// A 128-bit UUID represented as two 64-bit integers.
record uuid {
high: u64,
low: u64,
}
/// Generates a new random v4 UUID.
generate: func() -> uuid;
/// Parses a UUID from a string. Returns none if the string is not a valid UUID.
parse: func(s: string) -> option<uuid>;
/// Converts a UUID to its standard string representation.
to-string: func(id: uuid) -> string;
}

View File

@@ -1,387 +0,0 @@
interface %world {
use common.{position, entity-pose, block-pos};
use block-entity.{block-entity, command-block-entity, block-entity-type};
use text.{text-component};
use scoreboard.{scoreboard};
use particles.{particle};
use sounds.{sound};
use entity-types.{entity-type};
use biomes.{biome};
use uuid.{uuid};
/// Defines how a block reacts when pushed by a piston.
enum piston-behavior {
/// Normal behavior; the block can be pushed and pulled.
normal,
/// The block is destroyed when pushed.
destroy,
/// The block cannot be pushed or pulled.
block,
/// The block is ignored by pistons.
ignore,
/// The block can only be pushed, not pulled.
push-only
}
/// Categories for sounds to control their volume independently.
enum sound-category {
master,
music,
records,
weather,
blocks,
hostile,
neutral,
players,
ambient,
voice,
}
/// Defines how an explosion interacts with blocks in the world.
enum explosion-interaction {
/// No interaction with blocks.
none,
/// Blocks are destroyed and may drop loot.
block,
/// Interaction typical for mob-caused explosions.
mob,
/// Interaction typical for TNT explosions.
tnt,
/// Triggers specific block behaviors.
trigger,
}
/// Flags used to control block updates and notifications.
flags block-flags {
/// Notifies neighbor blocks of the change.
notify-neighbors,
/// Notifies client listeners of the change.
notify-listeners,
/// Forces the block state even if it's the same.
force-state,
/// Skips dropping items when the block is removed.
skip-drops,
/// Indicates the block was moved (e.g., by a piston).
moved,
/// Skips state replacement for redstone wires.
skip-redstone-wire-state-replacement,
/// Skips the callback when a block entity is replaced.
skip-block-entity-replaced-callback,
/// Skips the callback when a block is added.
skip-block-added-callback,
}
/// Detailed information about a block's state.
record block-state {
/// The internal numerical ID of the block state.
id: u16,
/// The light level emitted by this block (0-15).
luminance: u8,
/// How much light this block blocks.
opacity: u8,
/// The hardness of the block, determining mining speed.
hardness: f32,
/// Whether this block is considered air.
is-air: bool,
/// Whether this block is a liquid.
is-liquid: bool,
/// Whether this block is a solid.
is-solid: bool,
/// Whether this block occupies a full cube.
is-full-cube: bool,
/// How this block behaves when pushed by a piston.
piston-behavior: piston-behavior,
/// Whether this block receives random ticks.
has-random-ticks: bool,
/// Whether this block can catch fire.
burnable: bool,
/// Whether a specific tool is required to mine this block and get drops.
tool-required: bool,
/// Whether this block has transparency on its sides.
sided-transparency: bool,
/// Whether this block can be replaced by another block (e.g., grass).
replaceable: bool,
/// Whether this block is considered a solid block for redstone purposes.
is-solid-block: bool,
/// The numerical ID of the block entity type, if any.
block-entity-type: u16,
/// The instrument used for note blocks when placed on top of this block.
instrument: noteblock-instrument,
/// The collision shapes of this block.
collision-shapes: list<bounding-box>,
/// The outline shapes of this block.
outline-shapes: list<bounding-box>,
/// Whether the bottom side of the block is solid.
down-side-solid: bool,
/// Whether the top side of the block is solid.
up-side-solid: bool,
/// Whether the north side of the block is solid.
north-side-solid: bool,
/// Whether the south side of the block is solid.
south-side-solid: bool,
/// Whether the west side of the block is solid.
west-side-solid: bool,
/// Whether the east side of the block is solid.
east-side-solid: bool,
/// Whether the center of the bottom side is solid.
down-center-solid: bool,
/// Whether the center of the top side is solid.
up-center-solid: bool,
/// The color of this block when displayed on a map.
map-color: u8,
}
/// Musical instruments used by note blocks.
enum noteblock-instrument {
harp,
basedrum,
snare,
hat,
bass,
flute,
bell,
guitar,
chime,
xylophone,
iron-xylophone,
cow-bell,
didgeridoo,
bit,
banjo,
pling,
trumpet,
trumpet-exposed,
trumpet-oxidized,
trumpet-weathered,
zombie,
skeleton,
creeper,
dragon,
wither-skeleton,
piglin,
custom-head,
}
/// A simple wrapper for a block state ID.
record block-state-id {
id: u16,
}
resource entity {
get-id: func() -> u32;
get-uuid: func() -> uuid;
get-type: func() -> entity-type;
get-position: func() -> position;
get-world: func() -> %world;
get-yaw: func() -> f32;
get-pitch: func() -> f32;
get-head-yaw: func() -> f32;
teleport: func(pos: position, world-ref: %world);
set-velocity: func(velocity: position);
get-velocity: func() -> position;
get-pose: func() -> entity-pose;
get-name: func() -> text-component;
set-custom-name: func(name: text-component);
get-custom-name: func() -> option<text-component>;
set-custom-name-visible: func(visible: bool);
is-custom-name-visible: func() -> bool;
is-invulnerable: func() -> bool;
set-invulnerable: func(invulnerable: bool);
get-fire-ticks: func() -> s32;
set-fire-ticks: func(ticks: s32);
get-health: func() -> f32;
set-health: func(health: f32);
get-max-health: func() -> f32;
damage: func(amount: f32);
is-dead: func() -> bool;
get-absorption: func() -> f32;
set-absorption: func(amount: f32);
get-age: func() -> s32;
set-age: func(age: s32);
get-fall-distance: func() -> f32;
set-fall-distance: func(distance: f32);
get-ticks-lived: func() -> s32;
set-ticks-lived: func(ticks: s32);
is-sneaking: func() -> bool;
set-sneaking: func(sneaking: bool);
is-sprinting: func() -> bool;
set-sprinting: func(sprinting: bool);
is-swimming: func() -> bool;
set-swimming: func(swimming: bool);
is-invisible: func() -> bool;
set-invisible: func(invisible: bool);
is-glowing: func() -> bool;
set-glowing: func(glowing: bool);
is-fall-flying: func() -> bool;
set-fall-flying: func(fall-flying: bool);
get-width: func() -> f32;
get-height: func() -> f32;
set-rotation: func(yaw: f32, pitch: f32);
is-on-ground: func() -> bool;
is-on-fire: func() -> bool;
set-on-fire: func(on-fire: bool);
has-visual-fire: func() -> bool;
set-visual-fire: func(visual-fire: bool);
get-portal-cooldown: func() -> u32;
set-portal-cooldown: func(cooldown: u32);
get-remaining-air: func() -> s32;
set-remaining-air: func(air: s32);
get-max-air: func() -> s32;
send-system-message: func(message: text-component);
get-eye-height: func() -> f32;
get-eye-position: func() -> position;
get-nearby-entities: func(x: f64, y: f64, z: f64) -> list<entity>;
get-vehicle: func() -> option<entity>;
get-passengers: func() -> list<entity>;
add-passenger: func(passenger: entity);
remove-passenger: func(passenger: entity);
eject-passengers: func();
get-bounding-box: func() -> bounding-box;
is-in-water: func() -> bool;
is-in-lava: func() -> bool;
remove: func();
/// Performs a raycast from the entity's eye position in its looking direction.
raycast: func(max-distance: f64, fluid-handling: bool) -> option<raycast-result>;
}
/// Result of a raycast operation.
record raycast-result {
/// The block position that was hit.
pos: block-pos,
/// The face of the block that was hit.
face: block-direction,
}
/// Represents an axis-aligned bounding box.
record bounding-box {
min: position,
max: position,
}
/// Represents a cardinal direction or block face.
enum block-direction {
down,
up,
north,
south,
west,
east,
}
/// Represents a Minecraft world (dimension).
resource %world {
/// Returns the unique identifier of this world.
get-id: func() -> string;
/// Gets the block state ID at the specified position.
get-block-state-id: func(pos: block-pos) -> u16;
/// Gets detailed block state information at the specified position.
get-block-state: func(pos: block-pos) -> block-state;
/// Sets the block state at the specified position.
set-block-state: func(pos: block-pos, state: u16, update-flags: block-flags);
/// Returns the current time of day in ticks.
get-time-of-day: func() -> u64;
/// Sets the current time of day in ticks.
set-time-of-day: func(time: u64);
/// Returns the total age of the world in ticks.
get-world-age: func() -> u64;
/// Returns the dimension type (e.g., \"minecraft:overworld\").
get-dimension: func() -> string;
/// Gets the highest non-air block Y coordinate at the specified X and Z.
get-top-block-y: func(x: s32, z: s32) -> s32;
/// Gets the highest motion-blocking block Y coordinate.
get-motion-blocking-height: func(x: s32, z: s32) -> s32;
/// Returns whether it is currently raining or snowing.
is-raining: func() -> bool;
/// Sets whether it should be raining or snowing.
set-raining: func(raining: bool);
/// Returns whether there is currently a thunderstorm.
is-thundering: func() -> bool;
/// Sets whether there should be a thunderstorm.
set-thundering: func(thundering: bool);
/// Broadcasts a system message to all players in this world.
broadcast-system-message: func(message: text-component, overlay: bool);
/// Returns the scoreboard associated with this world.
get-scoreboard: func() -> scoreboard;
/// Plays a sound at the specified position for all players in the world.
play-sound: func(sound: sound, category: sound-category, pos: position, volume: f32, pitch: f32);
/// Spawns particles at the specified position.
spawn-particle: func(particle: particle, pos: position, offset: position, max-speed: f32, count: s32);
/// Creates an explosion at the specified position.
create-explosion: func(pos: position, power: f32, create-fire: bool, interaction: explosion-interaction);
/// Returns the sea level of this world.
get-sea-level: func() -> s32;
/// Returns the minimum Y coordinate (bottom of the world).
get-min-y: func() -> s32;
/// Returns the sky light level at the specified position.
get-sky-light: func(pos: block-pos) -> u8;
/// Sets the sky light level at the specified position.
set-sky-light: func(pos: block-pos, level: u8);
/// Returns the block light level at the specified position.
get-block-light: func(pos: block-pos) -> u8;
/// Sets the block light level at the specified position.
set-block-light: func(pos: block-pos, level: u8);
/// Returns the biome at the specified position.
get-biome: func(pos: block-pos) -> biome;
/// Spawns an entity of the specified type at the given position.
spawn-entity: func(entity-type: entity-type, pos: position) -> entity;
/// Returns a list of all entities in this world.
get-entities: func() -> list<entity>;
/// Returns the block entity at the specified position, if any.
get-block-entity: func(pos: block-pos) -> option<block-entity-type>;
}
}