use crate::BlockState;
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub enum FillMode {
#[default]
Replace,
KeepExisting,
ReplaceOnly(Vec<String>),
}
impl FillMode {
pub fn allows(&self, existing: Option<&BlockState>) -> bool {
match self {
FillMode::Replace => true,
FillMode::KeepExisting => existing.is_none_or(|b| is_air(b.name.as_str())),
FillMode::ReplaceOnly(targets) => {
existing.is_some_and(|b| targets.iter().any(|t| t == b.name.as_str()))
}
}
}
}
fn is_air(name: &str) -> bool {
matches!(
name,
"minecraft:air" | "minecraft:cave_air" | "minecraft:void_air"
)
}