refactor(plugin-api): Add pumpkin-plugin-wit as subtree
This commit is contained in:
commit
f40c08ca26
20
crates/pumpkin-plugin-wit/.github/workflows/test-bindgen.yml
vendored
Normal file
20
crates/pumpkin-plugin-wit/.github/workflows/test-bindgen.yml
vendored
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
name: Test `wit-bindgen` against the WIT
|
||||||
|
on: [push, pull_request, workflow_dispatch]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test-bindgen:
|
||||||
|
name: Test with `wit-bindgen`
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v7
|
||||||
|
|
||||||
|
- name: Setup `wit-bindgen`
|
||||||
|
uses: bytecodealliance/actions/wit-bindgen/setup@v1
|
||||||
|
|
||||||
|
- name: Test WIT
|
||||||
|
run: wit-bindgen rust v0.1
|
||||||
176
crates/pumpkin-plugin-wit/LICENSE-APACHE
Normal file
176
crates/pumpkin-plugin-wit/LICENSE-APACHE
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or exemplary damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
21
crates/pumpkin-plugin-wit/LICENSE-MIT
Normal file
21
crates/pumpkin-plugin-wit/LICENSE-MIT
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2024-2026 Pumpkin Contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
41
crates/pumpkin-plugin-wit/v0.1/advancement.wit
Normal file
41
crates/pumpkin-plugin-wit/v0.1/advancement.wit
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
package pumpkin:plugin@0.1.0;
|
||||||
|
|
||||||
|
interface advancement {
|
||||||
|
use text.{text-component};
|
||||||
|
|
||||||
|
/// Frame type for an advancement.
|
||||||
|
enum frame-type {
|
||||||
|
task,
|
||||||
|
challenge,
|
||||||
|
goal,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Display information for an advancement.
|
||||||
|
record advancement-display {
|
||||||
|
title: text-component,
|
||||||
|
description: text-component,
|
||||||
|
frame: frame-type,
|
||||||
|
show-toast: bool,
|
||||||
|
hidden: bool,
|
||||||
|
announce-to-chat: bool,
|
||||||
|
background: option<string>,
|
||||||
|
x: f32,
|
||||||
|
y: f32,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Detailed information about an advancement.
|
||||||
|
record advancement-info {
|
||||||
|
id: string,
|
||||||
|
parent-id: option<string>,
|
||||||
|
criteria: list<string>,
|
||||||
|
display: option<advancement-display>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Represents progress of an advancement for a player.
|
||||||
|
record advancement-progress {
|
||||||
|
advancement-id: string,
|
||||||
|
done: bool,
|
||||||
|
awarded-criteria: list<string>,
|
||||||
|
remaining-criteria: list<string>,
|
||||||
|
}
|
||||||
|
}
|
||||||
56
crates/pumpkin-plugin-wit/v0.1/attributes.wit
Normal file
56
crates/pumpkin-plugin-wit/v0.1/attributes.wit
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
package pumpkin:plugin@0.1.0;
|
||||||
|
|
||||||
|
interface attributes {
|
||||||
|
enum attribute {
|
||||||
|
air-drag-modifier,
|
||||||
|
armor,
|
||||||
|
armor-toughness,
|
||||||
|
attack-damage,
|
||||||
|
attack-knockback,
|
||||||
|
attack-speed,
|
||||||
|
below-name-distance,
|
||||||
|
block-break-speed,
|
||||||
|
block-interaction-range,
|
||||||
|
bounciness,
|
||||||
|
burning-time,
|
||||||
|
camera-distance,
|
||||||
|
explosion-knockback-resistance,
|
||||||
|
entity-interaction-range,
|
||||||
|
fall-damage-multiplier,
|
||||||
|
flying-speed,
|
||||||
|
follow-range,
|
||||||
|
friction-modifier,
|
||||||
|
gravity,
|
||||||
|
jump-strength,
|
||||||
|
knockback-resistance,
|
||||||
|
luck,
|
||||||
|
max-absorption,
|
||||||
|
max-health,
|
||||||
|
mining-efficiency,
|
||||||
|
movement-efficiency,
|
||||||
|
movement-speed,
|
||||||
|
name-tag-distance,
|
||||||
|
oxygen-bonus,
|
||||||
|
safe-fall-distance,
|
||||||
|
scale,
|
||||||
|
sneaking-speed,
|
||||||
|
spawn-reinforcements,
|
||||||
|
step-height,
|
||||||
|
submerged-mining-speed,
|
||||||
|
sweeping-damage-ratio,
|
||||||
|
tempt-range,
|
||||||
|
water-movement-efficiency,
|
||||||
|
waypoint-transmit-range,
|
||||||
|
waypoint-receive-range,
|
||||||
|
}
|
||||||
|
enum modifier-operation {
|
||||||
|
add,
|
||||||
|
multiply-base,
|
||||||
|
multiply-total,
|
||||||
|
}
|
||||||
|
record attribute-modifier {
|
||||||
|
id: string,
|
||||||
|
amount: f64,
|
||||||
|
operation: modifier-operation,
|
||||||
|
}
|
||||||
|
}
|
||||||
1709
crates/pumpkin-plugin-wit/v0.1/bedrock-packets.wit
Normal file
1709
crates/pumpkin-plugin-wit/v0.1/bedrock-packets.wit
Normal file
File diff suppressed because it is too large
Load Diff
72
crates/pumpkin-plugin-wit/v0.1/biomes.wit
Normal file
72
crates/pumpkin-plugin-wit/v0.1/biomes.wit
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
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,
|
||||||
|
sulfur-caves,
|
||||||
|
sunflower-plains,
|
||||||
|
swamp,
|
||||||
|
taiga,
|
||||||
|
the-end,
|
||||||
|
the-void,
|
||||||
|
warm-ocean,
|
||||||
|
warped-forest,
|
||||||
|
windswept-forest,
|
||||||
|
windswept-gravelly-hills,
|
||||||
|
windswept-hills,
|
||||||
|
windswept-savanna,
|
||||||
|
wooded-badlands,
|
||||||
|
}
|
||||||
|
}
|
||||||
423
crates/pumpkin-plugin-wit/v0.1/block-entity.wit
Normal file
423
crates/pumpkin-plugin-wit/v0.1/block-entity.wit
Normal file
@ -0,0 +1,423 @@
|
|||||||
|
interface block-entity {
|
||||||
|
use common.{block-pos, nbt-tree};
|
||||||
|
use item-stack.{item-stack};
|
||||||
|
use inventory.{inventory};
|
||||||
|
|
||||||
|
resource block-entity {
|
||||||
|
resource-location: func() -> string;
|
||||||
|
get-position: func() -> block-pos;
|
||||||
|
get-id: func() -> u32;
|
||||||
|
is-dirty: func() -> bool;
|
||||||
|
clear-dirty: func();
|
||||||
|
|
||||||
|
/// Sets a namespaced custom data value on this block entity.
|
||||||
|
set-custom-data: func(namespace: string, key: string, value: nbt-tree);
|
||||||
|
/// Returns a namespaced custom data value from this block entity, if set.
|
||||||
|
get-custom-data: func(namespace: string, key: string) -> option<nbt-tree>;
|
||||||
|
/// Removes a namespaced custom data value from this block entity.
|
||||||
|
remove-custom-data: func(namespace: string, key: string);
|
||||||
|
/// Returns whether this block entity has a namespaced custom data value.
|
||||||
|
has-custom-data: func(namespace: string, key: string) -> bool;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource container-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
/// Returns the generic inventory handle for this container.
|
||||||
|
get-inventory: func() -> inventory;
|
||||||
|
get-size: func() -> u32;
|
||||||
|
is-empty: func() -> bool;
|
||||||
|
get-stack: func(slot: u32) -> option<item-stack>;
|
||||||
|
set-stack: func(slot: u32, stack: option<item-stack>);
|
||||||
|
remove-stack: func(slot: u32) -> option<item-stack>;
|
||||||
|
clear: 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;
|
||||||
|
get-container: func() -> container-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;
|
||||||
|
get-container: func() -> container-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;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource map-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-map-id: func() -> s32;
|
||||||
|
set-map-id: func(map-id: s32);
|
||||||
|
get-colors: func() -> list<u8>;
|
||||||
|
set-colors: func(colors: list<u8>);
|
||||||
|
set-pixel: func(x: u32, y: u32, color: u8);
|
||||||
|
get-pixel: func(x: u32, y: u32) -> u8;
|
||||||
|
update: func();
|
||||||
|
stream-frame: func(frame-data: list<u8>);
|
||||||
|
}
|
||||||
|
|
||||||
|
resource hanging-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 trapped-chest-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-container: func() -> container-block-entity;
|
||||||
|
viewer-count: func() -> u32;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource banner-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-custom-name: func() -> option<string>;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource barrel-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-container: func() -> container-block-entity;
|
||||||
|
viewer-count: func() -> u32;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource beacon-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-container: func() -> container-block-entity;
|
||||||
|
get-primary-effect: func() -> s32;
|
||||||
|
get-secondary-effect: func() -> s32;
|
||||||
|
get-levels: func() -> s32;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource bed-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource beehive-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-bee-count: func() -> u32;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource bell-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
is-ringing: func() -> bool;
|
||||||
|
get-ring-ticks: func() -> s32;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource blasting-furnace-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-container: func() -> container-block-entity;
|
||||||
|
get-cooking-time-spent: func() -> u16;
|
||||||
|
get-cooking-total-time: func() -> u16;
|
||||||
|
get-lit-time-remaining: func() -> u16;
|
||||||
|
get-lit-total-time: func() -> u16;
|
||||||
|
is-burning: func() -> bool;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource brewing-stand-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-container: func() -> container-block-entity;
|
||||||
|
get-brew-time: func() -> s32;
|
||||||
|
get-fuel: func() -> s32;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource brushable-block-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource calibrated-sculk-sensor-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource campfire-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-container: func() -> container-block-entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource chiseled-bookshelf-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-container: func() -> container-block-entity;
|
||||||
|
get-last-interacted-slot: func() -> s8;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource comparator-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-output-signal: func() -> u8;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource conduit-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource copper-golem-statue-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource crafter-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-container: func() -> container-block-entity;
|
||||||
|
get-crafting-ticks-remaining: func() -> s32;
|
||||||
|
is-triggered: func() -> bool;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource creaking-heart-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-creaking-uuid: func() -> option<string>;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource daylight-detector-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource decorated-pot-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource dispenser-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-container: func() -> container-block-entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource dropper-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-container: func() -> container-block-entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource enchanting-table-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource end-gateway-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-age: func() -> s64;
|
||||||
|
is-exact-teleport: func() -> bool;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource end-portal-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource ender-chest-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
viewer-count: func() -> u32;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource furnace-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-container: func() -> container-block-entity;
|
||||||
|
get-cooking-time-spent: func() -> u16;
|
||||||
|
get-cooking-total-time: func() -> u16;
|
||||||
|
get-lit-time-remaining: func() -> u16;
|
||||||
|
get-lit-total-time: func() -> u16;
|
||||||
|
is-burning: func() -> bool;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource hopper-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-container: func() -> container-block-entity;
|
||||||
|
get-cooldown: func() -> s32;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource jigsaw-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-name: func() -> string;
|
||||||
|
get-target: func() -> string;
|
||||||
|
get-pool: func() -> string;
|
||||||
|
get-final-state: func() -> string;
|
||||||
|
get-selection-priority: func() -> s32;
|
||||||
|
get-placement-priority: func() -> s32;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource lectern-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-container: func() -> container-block-entity;
|
||||||
|
get-page: func() -> u32;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource piston-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-progress: func() -> f32;
|
||||||
|
is-extending: func() -> bool;
|
||||||
|
is-source: func() -> bool;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource potent-sulfur-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource sculk-catalyst-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource sculk-sensor-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource sculk-shrieker-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-warning-level: func() -> s32;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource shelf-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-container: func() -> container-block-entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource shulker-box-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-container: func() -> container-block-entity;
|
||||||
|
viewer-count: func() -> u32;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource skull-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-note-block-sound: func() -> option<string>;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource smoker-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-container: func() -> container-block-entity;
|
||||||
|
get-cooking-time-spent: func() -> u16;
|
||||||
|
get-cooking-total-time: func() -> u16;
|
||||||
|
get-lit-time-remaining: func() -> u16;
|
||||||
|
get-lit-total-time: func() -> u16;
|
||||||
|
is-burning: func() -> bool;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource structure-block-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
get-name: func() -> string;
|
||||||
|
get-author: func() -> string;
|
||||||
|
get-mode: func() -> string;
|
||||||
|
get-integrity: func() -> f32;
|
||||||
|
get-seed: func() -> s64;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource test-block-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource test-instance-block-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource trial-spawner-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
resource vault-block-entity {
|
||||||
|
get-block-entity: func() -> block-entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
variant block-entity-type {
|
||||||
|
command-block-entity(command-block-entity),
|
||||||
|
sign-block-entity(sign-block-entity),
|
||||||
|
hanging-sign-block-entity(hanging-sign-block-entity),
|
||||||
|
jukebox-block-entity(jukebox-block-entity),
|
||||||
|
chest-block-entity(chest-block-entity),
|
||||||
|
trapped-chest-block-entity(trapped-chest-block-entity),
|
||||||
|
mob-spawner-block-entity(mob-spawner-block-entity),
|
||||||
|
map-block-entity(map-block-entity),
|
||||||
|
banner-block-entity(banner-block-entity),
|
||||||
|
barrel-block-entity(barrel-block-entity),
|
||||||
|
beacon-block-entity(beacon-block-entity),
|
||||||
|
bed-block-entity(bed-block-entity),
|
||||||
|
beehive-block-entity(beehive-block-entity),
|
||||||
|
bell-block-entity(bell-block-entity),
|
||||||
|
blasting-furnace-block-entity(blasting-furnace-block-entity),
|
||||||
|
brewing-stand-block-entity(brewing-stand-block-entity),
|
||||||
|
brushable-block-block-entity(brushable-block-block-entity),
|
||||||
|
calibrated-sculk-sensor-block-entity(calibrated-sculk-sensor-block-entity),
|
||||||
|
campfire-block-entity(campfire-block-entity),
|
||||||
|
chiseled-bookshelf-block-entity(chiseled-bookshelf-block-entity),
|
||||||
|
comparator-block-entity(comparator-block-entity),
|
||||||
|
conduit-block-entity(conduit-block-entity),
|
||||||
|
copper-golem-statue-block-entity(copper-golem-statue-block-entity),
|
||||||
|
crafter-block-entity(crafter-block-entity),
|
||||||
|
creaking-heart-block-entity(creaking-heart-block-entity),
|
||||||
|
daylight-detector-block-entity(daylight-detector-block-entity),
|
||||||
|
decorated-pot-block-entity(decorated-pot-block-entity),
|
||||||
|
dispenser-block-entity(dispenser-block-entity),
|
||||||
|
dropper-block-entity(dropper-block-entity),
|
||||||
|
enchanting-table-block-entity(enchanting-table-block-entity),
|
||||||
|
end-gateway-block-entity(end-gateway-block-entity),
|
||||||
|
end-portal-block-entity(end-portal-block-entity),
|
||||||
|
ender-chest-block-entity(ender-chest-block-entity),
|
||||||
|
furnace-block-entity(furnace-block-entity),
|
||||||
|
hopper-block-entity(hopper-block-entity),
|
||||||
|
jigsaw-block-entity(jigsaw-block-entity),
|
||||||
|
lectern-block-entity(lectern-block-entity),
|
||||||
|
piston-block-entity(piston-block-entity),
|
||||||
|
potent-sulfur-block-entity(potent-sulfur-block-entity),
|
||||||
|
sculk-catalyst-block-entity(sculk-catalyst-block-entity),
|
||||||
|
sculk-sensor-block-entity(sculk-sensor-block-entity),
|
||||||
|
sculk-shrieker-block-entity(sculk-shrieker-block-entity),
|
||||||
|
shelf-block-entity(shelf-block-entity),
|
||||||
|
shulker-box-block-entity(shulker-box-block-entity),
|
||||||
|
skull-block-entity(skull-block-entity),
|
||||||
|
smoker-block-entity(smoker-block-entity),
|
||||||
|
structure-block-block-entity(structure-block-block-entity),
|
||||||
|
test-block-block-entity(test-block-block-entity),
|
||||||
|
test-instance-block-block-entity(test-instance-block-block-entity),
|
||||||
|
trial-spawner-block-entity(trial-spawner-block-entity),
|
||||||
|
vault-block-entity(vault-block-entity),
|
||||||
|
container-block-entity(container-block-entity),
|
||||||
|
}
|
||||||
|
}
|
||||||
83
crates/pumpkin-plugin-wit/v0.1/boss-bar.wit
Normal file
83
crates/pumpkin-plugin-wit/v0.1/boss-bar.wit
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
244
crates/pumpkin-plugin-wit/v0.1/command.wit
Normal file
244
crates/pumpkin-plugin-wit/v0.1/command.wit
Normal file
@ -0,0 +1,244 @@
|
|||||||
|
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);
|
||||||
|
suggest-with-handler-id: func(handler-id: u32);
|
||||||
|
require-with-handler-id: func(handler-id: u32);
|
||||||
|
}
|
||||||
|
|
||||||
|
record suggestion-request {
|
||||||
|
input: string,
|
||||||
|
cursor: u32,
|
||||||
|
start: u32,
|
||||||
|
remaining: string,
|
||||||
|
}
|
||||||
|
|
||||||
|
record command-suggestion {
|
||||||
|
value: string,
|
||||||
|
tooltip: option<text-component>,
|
||||||
|
}
|
||||||
|
|
||||||
|
record command-suggestions {
|
||||||
|
start: u32,
|
||||||
|
length: u32,
|
||||||
|
values: list<command-suggestion>,
|
||||||
|
}
|
||||||
|
|
||||||
|
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),
|
||||||
|
advancement(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);
|
||||||
|
}
|
||||||
|
}
|
||||||
261
crates/pumpkin-plugin-wit/v0.1/common.wit
Normal file
261
crates/pumpkin-plugin-wit/v0.1/common.wit
Normal file
@ -0,0 +1,261 @@
|
|||||||
|
/// 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>;
|
||||||
|
|
||||||
|
/// Represents one entry in an NBT compound tag.
|
||||||
|
record nbt-entry {
|
||||||
|
key: string,
|
||||||
|
value: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Represents a Minecraft NBT tag tree.
|
||||||
|
record nbt-tree {
|
||||||
|
root: u32,
|
||||||
|
tags: list<nbt-tag>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Represents a Minecraft NBT tag.
|
||||||
|
variant nbt-tag {
|
||||||
|
byte(s8),
|
||||||
|
short(s16),
|
||||||
|
int(s32),
|
||||||
|
long(s64),
|
||||||
|
float(f32),
|
||||||
|
double(f64),
|
||||||
|
byte-array(list<s8>),
|
||||||
|
string-tag(string),
|
||||||
|
list-tag(list<u32>),
|
||||||
|
compound(list<nbt-entry>),
|
||||||
|
int-array(list<s32>),
|
||||||
|
long-array(list<s64>),
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 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,
|
||||||
|
}
|
||||||
|
}
|
||||||
61
crates/pumpkin-plugin-wit/v0.1/context.wit
Normal file
61
crates/pumpkin-plugin-wit/v0.1/context.wit
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/// 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};
|
||||||
|
|
||||||
|
/// Verified marketplace metadata for signed plugins.
|
||||||
|
record marketplace-metadata {
|
||||||
|
/// The marketplace base URL where this plugin is registered.
|
||||||
|
marketplace-url: string,
|
||||||
|
/// The unique plugin ID on the marketplace.
|
||||||
|
plugin-id: s64,
|
||||||
|
/// The canonical plugin name.
|
||||||
|
plugin-name: string,
|
||||||
|
/// The semver version string of the plugin.
|
||||||
|
version: string,
|
||||||
|
/// Developer ID.
|
||||||
|
dev-id: s64,
|
||||||
|
/// Developer display name or username.
|
||||||
|
dev-name: string,
|
||||||
|
/// Whether this is a paid marketplace plugin.
|
||||||
|
is-paid: bool,
|
||||||
|
/// The buyer / licensee user ID (0 for free/open-source).
|
||||||
|
user-id: s64,
|
||||||
|
/// Unique license key issued to the buyer, if paid.
|
||||||
|
license-key: option<string>,
|
||||||
|
/// ISO-8601 timestamp of when this binary/license was issued.
|
||||||
|
issued-at: string,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 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;
|
||||||
|
|
||||||
|
/// Returns verified marketplace metadata if this plugin binary is signed, or none if unsigned.
|
||||||
|
get-marketplace-metadata: func() -> option<marketplace-metadata>;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
57
crates/pumpkin-plugin-wit/v0.1/damage-types.wit
Normal file
57
crates/pumpkin-plugin-wit/v0.1/damage-types.wit
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package pumpkin:plugin@0.1.0;
|
||||||
|
|
||||||
|
interface damage-types {
|
||||||
|
enum damage-type {
|
||||||
|
arrow,
|
||||||
|
bad-respawn-point,
|
||||||
|
cactus,
|
||||||
|
campfire,
|
||||||
|
cramming,
|
||||||
|
dragon-breath,
|
||||||
|
drown,
|
||||||
|
dry-out,
|
||||||
|
ender-pearl,
|
||||||
|
explosion,
|
||||||
|
fall,
|
||||||
|
falling-anvil,
|
||||||
|
falling-block,
|
||||||
|
falling-stalactite,
|
||||||
|
fireball,
|
||||||
|
fireworks,
|
||||||
|
fly-into-wall,
|
||||||
|
freeze,
|
||||||
|
generic,
|
||||||
|
generic-kill,
|
||||||
|
hot-floor,
|
||||||
|
in-fire,
|
||||||
|
in-wall,
|
||||||
|
indirect-magic,
|
||||||
|
lava,
|
||||||
|
lightning-bolt,
|
||||||
|
mace-smash,
|
||||||
|
magic,
|
||||||
|
mob-attack,
|
||||||
|
mob-attack-no-aggro,
|
||||||
|
mob-projectile,
|
||||||
|
on-fire,
|
||||||
|
out-of-world,
|
||||||
|
outside-border,
|
||||||
|
player-attack,
|
||||||
|
player-explosion,
|
||||||
|
sonic-boom,
|
||||||
|
spear,
|
||||||
|
spit,
|
||||||
|
stalagmite,
|
||||||
|
starve,
|
||||||
|
sting,
|
||||||
|
sulfur-cube-hot,
|
||||||
|
sweet-berry-bush,
|
||||||
|
thorns,
|
||||||
|
thrown,
|
||||||
|
trident,
|
||||||
|
unattributed-fireball,
|
||||||
|
wind-charge,
|
||||||
|
wither,
|
||||||
|
wither-skull,
|
||||||
|
}
|
||||||
|
}
|
||||||
117
crates/pumpkin-plugin-wit/v0.1/data-components.wit
Normal file
117
crates/pumpkin-plugin-wit/v0.1/data-components.wit
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
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,
|
||||||
|
sulfur-cube-content,
|
||||||
|
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,
|
||||||
|
}
|
||||||
|
}
|
||||||
54
crates/pumpkin-plugin-wit/v0.1/datapack.wit
Normal file
54
crates/pumpkin-plugin-wit/v0.1/datapack.wit
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
package pumpkin:plugin@0.1.0;
|
||||||
|
|
||||||
|
interface datapack {
|
||||||
|
/// Information about a discovered or loaded datapack.
|
||||||
|
record datapack-info {
|
||||||
|
id: string,
|
||||||
|
name: string,
|
||||||
|
description: string,
|
||||||
|
pack-format: u32,
|
||||||
|
is-enabled: bool,
|
||||||
|
recipe-count: u32,
|
||||||
|
function-count: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Position options for enabling a datapack relative to other packs.
|
||||||
|
variant enable-position {
|
||||||
|
first,
|
||||||
|
last,
|
||||||
|
before(string),
|
||||||
|
after(string),
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Global manager for inspecting and controlling server datapacks.
|
||||||
|
resource datapack-manager {
|
||||||
|
/// Returns all known datapacks (both enabled and available/disabled).
|
||||||
|
list-all-packs: func() -> list<datapack-info>;
|
||||||
|
|
||||||
|
/// Returns only currently enabled datapacks.
|
||||||
|
list-enabled-packs: func() -> list<datapack-info>;
|
||||||
|
|
||||||
|
/// Returns available (disabled) datapacks.
|
||||||
|
list-available-packs: func() -> list<datapack-info>;
|
||||||
|
|
||||||
|
/// Retrieves details about a specific datapack by name or ID.
|
||||||
|
get-pack: func(name: string) -> option<datapack-info>;
|
||||||
|
|
||||||
|
/// Checks if a datapack is currently enabled.
|
||||||
|
is-enabled: func(name: string) -> bool;
|
||||||
|
|
||||||
|
/// Enables a datapack with a specific priority position.
|
||||||
|
enable-pack: func(name: string, position: enable-position) -> result<_, string>;
|
||||||
|
|
||||||
|
/// Disables an enabled datapack.
|
||||||
|
disable-pack: func(name: string) -> result<_, string>;
|
||||||
|
|
||||||
|
/// Reloads all enabled datapacks, recipes, and function tags,
|
||||||
|
/// synchronizes recipes with online players, and triggers `#minecraft:load`.
|
||||||
|
reload: func() -> result<_, string>;
|
||||||
|
|
||||||
|
/// Executes a datapack function or function tag (e.g. "namespace:fn" or "#namespace:tag").
|
||||||
|
/// Returns the number of commands executed.
|
||||||
|
execute-function: func(name: string) -> result<u32, string>;
|
||||||
|
}
|
||||||
|
}
|
||||||
171
crates/pumpkin-plugin-wit/v0.1/display.wit
Normal file
171
crates/pumpkin-plugin-wit/v0.1/display.wit
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
interface display {
|
||||||
|
use %world.{entity};
|
||||||
|
use text.{text-component};
|
||||||
|
use item-stack.{item-stack};
|
||||||
|
use uuid.{uuid};
|
||||||
|
|
||||||
|
/// Billboard rendering constraints for display entities.
|
||||||
|
enum billboard-mode {
|
||||||
|
fixed,
|
||||||
|
vertical,
|
||||||
|
horizontal,
|
||||||
|
center,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Item display transformation modes for item display entities.
|
||||||
|
enum item-display-mode {
|
||||||
|
none,
|
||||||
|
thirdperson-lefthand,
|
||||||
|
thirdperson-righthand,
|
||||||
|
firstperson-lefthand,
|
||||||
|
firstperson-righthand,
|
||||||
|
head,
|
||||||
|
gui,
|
||||||
|
ground,
|
||||||
|
fixed,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Text alignment options for text display entities.
|
||||||
|
enum text-alignment {
|
||||||
|
center,
|
||||||
|
left,
|
||||||
|
right,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 3D single-precision vector.
|
||||||
|
record vector3f {
|
||||||
|
x: f32,
|
||||||
|
y: f32,
|
||||||
|
z: f32,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Single-precision quaternion representing a 3D rotation.
|
||||||
|
record quaternionf {
|
||||||
|
x: f32,
|
||||||
|
y: f32,
|
||||||
|
z: f32,
|
||||||
|
w: f32,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Transformation (translation, scale, left and right rotations) for display entities.
|
||||||
|
record display-transformation {
|
||||||
|
translation: vector3f,
|
||||||
|
scale: vector3f,
|
||||||
|
left-rotation: quaternionf,
|
||||||
|
right-rotation: quaternionf,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Common base resource for all display entities.
|
||||||
|
resource display-entity {
|
||||||
|
from-entity: static func(entity: borrow<entity>) -> option<display-entity>;
|
||||||
|
get-entity: func() -> entity;
|
||||||
|
|
||||||
|
get-transformation: func() -> display-transformation;
|
||||||
|
set-transformation: func(transformation: display-transformation);
|
||||||
|
|
||||||
|
get-interpolation-duration: func() -> s32;
|
||||||
|
set-interpolation-duration: func(duration: s32);
|
||||||
|
|
||||||
|
get-interpolation-start: func() -> s32;
|
||||||
|
set-interpolation-start: func(delta-ticks: s32);
|
||||||
|
|
||||||
|
get-teleport-duration: func() -> s32;
|
||||||
|
set-teleport-duration: func(duration: s32);
|
||||||
|
|
||||||
|
get-billboard: func() -> billboard-mode;
|
||||||
|
set-billboard: func(mode: billboard-mode);
|
||||||
|
|
||||||
|
get-view-range: func() -> f32;
|
||||||
|
set-view-range: func(range: f32);
|
||||||
|
|
||||||
|
get-shadow-radius: func() -> f32;
|
||||||
|
set-shadow-radius: func(radius: f32);
|
||||||
|
|
||||||
|
get-shadow-strength: func() -> f32;
|
||||||
|
set-shadow-strength: func(strength: f32);
|
||||||
|
|
||||||
|
get-display-width: func() -> f32;
|
||||||
|
set-display-width: func(width: f32);
|
||||||
|
|
||||||
|
get-display-height: func() -> f32;
|
||||||
|
set-display-height: func(height: f32);
|
||||||
|
|
||||||
|
get-glow-color-override: func() -> s32;
|
||||||
|
set-glow-color-override: func(color: s32);
|
||||||
|
|
||||||
|
get-brightness: func() -> s32;
|
||||||
|
set-brightness: func(brightness: s32);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Resource specifically for Block Display entities.
|
||||||
|
resource block-display-entity {
|
||||||
|
from-entity: static func(entity: borrow<entity>) -> option<block-display-entity>;
|
||||||
|
get-display: func() -> display-entity;
|
||||||
|
get-entity: func() -> entity;
|
||||||
|
|
||||||
|
get-block-state-id: func() -> u16;
|
||||||
|
set-block-state-id: func(state-id: u16);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Resource specifically for Item Display entities.
|
||||||
|
resource item-display-entity {
|
||||||
|
from-entity: static func(entity: borrow<entity>) -> option<item-display-entity>;
|
||||||
|
get-display: func() -> display-entity;
|
||||||
|
get-entity: func() -> entity;
|
||||||
|
|
||||||
|
get-item: func() -> option<item-stack>;
|
||||||
|
set-item: func(item: option<item-stack>);
|
||||||
|
|
||||||
|
get-item-display-mode: func() -> item-display-mode;
|
||||||
|
set-item-display-mode: func(mode: item-display-mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Resource specifically for Text Display entities.
|
||||||
|
resource text-display-entity {
|
||||||
|
from-entity: static func(entity: borrow<entity>) -> option<text-display-entity>;
|
||||||
|
get-display: func() -> display-entity;
|
||||||
|
get-entity: func() -> entity;
|
||||||
|
|
||||||
|
get-text: func() -> text-component;
|
||||||
|
set-text: func(text: text-component);
|
||||||
|
|
||||||
|
get-line-width: func() -> s32;
|
||||||
|
set-line-width: func(width: s32);
|
||||||
|
|
||||||
|
get-background: func() -> s32;
|
||||||
|
set-background: func(color: s32);
|
||||||
|
|
||||||
|
get-text-opacity: func() -> s8;
|
||||||
|
set-text-opacity: func(opacity: s8);
|
||||||
|
|
||||||
|
get-shadow: func() -> bool;
|
||||||
|
set-shadow: func(shadow: bool);
|
||||||
|
|
||||||
|
get-see-through: func() -> bool;
|
||||||
|
set-see-through: func(see-through: bool);
|
||||||
|
|
||||||
|
get-default-background: func() -> bool;
|
||||||
|
set-default-background: func(default-background: bool);
|
||||||
|
|
||||||
|
get-alignment: func() -> text-alignment;
|
||||||
|
set-alignment: func(alignment: text-alignment);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Resource specifically for Interaction entities.
|
||||||
|
resource interaction-entity {
|
||||||
|
from-entity: static func(entity: borrow<entity>) -> option<interaction-entity>;
|
||||||
|
get-entity: func() -> entity;
|
||||||
|
|
||||||
|
get-width: func() -> f32;
|
||||||
|
set-width: func(width: f32);
|
||||||
|
|
||||||
|
get-height: func() -> f32;
|
||||||
|
set-height: func(height: f32);
|
||||||
|
|
||||||
|
get-response: func() -> bool;
|
||||||
|
set-response: func(response: bool);
|
||||||
|
|
||||||
|
get-last-attacker: func() -> option<uuid>;
|
||||||
|
get-last-interaction: func() -> option<uuid>;
|
||||||
|
}
|
||||||
|
}
|
||||||
102
crates/pumpkin-plugin-wit/v0.1/enchantments.wit
Normal file
102
crates/pumpkin-plugin-wit/v0.1/enchantments.wit
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
package pumpkin:plugin@0.1.0;
|
||||||
|
|
||||||
|
interface enchantments {
|
||||||
|
use text.{text-component};
|
||||||
|
|
||||||
|
/// Equipment slot where an enchantment is active.
|
||||||
|
enum attribute-modifier-slot {
|
||||||
|
any,
|
||||||
|
main-hand,
|
||||||
|
off-hand,
|
||||||
|
hand,
|
||||||
|
feet,
|
||||||
|
legs,
|
||||||
|
chest,
|
||||||
|
head,
|
||||||
|
armor,
|
||||||
|
body,
|
||||||
|
saddle,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Vanilla enchantments enum.
|
||||||
|
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,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Represents a custom enchantment definition.
|
||||||
|
record custom-enchantment {
|
||||||
|
/// Unique identifier for the enchantment (e.g. "my_plugin:lifesteal").
|
||||||
|
id: string,
|
||||||
|
/// Description or display name of the enchantment.
|
||||||
|
description: text-component,
|
||||||
|
/// Maximum level of the enchantment (e.g. 1..=10).
|
||||||
|
max-level: u32,
|
||||||
|
/// Base anvil repair/combination cost multiplier.
|
||||||
|
anvil-cost: u32,
|
||||||
|
/// Tag or item pattern for supported items (e.g. "#minecraft:enchantable/weapon").
|
||||||
|
supported-items: string,
|
||||||
|
/// Weight / rarity of the enchantment (higher = more common, default 5).
|
||||||
|
weight: u32,
|
||||||
|
/// Equipment slots where this enchantment is active.
|
||||||
|
slots: list<attribute-modifier-slot>,
|
||||||
|
/// List of exclusive/conflicting enchantment IDs.
|
||||||
|
exclusive-set: list<string>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Global manager for registering and querying custom enchantments.
|
||||||
|
resource enchantment-manager {
|
||||||
|
/// Registers a new custom enchantment with the server.
|
||||||
|
register-enchantment: func(enchantment: custom-enchantment) -> result<_, string>;
|
||||||
|
|
||||||
|
/// Gets an enchantment definition by its ID.
|
||||||
|
get-enchantment: func(id: string) -> option<custom-enchantment>;
|
||||||
|
|
||||||
|
/// Checks if an enchantment ID is registered.
|
||||||
|
has-enchantment: func(id: string) -> bool;
|
||||||
|
|
||||||
|
/// Returns all registered custom enchantment IDs.
|
||||||
|
get-all-enchantment-ids: func() -> list<string>;
|
||||||
|
}
|
||||||
|
}
|
||||||
68
crates/pumpkin-plugin-wit/v0.1/entity-statuses.wit
Normal file
68
crates/pumpkin-plugin-wit/v0.1/entity-statuses.wit
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
package pumpkin:plugin@0.1.0;
|
||||||
|
|
||||||
|
interface entity-statuses {
|
||||||
|
enum entity-status {
|
||||||
|
armadillo-peek,
|
||||||
|
armorstand-wobble,
|
||||||
|
body-break,
|
||||||
|
cancel-shake-wetness,
|
||||||
|
chest-break,
|
||||||
|
death,
|
||||||
|
dolphin-looking-for-treasure,
|
||||||
|
drown-particles,
|
||||||
|
eat-grass,
|
||||||
|
end-ram,
|
||||||
|
feet-break,
|
||||||
|
fireworks-explode,
|
||||||
|
fishing-rod-reel-in,
|
||||||
|
fox-eat,
|
||||||
|
full-debug-info,
|
||||||
|
guardian-attack-sound,
|
||||||
|
head-break,
|
||||||
|
honey-jump,
|
||||||
|
honey-slide,
|
||||||
|
in-love-hearts,
|
||||||
|
jump,
|
||||||
|
kinetic-hit,
|
||||||
|
legs-break,
|
||||||
|
love-hearts,
|
||||||
|
mainhand-break,
|
||||||
|
offer-flower,
|
||||||
|
offhand-break,
|
||||||
|
permission-level-admins,
|
||||||
|
permission-level-all,
|
||||||
|
permission-level-gamemasters,
|
||||||
|
permission-level-moderators,
|
||||||
|
permission-level-owners,
|
||||||
|
poof,
|
||||||
|
protected-from-death,
|
||||||
|
ravager-roared,
|
||||||
|
ravager-stunned,
|
||||||
|
reduced-debug-info,
|
||||||
|
saddle-break,
|
||||||
|
shake,
|
||||||
|
shake-wetness,
|
||||||
|
silverfish-merge-anim,
|
||||||
|
sniffer-digging-sound,
|
||||||
|
sonic-charge,
|
||||||
|
squid-anim-synch,
|
||||||
|
start-attacking,
|
||||||
|
start-ram,
|
||||||
|
stop-attacking,
|
||||||
|
stop-offer-flower,
|
||||||
|
swap-hands,
|
||||||
|
taming-failed,
|
||||||
|
taming-succeeded,
|
||||||
|
teleport,
|
||||||
|
tendrils-shiver,
|
||||||
|
tnt-prime,
|
||||||
|
trusting-failed,
|
||||||
|
trusting-succeeded,
|
||||||
|
use-item-complete,
|
||||||
|
villager-angry,
|
||||||
|
villager-happy,
|
||||||
|
villager-sweat,
|
||||||
|
witch-hat-magic,
|
||||||
|
zombie-converting,
|
||||||
|
}
|
||||||
|
}
|
||||||
164
crates/pumpkin-plugin-wit/v0.1/entity-types.wit
Normal file
164
crates/pumpkin-plugin-wit/v0.1/entity-types.wit
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
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,
|
||||||
|
sulfur-cube,
|
||||||
|
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,
|
||||||
|
}
|
||||||
|
}
|
||||||
1
crates/pumpkin-plugin-wit/v0.1/entity.wit
Normal file
1
crates/pumpkin-plugin-wit/v0.1/entity.wit
Normal file
@ -0,0 +1 @@
|
|||||||
|
interface entity { use %world.{entity, living-entity, mob, path-node-type, dye-color, villager-profession, mob-data, sheep-data, wolf-data, cat-data, villager-data, creeper-data, slime-data, enderman-data, iron-golem-data, fox-data, ageable-data, zombie-data, shulker-data, raycast-result, ray-trace-block-result, ray-trace-entity-result, block-direction}; }
|
||||||
2435
crates/pumpkin-plugin-wit/v0.1/event.wit
Normal file
2435
crates/pumpkin-plugin-wit/v0.1/event.wit
Normal file
File diff suppressed because it is too large
Load Diff
51
crates/pumpkin-plugin-wit/v0.1/forms.wit
Normal file
51
crates/pumpkin-plugin-wit/v0.1/forms.wit
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
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),
|
||||||
|
}
|
||||||
|
}
|
||||||
67
crates/pumpkin-plugin-wit/v0.1/game-events.wit
Normal file
67
crates/pumpkin-plugin-wit/v0.1/game-events.wit
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
package pumpkin:plugin@0.1.0;
|
||||||
|
|
||||||
|
interface game-events {
|
||||||
|
enum game-event {
|
||||||
|
block-activate,
|
||||||
|
block-attach,
|
||||||
|
block-change,
|
||||||
|
block-close,
|
||||||
|
block-deactivate,
|
||||||
|
block-destroy,
|
||||||
|
block-detach,
|
||||||
|
block-open,
|
||||||
|
block-place,
|
||||||
|
bounce,
|
||||||
|
container-close,
|
||||||
|
container-open,
|
||||||
|
drink,
|
||||||
|
eat,
|
||||||
|
elytra-glide,
|
||||||
|
entity-damage,
|
||||||
|
entity-die,
|
||||||
|
entity-dismount,
|
||||||
|
entity-interact,
|
||||||
|
entity-mount,
|
||||||
|
entity-place,
|
||||||
|
entity-action,
|
||||||
|
equip,
|
||||||
|
explode,
|
||||||
|
flap,
|
||||||
|
fluid-pickup,
|
||||||
|
fluid-place,
|
||||||
|
hit-ground,
|
||||||
|
instrument-play,
|
||||||
|
item-interact-finish,
|
||||||
|
item-interact-start,
|
||||||
|
jukebox-play,
|
||||||
|
jukebox-stop-play,
|
||||||
|
lightning-strike,
|
||||||
|
note-block-play,
|
||||||
|
prime-fuse,
|
||||||
|
projectile-land,
|
||||||
|
projectile-shoot,
|
||||||
|
sculk-sensor-tendrils-clicking,
|
||||||
|
shear,
|
||||||
|
shriek,
|
||||||
|
splash,
|
||||||
|
step,
|
||||||
|
swim,
|
||||||
|
teleport,
|
||||||
|
unequip,
|
||||||
|
resonate-1,
|
||||||
|
resonate-2,
|
||||||
|
resonate-3,
|
||||||
|
resonate-4,
|
||||||
|
resonate-5,
|
||||||
|
resonate-6,
|
||||||
|
resonate-7,
|
||||||
|
resonate-8,
|
||||||
|
resonate-9,
|
||||||
|
resonate-10,
|
||||||
|
resonate-11,
|
||||||
|
resonate-12,
|
||||||
|
resonate-13,
|
||||||
|
resonate-14,
|
||||||
|
resonate-15,
|
||||||
|
}
|
||||||
|
}
|
||||||
69
crates/pumpkin-plugin-wit/v0.1/game-rules.wit
Normal file
69
crates/pumpkin-plugin-wit/v0.1/game-rules.wit
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
package pumpkin:plugin@0.1.0;
|
||||||
|
|
||||||
|
interface game-rules {
|
||||||
|
enum game-rule {
|
||||||
|
advance-time,
|
||||||
|
advance-weather,
|
||||||
|
allow-entering-nether-using-portals,
|
||||||
|
block-drops,
|
||||||
|
block-explosion-drop-decay,
|
||||||
|
command-block-output,
|
||||||
|
command-blocks-work,
|
||||||
|
drowning-damage,
|
||||||
|
elytra-movement-check,
|
||||||
|
ender-pearls-vanish-on-death,
|
||||||
|
entity-drops,
|
||||||
|
fall-damage,
|
||||||
|
fire-damage,
|
||||||
|
fire-spread-radius-around-player,
|
||||||
|
forgive-dead-players,
|
||||||
|
freeze-damage,
|
||||||
|
global-sound-events,
|
||||||
|
immediate-respawn,
|
||||||
|
keep-inventory,
|
||||||
|
lava-source-conversion,
|
||||||
|
limited-crafting,
|
||||||
|
locator-bar,
|
||||||
|
log-admin-commands,
|
||||||
|
max-block-modifications,
|
||||||
|
max-command-forks,
|
||||||
|
max-command-sequence-length,
|
||||||
|
max-entity-cramming,
|
||||||
|
max-minecart-speed,
|
||||||
|
max-snow-accumulation-height,
|
||||||
|
mob-drops,
|
||||||
|
mob-explosion-drop-decay,
|
||||||
|
mob-griefing,
|
||||||
|
natural-health-regeneration,
|
||||||
|
player-movement-check,
|
||||||
|
players-nether-portal-creative-delay,
|
||||||
|
players-nether-portal-default-delay,
|
||||||
|
players-sleeping-percentage,
|
||||||
|
projectiles-can-break-blocks,
|
||||||
|
pvp,
|
||||||
|
raids,
|
||||||
|
random-tick-speed,
|
||||||
|
reduced-debug-info,
|
||||||
|
respawn-radius,
|
||||||
|
send-command-feedback,
|
||||||
|
show-advancement-messages,
|
||||||
|
show-death-messages,
|
||||||
|
spawn-mobs,
|
||||||
|
spawn-monsters,
|
||||||
|
spawn-patrols,
|
||||||
|
spawn-phantoms,
|
||||||
|
spawn-wandering-traders,
|
||||||
|
spawn-wardens,
|
||||||
|
spawner-blocks-work,
|
||||||
|
spectators-generate-chunks,
|
||||||
|
spread-vines,
|
||||||
|
tnt-explodes,
|
||||||
|
tnt-explosion-drop-decay,
|
||||||
|
universal-anger,
|
||||||
|
water-source-conversion,
|
||||||
|
}
|
||||||
|
variant game-rule-value {
|
||||||
|
int(s32),
|
||||||
|
%bool(bool),
|
||||||
|
}
|
||||||
|
}
|
||||||
39
crates/pumpkin-plugin-wit/v0.1/gui.wit
Normal file
39
crates/pumpkin-plugin-wit/v0.1/gui.wit
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
interface gui {
|
||||||
|
use text.{text-component};
|
||||||
|
use common.{click-type};
|
||||||
|
use item-stack.{item-stack};
|
||||||
|
use screens.{screen};
|
||||||
|
use inventory.{inventory};
|
||||||
|
|
||||||
|
resource gui {
|
||||||
|
constructor(%type: screen, title: text-component);
|
||||||
|
/// Returns the underlying inventory handle for this GUI.
|
||||||
|
get-inventory: func() -> inventory;
|
||||||
|
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() -> screen;
|
||||||
|
|
||||||
|
/// 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
21
crates/pumpkin-plugin-wit/v0.1/i18n.wit
Normal file
21
crates/pumpkin-plugin-wit/v0.1/i18n.wit
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
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);
|
||||||
|
}
|
||||||
78
crates/pumpkin-plugin-wit/v0.1/inventory.wit
Normal file
78
crates/pumpkin-plugin-wit/v0.1/inventory.wit
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
package pumpkin:plugin@0.1.0;
|
||||||
|
|
||||||
|
interface inventory {
|
||||||
|
use item-stack.{item-stack};
|
||||||
|
use common.{hand};
|
||||||
|
|
||||||
|
/// Common inventory resource used across GUIs, player inventories, and containers.
|
||||||
|
resource inventory {
|
||||||
|
/// Returns the number of slots in this inventory.
|
||||||
|
get-size: func() -> u32;
|
||||||
|
|
||||||
|
/// Returns true if all slots in this inventory are empty.
|
||||||
|
is-empty: func() -> bool;
|
||||||
|
|
||||||
|
/// Returns the item in the specified slot index, or none if empty.
|
||||||
|
get-item: func(slot: u32) -> option<item-stack>;
|
||||||
|
|
||||||
|
/// Sets the item in the specified slot index.
|
||||||
|
set-item: func(slot: u32, item: option<item-stack>);
|
||||||
|
|
||||||
|
/// Removes and returns the item in the specified slot index.
|
||||||
|
remove-item: func(slot: u32) -> option<item-stack>;
|
||||||
|
|
||||||
|
/// Clears all items from this inventory.
|
||||||
|
clear: func();
|
||||||
|
|
||||||
|
/// Returns all items in this inventory as a list of slots.
|
||||||
|
get-all-items: func() -> list<option<item-stack>>;
|
||||||
|
|
||||||
|
/// Sets all items in this inventory from a list.
|
||||||
|
set-all-items: func(items: list<option<item-stack>>);
|
||||||
|
|
||||||
|
/// Counts the total number of items with the given ID in this inventory.
|
||||||
|
count-item: func(item-id: string) -> u32;
|
||||||
|
|
||||||
|
/// Checks if the inventory contains at least one item with the given ID.
|
||||||
|
contains-item: func(item-id: string) -> bool;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Specialized player inventory handle providing access to main inventory, armor, offhand, and hotbar.
|
||||||
|
resource player-inventory {
|
||||||
|
/// Returns the generic 36-slot inventory handle (hotbar + main storage).
|
||||||
|
as-inventory: func() -> inventory;
|
||||||
|
|
||||||
|
/// Returns the item currently held in the specified hand.
|
||||||
|
get-item-in-hand: func(hand: hand) -> option<item-stack>;
|
||||||
|
/// Sets the item in the specified hand.
|
||||||
|
set-item-in-hand: func(hand: hand, item: option<item-stack>);
|
||||||
|
|
||||||
|
/// Returns the currently selected hotbar slot index (0-8).
|
||||||
|
get-selected-slot: func() -> u8;
|
||||||
|
/// Sets the currently selected hotbar slot index (0-8).
|
||||||
|
set-selected-slot: func(slot: u8);
|
||||||
|
|
||||||
|
/// Armor slot accessors
|
||||||
|
get-helmet: func() -> option<item-stack>;
|
||||||
|
set-helmet: func(item: option<item-stack>);
|
||||||
|
|
||||||
|
get-chestplate: func() -> option<item-stack>;
|
||||||
|
set-chestplate: func(item: option<item-stack>);
|
||||||
|
|
||||||
|
get-leggings: func() -> option<item-stack>;
|
||||||
|
set-leggings: func(item: option<item-stack>);
|
||||||
|
|
||||||
|
get-boots: func() -> option<item-stack>;
|
||||||
|
set-boots: func(item: option<item-stack>);
|
||||||
|
|
||||||
|
get-off-hand: func() -> option<item-stack>;
|
||||||
|
set-off-hand: func(item: option<item-stack>);
|
||||||
|
|
||||||
|
/// Clears all armor slots.
|
||||||
|
clear-armor: func();
|
||||||
|
/// Clears the 36 main inventory slots.
|
||||||
|
clear-main: func();
|
||||||
|
/// Clears all slots (main inventory, armor, offhand).
|
||||||
|
clear-all: func();
|
||||||
|
}
|
||||||
|
}
|
||||||
7
crates/pumpkin-plugin-wit/v0.1/ipc.wit
Normal file
7
crates/pumpkin-plugin-wit/v0.1/ipc.wit
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
interface ipc {
|
||||||
|
type plugin-id = string;
|
||||||
|
type ipc-message = list<u8>;
|
||||||
|
|
||||||
|
// Sends a message to the specified plugin, synchronously receiving a response (or an error).
|
||||||
|
send-ipc-message: func(recipient: plugin-id, message: ipc-message) -> result<result<ipc-message, string>>;
|
||||||
|
}
|
||||||
104
crates/pumpkin-plugin-wit/v0.1/item-stack.wit
Normal file
104
crates/pumpkin-plugin-wit/v0.1/item-stack.wit
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
interface item-stack {
|
||||||
|
use attributes.{attribute, attribute-modifier};
|
||||||
|
use data-components.{data-component};
|
||||||
|
use enchantments.{attribute-modifier-slot, enchantment};
|
||||||
|
use text.{text-component};
|
||||||
|
|
||||||
|
/// Represents an enchantment and its level.
|
||||||
|
record enchantment-value {
|
||||||
|
enchantment: enchantment,
|
||||||
|
level: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Represents a custom enchantment and its level on an item stack.
|
||||||
|
record custom-enchantment-value {
|
||||||
|
enchantment-id: string,
|
||||||
|
level: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Represents an attribute modifier applied to an item stack for a specific slot.
|
||||||
|
record item-attribute-modifier {
|
||||||
|
attribute: attribute,
|
||||||
|
modifier: attribute-modifier,
|
||||||
|
slot: attribute-modifier-slot,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Represents a data component and its serialized value.
|
||||||
|
record data-component-value {
|
||||||
|
component: data-component,
|
||||||
|
/// The serialized value of the component.
|
||||||
|
value: list<u8>,
|
||||||
|
}
|
||||||
|
|
||||||
|
use common.{nbt-entry, nbt-tree, nbt-tag};
|
||||||
|
|
||||||
|
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 all custom enchantments on this item stack.
|
||||||
|
get-custom-enchantments: func() -> list<custom-enchantment-value>;
|
||||||
|
/// Adds a custom enchantment to this item stack.
|
||||||
|
add-custom-enchantment: func(enchantment-id: string, level: u32);
|
||||||
|
/// Removes a custom enchantment from this item stack.
|
||||||
|
remove-custom-enchantment: func(enchantment-id: string);
|
||||||
|
/// Returns the level of a custom enchantment on this item stack, if present.
|
||||||
|
get-custom-enchantment-level: func(enchantment-id: string) -> option<u32>;
|
||||||
|
/// Returns whether this item stack has a specific custom enchantment.
|
||||||
|
has-custom-enchantment: func(enchantment-id: string) -> bool;
|
||||||
|
|
||||||
|
/// Returns all attribute modifiers on this item stack.
|
||||||
|
get-attribute-modifiers: func() -> list<item-attribute-modifier>;
|
||||||
|
/// Adds an attribute modifier to this item stack.
|
||||||
|
add-attribute-modifier: func(modifier: item-attribute-modifier);
|
||||||
|
/// Removes all attribute modifiers for a specific attribute from this item stack.
|
||||||
|
remove-attribute-modifiers: func(attribute: attribute);
|
||||||
|
/// Clears all custom attribute modifiers from this item stack.
|
||||||
|
clear-attribute-modifiers: func();
|
||||||
|
|
||||||
|
/// 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>);
|
||||||
|
|
||||||
|
/// Sets a namespaced custom data value on this item stack.
|
||||||
|
set-custom-data: func(namespace: string, key: string, value: nbt-tree);
|
||||||
|
/// Returns a namespaced custom data value from this item stack, if set.
|
||||||
|
get-custom-data: func(namespace: string, key: string) -> option<nbt-tree>;
|
||||||
|
/// Removes a namespaced custom data value from this item stack.
|
||||||
|
remove-custom-data: func(namespace: string, key: string);
|
||||||
|
/// Returns whether this item stack has a namespaced custom data value.
|
||||||
|
has-custom-data: func(namespace: string, key: string) -> bool;
|
||||||
|
|
||||||
|
/// 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
155
crates/pumpkin-plugin-wit/v0.1/java-dialogs.wit
Normal file
155
crates/pumpkin-plugin-wit/v0.1/java-dialogs.wit
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
/// 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>,
|
||||||
|
}
|
||||||
|
}
|
||||||
1838
crates/pumpkin-plugin-wit/v0.1/java-packets.wit
Normal file
1838
crates/pumpkin-plugin-wit/v0.1/java-packets.wit
Normal file
File diff suppressed because it is too large
Load Diff
14
crates/pumpkin-plugin-wit/v0.1/log.wit
Normal file
14
crates/pumpkin-plugin-wit/v0.1/log.wit
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
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>);
|
||||||
|
}
|
||||||
19
crates/pumpkin-plugin-wit/v0.1/metadata.wit
Normal file
19
crates/pumpkin-plugin-wit/v0.1/metadata.wit
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/// 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;
|
||||||
|
}
|
||||||
131
crates/pumpkin-plugin-wit/v0.1/particles.wit
Normal file
131
crates/pumpkin-plugin-wit/v0.1/particles.wit
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
package pumpkin:plugin@0.1.0;
|
||||||
|
|
||||||
|
interface particles {
|
||||||
|
enum particle {
|
||||||
|
angry-villager,
|
||||||
|
block,
|
||||||
|
block-marker,
|
||||||
|
bubble,
|
||||||
|
sulfur-bubbles,
|
||||||
|
noxious-gas,
|
||||||
|
noxious-gas-cloud,
|
||||||
|
geyser,
|
||||||
|
geyser-base,
|
||||||
|
geyser-poof,
|
||||||
|
geyser-plume,
|
||||||
|
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,
|
||||||
|
sulfur-cube-goo,
|
||||||
|
}
|
||||||
|
}
|
||||||
46
crates/pumpkin-plugin-wit/v0.1/permission.wit
Normal file
46
crates/pumpkin-plugin-wit/v0.1/permission.wit
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
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>,
|
||||||
|
}
|
||||||
|
}
|
||||||
1432
crates/pumpkin-plugin-wit/v0.1/player.wit
Normal file
1432
crates/pumpkin-plugin-wit/v0.1/player.wit
Normal file
File diff suppressed because it is too large
Load Diff
121
crates/pumpkin-plugin-wit/v0.1/plugin.wit
Normal file
121
crates/pumpkin-plugin-wit/v0.1/plugin.wit
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
/// 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, command-suggestions, suggestion-request};
|
||||||
|
use %world.{entity, chunk-buffer, generation-phase};
|
||||||
|
use ipc.{plugin-id, ipc-message};
|
||||||
|
|
||||||
|
// --- 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;
|
||||||
|
/// Provides status effect types and instances.
|
||||||
|
import status-effect;
|
||||||
|
/// Provides block entity types and instances.
|
||||||
|
import block-entity;
|
||||||
|
/// Provides 1 : 1 inter-plugin communication
|
||||||
|
import ipc;
|
||||||
|
/// Provides entity attribute types and modifiers.
|
||||||
|
import attributes;
|
||||||
|
/// Provides player management.
|
||||||
|
import player;
|
||||||
|
/// Provides advancement definitions and progress types.
|
||||||
|
import advancement;
|
||||||
|
/// Provides custom recipe registration and management.
|
||||||
|
import recipe;
|
||||||
|
/// Provides inventory manipulation and management.
|
||||||
|
import inventory;
|
||||||
|
/// Provides datapack inspection and management.
|
||||||
|
import datapack;
|
||||||
|
/// Provides custom enchantment registration and management.
|
||||||
|
import enchantments;
|
||||||
|
/// Provides damage types.
|
||||||
|
import damage-types;
|
||||||
|
/// Provides screen / window types for GUIs and containers.
|
||||||
|
import screens;
|
||||||
|
/// Provides player statistics categories and types.
|
||||||
|
import statistics;
|
||||||
|
/// Provides Display and Interaction entities.
|
||||||
|
import display;
|
||||||
|
/// Provides game rules definitions and queries.
|
||||||
|
import game-rules;
|
||||||
|
/// Provides game event types.
|
||||||
|
import game-events;
|
||||||
|
/// Provides potion types.
|
||||||
|
import potions;
|
||||||
|
/// Provides entity status / animation event types.
|
||||||
|
import entity-statuses;
|
||||||
|
|
||||||
|
// --- 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 command suggestion request to the plugin.
|
||||||
|
export handle-command-suggestion: func(handler-id: u32, sender: command-sender, server: server-instance, request: suggestion-request) -> command-suggestions;
|
||||||
|
|
||||||
|
/// Dispatches a scheduled task execution to the plugin.
|
||||||
|
export handle-task: func(handler-id: u32, server: server-instance);
|
||||||
|
|
||||||
|
/// Processes an incoming message from another plugin if possible, and returns (a possibly empty) response.
|
||||||
|
export handle-ipc-message: func(sender: plugin-id, message: ipc-message) -> result<ipc-message, string>;
|
||||||
|
|
||||||
|
export handle-ai-goal-can-start: func(goal-id: u32, server: server-instance, entity: entity) -> bool;
|
||||||
|
export handle-ai-goal-should-continue: func(goal-id: u32, server: server-instance, entity: entity) -> bool;
|
||||||
|
export handle-ai-goal-start: func(goal-id: u32, server: server-instance, entity: entity);
|
||||||
|
export handle-ai-goal-tick: func(goal-id: u32, server: server-instance, entity: entity);
|
||||||
|
export handle-ai-goal-stop: func(goal-id: u32, server: server-instance, entity: entity);
|
||||||
|
|
||||||
|
/// Dispatches a chunk generation phase to the plugin.
|
||||||
|
export handle-generate-phase: func(generator-id: u32, phase: generation-phase, chunk: chunk-buffer);
|
||||||
|
}
|
||||||
52
crates/pumpkin-plugin-wit/v0.1/potions.wit
Normal file
52
crates/pumpkin-plugin-wit/v0.1/potions.wit
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
package pumpkin:plugin@0.1.0;
|
||||||
|
|
||||||
|
interface potions {
|
||||||
|
enum potion-type {
|
||||||
|
water,
|
||||||
|
mundane,
|
||||||
|
thick,
|
||||||
|
awkward,
|
||||||
|
night-vision,
|
||||||
|
long-night-vision,
|
||||||
|
invisibility,
|
||||||
|
long-invisibility,
|
||||||
|
leaping,
|
||||||
|
long-leaping,
|
||||||
|
strong-leaping,
|
||||||
|
fire-resistance,
|
||||||
|
long-fire-resistance,
|
||||||
|
swiftness,
|
||||||
|
long-swiftness,
|
||||||
|
strong-swiftness,
|
||||||
|
slowness,
|
||||||
|
long-slowness,
|
||||||
|
strong-slowness,
|
||||||
|
turtle-master,
|
||||||
|
long-turtle-master,
|
||||||
|
strong-turtle-master,
|
||||||
|
water-breathing,
|
||||||
|
long-water-breathing,
|
||||||
|
healing,
|
||||||
|
strong-healing,
|
||||||
|
harming,
|
||||||
|
strong-harming,
|
||||||
|
poison,
|
||||||
|
long-poison,
|
||||||
|
strong-poison,
|
||||||
|
regeneration,
|
||||||
|
long-regeneration,
|
||||||
|
strong-regeneration,
|
||||||
|
strength,
|
||||||
|
long-strength,
|
||||||
|
strong-strength,
|
||||||
|
weakness,
|
||||||
|
long-weakness,
|
||||||
|
luck,
|
||||||
|
slow-falling,
|
||||||
|
long-slow-falling,
|
||||||
|
wind-charged,
|
||||||
|
weaving,
|
||||||
|
oozing,
|
||||||
|
infested,
|
||||||
|
}
|
||||||
|
}
|
||||||
88
crates/pumpkin-plugin-wit/v0.1/recipe.wit
Normal file
88
crates/pumpkin-plugin-wit/v0.1/recipe.wit
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
interface recipe {
|
||||||
|
use item-stack.{item-stack};
|
||||||
|
|
||||||
|
/// Recipe category for the recipe book.
|
||||||
|
enum recipe-category {
|
||||||
|
building,
|
||||||
|
redstone,
|
||||||
|
equipment,
|
||||||
|
misc,
|
||||||
|
food,
|
||||||
|
blocks,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Represents an ingredient in a recipe.
|
||||||
|
variant ingredient {
|
||||||
|
/// A specific item (e.g. "minecraft:diamond").
|
||||||
|
item(string),
|
||||||
|
/// A tag group of items (e.g., "minecraft:logs").
|
||||||
|
tag(string),
|
||||||
|
/// One of multiple specific items.
|
||||||
|
one-of(list<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>,
|
||||||
|
/// The recipe category in the recipe book.
|
||||||
|
category: option<recipe-category>,
|
||||||
|
/// Whether to show a toast notification when the recipe is unlocked.
|
||||||
|
show-notification: option<bool>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 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>,
|
||||||
|
/// The recipe category in the recipe book.
|
||||||
|
category: option<recipe-category>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 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>,
|
||||||
|
/// The recipe category in the recipe book.
|
||||||
|
category: option<recipe-category>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
24
crates/pumpkin-plugin-wit/v0.1/scheduler.wit
Normal file
24
crates/pumpkin-plugin-wit/v0.1/scheduler.wit
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/// 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);
|
||||||
|
}
|
||||||
111
crates/pumpkin-plugin-wit/v0.1/scoreboard.wit
Normal file
111
crates/pumpkin-plugin-wit/v0.1/scoreboard.wit
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
interface scoreboard {
|
||||||
|
use text.{text-component};
|
||||||
|
use common.{named-color};
|
||||||
|
|
||||||
|
enum render-type {
|
||||||
|
integer,
|
||||||
|
hearts
|
||||||
|
}
|
||||||
|
|
||||||
|
variant number-format {
|
||||||
|
blank,
|
||||||
|
fixed(text-component),
|
||||||
|
}
|
||||||
|
|
||||||
|
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, number-format: option<number-format>);
|
||||||
|
update-objective: func(name: string, display-name: text-component, render-type: render-type, number-format: option<number-format>);
|
||||||
|
remove-objective: func(name: string);
|
||||||
|
set-display-slot: func(slot: display-slot, objective-name: string);
|
||||||
|
clear-display-slot: func(slot: display-slot);
|
||||||
|
|
||||||
|
update-score: func(entity-name: string, objective-name: string, value: s32, number-format: option<number-format>);
|
||||||
|
add-score: func(entity-name: string, objective-name: string, delta: s32) -> s32;
|
||||||
|
remove-score: func(entity-name: string, objective-name: string);
|
||||||
|
reset-entity-scores: func(entity-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);
|
||||||
|
clear-team-players: func(team-name: string);
|
||||||
|
|
||||||
|
get-teams: func() -> list<string>;
|
||||||
|
get-team: func(name: string) -> option<team-settings>;
|
||||||
|
get-team-players: func(team-name: string) -> list<string>;
|
||||||
|
get-player-team: func(player-name: string) -> option<string>;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum bedrock-sort-order {
|
||||||
|
ascending,
|
||||||
|
descending
|
||||||
|
}
|
||||||
|
|
||||||
|
enum bedrock-display-slot {
|
||||||
|
player-list,
|
||||||
|
sidebar,
|
||||||
|
below-name
|
||||||
|
}
|
||||||
|
|
||||||
|
resource bedrock-scoreboard {
|
||||||
|
add-objective: func(name: string, display-name: string, sort-order: bedrock-sort-order);
|
||||||
|
update-objective: func(name: string, display-name: string, sort-order: bedrock-sort-order);
|
||||||
|
remove-objective: func(name: string);
|
||||||
|
set-display-slot: func(slot: bedrock-display-slot, objective-name: string);
|
||||||
|
clear-display-slot: func(slot: bedrock-display-slot);
|
||||||
|
|
||||||
|
update-score: func(entity-name: string, objective-name: string, value: s32);
|
||||||
|
add-score: func(entity-name: string, objective-name: string, delta: s32) -> s32;
|
||||||
|
remove-score: func(entity-name: string, objective-name: string);
|
||||||
|
reset-entity-scores: func(entity-name: string);
|
||||||
|
}
|
||||||
|
}
|
||||||
31
crates/pumpkin-plugin-wit/v0.1/screens.wit
Normal file
31
crates/pumpkin-plugin-wit/v0.1/screens.wit
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package pumpkin:plugin@0.1.0;
|
||||||
|
|
||||||
|
interface screens {
|
||||||
|
enum screen {
|
||||||
|
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,
|
||||||
|
}
|
||||||
|
}
|
||||||
286
crates/pumpkin-plugin-wit/v0.1/server.wit
Normal file
286
crates/pumpkin-plugin-wit/v0.1/server.wit
Normal file
@ -0,0 +1,286 @@
|
|||||||
|
interface server {
|
||||||
|
use player.{player, ban-player-options, ban-ip-options, server-link, known-server-link, server-link-label};
|
||||||
|
use common.{game-mode};
|
||||||
|
use %world.{%world};
|
||||||
|
use text.{text-component};
|
||||||
|
use uuid.{uuid};
|
||||||
|
use recipe.{recipe-manager};
|
||||||
|
use enchantments.{enchantment-manager, custom-enchantment};
|
||||||
|
use permission.{permission-level};
|
||||||
|
use advancement.{advancement-info};
|
||||||
|
use datapack.{datapack-manager, datapack-info};
|
||||||
|
|
||||||
|
/// Represents an operator entry in the ops configuration.
|
||||||
|
record op-entry {
|
||||||
|
uuid: uuid,
|
||||||
|
name: string,
|
||||||
|
level: permission-level,
|
||||||
|
bypasses-player-limit: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Interface for querying and managing server operators.
|
||||||
|
resource op-manager {
|
||||||
|
/// Checks if a player UUID is currently an operator.
|
||||||
|
is-op: func(id: uuid) -> bool;
|
||||||
|
|
||||||
|
/// Retrieves the operator entry for a player UUID, if present.
|
||||||
|
get-op: func(id: uuid) -> option<op-entry>;
|
||||||
|
|
||||||
|
/// Gets the effective permission level for a player UUID (returns zero if not op).
|
||||||
|
get-permission-level: func(id: uuid) -> permission-level;
|
||||||
|
|
||||||
|
/// Grants operator status to a player (online or offline) with the specified level and bypass setting.
|
||||||
|
op-player: func(name: string, id: uuid, level: permission-level, bypasses-player-limit: bool);
|
||||||
|
|
||||||
|
/// Revokes operator status from a player (online or offline). Returns true if the player was previously op.
|
||||||
|
deop-player: func(id: uuid) -> bool;
|
||||||
|
|
||||||
|
/// Returns a list of all operator entries on the server.
|
||||||
|
list-ops: func() -> list<op-entry>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Represents a banned player entry in the ban list.
|
||||||
|
record banned-player-entry {
|
||||||
|
uuid: uuid,
|
||||||
|
name: string,
|
||||||
|
created: string,
|
||||||
|
source: string,
|
||||||
|
expires: option<string>,
|
||||||
|
reason: string,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Represents a banned IP entry in the IP ban list.
|
||||||
|
record banned-ip-entry {
|
||||||
|
ip: string,
|
||||||
|
created: string,
|
||||||
|
source: string,
|
||||||
|
expires: option<string>,
|
||||||
|
reason: string,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Global manager for player and IP bans.
|
||||||
|
resource ban-manager {
|
||||||
|
/// Checks if a player UUID is currently banned.
|
||||||
|
is-player-banned: func(id: uuid) -> bool;
|
||||||
|
|
||||||
|
/// Retrieves the ban entry for a player UUID, if banned.
|
||||||
|
get-player-ban: func(id: uuid) -> option<banned-player-entry>;
|
||||||
|
|
||||||
|
/// Bans a player by name and UUID with the specified options (works for online and offline players).
|
||||||
|
ban-player: func(name: string, id: uuid, options: ban-player-options);
|
||||||
|
|
||||||
|
/// Removes a player ban by UUID. Returns true if the player was banned.
|
||||||
|
unban-player: func(id: uuid) -> bool;
|
||||||
|
|
||||||
|
/// Returns all currently active player bans.
|
||||||
|
list-player-bans: func() -> list<banned-player-entry>;
|
||||||
|
|
||||||
|
/// Checks if an IP address is currently banned.
|
||||||
|
is-ip-banned: func(ip: string) -> bool;
|
||||||
|
|
||||||
|
/// Retrieves the ban entry for an IP address, if banned.
|
||||||
|
get-ip-ban: func(ip: string) -> option<banned-ip-entry>;
|
||||||
|
|
||||||
|
/// Bans an IP address with the specified options.
|
||||||
|
ban-ip: func(ip: string, options: ban-ip-options);
|
||||||
|
|
||||||
|
/// Removes an IP ban. Returns true if the IP was banned.
|
||||||
|
unban-ip: func(ip: string) -> bool;
|
||||||
|
|
||||||
|
/// Returns all currently active IP bans.
|
||||||
|
list-ip-bans: func() -> list<banned-ip-entry>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Represents a player entry in the server whitelist.
|
||||||
|
record whitelist-entry {
|
||||||
|
uuid: uuid,
|
||||||
|
name: string,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Global manager for the server whitelist.
|
||||||
|
resource whitelist-manager {
|
||||||
|
/// Returns whether the whitelist is currently enabled.
|
||||||
|
is-enabled: func() -> bool;
|
||||||
|
|
||||||
|
/// Enables or disables the server whitelist. If enabled and enforce-whitelist is set, kicks non-whitelisted players.
|
||||||
|
set-enabled: func(enabled: bool);
|
||||||
|
|
||||||
|
/// Checks if a player UUID is on the whitelist.
|
||||||
|
is-whitelisted: func(id: uuid) -> bool;
|
||||||
|
|
||||||
|
/// Adds a player to the whitelist (online or offline). Returns true if newly added.
|
||||||
|
add-player: func(name: string, id: uuid) -> bool;
|
||||||
|
|
||||||
|
/// Removes a player from the whitelist. Returns true if the player was on the whitelist.
|
||||||
|
remove-player: func(id: uuid) -> bool;
|
||||||
|
|
||||||
|
/// Returns all whitelisted player entries.
|
||||||
|
list-entries: func() -> list<whitelist-entry>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 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") or custom world name (e.g., "world", "arena_1").
|
||||||
|
get-world-by-name: func(name: string) -> option<%world>;
|
||||||
|
|
||||||
|
/// Checks if a world exists by name or dimension.
|
||||||
|
has-world: func(name: string) -> bool;
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
/// Unloads and saves a world by its name or dimension.
|
||||||
|
/// Returns an error if the world cannot be found, is the primary/default world, or still has players inside.
|
||||||
|
unload-world: func(name: string) -> result<_, string>;
|
||||||
|
|
||||||
|
/// Saves all players, player advancements, and loaded worlds to disk.
|
||||||
|
save-all: func() -> result<_, string>;
|
||||||
|
|
||||||
|
/// Returns a list of all online players in a specific world.
|
||||||
|
get-players-in-world: func(world-ref: %world) -> list<player>;
|
||||||
|
|
||||||
|
/// Returns the number of online players in a specific world.
|
||||||
|
get-player-count-in-world: func(world-ref: %world) -> u32;
|
||||||
|
|
||||||
|
/// Broadcasts a system chat message to all players.
|
||||||
|
broadcast: func(message: string);
|
||||||
|
|
||||||
|
/// Deletes a signed chat message from all players' chat windows using its 256-byte signature.
|
||||||
|
delete-message-by-signature: func(signature: list<u8>);
|
||||||
|
|
||||||
|
/// Deletes a signed chat message from all players' chat windows using its signature cache ID.
|
||||||
|
delete-message-by-id: func(signature-id: s32);
|
||||||
|
|
||||||
|
/// 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;
|
||||||
|
|
||||||
|
/// Returns the operator manager to query or modify server operators.
|
||||||
|
get-op-manager: func() -> op-manager;
|
||||||
|
|
||||||
|
/// Returns the global ban manager for querying and modifying player and IP bans.
|
||||||
|
get-ban-manager: func() -> ban-manager;
|
||||||
|
|
||||||
|
/// Returns the global whitelist manager for querying and modifying the server whitelist.
|
||||||
|
get-whitelist-manager: func() -> whitelist-manager;
|
||||||
|
|
||||||
|
/// Returns detailed information about an advancement by its ID (e.g., "minecraft:story/mine_stone" or "story/mine_stone").
|
||||||
|
get-advancement: func(id: string) -> option<advancement-info>;
|
||||||
|
|
||||||
|
/// Returns a list of all registered advancement IDs on the server.
|
||||||
|
get-all-advancement-ids: func() -> list<string>;
|
||||||
|
|
||||||
|
/// Returns the global enchantment manager for registering and querying custom enchantments.
|
||||||
|
get-enchantment-manager: func() -> enchantment-manager;
|
||||||
|
|
||||||
|
/// Returns information about an enchantment by its ID (vanilla or custom).
|
||||||
|
get-enchantment: func(id: string) -> option<custom-enchantment>;
|
||||||
|
|
||||||
|
/// Returns a list of all registered enchantment IDs (custom and vanilla) on the server.
|
||||||
|
get-all-enchantment-ids: func() -> list<string>;
|
||||||
|
|
||||||
|
/// Returns the global datapack manager for inspecting, enabling, disabling, and reloading datapacks.
|
||||||
|
get-datapack-manager: func() -> datapack-manager;
|
||||||
|
|
||||||
|
/// Broadcasts custom server links to all connected players (displayed in the client Esc pause menu in 1.21+).
|
||||||
|
set-server-links: func(links: list<server-link>);
|
||||||
|
}
|
||||||
|
}
|
||||||
1987
crates/pumpkin-plugin-wit/v0.1/sounds.wit
Normal file
1987
crates/pumpkin-plugin-wit/v0.1/sounds.wit
Normal file
File diff suppressed because it is too large
Load Diff
94
crates/pumpkin-plugin-wit/v0.1/statistics.wit
Normal file
94
crates/pumpkin-plugin-wit/v0.1/statistics.wit
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
package pumpkin:plugin@0.1.0;
|
||||||
|
|
||||||
|
interface statistics {
|
||||||
|
enum statistic-category {
|
||||||
|
mined,
|
||||||
|
crafted,
|
||||||
|
used,
|
||||||
|
broken,
|
||||||
|
picked-up,
|
||||||
|
dropped,
|
||||||
|
killed,
|
||||||
|
killed-by,
|
||||||
|
custom,
|
||||||
|
}
|
||||||
|
enum custom-statistic {
|
||||||
|
leave-game,
|
||||||
|
play-time,
|
||||||
|
total-world-time,
|
||||||
|
time-since-death,
|
||||||
|
time-since-rest,
|
||||||
|
sneak-time,
|
||||||
|
walk-one-cm,
|
||||||
|
crouch-one-cm,
|
||||||
|
sprint-one-cm,
|
||||||
|
walk-on-water-one-cm,
|
||||||
|
fall-one-cm,
|
||||||
|
climb-one-cm,
|
||||||
|
fly-one-cm,
|
||||||
|
walk-under-water-one-cm,
|
||||||
|
minecart-one-cm,
|
||||||
|
boat-one-cm,
|
||||||
|
pig-one-cm,
|
||||||
|
happy-ghast-one-cm,
|
||||||
|
horse-one-cm,
|
||||||
|
aviate-one-cm,
|
||||||
|
swim-one-cm,
|
||||||
|
strider-one-cm,
|
||||||
|
nautilus-one-cm,
|
||||||
|
jump,
|
||||||
|
drop,
|
||||||
|
damage-dealt,
|
||||||
|
damage-dealt-absorbed,
|
||||||
|
damage-dealt-resisted,
|
||||||
|
damage-taken,
|
||||||
|
damage-blocked-by-shield,
|
||||||
|
damage-absorbed,
|
||||||
|
damage-resisted,
|
||||||
|
deaths,
|
||||||
|
mob-kills,
|
||||||
|
animals-bred,
|
||||||
|
player-kills,
|
||||||
|
fish-caught,
|
||||||
|
talked-to-villager,
|
||||||
|
traded-with-villager,
|
||||||
|
eat-cake-slice,
|
||||||
|
fill-cauldron,
|
||||||
|
use-cauldron,
|
||||||
|
clean-armor,
|
||||||
|
clean-banner,
|
||||||
|
clean-shulker-box,
|
||||||
|
interact-with-brewingstand,
|
||||||
|
interact-with-beacon,
|
||||||
|
inspect-dropper,
|
||||||
|
inspect-hopper,
|
||||||
|
inspect-dispenser,
|
||||||
|
play-noteblock,
|
||||||
|
tune-noteblock,
|
||||||
|
pot-flower,
|
||||||
|
trigger-trapped-chest,
|
||||||
|
open-enderchest,
|
||||||
|
enchant-item,
|
||||||
|
play-record,
|
||||||
|
interact-with-furnace,
|
||||||
|
interact-with-crafting-table,
|
||||||
|
open-chest,
|
||||||
|
sleep-in-bed,
|
||||||
|
open-shulker-box,
|
||||||
|
open-barrel,
|
||||||
|
interact-with-blast-furnace,
|
||||||
|
interact-with-smoker,
|
||||||
|
interact-with-lectern,
|
||||||
|
interact-with-campfire,
|
||||||
|
interact-with-cartography-table,
|
||||||
|
interact-with-loom,
|
||||||
|
interact-with-stonecutter,
|
||||||
|
bell-ring,
|
||||||
|
raid-trigger,
|
||||||
|
raid-win,
|
||||||
|
interact-with-anvil,
|
||||||
|
interact-with-grindstone,
|
||||||
|
target-hit,
|
||||||
|
interact-with-smithing-table,
|
||||||
|
}
|
||||||
|
}
|
||||||
54
crates/pumpkin-plugin-wit/v0.1/status-effect.wit
Normal file
54
crates/pumpkin-plugin-wit/v0.1/status-effect.wit
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
package pumpkin:plugin@0.1.0;
|
||||||
|
|
||||||
|
interface status-effect {
|
||||||
|
enum status-effect-type {
|
||||||
|
speed,
|
||||||
|
slowness,
|
||||||
|
haste,
|
||||||
|
mining-fatigue,
|
||||||
|
strength,
|
||||||
|
instant-health,
|
||||||
|
instant-damage,
|
||||||
|
jump-boost,
|
||||||
|
nausea,
|
||||||
|
regeneration,
|
||||||
|
resistance,
|
||||||
|
fire-resistance,
|
||||||
|
water-breathing,
|
||||||
|
invisibility,
|
||||||
|
blindness,
|
||||||
|
night-vision,
|
||||||
|
hunger,
|
||||||
|
weakness,
|
||||||
|
poison,
|
||||||
|
wither,
|
||||||
|
health-boost,
|
||||||
|
absorption,
|
||||||
|
saturation,
|
||||||
|
glowing,
|
||||||
|
levitation,
|
||||||
|
luck,
|
||||||
|
unluck,
|
||||||
|
slow-falling,
|
||||||
|
conduit-power,
|
||||||
|
dolphins-grace,
|
||||||
|
bad-omen,
|
||||||
|
hero-of-the-village,
|
||||||
|
darkness,
|
||||||
|
trial-omen,
|
||||||
|
raid-omen,
|
||||||
|
wind-charged,
|
||||||
|
weaving,
|
||||||
|
oozing,
|
||||||
|
infested,
|
||||||
|
}
|
||||||
|
|
||||||
|
record status-effect-instance {
|
||||||
|
effect-type: status-effect-type,
|
||||||
|
duration: u32,
|
||||||
|
amplifier: u8,
|
||||||
|
ambient: bool,
|
||||||
|
show-particles: bool,
|
||||||
|
show-icon: bool,
|
||||||
|
}
|
||||||
|
}
|
||||||
68
crates/pumpkin-plugin-wit/v0.1/text.wit
Normal file
68
crates/pumpkin-plugin-wit/v0.1/text.wit
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
interface text {
|
||||||
|
use common.{named-color, rgb-color, argb-color};
|
||||||
|
|
||||||
|
resource text-component {
|
||||||
|
/// Creates a plain text component.
|
||||||
|
text: static func(plain: string) -> text-component;
|
||||||
|
/// Creates a translation component.
|
||||||
|
translate: static func(key: string, %with: list<text-component>) -> text-component;
|
||||||
|
/// Creates a translation component with a Bedrock-specific fallback key.
|
||||||
|
translate-cross: static func(java-key: string, bedrock-key: string, %with: list<text-component>) -> text-component;
|
||||||
|
/// Creates an entity names / selector text component.
|
||||||
|
entity-names: static func(selector: string, separator: option<string>) -> text-component;
|
||||||
|
/// Creates a keybind text component (e.g., "key.jump").
|
||||||
|
keybind: static func(keybind: string) -> text-component;
|
||||||
|
/// Creates a custom translation component.
|
||||||
|
custom: static func(namespace: string, key: string, locale: string, %with: list<text-component>) -> text-component;
|
||||||
|
|
||||||
|
/// Parses a legacy Minecraft formatted string (using section signs '§' by default) into a text component.
|
||||||
|
from-legacy-string: static func(input: string) -> text-component;
|
||||||
|
/// Parses a legacy formatted string using a custom color code symbol (e.g. '&' or '§').
|
||||||
|
from-legacy-string-with-code: static func(input: string, code-symbol: char) -> text-component;
|
||||||
|
|
||||||
|
/// Parses a standard Minecraft JSON text component.
|
||||||
|
from-json: static func(json: string) -> result<text-component, string>;
|
||||||
|
/// Serializes the text component to JSON format.
|
||||||
|
to-json: func() -> string;
|
||||||
|
|
||||||
|
add-child: func(child: text-component);
|
||||||
|
add-text: func(text: string);
|
||||||
|
get-text: func() -> string;
|
||||||
|
encode: func() -> list<u8>;
|
||||||
|
to-pretty-console: func() -> string;
|
||||||
|
|
||||||
|
// Style
|
||||||
|
|
||||||
|
color-named: func(color: named-color);
|
||||||
|
color-rgb: func(color: rgb-color);
|
||||||
|
gradient-named: func(colors: list<named-color>);
|
||||||
|
gradient: func(colors: list<rgb-color>);
|
||||||
|
rainbow: func();
|
||||||
|
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-open-file: func(path: string);
|
||||||
|
click-run-command: func(command: string);
|
||||||
|
click-suggest-command: func(command: string);
|
||||||
|
click-change-page: func(page: u32);
|
||||||
|
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>);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
16
crates/pumpkin-plugin-wit/v0.1/uuid.wit
Normal file
16
crates/pumpkin-plugin-wit/v0.1/uuid.wit
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
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;
|
||||||
|
}
|
||||||
1050
crates/pumpkin-plugin-wit/v0.1/world.wit
Normal file
1050
crates/pumpkin-plugin-wit/v0.1/world.wit
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user