From fd8d89a219dd11c19237ed462a2858f5ed85837d Mon Sep 17 00:00:00 2001 From: Alexander Medvedev Date: Tue, 29 Jul 2025 12:19:05 +0200 Subject: [PATCH] Fix https://github.com/Pumpkin-MC/Pumpkin/issues/1075 --- pumpkin-macros/src/lib.rs | 4 +- .../block/blocks/abstruct_wall_mounting.rs | 2 +- pumpkin/src/block/blocks/anvil.rs | 4 +- pumpkin/src/block/blocks/bamboo.rs | 4 +- pumpkin/src/block/blocks/banners.rs | 4 +- pumpkin/src/block/blocks/barrel.rs | 6 +- pumpkin/src/block/blocks/bed.rs | 8 +- pumpkin/src/block/blocks/blast_furnace.rs | 4 +- pumpkin/src/block/blocks/cactus.rs | 8 +- pumpkin/src/block/blocks/cake.rs | 4 +- pumpkin/src/block/blocks/campfire.rs | 8 +- pumpkin/src/block/blocks/candle_cakes.rs | 4 +- pumpkin/src/block/blocks/candles.rs | 8 +- pumpkin/src/block/blocks/carpet.rs | 10 +- pumpkin/src/block/blocks/chests.rs | 8 +- .../src/block/blocks/chiseled_bookshelf.rs | 10 +- pumpkin/src/block/blocks/command.rs | 6 +- pumpkin/src/block/blocks/composter.rs | 8 +- pumpkin/src/block/blocks/crafting_table.rs | 4 +- pumpkin/src/block/blocks/dirt_path.rs | 12 +- pumpkin/src/block/blocks/doors.rs | 16 +- pumpkin/src/block/blocks/end_portal.rs | 8 +- pumpkin/src/block/blocks/end_portal_frame.rs | 4 +- pumpkin/src/block/blocks/ender_chest.rs | 4 +- pumpkin/src/block/blocks/farmland.rs | 12 +- pumpkin/src/block/blocks/fence_gates.rs | 10 +- pumpkin/src/block/blocks/fences.rs | 8 +- pumpkin/src/block/blocks/fire/fire.rs | 8 +- pumpkin/src/block/blocks/fire/mod.rs | 2 +- pumpkin/src/block/blocks/fire/soul_fire.rs | 6 +- pumpkin/src/block/blocks/flower_pots.rs | 4 +- pumpkin/src/block/blocks/furnace.rs | 71 +-- pumpkin/src/block/blocks/glass_panes.rs | 8 +- pumpkin/src/block/blocks/glazed_terracotta.rs | 4 +- pumpkin/src/block/blocks/grindstone.rs | 8 +- pumpkin/src/block/blocks/hopper.rs | 6 +- pumpkin/src/block/blocks/iron_bars.rs | 8 +- pumpkin/src/block/blocks/jukebox.rs | 4 +- pumpkin/src/block/blocks/ladder.rs | 6 +- pumpkin/src/block/blocks/lectern.rs | 4 +- pumpkin/src/block/blocks/logs.rs | 6 +- pumpkin/src/block/blocks/nether_portal.rs | 6 +- pumpkin/src/block/blocks/note.rs | 8 +- pumpkin/src/block/blocks/piston/piston.rs | 8 +- .../block/blocks/piston/piston_extension.rs | 6 +- .../src/block/blocks/piston/piston_head.rs | 6 +- pumpkin/src/block/blocks/plant/bush.rs | 4 +- .../src/block/blocks/plant/crop/beetroot.rs | 6 +- pumpkin/src/block/blocks/plant/crop/carrot.rs | 6 +- .../src/block/blocks/plant/crop/potatoes.rs | 6 +- .../block/blocks/plant/crop/torch_flower.rs | 6 +- pumpkin/src/block/blocks/plant/crop/wheat.rs | 6 +- .../src/block/blocks/plant/dry_vegetation.rs | 4 +- pumpkin/src/block/blocks/plant/flower.rs | 8 +- pumpkin/src/block/blocks/plant/flowerbed.rs | 8 +- pumpkin/src/block/blocks/plant/leaf_litter.rs | 8 +- pumpkin/src/block/blocks/plant/lily_pad.rs | 6 +- .../src/block/blocks/plant/mushroom_plant.rs | 4 +- pumpkin/src/block/blocks/plant/nether_wart.rs | 4 +- pumpkin/src/block/blocks/plant/roots.rs | 4 +- pumpkin/src/block/blocks/plant/sapling.rs | 6 +- pumpkin/src/block/blocks/plant/sea_grass.rs | 4 +- pumpkin/src/block/blocks/plant/sea_pickles.rs | 8 +- pumpkin/src/block/blocks/plant/segmented.rs | 6 +- pumpkin/src/block/blocks/plant/short_plant.rs | 4 +- pumpkin/src/block/blocks/plant/tall_plant.rs | 4 +- pumpkin/src/block/blocks/pumpkin.rs | 4 +- .../blocks/redstone/abstruct_redstone_gate.rs | 4 +- pumpkin/src/block/blocks/redstone/buttons.rs | 18 +- .../src/block/blocks/redstone/comparator.rs | 14 +- .../src/block/blocks/redstone/copper_bulb.rs | 4 +- .../src/block/blocks/redstone/dispenser.rs | 4 +- pumpkin/src/block/blocks/redstone/dropper.rs | 9 +- pumpkin/src/block/blocks/redstone/lever.rs | 6 +- pumpkin/src/block/blocks/redstone/observer.rs | 6 +- .../blocks/redstone/pressure_plate/mod.rs | 2 +- .../blocks/redstone/pressure_plate/plate.rs | 10 +- .../redstone/pressure_plate/weighted.rs | 10 +- .../blocks/redstone/rails/activator_rail.rs | 24 +- .../blocks/redstone/rails/detector_rail.rs | 12 +- .../blocks/redstone/rails/powered_rail.rs | 24 +- .../src/block/blocks/redstone/rails/rail.rs | 12 +- .../block/blocks/redstone/redstone_block.rs | 4 +- .../block/blocks/redstone/redstone_lamp.rs | 6 +- .../block/blocks/redstone/redstone_torch.rs | 22 +- .../block/blocks/redstone/redstone_wire.rs | 8 +- pumpkin/src/block/blocks/redstone/repeater.rs | 12 +- .../src/block/blocks/redstone/target_block.rs | 4 +- pumpkin/src/block/blocks/redstone/tripwire.rs | 8 +- .../block/blocks/redstone/tripwire_hook.rs | 8 +- pumpkin/src/block/blocks/shulker_box.rs | 6 +- pumpkin/src/block/blocks/signs.rs | 10 +- pumpkin/src/block/blocks/skull_block.rs | 4 +- pumpkin/src/block/blocks/slabs.rs | 8 +- pumpkin/src/block/blocks/smoker.rs | 4 +- pumpkin/src/block/blocks/stairs.rs | 8 +- pumpkin/src/block/blocks/sugar_cane.rs | 6 +- pumpkin/src/block/blocks/tnt.rs | 8 +- pumpkin/src/block/blocks/torches.rs | 6 +- pumpkin/src/block/blocks/trapdoor.rs | 4 +- pumpkin/src/block/blocks/vine.rs | 4 +- pumpkin/src/block/blocks/walls.rs | 8 +- pumpkin/src/block/fluid/flowing.rs | 7 + pumpkin/src/block/fluid/lava.rs | 4 +- pumpkin/src/block/fluid/mod.rs | 90 ++++ pumpkin/src/block/fluid/water.rs | 4 +- pumpkin/src/block/mod.rs | 485 ++++++++++-------- pumpkin/src/block/pumpkin_block.rs | 284 ---------- pumpkin/src/block/pumpkin_fluid.rs | 89 ---- pumpkin/src/block/registry.rs | 239 ++++++++- pumpkin/src/item/items/axe.rs | 4 +- pumpkin/src/item/items/bucket.rs | 10 +- pumpkin/src/item/items/egg.rs | 4 +- pumpkin/src/item/items/ender_eye.rs | 4 +- pumpkin/src/item/items/hoe.rs | 4 +- pumpkin/src/item/items/honeycomb.rs | 4 +- pumpkin/src/item/items/ignite/fire_charge.rs | 4 +- .../src/item/items/ignite/flint_and_steel.rs | 6 +- pumpkin/src/item/items/mace.rs | 38 +- pumpkin/src/item/items/minecart.rs | 4 +- pumpkin/src/item/items/shovel.rs | 4 +- pumpkin/src/item/items/snowball.rs | 4 +- pumpkin/src/item/items/swords.rs | 4 +- pumpkin/src/item/items/trident.rs | 4 +- pumpkin/src/item/mod.rs | 50 +- pumpkin/src/item/pumpkin_item.rs | 48 -- pumpkin/src/item/registry.rs | 8 +- pumpkin/src/net/java/play.rs | 2 +- pumpkin/src/server/mod.rs | 2 +- pumpkin/src/world/explosion.rs | 2 +- pumpkin/src/world/mod.rs | 2 +- 131 files changed, 1074 insertions(+), 1130 deletions(-) delete mode 100644 pumpkin/src/block/pumpkin_block.rs delete mode 100644 pumpkin/src/block/pumpkin_fluid.rs delete mode 100644 pumpkin/src/item/pumpkin_item.rs diff --git a/pumpkin-macros/src/lib.rs b/pumpkin-macros/src/lib.rs index 6cb1d096e..e8ae94cc9 100644 --- a/pumpkin-macros/src/lib.rs +++ b/pumpkin-macros/src/lib.rs @@ -181,7 +181,7 @@ pub fn pumpkin_block(input: TokenStream, item: TokenStream) -> TokenStream { let code = quote! { #item - impl #impl_generics crate::block::pumpkin_block::BlockMetadata for #name #ty_generics { + impl #impl_generics crate::block::BlockMetadata for #name #ty_generics { fn namespace(&self) -> &'static str { #namespace } @@ -210,7 +210,7 @@ pub fn pumpkin_block_from_tag(input: TokenStream, item: TokenStream) -> TokenStr let code = quote! { #item - impl #impl_generics crate::block::pumpkin_block::BlockMetadata for #name #ty_generics { + impl #impl_generics crate::block::BlockMetadata for #name #ty_generics { fn namespace(&self) -> &'static str { #namespace } diff --git a/pumpkin/src/block/blocks/abstruct_wall_mounting.rs b/pumpkin/src/block/blocks/abstruct_wall_mounting.rs index f861689b4..ee35f4f70 100644 --- a/pumpkin/src/block/blocks/abstruct_wall_mounting.rs +++ b/pumpkin/src/block/blocks/abstruct_wall_mounting.rs @@ -6,7 +6,7 @@ use pumpkin_data::{ use pumpkin_util::math::position::BlockPos; use pumpkin_world::{BlockStateId, world::BlockAccessor}; -use crate::{block::pumpkin_block::GetStateForNeighborUpdateArgs, entity::player::Player}; +use crate::{block::GetStateForNeighborUpdateArgs, entity::player::Player}; #[async_trait] pub trait WallMountedBlock { diff --git a/pumpkin/src/block/blocks/anvil.rs b/pumpkin/src/block/blocks/anvil.rs index 75e56d6f2..e4ecffb31 100644 --- a/pumpkin/src/block/blocks/anvil.rs +++ b/pumpkin/src/block/blocks/anvil.rs @@ -1,4 +1,4 @@ -use crate::block::pumpkin_block::{OnPlaceArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, OnPlaceArgs}; use async_trait::async_trait; use pumpkin_data::block_properties::{BlockProperties, WallTorchLikeProperties}; use pumpkin_data::tag::{RegistryKey, get_tag_values}; @@ -9,7 +9,7 @@ use pumpkin_world::BlockStateId; pub struct AnvilBlock; #[async_trait] -impl PumpkinBlock for AnvilBlock { +impl BlockBehaviour for AnvilBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let dir = args .player diff --git a/pumpkin/src/block/blocks/bamboo.rs b/pumpkin/src/block/blocks/bamboo.rs index fa2b796bc..46402672d 100644 --- a/pumpkin/src/block/blocks/bamboo.rs +++ b/pumpkin/src/block/blocks/bamboo.rs @@ -3,13 +3,13 @@ use pumpkin_data::tag; use pumpkin_data::tag::Taggable; use pumpkin_macros::pumpkin_block; -use crate::block::pumpkin_block::{CanPlaceAtArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, CanPlaceAtArgs}; #[pumpkin_block("minecraft:bamboo")] pub struct BambooBlock; #[async_trait] -impl PumpkinBlock for BambooBlock { +impl BlockBehaviour for BambooBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { let block_below = args.block_accessor.get_block(&args.position.down()).await; block_below.is_tagged_with_by_tag(&tag::Block::MINECRAFT_BAMBOO_PLANTABLE_ON) diff --git a/pumpkin/src/block/blocks/banners.rs b/pumpkin/src/block/blocks/banners.rs index 432d97974..a8a8f2de1 100644 --- a/pumpkin/src/block/blocks/banners.rs +++ b/pumpkin/src/block/blocks/banners.rs @@ -1,4 +1,4 @@ -use crate::block::pumpkin_block::{OnPlaceArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, OnPlaceArgs}; use crate::entity::EntityBase; use async_trait::async_trait; use pumpkin_data::block_properties::{BlockProperties, WhiteBannerLikeProperties}; @@ -10,7 +10,7 @@ use pumpkin_world::BlockStateId; pub struct BannerBlock; #[async_trait] -impl PumpkinBlock for BannerBlock { +impl BlockBehaviour for BannerBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut props = WhiteBannerLikeProperties::default(args.block); props.rotation = args.player.get_entity().get_flipped_rotation_16(); diff --git a/pumpkin/src/block/blocks/barrel.rs b/pumpkin/src/block/blocks/barrel.rs index c7ae6a590..cee86fb47 100644 --- a/pumpkin/src/block/blocks/barrel.rs +++ b/pumpkin/src/block/blocks/barrel.rs @@ -1,9 +1,9 @@ use std::sync::Arc; -use crate::block::pumpkin_block::{OnPlaceArgs, PlacedArgs}; +use crate::block::{OnPlaceArgs, PlacedArgs}; use crate::block::{ - pumpkin_block::{NormalUseArgs, PumpkinBlock}, registry::BlockActionResult, + {BlockBehaviour, NormalUseArgs}, }; use async_trait::async_trait; use pumpkin_data::block_properties::{BarrelLikeProperties, BlockProperties}; @@ -43,7 +43,7 @@ impl ScreenHandlerFactory for BarrelScreenFactory { pub struct BarrelBlock; #[async_trait] -impl PumpkinBlock for BarrelBlock { +impl BlockBehaviour for BarrelBlock { async fn normal_use(&self, args: NormalUseArgs<'_>) -> BlockActionResult { if let Some(block_entity) = args.world.get_block_entity(args.position).await { if let Some(inventory) = block_entity.get_inventory() { diff --git a/pumpkin/src/block/blocks/bed.rs b/pumpkin/src/block/blocks/bed.rs index 3eb817f49..02547a565 100644 --- a/pumpkin/src/block/blocks/bed.rs +++ b/pumpkin/src/block/blocks/bed.rs @@ -15,10 +15,10 @@ use pumpkin_world::BlockStateId; use pumpkin_world::block::entities::bed::BedBlockEntity; use pumpkin_world::world::BlockFlags; -use crate::block::pumpkin_block::{ - BrokenArgs, CanPlaceAtArgs, NormalUseArgs, OnPlaceArgs, PlacedArgs, PumpkinBlock, -}; use crate::block::registry::BlockActionResult; +use crate::block::{ + BlockBehaviour, BrokenArgs, CanPlaceAtArgs, NormalUseArgs, OnPlaceArgs, PlacedArgs, +}; use crate::entity::{Entity, EntityBase}; use crate::world::World; @@ -66,7 +66,7 @@ const NO_SLEEP_IDS: &[u16] = &[ pub struct BedBlock; #[async_trait] -impl PumpkinBlock for BedBlock { +impl BlockBehaviour for BedBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { if let Some(player) = args.player { let facing = player.living_entity.entity.get_horizontal_facing(); diff --git a/pumpkin/src/block/blocks/blast_furnace.rs b/pumpkin/src/block/blocks/blast_furnace.rs index 562affec4..58845786c 100644 --- a/pumpkin/src/block/blocks/blast_furnace.rs +++ b/pumpkin/src/block/blocks/blast_furnace.rs @@ -1,4 +1,4 @@ -use crate::block::pumpkin_block::{OnPlaceArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, OnPlaceArgs}; use async_trait::async_trait; use pumpkin_data::block_properties::{BlockProperties, FurnaceLikeProperties}; use pumpkin_macros::pumpkin_block; @@ -8,7 +8,7 @@ use pumpkin_world::BlockStateId; pub struct BlastFurnaceBlock; #[async_trait] -impl PumpkinBlock for BlastFurnaceBlock { +impl BlockBehaviour for BlastFurnaceBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut props = FurnaceLikeProperties::default(args.block); props.facing = args diff --git a/pumpkin/src/block/blocks/cactus.rs b/pumpkin/src/block/blocks/cactus.rs index 77edcc7df..83eb473c1 100644 --- a/pumpkin/src/block/blocks/cactus.rs +++ b/pumpkin/src/block/blocks/cactus.rs @@ -11,16 +11,16 @@ use pumpkin_world::BlockStateId; use pumpkin_world::tick::TickPriority; use pumpkin_world::world::{BlockAccessor, BlockFlags}; -use crate::block::pumpkin_block::{ - CanPlaceAtArgs, GetStateForNeighborUpdateArgs, OnEntityCollisionArgs, OnScheduledTickArgs, - PumpkinBlock, RandomTickArgs, +use crate::block::{ + BlockBehaviour, CanPlaceAtArgs, GetStateForNeighborUpdateArgs, OnEntityCollisionArgs, + OnScheduledTickArgs, RandomTickArgs, }; #[pumpkin_block("minecraft:cactus")] pub struct CactusBlock; #[async_trait] -impl PumpkinBlock for CactusBlock { +impl BlockBehaviour for CactusBlock { async fn on_scheduled_tick(&self, args: OnScheduledTickArgs<'_>) { if !can_place_at(args.world.as_ref(), args.position).await { args.world diff --git a/pumpkin/src/block/blocks/cake.rs b/pumpkin/src/block/blocks/cake.rs index c64d7d638..19c584d17 100644 --- a/pumpkin/src/block/blocks/cake.rs +++ b/pumpkin/src/block/blocks/cake.rs @@ -3,8 +3,8 @@ use std::sync::Arc; use crate::{ block::{ blocks::candle_cakes::cake_from_candle, - pumpkin_block::{NormalUseArgs, PumpkinBlock, UseWithItemArgs}, registry::BlockActionResult, + {BlockBehaviour, NormalUseArgs, UseWithItemArgs}, }, entity::player::Player, world::World, @@ -79,7 +79,7 @@ impl CakeBlock { } #[async_trait] -impl PumpkinBlock for CakeBlock { +impl BlockBehaviour for CakeBlock { async fn use_with_item(&self, args: UseWithItemArgs<'_>) -> BlockActionResult { let state_id = args.world.get_block_state_id(args.position).await; let properties = CakeLikeProperties::from_state_id(state_id, args.block); diff --git a/pumpkin/src/block/blocks/campfire.rs b/pumpkin/src/block/blocks/campfire.rs index 30b362c35..b433fb2fb 100644 --- a/pumpkin/src/block/blocks/campfire.rs +++ b/pumpkin/src/block/blocks/campfire.rs @@ -10,9 +10,9 @@ use pumpkin_world::{BlockStateId, tick::TickPriority}; use crate::{ block::{ BlockIsReplacing, - pumpkin_block::{ - BlockMetadata, GetStateForNeighborUpdateArgs, OnEntityCollisionArgs, OnPlaceArgs, - PumpkinBlock, + { + BlockBehaviour, BlockMetadata, GetStateForNeighborUpdateArgs, OnEntityCollisionArgs, + OnPlaceArgs, }, }, entity::EntityBase, @@ -31,7 +31,7 @@ impl BlockMetadata for CampfireBlock { } #[async_trait] -impl PumpkinBlock for CampfireBlock { +impl BlockBehaviour for CampfireBlock { // TODO: cooking food on campfire (CampfireBlockEntity) async fn on_entity_collision(&self, args: OnEntityCollisionArgs<'_>) { if CampfireLikeProperties::from_state_id(args.state.id, args.block).lit diff --git a/pumpkin/src/block/blocks/candle_cakes.rs b/pumpkin/src/block/blocks/candle_cakes.rs index 27839ba14..e273b11ef 100644 --- a/pumpkin/src/block/blocks/candle_cakes.rs +++ b/pumpkin/src/block/blocks/candle_cakes.rs @@ -13,8 +13,8 @@ use pumpkin_world::{item::ItemStack, world::BlockFlags}; use crate::{ block::{ blocks::cake::CakeBlock, - pumpkin_block::{NormalUseArgs, PumpkinBlock, UseWithItemArgs}, registry::BlockActionResult, + {BlockBehaviour, NormalUseArgs, UseWithItemArgs}, }, entity::player::Player, world::World, @@ -101,7 +101,7 @@ impl CandleCakeBlock { } #[async_trait] -impl PumpkinBlock for CandleCakeBlock { +impl BlockBehaviour for CandleCakeBlock { async fn use_with_item(&self, args: UseWithItemArgs<'_>) -> BlockActionResult { match args.item_stack.lock().await.item.id { id if id == Item::FIRE_CHARGE.id || id == Item::FLINT_AND_STEEL.id => { diff --git a/pumpkin/src/block/blocks/candles.rs b/pumpkin/src/block/blocks/candles.rs index 510440efd..59f560db0 100644 --- a/pumpkin/src/block/blocks/candles.rs +++ b/pumpkin/src/block/blocks/candles.rs @@ -12,11 +12,11 @@ use pumpkin_world::{BlockStateId, world::BlockFlags}; use crate::{ block::{ BlockIsReplacing, - pumpkin_block::{ - CanPlaceAtArgs, CanUpdateAtArgs, NormalUseArgs, OnPlaceArgs, PumpkinBlock, + registry::BlockActionResult, + { + BlockBehaviour, CanPlaceAtArgs, CanUpdateAtArgs, NormalUseArgs, OnPlaceArgs, UseWithItemArgs, }, - registry::BlockActionResult, }, entity::EntityBase, }; @@ -25,7 +25,7 @@ use crate::{ pub struct CandleBlock; #[async_trait] -impl PumpkinBlock for CandleBlock { +impl BlockBehaviour for CandleBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { if args.player.get_entity().pose.load() != EntityPose::Crouching { if let BlockIsReplacing::Itself(state_id) = args.replacing { diff --git a/pumpkin/src/block/blocks/carpet.rs b/pumpkin/src/block/blocks/carpet.rs index 9435f9129..f2e41d4e2 100644 --- a/pumpkin/src/block/blocks/carpet.rs +++ b/pumpkin/src/block/blocks/carpet.rs @@ -1,5 +1,5 @@ -use crate::block::pumpkin_block::{ - CanPlaceAtArgs, GetStateForNeighborUpdateArgs, OnScheduledTickArgs, PumpkinBlock, +use crate::block::{ + BlockBehaviour, CanPlaceAtArgs, GetStateForNeighborUpdateArgs, OnScheduledTickArgs, }; use async_trait::async_trait; use pumpkin_data::tag::{RegistryKey, get_tag_values}; @@ -13,7 +13,7 @@ use pumpkin_world::world::{BlockAccessor, BlockFlags}; pub struct CarpetBlock; #[async_trait] -impl PumpkinBlock for CarpetBlock { +impl BlockBehaviour for CarpetBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { can_place_at(args.block_accessor, args.position).await } @@ -43,7 +43,7 @@ impl PumpkinBlock for CarpetBlock { pub struct MossCarpetBlock; #[async_trait] -impl PumpkinBlock for MossCarpetBlock { +impl BlockBehaviour for MossCarpetBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { can_place_at(args.block_accessor, args.position).await } @@ -73,7 +73,7 @@ impl PumpkinBlock for MossCarpetBlock { pub struct PaleMossCarpetBlock; #[async_trait] -impl PumpkinBlock for PaleMossCarpetBlock { +impl BlockBehaviour for PaleMossCarpetBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { can_place_at(args.block_accessor, args.position).await } diff --git a/pumpkin/src/block/blocks/chests.rs b/pumpkin/src/block/blocks/chests.rs index 376be60dd..04704deb6 100644 --- a/pumpkin/src/block/blocks/chests.rs +++ b/pumpkin/src/block/blocks/chests.rs @@ -12,13 +12,11 @@ use pumpkin_world::BlockStateId; use pumpkin_world::block::entities::chest::ChestBlockEntity; use pumpkin_world::world::BlockFlags; -use crate::block::pumpkin_block::{ - BlockMetadata, BrokenArgs, OnPlaceArgs, PlacedArgs, UseWithItemArgs, -}; +use crate::block::{BlockMetadata, BrokenArgs, OnPlaceArgs, PlacedArgs, UseWithItemArgs}; use crate::entity::EntityBase; use crate::world::World; use crate::{ - block::{pumpkin_block::PumpkinBlock, registry::BlockActionResult}, + block::{BlockBehaviour, registry::BlockActionResult}, entity::player::Player, }; @@ -35,7 +33,7 @@ impl BlockMetadata for ChestBlock { } #[async_trait] -impl PumpkinBlock for ChestBlock { +impl BlockBehaviour for ChestBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut chest_props = ChestLikeProperties::default(args.block); diff --git a/pumpkin/src/block/blocks/chiseled_bookshelf.rs b/pumpkin/src/block/blocks/chiseled_bookshelf.rs index cc0acd632..da164f71e 100644 --- a/pumpkin/src/block/blocks/chiseled_bookshelf.rs +++ b/pumpkin/src/block/blocks/chiseled_bookshelf.rs @@ -2,11 +2,11 @@ use std::sync::{Arc, atomic::Ordering}; use crate::{ block::{ - pumpkin_block::{ - BlockHitResult, GetComparatorOutputArgs, NormalUseArgs, OnPlaceArgs, PlacedArgs, - PumpkinBlock, UseWithItemArgs, - }, registry::BlockActionResult, + { + BlockBehaviour, BlockHitResult, GetComparatorOutputArgs, NormalUseArgs, OnPlaceArgs, + PlacedArgs, UseWithItemArgs, + }, }, entity::{EntityBase, player::Player}, world::World, @@ -32,7 +32,7 @@ use tokio::sync::Mutex; pub struct ChiseledBookshelfBlock; #[async_trait] -impl PumpkinBlock for ChiseledBookshelfBlock { +impl BlockBehaviour for ChiseledBookshelfBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut properties = ChiseledBookshelfLikeProperties::default(args.block); diff --git a/pumpkin/src/block/blocks/command.rs b/pumpkin/src/block/blocks/command.rs index d6358053c..23a6981aa 100644 --- a/pumpkin/src/block/blocks/command.rs +++ b/pumpkin/src/block/blocks/command.rs @@ -6,8 +6,8 @@ use pumpkin_util::{GameMode, math::position::BlockPos}; use pumpkin_world::{block::entities::command_block::CommandBlockEntity, tick::TickPriority}; use crate::{ - block::pumpkin_block::{ - BlockMetadata, CanPlaceAtArgs, OnNeighborUpdateArgs, OnScheduledTickArgs, PumpkinBlock, + block::{ + BlockBehaviour, BlockMetadata, CanPlaceAtArgs, OnNeighborUpdateArgs, OnScheduledTickArgs, }, world::World, }; @@ -51,7 +51,7 @@ impl BlockMetadata for CommandBlock { } #[async_trait] -impl PumpkinBlock for CommandBlock { +impl BlockBehaviour for CommandBlock { async fn on_neighbor_update(&self, args: OnNeighborUpdateArgs<'_>) { if let Some(block_entity) = args.world.get_block_entity(args.position).await { if block_entity.resource_location() != CommandBlockEntity::ID { diff --git a/pumpkin/src/block/blocks/composter.rs b/pumpkin/src/block/blocks/composter.rs index 8b2def83e..a0c23e495 100644 --- a/pumpkin/src/block/blocks/composter.rs +++ b/pumpkin/src/block/blocks/composter.rs @@ -2,11 +2,11 @@ use std::sync::Arc; use crate::{ block::{ - pumpkin_block::{ - GetComparatorOutputArgs, NormalUseArgs, OnScheduledTickArgs, PumpkinBlock, + registry::BlockActionResult, + { + BlockBehaviour, GetComparatorOutputArgs, NormalUseArgs, OnScheduledTickArgs, UseWithItemArgs, }, - registry::BlockActionResult, }, entity::{Entity, item::ItemEntity}, world::World, @@ -30,7 +30,7 @@ use uuid::Uuid; pub struct ComposterBlock; #[async_trait] -impl PumpkinBlock for ComposterBlock { +impl BlockBehaviour for ComposterBlock { async fn normal_use(&self, args: NormalUseArgs<'_>) -> BlockActionResult { let state_id = args.world.get_block_state_id(args.position).await; let props = ComposterLikeProperties::from_state_id(state_id, args.block); diff --git a/pumpkin/src/block/blocks/crafting_table.rs b/pumpkin/src/block/blocks/crafting_table.rs index e55d6af65..985947fe9 100644 --- a/pumpkin/src/block/blocks/crafting_table.rs +++ b/pumpkin/src/block/blocks/crafting_table.rs @@ -1,5 +1,5 @@ -use crate::block::pumpkin_block::{NormalUseArgs, PumpkinBlock}; use crate::block::registry::BlockActionResult; +use crate::block::{BlockBehaviour, NormalUseArgs}; use async_trait::async_trait; use pumpkin_inventory::crafting::crafting_screen_handler::CraftingTableScreenHandler; use pumpkin_inventory::player::player_inventory::PlayerInventory; @@ -13,7 +13,7 @@ use tokio::sync::Mutex; pub struct CraftingTableBlock; #[async_trait] -impl PumpkinBlock for CraftingTableBlock { +impl BlockBehaviour for CraftingTableBlock { async fn normal_use(&self, args: NormalUseArgs<'_>) -> BlockActionResult { args.player .open_handled_screen(&CraftingTableScreenFactory) diff --git a/pumpkin/src/block/blocks/dirt_path.rs b/pumpkin/src/block/blocks/dirt_path.rs index d35f57087..2ef302489 100644 --- a/pumpkin/src/block/blocks/dirt_path.rs +++ b/pumpkin/src/block/blocks/dirt_path.rs @@ -1,8 +1,8 @@ -use crate::block::pumpkin_block::CanPlaceAtArgs; -use crate::block::pumpkin_block::GetStateForNeighborUpdateArgs; -use crate::block::pumpkin_block::OnPlaceArgs; -use crate::block::pumpkin_block::OnScheduledTickArgs; -use crate::block::pumpkin_block::PumpkinBlock; +use crate::block::BlockBehaviour; +use crate::block::CanPlaceAtArgs; +use crate::block::GetStateForNeighborUpdateArgs; +use crate::block::OnPlaceArgs; +use crate::block::OnScheduledTickArgs; use async_trait::async_trait; use pumpkin_data::Block; use pumpkin_data::BlockDirection; @@ -17,7 +17,7 @@ use pumpkin_world::world::BlockFlags; pub struct DirtPathBlock; #[async_trait] -impl PumpkinBlock for DirtPathBlock { +impl BlockBehaviour for DirtPathBlock { async fn on_scheduled_tick(&self, args: OnScheduledTickArgs<'_>) { // TODO: push up entities args.world diff --git a/pumpkin/src/block/blocks/doors.rs b/pumpkin/src/block/blocks/doors.rs index ed5b773e5..afa517783 100644 --- a/pumpkin/src/block/blocks/doors.rs +++ b/pumpkin/src/block/blocks/doors.rs @@ -19,14 +19,14 @@ use pumpkin_world::world::BlockAccessor; use pumpkin_world::world::BlockFlags; use std::sync::Arc; +use crate::block::BlockBehaviour; +use crate::block::CanPlaceAtArgs; +use crate::block::GetStateForNeighborUpdateArgs; +use crate::block::NormalUseArgs; +use crate::block::OnNeighborUpdateArgs; +use crate::block::OnPlaceArgs; +use crate::block::PlacedArgs; use crate::block::blocks::redstone::block_receives_redstone_power; -use crate::block::pumpkin_block::CanPlaceAtArgs; -use crate::block::pumpkin_block::GetStateForNeighborUpdateArgs; -use crate::block::pumpkin_block::NormalUseArgs; -use crate::block::pumpkin_block::OnNeighborUpdateArgs; -use crate::block::pumpkin_block::OnPlaceArgs; -use crate::block::pumpkin_block::PlacedArgs; -use crate::block::pumpkin_block::PumpkinBlock; use crate::block::registry::BlockActionResult; use crate::entity::player::Player; use pumpkin_protocol::java::server::play::SUseItemOn; @@ -164,7 +164,7 @@ async fn get_hinge( pub struct DoorBlock; #[async_trait] -impl PumpkinBlock for DoorBlock { +impl BlockBehaviour for DoorBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let powered = block_receives_redstone_power(args.world, args.position).await || block_receives_redstone_power(args.world, &args.position.up()).await; diff --git a/pumpkin/src/block/blocks/end_portal.rs b/pumpkin/src/block/blocks/end_portal.rs index 81c44fe3a..37a763e11 100644 --- a/pumpkin/src/block/blocks/end_portal.rs +++ b/pumpkin/src/block/blocks/end_portal.rs @@ -1,8 +1,8 @@ use std::sync::Arc; -use crate::block::pumpkin_block::OnEntityCollisionArgs; -use crate::block::pumpkin_block::PlacedArgs; -use crate::block::pumpkin_block::PumpkinBlock; +use crate::block::BlockBehaviour; +use crate::block::OnEntityCollisionArgs; +use crate::block::PlacedArgs; use async_trait::async_trait; use pumpkin_macros::pumpkin_block; use pumpkin_registry::VanillaDimensionType; @@ -12,7 +12,7 @@ use pumpkin_world::block::entities::end_portal::EndPortalBlockEntity; pub struct EndPortalBlock; #[async_trait] -impl PumpkinBlock for EndPortalBlock { +impl BlockBehaviour for EndPortalBlock { async fn on_entity_collision(&self, args: OnEntityCollisionArgs<'_>) { let world = if args.world.dimension_type == VanillaDimensionType::TheEnd { args.server diff --git a/pumpkin/src/block/blocks/end_portal_frame.rs b/pumpkin/src/block/blocks/end_portal_frame.rs index 63e662df5..95cc21c85 100644 --- a/pumpkin/src/block/blocks/end_portal_frame.rs +++ b/pumpkin/src/block/blocks/end_portal_frame.rs @@ -4,7 +4,7 @@ use pumpkin_macros::pumpkin_block; use pumpkin_world::BlockStateId; use crate::{ - block::pumpkin_block::{OnPlaceArgs, PumpkinBlock}, + block::{BlockBehaviour, OnPlaceArgs}, entity::EntityBase, }; @@ -14,7 +14,7 @@ type EndPortalFrameProperties = pumpkin_data::block_properties::EndPortalFrameLi pub struct EndPortalFrameBlock; #[async_trait] -impl PumpkinBlock for EndPortalFrameBlock { +impl BlockBehaviour for EndPortalFrameBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut end_portal_frame_props = EndPortalFrameProperties::default(args.block); end_portal_frame_props.facing = args.player.get_entity().get_horizontal_facing().opposite(); diff --git a/pumpkin/src/block/blocks/ender_chest.rs b/pumpkin/src/block/blocks/ender_chest.rs index af1100d62..5ebd57d2f 100644 --- a/pumpkin/src/block/blocks/ender_chest.rs +++ b/pumpkin/src/block/blocks/ender_chest.rs @@ -1,4 +1,4 @@ -use crate::block::pumpkin_block::{OnPlaceArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, OnPlaceArgs}; use async_trait::async_trait; use pumpkin_data::block_properties::{BlockProperties, LadderLikeProperties}; use pumpkin_macros::pumpkin_block; @@ -8,7 +8,7 @@ use pumpkin_world::BlockStateId; pub struct EnderChestBlock; #[async_trait] -impl PumpkinBlock for EnderChestBlock { +impl BlockBehaviour for EnderChestBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut props = LadderLikeProperties::default(args.block); props.facing = args diff --git a/pumpkin/src/block/blocks/farmland.rs b/pumpkin/src/block/blocks/farmland.rs index 431c9c85b..33b6c96a1 100644 --- a/pumpkin/src/block/blocks/farmland.rs +++ b/pumpkin/src/block/blocks/farmland.rs @@ -1,8 +1,8 @@ -use crate::block::pumpkin_block::CanPlaceAtArgs; -use crate::block::pumpkin_block::GetStateForNeighborUpdateArgs; -use crate::block::pumpkin_block::OnPlaceArgs; -use crate::block::pumpkin_block::OnScheduledTickArgs; -use crate::block::pumpkin_block::PumpkinBlock; +use crate::block::BlockBehaviour; +use crate::block::CanPlaceAtArgs; +use crate::block::GetStateForNeighborUpdateArgs; +use crate::block::OnPlaceArgs; +use crate::block::OnScheduledTickArgs; use async_trait::async_trait; use pumpkin_data::Block; use pumpkin_data::BlockDirection; @@ -17,7 +17,7 @@ use pumpkin_world::world::BlockFlags; pub struct FarmLandBlock; #[async_trait] -impl PumpkinBlock for FarmLandBlock { +impl BlockBehaviour for FarmLandBlock { async fn on_scheduled_tick(&self, args: OnScheduledTickArgs<'_>) { // TODO: push up entities args.world diff --git a/pumpkin/src/block/blocks/fence_gates.rs b/pumpkin/src/block/blocks/fence_gates.rs index 6e39cb7dd..96033f2eb 100644 --- a/pumpkin/src/block/blocks/fence_gates.rs +++ b/pumpkin/src/block/blocks/fence_gates.rs @@ -1,8 +1,8 @@ use std::sync::Arc; -use crate::block::pumpkin_block::GetStateForNeighborUpdateArgs; -use crate::block::pumpkin_block::NormalUseArgs; -use crate::block::pumpkin_block::OnPlaceArgs; +use crate::block::GetStateForNeighborUpdateArgs; +use crate::block::NormalUseArgs; +use crate::block::OnPlaceArgs; use crate::entity::player::Player; use async_trait::async_trait; use pumpkin_data::block_properties::BlockProperties; @@ -15,7 +15,7 @@ use pumpkin_util::math::position::BlockPos; use pumpkin_world::BlockStateId; use pumpkin_world::world::BlockFlags; -use crate::block::pumpkin_block::PumpkinBlock; +use crate::block::BlockBehaviour; use crate::block::registry::BlockActionResult; use crate::world::World; @@ -58,7 +58,7 @@ pub async fn toggle_fence_gate( pub struct FenceGateBlock; #[async_trait] -impl PumpkinBlock for FenceGateBlock { +impl BlockBehaviour for FenceGateBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut fence_gate_props = FenceGateProperties::default(args.block); fence_gate_props.facing = args.player.living_entity.entity.get_horizontal_facing(); diff --git a/pumpkin/src/block/blocks/fences.rs b/pumpkin/src/block/blocks/fences.rs index 396e2eb82..1645a8160 100644 --- a/pumpkin/src/block/blocks/fences.rs +++ b/pumpkin/src/block/blocks/fences.rs @@ -1,5 +1,5 @@ -use crate::block::pumpkin_block::GetStateForNeighborUpdateArgs; -use crate::block::pumpkin_block::OnPlaceArgs; +use crate::block::GetStateForNeighborUpdateArgs; +use crate::block::OnPlaceArgs; use async_trait::async_trait; use pumpkin_data::BlockDirection; use pumpkin_data::BlockState; @@ -14,7 +14,7 @@ use pumpkin_world::BlockStateId; type FenceGateProperties = pumpkin_data::block_properties::OakFenceGateLikeProperties; type FenceProperties = pumpkin_data::block_properties::OakFenceLikeProperties; -use crate::block::pumpkin_block::{BlockMetadata, PumpkinBlock}; +use crate::block::{BlockBehaviour, BlockMetadata}; use crate::world::World; pub struct FenceBlock; @@ -29,7 +29,7 @@ impl BlockMetadata for FenceBlock { } #[async_trait] -impl PumpkinBlock for FenceBlock { +impl BlockBehaviour for FenceBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut fence_props = FenceProperties::default(args.block); fence_props.waterlogged = args.replacing.water_source(); diff --git a/pumpkin/src/block/blocks/fire/fire.rs b/pumpkin/src/block/blocks/fire/fire.rs index bb55c524e..91f529267 100644 --- a/pumpkin/src/block/blocks/fire/fire.rs +++ b/pumpkin/src/block/blocks/fire/fire.rs @@ -16,9 +16,9 @@ use pumpkin_world::BlockStateId; use pumpkin_world::tick::TickPriority; use crate::block::blocks::tnt::TNTBlock; -use crate::block::pumpkin_block::{ - BrokenArgs, CanPlaceAtArgs, GetStateForNeighborUpdateArgs, OnEntityCollisionArgs, - OnScheduledTickArgs, PlacedArgs, PumpkinBlock, +use crate::block::{ + BlockBehaviour, BrokenArgs, CanPlaceAtArgs, GetStateForNeighborUpdateArgs, + OnEntityCollisionArgs, OnScheduledTickArgs, PlacedArgs, }; use crate::world::World; use crate::world::portal::nether::NetherPortal; @@ -166,7 +166,7 @@ impl FireBlock { } #[async_trait] -impl PumpkinBlock for FireBlock { +impl BlockBehaviour for FireBlock { async fn placed(&self, args: PlacedArgs<'_>) { if args.old_state_id == args.state_id { // Already a fire diff --git a/pumpkin/src/block/blocks/fire/mod.rs b/pumpkin/src/block/blocks/fire/mod.rs index 75f446ccd..d731513a0 100644 --- a/pumpkin/src/block/blocks/fire/mod.rs +++ b/pumpkin/src/block/blocks/fire/mod.rs @@ -11,7 +11,7 @@ use rand::Rng; use soul_fire::SoulFireBlock; use crate::block::blocks::fire::fire::FireBlock; -use crate::block::pumpkin_block::{CanPlaceAtArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, CanPlaceAtArgs}; use crate::world::World; use crate::world::portal::nether::NetherPortal; diff --git a/pumpkin/src/block/blocks/fire/soul_fire.rs b/pumpkin/src/block/blocks/fire/soul_fire.rs index f79ab45ad..986e5e1bc 100644 --- a/pumpkin/src/block/blocks/fire/soul_fire.rs +++ b/pumpkin/src/block/blocks/fire/soul_fire.rs @@ -4,9 +4,7 @@ use pumpkin_data::{Block, tag}; use pumpkin_macros::pumpkin_block; use pumpkin_world::BlockStateId; -use crate::block::pumpkin_block::{ - BrokenArgs, CanPlaceAtArgs, GetStateForNeighborUpdateArgs, PumpkinBlock, -}; +use crate::block::{BlockBehaviour, BrokenArgs, CanPlaceAtArgs, GetStateForNeighborUpdateArgs}; use super::FireBlockBase; @@ -21,7 +19,7 @@ impl SoulFireBlock { } #[async_trait] -impl PumpkinBlock for SoulFireBlock { +impl BlockBehaviour for SoulFireBlock { async fn get_state_for_neighbor_update( &self, args: GetStateForNeighborUpdateArgs<'_>, diff --git a/pumpkin/src/block/blocks/flower_pots.rs b/pumpkin/src/block/blocks/flower_pots.rs index ccce10e78..7ba8259aa 100644 --- a/pumpkin/src/block/blocks/flower_pots.rs +++ b/pumpkin/src/block/blocks/flower_pots.rs @@ -1,5 +1,5 @@ -use crate::block::pumpkin_block::{PumpkinBlock, RandomTickArgs, UseWithItemArgs}; use crate::block::registry::BlockActionResult; +use crate::block::{BlockBehaviour, RandomTickArgs, UseWithItemArgs}; use async_trait::async_trait; use pumpkin_data::Block; use pumpkin_data::flower_pot_transformations::get_potted_item; @@ -12,7 +12,7 @@ use pumpkin_world::world::BlockFlags; pub struct FlowerPotBlock; #[async_trait] -impl PumpkinBlock for FlowerPotBlock { +impl BlockBehaviour for FlowerPotBlock { async fn use_with_item(&self, args: UseWithItemArgs<'_>) -> BlockActionResult { let item = args.item_stack.lock().await.item; //Place the flower inside the pot diff --git a/pumpkin/src/block/blocks/furnace.rs b/pumpkin/src/block/blocks/furnace.rs index 3688f60d0..5ad3214a4 100644 --- a/pumpkin/src/block/blocks/furnace.rs +++ b/pumpkin/src/block/blocks/furnace.rs @@ -13,7 +13,7 @@ use pumpkin_world::{ }; use tokio::sync::Mutex; -use crate::block::pumpkin_block::PumpkinBlock; +use crate::block::BlockBehaviour; struct FurnaceScreenFactory { inventory: Arc, @@ -56,10 +56,10 @@ impl ScreenHandlerFactory for FurnaceScreenFactory { pub struct FurnaceBlock; #[async_trait] -impl PumpkinBlock for FurnaceBlock { +impl BlockBehaviour for FurnaceBlock { async fn normal_use( &self, - args: crate::block::pumpkin_block::NormalUseArgs<'_>, + args: crate::block::NormalUseArgs<'_>, ) -> crate::block::registry::BlockActionResult { if let Some(block_entity) = args.world.get_block_entity(args.position).await { if let Some(inventory) = block_entity.clone().get_inventory() { @@ -75,34 +75,24 @@ impl PumpkinBlock for FurnaceBlock { //Same to normal_use async fn use_with_item( &self, - _args: crate::block::pumpkin_block::UseWithItemArgs<'_>, + _args: crate::block::UseWithItemArgs<'_>, ) -> crate::block::registry::BlockActionResult { crate::block::registry::BlockActionResult::PassToDefaultBlockAction } - async fn on_entity_collision( - &self, - _args: crate::block::pumpkin_block::OnEntityCollisionArgs<'_>, - ) { - } + async fn on_entity_collision(&self, _args: crate::block::OnEntityCollisionArgs<'_>) {} fn should_drop_items_on_explosion(&self) -> bool { true } - async fn explode(&self, _args: crate::block::pumpkin_block::ExplodeArgs<'_>) {} + async fn explode(&self, _args: crate::block::ExplodeArgs<'_>) {} - async fn on_synced_block_event( - &self, - _args: crate::block::pumpkin_block::OnSyncedBlockEventArgs<'_>, - ) -> bool { + async fn on_synced_block_event(&self, _args: crate::block::OnSyncedBlockEventArgs<'_>) -> bool { false } - async fn on_place( - &self, - args: crate::block::pumpkin_block::OnPlaceArgs<'_>, - ) -> pumpkin_world::BlockStateId { + async fn on_place(&self, args: crate::block::OnPlaceArgs<'_>) -> pumpkin_world::BlockStateId { let mut props = FurnaceLikeProperties::default(args.block); props.facing = args .player @@ -114,74 +104,59 @@ impl PumpkinBlock for FurnaceBlock { props.to_state_id(args.block) } - async fn random_tick(&self, _args: crate::block::pumpkin_block::RandomTickArgs<'_>) {} + async fn random_tick(&self, _args: crate::block::RandomTickArgs<'_>) {} - async fn can_place_at(&self, _args: crate::block::pumpkin_block::CanPlaceAtArgs<'_>) -> bool { + async fn can_place_at(&self, _args: crate::block::CanPlaceAtArgs<'_>) -> bool { true } - async fn can_update_at(&self, _args: crate::block::pumpkin_block::CanUpdateAtArgs<'_>) -> bool { + async fn can_update_at(&self, _args: crate::block::CanUpdateAtArgs<'_>) -> bool { false } - async fn placed(&self, args: crate::block::pumpkin_block::PlacedArgs<'_>) { + async fn placed(&self, args: crate::block::PlacedArgs<'_>) { let furnace_block_entity = FurnaceBlockEntity::new(*args.position); args.world .add_block_entity(Arc::new(furnace_block_entity)) .await; } - async fn player_placed(&self, _args: crate::block::pumpkin_block::PlayerPlacedArgs<'_>) {} + async fn player_placed(&self, _args: crate::block::PlayerPlacedArgs<'_>) {} - async fn broken(&self, args: crate::block::pumpkin_block::BrokenArgs<'_>) { + async fn broken(&self, args: crate::block::BrokenArgs<'_>) { args.world.remove_block_entity(args.position).await; } - async fn on_neighbor_update( - &self, - _args: crate::block::pumpkin_block::OnNeighborUpdateArgs<'_>, - ) { - } + async fn on_neighbor_update(&self, _args: crate::block::OnNeighborUpdateArgs<'_>) {} - async fn prepare(&self, _args: crate::block::pumpkin_block::PrepareArgs<'_>) {} + async fn prepare(&self, _args: crate::block::PrepareArgs<'_>) {} async fn get_state_for_neighbor_update( &self, - args: crate::block::pumpkin_block::GetStateForNeighborUpdateArgs<'_>, + args: crate::block::GetStateForNeighborUpdateArgs<'_>, ) -> pumpkin_world::BlockStateId { args.state_id } - async fn on_scheduled_tick(&self, _args: crate::block::pumpkin_block::OnScheduledTickArgs<'_>) { - } + async fn on_scheduled_tick(&self, _args: crate::block::OnScheduledTickArgs<'_>) {} - async fn on_state_replaced(&self, _args: crate::block::pumpkin_block::OnStateReplacedArgs<'_>) { - } + async fn on_state_replaced(&self, _args: crate::block::OnStateReplacedArgs<'_>) {} - async fn emits_redstone_power( - &self, - _args: crate::block::pumpkin_block::EmitsRedstonePowerArgs<'_>, - ) -> bool { + async fn emits_redstone_power(&self, _args: crate::block::EmitsRedstonePowerArgs<'_>) -> bool { false } - async fn get_weak_redstone_power( - &self, - _args: crate::block::pumpkin_block::GetRedstonePowerArgs<'_>, - ) -> u8 { + async fn get_weak_redstone_power(&self, _args: crate::block::GetRedstonePowerArgs<'_>) -> u8 { 0 } - async fn get_strong_redstone_power( - &self, - _args: crate::block::pumpkin_block::GetRedstonePowerArgs<'_>, - ) -> u8 { + async fn get_strong_redstone_power(&self, _args: crate::block::GetRedstonePowerArgs<'_>) -> u8 { 0 } async fn get_comparator_output( &self, - _args: crate::block::pumpkin_block::GetComparatorOutputArgs<'_>, + _args: crate::block::GetComparatorOutputArgs<'_>, ) -> Option { None } diff --git a/pumpkin/src/block/blocks/glass_panes.rs b/pumpkin/src/block/blocks/glass_panes.rs index 3dc99a611..74560ccd3 100644 --- a/pumpkin/src/block/blocks/glass_panes.rs +++ b/pumpkin/src/block/blocks/glass_panes.rs @@ -1,5 +1,5 @@ -use crate::block::pumpkin_block::GetStateForNeighborUpdateArgs; -use crate::block::pumpkin_block::OnPlaceArgs; +use crate::block::GetStateForNeighborUpdateArgs; +use crate::block::OnPlaceArgs; use async_trait::async_trait; use pumpkin_data::BlockDirection; use pumpkin_data::block_properties::BlockProperties; @@ -12,7 +12,7 @@ use pumpkin_world::BlockStateId; type GlassPaneProperties = pumpkin_data::block_properties::OakFenceLikeProperties; -use crate::block::pumpkin_block::{BlockMetadata, PumpkinBlock}; +use crate::block::{BlockBehaviour, BlockMetadata}; use crate::world::World; pub struct GlassPaneBlock; @@ -27,7 +27,7 @@ impl BlockMetadata for GlassPaneBlock { } #[async_trait] -impl PumpkinBlock for GlassPaneBlock { +impl BlockBehaviour for GlassPaneBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut pane_props = GlassPaneProperties::default(args.block); pane_props.waterlogged = args.replacing.water_source(); diff --git a/pumpkin/src/block/blocks/glazed_terracotta.rs b/pumpkin/src/block/blocks/glazed_terracotta.rs index 367d512ec..27c054bbc 100644 --- a/pumpkin/src/block/blocks/glazed_terracotta.rs +++ b/pumpkin/src/block/blocks/glazed_terracotta.rs @@ -1,4 +1,4 @@ -use crate::block::pumpkin_block::{BlockMetadata, OnPlaceArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, BlockMetadata, OnPlaceArgs}; use async_trait::async_trait; use pumpkin_data::block_properties::{BlockProperties, WallTorchLikeProperties}; use pumpkin_data::tag::{RegistryKey, get_tag_values}; @@ -16,7 +16,7 @@ impl BlockMetadata for GlazedTerracottaBlock { } #[async_trait] -impl PumpkinBlock for GlazedTerracottaBlock { +impl BlockBehaviour for GlazedTerracottaBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut prop = WallTorchLikeProperties::default(args.block); prop.facing = args diff --git a/pumpkin/src/block/blocks/grindstone.rs b/pumpkin/src/block/blocks/grindstone.rs index 79f7f4f57..b7b8b51c3 100644 --- a/pumpkin/src/block/blocks/grindstone.rs +++ b/pumpkin/src/block/blocks/grindstone.rs @@ -7,9 +7,9 @@ use pumpkin_macros::pumpkin_block; use pumpkin_util::math::position::BlockPos; use pumpkin_world::{BlockStateId, world::BlockAccessor}; -use crate::block::pumpkin_block::CanPlaceAtArgs; -use crate::block::pumpkin_block::PumpkinBlock; -use crate::block::pumpkin_block::{GetStateForNeighborUpdateArgs, OnPlaceArgs}; +use crate::block::BlockBehaviour; +use crate::block::CanPlaceAtArgs; +use crate::block::{GetStateForNeighborUpdateArgs, OnPlaceArgs}; use super::abstruct_wall_mounting::WallMountedBlock; @@ -17,7 +17,7 @@ use super::abstruct_wall_mounting::WallMountedBlock; pub struct GrindstoneBlock; #[async_trait] -impl PumpkinBlock for GrindstoneBlock { +impl BlockBehaviour for GrindstoneBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut props = GrindstoneLikeProperties::from_state_id(args.block.default_state.id, args.block); diff --git a/pumpkin/src/block/blocks/hopper.rs b/pumpkin/src/block/blocks/hopper.rs index 9348f35ad..3820e3a9a 100644 --- a/pumpkin/src/block/blocks/hopper.rs +++ b/pumpkin/src/block/blocks/hopper.rs @@ -1,10 +1,10 @@ use std::sync::Arc; use crate::block::blocks::redstone::block_receives_redstone_power; -use crate::block::pumpkin_block::{OnNeighborUpdateArgs, OnPlaceArgs, PlacedArgs}; +use crate::block::{OnNeighborUpdateArgs, OnPlaceArgs, PlacedArgs}; use crate::block::{ - pumpkin_block::{NormalUseArgs, PumpkinBlock}, registry::BlockActionResult, + {BlockBehaviour, NormalUseArgs}, }; use crate::world::World; use async_trait::async_trait; @@ -50,7 +50,7 @@ pub struct HopperBlock; type HopperLikeProperties = pumpkin_data::block_properties::HopperLikeProperties; #[async_trait] -impl PumpkinBlock for HopperBlock { +impl BlockBehaviour for HopperBlock { async fn normal_use(&self, args: NormalUseArgs<'_>) -> BlockActionResult { if let Some(block_entity) = args.world.get_block_entity(args.position).await { if let Some(inventory) = block_entity.get_inventory() { diff --git a/pumpkin/src/block/blocks/iron_bars.rs b/pumpkin/src/block/blocks/iron_bars.rs index ce7eda0ab..6421eb07a 100644 --- a/pumpkin/src/block/blocks/iron_bars.rs +++ b/pumpkin/src/block/blocks/iron_bars.rs @@ -1,5 +1,5 @@ -use crate::block::pumpkin_block::GetStateForNeighborUpdateArgs; -use crate::block::pumpkin_block::OnPlaceArgs; +use crate::block::GetStateForNeighborUpdateArgs; +use crate::block::OnPlaceArgs; use async_trait::async_trait; use pumpkin_data::BlockDirection; use pumpkin_data::block_properties::BlockProperties; @@ -11,14 +11,14 @@ use pumpkin_world::BlockStateId; type IronBarsProperties = pumpkin_data::block_properties::OakFenceLikeProperties; -use crate::block::pumpkin_block::PumpkinBlock; +use crate::block::BlockBehaviour; use crate::world::World; #[pumpkin_block("minecraft:iron_bars")] pub struct IronBarsBlock; #[async_trait] -impl PumpkinBlock for IronBarsBlock { +impl BlockBehaviour for IronBarsBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut bars_props = IronBarsProperties::default(args.block); bars_props.waterlogged = args.replacing.water_source(); diff --git a/pumpkin/src/block/blocks/jukebox.rs b/pumpkin/src/block/blocks/jukebox.rs index 241f15678..fa4411b16 100644 --- a/pumpkin/src/block/blocks/jukebox.rs +++ b/pumpkin/src/block/blocks/jukebox.rs @@ -1,7 +1,7 @@ use std::sync::Arc; -use crate::block::pumpkin_block::{BrokenArgs, PumpkinBlock, UseWithItemArgs}; use crate::block::registry::BlockActionResult; +use crate::block::{BlockBehaviour, BrokenArgs, UseWithItemArgs}; use crate::world::World; use async_trait::async_trait; use pumpkin_data::data_component_impl::JukeboxPlayableImpl; @@ -46,7 +46,7 @@ impl JukeboxBlock { } #[async_trait] -impl PumpkinBlock for JukeboxBlock { +impl BlockBehaviour for JukeboxBlock { async fn use_with_item(&self, args: UseWithItemArgs<'_>) -> BlockActionResult { let world = &args.player.living_entity.entity.world.read().await; diff --git a/pumpkin/src/block/blocks/ladder.rs b/pumpkin/src/block/blocks/ladder.rs index 54f47c39b..3ae796dda 100644 --- a/pumpkin/src/block/blocks/ladder.rs +++ b/pumpkin/src/block/blocks/ladder.rs @@ -1,5 +1,5 @@ -use crate::block::pumpkin_block::{ - CanPlaceAtArgs, GetStateForNeighborUpdateArgs, OnPlaceArgs, OnScheduledTickArgs, PumpkinBlock, +use crate::block::{ + BlockBehaviour, CanPlaceAtArgs, GetStateForNeighborUpdateArgs, OnPlaceArgs, OnScheduledTickArgs, }; use crate::world::World; use async_trait::async_trait; @@ -16,7 +16,7 @@ use pumpkin_world::world::BlockFlags; pub struct LadderBlock; #[async_trait] -impl PumpkinBlock for LadderBlock { +impl BlockBehaviour for LadderBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut props = LadderLikeProperties::default(args.block); props.facing = args.direction.opposite().to_cardinal_direction(); diff --git a/pumpkin/src/block/blocks/lectern.rs b/pumpkin/src/block/blocks/lectern.rs index 52575d5d8..b5880680c 100644 --- a/pumpkin/src/block/blocks/lectern.rs +++ b/pumpkin/src/block/blocks/lectern.rs @@ -1,4 +1,4 @@ -use crate::block::pumpkin_block::{OnPlaceArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, OnPlaceArgs}; use async_trait::async_trait; use pumpkin_data::block_properties::{BlockProperties, LecternLikeProperties}; use pumpkin_macros::pumpkin_block; @@ -8,7 +8,7 @@ use pumpkin_world::BlockStateId; pub struct LecternBlock; #[async_trait] -impl PumpkinBlock for LecternBlock { +impl BlockBehaviour for LecternBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut props = LecternLikeProperties::default(args.block); props.facing = args diff --git a/pumpkin/src/block/blocks/logs.rs b/pumpkin/src/block/blocks/logs.rs index 0d8a6facf..9e74e4c93 100644 --- a/pumpkin/src/block/blocks/logs.rs +++ b/pumpkin/src/block/blocks/logs.rs @@ -4,8 +4,8 @@ use pumpkin_data::tag::{RegistryKey, get_tag_values}; use pumpkin_macros::pumpkin_block_from_tag; use pumpkin_world::BlockStateId; -use crate::block::pumpkin_block::OnPlaceArgs; -use crate::block::pumpkin_block::PumpkinBlock; +use crate::block::BlockBehaviour; +use crate::block::OnPlaceArgs; type LogProperties = pumpkin_data::block_properties::PaleOakWoodLikeProperties; @@ -13,7 +13,7 @@ type LogProperties = pumpkin_data::block_properties::PaleOakWoodLikeProperties; pub struct LogBlock; #[async_trait] -impl PumpkinBlock for LogBlock { +impl BlockBehaviour for LogBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut log_props = LogProperties::default(args.block); log_props.axis = args.direction.to_axis(); diff --git a/pumpkin/src/block/blocks/nether_portal.rs b/pumpkin/src/block/blocks/nether_portal.rs index ae4c249ad..49253c4b5 100644 --- a/pumpkin/src/block/blocks/nether_portal.rs +++ b/pumpkin/src/block/blocks/nether_portal.rs @@ -1,8 +1,6 @@ use std::sync::Arc; -use crate::block::pumpkin_block::{ - GetStateForNeighborUpdateArgs, OnEntityCollisionArgs, PumpkinBlock, -}; +use crate::block::{BlockBehaviour, GetStateForNeighborUpdateArgs, OnEntityCollisionArgs}; use crate::entity::EntityBase; use crate::world::World; use crate::world::portal::nether::NetherPortal; @@ -35,7 +33,7 @@ impl NetherPortalBlock { } #[async_trait] -impl PumpkinBlock for NetherPortalBlock { +impl BlockBehaviour for NetherPortalBlock { async fn get_state_for_neighbor_update( &self, args: GetStateForNeighborUpdateArgs<'_>, diff --git a/pumpkin/src/block/blocks/note.rs b/pumpkin/src/block/blocks/note.rs index eedebadca..8108236cf 100644 --- a/pumpkin/src/block/blocks/note.rs +++ b/pumpkin/src/block/blocks/note.rs @@ -1,8 +1,8 @@ -use crate::block::pumpkin_block::{ +use crate::block::registry::BlockActionResult; +use crate::block::{ GetStateForNeighborUpdateArgs, NormalUseArgs, OnNeighborUpdateArgs, OnPlaceArgs, UseWithItemArgs, }; -use crate::block::registry::BlockActionResult; use async_trait::async_trait; use pumpkin_data::block_properties::Axis; use pumpkin_data::sound::{Sound, SoundCategory}; @@ -18,7 +18,7 @@ use pumpkin_world::BlockStateId; use pumpkin_world::world::BlockFlags; use crate::{ - block::pumpkin_block::{OnSyncedBlockEventArgs, PumpkinBlock}, + block::{BlockBehaviour, OnSyncedBlockEventArgs}, world::World, }; @@ -62,7 +62,7 @@ impl NoteBlock { } #[async_trait] -impl PumpkinBlock for NoteBlock { +impl BlockBehaviour for NoteBlock { async fn on_neighbor_update(&self, args: OnNeighborUpdateArgs<'_>) { let block_state = args.world.get_block_state(args.position).await; let mut note_props = NoteBlockLikeProperties::from_state_id(block_state.id, args.block); diff --git a/pumpkin/src/block/blocks/piston/piston.rs b/pumpkin/src/block/blocks/piston/piston.rs index 46b6cfb78..7f90e61b1 100644 --- a/pumpkin/src/block/blocks/piston/piston.rs +++ b/pumpkin/src/block/blocks/piston/piston.rs @@ -18,9 +18,9 @@ use pumpkin_world::{ use crate::{ block::{ blocks::redstone::is_emitting_redstone_power, - pumpkin_block::{ - BlockMetadata, OnNeighborUpdateArgs, OnPlaceArgs, OnSyncedBlockEventArgs, PlacedArgs, - PumpkinBlock, + { + BlockBehaviour, BlockMetadata, OnNeighborUpdateArgs, OnPlaceArgs, + OnSyncedBlockEventArgs, PlacedArgs, }, }, world::World, @@ -85,7 +85,7 @@ impl PistonBlock { } #[async_trait] -impl PumpkinBlock for PistonBlock { +impl BlockBehaviour for PistonBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut props = PistonProps::default(args.block); props.extended = false; diff --git a/pumpkin/src/block/blocks/piston/piston_extension.rs b/pumpkin/src/block/blocks/piston/piston_extension.rs index e41d88ff2..3fce3222c 100644 --- a/pumpkin/src/block/blocks/piston/piston_extension.rs +++ b/pumpkin/src/block/blocks/piston/piston_extension.rs @@ -4,8 +4,8 @@ use pumpkin_data::{Block, FacingExt}; use pumpkin_macros::pumpkin_block; use pumpkin_world::world::BlockFlags; -use crate::block::pumpkin_block::BrokenArgs; -use crate::block::pumpkin_block::PumpkinBlock; +use crate::block::BlockBehaviour; +use crate::block::BrokenArgs; use super::piston::PistonProps; @@ -15,7 +15,7 @@ pub(crate) type MovingPistonProps = pumpkin_data::block_properties::MovingPiston pub struct PistonExtensionBlock; #[async_trait] -impl PumpkinBlock for PistonExtensionBlock { +impl BlockBehaviour for PistonExtensionBlock { async fn broken(&self, args: BrokenArgs<'_>) { let props = MovingPistonProps::from_state_id(args.state.id, &Block::MOVING_PISTON); let pos = args diff --git a/pumpkin/src/block/blocks/piston/piston_head.rs b/pumpkin/src/block/blocks/piston/piston_head.rs index fe8d28276..1aa8244bb 100644 --- a/pumpkin/src/block/blocks/piston/piston_head.rs +++ b/pumpkin/src/block/blocks/piston/piston_head.rs @@ -4,8 +4,8 @@ use pumpkin_data::{Block, FacingExt}; use pumpkin_macros::pumpkin_block; use pumpkin_world::world::BlockFlags; -use crate::block::pumpkin_block::BrokenArgs; -use crate::block::pumpkin_block::PumpkinBlock; +use crate::block::BlockBehaviour; +use crate::block::BrokenArgs; use super::piston::PistonProps; @@ -15,7 +15,7 @@ pub(crate) type PistonHeadProperties = pumpkin_data::block_properties::PistonHea pub struct PistonHeadBlock; #[async_trait] -impl PumpkinBlock for PistonHeadBlock { +impl BlockBehaviour for PistonHeadBlock { async fn broken(&self, args: BrokenArgs<'_>) { let props = PistonHeadProperties::from_state_id(args.state.id, &Block::PISTON_HEAD); let pos = args diff --git a/pumpkin/src/block/blocks/plant/bush.rs b/pumpkin/src/block/blocks/plant/bush.rs index dcbf4c6d4..8f571706b 100644 --- a/pumpkin/src/block/blocks/plant/bush.rs +++ b/pumpkin/src/block/blocks/plant/bush.rs @@ -2,7 +2,7 @@ use async_trait::async_trait; use pumpkin_data::Block; use crate::block::blocks::plant::PlantBlockBase; -use crate::block::pumpkin_block::{BlockMetadata, CanPlaceAtArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, BlockMetadata, CanPlaceAtArgs}; pub struct BushBlock; @@ -17,7 +17,7 @@ impl BlockMetadata for BushBlock { } #[async_trait] -impl PumpkinBlock for BushBlock { +impl BlockBehaviour for BushBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { ::can_place_at(self, args.block_accessor, args.position).await } diff --git a/pumpkin/src/block/blocks/plant/crop/beetroot.rs b/pumpkin/src/block/blocks/plant/crop/beetroot.rs index c24b39fb7..f526e5536 100644 --- a/pumpkin/src/block/blocks/plant/crop/beetroot.rs +++ b/pumpkin/src/block/blocks/plant/crop/beetroot.rs @@ -9,9 +9,7 @@ use rand::Rng; use crate::block::blocks::plant::PlantBlockBase; use crate::block::blocks::plant::crop::CropBlockBase; -use crate::block::pumpkin_block::{ - CanPlaceAtArgs, GetStateForNeighborUpdateArgs, PumpkinBlock, RandomTickArgs, -}; +use crate::block::{BlockBehaviour, CanPlaceAtArgs, GetStateForNeighborUpdateArgs, RandomTickArgs}; type BeetrootProperties = NetherWartLikeProperties; @@ -19,7 +17,7 @@ type BeetrootProperties = NetherWartLikeProperties; pub struct BeetrootBlock; #[async_trait] -impl PumpkinBlock for BeetrootBlock { +impl BlockBehaviour for BeetrootBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { ::can_plant_on_top(self, args.block_accessor, &args.position.down()) .await diff --git a/pumpkin/src/block/blocks/plant/crop/carrot.rs b/pumpkin/src/block/blocks/plant/crop/carrot.rs index d2916c23e..8a0acdcc1 100644 --- a/pumpkin/src/block/blocks/plant/crop/carrot.rs +++ b/pumpkin/src/block/blocks/plant/crop/carrot.rs @@ -4,15 +4,13 @@ use pumpkin_world::BlockStateId; use crate::block::blocks::plant::PlantBlockBase; use crate::block::blocks::plant::crop::CropBlockBase; -use crate::block::pumpkin_block::{ - CanPlaceAtArgs, GetStateForNeighborUpdateArgs, PumpkinBlock, RandomTickArgs, -}; +use crate::block::{BlockBehaviour, CanPlaceAtArgs, GetStateForNeighborUpdateArgs, RandomTickArgs}; #[pumpkin_block("minecraft:carrots")] pub struct CarrotBlock; #[async_trait] -impl PumpkinBlock for CarrotBlock { +impl BlockBehaviour for CarrotBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { ::can_plant_on_top(self, args.block_accessor, &args.position.down()) .await diff --git a/pumpkin/src/block/blocks/plant/crop/potatoes.rs b/pumpkin/src/block/blocks/plant/crop/potatoes.rs index 6bdbfa167..1e28868e0 100644 --- a/pumpkin/src/block/blocks/plant/crop/potatoes.rs +++ b/pumpkin/src/block/blocks/plant/crop/potatoes.rs @@ -4,15 +4,13 @@ use pumpkin_world::BlockStateId; use crate::block::blocks::plant::PlantBlockBase; use crate::block::blocks::plant::crop::CropBlockBase; -use crate::block::pumpkin_block::{ - CanPlaceAtArgs, GetStateForNeighborUpdateArgs, PumpkinBlock, RandomTickArgs, -}; +use crate::block::{BlockBehaviour, CanPlaceAtArgs, GetStateForNeighborUpdateArgs, RandomTickArgs}; #[pumpkin_block("minecraft:potatoes")] pub struct PotatoBlock; #[async_trait] -impl PumpkinBlock for PotatoBlock { +impl BlockBehaviour for PotatoBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { ::can_plant_on_top(self, args.block_accessor, &args.position.down()) .await diff --git a/pumpkin/src/block/blocks/plant/crop/torch_flower.rs b/pumpkin/src/block/blocks/plant/crop/torch_flower.rs index 2f1afe2df..ead8ab448 100644 --- a/pumpkin/src/block/blocks/plant/crop/torch_flower.rs +++ b/pumpkin/src/block/blocks/plant/crop/torch_flower.rs @@ -9,9 +9,7 @@ use rand::Rng; use crate::block::blocks::plant::PlantBlockBase; use crate::block::blocks::plant::crop::CropBlockBase; -use crate::block::pumpkin_block::{ - CanPlaceAtArgs, GetStateForNeighborUpdateArgs, PumpkinBlock, RandomTickArgs, -}; +use crate::block::{BlockBehaviour, CanPlaceAtArgs, GetStateForNeighborUpdateArgs, RandomTickArgs}; type TorchFlowerProperties = TorchflowerCropLikeProperties; @@ -19,7 +17,7 @@ type TorchFlowerProperties = TorchflowerCropLikeProperties; pub struct TorchFlowerBlock; #[async_trait] -impl PumpkinBlock for TorchFlowerBlock { +impl BlockBehaviour for TorchFlowerBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { ::can_plant_on_top(self, args.block_accessor, &args.position.down()) .await diff --git a/pumpkin/src/block/blocks/plant/crop/wheat.rs b/pumpkin/src/block/blocks/plant/crop/wheat.rs index 3a082f5f6..e8d00d421 100644 --- a/pumpkin/src/block/blocks/plant/crop/wheat.rs +++ b/pumpkin/src/block/blocks/plant/crop/wheat.rs @@ -4,15 +4,13 @@ use pumpkin_world::BlockStateId; use crate::block::blocks::plant::PlantBlockBase; use crate::block::blocks::plant::crop::CropBlockBase; -use crate::block::pumpkin_block::{ - CanPlaceAtArgs, GetStateForNeighborUpdateArgs, PumpkinBlock, RandomTickArgs, -}; +use crate::block::{BlockBehaviour, CanPlaceAtArgs, GetStateForNeighborUpdateArgs, RandomTickArgs}; #[pumpkin_block("minecraft:wheat")] pub struct WheatBlock; #[async_trait] -impl PumpkinBlock for WheatBlock { +impl BlockBehaviour for WheatBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { ::can_plant_on_top(self, args.block_accessor, &args.position.down()) .await diff --git a/pumpkin/src/block/blocks/plant/dry_vegetation.rs b/pumpkin/src/block/blocks/plant/dry_vegetation.rs index 33ee24a8e..897b24e54 100644 --- a/pumpkin/src/block/blocks/plant/dry_vegetation.rs +++ b/pumpkin/src/block/blocks/plant/dry_vegetation.rs @@ -2,7 +2,7 @@ use async_trait::async_trait; use pumpkin_data::tag; use pumpkin_data::tag::Taggable; -use crate::block::pumpkin_block::{BlockMetadata, CanPlaceAtArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, BlockMetadata, CanPlaceAtArgs}; pub struct DryVegetationBlock; @@ -17,7 +17,7 @@ impl BlockMetadata for DryVegetationBlock { } #[async_trait] -impl PumpkinBlock for DryVegetationBlock { +impl BlockBehaviour for DryVegetationBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { let block_below = args.block_accessor.get_block(&args.position.down()).await; block_below.is_tagged_with_by_tag(&tag::Block::MINECRAFT_DRY_VEGETATION_MAY_PLACE_ON) diff --git a/pumpkin/src/block/blocks/plant/flower.rs b/pumpkin/src/block/blocks/plant/flower.rs index 4a47f952b..59eb2c5f2 100644 --- a/pumpkin/src/block/blocks/plant/flower.rs +++ b/pumpkin/src/block/blocks/plant/flower.rs @@ -6,11 +6,9 @@ use pumpkin_world::BlockStateId; use pumpkin_world::world::BlockFlags; use crate::block::blocks::plant::PlantBlockBase; -use crate::block::pumpkin_block::{ - BlockMetadata, CanPlaceAtArgs, GetStateForNeighborUpdateArgs, PumpkinBlock, -}; +use crate::block::{BlockBehaviour, BlockMetadata, CanPlaceAtArgs, GetStateForNeighborUpdateArgs}; -use crate::block::pumpkin_block::RandomTickArgs; +use crate::block::RandomTickArgs; pub struct FlowerBlock; @@ -25,7 +23,7 @@ impl BlockMetadata for FlowerBlock { } #[async_trait] -impl PumpkinBlock for FlowerBlock { +impl BlockBehaviour for FlowerBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { ::can_place_at(self, args.block_accessor, args.position).await } diff --git a/pumpkin/src/block/blocks/plant/flowerbed.rs b/pumpkin/src/block/blocks/plant/flowerbed.rs index 80da2e3aa..cbfb43147 100644 --- a/pumpkin/src/block/blocks/plant/flowerbed.rs +++ b/pumpkin/src/block/blocks/plant/flowerbed.rs @@ -5,9 +5,9 @@ use pumpkin_world::BlockStateId; use crate::block::blocks::plant::PlantBlockBase; -use crate::block::pumpkin_block::{ - BlockMetadata, CanPlaceAtArgs, CanUpdateAtArgs, GetStateForNeighborUpdateArgs, OnPlaceArgs, - PumpkinBlock, +use crate::block::{ + BlockBehaviour, BlockMetadata, CanPlaceAtArgs, CanUpdateAtArgs, GetStateForNeighborUpdateArgs, + OnPlaceArgs, }; use super::segmented::Segmented; @@ -27,7 +27,7 @@ impl BlockMetadata for FlowerbedBlock { } #[async_trait] -impl PumpkinBlock for FlowerbedBlock { +impl BlockBehaviour for FlowerbedBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { let block_below = args.block_accessor.get_block(&args.position.down()).await; block_below.is_tagged_with_by_tag(&tag::Block::MINECRAFT_DIRT) diff --git a/pumpkin/src/block/blocks/plant/leaf_litter.rs b/pumpkin/src/block/blocks/plant/leaf_litter.rs index 4f39a1b16..9d12687ae 100644 --- a/pumpkin/src/block/blocks/plant/leaf_litter.rs +++ b/pumpkin/src/block/blocks/plant/leaf_litter.rs @@ -2,9 +2,9 @@ use async_trait::async_trait; use pumpkin_data::{Block, BlockDirection}; use pumpkin_world::BlockStateId; -use crate::block::pumpkin_block::{ - BlockMetadata, CanPlaceAtArgs, CanUpdateAtArgs, GetStateForNeighborUpdateArgs, OnPlaceArgs, - PumpkinBlock, +use crate::block::{ + BlockBehaviour, BlockMetadata, CanPlaceAtArgs, CanUpdateAtArgs, GetStateForNeighborUpdateArgs, + OnPlaceArgs, }; use super::segmented::Segmented; @@ -24,7 +24,7 @@ impl BlockMetadata for LeafLitterBlock { } #[async_trait] -impl PumpkinBlock for LeafLitterBlock { +impl BlockBehaviour for LeafLitterBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { let block_below = args .block_accessor diff --git a/pumpkin/src/block/blocks/plant/lily_pad.rs b/pumpkin/src/block/blocks/plant/lily_pad.rs index 7eab46328..3a2dbfb79 100644 --- a/pumpkin/src/block/blocks/plant/lily_pad.rs +++ b/pumpkin/src/block/blocks/plant/lily_pad.rs @@ -7,15 +7,15 @@ use pumpkin_world::{ world::{BlockAccessor, BlockFlags}, }; -use crate::block::{blocks::plant::PlantBlockBase, pumpkin_block::GetStateForNeighborUpdateArgs}; +use crate::block::{GetStateForNeighborUpdateArgs, blocks::plant::PlantBlockBase}; -use crate::block::pumpkin_block::{CanPlaceAtArgs, OnEntityCollisionArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, CanPlaceAtArgs, OnEntityCollisionArgs}; #[pumpkin_block("minecraft:lily_pad")] pub struct LilyPadBlock; #[async_trait] -impl PumpkinBlock for LilyPadBlock { +impl BlockBehaviour for LilyPadBlock { async fn on_entity_collision(&self, args: OnEntityCollisionArgs<'_>) { // Proberbly not the best solution, but works if args diff --git a/pumpkin/src/block/blocks/plant/mushroom_plant.rs b/pumpkin/src/block/blocks/plant/mushroom_plant.rs index 4803b1441..1a457d4ee 100644 --- a/pumpkin/src/block/blocks/plant/mushroom_plant.rs +++ b/pumpkin/src/block/blocks/plant/mushroom_plant.rs @@ -2,7 +2,7 @@ use async_trait::async_trait; use pumpkin_data::tag; use pumpkin_data::tag::Taggable; -use crate::block::pumpkin_block::{BlockMetadata, CanPlaceAtArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, BlockMetadata, CanPlaceAtArgs}; pub struct MushroomPlantBlock; @@ -17,7 +17,7 @@ impl BlockMetadata for MushroomPlantBlock { } #[async_trait] -impl PumpkinBlock for MushroomPlantBlock { +impl BlockBehaviour for MushroomPlantBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { let block_below = args.block_accessor.get_block(&args.position.down()).await; if block_below.is_tagged_with_by_tag(&tag::Block::MINECRAFT_MUSHROOM_GROW_BLOCK) { diff --git a/pumpkin/src/block/blocks/plant/nether_wart.rs b/pumpkin/src/block/blocks/plant/nether_wart.rs index eb244df03..8468b966e 100644 --- a/pumpkin/src/block/blocks/plant/nether_wart.rs +++ b/pumpkin/src/block/blocks/plant/nether_wart.rs @@ -6,13 +6,13 @@ use pumpkin_world::BlockStateId; use pumpkin_world::world::BlockAccessor; use crate::block::blocks::plant::PlantBlockBase; -use crate::block::pumpkin_block::{CanPlaceAtArgs, GetStateForNeighborUpdateArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, CanPlaceAtArgs, GetStateForNeighborUpdateArgs}; #[pumpkin_block("minecraft:nether_wart")] pub struct NetherWartBlock; #[async_trait] -impl PumpkinBlock for NetherWartBlock { +impl BlockBehaviour for NetherWartBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { ::can_place_at(self, args.block_accessor, args.position).await } diff --git a/pumpkin/src/block/blocks/plant/roots.rs b/pumpkin/src/block/blocks/plant/roots.rs index 0bd06220d..ab833ffd0 100644 --- a/pumpkin/src/block/blocks/plant/roots.rs +++ b/pumpkin/src/block/blocks/plant/roots.rs @@ -2,7 +2,7 @@ use async_trait::async_trait; use pumpkin_data::tag::Taggable; use pumpkin_data::{Block, tag}; -use crate::block::pumpkin_block::{BlockMetadata, CanPlaceAtArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, BlockMetadata, CanPlaceAtArgs}; pub struct RootsBlock; @@ -17,7 +17,7 @@ impl BlockMetadata for RootsBlock { } #[async_trait] -impl PumpkinBlock for RootsBlock { +impl BlockBehaviour for RootsBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { let block_below = args.block_accessor.get_block(&args.position.down()).await; block_below.is_tagged_with_by_tag(&tag::Block::MINECRAFT_NYLIUM) diff --git a/pumpkin/src/block/blocks/plant/sapling.rs b/pumpkin/src/block/blocks/plant/sapling.rs index 79bae76f5..03bd57cf0 100644 --- a/pumpkin/src/block/blocks/plant/sapling.rs +++ b/pumpkin/src/block/blocks/plant/sapling.rs @@ -8,9 +8,7 @@ use pumpkin_world::world::BlockFlags; use std::sync::Arc; use crate::block::blocks::plant::PlantBlockBase; -use crate::block::pumpkin_block::{ - CanPlaceAtArgs, GetStateForNeighborUpdateArgs, PumpkinBlock, RandomTickArgs, -}; +use crate::block::{BlockBehaviour, CanPlaceAtArgs, GetStateForNeighborUpdateArgs, RandomTickArgs}; use crate::world::World; type SaplingProperties = pumpkin_data::block_properties::OakSaplingLikeProperties; @@ -34,7 +32,7 @@ impl SaplingBlock { } #[async_trait] -impl PumpkinBlock for SaplingBlock { +impl BlockBehaviour for SaplingBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { ::can_place_at(self, args.block_accessor, args.position).await } diff --git a/pumpkin/src/block/blocks/plant/sea_grass.rs b/pumpkin/src/block/blocks/plant/sea_grass.rs index 76d111633..ade7ebc10 100644 --- a/pumpkin/src/block/blocks/plant/sea_grass.rs +++ b/pumpkin/src/block/blocks/plant/sea_grass.rs @@ -5,14 +5,14 @@ use pumpkin_world::BlockStateId; use crate::block::{ blocks::plant::PlantBlockBase, - pumpkin_block::{CanPlaceAtArgs, GetStateForNeighborUpdateArgs, PumpkinBlock}, + {BlockBehaviour, CanPlaceAtArgs, GetStateForNeighborUpdateArgs}, }; #[pumpkin_block("minecraft:seagrass")] pub struct SeaGrassBlock; #[async_trait] -impl PumpkinBlock for SeaGrassBlock { +impl BlockBehaviour for SeaGrassBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { ::can_place_at(self, args.block_accessor, args.position).await } diff --git a/pumpkin/src/block/blocks/plant/sea_pickles.rs b/pumpkin/src/block/blocks/plant/sea_pickles.rs index 423be23c6..114034944 100644 --- a/pumpkin/src/block/blocks/plant/sea_pickles.rs +++ b/pumpkin/src/block/blocks/plant/sea_pickles.rs @@ -1,10 +1,10 @@ use crate::block::BlockIsReplacing; use crate::block::blocks::plant::PlantBlockBase; -use crate::block::pumpkin_block::{ - CanPlaceAtArgs, CanUpdateAtArgs, GetStateForNeighborUpdateArgs, OnPlaceArgs, PumpkinBlock, +use crate::block::registry::BlockActionResult; +use crate::block::{ + BlockBehaviour, CanPlaceAtArgs, CanUpdateAtArgs, GetStateForNeighborUpdateArgs, OnPlaceArgs, UseWithItemArgs, }; -use crate::block::registry::BlockActionResult; use crate::entity::EntityBase; use async_trait::async_trait; use pumpkin_data::block_properties::{BlockProperties, Integer1To4}; @@ -24,7 +24,7 @@ type SeaPickleProperties = pumpkin_data::block_properties::SeaPickleLikeProperti pub struct SeaPickleBlock; #[async_trait] -impl PumpkinBlock for SeaPickleBlock { +impl BlockBehaviour for SeaPickleBlock { #[allow(clippy::many_single_char_names)] async fn use_with_item(&self, args: UseWithItemArgs<'_>) -> BlockActionResult { if args.item_stack.lock().await.item != &Item::BONE_MEAL diff --git a/pumpkin/src/block/blocks/plant/segmented.rs b/pumpkin/src/block/blocks/plant/segmented.rs index 7033fed9a..2dca16afa 100644 --- a/pumpkin/src/block/blocks/plant/segmented.rs +++ b/pumpkin/src/block/blocks/plant/segmented.rs @@ -2,8 +2,8 @@ use async_trait::async_trait; use pumpkin_data::block_properties::{BlockProperties, HorizontalFacing, Integer1To4}; use pumpkin_world::BlockStateId; -use crate::block::pumpkin_block::{CanUpdateAtArgs, PumpkinBlock}; -use crate::block::{BlockIsReplacing, pumpkin_block::OnPlaceArgs}; +use crate::block::{BlockBehaviour, CanUpdateAtArgs}; +use crate::block::{BlockIsReplacing, OnPlaceArgs}; pub trait SegmentProperties { fn get_segment_amount(&self) -> Integer1To4; @@ -44,7 +44,7 @@ impl_segment_properties!( ); #[async_trait] -pub trait Segmented: PumpkinBlock { +pub trait Segmented: BlockBehaviour { type Properties: BlockProperties + SegmentProperties; fn can_add_segment(&self, props: &Self::Properties) -> bool { diff --git a/pumpkin/src/block/blocks/plant/short_plant.rs b/pumpkin/src/block/blocks/plant/short_plant.rs index da313a573..5fe9fa1c4 100644 --- a/pumpkin/src/block/blocks/plant/short_plant.rs +++ b/pumpkin/src/block/blocks/plant/short_plant.rs @@ -2,7 +2,7 @@ use async_trait::async_trait; use pumpkin_data::tag::Taggable; use pumpkin_data::{Block, tag}; -use crate::block::pumpkin_block::{BlockMetadata, CanPlaceAtArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, BlockMetadata, CanPlaceAtArgs}; pub struct ShortPlantBlock; @@ -17,7 +17,7 @@ impl BlockMetadata for ShortPlantBlock { } #[async_trait] -impl PumpkinBlock for ShortPlantBlock { +impl BlockBehaviour for ShortPlantBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { let block_below = args.block_accessor.get_block(&args.position.down()).await; block_below.is_tagged_with_by_tag(&tag::Block::MINECRAFT_DIRT) diff --git a/pumpkin/src/block/blocks/plant/tall_plant.rs b/pumpkin/src/block/blocks/plant/tall_plant.rs index a3d534107..ce05f4c7b 100644 --- a/pumpkin/src/block/blocks/plant/tall_plant.rs +++ b/pumpkin/src/block/blocks/plant/tall_plant.rs @@ -2,7 +2,7 @@ use async_trait::async_trait; use pumpkin_data::tag::Taggable; use pumpkin_data::{Block, tag}; -use crate::block::pumpkin_block::{BlockMetadata, CanPlaceAtArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, BlockMetadata, CanPlaceAtArgs}; pub struct TallPlantBlock; @@ -26,7 +26,7 @@ impl BlockMetadata for TallPlantBlock { } #[async_trait] -impl PumpkinBlock for TallPlantBlock { +impl BlockBehaviour for TallPlantBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { let (block, state) = args.block_accessor.get_block_and_state(args.position).await; if let Some(props) = block.properties(state.id).map(|s| s.to_props()) { diff --git a/pumpkin/src/block/blocks/pumpkin.rs b/pumpkin/src/block/blocks/pumpkin.rs index 4090fad36..7f54ef258 100644 --- a/pumpkin/src/block/blocks/pumpkin.rs +++ b/pumpkin/src/block/blocks/pumpkin.rs @@ -1,4 +1,4 @@ -use crate::block::pumpkin_block::UseWithItemArgs; +use crate::block::UseWithItemArgs; use crate::block::registry::BlockActionResult; use crate::entity::Entity; use crate::entity::item::ItemEntity; @@ -16,7 +16,7 @@ use uuid::Uuid; pub struct PumpkinBlock; #[async_trait] -impl crate::block::pumpkin_block::PumpkinBlock for PumpkinBlock { +impl crate::block::BlockBehaviour for PumpkinBlock { async fn use_with_item(&self, args: UseWithItemArgs<'_>) -> BlockActionResult { if args.item_stack.lock().await.item != &Item::SHEARS { return BlockActionResult::Pass; diff --git a/pumpkin/src/block/blocks/redstone/abstruct_redstone_gate.rs b/pumpkin/src/block/blocks/redstone/abstruct_redstone_gate.rs index a74331cb7..eae62e094 100644 --- a/pumpkin/src/block/blocks/redstone/abstruct_redstone_gate.rs +++ b/pumpkin/src/block/blocks/redstone/abstruct_redstone_gate.rs @@ -16,9 +16,7 @@ use pumpkin_world::{ }; use crate::{ - block::pumpkin_block::{ - GetRedstonePowerArgs, OnNeighborUpdateArgs, OnStateReplacedArgs, PlayerPlacedArgs, - }, + block::{GetRedstonePowerArgs, OnNeighborUpdateArgs, OnStateReplacedArgs, PlayerPlacedArgs}, entity::player::Player, world::World, }; diff --git a/pumpkin/src/block/blocks/redstone/buttons.rs b/pumpkin/src/block/blocks/redstone/buttons.rs index 8580f5fb4..8ffa01571 100644 --- a/pumpkin/src/block/blocks/redstone/buttons.rs +++ b/pumpkin/src/block/blocks/redstone/buttons.rs @@ -16,17 +16,17 @@ use pumpkin_world::world::BlockFlags; type ButtonLikeProperties = pumpkin_data::block_properties::LeverLikeProperties; +use crate::block::CanPlaceAtArgs; +use crate::block::EmitsRedstonePowerArgs; +use crate::block::GetRedstonePowerArgs; +use crate::block::GetStateForNeighborUpdateArgs; +use crate::block::OnPlaceArgs; +use crate::block::OnScheduledTickArgs; +use crate::block::OnStateReplacedArgs; use crate::block::blocks::abstruct_wall_mounting::WallMountedBlock; use crate::block::blocks::redstone::lever::LeverLikePropertiesExt; -use crate::block::pumpkin_block::CanPlaceAtArgs; -use crate::block::pumpkin_block::EmitsRedstonePowerArgs; -use crate::block::pumpkin_block::GetRedstonePowerArgs; -use crate::block::pumpkin_block::GetStateForNeighborUpdateArgs; -use crate::block::pumpkin_block::OnPlaceArgs; -use crate::block::pumpkin_block::OnScheduledTickArgs; -use crate::block::pumpkin_block::OnStateReplacedArgs; -use crate::block::pumpkin_block::{NormalUseArgs, PumpkinBlock}; use crate::block::registry::BlockActionResult; +use crate::block::{BlockBehaviour, NormalUseArgs}; use crate::world::World; async fn click_button(world: &Arc, block_pos: &BlockPos) { @@ -58,7 +58,7 @@ async fn click_button(world: &Arc, block_pos: &BlockPos) { pub struct ButtonBlock; #[async_trait] -impl PumpkinBlock for ButtonBlock { +impl BlockBehaviour for ButtonBlock { async fn normal_use(&self, args: NormalUseArgs<'_>) -> BlockActionResult { click_button(args.world, args.position).await; diff --git a/pumpkin/src/block/blocks/redstone/comparator.rs b/pumpkin/src/block/blocks/redstone/comparator.rs index 0804043e6..6116452d5 100644 --- a/pumpkin/src/block/blocks/redstone/comparator.rs +++ b/pumpkin/src/block/blocks/redstone/comparator.rs @@ -17,13 +17,13 @@ use pumpkin_world::{ use crate::{ block::{ - pumpkin_block::{ - BrokenArgs, CanPlaceAtArgs, EmitsRedstonePowerArgs, GetComparatorOutputArgs, - GetRedstonePowerArgs, GetStateForNeighborUpdateArgs, NormalUseArgs, - OnNeighborUpdateArgs, OnPlaceArgs, OnScheduledTickArgs, OnStateReplacedArgs, - PlacedArgs, PlayerPlacedArgs, PumpkinBlock, - }, registry::BlockActionResult, + { + BlockBehaviour, BrokenArgs, CanPlaceAtArgs, EmitsRedstonePowerArgs, + GetComparatorOutputArgs, GetRedstonePowerArgs, GetStateForNeighborUpdateArgs, + NormalUseArgs, OnNeighborUpdateArgs, OnPlaceArgs, OnScheduledTickArgs, + OnStateReplacedArgs, PlacedArgs, PlayerPlacedArgs, + }, }, world::World, }; @@ -34,7 +34,7 @@ use super::abstruct_redstone_gate::{self, RedstoneGateBlock, RedstoneGateBlockPr pub struct ComparatorBlock; #[async_trait] -impl PumpkinBlock for ComparatorBlock { +impl BlockBehaviour for ComparatorBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { RedstoneGateBlock::on_place(self, args.player, args.block).await } diff --git a/pumpkin/src/block/blocks/redstone/copper_bulb.rs b/pumpkin/src/block/blocks/redstone/copper_bulb.rs index 1450ffcf6..4897682a6 100644 --- a/pumpkin/src/block/blocks/redstone/copper_bulb.rs +++ b/pumpkin/src/block/blocks/redstone/copper_bulb.rs @@ -1,5 +1,5 @@ use crate::block::blocks::redstone::block_receives_redstone_power; -use crate::block::pumpkin_block::{BlockMetadata, OnNeighborUpdateArgs, OnPlaceArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, BlockMetadata, OnNeighborUpdateArgs, OnPlaceArgs}; use async_trait::async_trait; use pumpkin_data::block_properties::BlockProperties; use pumpkin_data::sound::{Sound, SoundCategory}; @@ -30,7 +30,7 @@ impl BlockMetadata for CopperBulbBlock { } #[async_trait] -impl PumpkinBlock for CopperBulbBlock { +impl BlockBehaviour for CopperBulbBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut props = CopperBulbLikeProperties::default(args.block); let is_receiving_power = block_receives_redstone_power(args.world, args.position).await; diff --git a/pumpkin/src/block/blocks/redstone/dispenser.rs b/pumpkin/src/block/blocks/redstone/dispenser.rs index c8d9bf766..7b850019b 100644 --- a/pumpkin/src/block/blocks/redstone/dispenser.rs +++ b/pumpkin/src/block/blocks/redstone/dispenser.rs @@ -1,4 +1,4 @@ -use crate::block::pumpkin_block::{OnPlaceArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, OnPlaceArgs}; use async_trait::async_trait; use pumpkin_data::block_properties::{BlockProperties, DispenserLikeProperties}; use pumpkin_macros::pumpkin_block; @@ -8,7 +8,7 @@ use pumpkin_world::BlockStateId; pub struct DispenserBlock; #[async_trait] -impl PumpkinBlock for DispenserBlock { +impl BlockBehaviour for DispenserBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut props = DispenserLikeProperties::default(args.block); props.facing = args.player.living_entity.entity.get_facing().opposite(); diff --git a/pumpkin/src/block/blocks/redstone/dropper.rs b/pumpkin/src/block/blocks/redstone/dropper.rs index 0d5a0ae8b..edc88177a 100644 --- a/pumpkin/src/block/blocks/redstone/dropper.rs +++ b/pumpkin/src/block/blocks/redstone/dropper.rs @@ -1,8 +1,9 @@ use crate::block::blocks::redstone::block_receives_redstone_power; -use crate::block::pumpkin_block::{ - NormalUseArgs, OnNeighborUpdateArgs, OnPlaceArgs, OnScheduledTickArgs, PlacedArgs, PumpkinBlock, -}; use crate::block::registry::BlockActionResult; +use crate::block::{ + BlockBehaviour, NormalUseArgs, OnNeighborUpdateArgs, OnPlaceArgs, OnScheduledTickArgs, + PlacedArgs, +}; use crate::entity::Entity; use crate::entity::item::ItemEntity; use async_trait::async_trait; @@ -81,7 +82,7 @@ const fn to_data3d(facing: Facing) -> i32 { } #[async_trait] -impl PumpkinBlock for DropperBlock { +impl BlockBehaviour for DropperBlock { async fn normal_use(&self, args: NormalUseArgs<'_>) -> BlockActionResult { if let Some(block_entity) = args.world.get_block_entity(args.position).await { if let Some(inventory) = block_entity.get_inventory() { diff --git a/pumpkin/src/block/blocks/redstone/lever.rs b/pumpkin/src/block/blocks/redstone/lever.rs index 511c37413..fc86de88e 100644 --- a/pumpkin/src/block/blocks/redstone/lever.rs +++ b/pumpkin/src/block/blocks/redstone/lever.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use crate::block::{ blocks::abstruct_wall_mounting::WallMountedBlock, - pumpkin_block::{ + { CanPlaceAtArgs, EmitsRedstonePowerArgs, GetRedstonePowerArgs, GetStateForNeighborUpdateArgs, OnPlaceArgs, OnStateReplacedArgs, }, @@ -18,8 +18,8 @@ use pumpkin_world::{BlockStateId, world::BlockFlags}; use crate::{ block::{ - pumpkin_block::{NormalUseArgs, PumpkinBlock}, registry::BlockActionResult, + {BlockBehaviour, NormalUseArgs}, }, world::World, }; @@ -44,7 +44,7 @@ async fn toggle_lever(world: &Arc, block_pos: &BlockPos) { pub struct LeverBlock; #[async_trait] -impl PumpkinBlock for LeverBlock { +impl BlockBehaviour for LeverBlock { async fn normal_use(&self, args: NormalUseArgs<'_>) -> BlockActionResult { toggle_lever(args.world, args.position).await; diff --git a/pumpkin/src/block/blocks/redstone/observer.rs b/pumpkin/src/block/blocks/redstone/observer.rs index 3c01c8605..07d078766 100644 --- a/pumpkin/src/block/blocks/redstone/observer.rs +++ b/pumpkin/src/block/blocks/redstone/observer.rs @@ -1,6 +1,6 @@ use std::sync::Arc; -use crate::block::pumpkin_block::{ +use crate::block::{ EmitsRedstonePowerArgs, GetRedstonePowerArgs, GetStateForNeighborUpdateArgs, OnPlaceArgs, OnScheduledTickArgs, OnStateReplacedArgs, }; @@ -14,7 +14,7 @@ use pumpkin_util::math::position::BlockPos; use pumpkin_world::{BlockStateId, tick::TickPriority, world::BlockFlags}; use crate::{ - block::pumpkin_block::{OnNeighborUpdateArgs, PumpkinBlock}, + block::{BlockBehaviour, OnNeighborUpdateArgs}, world::World, }; @@ -22,7 +22,7 @@ use crate::{ pub struct ObserverBlock; #[async_trait] -impl PumpkinBlock for ObserverBlock { +impl BlockBehaviour for ObserverBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut props = ObserverLikeProperties::default(args.block); props.facing = args.player.living_entity.entity.get_facing(); diff --git a/pumpkin/src/block/blocks/redstone/pressure_plate/mod.rs b/pumpkin/src/block/blocks/redstone/pressure_plate/mod.rs index dbd65b742..daeed12d3 100644 --- a/pumpkin/src/block/blocks/redstone/pressure_plate/mod.rs +++ b/pumpkin/src/block/blocks/redstone/pressure_plate/mod.rs @@ -5,7 +5,7 @@ use pumpkin_util::math::position::BlockPos; use pumpkin_world::{BlockStateId, tick::TickPriority, world::BlockFlags}; use crate::{ - block::pumpkin_block::{OnEntityCollisionArgs, OnScheduledTickArgs, OnStateReplacedArgs}, + block::{OnEntityCollisionArgs, OnScheduledTickArgs, OnStateReplacedArgs}, world::World, }; diff --git a/pumpkin/src/block/blocks/redstone/pressure_plate/plate.rs b/pumpkin/src/block/blocks/redstone/pressure_plate/plate.rs index af08a626b..d15ff4203 100644 --- a/pumpkin/src/block/blocks/redstone/pressure_plate/plate.rs +++ b/pumpkin/src/block/blocks/redstone/pressure_plate/plate.rs @@ -8,10 +8,10 @@ use pumpkin_util::math::{boundingbox::BoundingBox, position::BlockPos}; use pumpkin_world::{BlockStateId, world::BlockFlags}; use crate::{ - block::pumpkin_block::{ - BlockMetadata, CanPlaceAtArgs, EmitsRedstonePowerArgs, GetRedstonePowerArgs, - OnEntityCollisionArgs, OnNeighborUpdateArgs, OnScheduledTickArgs, OnStateReplacedArgs, - PumpkinBlock, + block::{ + BlockBehaviour, BlockMetadata, CanPlaceAtArgs, EmitsRedstonePowerArgs, + GetRedstonePowerArgs, OnEntityCollisionArgs, OnNeighborUpdateArgs, OnScheduledTickArgs, + OnStateReplacedArgs, }, world::World, }; @@ -41,7 +41,7 @@ impl BlockMetadata for PressurePlateBlock { } #[async_trait] -impl PumpkinBlock for PressurePlateBlock { +impl BlockBehaviour for PressurePlateBlock { async fn on_entity_collision(&self, args: OnEntityCollisionArgs<'_>) { self.on_entity_collision_pp(args).await; } diff --git a/pumpkin/src/block/blocks/redstone/pressure_plate/weighted.rs b/pumpkin/src/block/blocks/redstone/pressure_plate/weighted.rs index 8ddb5c5da..b83cfd165 100644 --- a/pumpkin/src/block/blocks/redstone/pressure_plate/weighted.rs +++ b/pumpkin/src/block/blocks/redstone/pressure_plate/weighted.rs @@ -7,10 +7,10 @@ use pumpkin_util::math::{boundingbox::BoundingBox, position::BlockPos}; use pumpkin_world::{BlockStateId, world::BlockFlags}; use crate::{ - block::pumpkin_block::{ - BlockMetadata, CanPlaceAtArgs, EmitsRedstonePowerArgs, GetRedstonePowerArgs, - OnEntityCollisionArgs, OnNeighborUpdateArgs, OnScheduledTickArgs, OnStateReplacedArgs, - PumpkinBlock, + block::{ + BlockBehaviour, BlockMetadata, CanPlaceAtArgs, EmitsRedstonePowerArgs, + GetRedstonePowerArgs, OnEntityCollisionArgs, OnNeighborUpdateArgs, OnScheduledTickArgs, + OnStateReplacedArgs, }, world::World, }; @@ -38,7 +38,7 @@ impl BlockMetadata for WeightedPressurePlateBlock { } #[async_trait] -impl PumpkinBlock for WeightedPressurePlateBlock { +impl BlockBehaviour for WeightedPressurePlateBlock { async fn on_entity_collision(&self, args: OnEntityCollisionArgs<'_>) { self.on_entity_collision_pp(args).await; } diff --git a/pumpkin/src/block/blocks/redstone/rails/activator_rail.rs b/pumpkin/src/block/blocks/redstone/rails/activator_rail.rs index 1f6f32660..820726ce1 100644 --- a/pumpkin/src/block/blocks/redstone/rails/activator_rail.rs +++ b/pumpkin/src/block/blocks/redstone/rails/activator_rail.rs @@ -4,12 +4,12 @@ use pumpkin_world::BlockStateId; use pumpkin_world::world::BlockFlags; use std::sync::Arc; -use crate::block::pumpkin_block::CanPlaceAtArgs; -use crate::block::pumpkin_block::OnNeighborUpdateArgs; -use crate::block::pumpkin_block::OnPlaceArgs; -use crate::block::pumpkin_block::OnStateReplacedArgs; -use crate::block::pumpkin_block::PlacedArgs; -use crate::block::pumpkin_block::PumpkinBlock; +use crate::block::BlockBehaviour; +use crate::block::CanPlaceAtArgs; +use crate::block::OnNeighborUpdateArgs; +use crate::block::OnPlaceArgs; +use crate::block::OnStateReplacedArgs; +use crate::block::PlacedArgs; use crate::world::World; use pumpkin_data::Block; use pumpkin_util::math::position::BlockPos; @@ -38,7 +38,7 @@ use super::common::{ pub struct ActivatorRailBlock; #[async_trait] -impl PumpkinBlock for ActivatorRailBlock { +impl BlockBehaviour for ActivatorRailBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut rail_props = RailProperties::default(args.block); let player_facing = args.player.living_entity.entity.get_horizontal_facing(); @@ -179,17 +179,11 @@ impl PumpkinBlock for ActivatorRailBlock { can_place_rail_at(args.block_accessor, args.position).await } - async fn emits_redstone_power( - &self, - _args: crate::block::pumpkin_block::EmitsRedstonePowerArgs<'_>, - ) -> bool { + async fn emits_redstone_power(&self, _args: crate::block::EmitsRedstonePowerArgs<'_>) -> bool { false } - async fn get_weak_redstone_power( - &self, - _args: crate::block::pumpkin_block::GetRedstonePowerArgs<'_>, - ) -> u8 { + async fn get_weak_redstone_power(&self, _args: crate::block::GetRedstonePowerArgs<'_>) -> u8 { 0 } } diff --git a/pumpkin/src/block/blocks/redstone/rails/detector_rail.rs b/pumpkin/src/block/blocks/redstone/rails/detector_rail.rs index 279fc3827..c77b8d865 100644 --- a/pumpkin/src/block/blocks/redstone/rails/detector_rail.rs +++ b/pumpkin/src/block/blocks/redstone/rails/detector_rail.rs @@ -3,11 +3,11 @@ use pumpkin_macros::pumpkin_block; use pumpkin_world::BlockStateId; use pumpkin_world::world::BlockFlags; -use crate::block::pumpkin_block::CanPlaceAtArgs; -use crate::block::pumpkin_block::OnNeighborUpdateArgs; -use crate::block::pumpkin_block::OnPlaceArgs; -use crate::block::pumpkin_block::PlacedArgs; -use crate::block::pumpkin_block::PumpkinBlock; +use crate::block::BlockBehaviour; +use crate::block::CanPlaceAtArgs; +use crate::block::OnNeighborUpdateArgs; +use crate::block::OnPlaceArgs; +use crate::block::PlacedArgs; use super::RailProperties; use super::common::{ @@ -19,7 +19,7 @@ use super::common::{ pub struct DetectorRailBlock; #[async_trait] -impl PumpkinBlock for DetectorRailBlock { +impl BlockBehaviour for DetectorRailBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut rail_props = RailProperties::default(args.block); let player_facing = args.player.living_entity.entity.get_horizontal_facing(); diff --git a/pumpkin/src/block/blocks/redstone/rails/powered_rail.rs b/pumpkin/src/block/blocks/redstone/rails/powered_rail.rs index ed2717a02..5210aff7b 100644 --- a/pumpkin/src/block/blocks/redstone/rails/powered_rail.rs +++ b/pumpkin/src/block/blocks/redstone/rails/powered_rail.rs @@ -4,12 +4,12 @@ use pumpkin_world::BlockStateId; use pumpkin_world::world::BlockFlags; use std::sync::Arc; -use crate::block::pumpkin_block::CanPlaceAtArgs; -use crate::block::pumpkin_block::OnNeighborUpdateArgs; -use crate::block::pumpkin_block::OnPlaceArgs; -use crate::block::pumpkin_block::OnStateReplacedArgs; -use crate::block::pumpkin_block::PlacedArgs; -use crate::block::pumpkin_block::PumpkinBlock; +use crate::block::BlockBehaviour; +use crate::block::CanPlaceAtArgs; +use crate::block::OnNeighborUpdateArgs; +use crate::block::OnPlaceArgs; +use crate::block::OnStateReplacedArgs; +use crate::block::PlacedArgs; use crate::world::World; use pumpkin_data::Block; use pumpkin_util::math::position::BlockPos; @@ -38,7 +38,7 @@ use super::common::{ pub struct PoweredRailBlock; #[async_trait] -impl PumpkinBlock for PoweredRailBlock { +impl BlockBehaviour for PoweredRailBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut rail_props = RailProperties::default(args.block); let player_facing = args.player.living_entity.entity.get_horizontal_facing(); @@ -180,17 +180,11 @@ impl PumpkinBlock for PoweredRailBlock { can_place_rail_at(args.block_accessor, args.position).await } - async fn emits_redstone_power( - &self, - _args: crate::block::pumpkin_block::EmitsRedstonePowerArgs<'_>, - ) -> bool { + async fn emits_redstone_power(&self, _args: crate::block::EmitsRedstonePowerArgs<'_>) -> bool { false } - async fn get_weak_redstone_power( - &self, - _args: crate::block::pumpkin_block::GetRedstonePowerArgs<'_>, - ) -> u8 { + async fn get_weak_redstone_power(&self, _args: crate::block::GetRedstonePowerArgs<'_>) -> u8 { 0 } } diff --git a/pumpkin/src/block/blocks/redstone/rails/rail.rs b/pumpkin/src/block/blocks/redstone/rails/rail.rs index 4871b9bb4..020ea1119 100644 --- a/pumpkin/src/block/blocks/redstone/rails/rail.rs +++ b/pumpkin/src/block/blocks/redstone/rails/rail.rs @@ -5,11 +5,11 @@ use pumpkin_macros::pumpkin_block; use pumpkin_world::BlockStateId; use pumpkin_world::world::BlockFlags; -use crate::block::pumpkin_block::CanPlaceAtArgs; -use crate::block::pumpkin_block::OnNeighborUpdateArgs; -use crate::block::pumpkin_block::OnPlaceArgs; -use crate::block::pumpkin_block::PlacedArgs; -use crate::block::pumpkin_block::PumpkinBlock; +use crate::block::BlockBehaviour; +use crate::block::CanPlaceAtArgs; +use crate::block::OnNeighborUpdateArgs; +use crate::block::OnPlaceArgs; +use crate::block::PlacedArgs; use super::StraightRailShapeExt; use super::common::{can_place_rail_at, rail_placement_is_valid, update_flanking_rails_shape}; @@ -19,7 +19,7 @@ use super::{HorizontalFacingRailExt, Rail, RailElevation, RailProperties}; pub struct RailBlock; #[async_trait] -impl PumpkinBlock for RailBlock { +impl BlockBehaviour for RailBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let world = args.world; let block_pos = args.position; diff --git a/pumpkin/src/block/blocks/redstone/redstone_block.rs b/pumpkin/src/block/blocks/redstone/redstone_block.rs index 31aec6e3a..1be7198e1 100644 --- a/pumpkin/src/block/blocks/redstone/redstone_block.rs +++ b/pumpkin/src/block/blocks/redstone/redstone_block.rs @@ -1,13 +1,13 @@ use async_trait::async_trait; use pumpkin_macros::pumpkin_block; -use crate::block::pumpkin_block::{EmitsRedstonePowerArgs, GetRedstonePowerArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, EmitsRedstonePowerArgs, GetRedstonePowerArgs}; #[pumpkin_block("minecraft:redstone_block")] pub struct RedstoneBlock; #[async_trait] -impl PumpkinBlock for RedstoneBlock { +impl BlockBehaviour for RedstoneBlock { async fn get_weak_redstone_power(&self, _args: GetRedstonePowerArgs<'_>) -> u8 { 15 } diff --git a/pumpkin/src/block/blocks/redstone/redstone_lamp.rs b/pumpkin/src/block/blocks/redstone/redstone_lamp.rs index 51a20d851..d4e0186ba 100644 --- a/pumpkin/src/block/blocks/redstone/redstone_lamp.rs +++ b/pumpkin/src/block/blocks/redstone/redstone_lamp.rs @@ -1,10 +1,10 @@ -use crate::block::pumpkin_block::{OnNeighborUpdateArgs, OnPlaceArgs, OnScheduledTickArgs}; +use crate::block::{OnNeighborUpdateArgs, OnPlaceArgs, OnScheduledTickArgs}; use async_trait::async_trait; use pumpkin_data::block_properties::BlockProperties; use pumpkin_macros::pumpkin_block; use pumpkin_world::{BlockStateId, tick::TickPriority, world::BlockFlags}; -use crate::block::pumpkin_block::PumpkinBlock; +use crate::block::BlockBehaviour; use super::block_receives_redstone_power; @@ -14,7 +14,7 @@ type RedstoneLampProperties = pumpkin_data::block_properties::RedstoneOreLikePro pub struct RedstoneLamp; #[async_trait] -impl PumpkinBlock for RedstoneLamp { +impl BlockBehaviour for RedstoneLamp { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut props = RedstoneLampProperties::default(args.block); props.lit = block_receives_redstone_power(args.world, args.position).await; diff --git a/pumpkin/src/block/blocks/redstone/redstone_torch.rs b/pumpkin/src/block/blocks/redstone/redstone_torch.rs index afe8b99d6..09fe66296 100644 --- a/pumpkin/src/block/blocks/redstone/redstone_torch.rs +++ b/pumpkin/src/block/blocks/redstone/redstone_torch.rs @@ -1,15 +1,15 @@ use std::sync::Arc; use crate::block::BlockIsReplacing; -use crate::block::pumpkin_block::CanPlaceAtArgs; -use crate::block::pumpkin_block::EmitsRedstonePowerArgs; -use crate::block::pumpkin_block::GetRedstonePowerArgs; -use crate::block::pumpkin_block::GetStateForNeighborUpdateArgs; -use crate::block::pumpkin_block::OnNeighborUpdateArgs; -use crate::block::pumpkin_block::OnPlaceArgs; -use crate::block::pumpkin_block::OnScheduledTickArgs; -use crate::block::pumpkin_block::OnStateReplacedArgs; -use crate::block::pumpkin_block::PlacedArgs; +use crate::block::CanPlaceAtArgs; +use crate::block::EmitsRedstonePowerArgs; +use crate::block::GetRedstonePowerArgs; +use crate::block::GetStateForNeighborUpdateArgs; +use crate::block::OnNeighborUpdateArgs; +use crate::block::OnPlaceArgs; +use crate::block::OnScheduledTickArgs; +use crate::block::OnStateReplacedArgs; +use crate::block::PlacedArgs; use crate::entity::EntityBase; use async_trait::async_trait; use pumpkin_data::Block; @@ -27,7 +27,7 @@ use pumpkin_world::world::BlockFlags; type RWallTorchProps = pumpkin_data::block_properties::FurnaceLikeProperties; type RTorchProps = pumpkin_data::block_properties::RedstoneOreLikeProperties; -use crate::block::pumpkin_block::{BlockMetadata, PumpkinBlock}; +use crate::block::{BlockBehaviour, BlockMetadata}; use crate::world::World; use super::get_redstone_power; @@ -45,7 +45,7 @@ impl BlockMetadata for RedstoneTorchBlock { } #[async_trait] -impl PumpkinBlock for RedstoneTorchBlock { +impl BlockBehaviour for RedstoneTorchBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let world = args.world; let block = args.block; diff --git a/pumpkin/src/block/blocks/redstone/redstone_wire.rs b/pumpkin/src/block/blocks/redstone/redstone_wire.rs index e68d2978f..d80324278 100644 --- a/pumpkin/src/block/blocks/redstone/redstone_wire.rs +++ b/pumpkin/src/block/blocks/redstone/redstone_wire.rs @@ -12,13 +12,13 @@ use pumpkin_util::math::position::BlockPos; use pumpkin_world::BlockStateId; use pumpkin_world::world::{BlockAccessor, BlockFlags}; -use crate::block::pumpkin_block::{ +use crate::block::registry::BlockActionResult; +use crate::block::{ BrokenArgs, CanPlaceAtArgs, GetRedstonePowerArgs, GetStateForNeighborUpdateArgs, OnNeighborUpdateArgs, OnPlaceArgs, PlacedArgs, PrepareArgs, }; -use crate::block::registry::BlockActionResult; use crate::{ - block::pumpkin_block::{NormalUseArgs, PumpkinBlock}, + block::{BlockBehaviour, NormalUseArgs}, world::World, }; @@ -31,7 +31,7 @@ type RedstoneWireProperties = RedstoneWireLikeProperties; pub struct RedstoneWireBlock; #[async_trait] -impl PumpkinBlock for RedstoneWireBlock { +impl BlockBehaviour for RedstoneWireBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { can_place_at(args.block_accessor, args.position).await } diff --git a/pumpkin/src/block/blocks/redstone/repeater.rs b/pumpkin/src/block/blocks/redstone/repeater.rs index 2ddeb8926..71fc33eef 100644 --- a/pumpkin/src/block/blocks/redstone/repeater.rs +++ b/pumpkin/src/block/blocks/redstone/repeater.rs @@ -12,12 +12,12 @@ use pumpkin_world::{BlockStateId, tick::TickPriority}; use crate::{ block::{ - pumpkin_block::{ - CanPlaceAtArgs, EmitsRedstonePowerArgs, GetRedstonePowerArgs, - GetStateForNeighborUpdateArgs, NormalUseArgs, OnNeighborUpdateArgs, OnPlaceArgs, - OnScheduledTickArgs, OnStateReplacedArgs, PlacedArgs, PlayerPlacedArgs, PumpkinBlock, - }, registry::BlockActionResult, + { + BlockBehaviour, CanPlaceAtArgs, EmitsRedstonePowerArgs, GetRedstonePowerArgs, + GetStateForNeighborUpdateArgs, NormalUseArgs, OnNeighborUpdateArgs, OnPlaceArgs, + OnScheduledTickArgs, OnStateReplacedArgs, PlacedArgs, PlayerPlacedArgs, + }, }, world::World, }; @@ -30,7 +30,7 @@ type RepeaterProperties = pumpkin_data::block_properties::RepeaterLikeProperties pub struct RepeaterBlock; #[async_trait] -impl PumpkinBlock for RepeaterBlock { +impl BlockBehaviour for RepeaterBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let state_id = RedstoneGateBlock::on_place(self, args.player, args.block).await; diff --git a/pumpkin/src/block/blocks/redstone/target_block.rs b/pumpkin/src/block/blocks/redstone/target_block.rs index a46a37108..0a2fe0900 100644 --- a/pumpkin/src/block/blocks/redstone/target_block.rs +++ b/pumpkin/src/block/blocks/redstone/target_block.rs @@ -1,13 +1,13 @@ use async_trait::async_trait; use pumpkin_macros::pumpkin_block; -use crate::block::pumpkin_block::{EmitsRedstonePowerArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, EmitsRedstonePowerArgs}; #[pumpkin_block("minecraft:target")] pub struct TargetBlock; #[async_trait] -impl PumpkinBlock for TargetBlock { +impl BlockBehaviour for TargetBlock { async fn emits_redstone_power(&self, _args: EmitsRedstonePowerArgs<'_>) -> bool { true } diff --git a/pumpkin/src/block/blocks/redstone/tripwire.rs b/pumpkin/src/block/blocks/redstone/tripwire.rs index 2687f8d26..23131c160 100644 --- a/pumpkin/src/block/blocks/redstone/tripwire.rs +++ b/pumpkin/src/block/blocks/redstone/tripwire.rs @@ -11,9 +11,9 @@ use pumpkin_util::math::{boundingbox::BoundingBox, position::BlockPos}; use pumpkin_world::{BlockStateId, tick::TickPriority, world::BlockFlags}; use crate::{ - block::pumpkin_block::{ - BrokenArgs, GetStateForNeighborUpdateArgs, OnEntityCollisionArgs, OnPlaceArgs, - OnScheduledTickArgs, OnStateReplacedArgs, PlacedArgs, PumpkinBlock, + block::{ + BlockBehaviour, BrokenArgs, GetStateForNeighborUpdateArgs, OnEntityCollisionArgs, + OnPlaceArgs, OnScheduledTickArgs, OnStateReplacedArgs, PlacedArgs, }, world::World, }; @@ -27,7 +27,7 @@ type TripwireHookProperties = pumpkin_data::block_properties::TripwireHookLikePr pub struct TripwireBlock; #[async_trait] -impl PumpkinBlock for TripwireBlock { +impl BlockBehaviour for TripwireBlock { async fn on_entity_collision(&self, args: OnEntityCollisionArgs<'_>) { let mut props = TripwireProperties::from_state_id(args.state.id, args.block); if props.powered { diff --git a/pumpkin/src/block/blocks/redstone/tripwire_hook.rs b/pumpkin/src/block/blocks/redstone/tripwire_hook.rs index ec985b0ec..f6a39e552 100644 --- a/pumpkin/src/block/blocks/redstone/tripwire_hook.rs +++ b/pumpkin/src/block/blocks/redstone/tripwire_hook.rs @@ -16,10 +16,10 @@ use pumpkin_world::{ use rand::{Rng, rng}; use crate::{ - block::pumpkin_block::{ - CanPlaceAtArgs, EmitsRedstonePowerArgs, GetRedstonePowerArgs, + block::{ + BlockBehaviour, CanPlaceAtArgs, EmitsRedstonePowerArgs, GetRedstonePowerArgs, GetStateForNeighborUpdateArgs, OnPlaceArgs, OnScheduledTickArgs, OnStateReplacedArgs, - PlayerPlacedArgs, PumpkinBlock, + PlayerPlacedArgs, }, world::World, }; @@ -31,7 +31,7 @@ type TripwireHookProperties = pumpkin_data::block_properties::TripwireHookLikePr pub struct TripwireHookBlock; #[async_trait] -impl PumpkinBlock for TripwireHookBlock { +impl BlockBehaviour for TripwireHookBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut props = TripwireHookProperties::default(args.block); props.powered = false; diff --git a/pumpkin/src/block/blocks/shulker_box.rs b/pumpkin/src/block/blocks/shulker_box.rs index f589384ec..991e82bbf 100644 --- a/pumpkin/src/block/blocks/shulker_box.rs +++ b/pumpkin/src/block/blocks/shulker_box.rs @@ -1,9 +1,9 @@ use std::sync::Arc; -use crate::block::pumpkin_block::{BlockMetadata, OnPlaceArgs, PlacedArgs}; +use crate::block::{BlockMetadata, OnPlaceArgs, PlacedArgs}; use crate::block::{ - pumpkin_block::{NormalUseArgs, PumpkinBlock}, registry::BlockActionResult, + {BlockBehaviour, NormalUseArgs}, }; use async_trait::async_trait; use pumpkin_data::block_properties::BlockProperties; @@ -54,7 +54,7 @@ impl BlockMetadata for ShulkerBoxBlock { type EndRodLikeProperties = pumpkin_data::block_properties::EndRodLikeProperties; #[async_trait] -impl PumpkinBlock for ShulkerBoxBlock { +impl BlockBehaviour for ShulkerBoxBlock { async fn normal_use(&self, args: NormalUseArgs<'_>) -> BlockActionResult { if let Some(block_entity) = args.world.get_block_entity(args.position).await { if let Some(inventory) = block_entity.get_inventory() { diff --git a/pumpkin/src/block/blocks/signs.rs b/pumpkin/src/block/blocks/signs.rs index 32ac1bfb6..50e1c54c7 100644 --- a/pumpkin/src/block/blocks/signs.rs +++ b/pumpkin/src/block/blocks/signs.rs @@ -7,10 +7,10 @@ use pumpkin_data::tag::get_tag_values; use pumpkin_macros::pumpkin_block_from_tag; use pumpkin_world::block::entities::sign::SignBlockEntity; -use crate::block::pumpkin_block::OnPlaceArgs; -use crate::block::pumpkin_block::PlacedArgs; -use crate::block::pumpkin_block::PlayerPlacedArgs; -use crate::block::pumpkin_block::PumpkinBlock; +use crate::block::BlockBehaviour; +use crate::block::OnPlaceArgs; +use crate::block::PlacedArgs; +use crate::block::PlayerPlacedArgs; use crate::entity::EntityBase; type SignProperties = pumpkin_data::block_properties::OakSignLikeProperties; @@ -19,7 +19,7 @@ type SignProperties = pumpkin_data::block_properties::OakSignLikeProperties; pub struct SignBlock; #[async_trait] -impl PumpkinBlock for SignBlock { +impl BlockBehaviour for SignBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> u16 { let mut sign_props = SignProperties::default(args.block); sign_props.waterlogged = args.replacing.water_source(); diff --git a/pumpkin/src/block/blocks/skull_block.rs b/pumpkin/src/block/blocks/skull_block.rs index 755e2892f..950ed0c73 100644 --- a/pumpkin/src/block/blocks/skull_block.rs +++ b/pumpkin/src/block/blocks/skull_block.rs @@ -1,5 +1,5 @@ use crate::block::blocks::redstone::block_receives_redstone_power; -use crate::block::pumpkin_block::{BlockMetadata, OnNeighborUpdateArgs, OnPlaceArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, BlockMetadata, OnNeighborUpdateArgs, OnPlaceArgs}; use crate::entity::EntityBase; use async_trait::async_trait; use pumpkin_data::block_properties::BlockProperties; @@ -29,7 +29,7 @@ impl BlockMetadata for SkullBlock { } #[async_trait] -impl PumpkinBlock for SkullBlock { +impl BlockBehaviour for SkullBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut props = SkeletonSkullLikeProperties::default(args.block); props.rotation = args.player.get_entity().get_rotation_16(); diff --git a/pumpkin/src/block/blocks/slabs.rs b/pumpkin/src/block/blocks/slabs.rs index 8c4740ec2..3dcaeab08 100644 --- a/pumpkin/src/block/blocks/slabs.rs +++ b/pumpkin/src/block/blocks/slabs.rs @@ -7,10 +7,10 @@ use pumpkin_data::tag::get_tag_values; use pumpkin_macros::pumpkin_block_from_tag; use pumpkin_world::BlockStateId; +use crate::block::BlockBehaviour; use crate::block::BlockIsReplacing; -use crate::block::pumpkin_block::CanUpdateAtArgs; -use crate::block::pumpkin_block::OnPlaceArgs; -use crate::block::pumpkin_block::PumpkinBlock; +use crate::block::CanUpdateAtArgs; +use crate::block::OnPlaceArgs; type SlabProperties = pumpkin_data::block_properties::ResinBrickSlabLikeProperties; @@ -18,7 +18,7 @@ type SlabProperties = pumpkin_data::block_properties::ResinBrickSlabLikeProperti pub struct SlabBlock; #[async_trait] -impl PumpkinBlock for SlabBlock { +impl BlockBehaviour for SlabBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { if let BlockIsReplacing::Itself(state_id) = args.replacing { let mut slab_props = SlabProperties::from_state_id(state_id, args.block); diff --git a/pumpkin/src/block/blocks/smoker.rs b/pumpkin/src/block/blocks/smoker.rs index dba884638..3374fd666 100644 --- a/pumpkin/src/block/blocks/smoker.rs +++ b/pumpkin/src/block/blocks/smoker.rs @@ -1,4 +1,4 @@ -use crate::block::pumpkin_block::{OnPlaceArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, OnPlaceArgs}; use async_trait::async_trait; use pumpkin_data::block_properties::{BlockProperties, FurnaceLikeProperties}; use pumpkin_macros::pumpkin_block; @@ -8,7 +8,7 @@ use pumpkin_world::BlockStateId; pub struct SmokerBlock; #[async_trait] -impl PumpkinBlock for SmokerBlock { +impl BlockBehaviour for SmokerBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut props = FurnaceLikeProperties::default(args.block); props.facing = args diff --git a/pumpkin/src/block/blocks/stairs.rs b/pumpkin/src/block/blocks/stairs.rs index 8ae67a0da..734202079 100644 --- a/pumpkin/src/block/blocks/stairs.rs +++ b/pumpkin/src/block/blocks/stairs.rs @@ -12,9 +12,9 @@ use pumpkin_util::math::position::BlockPos; use pumpkin_world::BlockStateId; use pumpkin_world::world::BlockFlags; -use crate::block::pumpkin_block::OnNeighborUpdateArgs; -use crate::block::pumpkin_block::OnPlaceArgs; -use crate::block::pumpkin_block::PumpkinBlock; +use crate::block::BlockBehaviour; +use crate::block::OnNeighborUpdateArgs; +use crate::block::OnPlaceArgs; use crate::world::World; type StairsProperties = pumpkin_data::block_properties::OakStairsLikeProperties; @@ -23,7 +23,7 @@ type StairsProperties = pumpkin_data::block_properties::OakStairsLikeProperties; pub struct StairBlock; #[async_trait] -impl PumpkinBlock for StairBlock { +impl BlockBehaviour for StairBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut stair_props = StairsProperties::default(args.block); stair_props.waterlogged = args.replacing.water_source(); diff --git a/pumpkin/src/block/blocks/sugar_cane.rs b/pumpkin/src/block/blocks/sugar_cane.rs index 4856788ea..745b09349 100644 --- a/pumpkin/src/block/blocks/sugar_cane.rs +++ b/pumpkin/src/block/blocks/sugar_cane.rs @@ -12,8 +12,8 @@ use pumpkin_world::BlockStateId; use pumpkin_world::tick::TickPriority; use pumpkin_world::world::{BlockAccessor, BlockFlags}; -use crate::block::pumpkin_block::{ - CanPlaceAtArgs, GetStateForNeighborUpdateArgs, OnScheduledTickArgs, PumpkinBlock, +use crate::block::{ + BlockBehaviour, CanPlaceAtArgs, GetStateForNeighborUpdateArgs, OnScheduledTickArgs, RandomTickArgs, }; @@ -21,7 +21,7 @@ use crate::block::pumpkin_block::{ pub struct SugarCaneBlock; #[async_trait] -impl PumpkinBlock for SugarCaneBlock { +impl BlockBehaviour for SugarCaneBlock { async fn on_scheduled_tick(&self, args: OnScheduledTickArgs<'_>) { if !can_place_at(args.world.as_ref(), args.position).await { args.world diff --git a/pumpkin/src/block/blocks/tnt.rs b/pumpkin/src/block/blocks/tnt.rs index ffaae40b6..3cb03c3f0 100644 --- a/pumpkin/src/block/blocks/tnt.rs +++ b/pumpkin/src/block/blocks/tnt.rs @@ -1,10 +1,10 @@ use pumpkin_data::item::Item; use std::sync::Arc; -use crate::block::pumpkin_block::{ - ExplodeArgs, OnNeighborUpdateArgs, PlacedArgs, PumpkinBlock, UseWithItemArgs, -}; use crate::block::registry::BlockActionResult; +use crate::block::{ + BlockBehaviour, ExplodeArgs, OnNeighborUpdateArgs, PlacedArgs, UseWithItemArgs, +}; use crate::entity::Entity; use crate::entity::tnt::TNTEntity; use crate::world::World; @@ -52,7 +52,7 @@ const DEFAULT_FUSE: u32 = 80; const DEFAULT_POWER: f32 = 4.0; #[async_trait] -impl PumpkinBlock for TNTBlock { +impl BlockBehaviour for TNTBlock { async fn use_with_item(&self, args: UseWithItemArgs<'_>) -> BlockActionResult { let item = args.item_stack.lock().await.item; if item != &Item::FLINT_AND_STEEL || item == &Item::FIRE_CHARGE { diff --git a/pumpkin/src/block/blocks/torches.rs b/pumpkin/src/block/blocks/torches.rs index 2c83a8695..df2dc2e72 100644 --- a/pumpkin/src/block/blocks/torches.rs +++ b/pumpkin/src/block/blocks/torches.rs @@ -11,8 +11,8 @@ use pumpkin_world::world::BlockAccessor; type WallTorchProps = pumpkin_data::block_properties::WallTorchLikeProperties; // Normal tourches don't have properties -use crate::block::pumpkin_block::{ - BlockMetadata, CanPlaceAtArgs, GetStateForNeighborUpdateArgs, OnPlaceArgs, PumpkinBlock, +use crate::block::{ + BlockBehaviour, BlockMetadata, CanPlaceAtArgs, GetStateForNeighborUpdateArgs, OnPlaceArgs, }; pub struct TorchBlock; @@ -33,7 +33,7 @@ impl BlockMetadata for TorchBlock { } #[async_trait] -impl PumpkinBlock for TorchBlock { +impl BlockBehaviour for TorchBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { if args.direction == BlockDirection::Down { let support_block = args.world.get_block_state(&args.position.down()).await; diff --git a/pumpkin/src/block/blocks/trapdoor.rs b/pumpkin/src/block/blocks/trapdoor.rs index 6b1d4b8cc..1595ba3ef 100644 --- a/pumpkin/src/block/blocks/trapdoor.rs +++ b/pumpkin/src/block/blocks/trapdoor.rs @@ -1,6 +1,6 @@ use crate::block::blocks::redstone::block_receives_redstone_power; -use crate::block::pumpkin_block::{NormalUseArgs, OnNeighborUpdateArgs, OnPlaceArgs, PumpkinBlock}; use crate::block::registry::BlockActionResult; +use crate::block::{BlockBehaviour, NormalUseArgs, OnNeighborUpdateArgs, OnPlaceArgs}; use crate::entity::player::Player; use crate::world::World; use async_trait::async_trait; @@ -70,7 +70,7 @@ fn get_sound(block: &Block, open: bool) -> Sound { pub struct TrapDoorBlock; #[async_trait] -impl PumpkinBlock for TrapDoorBlock { +impl BlockBehaviour for TrapDoorBlock { async fn normal_use(&self, args: NormalUseArgs<'_>) -> BlockActionResult { if !can_open_trapdoor(args.block) { return BlockActionResult::Pass; diff --git a/pumpkin/src/block/blocks/vine.rs b/pumpkin/src/block/blocks/vine.rs index 1a32db80d..a8746ad1e 100644 --- a/pumpkin/src/block/blocks/vine.rs +++ b/pumpkin/src/block/blocks/vine.rs @@ -2,13 +2,13 @@ use async_trait::async_trait; use pumpkin_data::BlockDirection; use pumpkin_macros::pumpkin_block; -use crate::block::pumpkin_block::{CanPlaceAtArgs, PumpkinBlock}; +use crate::block::{BlockBehaviour, CanPlaceAtArgs}; #[pumpkin_block("minecraft:vine")] pub struct VineBlock; #[async_trait] -impl PumpkinBlock for VineBlock { +impl BlockBehaviour for VineBlock { async fn can_place_at(&self, args: CanPlaceAtArgs<'_>) -> bool { // TODO: This is bad and not vanilla, just a "hotfix" for dir in BlockDirection::all() { diff --git a/pumpkin/src/block/blocks/walls.rs b/pumpkin/src/block/blocks/walls.rs index d9cf98c68..c136c6961 100644 --- a/pumpkin/src/block/blocks/walls.rs +++ b/pumpkin/src/block/blocks/walls.rs @@ -1,5 +1,5 @@ -use crate::block::pumpkin_block::GetStateForNeighborUpdateArgs; -use crate::block::pumpkin_block::OnPlaceArgs; +use crate::block::GetStateForNeighborUpdateArgs; +use crate::block::OnPlaceArgs; use async_trait::async_trait; use pumpkin_data::BlockDirection; use pumpkin_data::BlockState; @@ -17,7 +17,7 @@ use pumpkin_macros::pumpkin_block_from_tag; use pumpkin_util::math::position::BlockPos; use pumpkin_world::BlockStateId; -use crate::block::pumpkin_block::PumpkinBlock; +use crate::block::BlockBehaviour; use crate::world::World; type FenceGateProperties = pumpkin_data::block_properties::OakFenceGateLikeProperties; type FenceLikeProperties = pumpkin_data::block_properties::OakFenceLikeProperties; @@ -27,7 +27,7 @@ type WallProperties = pumpkin_data::block_properties::ResinBrickWallLikeProperti pub struct WallBlock; #[async_trait] -impl PumpkinBlock for WallBlock { +impl BlockBehaviour for WallBlock { async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { let mut wall_props = WallProperties::default(args.block); wall_props.waterlogged = args.replacing.water_source(); diff --git a/pumpkin/src/block/fluid/flowing.rs b/pumpkin/src/block/fluid/flowing.rs index 8fe3eb910..996957ec6 100644 --- a/pumpkin/src/block/fluid/flowing.rs +++ b/pumpkin/src/block/fluid/flowing.rs @@ -17,7 +17,14 @@ pub struct SpreadContext { holes: HashMap, } +impl Default for SpreadContext { + fn default() -> Self { + Self::new() + } +} + impl SpreadContext { + #[must_use] pub fn new() -> Self { Self { holes: HashMap::new(), diff --git a/pumpkin/src/block/fluid/lava.rs b/pumpkin/src/block/fluid/lava.rs index 3c6edb056..a4aa48bfd 100644 --- a/pumpkin/src/block/fluid/lava.rs +++ b/pumpkin/src/block/fluid/lava.rs @@ -10,7 +10,7 @@ use pumpkin_macros::pumpkin_block; use pumpkin_util::math::position::BlockPos; use pumpkin_world::{BlockStateId, tick::TickPriority, world::BlockFlags}; -use crate::{block::pumpkin_fluid::PumpkinFluid, entity::EntityBase, world::World}; +use crate::{block::fluid::FluidBehaviour, entity::EntityBase, world::World}; use super::flowing::FlowingFluid; type FlowingFluidProperties = pumpkin_data::fluid::FlowingWaterLikeFluidProperties; @@ -73,7 +73,7 @@ impl FlowingLava { const LAVA_FLOW_SPEED: u8 = 30; #[async_trait] -impl PumpkinFluid for FlowingLava { +impl FluidBehaviour for FlowingLava { async fn placed( &self, world: &Arc, diff --git a/pumpkin/src/block/fluid/mod.rs b/pumpkin/src/block/fluid/mod.rs index 0299342fd..b61a2b95c 100644 --- a/pumpkin/src/block/fluid/mod.rs +++ b/pumpkin/src/block/fluid/mod.rs @@ -1,3 +1,93 @@ pub mod flowing; pub mod lava; pub mod water; + +use std::sync::Arc; + +use crate::entity::{EntityBase, player::Player}; +use async_trait::async_trait; +use pumpkin_data::BlockDirection; +use pumpkin_data::{fluid::Fluid, item::Item}; +use pumpkin_protocol::java::server::play::SUseItemOn; +use pumpkin_util::math::position::BlockPos; +use pumpkin_world::BlockStateId; + +use crate::{server::Server, world::World}; + +use super::{BlockIsReplacing, registry::BlockActionResult}; + +#[async_trait] +pub trait FluidBehaviour: Send + Sync { + async fn normal_use( + &self, + _fluid: &Fluid, + _player: &Player, + _location: BlockPos, + _server: &Server, + _world: &Arc, + ) { + } + async fn use_with_item( + &self, + _fluid: &Fluid, + _player: &Player, + _location: BlockPos, + _item: &Item, + _server: &Server, + _world: &Arc, + ) -> BlockActionResult { + BlockActionResult::Pass + } + + async fn placed( + &self, + _world: &Arc, + _fluid: &Fluid, + _state_id: BlockStateId, + _block_pos: &BlockPos, + _old_state_id: BlockStateId, + _notify: bool, + ) { + } + + #[allow(clippy::too_many_arguments)] + async fn on_place( + &self, + _server: &Server, + _world: &Arc, + fluid: &Fluid, + _face: BlockDirection, + _block_pos: &BlockPos, + _use_item_on: &SUseItemOn, + _replacing: BlockIsReplacing, + ) -> BlockStateId { + fluid.default_state_index + } + + async fn get_state_for_neighbour_update( + &self, + _world: &Arc, + _fluid: &Fluid, + _block_pos: &BlockPos, + _notify: bool, + ) -> BlockStateId { + 0 + } + + async fn on_neighbor_update( + &self, + _world: &Arc, + _fluid: &Fluid, + _block_pos: &BlockPos, + _notify: bool, + ) { + } + + async fn on_entity_collision(&self, _entity: &dyn EntityBase) {} + + async fn on_scheduled_tick(&self, _world: &Arc, _fluid: &Fluid, _block_pos: &BlockPos) {} + + async fn random_tick(&self, _fluid: &Fluid, _world: &Arc, _block_pos: &BlockPos) {} + + async fn create_legacy_block(&self, _world: &Arc, _block_pos: &BlockPos) {} +} diff --git a/pumpkin/src/block/fluid/water.rs b/pumpkin/src/block/fluid/water.rs index 7d66983ff..99dd16272 100644 --- a/pumpkin/src/block/fluid/water.rs +++ b/pumpkin/src/block/fluid/water.rs @@ -6,7 +6,7 @@ use pumpkin_macros::pumpkin_block; use pumpkin_util::math::position::BlockPos; use pumpkin_world::{BlockStateId, tick::TickPriority}; -use crate::{block::pumpkin_fluid::PumpkinFluid, entity::EntityBase, world::World}; +use crate::{block::fluid::FluidBehaviour, entity::EntityBase, world::World}; use super::flowing::FlowingFluid; @@ -16,7 +16,7 @@ pub struct FlowingWater; const WATER_FLOW_SPEED: u8 = 5; #[async_trait] -impl PumpkinFluid for FlowingWater { +impl FluidBehaviour for FlowingWater { async fn placed( &self, world: &Arc, diff --git a/pumpkin/src/block/mod.rs b/pumpkin/src/block/mod.rs index 4b1811ebc..601528d89 100644 --- a/pumpkin/src/block/mod.rs +++ b/pumpkin/src/block/mod.rs @@ -1,71 +1,3 @@ -use blocks::anvil::AnvilBlock; -use blocks::bamboo::BambooBlock; -use blocks::barrel::BarrelBlock; -use blocks::bed::BedBlock; -use blocks::cactus::CactusBlock; -use blocks::carpet::{CarpetBlock, MossCarpetBlock, PaleMossCarpetBlock}; -use blocks::command::CommandBlock; -use blocks::composter::ComposterBlock; -use blocks::dirt_path::DirtPathBlock; -use blocks::doors::DoorBlock; -use blocks::end_portal::EndPortalBlock; -use blocks::end_portal_frame::EndPortalFrameBlock; -use blocks::farmland::FarmLandBlock; -use blocks::fence_gates::FenceGateBlock; -use blocks::fences::FenceBlock; -use blocks::fire::fire::FireBlock; -use blocks::fire::soul_fire::SoulFireBlock; -use blocks::glass_panes::GlassPaneBlock; -use blocks::grindstone::GrindstoneBlock; -use blocks::iron_bars::IronBarsBlock; -use blocks::logs::LogBlock; -use blocks::nether_portal::NetherPortalBlock; -use blocks::note::NoteBlock; -use blocks::piston::piston::PistonBlock; -use blocks::piston::piston_extension::PistonExtensionBlock; -use blocks::piston::piston_head::PistonHeadBlock; -use blocks::plant::bush::BushBlock; -use blocks::plant::dry_vegetation::DryVegetationBlock; -use blocks::plant::flower::FlowerBlock; -use blocks::plant::flowerbed::FlowerbedBlock; -use blocks::plant::leaf_litter::LeafLitterBlock; -use blocks::plant::lily_pad::LilyPadBlock; -use blocks::plant::mushroom_plant::MushroomPlantBlock; -use blocks::plant::sapling::SaplingBlock; -use blocks::plant::short_plant::ShortPlantBlock; -use blocks::plant::tall_plant::TallPlantBlock; -use blocks::pumpkin::PumpkinBlock; -use blocks::redstone::buttons::ButtonBlock; -use blocks::redstone::comparator::ComparatorBlock; -use blocks::redstone::copper_bulb::CopperBulbBlock; -use blocks::redstone::observer::ObserverBlock; -use blocks::redstone::pressure_plate::plate::PressurePlateBlock; -use blocks::redstone::pressure_plate::weighted::WeightedPressurePlateBlock; -use blocks::redstone::rails::activator_rail::ActivatorRailBlock; -use blocks::redstone::rails::detector_rail::DetectorRailBlock; -use blocks::redstone::rails::powered_rail::PoweredRailBlock; -use blocks::redstone::rails::rail::RailBlock; -use blocks::redstone::redstone_block::RedstoneBlock; -use blocks::redstone::redstone_lamp::RedstoneLamp; -use blocks::redstone::redstone_torch::RedstoneTorchBlock; -use blocks::redstone::redstone_wire::RedstoneWireBlock; -use blocks::redstone::repeater::RepeaterBlock; -use blocks::redstone::target_block::TargetBlock; -use blocks::redstone::tripwire::TripwireBlock; -use blocks::redstone::tripwire_hook::TripwireHookBlock; -use blocks::signs::SignBlock; -use blocks::slabs::SlabBlock; -use blocks::stairs::StairBlock; -use blocks::sugar_cane::SugarCaneBlock; -use blocks::torches::TorchBlock; -use blocks::trapdoor::TrapDoorBlock; -use blocks::vine::VineBlock; -use blocks::walls::WallBlock; -use blocks::{ - chests::ChestBlock, furnace::FurnaceBlock, redstone::lever::LeverBlock, tnt::TNTBlock, -}; -use fluid::lava::FlowingLava; -use fluid::water::FlowingWater; use pumpkin_data::block_properties::Integer0To15; use pumpkin_data::{Block, BlockState}; @@ -73,165 +5,292 @@ use pumpkin_util::math::position::BlockPos; use pumpkin_util::random::{RandomGenerator, get_seed, xoroshiro128::Xoroshiro}; use pumpkin_world::BlockStateId; -use crate::block::blocks::banners::BannerBlock; -use crate::block::blocks::cake::CakeBlock; -use crate::block::blocks::campfire::CampfireBlock; -use crate::block::blocks::candle_cakes::CandleCakeBlock; -use crate::block::blocks::candles::CandleBlock; -use crate::block::blocks::chiseled_bookshelf::ChiseledBookshelfBlock; -use crate::block::blocks::flower_pots::FlowerPotBlock; -use crate::block::blocks::glazed_terracotta::GlazedTerracottaBlock; -use crate::block::blocks::plant::crop::beetroot::BeetrootBlock; -use crate::block::blocks::plant::crop::carrot::CarrotBlock; -use crate::block::blocks::plant::crop::potatoes::PotatoBlock; -use crate::block::blocks::plant::crop::torch_flower::TorchFlowerBlock; -use crate::block::blocks::plant::crop::wheat::WheatBlock; -use crate::block::blocks::plant::nether_wart::NetherWartBlock; -use crate::block::blocks::plant::roots::RootsBlock; -use crate::block::blocks::plant::sea_grass::SeaGrassBlock; -use crate::block::blocks::plant::sea_pickles::SeaPickleBlock; -use crate::block::blocks::redstone::dispenser::DispenserBlock; -use crate::block::blocks::redstone::dropper::DropperBlock; - -use crate::block::blocks::blast_furnace::BlastFurnaceBlock; -use crate::block::blocks::ender_chest::EnderChestBlock; -use crate::block::blocks::hopper::HopperBlock; -use crate::block::blocks::ladder::LadderBlock; -use crate::block::blocks::lectern::LecternBlock; -use crate::block::blocks::shulker_box::ShulkerBoxBlock; -use crate::block::blocks::skull_block::SkullBlock; -use crate::block::blocks::smoker::SmokerBlock; -use crate::block::registry::BlockRegistry; +use crate::entity::experience_orb::ExperienceOrbEntity; +use crate::entity::player::Player; use crate::world::World; use crate::world::loot::{LootContextParameters, LootTableExt}; -use crate::{block::blocks::crafting_table::CraftingTableBlock, entity::player::Player}; -use crate::{block::blocks::jukebox::JukeboxBlock, entity::experience_orb::ExperienceOrbEntity}; use std::sync::Arc; pub mod blocks; -mod fluid; -pub mod pumpkin_block; -pub mod pumpkin_fluid; +pub mod fluid; pub mod registry; -#[must_use] -#[allow(clippy::too_many_lines)] -pub fn default_registry() -> Arc { - let mut manager = BlockRegistry::default(); +use crate::block::registry::BlockActionResult; +use crate::entity::EntityBase; +use crate::server::Server; +use async_trait::async_trait; +use pumpkin_data::BlockDirection; +use pumpkin_protocol::java::server::play::SUseItemOn; +use pumpkin_util::math::vector3::Vector3; +use pumpkin_world::item::ItemStack; +use pumpkin_world::world::{BlockAccessor, BlockFlags}; +use tokio::sync::Mutex; - // Blocks - manager.register(AnvilBlock); - manager.register(BedBlock); - manager.register(SaplingBlock); - manager.register(CactusBlock); - manager.register(CarpetBlock); - manager.register(CampfireBlock); - manager.register(MossCarpetBlock); - manager.register(PaleMossCarpetBlock); - manager.register(ChestBlock); - manager.register(EnderChestBlock); - manager.register(CraftingTableBlock); - manager.register(DirtPathBlock); - manager.register(DoorBlock); - manager.register(FarmLandBlock); - manager.register(FenceGateBlock); - manager.register(FenceBlock); - manager.register(FlowerPotBlock); - manager.register(FurnaceBlock); - manager.register(BlastFurnaceBlock); - manager.register(SmokerBlock); - manager.register(GlassPaneBlock); - manager.register(GlazedTerracottaBlock); - manager.register(GrindstoneBlock); - manager.register(IronBarsBlock); - manager.register(JukeboxBlock); - manager.register(LogBlock); - manager.register(BambooBlock); - manager.register(BannerBlock); - manager.register(SignBlock); - manager.register(SlabBlock); - manager.register(StairBlock); - manager.register(ShortPlantBlock); - manager.register(DryVegetationBlock); - manager.register(LilyPadBlock); - manager.register(SugarCaneBlock); - manager.register(VineBlock); - manager.register(TNTBlock); - manager.register(BushBlock); - manager.register(FlowerBlock); - manager.register(PotatoBlock); - manager.register(BeetrootBlock); - manager.register(TorchFlowerBlock); - manager.register(CarrotBlock); - manager.register(SeaGrassBlock); - manager.register(NetherWartBlock); - manager.register(WheatBlock); - manager.register(TorchBlock); - manager.register(TrapDoorBlock); - manager.register(MushroomPlantBlock); - manager.register(FlowerbedBlock); - manager.register(LeafLitterBlock); - manager.register(WallBlock); - manager.register(RootsBlock); - manager.register(NetherPortalBlock); - manager.register(TallPlantBlock); - manager.register(NoteBlock); - manager.register(PumpkinBlock); - manager.register(CommandBlock); - manager.register(ComposterBlock); - manager.register(PressurePlateBlock); - manager.register(WeightedPressurePlateBlock); - manager.register(EndPortalBlock); - manager.register(EndPortalFrameBlock); - manager.register(CandleBlock); - manager.register(SeaPickleBlock); - manager.register(CakeBlock); - manager.register(CandleCakeBlock); - manager.register(SkullBlock); - manager.register(ChiseledBookshelfBlock); - manager.register(LecternBlock); +pub trait BlockMetadata { + fn namespace(&self) -> &'static str; + fn ids(&self) -> &'static [&'static str]; + fn names(&self) -> Vec { + self.ids() + .iter() + .map(|f| format!("{}:{}", self.namespace(), f)) + .collect() + } +} - // Fire - manager.register(SoulFireBlock); - manager.register(FireBlock); +#[async_trait] +pub trait BlockBehaviour: Send + Sync { + async fn normal_use(&self, _args: NormalUseArgs<'_>) -> BlockActionResult { + BlockActionResult::Pass + } - // Redstone - manager.register(ButtonBlock); - manager.register(LeverBlock); - manager.register(ObserverBlock); - manager.register(TripwireBlock); - manager.register(TripwireHookBlock); + async fn use_with_item(&self, _args: UseWithItemArgs<'_>) -> BlockActionResult { + BlockActionResult::PassToDefaultBlockAction + } - // Piston - manager.register(PistonBlock); - manager.register(PistonExtensionBlock); - manager.register(PistonHeadBlock); + async fn on_entity_collision(&self, _args: OnEntityCollisionArgs<'_>) {} - manager.register(RedstoneBlock); - manager.register(RedstoneLamp); - manager.register(CopperBulbBlock); - manager.register(RedstoneTorchBlock); - manager.register(RedstoneWireBlock); - manager.register(RepeaterBlock); - manager.register(ComparatorBlock); - manager.register(TargetBlock); - manager.register(BarrelBlock); - manager.register(HopperBlock); - manager.register(ShulkerBoxBlock); - manager.register(DropperBlock); - manager.register(DispenserBlock); - manager.register(LadderBlock); + fn should_drop_items_on_explosion(&self) -> bool { + true + } - // Rails - manager.register(RailBlock); - manager.register(ActivatorRailBlock); - manager.register(DetectorRailBlock); - manager.register(PoweredRailBlock); + async fn explode(&self, _args: ExplodeArgs<'_>) {} - // Fluids - manager.register_fluid(FlowingWater); - manager.register_fluid(FlowingLava); - Arc::new(manager) + /// Handles the block event, which is an event specific to a block with an integer ID and data. + /// + /// returns whether the event was handled successfully + async fn on_synced_block_event(&self, _args: OnSyncedBlockEventArgs<'_>) -> bool { + false + } + + /// getPlacementState in source code + async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { + args.block.default_state.id + } + + async fn random_tick(&self, _args: RandomTickArgs<'_>) {} + + async fn can_place_at(&self, _args: CanPlaceAtArgs<'_>) -> bool { + true + } + + async fn can_update_at(&self, _args: CanUpdateAtArgs<'_>) -> bool { + false + } + + /// onBlockAdded in source code + async fn placed(&self, _args: PlacedArgs<'_>) {} + + async fn player_placed(&self, _args: PlayerPlacedArgs<'_>) {} + + async fn broken(&self, _args: BrokenArgs<'_>) {} + + async fn on_neighbor_update(&self, _args: OnNeighborUpdateArgs<'_>) {} + + /// Called if a block state is replaced or it replaces another state + async fn prepare(&self, _args: PrepareArgs<'_>) {} + + async fn get_state_for_neighbor_update( + &self, + args: GetStateForNeighborUpdateArgs<'_>, + ) -> BlockStateId { + args.state_id + } + + async fn on_scheduled_tick(&self, _args: OnScheduledTickArgs<'_>) {} + + async fn on_state_replaced(&self, _args: OnStateReplacedArgs<'_>) {} + + /// Sides where redstone connects to + async fn emits_redstone_power(&self, _args: EmitsRedstonePowerArgs<'_>) -> bool { + false + } + + /// Weak redstone power, aka. block that should be powered needs to be directly next to the source block + async fn get_weak_redstone_power(&self, _args: GetRedstonePowerArgs<'_>) -> u8 { + 0 + } + + /// Strong redstone power. this can power a block that then gives power + async fn get_strong_redstone_power(&self, _args: GetRedstonePowerArgs<'_>) -> u8 { + 0 + } + + async fn get_comparator_output(&self, _args: GetComparatorOutputArgs<'_>) -> Option { + None + } +} + +pub struct NormalUseArgs<'a> { + pub server: &'a Server, + pub world: &'a Arc, + pub block: &'a Block, + pub position: &'a BlockPos, + pub player: &'a Player, + pub hit: &'a BlockHitResult<'a>, +} + +pub struct UseWithItemArgs<'a> { + pub server: &'a Server, + pub world: &'a Arc, + pub block: &'a Block, + pub position: &'a BlockPos, + pub player: &'a Player, + pub hit: &'a BlockHitResult<'a>, + pub item_stack: &'a Arc>, +} + +pub struct BlockHitResult<'a> { + pub face: &'a BlockDirection, + pub cursor_pos: &'a Vector3, +} + +pub struct OnEntityCollisionArgs<'a> { + pub server: &'a Server, + pub world: &'a Arc, + pub block: &'a Block, + pub state: &'a BlockState, + pub position: &'a BlockPos, + pub entity: &'a dyn EntityBase, +} + +pub struct ExplodeArgs<'a> { + pub world: &'a Arc, + pub block: &'a Block, + pub position: &'a BlockPos, +} + +pub struct OnSyncedBlockEventArgs<'a> { + pub world: &'a Arc, + pub block: &'a Block, + pub position: &'a BlockPos, + pub r#type: u8, + pub data: u8, +} + +pub struct OnPlaceArgs<'a> { + pub server: &'a Server, + pub world: &'a World, + pub block: &'a Block, + pub position: &'a BlockPos, + pub direction: BlockDirection, + pub player: &'a Player, + pub replacing: BlockIsReplacing, + pub use_item_on: &'a SUseItemOn, +} + +pub struct RandomTickArgs<'a> { + pub world: &'a Arc, + pub block: &'a Block, + pub position: &'a BlockPos, +} + +pub struct CanPlaceAtArgs<'a> { + pub server: Option<&'a Server>, + pub world: Option<&'a World>, + pub block_accessor: &'a dyn BlockAccessor, + pub block: &'a Block, + pub position: &'a BlockPos, + pub direction: BlockDirection, + pub player: Option<&'a Player>, + pub use_item_on: Option<&'a SUseItemOn>, +} + +pub struct CanUpdateAtArgs<'a> { + pub world: &'a World, + pub block: &'a Block, + pub state_id: BlockStateId, + pub position: &'a BlockPos, + pub direction: BlockDirection, + pub player: &'a Player, + pub use_item_on: &'a SUseItemOn, +} + +pub struct PlacedArgs<'a> { + pub world: &'a Arc, + pub block: &'a Block, + pub state_id: BlockStateId, + pub old_state_id: BlockStateId, + pub position: &'a BlockPos, + pub notify: bool, +} + +pub struct PlayerPlacedArgs<'a> { + pub world: &'a Arc, + pub block: &'a Block, + pub state_id: BlockStateId, + pub position: &'a BlockPos, + pub direction: BlockDirection, + pub player: &'a Player, +} + +pub struct BrokenArgs<'a> { + pub block: &'a Block, + pub player: &'a Arc, + pub position: &'a BlockPos, + pub server: &'a Server, + pub world: &'a Arc, + pub state: &'a BlockState, +} + +pub struct OnNeighborUpdateArgs<'a> { + pub world: &'a Arc, + pub block: &'a Block, + pub position: &'a BlockPos, + pub source_block: &'a Block, + pub notify: bool, +} + +pub struct PrepareArgs<'a> { + pub world: &'a Arc, + pub block: &'a Block, + pub state_id: BlockStateId, + pub position: &'a BlockPos, + pub flags: BlockFlags, +} + +pub struct GetStateForNeighborUpdateArgs<'a> { + pub world: &'a World, + pub block: &'a Block, + pub state_id: BlockStateId, + pub position: &'a BlockPos, + pub direction: BlockDirection, + pub neighbor_position: &'a BlockPos, + pub neighbor_state_id: BlockStateId, +} + +pub struct OnScheduledTickArgs<'a> { + pub world: &'a Arc, + pub block: &'a Block, + pub position: &'a BlockPos, +} + +pub struct OnStateReplacedArgs<'a> { + pub world: &'a Arc, + pub block: &'a Block, + pub old_state_id: BlockStateId, + pub position: &'a BlockPos, + pub moved: bool, +} + +pub struct EmitsRedstonePowerArgs<'a> { + pub block: &'a Block, + pub state: &'a BlockState, + pub direction: BlockDirection, +} + +pub struct GetRedstonePowerArgs<'a> { + pub world: &'a World, + pub block: &'a Block, + pub state: &'a BlockState, + pub position: &'a BlockPos, + pub direction: BlockDirection, +} + +pub struct GetComparatorOutputArgs<'a> { + pub world: &'a World, + pub block: &'a Block, + pub state: &'a BlockState, + pub position: &'a BlockPos, } #[derive(Clone)] diff --git a/pumpkin/src/block/pumpkin_block.rs b/pumpkin/src/block/pumpkin_block.rs deleted file mode 100644 index b602f08b3..000000000 --- a/pumpkin/src/block/pumpkin_block.rs +++ /dev/null @@ -1,284 +0,0 @@ -use crate::block::registry::BlockActionResult; -use crate::entity::EntityBase; -use crate::entity::player::Player; -use crate::server::Server; -use crate::world::World; -use async_trait::async_trait; -use pumpkin_data::{Block, BlockDirection, BlockState}; -use pumpkin_protocol::java::server::play::SUseItemOn; -use pumpkin_util::math::position::BlockPos; -use pumpkin_util::math::vector3::Vector3; -use pumpkin_world::BlockStateId; -use pumpkin_world::item::ItemStack; -use pumpkin_world::world::{BlockAccessor, BlockFlags}; -use std::sync::Arc; -use tokio::sync::Mutex; - -use super::BlockIsReplacing; - -pub trait BlockMetadata { - fn namespace(&self) -> &'static str; - fn ids(&self) -> &'static [&'static str]; - fn names(&self) -> Vec { - self.ids() - .iter() - .map(|f| format!("{}:{}", self.namespace(), f)) - .collect() - } -} - -#[async_trait] -pub trait PumpkinBlock: Send + Sync { - async fn normal_use(&self, _args: NormalUseArgs<'_>) -> BlockActionResult { - BlockActionResult::Pass - } - - async fn use_with_item(&self, _args: UseWithItemArgs<'_>) -> BlockActionResult { - BlockActionResult::PassToDefaultBlockAction - } - - async fn on_entity_collision(&self, _args: OnEntityCollisionArgs<'_>) {} - - fn should_drop_items_on_explosion(&self) -> bool { - true - } - - async fn explode(&self, _args: ExplodeArgs<'_>) {} - - /// Handles the block event, which is an event specific to a block with an integer ID and data. - /// - /// returns whether the event was handled successfully - async fn on_synced_block_event(&self, _args: OnSyncedBlockEventArgs<'_>) -> bool { - false - } - - /// getPlacementState in source code - async fn on_place(&self, args: OnPlaceArgs<'_>) -> BlockStateId { - args.block.default_state.id - } - - async fn random_tick(&self, _args: RandomTickArgs<'_>) {} - - async fn can_place_at(&self, _args: CanPlaceAtArgs<'_>) -> bool { - true - } - - async fn can_update_at(&self, _args: CanUpdateAtArgs<'_>) -> bool { - false - } - - /// onBlockAdded in source code - async fn placed(&self, _args: PlacedArgs<'_>) {} - - async fn player_placed(&self, _args: PlayerPlacedArgs<'_>) {} - - async fn broken(&self, _args: BrokenArgs<'_>) {} - - async fn on_neighbor_update(&self, _args: OnNeighborUpdateArgs<'_>) {} - - /// Called if a block state is replaced or it replaces another state - async fn prepare(&self, _args: PrepareArgs<'_>) {} - - async fn get_state_for_neighbor_update( - &self, - args: GetStateForNeighborUpdateArgs<'_>, - ) -> BlockStateId { - args.state_id - } - - async fn on_scheduled_tick(&self, _args: OnScheduledTickArgs<'_>) {} - - async fn on_state_replaced(&self, _args: OnStateReplacedArgs<'_>) {} - - /// Sides where redstone connects to - async fn emits_redstone_power(&self, _args: EmitsRedstonePowerArgs<'_>) -> bool { - false - } - - /// Weak redstone power, aka. block that should be powered needs to be directly next to the source block - async fn get_weak_redstone_power(&self, _args: GetRedstonePowerArgs<'_>) -> u8 { - 0 - } - - /// Strong redstone power. this can power a block that then gives power - async fn get_strong_redstone_power(&self, _args: GetRedstonePowerArgs<'_>) -> u8 { - 0 - } - - async fn get_comparator_output(&self, _args: GetComparatorOutputArgs<'_>) -> Option { - None - } -} - -pub struct NormalUseArgs<'a> { - pub server: &'a Server, - pub world: &'a Arc, - pub block: &'a Block, - pub position: &'a BlockPos, - pub player: &'a Player, - pub hit: &'a BlockHitResult<'a>, -} - -pub struct UseWithItemArgs<'a> { - pub server: &'a Server, - pub world: &'a Arc, - pub block: &'a Block, - pub position: &'a BlockPos, - pub player: &'a Player, - pub hit: &'a BlockHitResult<'a>, - pub item_stack: &'a Arc>, -} - -pub struct BlockHitResult<'a> { - pub face: &'a BlockDirection, - pub cursor_pos: &'a Vector3, -} - -pub struct OnEntityCollisionArgs<'a> { - pub server: &'a Server, - pub world: &'a Arc, - pub block: &'a Block, - pub state: &'a BlockState, - pub position: &'a BlockPos, - pub entity: &'a dyn EntityBase, -} - -pub struct ExplodeArgs<'a> { - pub world: &'a Arc, - pub block: &'a Block, - pub position: &'a BlockPos, -} - -pub struct OnSyncedBlockEventArgs<'a> { - pub world: &'a Arc, - pub block: &'a Block, - pub position: &'a BlockPos, - pub r#type: u8, - pub data: u8, -} - -pub struct OnPlaceArgs<'a> { - pub server: &'a Server, - pub world: &'a World, - pub block: &'a Block, - pub position: &'a BlockPos, - pub direction: BlockDirection, - pub player: &'a Player, - pub replacing: BlockIsReplacing, - pub use_item_on: &'a SUseItemOn, -} - -pub struct RandomTickArgs<'a> { - pub world: &'a Arc, - pub block: &'a Block, - pub position: &'a BlockPos, -} - -pub struct CanPlaceAtArgs<'a> { - pub server: Option<&'a Server>, - pub world: Option<&'a World>, - pub block_accessor: &'a dyn BlockAccessor, - pub block: &'a Block, - pub position: &'a BlockPos, - pub direction: BlockDirection, - pub player: Option<&'a Player>, - pub use_item_on: Option<&'a SUseItemOn>, -} - -pub struct CanUpdateAtArgs<'a> { - pub world: &'a World, - pub block: &'a Block, - pub state_id: BlockStateId, - pub position: &'a BlockPos, - pub direction: BlockDirection, - pub player: &'a Player, - pub use_item_on: &'a SUseItemOn, -} - -pub struct PlacedArgs<'a> { - pub world: &'a Arc, - pub block: &'a Block, - pub state_id: BlockStateId, - pub old_state_id: BlockStateId, - pub position: &'a BlockPos, - pub notify: bool, -} - -pub struct PlayerPlacedArgs<'a> { - pub world: &'a Arc, - pub block: &'a Block, - pub state_id: BlockStateId, - pub position: &'a BlockPos, - pub direction: BlockDirection, - pub player: &'a Player, -} - -pub struct BrokenArgs<'a> { - pub block: &'a Block, - pub player: &'a Arc, - pub position: &'a BlockPos, - pub server: &'a Server, - pub world: &'a Arc, - pub state: &'a BlockState, -} - -pub struct OnNeighborUpdateArgs<'a> { - pub world: &'a Arc, - pub block: &'a Block, - pub position: &'a BlockPos, - pub source_block: &'a Block, - pub notify: bool, -} - -pub struct PrepareArgs<'a> { - pub world: &'a Arc, - pub block: &'a Block, - pub state_id: BlockStateId, - pub position: &'a BlockPos, - pub flags: BlockFlags, -} - -pub struct GetStateForNeighborUpdateArgs<'a> { - pub world: &'a World, - pub block: &'a Block, - pub state_id: BlockStateId, - pub position: &'a BlockPos, - pub direction: BlockDirection, - pub neighbor_position: &'a BlockPos, - pub neighbor_state_id: BlockStateId, -} - -pub struct OnScheduledTickArgs<'a> { - pub world: &'a Arc, - pub block: &'a Block, - pub position: &'a BlockPos, -} - -pub struct OnStateReplacedArgs<'a> { - pub world: &'a Arc, - pub block: &'a Block, - pub old_state_id: BlockStateId, - pub position: &'a BlockPos, - pub moved: bool, -} - -pub struct EmitsRedstonePowerArgs<'a> { - pub block: &'a Block, - pub state: &'a BlockState, - pub direction: BlockDirection, -} - -pub struct GetRedstonePowerArgs<'a> { - pub world: &'a World, - pub block: &'a Block, - pub state: &'a BlockState, - pub position: &'a BlockPos, - pub direction: BlockDirection, -} - -pub struct GetComparatorOutputArgs<'a> { - pub world: &'a World, - pub block: &'a Block, - pub state: &'a BlockState, - pub position: &'a BlockPos, -} diff --git a/pumpkin/src/block/pumpkin_fluid.rs b/pumpkin/src/block/pumpkin_fluid.rs deleted file mode 100644 index 92e45e060..000000000 --- a/pumpkin/src/block/pumpkin_fluid.rs +++ /dev/null @@ -1,89 +0,0 @@ -use std::sync::Arc; - -use crate::entity::{EntityBase, player::Player}; -use async_trait::async_trait; -use pumpkin_data::BlockDirection; -use pumpkin_data::{fluid::Fluid, item::Item}; -use pumpkin_protocol::java::server::play::SUseItemOn; -use pumpkin_util::math::position::BlockPos; -use pumpkin_world::BlockStateId; - -use crate::{server::Server, world::World}; - -use super::{BlockIsReplacing, registry::BlockActionResult}; - -#[async_trait] -pub trait PumpkinFluid: Send + Sync { - async fn normal_use( - &self, - _fluid: &Fluid, - _player: &Player, - _location: BlockPos, - _server: &Server, - _world: &Arc, - ) { - } - async fn use_with_item( - &self, - _fluid: &Fluid, - _player: &Player, - _location: BlockPos, - _item: &Item, - _server: &Server, - _world: &Arc, - ) -> BlockActionResult { - BlockActionResult::Pass - } - - async fn placed( - &self, - _world: &Arc, - _fluid: &Fluid, - _state_id: BlockStateId, - _block_pos: &BlockPos, - _old_state_id: BlockStateId, - _notify: bool, - ) { - } - - #[allow(clippy::too_many_arguments)] - async fn on_place( - &self, - _server: &Server, - _world: &Arc, - fluid: &Fluid, - _face: BlockDirection, - _block_pos: &BlockPos, - _use_item_on: &SUseItemOn, - _replacing: BlockIsReplacing, - ) -> BlockStateId { - fluid.default_state_index - } - - async fn get_state_for_neighbour_update( - &self, - _world: &Arc, - _fluid: &Fluid, - _block_pos: &BlockPos, - _notify: bool, - ) -> BlockStateId { - 0 - } - - async fn on_neighbor_update( - &self, - _world: &Arc, - _fluid: &Fluid, - _block_pos: &BlockPos, - _notify: bool, - ) { - } - - async fn on_entity_collision(&self, _entity: &dyn EntityBase) {} - - async fn on_scheduled_tick(&self, _world: &Arc, _fluid: &Fluid, _block_pos: &BlockPos) {} - - async fn random_tick(&self, _fluid: &Fluid, _world: &Arc, _block_pos: &BlockPos) {} - - async fn create_legacy_block(&self, _world: &Arc, _block_pos: &BlockPos) {} -} diff --git a/pumpkin/src/block/registry.rs b/pumpkin/src/block/registry.rs index c50070172..9b25b3699 100644 --- a/pumpkin/src/block/registry.rs +++ b/pumpkin/src/block/registry.rs @@ -1,6 +1,73 @@ -use crate::block::pumpkin_block::{ - BlockHitResult, BlockMetadata, OnEntityCollisionArgs, PumpkinBlock, -}; +use crate::block::blocks::anvil::AnvilBlock; +use crate::block::blocks::bamboo::BambooBlock; +use crate::block::blocks::barrel::BarrelBlock; +use crate::block::blocks::bed::BedBlock; +use crate::block::blocks::cactus::CactusBlock; +use crate::block::blocks::carpet::{CarpetBlock, MossCarpetBlock, PaleMossCarpetBlock}; +use crate::block::blocks::chests::ChestBlock; +use crate::block::blocks::command::CommandBlock; +use crate::block::blocks::composter::ComposterBlock; +use crate::block::blocks::dirt_path::DirtPathBlock; +use crate::block::blocks::doors::DoorBlock; +use crate::block::blocks::end_portal::EndPortalBlock; +use crate::block::blocks::end_portal_frame::EndPortalFrameBlock; +use crate::block::blocks::farmland::FarmLandBlock; +use crate::block::blocks::fence_gates::FenceGateBlock; +use crate::block::blocks::fences::FenceBlock; +use crate::block::blocks::fire::fire::FireBlock; +use crate::block::blocks::fire::soul_fire::SoulFireBlock; +use crate::block::blocks::furnace::FurnaceBlock; +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::nether_portal::NetherPortalBlock; +use crate::block::blocks::note::NoteBlock; +use crate::block::blocks::piston::piston::PistonBlock; +use crate::block::blocks::piston::piston_extension::PistonExtensionBlock; +use crate::block::blocks::piston::piston_head::PistonHeadBlock; +use crate::block::blocks::plant::bush::BushBlock; +use crate::block::blocks::plant::dry_vegetation::DryVegetationBlock; +use crate::block::blocks::plant::flower::FlowerBlock; +use crate::block::blocks::plant::flowerbed::FlowerbedBlock; +use crate::block::blocks::plant::leaf_litter::LeafLitterBlock; +use crate::block::blocks::plant::lily_pad::LilyPadBlock; +use crate::block::blocks::plant::mushroom_plant::MushroomPlantBlock; +use crate::block::blocks::plant::sapling::SaplingBlock; +use crate::block::blocks::plant::short_plant::ShortPlantBlock; +use crate::block::blocks::plant::tall_plant::TallPlantBlock; +use crate::block::blocks::pumpkin::PumpkinBlock; +use crate::block::blocks::redstone::buttons::ButtonBlock; +use crate::block::blocks::redstone::comparator::ComparatorBlock; +use crate::block::blocks::redstone::copper_bulb::CopperBulbBlock; +use crate::block::blocks::redstone::lever::LeverBlock; +use crate::block::blocks::redstone::observer::ObserverBlock; +use crate::block::blocks::redstone::pressure_plate::plate::PressurePlateBlock; +use crate::block::blocks::redstone::pressure_plate::weighted::WeightedPressurePlateBlock; +use crate::block::blocks::redstone::rails::activator_rail::ActivatorRailBlock; +use crate::block::blocks::redstone::rails::detector_rail::DetectorRailBlock; +use crate::block::blocks::redstone::rails::powered_rail::PoweredRailBlock; +use crate::block::blocks::redstone::rails::rail::RailBlock; +use crate::block::blocks::redstone::redstone_block::RedstoneBlock; +use crate::block::blocks::redstone::redstone_lamp::RedstoneLamp; +use crate::block::blocks::redstone::redstone_torch::RedstoneTorchBlock; +use crate::block::blocks::redstone::redstone_wire::RedstoneWireBlock; +use crate::block::blocks::redstone::repeater::RepeaterBlock; +use crate::block::blocks::redstone::target_block::TargetBlock; +use crate::block::blocks::redstone::tripwire::TripwireBlock; +use crate::block::blocks::redstone::tripwire_hook::TripwireHookBlock; +use crate::block::blocks::signs::SignBlock; +use crate::block::blocks::slabs::SlabBlock; +use crate::block::blocks::stairs::StairBlock; +use crate::block::blocks::sugar_cane::SugarCaneBlock; +use crate::block::blocks::tnt::TNTBlock; +use crate::block::blocks::torches::TorchBlock; +use crate::block::blocks::trapdoor::TrapDoorBlock; +use crate::block::blocks::vine::VineBlock; +use crate::block::blocks::walls::WallBlock; +use crate::block::fluid::lava::FlowingLava; +use crate::block::fluid::water::FlowingWater; +use crate::block::{BlockBehaviour, BlockHitResult, BlockMetadata, OnEntityCollisionArgs}; use crate::entity::EntityBase; use crate::entity::player::Player; use crate::server::Server; @@ -19,14 +86,164 @@ use std::collections::HashMap; use std::sync::Arc; use tokio::sync::Mutex; +use crate::block::blocks::banners::BannerBlock; +use crate::block::blocks::cake::CakeBlock; +use crate::block::blocks::campfire::CampfireBlock; +use crate::block::blocks::candle_cakes::CandleCakeBlock; +use crate::block::blocks::candles::CandleBlock; +use crate::block::blocks::chiseled_bookshelf::ChiseledBookshelfBlock; +use crate::block::blocks::flower_pots::FlowerPotBlock; +use crate::block::blocks::glazed_terracotta::GlazedTerracottaBlock; +use crate::block::blocks::plant::crop::beetroot::BeetrootBlock; +use crate::block::blocks::plant::crop::carrot::CarrotBlock; +use crate::block::blocks::plant::crop::potatoes::PotatoBlock; +use crate::block::blocks::plant::crop::torch_flower::TorchFlowerBlock; +use crate::block::blocks::plant::crop::wheat::WheatBlock; +use crate::block::blocks::plant::nether_wart::NetherWartBlock; +use crate::block::blocks::plant::roots::RootsBlock; +use crate::block::blocks::plant::sea_grass::SeaGrassBlock; +use crate::block::blocks::plant::sea_pickles::SeaPickleBlock; +use crate::block::blocks::redstone::dispenser::DispenserBlock; +use crate::block::blocks::redstone::dropper::DropperBlock; + use super::BlockIsReplacing; -use super::pumpkin_block::{ +use super::fluid::FluidBehaviour; +use super::{ BrokenArgs, CanPlaceAtArgs, CanUpdateAtArgs, EmitsRedstonePowerArgs, ExplodeArgs, GetRedstonePowerArgs, GetStateForNeighborUpdateArgs, NormalUseArgs, OnNeighborUpdateArgs, OnPlaceArgs, OnStateReplacedArgs, OnSyncedBlockEventArgs, PlacedArgs, PlayerPlacedArgs, PrepareArgs, UseWithItemArgs, }; -use super::pumpkin_fluid::PumpkinFluid; +use crate::block::blocks::blast_furnace::BlastFurnaceBlock; +use crate::block::blocks::crafting_table::CraftingTableBlock; +use crate::block::blocks::ender_chest::EnderChestBlock; +use crate::block::blocks::hopper::HopperBlock; +use crate::block::blocks::jukebox::JukeboxBlock; +use crate::block::blocks::ladder::LadderBlock; +use crate::block::blocks::lectern::LecternBlock; +use crate::block::blocks::shulker_box::ShulkerBoxBlock; +use crate::block::blocks::skull_block::SkullBlock; +use crate::block::blocks::smoker::SmokerBlock; + +#[must_use] +#[allow(clippy::too_many_lines)] +pub fn default_registry() -> Arc { + let mut manager = BlockRegistry::default(); + + // Blocks + manager.register(AnvilBlock); + manager.register(BedBlock); + manager.register(SaplingBlock); + manager.register(CactusBlock); + manager.register(CarpetBlock); + manager.register(CampfireBlock); + manager.register(MossCarpetBlock); + manager.register(PaleMossCarpetBlock); + manager.register(ChestBlock); + manager.register(EnderChestBlock); + manager.register(CraftingTableBlock); + manager.register(DirtPathBlock); + manager.register(DoorBlock); + manager.register(FarmLandBlock); + manager.register(FenceGateBlock); + manager.register(FenceBlock); + manager.register(FlowerPotBlock); + manager.register(FurnaceBlock); + manager.register(BlastFurnaceBlock); + manager.register(SmokerBlock); + manager.register(GlassPaneBlock); + manager.register(GlazedTerracottaBlock); + manager.register(GrindstoneBlock); + manager.register(IronBarsBlock); + manager.register(JukeboxBlock); + manager.register(LogBlock); + manager.register(BambooBlock); + manager.register(BannerBlock); + manager.register(SignBlock); + manager.register(SlabBlock); + manager.register(StairBlock); + manager.register(ShortPlantBlock); + manager.register(DryVegetationBlock); + manager.register(LilyPadBlock); + manager.register(SugarCaneBlock); + manager.register(VineBlock); + manager.register(TNTBlock); + manager.register(BushBlock); + manager.register(FlowerBlock); + manager.register(PotatoBlock); + manager.register(BeetrootBlock); + manager.register(TorchFlowerBlock); + manager.register(CarrotBlock); + manager.register(SeaGrassBlock); + manager.register(NetherWartBlock); + manager.register(WheatBlock); + manager.register(TorchBlock); + manager.register(TrapDoorBlock); + manager.register(MushroomPlantBlock); + manager.register(FlowerbedBlock); + manager.register(LeafLitterBlock); + manager.register(WallBlock); + manager.register(RootsBlock); + manager.register(NetherPortalBlock); + manager.register(TallPlantBlock); + manager.register(NoteBlock); + manager.register(PumpkinBlock); + manager.register(CommandBlock); + manager.register(ComposterBlock); + manager.register(PressurePlateBlock); + manager.register(WeightedPressurePlateBlock); + manager.register(EndPortalBlock); + manager.register(EndPortalFrameBlock); + manager.register(CandleBlock); + manager.register(SeaPickleBlock); + manager.register(CakeBlock); + manager.register(CandleCakeBlock); + manager.register(SkullBlock); + manager.register(ChiseledBookshelfBlock); + manager.register(LecternBlock); + + // Fire + manager.register(SoulFireBlock); + manager.register(FireBlock); + + // Redstone + manager.register(ButtonBlock); + manager.register(LeverBlock); + manager.register(ObserverBlock); + manager.register(TripwireBlock); + manager.register(TripwireHookBlock); + + // Piston + manager.register(PistonBlock); + manager.register(PistonExtensionBlock); + manager.register(PistonHeadBlock); + + manager.register(RedstoneBlock); + manager.register(RedstoneLamp); + manager.register(CopperBulbBlock); + manager.register(RedstoneTorchBlock); + manager.register(RedstoneWireBlock); + manager.register(RepeaterBlock); + manager.register(ComparatorBlock); + manager.register(TargetBlock); + manager.register(BarrelBlock); + manager.register(HopperBlock); + manager.register(ShulkerBoxBlock); + manager.register(DropperBlock); + manager.register(DispenserBlock); + manager.register(LadderBlock); + + // Rails + manager.register(RailBlock); + manager.register(ActivatorRailBlock); + manager.register(DetectorRailBlock); + manager.register(PoweredRailBlock); + + // Fluids + manager.register_fluid(FlowingWater); + manager.register_fluid(FlowingLava); + Arc::new(manager) +} // ActionResult.java pub enum BlockActionResult { @@ -53,8 +270,8 @@ impl BlockActionResult { #[derive(Default)] pub struct BlockRegistry { - blocks: HashMap<&'static Block, Arc>, - fluids: HashMap<&'static Fluid, Arc>, + blocks: HashMap<&'static Block, Arc>, + fluids: HashMap<&'static Fluid, Arc>, } #[async_trait] @@ -83,7 +300,7 @@ impl BlockRegistryExt for BlockRegistry { } impl BlockRegistry { - pub fn register(&mut self, block: T) { + pub fn register(&mut self, block: T) { let names = block.names(); let val = Arc::new(block); self.blocks.reserve(names.len()); @@ -93,7 +310,7 @@ impl BlockRegistry { } } - pub fn register_fluid(&mut self, fluid: T) { + pub fn register_fluid(&mut self, fluid: T) { let names = fluid.names(); let val = Arc::new(fluid); self.fluids.reserve(names.len()); @@ -562,12 +779,12 @@ impl BlockRegistry { } #[must_use] - pub fn get_pumpkin_block(&self, block: &Block) -> Option<&Arc> { + pub fn get_pumpkin_block(&self, block: &Block) -> Option<&Arc> { self.blocks.get(block) } #[must_use] - pub fn get_pumpkin_fluid(&self, fluid: &Fluid) -> Option<&Arc> { + pub fn get_pumpkin_fluid(&self, fluid: &Fluid) -> Option<&Arc> { self.fluids.get(fluid) } diff --git a/pumpkin/src/item/items/axe.rs b/pumpkin/src/item/items/axe.rs index 872618565..cf8a7210e 100644 --- a/pumpkin/src/item/items/axe.rs +++ b/pumpkin/src/item/items/axe.rs @@ -1,5 +1,5 @@ use crate::entity::player::Player; -use crate::item::pumpkin_item::{ItemMetadata, PumpkinItem}; +use crate::item::{ItemBehaviour, ItemMetadata}; use crate::server::Server; use async_trait::async_trait; use pumpkin_data::BlockDirection; @@ -20,7 +20,7 @@ impl ItemMetadata for AxeItem { } #[async_trait] -impl PumpkinItem for AxeItem { +impl ItemBehaviour for AxeItem { #[allow(clippy::too_many_lines)] async fn use_on_block( &self, diff --git a/pumpkin/src/item/items/bucket.rs b/pumpkin/src/item/items/bucket.rs index db2ab8c89..6adcca3b7 100644 --- a/pumpkin/src/item/items/bucket.rs +++ b/pumpkin/src/item/items/bucket.rs @@ -1,6 +1,9 @@ use std::sync::Arc; -use crate::entity::player::Player; +use crate::{ + entity::player::Player, + item::{ItemBehaviour, ItemMetadata}, +}; use async_trait::async_trait; use pumpkin_data::{ Block, @@ -15,7 +18,6 @@ use pumpkin_util::{ }; use pumpkin_world::{inventory::Inventory, item::ItemStack, tick::TickPriority, world::BlockFlags}; -use crate::item::pumpkin_item::{ItemMetadata, PumpkinItem}; use crate::world::World; pub struct EmptyBucketItem; @@ -94,7 +96,7 @@ fn set_waterlogged(block: &Block, state: u16, waterlogged: bool) -> u16 { } #[async_trait] -impl PumpkinItem for EmptyBucketItem { +impl ItemBehaviour for EmptyBucketItem { async fn normal_use(&self, _item: &Item, player: &Player) { let world = player.world().await.clone(); let (start_pos, end_pos) = get_start_and_end_pos(player); @@ -204,7 +206,7 @@ impl PumpkinItem for EmptyBucketItem { } #[async_trait] -impl PumpkinItem for FilledBucketItem { +impl ItemBehaviour for FilledBucketItem { async fn normal_use(&self, item: &Item, player: &Player) { let world = player.world().await.clone(); let (start_pos, end_pos) = get_start_and_end_pos(player); diff --git a/pumpkin/src/item/items/egg.rs b/pumpkin/src/item/items/egg.rs index a831faa43..3c52e73ff 100644 --- a/pumpkin/src/item/items/egg.rs +++ b/pumpkin/src/item/items/egg.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use crate::entity::Entity; use crate::entity::player::Player; use crate::entity::projectile::ThrownItemEntity; -use crate::item::pumpkin_item::{ItemMetadata, PumpkinItem}; +use crate::item::{ItemBehaviour, ItemMetadata}; use async_trait::async_trait; use pumpkin_data::entity::EntityType; use pumpkin_data::item::Item; @@ -21,7 +21,7 @@ impl ItemMetadata for EggItem { const POWER: f32 = 1.5; #[async_trait] -impl PumpkinItem for EggItem { +impl ItemBehaviour for EggItem { async fn normal_use(&self, _block: &Item, player: &Player) { let position = player.position(); let world = player.world().await; diff --git a/pumpkin/src/item/items/ender_eye.rs b/pumpkin/src/item/items/ender_eye.rs index 32861c24b..a8276a1fa 100644 --- a/pumpkin/src/item/items/ender_eye.rs +++ b/pumpkin/src/item/items/ender_eye.rs @@ -5,7 +5,7 @@ use pumpkin_data::{Block, BlockDirection, item::Item}; use pumpkin_util::math::position::BlockPos; use pumpkin_world::world::BlockFlags; -use crate::item::pumpkin_item::{ItemMetadata, PumpkinItem}; +use crate::item::{ItemBehaviour, ItemMetadata}; use crate::{entity::player::Player, world::World}; use async_trait::async_trait; @@ -18,7 +18,7 @@ impl ItemMetadata for EnderEyeItem { } #[async_trait] -impl PumpkinItem for EnderEyeItem { +impl ItemBehaviour for EnderEyeItem { async fn use_on_block( &self, _item: &Item, diff --git a/pumpkin/src/item/items/hoe.rs b/pumpkin/src/item/items/hoe.rs index 8a54805f0..70fcb2f99 100644 --- a/pumpkin/src/item/items/hoe.rs +++ b/pumpkin/src/item/items/hoe.rs @@ -1,7 +1,7 @@ use crate::entity::Entity; use crate::entity::item::ItemEntity; use crate::entity::player::Player; -use crate::item::pumpkin_item::{ItemMetadata, PumpkinItem}; +use crate::item::{ItemBehaviour, ItemMetadata}; use crate::server::Server; use async_trait::async_trait; use pumpkin_data::BlockDirection; @@ -23,7 +23,7 @@ impl ItemMetadata for HoeItem { } #[async_trait] -impl PumpkinItem for HoeItem { +impl ItemBehaviour for HoeItem { async fn use_on_block( &self, _item: &Item, diff --git a/pumpkin/src/item/items/honeycomb.rs b/pumpkin/src/item/items/honeycomb.rs index abb6bed13..3f913048e 100644 --- a/pumpkin/src/item/items/honeycomb.rs +++ b/pumpkin/src/item/items/honeycomb.rs @@ -1,5 +1,5 @@ use crate::entity::player::Player; -use crate::item::pumpkin_item::{ItemMetadata, PumpkinItem}; +use crate::item::{ItemBehaviour, ItemMetadata}; use crate::server::Server; use async_trait::async_trait; use pumpkin_data::BlockDirection; @@ -20,7 +20,7 @@ impl ItemMetadata for HoneyCombItem { } #[async_trait] -impl PumpkinItem for HoneyCombItem { +impl ItemBehaviour for HoneyCombItem { async fn use_on_block( &self, _item: &Item, diff --git a/pumpkin/src/item/items/ignite/fire_charge.rs b/pumpkin/src/item/items/ignite/fire_charge.rs index ef24ed25e..42ab3eaf4 100644 --- a/pumpkin/src/item/items/ignite/fire_charge.rs +++ b/pumpkin/src/item/items/ignite/fire_charge.rs @@ -11,7 +11,7 @@ use pumpkin_world::world::BlockFlags; use crate::entity::player::Player; use crate::item::items::ignite::ignition::Ignition; -use crate::item::pumpkin_item::{ItemMetadata, PumpkinItem}; +use crate::item::{ItemBehaviour, ItemMetadata}; use crate::server::Server; use crate::world::World; @@ -24,7 +24,7 @@ impl ItemMetadata for FireChargeItem { } #[async_trait] -impl PumpkinItem for FireChargeItem { +impl ItemBehaviour for FireChargeItem { async fn use_on_block( &self, _item: &Item, diff --git a/pumpkin/src/item/items/ignite/flint_and_steel.rs b/pumpkin/src/item/items/ignite/flint_and_steel.rs index fb9ec6517..4fcacbd60 100644 --- a/pumpkin/src/item/items/ignite/flint_and_steel.rs +++ b/pumpkin/src/item/items/ignite/flint_and_steel.rs @@ -1,6 +1,6 @@ use crate::entity::player::Player; -use crate::item::pumpkin_item::ItemMetadata; -use crate::item::pumpkin_item::PumpkinItem; +use crate::item::ItemBehaviour; +use crate::item::ItemMetadata; use crate::server::Server; use crate::world::World; use async_trait::async_trait; @@ -22,7 +22,7 @@ impl ItemMetadata for FlintAndSteelItem { } #[async_trait] -impl PumpkinItem for FlintAndSteelItem { +impl ItemBehaviour for FlintAndSteelItem { async fn use_on_block( &self, item: &Item, diff --git a/pumpkin/src/item/items/mace.rs b/pumpkin/src/item/items/mace.rs index ac8668707..9384671ae 100644 --- a/pumpkin/src/item/items/mace.rs +++ b/pumpkin/src/item/items/mace.rs @@ -1,19 +1,19 @@ -use crate::entity::player::Player; -use crate::item::pumpkin_item::{ItemMetadata, PumpkinItem}; -use async_trait::async_trait; -use pumpkin_data::item::Item; -use pumpkin_util::GameMode; - -pub struct MaceItem; - -impl ItemMetadata for MaceItem { - fn ids() -> Box<[u16]> { - [Item::MACE.id].into() - } -} -#[async_trait] -impl PumpkinItem for MaceItem { - fn can_mine(&self, player: &Player) -> bool { - player.gamemode.load() != GameMode::Creative - } -} +use crate::entity::player::Player; +use crate::item::{ItemBehaviour, ItemMetadata}; +use async_trait::async_trait; +use pumpkin_data::item::Item; +use pumpkin_util::GameMode; + +pub struct MaceItem; + +impl ItemMetadata for MaceItem { + fn ids() -> Box<[u16]> { + [Item::MACE.id].into() + } +} +#[async_trait] +impl ItemBehaviour for MaceItem { + fn can_mine(&self, player: &Player) -> bool { + player.gamemode.load() != GameMode::Creative + } +} diff --git a/pumpkin/src/item/items/minecart.rs b/pumpkin/src/item/items/minecart.rs index 169747991..31f80e350 100644 --- a/pumpkin/src/item/items/minecart.rs +++ b/pumpkin/src/item/items/minecart.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use crate::entity::Entity; use crate::entity::player::Player; -use crate::item::pumpkin_item::{ItemMetadata, PumpkinItem}; +use crate::item::{ItemBehaviour, ItemMetadata}; use crate::server::Server; use async_trait::async_trait; use pumpkin_data::BlockDirection; @@ -48,7 +48,7 @@ impl ItemMetadata for MinecartItem { } #[async_trait] -impl PumpkinItem for MinecartItem { +impl ItemBehaviour for MinecartItem { async fn use_on_block( &self, item: &Item, diff --git a/pumpkin/src/item/items/shovel.rs b/pumpkin/src/item/items/shovel.rs index c2242197e..d3be2c477 100644 --- a/pumpkin/src/item/items/shovel.rs +++ b/pumpkin/src/item/items/shovel.rs @@ -1,5 +1,5 @@ use crate::entity::player::Player; -use crate::item::pumpkin_item::{ItemMetadata, PumpkinItem}; +use crate::item::{ItemBehaviour, ItemMetadata}; use crate::server::Server; use async_trait::async_trait; use pumpkin_data::BlockDirection; @@ -21,7 +21,7 @@ impl ItemMetadata for ShovelItem { } #[async_trait] -impl PumpkinItem for ShovelItem { +impl ItemBehaviour for ShovelItem { async fn use_on_block( &self, _item: &Item, diff --git a/pumpkin/src/item/items/snowball.rs b/pumpkin/src/item/items/snowball.rs index e3ea37e7f..9530318b6 100644 --- a/pumpkin/src/item/items/snowball.rs +++ b/pumpkin/src/item/items/snowball.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use crate::entity::Entity; use crate::entity::player::Player; use crate::entity::projectile::ThrownItemEntity; -use crate::item::pumpkin_item::{ItemMetadata, PumpkinItem}; +use crate::item::{ItemBehaviour, ItemMetadata}; use async_trait::async_trait; use pumpkin_data::entity::EntityType; use pumpkin_data::item::Item; @@ -21,7 +21,7 @@ impl ItemMetadata for SnowBallItem { const POWER: f32 = 1.5; #[async_trait] -impl PumpkinItem for SnowBallItem { +impl ItemBehaviour for SnowBallItem { async fn normal_use(&self, _block: &Item, player: &Player) { let position = player.position(); let world = player.world().await; diff --git a/pumpkin/src/item/items/swords.rs b/pumpkin/src/item/items/swords.rs index 67350ac52..d11e7ff9e 100644 --- a/pumpkin/src/item/items/swords.rs +++ b/pumpkin/src/item/items/swords.rs @@ -1,5 +1,5 @@ use crate::entity::player::Player; -use crate::item::pumpkin_item::{ItemMetadata, PumpkinItem}; +use crate::item::{ItemBehaviour, ItemMetadata}; use async_trait::async_trait; use pumpkin_data::tag; use pumpkin_util::GameMode; @@ -13,7 +13,7 @@ impl ItemMetadata for SwordItem { } #[async_trait] -impl PumpkinItem for SwordItem { +impl ItemBehaviour for SwordItem { fn can_mine(&self, player: &Player) -> bool { player.gamemode.load() != GameMode::Creative } diff --git a/pumpkin/src/item/items/trident.rs b/pumpkin/src/item/items/trident.rs index 8318cf148..f01baa8dc 100644 --- a/pumpkin/src/item/items/trident.rs +++ b/pumpkin/src/item/items/trident.rs @@ -4,7 +4,7 @@ use pumpkin_util::GameMode; use crate::{ entity::player::Player, - item::pumpkin_item::{ItemMetadata, PumpkinItem}, + item::{ItemBehaviour, ItemMetadata}, }; pub struct TridentItem; @@ -16,7 +16,7 @@ impl ItemMetadata for TridentItem { } #[async_trait] -impl PumpkinItem for TridentItem { +impl ItemBehaviour for TridentItem { fn can_mine(&self, player: &Player) -> bool { player.gamemode.load() != GameMode::Creative } diff --git a/pumpkin/src/item/mod.rs b/pumpkin/src/item/mod.rs index d4c3c73d1..af37a2f08 100644 --- a/pumpkin/src/item/mod.rs +++ b/pumpkin/src/item/mod.rs @@ -1,3 +1,51 @@ pub mod items; -pub mod pumpkin_item; pub mod registry; + +use crate::entity::player::Player; +use crate::server::Server; +use async_trait::async_trait; +use pumpkin_data::Block; +use pumpkin_data::BlockDirection; +use pumpkin_data::item::Item; +use pumpkin_util::math::position::BlockPos; +use pumpkin_util::math::vector3::Vector3; + +pub trait ItemMetadata { + fn ids() -> Box<[u16]>; +} + +#[async_trait] +pub trait ItemBehaviour: Send + Sync { + async fn normal_use(&self, _block: &Item, _player: &Player) {} + + async fn use_on_block( + &self, + _item: &Item, + _player: &Player, + _location: BlockPos, + _face: BlockDirection, + _block: &Block, + _server: &Server, + ) { + } + + fn can_mine(&self, _player: &Player) -> bool { + true + } + + fn get_start_and_end_pos(&self, player: &Player) -> (Vector3, Vector3) { + let start_pos = player.eye_position(); + let (yaw, pitch) = player.rotation(); + let (yaw_rad, pitch_rad) = (f64::from(yaw.to_radians()), f64::from(pitch.to_radians())); + let block_interaction_range = 4.5; // This is not the same as the block_interaction_range in the + // player entity. + let direction = Vector3::new( + -yaw_rad.sin() * pitch_rad.cos() * block_interaction_range, + -pitch_rad.sin() * block_interaction_range, + pitch_rad.cos() * yaw_rad.cos() * block_interaction_range, + ); + + let end_pos = start_pos.add(&direction); + (start_pos, end_pos) + } +} diff --git a/pumpkin/src/item/pumpkin_item.rs b/pumpkin/src/item/pumpkin_item.rs deleted file mode 100644 index eed91c53c..000000000 --- a/pumpkin/src/item/pumpkin_item.rs +++ /dev/null @@ -1,48 +0,0 @@ -use crate::entity::player::Player; -use crate::server::Server; -use async_trait::async_trait; -use pumpkin_data::Block; -use pumpkin_data::BlockDirection; -use pumpkin_data::item::Item; -use pumpkin_util::math::position::BlockPos; -use pumpkin_util::math::vector3::Vector3; - -pub trait ItemMetadata { - fn ids() -> Box<[u16]>; -} - -#[async_trait] -pub trait PumpkinItem: Send + Sync { - async fn normal_use(&self, _block: &Item, _player: &Player) {} - - async fn use_on_block( - &self, - _item: &Item, - _player: &Player, - _location: BlockPos, - _face: BlockDirection, - _block: &Block, - _server: &Server, - ) { - } - - fn can_mine(&self, _player: &Player) -> bool { - true - } - - fn get_start_and_end_pos(&self, player: &Player) -> (Vector3, Vector3) { - let start_pos = player.eye_position(); - let (yaw, pitch) = player.rotation(); - let (yaw_rad, pitch_rad) = (f64::from(yaw.to_radians()), f64::from(pitch.to_radians())); - let block_interaction_range = 4.5; // This is not the same as the block_interaction_range in the - // player entity. - let direction = Vector3::new( - -yaw_rad.sin() * pitch_rad.cos() * block_interaction_range, - -pitch_rad.sin() * block_interaction_range, - pitch_rad.cos() * yaw_rad.cos() * block_interaction_range, - ); - - let end_pos = start_pos.add(&direction); - (start_pos, end_pos) - } -} diff --git a/pumpkin/src/item/registry.rs b/pumpkin/src/item/registry.rs index 3154140d4..76732eba8 100644 --- a/pumpkin/src/item/registry.rs +++ b/pumpkin/src/item/registry.rs @@ -7,15 +7,15 @@ use pumpkin_util::math::position::BlockPos; use std::collections::HashMap; use std::sync::Arc; -use super::pumpkin_item::{ItemMetadata, PumpkinItem}; +use super::{ItemBehaviour, ItemMetadata}; #[derive(Default)] pub struct ItemRegistry { - items: HashMap<&'static Item, Arc>, + items: HashMap<&'static Item, Arc>, } impl ItemRegistry { - pub fn register(&mut self, item: T) { + pub fn register(&mut self, item: T) { let val = Arc::new(item); self.items.reserve(T::ids().len()); for i in T::ids() { @@ -56,7 +56,7 @@ impl ItemRegistry { } #[must_use] - pub fn get_pumpkin_item(&self, item: &Item) -> Option<&Arc> { + pub fn get_pumpkin_item(&self, item: &Item) -> Option<&Arc> { self.items.get(item) } } diff --git a/pumpkin/src/net/java/play.rs b/pumpkin/src/net/java/play.rs index 72116df01..5fa3e95a2 100644 --- a/pumpkin/src/net/java/play.rs +++ b/pumpkin/src/net/java/play.rs @@ -9,7 +9,7 @@ use std::sync::atomic::Ordering; use std::time::{SystemTime, UNIX_EPOCH}; use thiserror::Error; -use crate::block::pumpkin_block::BlockHitResult; +use crate::block::BlockHitResult; use crate::block::registry::BlockActionResult; use crate::block::{self, BlockIsReplacing}; use crate::command::CommandSender; diff --git a/pumpkin/src/server/mod.rs b/pumpkin/src/server/mod.rs index 8d0459360..195dc6ee7 100644 --- a/pumpkin/src/server/mod.rs +++ b/pumpkin/src/server/mod.rs @@ -114,7 +114,7 @@ impl Server { let command_dispatcher = RwLock::new(default_dispatcher().await); let world_path = BASIC_CONFIG.get_world_path(); - let block_registry = super::block::default_registry(); + let block_registry = super::block::registry::default_registry(); let level_info = AnvilLevelInfo.read_world_info(&world_path); if let Err(error) = &level_info { diff --git a/pumpkin/src/world/explosion.rs b/pumpkin/src/world/explosion.rs index 58cc58d9f..bd34919f3 100644 --- a/pumpkin/src/world/explosion.rs +++ b/pumpkin/src/world/explosion.rs @@ -5,7 +5,7 @@ use pumpkin_data::{Block, BlockState}; use pumpkin_util::math::{position::BlockPos, vector3::Vector3}; use crate::{ - block::{drop_loot, pumpkin_block::ExplodeArgs}, + block::{ExplodeArgs, drop_loot}, server::Server, world::loot::LootContextParameters, }; diff --git a/pumpkin/src/world/mod.rs b/pumpkin/src/world/mod.rs index 0472c7723..e7721249d 100644 --- a/pumpkin/src/world/mod.rs +++ b/pumpkin/src/world/mod.rs @@ -15,8 +15,8 @@ use crate::{ PLUGIN_MANAGER, block::{ self, - pumpkin_block::{OnNeighborUpdateArgs, OnScheduledTickArgs}, registry::BlockRegistry, + {OnNeighborUpdateArgs, OnScheduledTickArgs}, }, command::client_suggestions, entity::{Entity, EntityBase, player::Player, r#type::from_type},