mirror of
https://github.com/Pumpkin-MC/Pumpkin.git
synced 2026-08-30 20:14:23 +00:00
add more loot table conditions
fix https://github.com/Pumpkin-MC/Pumpkin/issues/1155
This commit is contained in:
22
Cargo.lock
generated
22
Cargo.lock
generated
@@ -125,9 +125,9 @@ checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
|
||||
|
||||
[[package]]
|
||||
name = "async-compression"
|
||||
version = "0.4.28"
|
||||
version = "0.4.29"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6448dfb3960f0b038e88c781ead1e7eb7929dfc3a71a1336ec9086c00f6d1e75"
|
||||
checksum = "5bee399cc3a623ec5a2db2c5b90ee0190a2260241fbe0c023ac8f7bab426aaf8"
|
||||
dependencies = [
|
||||
"compression-codecs",
|
||||
"compression-core",
|
||||
@@ -421,14 +421,14 @@ version = "3.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fde0e0ec90c9dfb3b4b1a0891a7dcd0e2bffde2f7efed5fe7c9bb00e5bfb915e"
|
||||
dependencies = [
|
||||
"windows-sys 0.52.0",
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "compression-codecs"
|
||||
version = "0.4.28"
|
||||
version = "0.4.29"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "46cc6539bf1c592cff488b9f253b30bc0ec50d15407c2cf45e27bd8f308d5905"
|
||||
checksum = "c7eea68f0e02c2b0aa8856e9a9478444206d4b6828728e7b0697c0f8cca265cb"
|
||||
dependencies = [
|
||||
"compression-core",
|
||||
"flate2",
|
||||
@@ -439,9 +439,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "compression-core"
|
||||
version = "0.4.28"
|
||||
version = "0.4.29"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2957e823c15bde7ecf1e8b64e537aa03a6be5fda0e2334e99887669e75b12e01"
|
||||
checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb"
|
||||
|
||||
[[package]]
|
||||
name = "console-api"
|
||||
@@ -916,7 +916,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys 0.52.0",
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -2475,7 +2475,7 @@ dependencies = [
|
||||
"errno",
|
||||
"libc",
|
||||
"linux-raw-sys",
|
||||
"windows-sys 0.52.0",
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -2865,7 +2865,7 @@ dependencies = [
|
||||
"fastrand",
|
||||
"once_cell",
|
||||
"rustix",
|
||||
"windows-sys 0.52.0",
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -3461,7 +3461,7 @@ version = "0.1.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
|
||||
dependencies = [
|
||||
"windows-sys 0.52.0",
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
||||
@@ -44,6 +44,8 @@ pub struct LootPoolStruct {
|
||||
entries: Vec<LootPoolEntryStruct>,
|
||||
rolls: LootNumberProviderTypes, // TODO
|
||||
bonus_rolls: f32,
|
||||
conditions: Option<Vec<LootConditionStruct>>,
|
||||
functions: Option<Vec<LootFunctionStruct>>,
|
||||
}
|
||||
|
||||
impl ToTokens for LootPoolStruct {
|
||||
@@ -55,12 +57,28 @@ impl ToTokens for LootPoolStruct {
|
||||
.collect();
|
||||
let rolls = &self.rolls;
|
||||
let bonus_rolls = &self.bonus_rolls;
|
||||
let conditions_tokens = match &self.conditions {
|
||||
Some(conds) => {
|
||||
let cond_tokens: Vec<_> = conds.iter().map(|c| c.to_token_stream()).collect();
|
||||
quote! { Some(&[#(#cond_tokens),*]) }
|
||||
}
|
||||
None => quote! { None },
|
||||
};
|
||||
let functions_tokens = match &self.functions {
|
||||
Some(fns) => {
|
||||
let cond_tokens: Vec<_> = fns.iter().map(|c| c.to_token_stream()).collect();
|
||||
quote! { Some(&[#(#cond_tokens),*]) }
|
||||
}
|
||||
None => quote! { None },
|
||||
};
|
||||
|
||||
tokens.extend(quote! {
|
||||
LootPool {
|
||||
entries: &[#(#entries_tokens),*],
|
||||
rolls: #rolls,
|
||||
bonus_rolls: #bonus_rolls,
|
||||
conditions: #conditions_tokens,
|
||||
functions: #functions_tokens,
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ aes = "0.8"
|
||||
cfb8 = "0.8"
|
||||
|
||||
# compression
|
||||
async-compression = { version = "0.4.28", features = ["tokio", "zlib"] }
|
||||
async-compression = { version = "0.4.29", features = ["tokio", "zlib"] }
|
||||
|
||||
take_mut = "0.2.2"
|
||||
bitflags = "2.9.3"
|
||||
|
||||
@@ -16,6 +16,8 @@ pub struct LootPool {
|
||||
pub entries: &'static [LootPoolEntry],
|
||||
pub rolls: LootNumberProviderTypes,
|
||||
pub bonus_rolls: f32,
|
||||
pub conditions: Option<&'static [LootCondition]>,
|
||||
pub functions: Option<&'static [LootFunction]>,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Debug)]
|
||||
|
||||
@@ -26,6 +26,12 @@ impl LootTableExt for LootTable {
|
||||
|
||||
if let Some(pools) = self.pools {
|
||||
for pool in pools {
|
||||
if let Some(conditions) = pool.conditions
|
||||
&& !conditions.iter().all(|cond| cond.is_fulfilled(¶ms))
|
||||
{
|
||||
return stacks;
|
||||
}
|
||||
|
||||
// TODO
|
||||
let rolls = pool
|
||||
.rolls
|
||||
|
||||
Reference in New Issue
Block a user