package joshie.harvest.core.util.holders;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ResourceLocation;
import java.util.ArrayList;
import java.util.List;
public class ItemStackHolder extends AbstractItemHolder {
private final Item item;
private final int meta;
private ItemStackHolder(Item item, int meta) {
this.item = item;
this.meta = meta;
}
public static ItemStackHolder of(ItemStack stack) {
return new ItemStackHolder(stack.getItem(), stack.getItemDamage());
}
public static ItemStackHolder of(Item item, int meta) {
return new ItemStackHolder(item, meta);
}
@Override
public List<ItemStack> getMatchingStacks() {
matchingStacks = new ArrayList<>();
matchingStacks.add(new ItemStack(item, 1, meta));
return matchingStacks;
}
@Override
public boolean matches(ItemStack stack) {
return stack.getItem() == item && stack.getItemDamage() == meta;
}
public static ItemStackHolder readFromNBT(NBTTagCompound tag) {
Item item = Item.REGISTRY.getObject(new ResourceLocation(tag.getString("ItemName")));
int meta = tag.getInteger("ItemMeta");
return new ItemStackHolder(item, meta);
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
tag.setString("ItemName", Item.REGISTRY.getNameForObject(item).toString());
tag.setInteger("ItemMeta", meta);
return tag;
}
@Override
public String toString() {
return new ItemStack(item, 1, meta).getDisplayName();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ItemStackHolder that = (ItemStackHolder) o;
return meta == that.meta && (item != null ? item.equals(that.item) : that.item == null);
}
@Override
public int hashCode() {
int result = item != null ? item.hashCode() : 0;
result = 31 * result + meta;
return result;
}
}