feat: implement mangrove root block & barrier block (#1172)

* feat: implement mangrove root block

* feat: implement barrier block

* style: cargo fmt
This commit is contained in:
Adi
2025-10-15 13:18:37 +05:30
committed by GitHub
parent ca4f92153a
commit bb24726f5f
4 changed files with 82 additions and 0 deletions

View File

@@ -0,0 +1,39 @@
use crate::block::{BlockBehaviour, GetStateForNeighborUpdateArgs, OnPlaceArgs};
use async_trait::async_trait;
use pumpkin_data::block_properties::{
BlockProperties, MangroveRootsLikeProperties as BarrierLikeProperties,
};
use pumpkin_data::fluid::Fluid;
use pumpkin_macros::pumpkin_block;
use pumpkin_world::BlockStateId;
use pumpkin_world::tick::TickPriority;
#[pumpkin_block("minecraft:barrier")]
pub struct BarrierBlock;
#[async_trait]
impl BlockBehaviour for BarrierBlock {
async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId {
let mut props = BarrierLikeProperties::default(args.block);
props.waterlogged = args.replacing.water_source();
props.to_state_id(args.block)
}
async fn get_state_for_neighbor_update(
&self,
args: GetStateForNeighborUpdateArgs<'_>,
) -> BlockStateId {
let props = BarrierLikeProperties::from_state_id(args.state_id, args.block);
if props.waterlogged {
args.world
.schedule_fluid_tick(
&Fluid::WATER,
*args.position,
Fluid::WATER.flow_speed as u8,
TickPriority::Normal,
)
.await;
}
props.to_state_id(args.block)
}
}

View File

@@ -0,0 +1,37 @@
use crate::block::{BlockBehaviour, GetStateForNeighborUpdateArgs, OnPlaceArgs};
use async_trait::async_trait;
use pumpkin_data::block_properties::{BlockProperties, MangroveRootsLikeProperties};
use pumpkin_data::fluid::Fluid;
use pumpkin_macros::pumpkin_block;
use pumpkin_world::BlockStateId;
use pumpkin_world::tick::TickPriority;
#[pumpkin_block("minecraft:mangrove_roots")]
pub struct MangroveRootsBlock;
#[async_trait]
impl BlockBehaviour for MangroveRootsBlock {
async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId {
let mut props = MangroveRootsLikeProperties::default(args.block);
props.waterlogged = args.replacing.water_source();
props.to_state_id(args.block)
}
async fn get_state_for_neighbor_update(
&self,
args: GetStateForNeighborUpdateArgs<'_>,
) -> BlockStateId {
let props = MangroveRootsLikeProperties::from_state_id(args.state_id, args.block);
if props.waterlogged {
args.world
.schedule_fluid_tick(
&Fluid::WATER,
*args.position,
Fluid::WATER.flow_speed as u8,
TickPriority::Normal,
)
.await;
}
props.to_state_id(args.block)
}
}

View File

@@ -1,6 +1,7 @@
pub mod anvil;
pub mod bamboo;
pub mod barrel;
pub mod barrier;
pub mod bed;
pub mod cactus;
pub mod cake;
@@ -35,6 +36,7 @@ pub mod jukebox;
pub mod ladder;
pub mod lanterns;
pub mod logs;
pub mod mangrove_roots;
pub mod nether_portal;
pub mod note;
pub mod piston;

View File

@@ -1,6 +1,7 @@
use crate::block::blocks::anvil::AnvilBlock;
use crate::block::blocks::bamboo::BambooBlock;
use crate::block::blocks::barrel::BarrelBlock;
use crate::block::blocks::barrier::BarrierBlock;
use crate::block::blocks::bed::BedBlock;
use crate::block::blocks::cactus::CactusBlock;
use crate::block::blocks::carpet::{CarpetBlock, MossCarpetBlock, PaleMossCarpetBlock};
@@ -23,6 +24,7 @@ use crate::block::blocks::glass_panes::GlassPaneBlock;
use crate::block::blocks::grindstone::GrindstoneBlock;
use crate::block::blocks::iron_bars::IronBarsBlock;
use crate::block::blocks::logs::LogBlock;
use crate::block::blocks::mangrove_roots::MangroveRootsBlock;
use crate::block::blocks::nether_portal::NetherPortalBlock;
use crate::block::blocks::note::NoteBlock;
use crate::block::blocks::piston::piston::PistonBlock;
@@ -215,6 +217,8 @@ pub fn default_registry() -> Arc<BlockRegistry> {
manager.register(ChainBlock);
manager.register(LanternBlock);
manager.register(EndRodBlock);
manager.register(BarrierBlock);
manager.register(MangroveRootsBlock);
manager.register(FallingBlock);