use yog_core::Server;
pub struct Entity<'a> {
server: &'a dyn Server,
uuid: String,
}
impl<'a> Entity<'a> {
pub fn new(server: &'a dyn Server, uuid: impl Into<String>) -> Self {
Self {
server,
uuid: uuid.into(),
}
}
pub fn uuid(&self) -> &str {
&self.uuid
}
pub fn teleport(&self, x: f64, y: f64, z: f64) -> bool {
self.server.entity_teleport(&self.uuid, x, y, z)
}
pub fn rotation(&self) -> Option<(f32, f32)> {
self.server.entity_rotation(&self.uuid)
}
pub fn look_vector(&self) -> Option<(f64, f64, f64)> {
let (yaw, pitch) = self.rotation()?;
let (yaw, pitch) = ((yaw as f64).to_radians(), (pitch as f64).to_radians());
let cos_p = pitch.cos();
Some((-yaw.sin() * cos_p, -pitch.sin(), yaw.cos() * cos_p))
}
pub fn position(&self) -> Option<(f64, f64, f64)> {
self.server.entity_position(&self.uuid)
}
pub fn health(&self) -> Option<f32> {
self.server.entity_health(&self.uuid)
}
pub fn set_health(&self, health: f32) -> bool {
self.server.entity_set_health(&self.uuid, health)
}
pub fn kill(&self) -> bool {
self.server.entity_kill(&self.uuid)
}
pub fn add_effect(
&self,
effect_id: &str,
duration_ticks: i32,
amplifier: u8,
show_particles: bool,
) -> bool {
self.server.entity_add_effect(&self.uuid, effect_id, duration_ticks, amplifier, show_particles)
}
pub fn remove_effect(&self, effect_id: &str) -> bool {
self.server.entity_remove_effect(&self.uuid, effect_id)
}
pub fn clear_effects(&self) -> bool {
self.server.entity_clear_effects(&self.uuid)
}
pub fn velocity(&self) -> Option<(f64, f64, f64)> {
self.server.entity_velocity(&self.uuid)
}
pub fn set_velocity(&self, vx: f64, vy: f64, vz: f64) -> bool {
self.server.entity_set_velocity(&self.uuid, vx, vy, vz)
}
pub fn add_velocity(&self, vx: f64, vy: f64, vz: f64) -> bool {
self.server.entity_add_velocity(&self.uuid, vx, vy, vz)
}
pub fn get_nbt(&self) -> Option<String> {
self.server.entity_get_nbt(&self.uuid)
}
pub fn set_nbt(&self, snbt: &str) -> bool {
self.server.entity_set_nbt(&self.uuid, snbt)
}
pub fn attribute_get(&self, attribute_id: &str) -> Option<f64> {
self.server.entity_attribute_get(&self.uuid, attribute_id)
}
pub fn attribute_set(&self, attribute_id: &str, value: f64) -> bool {
self.server.entity_attribute_set(&self.uuid, attribute_id, value)
}
}