Program: 171397
Project: 171397
Buggy source:
private void clothingTooltip(AbstractClothing absClothing){
  int yIncrease=0;
  if (!absClothing.getAttributeModifiers().isEmpty() && absClothing.isEnchantmentKnown()) {
    if (absClothing.getAttributeModifiers().size() >= absClothing.getExtraDescriptions(equippedToCharacter).size())     yIncrease=absClothing.getAttributeModifiers().size();
 else     yIncrease=absClothing.getExtraDescriptions(equippedToCharacter).size() - 1;
  }
 else {
    if (absClothing.getExtraDescriptions(equippedToCharacter).size() >= 1)     yIncrease=absClothing.getExtraDescriptions(equippedToCharacter).size() - 1;
  }
  if (Main.game.getDialogueFlags().tradePartner != null)   yIncrease+=2;
  Main.mainController.setTooltipSize(360,320 + (yIncrease * 20));
  tooltipSB.setLength(0);
  tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(absClothing.getDisplayName(true)) + "String_Node_Str"+ "String_Node_Str"+ Util.capitaliseSentence(absClothing.getClothingType().getSlot().getName())+ "String_Node_Str"+ "String_Node_Str"+ (absClothing.getClothingType().getClothingSet() == null ? "String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str" : absClothing.getClothingType().getClothingSet().getName() + "String_Node_Str")+ "String_Node_Str"+ "String_Node_Str"+ UtilText.parse(absClothing.getClothingType().getDescription())+ "String_Node_Str");
  tooltipSB.append("String_Node_Str");
  if (!absClothing.getAttributeModifiers().isEmpty()) {
    if (!absClothing.isEnchantmentKnown())     tooltipSB.append("String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str");
 else {
      tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(absClothing.isBadEnchantment() ? absClothing.getCoreEnchantment().getNegativeEnchantment() : absClothing.getCoreEnchantment().getPositiveEnchantment()) + "String_Node_Str");
      for (      Entry<Attribute,Integer> e : absClothing.getAttributeModifiers().entrySet())       tooltipSB.append("String_Node_Str" + (e.getValue() < 0 ? "String_Node_Str" + Colour.GENERIC_BAD.toWebHexString() + "String_Node_Str" : "String_Node_Str" + Colour.GENERIC_GOOD.toWebHexString() + "String_Node_Str") + e.getValue()+ "String_Node_Str"+ e.getKey().getColour().toWebHexString()+ "String_Node_Str"+ Util.capitaliseSentence(e.getKey().getAbbreviatedName())+ "String_Node_Str");
    }
  }
 else {
    tooltipSB.append("String_Node_Str");
  }
  tooltipSB.append(absClothing.getClothingType().getPhysicalResistance() == 0 ? "String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str"+ Attribute.RESISTANCE_PHYSICAL.getAbbreviatedName()+ "String_Node_Str" : "String_Node_Str" + Colour.GENERIC_GOOD.toWebHexString() + "String_Node_Str"+ absClothing.getClothingType().getPhysicalResistance()+ "String_Node_Str"+ "String_Node_Str"+ Attribute.RESISTANCE_PHYSICAL.getColour().toWebHexString()+ "String_Node_Str"+ Attribute.RESISTANCE_PHYSICAL.getAbbreviatedName()+ "String_Node_Str");
  tooltipSB.append("String_Node_Str");
  tooltipSB.append("String_Node_Str");
  if (absClothing.getExtraDescriptions(equippedToCharacter).isEmpty())   tooltipSB.append("String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str");
 else {
    tooltipSB.append("String_Node_Str");
    for (    String s : absClothing.getExtraDescriptions(equippedToCharacter))     tooltipSB.append("String_Node_Str" + s);
  }
  tooltipSB.append("String_Node_Str");
  tooltipSB.append("String_Node_Str" + "String_Node_Str" + com.base.utils.Colour.CURRENCY.toWebHexString() + "String_Node_Str"+ Main.game.getCurrencySymbol()+ "String_Node_Str"+ (absClothing.isEnchantmentKnown() ? absClothing.getValue() : "String_Node_Str")+ "String_Node_Str"+ "String_Node_Str");
  if (Main.game.getDialogueFlags().tradePartner != null) {
    if (owner.isPlayer()) {
      if (Main.game.getDialogueFlags().tradePartner.willBuy(absClothing))       tooltipSB.append("String_Node_Str" + Main.game.getDialogueFlags().tradePartner.getName("String_Node_Str") + "String_Node_Str"+ "String_Node_Str"+ com.base.utils.Colour.CURRENCY.toWebHexString()+ "String_Node_Str"+ Main.game.getCurrencySymbol()+ "String_Node_Str"+ (absClothing.isEnchantmentKnown() ? (int)(Main.game.getDialogueFlags().tradePartner.getBuyModifier() * absClothing.getValue()) : 5)+ "String_Node_Str"+ "String_Node_Str");
 else       tooltipSB.append("String_Node_Str" + "String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str"+ Main.game.getDialogueFlags().tradePartner.getName("String_Node_Str")+ "String_Node_Str"+ "String_Node_Str");
    }
 else {
      tooltipSB.append("String_Node_Str" + Main.game.getDialogueFlags().tradePartner.getName("String_Node_Str") + "String_Node_Str"+ "String_Node_Str"+ com.base.utils.Colour.CURRENCY.toWebHexString()+ "String_Node_Str"+ Main.game.getCurrencySymbol()+ "String_Node_Str"+ (absClothing.isEnchantmentKnown() ? (int)(Main.game.getDialogueFlags().tradePartner.getSellModifier() * absClothing.getValue()) : 5)+ "String_Node_Str"+ "String_Node_Str");
    }
  }
  Main.mainController.setTooltipContent(tooltipSB.toString());
}

