update valence + impl damage tilt

master
Drake 1 year ago
parent 85c9cc6657
commit 4d1869cea6

10
Cargo.lock generated

@ -1830,7 +1830,7 @@ dependencies = [
[[package]]
name = "valence"
version = "0.2.0+mc1.19.4"
source = "git+https://github.com/valence-rs/valence?rev=1c405ab#1c405ab63c1c3632b5444f33ae7f79d8753bb909"
source = "git+https://github.com/valence-rs/valence?rev=58a3fbf#58a3fbf6a3d179a3223d54e30d78538f005bbfa1"
dependencies = [
"anyhow",
"arrayvec",
@ -1886,7 +1886,7 @@ dependencies = [
[[package]]
name = "valence_anvil"
version = "0.1.0"
source = "git+https://github.com/valence-rs/valence?rev=1c405ab#1c405ab63c1c3632b5444f33ae7f79d8753bb909"
source = "git+https://github.com/valence-rs/valence?rev=58a3fbf#58a3fbf6a3d179a3223d54e30d78538f005bbfa1"
dependencies = [
"byteorder",
"flate2",
@ -1899,7 +1899,7 @@ dependencies = [
[[package]]
name = "valence_nbt"
version = "0.5.0"
source = "git+https://github.com/valence-rs/valence?rev=1c405ab#1c405ab63c1c3632b5444f33ae7f79d8753bb909"
source = "git+https://github.com/valence-rs/valence?rev=58a3fbf#58a3fbf6a3d179a3223d54e30d78538f005bbfa1"
dependencies = [
"byteorder",
"cesu8",
@ -1909,7 +1909,7 @@ dependencies = [
[[package]]
name = "valence_protocol"
version = "0.1.0"
source = "git+https://github.com/valence-rs/valence?rev=1c405ab#1c405ab63c1c3632b5444f33ae7f79d8753bb909"
source = "git+https://github.com/valence-rs/valence?rev=58a3fbf#58a3fbf6a3d179a3223d54e30d78538f005bbfa1"
dependencies = [
"aes",
"anyhow",
@ -1934,7 +1934,7 @@ dependencies = [
[[package]]
name = "valence_protocol_macros"
version = "0.1.0"
source = "git+https://github.com/valence-rs/valence?rev=1c405ab#1c405ab63c1c3632b5444f33ae7f79d8753bb909"
source = "git+https://github.com/valence-rs/valence?rev=58a3fbf#58a3fbf6a3d179a3223d54e30d78538f005bbfa1"
dependencies = [
"proc-macro2",
"quote",

@ -8,9 +8,9 @@ edition = "2021"
[dependencies]
tracing = "0.1.37"
tracing-subscriber = "0.3.16"
valence = { git = "https://github.com/valence-rs/valence", rev = "1c405ab" }
valence_protocol = { git = "https://github.com/valence-rs/valence", rev = "1c405ab" }
valence_anvil = { git = "https://github.com/valence-rs/valence", rev = "1c405ab" }
valence = { git = "https://github.com/valence-rs/valence", rev = "58a3fbf" }
valence_protocol = { git = "https://github.com/valence-rs/valence", rev = "58a3fbf" }
valence_anvil = { git = "https://github.com/valence-rs/valence", rev = "58a3fbf" }
flume = "0.10.14"
anyhow = "1.0.70"
once_cell = "1.17.1"

@ -1,4 +1,4 @@
use valence::prelude::{event::ChatMessage, *};
use valence::{client::misc::ChatMessage, prelude::*};
pub fn chat_handler(
mut clients: Query<(&mut Client, &Username)>,

@ -1,5 +1,6 @@
use valence::bevy_ecs;
use valence::prelude::{event::PlayerInteractBlock, *};
use valence::client::misc::InteractBlock;
use valence::prelude::*;
use valence_protocol::block::BlockEntityKind;
#[derive(Component, Debug)]
@ -15,7 +16,7 @@ pub fn open_chests(
mut commands: Commands,
chests: Query<(Entity, &Inventory, &Pos), (With<Inventory>, With<Pos>)>,
instances: Query<&Instance>,
mut events: EventReader<PlayerInteractBlock>,
mut events: EventReader<InteractBlock>,
) {
let instance = instances.single();
for event in events.iter() {

@ -1,9 +1,29 @@
mod gamemode;
use valence::prelude::{
event::{CommandExecution, RequestCommandCompletions},
*,
};
use valence::{event_loop::PacketEvent, prelude::*};
use valence_protocol::packet::c2s::play::CommandExecutionC2s;
#[derive(Clone, Debug)]
pub struct CommandExecution {
pub client: Entity,
pub command: String,
pub timestamp: u64,
}
pub fn handle_command_execution(
mut packets: EventReader<PacketEvent>,
mut events: EventWriter<CommandExecution>,
) {
for packet in packets.iter() {
if let Some(pkt) = packet.decode::<CommandExecutionC2s>() {
events.send(CommandExecution {
client: packet.client,
command: pkt.command.to_string(),
timestamp: pkt.timestamp,
})
}
}
}
pub struct Command {
pub name: String,
@ -42,13 +62,3 @@ pub fn command_executor(
}
}
}
pub fn command_suggestor(
mut clients: Query<&mut Client>,
mut events: EventReader<RequestCommandCompletions>,
) {
for event in events.iter() {
let _client = clients.get_mut(event.client).unwrap();
println!("{:?}", event);
}
}

@ -11,7 +11,8 @@ use std::net::SocketAddr;
use std::sync::atomic::AtomicI32;
use std::sync::atomic::Ordering;
use valence::client::default_event_handler;
use commands::handle_command_execution;
use commands::CommandExecution;
use valence::prelude::*;
pub static PLAYER_COUNT: AtomicI32 = AtomicI32::new(0);
@ -44,14 +45,19 @@ fn main() {
App::new()
.add_plugin(server)
.add_startup_system(world::setup)
.add_event::<CommandExecution>()
.add_system(
handle_command_execution
.in_schedule(EventLoopSchedule)
.in_base_set(EventLoopSet::PreUpdate),
)
.add_systems(
(
default_event_handler,
//default_event_handler,
//special::tnt,
chat::chat_handler,
chests::open_chests,
commands::command_executor,
commands::command_suggestor,
player::fall_damage,
player::death,
player::respawn,
@ -63,6 +69,5 @@ fn main() {
chat::player_joined,
player::despawn_disconnected_clients,
))
.add_systems(PlayerList::default_systems())
.run();
}

@ -4,17 +4,12 @@ use std::{
};
use crate::utils::get_death_message;
use once_cell::sync::Lazy;
use valence::bevy_ecs;
use valence::{
entity::{living::Health, player::PlayerEntityBundle, EntityId},
packet::WritePacket,
prelude::{event::PerformRespawn, *},
};
use valence::{bevy_ecs, client::misc::Respawn};
use valence::{entity::living::Health, packet::WritePacket, prelude::*};
use valence_protocol::{
packet::s2c::play::{
synchronize_tags::{Tag, TagGroup},
ChunkRenderDistanceCenterS2c, SynchronizeTagsS2c,
ChunkRenderDistanceCenterS2c, DamageTiltS2c, SynchronizeTagsS2c,
},
var_int::VarInt,
Encode,
@ -33,37 +28,32 @@ pub fn init_clients(
(
&mut Position,
Entity,
&UniqueId,
&mut Client,
&mut GameMode,
&Username,
&mut HasRespawnScreen,
&mut Location,
),
Added<Client>,
>,
instances: Query<Entity, With<Instance>>,
mut commands: Commands,
) {
for (_pos, entity, uuid, mut client, mut game_mode, username, mut has_respawn_screen) in
for (mut pos, entity, mut client, mut game_mode, username, mut has_respawn_screen, mut loc) in
&mut new_clients
{
// initialize client
has_respawn_screen.0 = true;
*game_mode = GameMode::Creative;
commands.entity(entity).insert((
OldHeight(-1.0),
Alive(true),
PlayerEntityBundle {
location: Location(instances.single()),
position: Position(DVec3 {
x: -214.0,
y: 83.0,
z: 276.0,
}),
uuid: *uuid,
..Default::default()
},
));
loc.0 = instances.single();
pos.set(DVec3 {
x: -214.0,
y: 83.0,
z: 276.0,
});
commands
.entity(entity)
.insert((OldHeight(-1.0), Alive(true)));
// send packet that magically fixes chunks
// TODO: make this configurable as different maps will have different chunks we need to force load
@ -107,6 +97,13 @@ pub fn init_clients(
}
}
fn apply_damage_tilt(mut client: Mut<Client>) {
client.write_packet(&DamageTiltS2c {
entity_id: VarInt(0),
yaw: 0.0,
})
}
pub fn fall_damage(
mut clients: Query<
(
@ -122,8 +119,7 @@ pub fn fall_damage(
instances: Query<&Instance>,
) {
let instance = instances.single();
for (_client, on_ground, mut health, gamemode, position, mut historical_position) in
&mut clients
for (client, on_ground, mut health, gamemode, position, mut historical_position) in &mut clients
{
let current_block = instance
.block(BlockPos {
@ -146,6 +142,7 @@ pub fn fall_damage(
if on_ground.0 {
if delta_y > 3.0 {
health.0 -= (delta_y - 3.0) as f32;
apply_damage_tilt(client);
}
historical_position.0 = position.0.y;
} else if delta_y < 0.0 {
@ -199,7 +196,7 @@ pub fn respawn(
&mut Health,
&mut Alive,
)>,
mut events: EventReader<PerformRespawn>,
mut events: EventReader<Respawn>,
instances: Query<Entity, With<Instance>>,
) {
for event in events.iter() {

Loading…
Cancel
Save