package ttftcuts.physis.common.handler;
import java.util.List;
import ttftcuts.physis.Physis;
import ttftcuts.physis.api.artifact.IArtifactTrigger;
import ttftcuts.physis.api.artifact.ISocketable;
import ttftcuts.physis.common.PhysisItems;
import ttftcuts.physis.common.artifact.PhysisArtifacts;
import ttftcuts.physis.common.helper.InputHelper;
import ttftcuts.physis.common.item.INBTDamageItem;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemRecord;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
public class TooltipHandler {
public static final int tipWidth = 200;
@SubscribeEvent
public void onTooltip(ItemTooltipEvent event) {
if (event.itemStack.getItem() instanceof INBTDamageItem) {
INBTDamageItem nitem = (INBTDamageItem)(event.itemStack.getItem());
boolean show = Minecraft.getMinecraft().gameSettings.advancedItemTooltips;
if (show && nitem.getNBTDamage(event.itemStack) > 0) {
event.toolTip.add("Durability: " + (nitem.getNBTMaxDamage(event.itemStack) - event.itemStack.getItemDamageForDisplay()) + " / " + nitem.getNBTMaxDamage(event.itemStack));
}
}
if (event.itemStack.stackTagCompound != null){
if (event.itemStack.stackTagCompound.hasKey(PhysisArtifacts.SOCKETEDTAG)) {
int index = -1;
for(int i=0; i<event.toolTip.size(); i++) {
if (event.toolTip.get(i).isEmpty()) {
index = i;
}
}
if (index != -1) {
addSocketTooltip(event.entityPlayer, event.itemStack, event.toolTip, index);
} else {
addSocketTooltip(event.entityPlayer, event.itemStack, event.toolTip, event.toolTip.size());
}
}
if (event.itemStack.stackTagCompound.hasKey(PhysisArtifacts.ARTIFACTTAG)) {
List<String> content = Physis.text.translateAndWrap(this.getTooltipForSocketable(event.itemStack), tipWidth);
event.toolTip.addAll(content);
}
} else if (event.itemStack.getItem() instanceof ItemRecord) {
ItemStack held = event.entityPlayer.getHeldItem();
if (held != null && held.getItem() == PhysisItems.addsocket) {
addRecordTooltip(event.itemStack, event.toolTip, event.toolTip.size());
}
}
}
@SuppressWarnings("unchecked")
public void addSocketTooltip(EntityPlayer player, ItemStack stack, List<String> lines, int index) {
NBTTagCompound[] sockets = PhysisArtifacts.getSocketablesFromStack(stack);
lines.add(index, "");
index++;
int totaloffset = 0;
int postoffset = 0;
for (int i=0; i<sockets.length; i++) {
int offset = totaloffset + i;
if (sockets[i] != null) {
ItemStack socketed = ItemStack.loadItemStackFromNBT(sockets[i]);
List<String> stt = socketed.getTooltip(player, false);
String format = socketed.getItem().getRarity(socketed).rarityColor.toString();
int socketColour = 3;
if (socketed.getItem() instanceof ISocketable) {
socketColour = ((ISocketable)socketed.getItem()).getSocketColour(socketed);
}
socketColour = Math.max(Math.min(15, socketColour), 0);
postoffset++;
if (InputHelper.isKeyDown(Minecraft.getMinecraft().gameSettings.keyBindSneak.getKeyCode())) {
for(int j=0; j<stt.size(); j++) {
if (j == 0) {
stt.set(j, " \u00A7"+socketColour+"\u25a0\u00A7r "+format+stt.get(j));
} else {
stt.set(j, " "+stt.get(j));
}
}
lines.addAll(index+offset, stt);
totaloffset += stt.size() - 1;
} else {
String name = socketed.getDisplayName();
lines.add(index+offset, " \u00A7"+socketColour+"\u25a0\u00A7r "+format+name+ (stt.size() > 1 ? " \u00A78+" : ""));
}
} else {
lines.add(index+offset, " \u00A78\u25a0 Empty socket");
}
}
if (stack.getItem() instanceof ItemRecord) {
addRecordTooltip(stack, lines, index+totaloffset+postoffset);
}
}
public String getTooltipForSocketable(ItemStack stack) {
NBTTagCompound tag = stack.stackTagCompound.getCompoundTag(PhysisArtifacts.ARTIFACTTAG);
if (tag.hasKey(PhysisArtifacts.TRIGGERTAG) && tag.hasKey(PhysisArtifacts.EFFECTTAG)) {
IArtifactTrigger trigger = PhysisArtifacts.getTriggerFromSocketable(stack);
if (trigger != null) {
return Physis.text.formatArtifactNames(trigger.getUnlocalizedTriggerString(), stack);
}
}
return null;
}
public void addRecordTooltip(ItemStack stack, List<String> lines, int offset) {
List<String> tip = Physis.text.translateAndWrap("tile.physis:jukebox.recordtip", tipWidth);
lines.add(offset, "");
lines.addAll(offset+1, tip);
}
}