Skip to content
This repository has been archived by the owner on Jul 1, 2024. It is now read-only.

Commit

Permalink
Allow enabling ticks on WorldObserver
Browse files Browse the repository at this point in the history
  • Loading branch information
Mubelotix committed Nov 21, 2023
1 parent 713b576 commit 43eb1c5
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 4 deletions.
8 changes: 4 additions & 4 deletions minecraft-server/src/entities/player.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ impl Player {
world_observer: WorldObserver
) -> Eid {
let (packet_sender, packet_receiver) = mpsc_channel(1000);
let uuid = player_info.uuid;

let mut player = Player {
living_entity: LivingEntity::default(),
Expand Down Expand Up @@ -260,7 +259,7 @@ impl Handler<Player> {
pitch: (pitch * (256.0 / 360.0)) as u8,
yaw: (yaw * (256.0 / 360.0)) as u8,
head_yaw: (head_yaw * (256.0 / 360.0)) as u8,
data: VarInt(0 as i32), // TODO set data on entities
data: VarInt(0), // TODO set data on entities
velocity_x: (velocity.x * 8000.0) as i16,
velocity_y: (velocity.y * 8000.0) as i16,
velocity_z: (velocity.z * 8000.0) as i16,
Expand All @@ -287,7 +286,7 @@ impl Handler<Player> {
}
}

async fn on_packet<'a>(mut self, packet: PlayServerbound<'a>) {
async fn on_packet(self, packet: PlayServerbound<'_>) {
use PlayServerbound::*;
match packet {
SetPlayerPosition { x, y, z, on_ground } => {
Expand Down Expand Up @@ -342,7 +341,7 @@ impl Handler<Player> {
self.world.spawn_entity::<Zombie>(AnyEntity::Zombie(zombie)).await;
} else if message == "stress" {
tokio::spawn(async move {
for i in 0..1000 {
for _ in 0..1000 {
let mut zombie = Zombie::default();
let Some(mut position) = self.observe(|player| player.get_entity().position.clone()).await else {return};
position.y += 20.0;
Expand Down Expand Up @@ -371,6 +370,7 @@ async fn handle_player(h: Handler<Player>, stream: TcpStream, packet_receiver: M

async fn handle_player_inner(h: Handler<Player>, stream: TcpStream, mut packet_receiver: MpscReceiver<Vec<u8>>, mut world_observer: WorldObserver) -> Result<(), ()> {
let (mut reader_stream, mut writer_stream) = stream.into_split();
world_observer.enable_ticks().await;

let mut receive_packet_fut = Box::pin(receive_packet_split(&mut reader_stream).fuse());
let mut receive_clientbound_fut = Box::pin(packet_receiver.recv().fuse());
Expand Down
18 changes: 18 additions & 0 deletions minecraft-server/src/world/change.rs
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,24 @@ impl WorldObserver {
pub fn try_recv(&mut self) -> Result<WorldChange, tokio::sync::mpsc::error::TryRecvError> {
self.receiver.try_recv()
}

pub async fn enable_ticks(&self) {
let mut trackers = self.observer_manager.trackers.write().await;
let Some(tracker) = trackers.get_mut(&self.eid) else { return };
if !tracker.ticks {
tracker.ticks = true;
self.observer_manager.ticks.write().await.insert(self.eid);
}
}

pub async fn disable_ticks(&self) {
let mut trackers = self.observer_manager.trackers.write().await;
let Some(tracker) = trackers.get_mut(&self.eid) else { return };
if tracker.ticks {
tracker.ticks = false;
self.observer_manager.ticks.write().await.remove(&self.eid);
}
}
}

impl Drop for WorldObserver {
Expand Down

0 comments on commit 43eb1c5

Please sign in to comment.