Pumpkin/pumpkin/src/entity/decoration/painting.rs
Alexander Medvedev 60bfdf62db Revert a55c42c83
2026-05-10 12:13:33 +02:00

71 lines
1.7 KiB
Rust

use core::f32;
use std::sync::atomic::Ordering;
use crate::entity::{
Entity, EntityBase, EntityBaseFuture, NBTStorage, NbtFuture, living::LivingEntity,
};
use pumpkin_data::damage::DamageType;
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_util::math::vector3::Vector3;
pub struct PaintingEntity {
entity: Entity,
}
impl PaintingEntity {
pub const fn new(entity: Entity) -> Self {
Self { entity }
}
}
impl NBTStorage for PaintingEntity {
fn write_nbt<'a>(&'a self, nbt: &'a mut NbtCompound) -> NbtFuture<'a, ()> {
Box::pin(async {
self.entity.write_nbt(nbt).await;
nbt.put_byte("facing", self.entity.data.load(Ordering::Relaxed) as i8);
})
}
fn read_nbt_non_mut<'a>(&'a self, nbt: &'a NbtCompound) -> NbtFuture<'a, ()> {
Box::pin(async {
self.entity.read_nbt_non_mut(nbt).await;
let facing = nbt.get_byte("facing").unwrap_or(3);
self.entity.data.store(facing as i32, Ordering::Relaxed);
})
}
}
impl EntityBase for PaintingEntity {
fn get_entity(&self) -> &Entity {
&self.entity
}
fn get_living_entity(&self) -> Option<&LivingEntity> {
None
}
fn damage_with_context<'a>(
&'a self,
_caller: &'a dyn EntityBase,
_amount: f32,
_damage_type: DamageType,
_position: Option<Vector3<f64>>,
_source: Option<&'a dyn EntityBase>,
_cause: Option<&'a dyn EntityBase>,
) -> EntityBaseFuture<'a, bool> {
Box::pin(async {
// TODO
self.entity.remove().await;
true
})
}
fn as_nbt_storage(&self) -> &dyn NBTStorage {
self
}
fn cast_any(&self) -> &dyn std::any::Any {
self
}
}