1
2
Fork 0
mirror of https://github.com/mat-1/azalea.git synced 2025-08-02 14:26:04 +00:00
azalea/azalea-protocol/src/packets/game/serverbound_interact_packet.rs
mat f42d630544
Physics (#11)
* Put physics module in azalea-entity

* port aabb

* add more stuff to PositionXYZ

* azalea-physics

* important collision things

* more physics stuff

* backup because i'm about to delete shapes

* more shape stuff

* CubeVoxelShape

* no compile errors???

insane

* impl VoxelShape for ArrayVoxelShape

* Shapes stuff

* collide_x but it doesn't work yet

* binary_search

* it compiles

* Entity has bounding box

* Update discrete_voxel_shape.rs

* Entity::make_bounding_box

* ok i'm about to merge az-entity and az-world

might be a terrible idea which is why i'm committing first

* ok so i moved entity to world

* on_pos and move_entity compiles

* add send_position

* move collision stuff to collision module in az-physics

* dimension is no longer an Option

* start trying to do collision for the client

* collision works 🎉

* start adding palette resizing

* get_and_set (pain)

* it compiles but probably won't work

* add a test

* remove printlns

* add more tests for palette stuff

* ClientboundMoveVec3Packet -> ClientboundMoveEntityPosPacket

i think i changed this on accident once

* palette resizing works

todo: remove the printlns

* Remove printlns in palette.rs

* fix issues from merge

* fixes + work a bit more on physics

* Better entities (#19)

* well it compiles

* add tests to entity storage

* add suggestions in azalea-brigadier

* this probably causes ub

* fix brigadiersuggestions

* get rid of entityid

* test From<EntityMut> for EntityRef

* don't mention other libraries since there's too many

* fix warnings

* do todos in brigadier suggestions

* work on physics

* more physics stuff

* remove trait feature on az-block

i think rust gets confused and compiles the macro without the feature

* bump ahash

* aes tests in az-crypto

* optimize aes's deps

* fix crashes

* fix section_index for negative numbers and test

* fix BlockPos protocol implementation

* remove some debug prints

* prepare to add ai_step

* make ai step work

* clippy
2022-08-29 20:41:01 -05:00

84 lines
2.4 KiB
Rust

use crate::packets::BufReadError;
use azalea_buf::{McBuf, McBufReadable, McBufVarReadable, McBufVarWritable, McBufWritable};
use azalea_core::Vec3;
use packet_macros::ServerboundGamePacket;
use std::io::{Read, Write};
#[derive(Clone, Debug, McBuf, ServerboundGamePacket)]
pub struct ServerboundInteractPacket {
#[var]
pub entity_id: u32,
pub action: ActionType,
/// Whether the player is sneaking
pub using_secondary_action: bool,
}
#[derive(Clone, Copy, Debug)]
pub enum ActionType {
Interact {
hand: InteractionHand,
},
Attack,
InteractAt {
location: Vec3,
hand: InteractionHand,
},
}
impl McBufWritable for ActionType {
fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
match self {
ActionType::Interact { hand } => {
0u32.var_write_into(buf)?;
hand.write_into(buf)?;
}
ActionType::Attack => {
1u32.var_write_into(buf)?;
}
ActionType::InteractAt { location, hand } => {
2u32.var_write_into(buf)?;
(location.x as f32).write_into(buf)?;
(location.y as f32).write_into(buf)?;
(location.z as f32).write_into(buf)?;
hand.write_into(buf)?;
}
}
Ok(())
}
}
impl McBufReadable for ActionType {
fn read_from(buf: &mut impl Read) -> Result<Self, BufReadError> {
let action_type = u32::var_read_from(buf)?;
match action_type {
0 => {
let hand = InteractionHand::read_from(buf)?;
Ok(ActionType::Interact { hand })
}
1 => Ok(ActionType::Attack),
2 => {
let x = f32::read_from(buf)?;
let y = f32::read_from(buf)?;
let z = f32::read_from(buf)?;
let hand = InteractionHand::read_from(buf)?;
Ok(ActionType::InteractAt {
location: Vec3 {
x: x as f64,
y: y as f64,
z: z as f64,
},
hand,
})
}
_ => Err(BufReadError::UnexpectedEnumVariant {
id: action_type as i32,
}),
}
}
}
#[derive(McBuf, Clone, Copy, Debug)]
pub enum InteractionHand {
MainHand = 0,
OffHand = 1,
}