Compare commits

..

No commits in common. "1ebe7dd0b97381733c4f966acb3ccbedc25faa12" and "4d3947c4ef4970d13b17fc9674a6d0e8c5d16c9d" have entirely different histories.

5 changed files with 69 additions and 110 deletions

View File

@ -64,21 +64,16 @@ pub async fn handle_event(client: Client, event: Event, state: State) -> anyhow:
call_listeners(&state, "chat", formatted_message.to_string()).await; call_listeners(&state, "chat", formatted_message.to_string()).await;
} }
Event::Death(packet) => { Event::Death(Some(packet)) => {
if let Some(packet) = packet { let table = state.lua.create_table()?;
let table = state.lua.create_table()?; table.set("message", packet.message.to_string())?;
table.set("message", packet.message.to_string())?; table.set("player_id", packet.player_id.0)?;
table.set("player_id", packet.player_id.0)?; call_listeners(&state, "death", table).await;
call_listeners(&state, "death", table).await;
} else {
call_listeners(&state, "death", ()).await;
}
} }
Event::Disconnect(message) => { Event::Disconnect(message) => {
call_listeners(&state, "disconnect", message.map(|m| m.to_string())).await; call_listeners(&state, "disconnect", message.map(|m| m.to_string())).await;
exit(0) exit(0)
} }
Event::KeepAlive(id) => call_listeners(&state, "keep_alive", id).await,
Event::Login => call_listeners(&state, "login", ()).await, Event::Login => call_listeners(&state, "login", ()).await,
Event::RemovePlayer(player_info) => { Event::RemovePlayer(player_info) => {
call_listeners(&state, "remove_player", Player::from(player_info)).await; call_listeners(&state, "remove_player", Player::from(player_info)).await;
@ -175,6 +170,7 @@ pub async fn handle_event(client: Client, event: Event, state: State) -> anyhow:
}); });
} }
} }
_ => (),
} }
Ok(()) Ok(())

View File

