/// <summary> /// Create and set the output for a giving output config, output object, input object and a given farmer. /// If the farmer is not passed, the default one will be used. /// </summary> /// <param name="outputConfig">The output config</param> /// <param name="output">The output to load the name on</param> /// <param name="input">The input used</param> /// <param name="who">The farmer to be used</param> public static void LoadOutputName(OutputConfig outputConfig, Object output, Object input, Farmer who = null) { string outputName = null; bool inputUsed = false; who = who ?? Game1.player; if (outputConfig.PreserveType.HasValue) { string inputName = input?.Name ?? outputConfig.OutputGenericParentName ?? ""; if (outputConfig.KeepInputParentIndex) { if (input?.preservedParentSheetIndex.Value == -1) { inputName = outputConfig.OutputGenericParentName; } else if (input?.preservedParentSheetIndex.Value > 0 && Game1.objectInformation.ContainsKey(input.preservedParentSheetIndex.Value)) { inputName = ObjectUtils.GetObjectParameter(Game1.objectInformation[input.preservedParentSheetIndex.Value], (int)ObjectParameter.Name); } } else if (input?.preservedParentSheetIndex.Value > 0 && Game1.objectInformation.ContainsKey(input.ParentSheetIndex)) { inputName = ObjectUtils.GetObjectParameter(Game1.objectInformation[input.ParentSheetIndex], (int)ObjectParameter.Name); } outputName = ObjectUtils.GetPreserveName(outputConfig.PreserveType.Value, inputName); output.preserve.Value = outputConfig.PreserveType; inputUsed = true; } else if (output.parentSheetIndex == 340) { outputName = $"{input?.Name ?? "Wild"} Honey"; inputUsed = true; } else if (outputConfig.OutputName != null) { string inputName = input?.Name ?? outputConfig.OutputGenericParentName ?? ""; if (outputConfig.KeepInputParentIndex) { if (input?.preservedParentSheetIndex.Value == -1) { inputName = outputConfig.OutputGenericParentName; } else if (input?.preservedParentSheetIndex.Value > 0 && Game1.objectInformation.ContainsKey(input.preservedParentSheetIndex.Value)) { inputName = ObjectUtils.GetObjectParameter(Game1.objectInformation[input.preservedParentSheetIndex.Value], (int)ObjectParameter.Name); } } else if (input?.preservedParentSheetIndex.Value > 0 && Game1.objectInformation.ContainsKey(input.ParentSheetIndex)) { inputName = ObjectUtils.GetObjectParameter(Game1.objectInformation[input.ParentSheetIndex], (int)ObjectParameter.Name); } outputName = outputConfig.OutputName .Replace("{inputName}", inputName) .Replace("{outputName}", output.Name) .Replace("{farmerName}", who.Name) .Replace("{farmName}", who.farmName.Value); inputUsed = outputConfig.OutputName.Contains("{inputName}"); } if (outputName != null) { Regex regex = new Regex("[ ]{2,}", RegexOptions.None); output.Name = regex.Replace(outputName, " ").Trim(); } if (inputUsed) { output.preservedParentSheetIndex.Value = input == null ? -1 : outputConfig.KeepInputParentIndex && input.preservedParentSheetIndex.Value != 0 ? input.preservedParentSheetIndex.Value : input.ParentSheetIndex; } if (outputName != null) { output.AddCustomName(outputConfig); output.AddGenericParentName(outputConfig); output.AddContentPackUniqueID(outputConfig); } //Called just to load the display name. string loadingDisplayName = output.DisplayName; }