package joshie.harvest.core.base.item;
import joshie.harvest.api.HFApi;
import joshie.harvest.core.HFTab;
import joshie.harvest.core.helpers.TextHelper;
import joshie.harvest.core.lib.CreativeSort;
import joshie.harvest.core.util.interfaces.ICreativeSorted;
import joshie.harvest.core.util.interfaces.ISellable;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IStringSerializable;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import javax.annotation.Nonnull;
import java.util.List;
import java.util.Locale;
public abstract class ItemHFFoodEnum<I extends ItemHFFoodEnum, E extends Enum<E> & IStringSerializable> extends ItemHFFood<I> implements ICreativeSorted {
protected final Class<E> enumClass;
protected final E[] values;
protected final String prefix;
public ItemHFFoodEnum(Class<E> clazz) {
this(HFTab.FARMING, clazz);
}
public ItemHFFoodEnum(CreativeTabs tab, Class<E> clazz) {
super(tab);
enumClass = clazz;
values = clazz.getEnumConstants();
prefix = clazz.getSimpleName().toLowerCase(Locale.ENGLISH);
setHasSubtypes(true);
if (values[0] instanceof ISellable) {
for (E e: values) {
long value = ((ISellable)e).getSellValue();
if (value > 0L) {
HFApi.shipping.registerSellable(getStackFromEnum(e), value);
}
}
}
}
public E[] getValues() {
return values;
}
@Override
@SuppressWarnings("unchecked")
public I setUnlocalizedName(String name) {
super.setUnlocalizedName(name);
return (I) this;
}
@Override
public int getMetadata(int damage) {
return damage;
}
public E getEnumFromStack(ItemStack stack) {
if (stack.getItem() != this) return null;
return getEnumFromMeta(stack.getItemDamage());
}
public E getEnumFromMeta(int meta) {
if (meta < 0 || meta >= values.length) {
meta = 0;
}
return values[meta];
}
public ItemStack getStackFromEnum(E e) {
return new ItemStack(this, 1, e.ordinal());
}
public ItemStack getStackFromEnum(E e, int size) {
return new ItemStack(this, size, e.ordinal());
}
public ItemStack getStackFromEnumString(String name) {
return getStackFromEnum(Enum.valueOf(enumClass, name.toUpperCase()));
}
@Override
public String getUnlocalizedName(ItemStack stack) {
return prefix + "_" + getEnumFromStack(stack).name().toLowerCase(Locale.ENGLISH);
}
@Override
public String getItemStackDisplayName(ItemStack stack) {
return TextHelper.translate(getUnlocalizedName(stack).replaceAll("(.)([A-Z])", "$1$2").toLowerCase(Locale.ENGLISH).replace("_", "."));
}
@Override
public int getSortValue(ItemStack stack) {
return CreativeSort.NONE;
}
protected ItemStack getCreativeStack(E e) {
return new ItemStack(this, 1, e.ordinal());
}
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(@Nonnull Item item, CreativeTabs tab, List<ItemStack> list) {
for (E e: values) {
ItemStack stack = getCreativeStack(e);
if (stack != null) list.add(stack);
}
}
protected String getPrefix(E e) {
return e.getClass().getSimpleName().toLowerCase(Locale.ENGLISH);
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels(Item item, String name) {
for (E e: values) {
ModelLoader.setCustomModelResourceLocation(item, e.ordinal(), new ModelResourceLocation(getRegistryName(), e.getName()));
}
}
}