Revert "Reuse TickData allocations between cycles (#1250)"

This reverts commit 0e5eaf5500.
This commit is contained in:
Alexander Medvedev 2026-01-11 23:16:18 +01:00
parent 0e5eaf5500
commit 60d65f1f48
2 changed files with 13 additions and 21 deletions

View File

@ -97,11 +97,8 @@ pub struct Level {
pub level_channel: Arc<LevelChannel>,
pub thread_tracker: Mutex<Vec<thread::JoinHandle<()>>>,
pub chunk_listener: Arc<ChunkListener>,
pub tick_data: tokio::sync::Mutex<TickData>,
}
#[derive(Default)]
pub struct TickData {
pub block_ticks: Vec<OrderedTick<&'static Block>>,
pub fluid_ticks: Vec<OrderedTick<&'static Fluid>>,
@ -204,7 +201,6 @@ impl Level {
level_channel: level_channel.clone(),
thread_tracker,
chunk_listener: listener.clone(),
tick_data: tokio::sync::Mutex::new(TickData::default()),
});
let num_threads = num_cpus::get().saturating_sub(2).max(1);
@ -496,9 +492,13 @@ impl Level {
}
// Gets random ticks, block ticks and fluid ticks
pub async fn get_tick_data(&self) {
let mut ticks = self.tick_data.lock().await;
ticks.clear();
pub async fn get_tick_data(&self) -> TickData {
let mut ticks = TickData {
block_ticks: Vec::new(),
fluid_ticks: Vec::new(),
random_ticks: Vec::with_capacity(self.loaded_chunks.len() * 3 * 16 * 16),
block_entities: Vec::new(),
};
let mut rng = SmallRng::from_rng(&mut rand::rng());
let chunks = self
@ -563,6 +563,8 @@ impl Level {
ticks.block_ticks.sort_unstable();
ticks.fluid_ticks.sort_unstable();
ticks
}
pub async fn clean_entity_chunk(self: &Arc<Self>, chunk: &Vector2<i32>) {
@ -905,12 +907,3 @@ impl Level {
chunk.fluid_ticks.is_scheduled(*block_pos, fluid)
}
}
impl TickData {
fn clear(&mut self) {
self.block_entities.clear();
self.block_ticks.clear();
self.fluid_ticks.clear();
self.random_ticks.clear();
}
}

View File

@ -678,9 +678,8 @@ impl World {
}
pub async fn tick_chunks(self: &Arc<Self>) {
self.level.get_tick_data().await;
let tick_data = &self.level.tick_data;
for scheduled_tick in &tick_data.lock().await.block_ticks {
let tick_data = self.level.get_tick_data().await;
for scheduled_tick in tick_data.block_ticks {
let block = self.get_block(&scheduled_tick.position).await;
if let Some(pumpkin_block) = self.block_registry.get_pumpkin_block(block) {
pumpkin_block
@ -692,7 +691,7 @@ impl World {
.await;
}
}
for scheduled_tick in &tick_data.lock().await.fluid_ticks {
for scheduled_tick in tick_data.fluid_ticks {
let fluid = self.get_fluid(&scheduled_tick.position).await;
if let Some(pumpkin_fluid) = self.block_registry.get_pumpkin_fluid(fluid) {
pumpkin_fluid
@ -777,7 +776,7 @@ impl World {
.unwrap_or(Duration::new(0, 0))
);
for block_entity in &tick_data.lock().await.block_entities {
for block_entity in tick_data.block_entities {
let world: Arc<dyn SimpleWorld> = self.clone();
block_entity.tick(world).await;
}