Fixed version (ground truth):
private void clothingTooltip(AbstractClothing absClothing){
  int yIncrease=0;
  if (!absClothing.getAttributeModifiers().isEmpty() && absClothing.isEnchantmentKnown()) {
    if (absClothing.getAttributeModifiers().size() >= absClothing.getExtraDescriptions(equippedToCharacter).size())     yIncrease=absClothing.getAttributeModifiers().size();
 else     yIncrease=absClothing.getExtraDescriptions(equippedToCharacter).size() - 1;
  }
 else {
    if (absClothing.getExtraDescriptions(equippedToCharacter).size() >= 1)     yIncrease=absClothing.getExtraDescriptions(equippedToCharacter).size() - 1;
  }
  if (Main.game.getDialogueFlags().tradePartner != null)   yIncrease+=2;
  Main.mainController.setTooltipSize(360,320 + (yIncrease * 20));
  tooltipSB.setLength(0);
  tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(absClothing.getDisplayName(true)) + "String_Node_Str"+ "String_Node_Str"+ Util.capitaliseSentence(absClothing.getClothingType().getSlot().getName())+ "String_Node_Str"+ "String_Node_Str"+ (absClothing.getClothingType().getClothingSet() == null ? "String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str" : absClothing.getClothingType().getClothingSet().getName() + "String_Node_Str")+ "String_Node_Str"+ "String_Node_Str"+ UtilText.parse(absClothing.getClothingType().getDescription())+ "String_Node_Str");
  tooltipSB.append("String_Node_Str");
  if (!absClothing.getAttributeModifiers().isEmpty()) {
    if (!absClothing.isEnchantmentKnown())     tooltipSB.append("String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str");
 else {
      tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(absClothing.isBadEnchantment() ? absClothing.getCoreEnchantment().getNegativeEnchantment() : absClothing.getCoreEnchantment().getPositiveEnchantment()) + "String_Node_Str");
      for (      Entry<Attribute,Integer> e : absClothing.getAttributeModifiers().entrySet())       tooltipSB.append("String_Node_Str" + (e.getValue() < 0 ? "String_Node_Str" + Colour.GENERIC_BAD.toWebHexString() + "String_Node_Str" : "String_Node_Str" + Colour.GENERIC_GOOD.toWebHexString() + "String_Node_Str") + e.getValue()+ "String_Node_Str"+ e.getKey().getColour().toWebHexString()+ "String_Node_Str"+ Util.capitaliseSentence(e.getKey().getAbbreviatedName())+ "String_Node_Str");
    }
  }
 else {
    tooltipSB.append("String_Node_Str");
  }
  tooltipSB.append(absClothing.getClothingType().getPhysicalResistance() == 0 ? "String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str"+ Attribute.RESISTANCE_PHYSICAL.getAbbreviatedName()+ "String_Node_Str" : "String_Node_Str" + Colour.GENERIC_GOOD.toWebHexString() + "String_Node_Str"+ absClothing.getClothingType().getPhysicalResistance()+ "String_Node_Str"+ "String_Node_Str"+ Attribute.RESISTANCE_PHYSICAL.getColour().toWebHexString()+ "String_Node_Str"+ Attribute.RESISTANCE_PHYSICAL.getAbbreviatedName()+ "String_Node_Str");
  tooltipSB.append("String_Node_Str");
  tooltipSB.append("String_Node_Str");
  if (absClothing.getExtraDescriptions(equippedToCharacter).isEmpty())   tooltipSB.append("String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str");
 else {
    tooltipSB.append("String_Node_Str");
    for (    String s : absClothing.getExtraDescriptions(equippedToCharacter))     tooltipSB.append("String_Node_Str" + s);
  }
  tooltipSB.append("String_Node_Str");
  tooltipSB.append("String_Node_Str" + "String_Node_Str" + com.base.utils.Colour.CURRENCY.toWebHexString() + "String_Node_Str"+ Main.game.getCurrencySymbol()+ "String_Node_Str"+ (absClothing.isEnchantmentKnown() ? absClothing.getValue() : "String_Node_Str")+ "String_Node_Str"+ "String_Node_Str");
  if (Main.game.getDialogueFlags().tradePartner != null) {
    if (owner.isPlayer()) {
      if (Main.game.getDialogueFlags().tradePartner.willBuy(absClothing))       tooltipSB.append("String_Node_Str" + Main.game.getDialogueFlags().tradePartner.getName("String_Node_Str") + "String_Node_Str"+ "String_Node_Str"+ com.base.utils.Colour.CURRENCY.toWebHexString()+ "String_Node_Str"+ Main.game.getCurrencySymbol()+ "String_Node_Str"+ absClothing.getPrice(Main.game.getDialogueFlags().tradePartner.getBuyModifier())+ "String_Node_Str"+ "String_Node_Str");
 else       tooltipSB.append("String_Node_Str" + "String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str"+ Main.game.getDialogueFlags().tradePartner.getName("String_Node_Str")+ "String_Node_Str"+ "String_Node_Str");
    }
 else {
      if (InventoryDialogue.isBuyback()) {
        tooltipSB.append("String_Node_Str" + Main.game.getDialogueFlags().tradePartner.getName("String_Node_Str") + "String_Node_Str"+ "String_Node_Str"+ com.base.utils.Colour.CURRENCY.toWebHexString()+ "String_Node_Str"+ Main.game.getCurrencySymbol()+ "String_Node_Str"+ getBuybackPriceFor(absClothing)+ "String_Node_Str"+ "String_Node_Str");
      }
 else {
        tooltipSB.append("String_Node_Str" + Main.game.getDialogueFlags().tradePartner.getName("String_Node_Str") + "String_Node_Str"+ "String_Node_Str"+ com.base.utils.Colour.CURRENCY.toWebHexString()+ "String_Node_Str"+ Main.game.getCurrencySymbol()+ "String_Node_Str"+ absClothing.getPrice(Main.game.getDialogueFlags().tradePartner.getSellModifier())+ "String_Node_Str"+ "String_Node_Str");
      }
    }
  }
  Main.mainController.setTooltipContent(tooltipSB.toString());
}