From f02db24e8c3395f387b735400525ba739c79e826 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Tue, 10 Jan 2023 18:05:38 +0000 Subject: [PATCH] fix warnings --- azalea-client/src/chat.rs | 1 + azalea-client/src/client.rs | 26 ++---- azalea-client/src/local_player.rs | 26 ++---- azalea-client/src/movement.rs | 19 ++--- azalea-client/src/packet_handling.rs | 84 ++++++++----------- .../src/collision/world_collisions.rs | 2 +- .../game/clientbound_add_player_packet.rs | 2 +- azalea-world/src/entity/dimensions.rs | 6 +- azalea-world/src/entity/metadata.rs | 2 + azalea-world/src/entity/mod.rs | 10 +-- azalea-world/src/entity_info.rs | 29 ++++--- azalea-world/src/world.rs | 7 +- codegen/lib/code/entity.py | 4 +- 13 files changed, 83 insertions(+), 135 deletions(-) diff --git a/azalea-client/src/chat.rs b/azalea-client/src/chat.rs index 82d00fca..f93cc3ac 100755 --- a/azalea-client/src/chat.rs +++ b/azalea-client/src/chat.rs @@ -111,6 +111,7 @@ impl Client { last_seen_messages: LastSeenMessagesUpdate::default(), } .get(); + self.write_packet(packet); } /// Send a command packet to the server. The `command` argument should not diff --git a/azalea-client/src/client.rs b/azalea-client/src/client.rs index c4cc14ca..7dda2097 100644 --- a/azalea-client/src/client.rs +++ b/azalea-client/src/client.rs @@ -32,26 +32,15 @@ use azalea_protocol::{ use azalea_world::{entity::Entity, EntityInfos, PartialWorld, World, WorldContainer}; use bevy_app::App; use bevy_ecs::{ - query::{QueryState, ROQueryItem, WorldQuery}, + query::WorldQuery, schedule::{IntoSystemDescriptor, Schedule, Stage, SystemSet}, }; use iyes_loopless::prelude::*; -use log::{debug, error, warn}; -use parking_lot::{Mutex, MutexGuard, RwLock}; -use std::{ - fmt::Debug, - io::{self}, - marker::PhantomData, - ops::{Deref, DerefMut}, - sync::Arc, - time::Duration, -}; +use log::{debug, error}; +use parking_lot::{Mutex, RwLock}; +use std::{fmt::Debug, io, ops::DerefMut, sync::Arc, time::Duration}; use thiserror::Error; -use tokio::{ - sync::mpsc::{self, Receiver}, - task::JoinHandle, - time::{self}, -}; +use tokio::{sync::mpsc, time}; pub type ClientInformation = ServerboundClientInformationPacket; @@ -107,9 +96,6 @@ pub struct Client { pub ecs: Arc>, } -/// Whether we should ignore errors when decoding packets. -const IGNORE_ERRORS: bool = !cfg!(debug_assertions); - /// An error that happened while joining the server. #[derive(Error, Debug)] pub enum JoinError { @@ -210,7 +196,7 @@ impl Client { entity, game_profile, packet_writer_sender, - world.clone(), + world, ecs.resource_mut::().deref_mut(), tx, ); diff --git a/azalea-client/src/local_player.rs b/azalea-client/src/local_player.rs index 93c89416..d027b656 100644 --- a/azalea-client/src/local_player.rs +++ b/azalea-client/src/local_player.rs @@ -1,20 +1,14 @@ -use std::{ - collections::HashMap, - io, - ops::{Deref, DerefMut}, - sync::Arc, -}; +use std::{collections::HashMap, io, sync::Arc}; use azalea_auth::game_profile::GameProfile; use azalea_core::{ChunkPos, ResourceLocation}; -use azalea_protocol::{connect::WriteConnection, packets::game::ServerboundGamePacket}; +use azalea_protocol::packets::game::ServerboundGamePacket; use azalea_world::{ entity::{self, Dead, Entity}, - EntityInfos, PartialWorld, World, WorldContainer, + EntityInfos, PartialWorld, World, }; use bevy_ecs::{component::Component, query::Added, system::Query}; -use derive_more::{Deref, DerefMut}; -use parking_lot::{Mutex, RwLock}; +use parking_lot::RwLock; use thiserror::Error; use tokio::{sync::mpsc, task::JoinHandle}; use uuid::Uuid; @@ -136,7 +130,7 @@ pub fn update_in_loaded_chunk( mut commands: bevy_ecs::system::Commands, query: Query<(Entity, &LocalPlayer, &entity::Position)>, ) { - for (ecs_entity_id, local_player, position) in &query { + for (entity, local_player, position) in &query { let player_chunk_pos = ChunkPos::from(position); let in_loaded_chunk = local_player .world @@ -145,13 +139,9 @@ pub fn update_in_loaded_chunk( .get(&player_chunk_pos) .is_some(); if in_loaded_chunk { - commands - .entity(ecs_entity_id) - .insert(LocalPlayerInLoadedChunk); + commands.entity(entity).insert(LocalPlayerInLoadedChunk); } else { - commands - .entity(ecs_entity_id) - .remove::(); + commands.entity(entity).remove::(); } } } @@ -159,7 +149,7 @@ pub fn update_in_loaded_chunk( /// Send the "Death" event for [`LocalPlayer`]s that died with no reason. pub fn death_event(query: Query<&LocalPlayer, Added>) { for local_player in &query { - local_player.tx.send(Event::Death(None)); + local_player.tx.send(Event::Death(None)).unwrap(); } } diff --git a/azalea-client/src/movement.rs b/azalea-client/src/movement.rs index 9289827c..da9d4639 100644 --- a/azalea-client/src/movement.rs +++ b/azalea-client/src/movement.rs @@ -7,7 +7,7 @@ use azalea_protocol::packets::game::{ serverbound_move_player_rot_packet::ServerboundMovePlayerRotPacket, serverbound_move_player_status_only_packet::ServerboundMovePlayerStatusOnlyPacket, }; -use azalea_world::entity::{Entity, MinecraftEntityId}; +use azalea_world::entity::MinecraftEntityId; use azalea_world::{entity, MoveEntityError}; use bevy_ecs::system::Query; use std::backtrace::Backtrace; @@ -65,7 +65,6 @@ impl Client { pub(crate) fn send_position( mut query: Query< ( - Entity, &MinecraftEntityId, &mut LocalPlayer, &entity::Position, @@ -76,10 +75,10 @@ pub(crate) fn send_position( &LocalPlayerInLoadedChunk, >, ) { - for (entity, id, mut local_player, position, mut last_sent_position, mut physics, sprinting) in + for (id, mut local_player, position, mut last_sent_position, mut physics, sprinting) in query.iter_mut() { - local_player.send_sprinting_if_needed(entity.into(), id, sprinting); + local_player.send_sprinting_if_needed(id, sprinting); let packet = { // TODO: the camera being able to be controlled by other entities isn't @@ -169,7 +168,6 @@ pub(crate) fn send_position( impl LocalPlayer { fn send_sprinting_if_needed( &mut self, - entity: Entity, id: &MinecraftEntityId, sprinting: &entity::metadata::Sprinting, ) { @@ -311,7 +309,6 @@ impl LocalPlayer { pub fn local_player_ai_step( mut query: Query< ( - Entity, &mut LocalPlayer, &mut entity::Physics, &mut entity::Position, @@ -321,14 +318,8 @@ pub fn local_player_ai_step( &LocalPlayerInLoadedChunk, >, ) { - for ( - ecs_entity_id, - mut local_player, - mut physics, - mut position, - mut sprinting, - mut attributes, - ) in query.iter_mut() + for (mut local_player, mut physics, mut position, mut sprinting, mut attributes) in + query.iter_mut() { let physics_state = &mut local_player.physics_state; diff --git a/azalea-client/src/packet_handling.rs b/azalea-client/src/packet_handling.rs index 438f56c0..a3c79999 100644 --- a/azalea-client/src/packet_handling.rs +++ b/azalea-client/src/packet_handling.rs @@ -27,7 +27,6 @@ use bevy_ecs::{ schedule::{IntoSystemDescriptor, SystemSet}, system::{Commands, Query, ResMut}, }; -use iyes_loopless::prelude::*; use log::{debug, error, trace, warn}; use parking_lot::Mutex; use tokio::sync::mpsc; @@ -83,7 +82,7 @@ fn handle_packet( packet: &ClientboundGamePacket, ) { match packet { - ClientboundGamePacket::Login(p) => { + ClientboundGamePacket::Login(_p) => { // handled by the handle_login_packet system } ClientboundGamePacket::SetChunkCacheRadius(p) => { @@ -110,8 +109,8 @@ fn handle_packet( ClientboundGamePacket::Disconnect(p) => { debug!("Got disconnect packet {:?}", p); - let (mut local_player,) = ecs - .query::<(&mut LocalPlayer,)>() + let local_player = ecs + .query::<&mut LocalPlayer>() .get_mut(ecs, player_entity) .unwrap(); @@ -230,7 +229,7 @@ fn handle_packet( local_player .players .insert(updated_info.profile.uuid, player_info.clone()); - local_player.tx.send(Event::AddPlayer(player_info)); + local_player.tx.send(Event::AddPlayer(player_info)).unwrap(); } else if let Some(info) = local_player.players.get_mut(&updated_info.profile.uuid) { // `else if` because the block for add_player above @@ -245,7 +244,7 @@ fn handle_packet( info.display_name = updated_info.display_name.clone(); } let info = info.clone(); - local_player.tx.send(Event::UpdatePlayer(info)); + local_player.tx.send(Event::UpdatePlayer(info)).unwrap(); } else { warn!( "Ignoring PlayerInfoUpdate for unknown player {}", @@ -262,17 +261,14 @@ fn handle_packet( for uuid in &p.profile_ids { if let Some(info) = local_player.players.remove(uuid) { - local_player.tx.send(Event::RemovePlayer(info)); + local_player.tx.send(Event::RemovePlayer(info)).unwrap(); } } } ClientboundGamePacket::SetChunkCacheCenter(p) => { debug!("Got chunk cache center packet {:?}", p); - let mut local_player = ecs - .query::<&mut LocalPlayer>() - .get(ecs, player_entity) - .unwrap(); + let local_player = ecs.query::<&LocalPlayer>().get(ecs, player_entity).unwrap(); let mut partial_world = local_player.partial_world.write(); partial_world.chunks.view_center = ChunkPos::new(p.x, p.z); @@ -281,10 +277,7 @@ fn handle_packet( // debug!("Got chunk with light packet {} {}", p.x, p.z); let pos = ChunkPos::new(p.x, p.z); - let mut local_player = ecs - .query::<&mut LocalPlayer>() - .get(ecs, player_entity) - .unwrap(); + let local_player = ecs.query::<&LocalPlayer>().get(ecs, player_entity).unwrap(); let world = local_player.world.read(); let partial_world = local_player.partial_world.read(); @@ -347,7 +340,9 @@ fn handle_packet( if let Some(entity) = entity { let mut entity_mut = ecs.entity_mut(entity); - apply_metadata(&mut entity_mut, (*p.packed_items).clone()); + if let Err(e) = apply_metadata(&mut entity_mut, (*p.packed_items).clone()) { + warn!("{e}"); + } } else { warn!("Server sent an entity data packet for an entity id ({}) that we don't know about", p.id); } @@ -484,26 +479,22 @@ fn handle_packet( ClientboundGamePacket::PlayerChat(p) => { debug!("Got player chat packet {:?}", p); - let mut local_player = ecs - .query::<&mut LocalPlayer>() - .get(ecs, player_entity) - .unwrap(); + let local_player = ecs.query::<&LocalPlayer>().get(ecs, player_entity).unwrap(); local_player .tx - .send(Event::Chat(ChatPacket::Player(Arc::new(p.clone())))); + .send(Event::Chat(ChatPacket::Player(Arc::new(p.clone())))) + .unwrap(); } ClientboundGamePacket::SystemChat(p) => { debug!("Got system chat packet {:?}", p); - let mut local_player = ecs - .query::<&mut LocalPlayer>() - .get(ecs, player_entity) - .unwrap(); + let local_player = ecs.query::<&LocalPlayer>().get(ecs, player_entity).unwrap(); local_player .tx - .send(Event::Chat(ChatPacket::System(Arc::new(p.clone())))); + .send(Event::Chat(ChatPacket::System(Arc::new(p.clone())))) + .unwrap(); } ClientboundGamePacket::Sound(_p) => { // debug!("Got sound packet {:?}", p); @@ -514,11 +505,8 @@ fn handle_packet( ClientboundGamePacket::BlockUpdate(p) => { debug!("Got block update packet {:?}", p); - let mut local_player = ecs - .query::<&mut LocalPlayer>() - .get(ecs, player_entity) - .unwrap(); - let mut world = local_player.world.write(); + let local_player = ecs.query::<&LocalPlayer>().get(ecs, player_entity).unwrap(); + let world = local_player.world.write(); world.chunks.set_block_state(&p.pos, p.block_state); } @@ -527,11 +515,8 @@ fn handle_packet( } ClientboundGamePacket::SectionBlocksUpdate(p) => { debug!("Got section blocks update packet {:?}", p); - let mut local_player = ecs - .query::<&mut LocalPlayer>() - .get(ecs, player_entity) - .unwrap(); - let mut world = local_player.world.write(); + let local_player = ecs.query::<&LocalPlayer>().get(ecs, player_entity).unwrap(); + let world = local_player.world.write(); for state in &p.states { world @@ -587,18 +572,17 @@ fn handle_packet( .get(ecs, player_entity) .unwrap(); - if *entity_id == p.player_id { - if dead.is_none() { - ecs.entity_mut(player_entity).insert(Dead); + if *entity_id == p.player_id && dead.is_none() { + ecs.entity_mut(player_entity).insert(Dead); - let local_player = ecs - .query::<&mut LocalPlayer>() - .get_mut(ecs, player_entity) - .unwrap(); - local_player - .tx - .send(Event::Death(Some(Arc::new(p.clone())))); - } + let local_player = ecs + .query::<&mut LocalPlayer>() + .get_mut(ecs, player_entity) + .unwrap(); + local_player + .tx + .send(Event::Death(Some(Arc::new(p.clone())))) + .unwrap(); } } ClientboundGamePacket::PlayerLookAt(_) => {} @@ -711,15 +695,15 @@ fn handle_login_packet( let weak_world = world_container.insert(world_name.clone(), height, min_y); // set the partial_world to an empty world // (when we add chunks or entities those will be in the world_container) - let mut partial_world_lock = local_player.partial_world.write(); - *partial_world_lock = PartialWorld::new( + *local_player.partial_world.write() = PartialWorld::new( local_player.client_information.view_distance.into(), // this argument makes it so other clients don't update this player entity // in a shared world Some(player_entity), &mut entity_infos, ); + local_player.world = weak_world; let player_bundle = PlayerBundle { entity: EntityBundle::new( @@ -755,7 +739,7 @@ fn handle_login_packet( .get(), ); - local_player.tx.send(Event::Login); + local_player.tx.send(Event::Login).unwrap(); } } } diff --git a/azalea-physics/src/collision/world_collisions.rs b/azalea-physics/src/collision/world_collisions.rs index d04b7cda..9e300c42 100644 --- a/azalea-physics/src/collision/world_collisions.rs +++ b/azalea-physics/src/collision/world_collisions.rs @@ -6,7 +6,7 @@ use azalea_world::{Chunk, World}; use parking_lot::RwLock; use std::sync::Arc; -pub fn get_block_collisions<'a>(world: &'a World, aabb: AABB) -> BlockCollisions<'a> { +pub fn get_block_collisions(world: &World, aabb: AABB) -> BlockCollisions<'_> { BlockCollisions::new(world, aabb) } diff --git a/azalea-protocol/src/packets/game/clientbound_add_player_packet.rs b/azalea-protocol/src/packets/game/clientbound_add_player_packet.rs index 302b96d3..4cbeb1b9 100755 --- a/azalea-protocol/src/packets/game/clientbound_add_player_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_add_player_packet.rs @@ -2,7 +2,7 @@ use azalea_buf::McBuf; use azalea_core::{ResourceLocation, Vec3}; use azalea_protocol_macros::ClientboundGamePacket; use azalea_registry::EntityKind; -use azalea_world::entity::{metadata::PlayerMetadataBundle, Dead, EntityBundle, PlayerBundle}; +use azalea_world::entity::{metadata::PlayerMetadataBundle, EntityBundle, PlayerBundle}; use uuid::Uuid; /// This packet is sent by the server when a player comes into visible range, diff --git a/azalea-world/src/entity/dimensions.rs b/azalea-world/src/entity/dimensions.rs index 9a886670..5e716307 100755 --- a/azalea-world/src/entity/dimensions.rs +++ b/azalea-world/src/entity/dimensions.rs @@ -32,11 +32,7 @@ impl EntityDimensions { /// Cached position in the world must be updated. pub fn update_bounding_box(mut query: Query<(&Position, &mut Physics), Changed>) { for (position, mut physics) in query.iter_mut() { - let bounding_box = physics.dimensions.make_bounding_box(&position); + let bounding_box = physics.dimensions.make_bounding_box(position); physics.bounding_box = bounding_box; } } - -pub fn make_bounding_box(pos: &Position, physics: &Physics) -> AABB { - physics.dimensions.make_bounding_box(&pos) -} diff --git a/azalea-world/src/entity/metadata.rs b/azalea-world/src/entity/metadata.rs index 88644a75..fbcf83a6 100644 --- a/azalea-world/src/entity/metadata.rs +++ b/azalea-world/src/entity/metadata.rs @@ -1,3 +1,5 @@ +#![allow(clippy::single_match)] + // This file is generated from codegen/lib/code/entity.py. // Don't change it manually! diff --git a/azalea-world/src/entity/mod.rs b/azalea-world/src/entity/mod.rs index 7ec14613..269e19ee 100644 --- a/azalea-world/src/entity/mod.rs +++ b/azalea-world/src/entity/mod.rs @@ -1,3 +1,5 @@ +#![allow(clippy::derive_hash_xor_eq)] + pub mod attributes; mod data; mod dimensions; @@ -5,17 +7,14 @@ pub mod metadata; use crate::ChunkStorage; -use self::{ - attributes::AttributeInstance, - metadata::{Health, UpdateMetadataError}, -}; +use self::{attributes::AttributeInstance, metadata::Health}; pub use attributes::Attributes; use azalea_block::BlockState; use azalea_core::{BlockPos, ChunkPos, ResourceLocation, Vec3, AABB}; use bevy_ecs::{ bundle::Bundle, component::Component, - query::{Changed, Without}, + query::Changed, system::{Commands, Query}, }; pub use data::*; @@ -43,7 +42,6 @@ impl std::hash::Hash for MinecraftEntityId { } } impl nohash_hasher::IsEnabled for MinecraftEntityId {} - pub fn set_rotation(physics: &mut Physics, y_rot: f32, x_rot: f32) { physics.y_rot = y_rot % 360.0; physics.x_rot = x_rot.clamp(-90.0, 90.0) % 360.0; diff --git a/azalea-world/src/entity_info.rs b/azalea-world/src/entity_info.rs index 75db08d8..a6f1648d 100644 --- a/azalea-world/src/entity_info.rs +++ b/azalea-world/src/entity_info.rs @@ -3,7 +3,7 @@ use crate::{ MaybeRemovedEntity, World, WorldContainer, }; use azalea_core::ChunkPos; -use bevy_app::{App, CoreStage, Plugin}; +use bevy_app::{App, Plugin}; use bevy_ecs::{ query::Changed, schedule::SystemSet, @@ -120,7 +120,7 @@ impl PartialEntityInfos { return true; }; - let this_client_updates_received = self.updates_received.get(&id).copied(); + let this_client_updates_received = self.updates_received.get(id).copied(); let shared_updates_received = entity_infos.updates_received.get(&entity).copied(); @@ -187,8 +187,17 @@ impl EntityInfos { warn!("Tried to remove entity but it was not found."); return false; } - if world.entities_by_chunk.remove(&chunk).is_none() { - warn!("Tried to remove entity from chunk {chunk:?} but it was not found."); + if let Some(entities_in_chunk) = world.entities_by_chunk.get_mut(&chunk) { + if entities_in_chunk.remove(&entity) { + // remove the chunk if there's no entities in it anymore + if entities_in_chunk.is_empty() { + world.entities_by_chunk.remove(&chunk); + } + } else { + warn!("Tried to remove entity from chunk {chunk:?} but the entity was not there."); + } + } else { + warn!("Tried to remove entity from chunk {chunk:?} but the chunk was not found."); } if self.entity_by_uuid.remove(&uuid).is_none() { warn!("Tried to remove entity from uuid {uuid:?} but it was not found."); @@ -236,7 +245,7 @@ fn update_entity_chunk_positions( world_container: Res, ) { for (entity, pos, last_pos, world_name) in query.iter_mut() { - let world_lock = world_container.get(&**world_name).unwrap(); + let world_lock = world_container.get(world_name).unwrap(); let mut world = world_lock.write(); let old_chunk = ChunkPos::from(*last_pos); @@ -280,16 +289,6 @@ pub fn remove_despawned_entities_from_indexes( } } -/// Remove a chunk from the storage if the entities in it have no strong -/// references left. -pub fn remove_chunk_if_unused(world: &mut World, chunk: &ChunkPos) { - if let Some(entities) = world.entities_by_chunk.get(chunk) { - if entities.is_empty() { - world.entities_by_chunk.remove(chunk); - } - } -} - impl Debug for EntityInfos { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.debug_struct("EntityInfos").finish() diff --git a/azalea-world/src/world.rs b/azalea-world/src/world.rs index 973fba38..cd04e628 100644 --- a/azalea-world/src/world.rs +++ b/azalea-world/src/world.rs @@ -1,9 +1,8 @@ use crate::{ entity::{self, Entity, MinecraftEntityId, WorldName}, - Chunk, ChunkStorage, EntityInfos, MoveEntityError, PartialChunkStorage, PartialEntityInfos, - WorldContainer, + ChunkStorage, EntityInfos, PartialChunkStorage, PartialEntityInfos, WorldContainer, }; -use azalea_core::{ChunkPos, PositionDelta8}; +use azalea_core::ChunkPos; use bevy_ecs::{ component::Component, system::{Commands, Query}, @@ -116,7 +115,7 @@ pub fn clear_entities_in_chunk( if let Some(entities) = world.entities_by_chunk.get(chunk).cloned() { for &entity in &entities { let id = query.get(entity).unwrap(); - if partial_entity_infos.loaded_entity_ids.remove(&id) { + if partial_entity_infos.loaded_entity_ids.remove(id) { // maybe remove it from the storage commands.entity(entity).insert(MaybeRemovedEntity); } diff --git a/codegen/lib/code/entity.py b/codegen/lib/code/entity.py index 21091583..7c041d91 100644 --- a/codegen/lib/code/entity.py +++ b/codegen/lib/code/entity.py @@ -37,7 +37,9 @@ def generate_entity_metadata(burger_entity_data: dict, mappings: Mappings): ] code = [] - code.append('''// This file is generated from codegen/lib/code/entity.py. + code.append('''#![allow(clippy::single_match)] + +// This file is generated from codegen/lib/code/entity.py. // Don't change it manually! use super::{EntityDataItem, EntityDataValue, OptionalUnsignedInt, Pose, Rotations, VillagerData};