refactor: directly wrap structs
This commit is contained in:
parent
44f7b9a00f
commit
85729401e5
@ -241,12 +241,7 @@ async fn lua_init(client: Client, state: &State, globals: &Table) -> Result<()>
|
||||
.map_err(Error::external)
|
||||
})?,
|
||||
)?;
|
||||
globals.set(
|
||||
"client",
|
||||
client::Client {
|
||||
inner: Some(client),
|
||||
},
|
||||
)?;
|
||||
globals.set("client", client::Client(Some(client)))?;
|
||||
call_listeners(state, "init", ()).await;
|
||||
Ok(())
|
||||
}
|
||||
|
@ -9,13 +9,11 @@ use log::error;
|
||||
use mlua::{Lua, Result, Table, UserDataRef};
|
||||
|
||||
pub fn container(_lua: &Lua, client: &Client) -> Result<Option<ContainerRef>> {
|
||||
Ok(client
|
||||
.get_open_container()
|
||||
.map(|c| ContainerRef { inner: c }))
|
||||
Ok(client.get_open_container().map(ContainerRef))
|
||||
}
|
||||
|
||||
pub fn held_item(_lua: &Lua, client: &Client) -> Result<ItemStack> {
|
||||
Ok(ItemStack::from(client.component::<Inventory>().held_item()))
|
||||
Ok(ItemStack(client.component::<Inventory>().held_item()))
|
||||
}
|
||||
|
||||
pub fn held_slot(_lua: &Lua, client: &Client) -> Result<u8> {
|
||||
@ -26,7 +24,7 @@ pub fn held_slot(_lua: &Lua, client: &Client) -> Result<u8> {
|
||||
pub fn menu(lua: &Lua, client: &Client) -> Result<Table> {
|
||||
fn from_slot_list<const N: usize>(s: SlotList<N>) -> Vec<ItemStack> {
|
||||
s.iter()
|
||||
.map(|i| ItemStack::from(i.to_owned()))
|
||||
.map(|i| ItemStack(i.to_owned()))
|
||||
.collect::<Vec<_>>()
|
||||
}
|
||||
|
||||
@ -40,11 +38,11 @@ pub fn menu(lua: &Lua, client: &Client) -> Result<Table> {
|
||||
offhand,
|
||||
}) => {
|
||||
table.set("type", 0)?;
|
||||
table.set("craft_result", ItemStack::from(craft_result))?;
|
||||
table.set("craft_result", ItemStack(craft_result))?;
|
||||
table.set("craft", from_slot_list(craft))?;
|
||||
table.set("armor", from_slot_list(armor))?;
|
||||
table.set("inventory", from_slot_list(inventory))?;
|
||||
table.set("offhand", ItemStack::from(offhand))?;
|
||||
table.set("offhand", ItemStack(offhand))?;
|
||||
}
|
||||
Menu::Generic9x3 { contents, player } => {
|
||||
table.set("type", 3)?;
|
||||
@ -62,7 +60,7 @@ pub fn menu(lua: &Lua, client: &Client) -> Result<Table> {
|
||||
player,
|
||||
} => {
|
||||
table.set("type", 13)?;
|
||||
table.set("result", ItemStack::from(result))?;
|
||||
table.set("result", ItemStack(result))?;
|
||||
table.set("grid", from_slot_list(grid))?;
|
||||
table.set("player", from_slot_list(player))?;
|
||||
}
|
||||
@ -78,7 +76,7 @@ pub fn menu(lua: &Lua, client: &Client) -> Result<Table> {
|
||||
} => {
|
||||
table.set("type", 20)?;
|
||||
table.set("payments", from_slot_list(payments))?;
|
||||
table.set("result", ItemStack::from(result))?;
|
||||
table.set("result", ItemStack(result))?;
|
||||
table.set("player", from_slot_list(player))?;
|
||||
}
|
||||
Menu::ShulkerBox { contents, player } => {
|
||||
@ -105,11 +103,11 @@ pub async fn open_container_at(
|
||||
position.z as i32,
|
||||
))
|
||||
.await
|
||||
.map(|c| Container { inner: c }))
|
||||
.map(Container))
|
||||
}
|
||||
|
||||
pub fn open_inventory(_lua: &Lua, client: &mut Client, _: ()) -> Result<Option<Container>> {
|
||||
Ok(client.open_inventory().map(|c| Container { inner: c }))
|
||||
Ok(client.open_inventory().map(Container))
|
||||
}
|
||||
|
||||
pub fn set_held_slot(_lua: &Lua, client: &Client, slot: u8) -> Result<()> {
|
||||
|
@ -14,25 +14,19 @@ use azalea::{Client as AzaleaClient, world::MinecraftEntityId};
|
||||
use mlua::{Lua, Result, UserData, UserDataFields, UserDataMethods};
|
||||
use std::ops::{Deref, DerefMut};
|
||||
|
||||
pub struct Client {
|
||||
pub inner: Option<AzaleaClient>,
|
||||
}
|
||||
pub struct Client(pub Option<AzaleaClient>);
|
||||
|
||||
impl Deref for Client {
|
||||
type Target = AzaleaClient;
|
||||
|
||||
fn deref(&self) -> &Self::Target {
|
||||
self.inner
|
||||
.as_ref()
|
||||
.expect("should have received init event")
|
||||
self.0.as_ref().expect("should have received init event")
|
||||
}
|
||||
}
|
||||
|
||||
impl DerefMut for Client {
|
||||
fn deref_mut(&mut self) -> &mut Self::Target {
|
||||
self.inner
|
||||
.as_mut()
|
||||
.expect("should have received init event")
|
||||
self.0.as_mut().expect("should have received init event")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,24 +1,19 @@
|
||||
use azalea::inventory::components::{CustomName, Damage, Food, MaxDamage};
|
||||
use azalea::inventory::{
|
||||
self,
|
||||
components::{CustomName, Damage, Food, MaxDamage},
|
||||
};
|
||||
use mlua::{UserData, UserDataFields, UserDataMethods};
|
||||
|
||||
pub struct ItemStack {
|
||||
pub inner: azalea::inventory::ItemStack,
|
||||
}
|
||||
|
||||
impl From<azalea::inventory::ItemStack> for ItemStack {
|
||||
fn from(inner: azalea::inventory::ItemStack) -> Self {
|
||||
Self { inner }
|
||||
}
|
||||
}
|
||||
pub struct ItemStack(pub inventory::ItemStack);
|
||||
|
||||
impl UserData for ItemStack {
|
||||
fn add_fields<F: UserDataFields<Self>>(f: &mut F) {
|
||||
f.add_field_method_get("is_empty", |_, this| Ok(this.inner.is_empty()));
|
||||
f.add_field_method_get("is_present", |_, this| Ok(this.inner.is_present()));
|
||||
f.add_field_method_get("count", |_, this| Ok(this.inner.count()));
|
||||
f.add_field_method_get("kind", |_, this| Ok(this.inner.kind().to_string()));
|
||||
f.add_field_method_get("is_empty", |_, this| Ok(this.0.is_empty()));
|
||||
f.add_field_method_get("is_present", |_, this| Ok(this.0.is_present()));
|
||||
f.add_field_method_get("count", |_, this| Ok(this.0.count()));
|
||||
f.add_field_method_get("kind", |_, this| Ok(this.0.kind().to_string()));
|
||||
f.add_field_method_get("custom_name", |_, this| {
|
||||
Ok(this.inner.as_present().map(|data| {
|
||||
Ok(this.0.as_present().map(|data| {
|
||||
data.components
|
||||
.get::<CustomName>()
|
||||
.map(|c| c.name.to_string())
|
||||
@ -26,13 +21,13 @@ impl UserData for ItemStack {
|
||||
});
|
||||
f.add_field_method_get("damage", |_, this| {
|
||||
Ok(this
|
||||
.inner
|
||||
.0
|
||||
.as_present()
|
||||
.map(|data| data.components.get::<Damage>().map(|d| d.amount)))
|
||||
});
|
||||
f.add_field_method_get("max_damage", |_, this| {
|
||||
Ok(this
|
||||
.inner
|
||||
.0
|
||||
.as_present()
|
||||
.map(|data| data.components.get::<MaxDamage>().map(|d| d.amount)))
|
||||
});
|
||||
@ -40,7 +35,7 @@ impl UserData for ItemStack {
|
||||
f.add_field_method_get("food", |lua, this| {
|
||||
Ok(
|
||||
if let Some(food) = this
|
||||
.inner
|
||||
.0
|
||||
.as_present()
|
||||
.and_then(|data| data.components.get::<Food>())
|
||||
{
|
||||
@ -59,10 +54,10 @@ impl UserData for ItemStack {
|
||||
|
||||
fn add_methods<M: UserDataMethods<Self>>(m: &mut M) {
|
||||
m.add_method_mut("split", |_, this, count: u32| {
|
||||
Ok(ItemStack::from(this.inner.split(count)))
|
||||
Ok(ItemStack(this.0.split(count)))
|
||||
});
|
||||
m.add_method_mut("update_empty", |_, this, (): ()| {
|
||||
this.inner.update_empty();
|
||||
this.0.update_empty();
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
@ -6,22 +6,20 @@ use click::operation_from_table;
|
||||
use item_stack::ItemStack;
|
||||
use mlua::{Table, UserData, UserDataFields, UserDataMethods};
|
||||
|
||||
pub struct Container {
|
||||
pub inner: ContainerHandle,
|
||||
}
|
||||
pub struct Container(pub ContainerHandle);
|
||||
|
||||
impl UserData for Container {
|
||||
fn add_fields<F: UserDataFields<Self>>(f: &mut F) {
|
||||
f.add_field_method_get("id", |_, this| Ok(this.inner.id()));
|
||||
f.add_field_method_get("id", |_, this| Ok(this.0.id()));
|
||||
|
||||
f.add_field_method_get("menu", |_, this| {
|
||||
Ok(this.inner.menu().map(|m| format!("{m:?}")))
|
||||
Ok(this.0.menu().map(|m| format!("{m:?}")))
|
||||
});
|
||||
|
||||
f.add_field_method_get("contents", |_, this| {
|
||||
Ok(this.inner.contents().map(|v| {
|
||||
Ok(this.0.contents().map(|v| {
|
||||
v.iter()
|
||||
.map(|i| ItemStack::from(i.to_owned()))
|
||||
.map(|i| ItemStack(i.to_owned()))
|
||||
.collect::<Vec<_>>()
|
||||
}))
|
||||
});
|
||||
@ -31,7 +29,7 @@ impl UserData for Container {
|
||||
m.add_method(
|
||||
"click",
|
||||
|_, this, (operation, operation_type): (Table, Option<u8>)| {
|
||||
this.inner
|
||||
this.0
|
||||
.click(operation_from_table(operation, operation_type)?);
|
||||
Ok(())
|
||||
},
|
||||
@ -39,22 +37,20 @@ impl UserData for Container {
|
||||
}
|
||||
}
|
||||
|
||||
pub struct ContainerRef {
|
||||
pub inner: ContainerHandleRef,
|
||||
}
|
||||
pub struct ContainerRef(pub ContainerHandleRef);
|
||||
|
||||
impl UserData for ContainerRef {
|
||||
fn add_fields<F: UserDataFields<Self>>(f: &mut F) {
|
||||
f.add_field_method_get("id", |_, this| Ok(this.inner.id()));
|
||||
f.add_field_method_get("id", |_, this| Ok(this.0.id()));
|
||||
|
||||
f.add_field_method_get("menu", |_, this| {
|
||||
Ok(this.inner.menu().map(|m| format!("{m:?}")))
|
||||
Ok(this.0.menu().map(|m| format!("{m:?}")))
|
||||
});
|
||||
|
||||
f.add_field_method_get("contents", |_, this| {
|
||||
Ok(this.inner.contents().map(|v| {
|
||||
Ok(this.0.contents().map(|v| {
|
||||
v.iter()
|
||||
.map(|i| ItemStack::from(i.to_owned()))
|
||||
.map(|i| ItemStack(i.to_owned()))
|
||||
.collect::<Vec<_>>()
|
||||
}))
|
||||
});
|
||||
@ -62,14 +58,14 @@ impl UserData for ContainerRef {
|
||||
|
||||
fn add_methods<M: UserDataMethods<Self>>(m: &mut M) {
|
||||
m.add_method("close", |_, this, (): ()| {
|
||||
this.inner.close();
|
||||
this.0.close();
|
||||
Ok(())
|
||||
});
|
||||
|
||||
m.add_method(
|
||||
"click",
|
||||
|_, this, (operation, operation_type): (Table, Option<u8>)| {
|
||||
this.inner
|
||||
this.0
|
||||
.click(operation_from_table(operation, operation_type)?);
|
||||
Ok(())
|
||||
},
|
||||
|
@ -4,7 +4,7 @@ macro_rules! crypt {
|
||||
macro_rules! crypt_with {
|
||||
($algo:ident) => {{
|
||||
let encoding = $options.get("encoding").unwrap_or_default();
|
||||
let key = &$options.get::<UserDataRef<AesKey>>("key")?.inner;
|
||||
let key = &$options.get::<UserDataRef<AesKey>>("key")?.0;
|
||||
match encoding {
|
||||
1 => $algo::<Base64Encoding>::$op($text, &key),
|
||||
2 => $algo::<Base64rEncoding>::$op($text, &key),
|
||||
|
@ -1,12 +1,10 @@
|
||||
use mlua::UserData;
|
||||
|
||||
pub struct AesKey {
|
||||
pub inner: ncr::AesKey,
|
||||
}
|
||||
pub struct AesKey(pub ncr::AesKey);
|
||||
|
||||
impl UserData for AesKey {
|
||||
fn add_fields<F: mlua::UserDataFields<Self>>(f: &mut F) {
|
||||
f.add_field_method_get("base64", |_, this| Ok(this.inner.encode_base64()));
|
||||
f.add_field_method_get("bytes", |_, this| Ok(this.inner.as_ref().to_vec()));
|
||||
f.add_field_method_get("base64", |_, this| Ok(this.0.encode_base64()));
|
||||
f.add_field_method_get("bytes", |_, this| Ok(this.0.as_ref().to_vec()));
|
||||
}
|
||||
}
|
||||
|
@ -14,29 +14,23 @@ pub fn register_globals(lua: &Lua, globals: &Table) -> Result<()> {
|
||||
globals.set(
|
||||
"ncr_aes_key_from_passphrase",
|
||||
lua.create_function(|_, passphrase: Vec<u8>| {
|
||||
Ok(AesKey {
|
||||
inner: ncr::AesKey::gen_from_passphrase(&passphrase),
|
||||
})
|
||||
Ok(AesKey(ncr::AesKey::gen_from_passphrase(&passphrase)))
|
||||
})?,
|
||||
)?;
|
||||
|
||||
globals.set(
|
||||
"ncr_aes_key_from_base64",
|
||||
lua.create_function(|_, base64: String| {
|
||||
Ok(AesKey {
|
||||
inner: ncr::AesKey::decode_base64(&base64)
|
||||
Ok(AesKey(
|
||||
ncr::AesKey::decode_base64(&base64)
|
||||
.map_err(|error| Error::external(error.to_string()))?,
|
||||
})
|
||||
))
|
||||
})?,
|
||||
)?;
|
||||
|
||||
globals.set(
|
||||
"ncr_generate_random_aes_key",
|
||||
lua.create_function(|_, (): ()| {
|
||||
Ok(AesKey {
|
||||
inner: ncr::AesKey::gen_random_key(),
|
||||
})
|
||||
})?,
|
||||
lua.create_function(|_, (): ()| Ok(AesKey(ncr::AesKey::gen_random_key())))?,
|
||||
)?;
|
||||
|
||||
globals.set(
|
||||
|
Loading…
x
Reference in New Issue
Block a user