From 30f1a881267a807ffdd110ad11f58f5f851c0d86 Mon Sep 17 00:00:00 2001 From: Alexander Medvedev Date: Thu, 15 May 2025 19:12:54 +0200 Subject: [PATCH] Make Lily Pads break when colliding with a boat Boats are currently not even implemented lol --- pumpkin/src/block/blocks/lily_pad.rs | 34 ++++++++++++++++++++++++++++ pumpkin/src/block/blocks/mod.rs | 1 + pumpkin/src/block/mod.rs | 2 ++ 3 files changed, 37 insertions(+) create mode 100644 pumpkin/src/block/blocks/lily_pad.rs diff --git a/pumpkin/src/block/blocks/lily_pad.rs b/pumpkin/src/block/blocks/lily_pad.rs new file mode 100644 index 000000000..045912f6b --- /dev/null +++ b/pumpkin/src/block/blocks/lily_pad.rs @@ -0,0 +1,34 @@ +use std::sync::Arc; + +use async_trait::async_trait; +use pumpkin_data::{Block, BlockState}; +use pumpkin_macros::pumpkin_block; +use pumpkin_util::math::position::BlockPos; +use pumpkin_world::world::BlockFlags; + +use crate::{block::pumpkin_block::PumpkinBlock, entity::EntityBase, world::World}; + +#[pumpkin_block("minecraft:lily_pad")] +pub struct LilyPadBlock; + +#[async_trait] +impl PumpkinBlock for LilyPadBlock { + async fn on_entity_collision( + &self, + world: &Arc, + entity: &dyn EntityBase, + pos: BlockPos, + _block: Block, + _state: BlockState, + ) { + // Proberbly not the best soultion, but works + if entity + .get_entity() + .entity_type + .resource_name + .ends_with("_boat") + { + world.break_block(&pos, None, BlockFlags::empty()).await; + } + } +} diff --git a/pumpkin/src/block/blocks/mod.rs b/pumpkin/src/block/blocks/mod.rs index 4df9e9a0e..02feb667d 100644 --- a/pumpkin/src/block/blocks/mod.rs +++ b/pumpkin/src/block/blocks/mod.rs @@ -13,6 +13,7 @@ pub mod furnace; pub mod glass_panes; pub mod iron_bars; pub mod jukebox; +pub mod lily_pad; pub mod logs; pub mod nether_portal; pub mod note; diff --git a/pumpkin/src/block/mod.rs b/pumpkin/src/block/mod.rs index 8da3275ae..15c4487e9 100644 --- a/pumpkin/src/block/mod.rs +++ b/pumpkin/src/block/mod.rs @@ -10,6 +10,7 @@ use blocks::fire::fire::FireBlock; use blocks::fire::soul_fire::SoulFireBlock; use blocks::glass_panes::GlassPaneBlock; use blocks::iron_bars::IronBarsBlock; +use blocks::lily_pad::LilyPadBlock; use blocks::logs::LogBlock; use blocks::nether_portal::NetherPortalBlock; use blocks::note::NoteBlock; @@ -90,6 +91,7 @@ pub fn default_registry() -> Arc { manager.register(SignBlock); manager.register(SlabBlock); manager.register(StairBlock); + manager.register(LilyPadBlock); manager.register(SugarCaneBlock); manager.register(TNTBlock); manager.register(TorchBlock);