package slimeknights.tconstruct.tools.ranged.item;
import com.google.common.collect.ImmutableList;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.nbt.NBTTagString;
import net.minecraft.util.text.translation.I18n;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import java.util.List;
import javax.annotation.Nonnull;
import slimeknights.tconstruct.common.config.Config;
import slimeknights.tconstruct.library.TinkerRegistry;
import slimeknights.tconstruct.library.Util;
import slimeknights.tconstruct.library.client.CustomTextureCreator;
import slimeknights.tconstruct.library.materials.Material;
import slimeknights.tconstruct.library.materials.MaterialTypes;
import slimeknights.tconstruct.library.tools.ToolPart;
import slimeknights.tconstruct.library.utils.TagUtil;
import slimeknights.tconstruct.library.utils.Tags;
import slimeknights.tconstruct.tools.TinkerMaterials;
import slimeknights.tconstruct.tools.TinkerTools;
public class BoltCore extends ToolPart {
public static ItemStack GUI_RENDER_ITEMSTACK;
public BoltCore(int cost) {
super(cost);
}
@Override
public Material getMaterial(ItemStack stack) {
NBTTagList materials = TagUtil.getBaseMaterialsTagList(stack);
return TinkerRegistry.getMaterial(materials.getStringTagAt(0));
}
public static Material getHeadMaterial(ItemStack stack) {
NBTTagList materials = TagUtil.getBaseMaterialsTagList(stack);
return TinkerRegistry.getMaterial(materials.getStringTagAt(1));
}
@Override
public ItemStack getItemstackWithMaterial(Material material) {
if(material.hasStats(MaterialTypes.SHAFT)) {
return getItemstackWithMaterials(material, TinkerMaterials.iron);
}
return getItemstackWithMaterials(TinkerMaterials.wood, material);
}
public static ItemStack getItemstackWithMaterials(Material shaft, Material head) {
ItemStack stack = new ItemStack(TinkerTools.boltCore);
NBTTagList tagList = new NBTTagList();
tagList.appendTag(new NBTTagString(shaft.getIdentifier()));
tagList.appendTag(new NBTTagString(head.getIdentifier()));
NBTTagCompound rootTag = new NBTTagCompound();
NBTTagCompound baseTag = new NBTTagCompound();
baseTag.setTag(Tags.BASE_MATERIALS, tagList);
rootTag.setTag(Tags.BASE_DATA, baseTag);
stack.setTagCompound(rootTag);
return stack;
}
public static ItemStack getHeadStack(ItemStack boltCore) {
return getItemstackWithMaterials(BoltCore.getHeadMaterial(boltCore), Material.UNKNOWN);
}
@SideOnly(Side.CLIENT)
@Override
public void addInformation(ItemStack stack, EntityPlayer playerIn, List<String> tooltip, boolean advanced) {
Material material = getMaterial(stack);
Material material2 = getHeadMaterial(stack);
// Material traits/info
boolean shift = Util.isShiftKeyDown();
if(!checkMissingMaterialTooltip(stack, tooltip)) {
tooltip.addAll(getTooltipTraitInfo(material));
tooltip.addAll(getTooltipTraitInfo(material2));
}
// Stats
if(Config.extraTooltips) {
if(!shift) {
// info tooltip for detailed and component info
tooltip.add("");
tooltip.add(Util.translate("tooltip.tool.holdShift"));
}
else {
tooltip.addAll(getTooltipStatsInfo(material));
tooltip.addAll(getTooltipStatsInfo(material2));
}
}
tooltip.addAll(getAddedByInfo(material2));
}
@Nonnull
@Override
public String getItemStackDisplayName(@Nonnull ItemStack stack) {
Material material = getMaterial(stack);
Material material2 = getHeadMaterial(stack);
String originalItemName = ("" + I18n.translateToLocal(this.getUnlocalizedNameInefficiently(stack) + ".name")).trim();
return Material.getCombinedItemName(originalItemName, ImmutableList.of(material, material2));
}
@Override
public boolean canBeCrafted() {
return false;
}
@Override
public boolean canBeCasted() {
return false;
}
@SideOnly(Side.CLIENT)
@Override
public ItemStack getOutlineRenderStack() {
if(GUI_RENDER_ITEMSTACK == null) {
GUI_RENDER_ITEMSTACK = getItemstackWithMaterials(CustomTextureCreator.guiMaterial, CustomTextureCreator.guiMaterial);
}
return GUI_RENDER_ITEMSTACK;
}
}