package joshie.harvest.core.base.item; import joshie.harvest.api.HFApi; import joshie.harvest.api.core.ISizedProvider; import joshie.harvest.api.core.Size; import joshie.harvest.core.HFTab; import joshie.harvest.core.helpers.TextHelper; import joshie.harvest.core.lib.CreativeSort; import joshie.harvest.core.util.interfaces.ISizeable; 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 java.util.List; import java.util.Locale; public class ItemHFSizeable<I extends ItemHFFoodEnum, E extends Enum<E> & IStringSerializable & ISizeable> extends ItemHFFoodEnum<I, E> implements ISizedProvider<E> { public ItemHFSizeable(Class<E> clazz) { this(HFTab.FARMING, clazz); } public ItemHFSizeable(CreativeTabs tab, Class<E> clazz) { super(tab, clazz); for (E e: values) { for (Size size: Size.values()) { long value = e.getSellValue(size); if (value > 0L) { HFApi.shipping.registerSellable(getStack(e, size), value); } } } } @Override public E getEnumFromStack(ItemStack stack) { int real = (int)Math.floor(stack.getItemDamage() / 3); int id = Math.max(0, Math.min(values.length - 1, real)); return values[id]; } @Override public ItemStack getStackFromEnum(E e) { return e.getStack(this, Size.SMALL); } @Override public ItemStack getStackFromEnum(E e, int amount) { return e.getStackOfSize(this, Size.SMALL, amount); } public ItemStack getStack(E e, Size size) { return e.getStack(this, size); } @Override public ItemStack getStackOfSize(E e, Size size, int amount) { return e.getStackOfSize(this, size, amount); } @Override public Size getSize(ItemStack stack) { return Size.values()[Math.min(2, stack.getItemDamage() % 3)]; } @Override public E getObject(ItemStack stack) { return getEnumFromStack(stack); } @Override public E getObjectFromString(String string) { for (E e: values) { if (e.getName().equalsIgnoreCase(string)) return e; } return values[0]; } @Override public String getItemStackDisplayName(ItemStack stack) { String size = TextHelper.translate("sizeable." + getSize(stack).name().toLowerCase(Locale.ENGLISH)); String name = TextHelper.translate(prefix + "." + getEnumFromStack(stack).getName()); String format = TextHelper.translate("sizeable.format"); return String.format(format, size, name); } @Override public int getSortValue(ItemStack stack) { return CreativeSort.SIZEABLE + stack.getItemDamage() + (getEnumFromStack(stack).ordinal() * 4); } @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tab, List<ItemStack> list) { for (E e: values) { for (Size size: Size.values()) { list.add(e.getStack(item, size)); } } } @SideOnly(Side.CLIENT) @Override public void registerModels(Item item, String name) { for (E e: values) { for (Size size: Size.values()) { ItemStack stack = e.getStack(item, size); ModelLoader.setCustomModelResourceLocation(stack.getItem(), stack.getItemDamage(), new ModelResourceLocation(getRegistryName(), e.getName() + "_" + size.getName())); } } } }