@ -22,7 +22,6 @@ pub fn held_slot(_lua: &Lua, client: &Client) -> Result<u8> {
Ok(client.component::<Inventory>().selected_hotbar_slot) Ok(client.component::<Inventory>().selected_hotbar_slot)
} }
#[allow(clippy::too_many_lines)]
pub fn menu(lua: &Lua, client: &Client) -> Result<Table> { pub fn menu(lua: &Lua, client: &Client) -> Result<Table> {
fn from_slot_list<const N: usize>(s: SlotList<N>) -> Vec<ItemStack> { fn from_slot_list<const N: usize>(s: SlotList<N>) -> Vec<ItemStack> {
s.iter() s.iter()
@ -46,46 +45,11 @@ pub fn menu(lua: &Lua, client: &Client) -> Result<Table> {
table.set("inventory", from_slot_list(inventory))?; table.set("inventory", from_slot_list(inventory))?;
table.set("offhand", ItemStack::from(offhand))?; table.set("offhand", ItemStack::from(offhand))?;
} }
Menu::Generic9x3 { contents, player } => {
table.set("type", 3)?;
table.set("contents", from_slot_list(contents))?;
table.set("player", from_slot_list(player))?;
}
Menu::Generic9x6 { contents, player } => { Menu::Generic9x6 { contents, player } => {
table.set("type", 6)?; table.set("type", 6)?;
table.set("contents", from_slot_list(contents))?; table.set("contents", from_slot_list(contents))?;
table.set("player", from_slot_list(player))?; table.set("player", from_slot_list(player))?;
} }
Menu::Crafting {
result,
grid,
player,
} => {
table.set("type", 13)?;
table.set("result", ItemStack::from(result))?;
table.set("grid", from_slot_list(grid))?;
table.set("player", from_slot_list(player))?;
}
Menu::Hopper { contents, player } => {
table.set("type", 17)?;
table.set("contents", from_slot_list(contents))?;
table.set("player", from_slot_list(player))?;
}
Menu::Merchant {
payments,
result,
player,
} => {
table.set("type", 20)?;
table.set("payments", from_slot_list(payments))?;
table.set("result", ItemStack::from(result))?;
table.set("player", from_slot_list(player))?;
}
Menu::ShulkerBox { contents, player } => {
table.set("type", 21)?;
table.set("contents", from_slot_list(contents))?;
table.set("player", from_slot_list(player))?;
}
_ => (), _ => (),
} }
Ok(table) Ok(table)

View File

@ -1,55 +0,0 @@
use azalea::inventory::operations::{
ClickOperation, CloneClick, PickupAllClick, PickupClick, QuickCraftClick, QuickCraftKind,
QuickCraftStatus, QuickMoveClick, SwapClick, ThrowClick,
};
use mlua::{Result, Table};
pub fn operation_from_table(op: Table, op_type: Option<u8>) -> Result<ClickOperation> {
Ok(match op_type.unwrap_or_default() {
0 => ClickOperation::Pickup(PickupClick::Left {
slot: op.get("slot")?,
}),
1 => ClickOperation::Pickup(PickupClick::Right {
slot: op.get("slot")?,
}),
2 => ClickOperation::Pickup(PickupClick::LeftOutside),
3 => ClickOperation::Pickup(PickupClick::RightOutside),
5 => ClickOperation::QuickMove(QuickMoveClick::Right {
slot: op.get("slot")?,
}),
6 => ClickOperation::Swap(SwapClick {
source_slot: op.get("source_slot")?,
target_slot: op.get("target_slot")?,
}),
7 => ClickOperation::Clone(CloneClick {
slot: op.get("slot")?,
}),
8 => ClickOperation::Throw(ThrowClick::Single {
slot: op.get("slot")?,
}),
9 => ClickOperation::Throw(ThrowClick::All {
slot: op.get("slot")?,
}),
10 => ClickOperation::QuickCraft(QuickCraftClick {
kind: match op.get("kind").unwrap_or_default() {
1 => QuickCraftKind::Right,
2 => QuickCraftKind::Middle,
_ => QuickCraftKind::Left,
},
status: match op.get("status").unwrap_or_default() {
1 => QuickCraftStatus::Add {
slot: op.get("slot")?,
},
2 => QuickCraftStatus::End,
_ => QuickCraftStatus::Start,
},
}),
11 => ClickOperation::PickupAll(PickupAllClick {
slot: op.get("slot")?,
reversed: op.get("reversed").unwrap_or_default(),
}),
_ => ClickOperation::QuickMove(QuickMoveClick::Left {
slot: op.get("slot")?,
}),
})
}

View File

@ -1,10 +1,14 @@
pub mod click;
pub mod item_stack; pub mod item_stack;
use azalea::container::{ContainerHandle, ContainerHandleRef}; use azalea::{
use click::operation_from_table; container::{ContainerHandle, ContainerHandleRef},
inventory::operations::{
ClickOperation, CloneClick, PickupAllClick, PickupClick, QuickCraftClick, QuickCraftKind,
QuickCraftStatus, QuickMoveClick, SwapClick, ThrowClick,
},
};
use item_stack::ItemStack; use item_stack::ItemStack;
use mlua::{Table, UserData, UserDataFields, UserDataMethods}; use mlua::{Result, Table, UserData, UserDataFields, UserDataMethods};
pub struct Container { pub struct Container {
pub inner: ContainerHandle, pub inner: ContainerHandle,
@ -32,7 +36,7 @@ impl UserData for Container {
"click", "click",
|_, this, (operation, operation_type): (Table, Option<u8>)| { |_, this, (operation, operation_type): (Table, Option<u8>)| {
this.inner this.inner
.click(operation_from_table(operation, operation_type)?); .click(click_operation_from_table(operation, operation_type)?);
Ok(()) Ok(())
}, },
); );
@ -70,9 +74,59 @@ impl UserData for ContainerRef {
"click", "click",
|_, this, (operation, operation_type): (Table, Option<u8>)| { |_, this, (operation, operation_type): (Table, Option<u8>)| {
this.inner this.inner
.click(operation_from_table(operation, operation_type)?); .click(click_operation_from_table(operation, operation_type)?);
Ok(()) Ok(())
}, },
); );
} }
} }
fn click_operation_from_table(op: Table, op_type: Option<u8>) -> Result<ClickOperation> {
Ok(match op_type.unwrap_or_default() {
0 => ClickOperation::Pickup(PickupClick::Left {
slot: op.get("slot")?,
}),
1 => ClickOperation::Pickup(PickupClick::Right {
slot: op.get("slot")?,
}),
2 => ClickOperation::Pickup(PickupClick::LeftOutside),
3 => ClickOperation::Pickup(PickupClick::RightOutside),
5 => ClickOperation::QuickMove(QuickMoveClick::Right {
slot: op.get("slot")?,
}),
6 => ClickOperation::Swap(SwapClick {
source_slot: op.get("source_slot")?,
target_slot: op.get("target_slot")?,
}),
7 => ClickOperation::Clone(CloneClick {
slot: op.get("slot")?,
}),
8 => ClickOperation::Throw(ThrowClick::Single {
slot: op.get("slot")?,
}),
9 => ClickOperation::Throw(ThrowClick::All {
slot: op.get("slot")?,
}),
10 => ClickOperation::QuickCraft(QuickCraftClick {
kind: match op.get("kind").unwrap_or_default() {
1 => QuickCraftKind::Right,
2 => QuickCraftKind::Middle,
_ => QuickCraftKind::Left,
},
status: match op.get("status").unwrap_or_default() {
1 => QuickCraftStatus::Add {
slot: op.get("slot")?,
},
2 => QuickCraftStatus::End,
_ => QuickCraftStatus::Start,
},
}),
11 => ClickOperation::PickupAll(PickupAllClick {
slot: op.get("slot")?,
reversed: op.get("reversed").unwrap_or_default(),
}),
_ => ClickOperation::QuickMove(QuickMoveClick::Left {
slot: op.get("slot")?,
}),
})
}

View File

@ -76,14 +76,14 @@ async fn main() -> anyhow::Result<()> {
} else { } else {
DefaultPlugins.set(LogPlugin { DefaultPlugins.set(LogPlugin {
custom_layer: |_| { custom_layer: |_| {
env::var("LOG_FILE").ok().map(|path| { env::var("LOG_FILE").ok().map(|log_file| {
layer() layer()
.with_writer( .with_writer(
OpenOptions::new() OpenOptions::new()
.append(true) .append(true)
.create(true) .create(true)
.open(&path) .open(&log_file)
.expect(&(path + " should be accessible")), .expect(&(log_file + " should be accessible")),
) )
.boxed() .boxed()
}) })