package joshie.harvest.core.util.holders; import joshie.harvest.api.core.MatchType; import joshie.harvest.core.helpers.InventoryHelper; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.oredict.OreDictionary; import java.util.ArrayList; import java.util.List; public class OreHolder extends AbstractItemHolder { private final String ore; private final MatchType type; private OreHolder(String mod, MatchType type) { this.ore = mod; this.type = type; } public static OreHolder of(String mod, MatchType type) { return new OreHolder(mod, type); } @Override public List<ItemStack> getMatchingStacks() { switch (type) { case FULL: return OreDictionary.getOres(ore); case PREFIX: return InventoryHelper.getStarts(ore); case SUFFIX: return InventoryHelper.getEnds(ore); case CONTAINS: return InventoryHelper.getContains(ore); default: return new ArrayList<>(); } } @Override public boolean matches(ItemStack stack) { switch (type) { case FULL: return InventoryHelper.ORE_DICTIONARY.matches(stack, ore); case PREFIX: return InventoryHelper.startsWith(stack, ore); case SUFFIX: return InventoryHelper.endsWith(stack, ore); case CONTAINS: return InventoryHelper.contains(stack, ore); default: return false; } } public static OreHolder readFromNBT(NBTTagCompound tag) { return new OreHolder(tag.getString("Ore"), MatchType.valueOf(tag.getString("Type"))); } @Override public NBTTagCompound writeToNBT(NBTTagCompound tag) { tag.setString("Ore", ore); tag.setString("Type", type.name()); return tag; } @Override public String toString() { return ore; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; OreHolder modHolder = (OreHolder) o; return ore != null ? ore.equals(modHolder.ore) : modHolder.ore == null; } @Override public int hashCode() { return ore != null ? ore.hashCode() : 0; } }