package de.ellpeck.prettypipes.misc; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import java.util.Arrays; import java.util.Set; import java.util.function.BiFunction; public enum ItemEqualityType { DAMAGE((stack, filter) -> stack.getDamage() == filter.getDamage(), false), NBT(ItemStack::areItemStackTagsEqual, false), TAG((stack, filter) -> { Set stackTags = stack.getItem().getTags(); Set filterTags = filter.getItem().getTags(); if (filterTags.isEmpty()) return false; return stackTags.containsAll(filterTags); }, true); public final BiFunction filter; public final boolean ignoreItemEquality; ItemEqualityType(BiFunction filter, boolean ignoreItemEquality) { this.filter = filter; this.ignoreItemEquality = ignoreItemEquality; } public static boolean compareItems(ItemStack stack, ItemStack filter, ItemEqualityType... types) { boolean equal = ItemStack.areItemsEqual(stack, filter); if (types.length <= 0) return equal; for (ItemEqualityType type : types) { if (!type.ignoreItemEquality && !equal) return false; if (!type.filter.apply(stack, filter)) return false; } return true; } }