feat(plugin-api): expand block state
This commit is contained in:
parent
4a4b72c83c
commit
5daee97744
@ -93,6 +93,75 @@ interface %world {
|
||||
piston-behavior: piston-behavior,
|
||||
/// Whether this block receives random ticks.
|
||||
has-random-ticks: bool,
|
||||
|
||||
/// Whether this block can catch fire.
|
||||
burnable: bool,
|
||||
/// Whether a specific tool is required to mine this block and get drops.
|
||||
tool-required: bool,
|
||||
/// Whether this block has transparency on its sides.
|
||||
sided-transparency: bool,
|
||||
/// Whether this block can be replaced by another block (e.g., grass).
|
||||
replaceable: bool,
|
||||
/// Whether this block is considered a solid block for redstone purposes.
|
||||
is-solid-block: bool,
|
||||
/// The numerical ID of the block entity type, if any.
|
||||
block-entity-type: u16,
|
||||
/// The instrument used for note blocks when placed on top of this block.
|
||||
instrument: noteblock-instrument,
|
||||
/// The collision shapes of this block.
|
||||
collision-shapes: list<bounding-box>,
|
||||
/// The outline shapes of this block.
|
||||
outline-shapes: list<bounding-box>,
|
||||
|
||||
/// Whether the bottom side of the block is solid.
|
||||
down-side-solid: bool,
|
||||
/// Whether the top side of the block is solid.
|
||||
up-side-solid: bool,
|
||||
/// Whether the north side of the block is solid.
|
||||
north-side-solid: bool,
|
||||
/// Whether the south side of the block is solid.
|
||||
south-side-solid: bool,
|
||||
/// Whether the west side of the block is solid.
|
||||
west-side-solid: bool,
|
||||
/// Whether the east side of the block is solid.
|
||||
east-side-solid: bool,
|
||||
/// Whether the center of the bottom side is solid.
|
||||
down-center-solid: bool,
|
||||
/// Whether the center of the top side is solid.
|
||||
up-center-solid: bool,
|
||||
/// The color of this block when displayed on a map.
|
||||
map-color: u8,
|
||||
}
|
||||
|
||||
/// Musical instruments used by note blocks.
|
||||
enum noteblock-instrument {
|
||||
harp,
|
||||
basedrum,
|
||||
snare,
|
||||
hat,
|
||||
bass,
|
||||
flute,
|
||||
bell,
|
||||
guitar,
|
||||
chime,
|
||||
xylophone,
|
||||
iron-xylophone,
|
||||
cow-bell,
|
||||
didgeridoo,
|
||||
bit,
|
||||
banjo,
|
||||
pling,
|
||||
trumpet,
|
||||
trumpet-exposed,
|
||||
trumpet-oxidized,
|
||||
trumpet-weathered,
|
||||
zombie,
|
||||
skeleton,
|
||||
creeper,
|
||||
dragon,
|
||||
wither-skeleton,
|
||||
piglin,
|
||||
custom-head,
|
||||
}
|
||||
|
||||
/// A simple wrapper for a block state ID.
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
use pumpkin_data::BlockDirection as InternalBlockDirection;
|
||||
use pumpkin_data::block_properties::NoteblockInstrument as InternalNoteblockInstrument;
|
||||
use pumpkin_data::block_state::PistonBehavior;
|
||||
use pumpkin_util::math::position::BlockPos;
|
||||
use pumpkin_world::chunk::ChunkHeightmapType;
|
||||
@ -13,7 +14,8 @@ use crate::block::entities::mob_spawner::MobSpawnerBlockEntity as InternalMobSpa
|
||||
use crate::block::entities::sign::SignBlockEntity as InternalSignBlockEntity;
|
||||
use crate::plugin::loader::wasm::wasm_host::wit::v0_1::pumpkin::plugin::world::{
|
||||
BlockDirection as WitBlockDirection, BlockEntity, BlockEntityType, BlockFlags as WitBlockFlags,
|
||||
BlockPos as WitBlockPos, BlockState as WitBlockState, PistonBehavior as WitPistonBehavior,
|
||||
BlockPos as WitBlockPos, BlockState as WitBlockState, BoundingBox as WitBoundingBox,
|
||||
NoteblockInstrument as WitNoteblockInstrument, PistonBehavior as WitPistonBehavior,
|
||||
};
|
||||
use crate::plugin::loader::wasm::wasm_host::{
|
||||
state::{PluginHostState, TextComponentResource, WorldResource},
|
||||
@ -32,6 +34,49 @@ pub(crate) const fn to_wasm_block_direction(dir: InternalBlockDirection) -> WitB
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) const fn to_wit_noteblock_instrument(
|
||||
instr: InternalNoteblockInstrument,
|
||||
) -> WitNoteblockInstrument {
|
||||
match instr {
|
||||
InternalNoteblockInstrument::Harp => WitNoteblockInstrument::Harp,
|
||||
InternalNoteblockInstrument::Basedrum => WitNoteblockInstrument::Basedrum,
|
||||
InternalNoteblockInstrument::Snare => WitNoteblockInstrument::Snare,
|
||||
InternalNoteblockInstrument::Hat => WitNoteblockInstrument::Hat,
|
||||
InternalNoteblockInstrument::Bass => WitNoteblockInstrument::Bass,
|
||||
InternalNoteblockInstrument::Flute => WitNoteblockInstrument::Flute,
|
||||
InternalNoteblockInstrument::Bell => WitNoteblockInstrument::Bell,
|
||||
InternalNoteblockInstrument::Guitar => WitNoteblockInstrument::Guitar,
|
||||
InternalNoteblockInstrument::Chime => WitNoteblockInstrument::Chime,
|
||||
InternalNoteblockInstrument::Xylophone => WitNoteblockInstrument::Xylophone,
|
||||
InternalNoteblockInstrument::IronXylophone => WitNoteblockInstrument::IronXylophone,
|
||||
InternalNoteblockInstrument::CowBell => WitNoteblockInstrument::CowBell,
|
||||
InternalNoteblockInstrument::Didgeridoo => WitNoteblockInstrument::Didgeridoo,
|
||||
InternalNoteblockInstrument::Bit => WitNoteblockInstrument::Bit,
|
||||
InternalNoteblockInstrument::Banjo => WitNoteblockInstrument::Banjo,
|
||||
InternalNoteblockInstrument::Pling => WitNoteblockInstrument::Pling,
|
||||
InternalNoteblockInstrument::Trumpet => WitNoteblockInstrument::Trumpet,
|
||||
InternalNoteblockInstrument::TrumpetExposed => WitNoteblockInstrument::TrumpetExposed,
|
||||
InternalNoteblockInstrument::TrumpetOxidized => WitNoteblockInstrument::TrumpetOxidized,
|
||||
InternalNoteblockInstrument::TrumpetWeathered => WitNoteblockInstrument::TrumpetWeathered,
|
||||
InternalNoteblockInstrument::Zombie => WitNoteblockInstrument::Zombie,
|
||||
InternalNoteblockInstrument::Skeleton => WitNoteblockInstrument::Skeleton,
|
||||
InternalNoteblockInstrument::Creeper => WitNoteblockInstrument::Creeper,
|
||||
InternalNoteblockInstrument::Dragon => WitNoteblockInstrument::Dragon,
|
||||
InternalNoteblockInstrument::WitherSkeleton => WitNoteblockInstrument::WitherSkeleton,
|
||||
InternalNoteblockInstrument::Piglin => WitNoteblockInstrument::Piglin,
|
||||
InternalNoteblockInstrument::CustomHead => WitNoteblockInstrument::CustomHead,
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) const fn to_wit_bounding_box(
|
||||
bb: pumpkin_util::math::boundingbox::BoundingBox,
|
||||
) -> WitBoundingBox {
|
||||
WitBoundingBox {
|
||||
min: (bb.min.x, bb.min.y, bb.min.z),
|
||||
max: (bb.max.x, bb.max.y, bb.max.z),
|
||||
}
|
||||
}
|
||||
|
||||
// --- Trapping Helpers ---
|
||||
impl PluginHostState {
|
||||
fn get_world_res(&self, res: &Resource<World>) -> wasmtime::Result<&WorldResource> {
|
||||
@ -102,6 +147,30 @@ impl pumpkin::plugin::world::HostWorld for PluginHostState {
|
||||
PistonBehavior::Ignore => WitPistonBehavior::Ignore,
|
||||
PistonBehavior::PushOnly => WitPistonBehavior::PushOnly,
|
||||
},
|
||||
burnable: state.burnable(),
|
||||
tool_required: state.tool_required(),
|
||||
sided_transparency: state.sided_transparency(),
|
||||
replaceable: state.replaceable(),
|
||||
is_solid_block: state.is_solid_block(),
|
||||
block_entity_type: state.block_entity_type,
|
||||
instrument: to_wit_noteblock_instrument(state.instrument),
|
||||
collision_shapes: state
|
||||
.get_block_collision_shapes()
|
||||
.map(to_wit_bounding_box)
|
||||
.collect(),
|
||||
outline_shapes: state
|
||||
.get_block_outline_shapes()
|
||||
.map(to_wit_bounding_box)
|
||||
.collect(),
|
||||
down_side_solid: state.is_side_solid(InternalBlockDirection::Down),
|
||||
up_side_solid: state.is_side_solid(InternalBlockDirection::Up),
|
||||
north_side_solid: state.is_side_solid(InternalBlockDirection::North),
|
||||
south_side_solid: state.is_side_solid(InternalBlockDirection::South),
|
||||
west_side_solid: state.is_side_solid(InternalBlockDirection::West),
|
||||
east_side_solid: state.is_side_solid(InternalBlockDirection::East),
|
||||
down_center_solid: state.is_center_solid(InternalBlockDirection::Down),
|
||||
up_center_solid: state.is_center_solid(InternalBlockDirection::Up),
|
||||
map_color: pumpkin_data::Block::from_state_id(state.id).map_color,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user