package joshie.harvest.core.base.item;
import joshie.harvest.core.HFTab;
import joshie.harvest.core.lib.HFModInfo;
import joshie.harvest.core.helpers.TextHelper;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.SoundEvents;
import net.minecraft.item.EnumAction;
import net.minecraft.item.Item;
import net.minecraft.item.ItemFood;
import net.minecraft.item.ItemStack;
import net.minecraft.util.*;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import java.util.ArrayList;
import java.util.List;
import static joshie.harvest.core.lib.HFModInfo.MODID;
public class ItemHFFood<I extends ItemHFFood> extends ItemFood {
public ItemHFFood() {
this(HFTab.FARMING);
}
public ItemHFFood(CreativeTabs tab) {
super(0, 0F, false);
setCreativeTab(tab);
}
@Override
public String getItemStackDisplayName(ItemStack stack) {
return TextHelper.localize(getUnlocalizedName());
}
@Override
public String getUnlocalizedName() {
return HFModInfo.MODID + "." + super.getUnlocalizedName().replace("item.", "");
}
@Override
public int getMaxItemUseDuration(ItemStack stack) {
return 32;
}
@Override
public EnumAction getItemUseAction(ItemStack stack) {
return EnumAction.EAT;
}
@Override
public ActionResult<ItemStack> onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) {
if (player.canEat(false) && getHealAmount(stack) > 0) {
player.setActiveHand(hand);
return new ActionResult<>(EnumActionResult.SUCCESS, stack);
} else {
return new ActionResult<>(EnumActionResult.FAIL, stack);
}
}
@Override
public ItemStack onItemUseFinish(ItemStack stack, World world, EntityLivingBase entityLiving) {
if (entityLiving instanceof EntityPlayer) {
EntityPlayer player = (EntityPlayer) entityLiving;
if (!player.capabilities.isCreativeMode) --stack.stackSize;
player.getFoodStats().addStats(this, stack);
world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_PLAYER_BURP, SoundCategory.PLAYERS, 0.5F, world.rand.nextFloat() * 0.1F + 0.9F);
return stack;
}
return stack;
}
@SuppressWarnings("unchecked")
public I register(String name) {
setUnlocalizedName(name.replace("_", "."));
setRegistryName(new ResourceLocation(MODID, name));
GameRegistry.register(this);
if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) {
registerModels(this, name);
}
return (I) this;
}
@SideOnly(Side.CLIENT)
public void registerModels(Item item, String name) {
if (item.getHasSubtypes()) {
List<ItemStack> subItems = new ArrayList<>();
if (item.getCreativeTabs().length > 0) {
for (CreativeTabs tab : item.getCreativeTabs()) {
item.getSubItems(item, tab, subItems);
}
}
for (ItemStack stack : subItems) {
String subItemName = item.getUnlocalizedName(stack).replace("item.", "").replace(".", "_");
ModelLoader.setCustomModelResourceLocation(item, item.getDamage(stack), new ModelResourceLocation(new ResourceLocation(MODID, subItemName), "inventory"));
}
} else {
ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(new ResourceLocation(MODID, name), "inventory"));
}
}
}