-
-
Notifications
You must be signed in to change notification settings - Fork 145
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Damaging entities + death #556
Labels
enhancement
New feature or request
Comments
This was referenced Oct 12, 2023
Closed
Closed
Merged
dyc3
added a commit
that referenced
this issue
Oct 13, 2023
# Problem See #557 Will be necessary to implement #556 and #558 # Objective Implement absorption for ALL living entities. # Solution Make a special case for LivingEntity for Absorption since it's untracked. # Playground <details> <summary>Playground</summary> ```rs use valence::client::despawn_disconnected_clients; use valence::entity::living::Absorption; use valence::log::LogPlugin; use valence::network::ConnectionMode; use valence::prelude::*; #[allow(unused_imports)] use crate::extras::*; const SPAWN_Y: i32 = 64; pub fn build_app(app: &mut App) { app.insert_resource(NetworkSettings { connection_mode: ConnectionMode::Offline, ..Default::default() }) .add_plugins(DefaultPlugins.build().disable::<LogPlugin>()) .add_systems(Startup, setup) .add_systems(EventLoopUpdate, toggle_absorption_on_sneak) .add_systems(Update, (init_clients, despawn_disconnected_clients)) .run(); } fn setup( mut commands: Commands, server: Res<Server>, biomes: Res<BiomeRegistry>, dimensions: Res<DimensionTypeRegistry>, ) { let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); for z in -5..5 { for x in -5..5 { layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); } } for z in -25..25 { for x in -25..25 { layer .chunk .set_block([x, SPAWN_Y, z], BlockState::GRASS_BLOCK); } } commands.spawn(layer); } fn init_clients( mut clients: Query< ( &mut EntityLayerId, &mut VisibleChunkLayer, &mut VisibleEntityLayers, &mut Position, &mut GameMode, ), Added<Client>, >, layers: Query<Entity, (With<ChunkLayer>, With<EntityLayer>)>, ) { for ( mut layer_id, mut visible_chunk_layer, mut visible_entity_layers, mut pos, mut game_mode, ) in &mut clients { let layer = layers.single(); layer_id.0 = layer; visible_chunk_layer.0 = layer; visible_entity_layers.0.insert(layer); pos.set([0.0, SPAWN_Y as f64 + 1.0, 0.0]); *game_mode = GameMode::Survival; } } pub fn toggle_absorption_on_sneak( mut clients: Query<&mut Absorption>, mut events: EventReader<SneakEvent>, ) { for event in events.iter() { if event.state == SneakState::Start { if let Ok(mut absorption) = clients.get_mut(event.client) { absorption.0 = if absorption.0 == 0.0 { 4.0 } else { 0.0 }; } } } } ``` </details> --------- Co-authored-by: Carson McManus <[email protected]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Describe the problem related to your feature request.
We need a way to damage & heal entities. We can currently just set their health via
valence_entity::living::Health
, but there are a few problems with this:If decrementing health:
If incrementing health:
EntityAttributes
What solution would you like?
What alternative(s) have you considered?
Just setting
Health
, but it has drawbacks as previously mentioned.Additional context
See
net.minecraft.entity.damage
The text was updated successfully, but these errors were encountered: