@Override
  /**
   * Returns a String representation of the Item.
   */
  public String toString() {
    StringBuilder returnString = new StringBuilder();

    // Append quantity if it is there.
    if (this.quantity > 0) {
      returnString.append(this.quantity + " ");
    }

    // If has name, use it.
    if (!this.name.equals("")) {

      if (this.quantity > 1) {
        returnString.append(Generator.pluralize(this.name));
      }
      else {
        returnString.append(this.name);
      }

      returnString.append(" ");

      if (this.value.size() > 0) {
        returnString.append("for ");
      }

      Generator.appendCommaList(this.value, returnString, "and");
      return returnString.toString().trim();

    }

    // Otherwise use type if it has it.
    else if (!this.type.equals("")) {
      if (!this.rarity.equals("")) {
        returnString.append(this.rarity.toLowerCase() + " ");
      }
      if (this.level > -1) {
        returnString.append("Item Level " + this.level + " ");
      }
      if (this.quantity > 1) {
        returnString.append(Generator.pluralize(this.type.toLowerCase()));
      }
      else {
        returnString.append(this.type.toLowerCase());

      }
      returnString.append(" ");

      if (this.value.size() > 0) {
        returnString.append("for ");
      }

      Generator.appendCommaList(this.value, returnString, "and");
      return returnString.toString().trim();
    }

    // Item needs a name or type to be complete.
    else {
      return "< Error: Incomplete item encountered >";
    }
  }