package tc.oc.pgm.utils;
import java.util.Collection;
import javax.annotation.Nullable;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.material.MaterialData;
import org.bukkit.util.ImmutableMaterialSet;
public class CompoundMaterialMatcher implements MaterialMatcher {
private final @Inspect Collection<MaterialMatcher> children;
private @Nullable ImmutableMaterialSet materials;
public CompoundMaterialMatcher(Collection<MaterialMatcher> children) {
this.children = children;
}
@Override
public boolean matches(Material material) {
for(MaterialMatcher child : children) {
if(child.matches(material)) return true;
}
return false;
}
@Override
public boolean matches(MaterialData materialData) {
for(MaterialMatcher child : children) {
if(child.matches(materialData)) return true;
}
return false;
}
@Override
public boolean matches(ItemStack stack) {
for(MaterialMatcher child : children) {
if(child.matches(stack)) return true;
}
return false;
}
@Override
public Collection<Material> getMaterials() {
if(materials == null) {
ImmutableMaterialSet.Builder builder = ImmutableMaterialSet.builder();
for(MaterialMatcher child : children) {
for(Material material : child.getMaterials()) {
builder.add(material);
}
}
materials = builder.build();
}
return materials;
}
public static MaterialMatcher of(Collection<MaterialMatcher> matchers, MaterialMatcher empty) {
if(matchers.isEmpty()) {
return empty;
} else if(matchers.size() == 1) {
return matchers.iterator().next();
} else {
return new CompoundMaterialMatcher(matchers);
}
}
}