package joshie.harvest.core.util.holders;
import joshie.harvest.api.core.ISizedProvider;
import joshie.harvest.api.core.Size;
import joshie.harvest.core.base.item.ItemHFSizeable;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import java.util.ArrayList;
import java.util.List;
public class SizeableHolder extends AbstractItemHolder {
private final ItemStack stack;
private final ISizedProvider item;
private final Object object;
private SizeableHolder(ItemStack stack) {
this.stack = stack;
this.item = (ItemHFSizeable) stack.getItem();
this.object = this.item.getObject(stack);
}
public static SizeableHolder of(ItemStack stack) {
return new SizeableHolder(stack);
}
@Override
@SuppressWarnings("unchecked")
public List<ItemStack> getMatchingStacks() {
if (matchingStacks != null && matchingStacks.size() > 0) return matchingStacks;
else {
matchingStacks = new ArrayList<>();
matchingStacks.add(item.getStackOfSize(object, Size.SMALL, 1));
matchingStacks.add(item.getStackOfSize(object, Size.MEDIUM, 1));
matchingStacks.add(item.getStackOfSize(object, Size.LARGE, 1));
return matchingStacks;
}
}
@Override
public boolean matches(ItemStack stack) {
return stack.getItem() == this.stack.getItem() && item.getObject(stack) == item.getObject(this.stack);
}
public static SizeableHolder readFromNBT(NBTTagCompound tag) {
return new SizeableHolder(ItemStack.loadItemStackFromNBT(tag));
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
return stack.writeToNBT(tag);
}
@Override
public String toString() {
return "SizeableHolder:" + (stack != null ? stack.getItem().getRegistryName() + " " + stack.getItemDamage() + " item: " + (item != null ? ((Item)item).getRegistryName() : "null") : "null");
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SizeableHolder that = (SizeableHolder) o;
return item != null ? item.equals(that.item) : that.item == null && (object != null ? object.equals(that.object) : that.object == null);
}
@Override
public int hashCode() {
int result = item != null ? item.hashCode() : 0;
result = 31 * result + (object != null ? object.hashCode() : 0);
return result;
}
}