package tc.oc.pgm.filters;
import java.util.function.Predicate;
import javax.annotation.Nullable;
import org.bukkit.inventory.ImItemStack;
import org.bukkit.inventory.ItemStack;
import tc.oc.commons.core.inspect.Inspectable;
import tc.oc.pgm.kits.tag.ItemTags;
/**
* Logic used by item filters
*/
public class ItemMatcher extends Inspectable.Impl implements Predicate<ItemStack> {
@Inspect private final ImItemStack item;
public ItemMatcher(ItemStack item) {
this.item = normalize(item.clone()).immutableCopy();
}
@Override
public boolean test(@Nullable ItemStack query) {
if(query == null) return false;
if(query.getType() != item.getType()) return false;
query = normalize(query.clone());
// Match if items stack, and query stack is at least big as the base stack
return item.isSimilar(query) && query.getAmount() >= item.getAmount();
}
private static ItemStack normalize(ItemStack item) {
// Ignore durability (if it's actually durability, and not data)
if(item.getType().getMaxDurability() != 0) {
item.setDurability((short) 0);
}
// Ignore these options
ItemTags.PREVENT_SHARING.clear(item);
ItemTags.LOCKED.clear(item);
return item;
}
}