diff --git a/azalea-client/src/client.rs b/azalea-client/src/client.rs index ad67c48e..7ffcf7ed 100644 --- a/azalea-client/src/client.rs +++ b/azalea-client/src/client.rs @@ -4,6 +4,7 @@ use std::{ io, net::SocketAddr, sync::Arc, + thread, time::{Duration, Instant}, }; @@ -39,12 +40,11 @@ use azalea_protocol::{ resolver, }; use azalea_world::{Instance, InstanceContainer, InstanceName, PartialInstance}; -use bevy_app::{App, AppExit, Plugin, PluginGroup, PluginGroupBuilder, PluginsState, Update}; +use bevy_app::{App, Plugin, PluginGroup, PluginGroupBuilder, PluginsState, Update}; use bevy_ecs::{ bundle::Bundle, component::Component, entity::Entity, - event::Events, schedule::{InternedScheduleLabel, IntoSystemConfigs, LogLevel, ScheduleBuildSettings}, system::{ResMut, Resource}, world::World, @@ -864,14 +864,20 @@ pub fn start_ecs_runner( run_schedule_receiver: mpsc::Receiver<()>, run_schedule_sender: mpsc::Sender<()>, ) -> Arc> { - // Wait for plugins to load - if app.plugins_state() == PluginsState::Adding { - info!("Waiting for plugins to load ..."); - while matches!(app.plugins_state(), PluginsState::Adding) {} + // this block is based on Bevy's default runner: + // https://github.com/bevyengine/bevy/blob/390877cdae7a17095a75c8f9f1b4241fe5047e83/crates/bevy_app/src/schedule_runner.rs#L77-L85 + if app.plugins_state() != PluginsState::Cleaned { + // Wait for plugins to load + if app.plugins_state() == PluginsState::Adding { + info!("Waiting for plugins to load ..."); + while app.plugins_state() == PluginsState::Adding { + thread::yield_now(); + } + } + // Finish adding plugins and cleanup + app.finish(); + app.cleanup(); } - // Finish adding plugins and cleanup - app.finish(); - app.cleanup(); // all resources should have been added by now so we can take the ecs from the // app