Skip to content

Commit ffc98de

Browse files
committed
feat: implement barrier block
1 parent 2b4fed2 commit ffc98de

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
use crate::block::{BlockBehaviour, GetStateForNeighborUpdateArgs, OnPlaceArgs};
2+
use async_trait::async_trait;
3+
use pumpkin_data::block_properties::{BlockProperties, MangroveRootsLikeProperties as BarrierLikeProperties };
4+
use pumpkin_data::fluid::Fluid;
5+
use pumpkin_macros::pumpkin_block;
6+
use pumpkin_world::tick::TickPriority;
7+
use pumpkin_world::BlockStateId;
8+
9+
#[pumpkin_block("minecraft:barrier")]
10+
pub struct BarrierBlock;
11+
12+
#[async_trait]
13+
impl BlockBehaviour for BarrierBlock {
14+
async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId {
15+
let mut props = BarrierLikeProperties::default(args.block);
16+
props.waterlogged = args.replacing.water_source();
17+
props.to_state_id(args.block)
18+
}
19+
20+
async fn get_state_for_neighbor_update(
21+
&self,
22+
args: GetStateForNeighborUpdateArgs<'_>,
23+
) -> BlockStateId {
24+
let props = BarrierLikeProperties::from_state_id(args.state_id, args.block);
25+
if props.waterlogged {
26+
args.world
27+
.schedule_fluid_tick(
28+
&Fluid::WATER,
29+
*args.position,
30+
Fluid::WATER.flow_speed as u8,
31+
TickPriority::Normal
32+
)
33+
.await;
34+
}
35+
props.to_state_id(args.block)
36+
}
37+
}

pumpkin/src/block/blocks/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
pub mod anvil;
22
pub mod bamboo;
33
pub mod barrel;
4+
pub mod barrier;
45
pub mod bed;
56
pub mod cactus;
67
pub mod cake;

pumpkin/src/block/registry.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use crate::block::blocks::anvil::AnvilBlock;
22
use crate::block::blocks::bamboo::BambooBlock;
33
use crate::block::blocks::barrel::BarrelBlock;
4+
use crate::block::blocks::barrier::BarrierBlock;
45
use crate::block::blocks::bed::BedBlock;
56
use crate::block::blocks::cactus::CactusBlock;
67
use crate::block::blocks::carpet::{CarpetBlock, MossCarpetBlock, PaleMossCarpetBlock};
@@ -216,6 +217,7 @@ pub fn default_registry() -> Arc<BlockRegistry> {
216217
manager.register(ChainBlock);
217218
manager.register(LanternBlock);
218219
manager.register(EndRodBlock);
220+
manager.register(BarrierBlock);
219221
manager.register(MangroveRootsBlock);
220222

221223
manager.register(FallingBlock);

0 commit comments

Comments
 (0)