mirror of
https://github.com/Pumpkin-MC/Pumpkin.git
synced 2026-08-30 20:14:23 +00:00
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:
39
pumpkin/src/block/blocks/barrier.rs
Normal file
39
pumpkin/src/block/blocks/barrier.rs
Normal 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)
|
||||
}
|
||||
}
|
||||
37
pumpkin/src/block/blocks/mangrove_roots.rs
Normal file
37
pumpkin/src/block/blocks/mangrove_roots.rs
Normal 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)
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user