Moved narrateHoveredItemInInventory to separate class
This commit is contained in:
		| @@ -303,31 +303,33 @@ namespace stardew_access.Patches | |||||||
|                 } |                 } | ||||||
|                 else |                 else | ||||||
|                 { |                 { | ||||||
|                     for (int i = 0; i < __instance.inventory.inventory.Count; i++) |                     if (InventoryUtils.narrateHoveredItemInInventory(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y)) | ||||||
|                     { |  | ||||||
|                         if (!__instance.inventory.inventory[i].containsPoint(x, y)) |  | ||||||
|                             continue; |  | ||||||
|  |  | ||||||
|                         if (__instance.inventory.actualInventory[i] == null) |  | ||||||
|                             toSpeak = "Empty slot"; |  | ||||||
|                         else |  | ||||||
|                         { |  | ||||||
|                             toSpeak = $"{__instance.inventory.actualInventory[i].Stack} {__instance.inventory.actualInventory[i].DisplayName}"; |  | ||||||
|  |  | ||||||
|                             if (!__instance.inventory.highlightMethod(__instance.inventory.actualInventory[i])) |  | ||||||
|                             { |  | ||||||
|                                 toSpeak = $"{toSpeak} not usable here"; |  | ||||||
|                             } |  | ||||||
|                         } |  | ||||||
|  |  | ||||||
|                         if (fieldOfficeMenuQuery != $"{toSpeak}:{i}") |  | ||||||
|                         { |  | ||||||
|                             fieldOfficeMenuQuery = $"{toSpeak}:{i}"; |  | ||||||
|                             MainClass.ScreenReader.Say(toSpeak, true); |  | ||||||
|                         } |  | ||||||
|  |  | ||||||
|                         return; |                         return; | ||||||
|                     } |                     // for (int i = 0; i < __instance.inventory.inventory.Count; i++) | ||||||
|  |                     // { | ||||||
|  |                     //     if (!__instance.inventory.inventory[i].containsPoint(x, y)) | ||||||
|  |                     //         continue; | ||||||
|  |                     // | ||||||
|  |                     //     if (__instance.inventory.actualInventory[i] == null) | ||||||
|  |                     //         toSpeak = "Empty slot"; | ||||||
|  |                     //     else | ||||||
|  |                     //     { | ||||||
|  |                     //         toSpeak = $"{__instance.inventory.actualInventory[i].Stack} {__instance.inventory.actualInventory[i].DisplayName}"; | ||||||
|  |                     // | ||||||
|  |                     //         if (!__instance.inventory.highlightMethod(__instance.inventory.actualInventory[i])) | ||||||
|  |                     //         { | ||||||
|  |                     //             toSpeak = $"{toSpeak} not usable here"; | ||||||
|  |                     //         } | ||||||
|  |                     //     } | ||||||
|  |                     // | ||||||
|  |                     //     if (fieldOfficeMenuQuery != $"{toSpeak}:{i}") | ||||||
|  |                     //     { | ||||||
|  |                     //         fieldOfficeMenuQuery = $"{toSpeak}:{i}"; | ||||||
|  |                     //         MainClass.ScreenReader.Say(toSpeak, true); | ||||||
|  |                     //     } | ||||||
|  |                     // | ||||||
|  |                     //     return; | ||||||
|  |                     // } | ||||||
|  |  | ||||||
|                     for (int i = 0; i < __instance.pieceHolders.Count; i++) |                     for (int i = 0; i < __instance.pieceHolders.Count; i++) | ||||||
|                     { |                     { | ||||||
| @@ -414,4 +416,4 @@ namespace stardew_access.Patches | |||||||
|  |  | ||||||
|         #endregion |         #endregion | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -20,7 +20,6 @@ namespace stardew_access.Patches | |||||||
|         internal static string profilePageQuery = ""; |         internal static string profilePageQuery = ""; | ||||||
|         internal static int currentSelectedCraftingRecipe = -1; |         internal static int currentSelectedCraftingRecipe = -1; | ||||||
|         internal static bool isSelectingRecipe = false; |         internal static bool isSelectingRecipe = false; | ||||||
|         internal static int prevSlotIndex = -999; |  | ||||||
|  |  | ||||||
|         internal static void CollectionsPagePatch(CollectionsPage __instance) |         internal static void CollectionsPagePatch(CollectionsPage __instance) | ||||||
|         { |         { | ||||||
| @@ -241,7 +240,7 @@ namespace stardew_access.Patches | |||||||
|                 #endregion |                 #endregion | ||||||
|  |  | ||||||
|                 #region Narrate hovered item |                 #region Narrate hovered item | ||||||
|                 if (narrateHoveredItemInInventory(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y, hoverPrice: __instance.hoverPrice)) |                 if (InventoryUtils.narrateHoveredItemInInventory(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y, hoverPrice: __instance.hoverPrice)) | ||||||
|                 { |                 { | ||||||
|                     shopMenuQueryKey = ""; |                     shopMenuQueryKey = ""; | ||||||
|                     return; |                     return; | ||||||
| @@ -396,7 +395,7 @@ namespace stardew_access.Patches | |||||||
|                 #endregion |                 #endregion | ||||||
|  |  | ||||||
|                 #region Narrate hovered item |                 #region Narrate hovered item | ||||||
|                 if (narrateHoveredItemInInventory(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y)) |                 if (InventoryUtils.narrateHoveredItemInInventory(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y)) | ||||||
|                     geodeMenuQueryKey = ""; |                     geodeMenuQueryKey = ""; | ||||||
|                 #endregion |                 #endregion | ||||||
|             } |             } | ||||||
| @@ -573,14 +572,14 @@ namespace stardew_access.Patches | |||||||
|                 #endregion |                 #endregion | ||||||
|  |  | ||||||
|                 #region Narrate hovered item |                 #region Narrate hovered item | ||||||
|                 if (narrateHoveredItemInInventory(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y, true)) |                 if (InventoryUtils.narrateHoveredItemInInventory(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y, true)) | ||||||
|                 { |                 { | ||||||
|                     gameMenuQueryKey = ""; |                     gameMenuQueryKey = ""; | ||||||
|                     itemGrabMenuQueryKey = ""; |                     itemGrabMenuQueryKey = ""; | ||||||
|                     return; |                     return; | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 if (narrateHoveredItemInInventory(__instance.ItemsToGrabMenu, __instance.ItemsToGrabMenu.inventory, __instance.ItemsToGrabMenu.actualInventory, x, y, true)) |                 if (InventoryUtils.narrateHoveredItemInInventory(__instance.ItemsToGrabMenu, __instance.ItemsToGrabMenu.inventory, __instance.ItemsToGrabMenu.actualInventory, x, y, true)) | ||||||
|                 { |                 { | ||||||
|                     gameMenuQueryKey = ""; |                     gameMenuQueryKey = ""; | ||||||
|                     itemGrabMenuQueryKey = ""; |                     itemGrabMenuQueryKey = ""; | ||||||
| @@ -855,7 +854,7 @@ namespace stardew_access.Patches | |||||||
|                 #endregion |                 #endregion | ||||||
|  |  | ||||||
|                 #region Narrate hovered item |                 #region Narrate hovered item | ||||||
|                 if (narrateHoveredItemInInventory(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y)) |                 if (InventoryUtils.narrateHoveredItemInInventory(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y)) | ||||||
|                 { |                 { | ||||||
|                     gameMenuQueryKey = ""; |                     gameMenuQueryKey = ""; | ||||||
|                     craftingPageQueryKey = ""; |                     craftingPageQueryKey = ""; | ||||||
| @@ -1066,7 +1065,7 @@ namespace stardew_access.Patches | |||||||
|                 #endregion |                 #endregion | ||||||
|  |  | ||||||
|                 #region Narrate hovered item |                 #region Narrate hovered item | ||||||
|                 if (narrateHoveredItemInInventory(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y, true)) |                 if (InventoryUtils.narrateHoveredItemInInventory(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y, true)) | ||||||
|                 { |                 { | ||||||
|                     gameMenuQueryKey = ""; |                     gameMenuQueryKey = ""; | ||||||
|                     inventoryPageQueryKey = ""; |                     inventoryPageQueryKey = ""; | ||||||
| @@ -1193,164 +1192,5 @@ namespace stardew_access.Patches | |||||||
|                 MainClass.ErrorLog($"Unable to narrate Text:\n{e.Message}\n{e.StackTrace}"); |                 MainClass.ErrorLog($"Unable to narrate Text:\n{e.Message}\n{e.StackTrace}"); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         internal static bool narrateHoveredItemInInventory(InventoryMenu inventoryMenu, List<ClickableComponent> inventory, IList<Item> actualInventory, int x, int y, bool giveExtraDetails = false, int hoverPrice = -1, int extraItemToShowIndex = -1, int extraItemToShowAmount = -1) |  | ||||||
|         { |  | ||||||
|             for (int i = 0; i < inventory.Count; i++) |  | ||||||
|             { |  | ||||||
|                 if (!inventory[i].containsPoint(x, y)) continue; |  | ||||||
|  |  | ||||||
|                 if ((i + 1) > actualInventory.Count || actualInventory[i] == null) |  | ||||||
|                 { |  | ||||||
|                     // For empty slot |  | ||||||
|                     checkAndSpeak("Empty Slot", i); |  | ||||||
|                     prevSlotIndex = i; |  | ||||||
|                     return true; |  | ||||||
|                 } |  | ||||||
|  |  | ||||||
|                 string toSpeak = ""; |  | ||||||
|                 string name = $"{actualInventory[i].DisplayName}{handleUnHighlightedItem(inventoryMenu.highlightMethod(actualInventory[i]), i)}"; |  | ||||||
|                 int stack = actualInventory[i].Stack; |  | ||||||
|                 string quality = getQualityFromItem(actualInventory[i]); |  | ||||||
|                 string healthNStamine = getHealthNStaminaFromItem(actualInventory[i]); |  | ||||||
|                 string buffs = getBuffsFromItem(actualInventory[i]); |  | ||||||
|                 string description = actualInventory[i].getDescription(); |  | ||||||
|                 string price = getPrice(hoverPrice); |  | ||||||
|                 string requirements = getExtraItemInfo(extraItemToShowIndex, extraItemToShowAmount); |  | ||||||
|  |  | ||||||
|                 if (giveExtraDetails) |  | ||||||
|                 { |  | ||||||
|                     if (stack > 1) |  | ||||||
|                         toSpeak = $"{stack} {name} {quality}, \n{requirements}, \n{price}, \n{description}, \n{healthNStamine}, \n{buffs}"; |  | ||||||
|                     else |  | ||||||
|                         toSpeak = $"{name} {quality}, \n{requirements}, \n{price}, \n{description}, \n{healthNStamine}, \n{buffs}"; |  | ||||||
|                 } |  | ||||||
|                 else |  | ||||||
|                 { |  | ||||||
|                     if (stack > 1) |  | ||||||
|                         toSpeak = $"{stack} {name} {quality}, \n{requirements}, \n{price}"; |  | ||||||
|                     else |  | ||||||
|                         toSpeak = $"{name} {quality}, \n{requirements}, \n{price}"; |  | ||||||
|                 } |  | ||||||
|  |  | ||||||
|  |  | ||||||
|                 checkAndSpeak(toSpeak, i); |  | ||||||
|                 prevSlotIndex = i; |  | ||||||
|                 return true; |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             // If no slot is hovered |  | ||||||
|             return false; |  | ||||||
|         } |  | ||||||
|          |  | ||||||
|         private static void checkAndSpeak(String toSpeak, int hoveredInventoryIndex) |  | ||||||
|         { |  | ||||||
|             if (hoveredItemQueryKey == $"{toSpeak}:{hoveredInventoryIndex}") return; |  | ||||||
|              |  | ||||||
|             hoveredItemQueryKey = $"{toSpeak}:{hoveredInventoryIndex}"; |  | ||||||
|             MainClass.ScreenReader.Say(toSpeak, true); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         private static String getQualityFromItem(Item item) |  | ||||||
|         { |  | ||||||
|             if (item is not StardewValley.Object || ((StardewValley.Object)item).Quality <= 0) |  | ||||||
|                 return ""; |  | ||||||
|  |  | ||||||
|             int qualityIndex = ((StardewValley.Object)item).Quality; |  | ||||||
|             if (qualityIndex == 1) |  | ||||||
|             { |  | ||||||
|                 return "Silver quality"; |  | ||||||
|             } |  | ||||||
|             else if (qualityIndex == 2 || qualityIndex == 3) |  | ||||||
|             { |  | ||||||
|                 return "Gold quality"; |  | ||||||
|             } |  | ||||||
|             else if (qualityIndex >= 4) |  | ||||||
|             { |  | ||||||
|                 return "Iridium quality"; |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             return ""; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         private static String getHealthNStaminaFromItem(Item item) |  | ||||||
|         { |  | ||||||
|             if (item is not StardewValley.Object || ((StardewValley.Object)item).Edibility == -300) |  | ||||||
|                 return ""; |  | ||||||
|  |  | ||||||
|             String toReturn = ""; |  | ||||||
|             int stamina_recovery = ((StardewValley.Object)item).staminaRecoveredOnConsumption(); |  | ||||||
|             toReturn += $"{stamina_recovery} Energy"; |  | ||||||
|  |  | ||||||
|             if (stamina_recovery < 0) return toReturn; |  | ||||||
|  |  | ||||||
|             int health_recovery = ((StardewValley.Object)item).healthRecoveredOnConsumption(); |  | ||||||
|             toReturn += $"\n\t{health_recovery} Health"; |  | ||||||
|  |  | ||||||
|             return toReturn; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         private static String getBuffsFromItem(Item item) |  | ||||||
|         { |  | ||||||
|             if (item == null) return ""; |  | ||||||
|             if (item is not StardewValley.Object) return ""; |  | ||||||
|             if (((StardewValley.Object)item) == null) return ""; |  | ||||||
|  |  | ||||||
|             // These variables are taken from the game's code itself (IClickableMenu.cs -> 1016 line) |  | ||||||
|             bool edibleItem = (int)((StardewValley.Object)item).Edibility != -300; |  | ||||||
|             string[]? buffIconsToDisplay = (edibleItem && Game1.objectInformation[((StardewValley.Object)item).ParentSheetIndex].Split('/').Length > 7) |  | ||||||
|                 ? item.ModifyItemBuffs(Game1.objectInformation[((StardewValley.Object)item).ParentSheetIndex].Split('/')[7].Split(' ')) |  | ||||||
|                 : null; |  | ||||||
|  |  | ||||||
|             if (buffIconsToDisplay == null) |  | ||||||
|                 return ""; |  | ||||||
|  |  | ||||||
|             String toReturn = ""; |  | ||||||
|             for (int j = 0; j < buffIconsToDisplay.Length; j++) |  | ||||||
|             { |  | ||||||
|                 string buffName = ((Convert.ToInt32(buffIconsToDisplay[j]) > 0) ? "+" : "") + buffIconsToDisplay[j] + " "; |  | ||||||
|                 if (j <= 11) |  | ||||||
|                 { |  | ||||||
|                     buffName = Game1.content.LoadString("Strings\\UI:ItemHover_Buff" + j, buffName); |  | ||||||
|                 } |  | ||||||
|                 try |  | ||||||
|                 { |  | ||||||
|                     int count = int.Parse(buffName.Substring(0, buffName.IndexOf(' '))); |  | ||||||
|                     if (count != 0) |  | ||||||
|                         toReturn += $"{buffName}\n"; |  | ||||||
|                 } |  | ||||||
|                 catch (Exception) { } |  | ||||||
|             } |  | ||||||
|             return toReturn; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         private static String getExtraItemInfo(int itemIndex, int itemAmount) |  | ||||||
|         { |  | ||||||
|             if (itemIndex == -1) return ""; |  | ||||||
|  |  | ||||||
|             string itemName = Game1.objectInformation[itemIndex].Split('/')[0]; |  | ||||||
|  |  | ||||||
|             if (itemAmount != -1) |  | ||||||
|                 return $"Required: {itemAmount} {itemName}"; |  | ||||||
|             else |  | ||||||
|                 return $"Required: {itemName}"; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         private static String getPrice(int price) |  | ||||||
|         { |  | ||||||
|             if (price == -1) return ""; |  | ||||||
|              |  | ||||||
|             return $"Sell Price: {price} g"; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         private static String handleUnHighlightedItem(bool isHighlighted, int hoveredInventoryIndex) |  | ||||||
|         { |  | ||||||
|             if (isHighlighted) return ""; |  | ||||||
|              |  | ||||||
|             if (prevSlotIndex != hoveredInventoryIndex) |  | ||||||
|                 Game1.playSound("invalid-selection"); |  | ||||||
|  |  | ||||||
|             return " not usable here"; |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										171
									
								
								stardew-access/Patches/InventoryUtils.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										171
									
								
								stardew-access/Patches/InventoryUtils.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,171 @@ | |||||||
|  |  | ||||||
|  | using StardewValley; | ||||||
|  | using StardewValley.Menus; | ||||||
|  |  | ||||||
|  | namespace stardew_access.Patches | ||||||
|  | { | ||||||
|  |     internal class InventoryUtils | ||||||
|  |     { | ||||||
|  |         internal static string hoveredItemQueryKey = ""; | ||||||
|  |         internal static int prevSlotIndex = -999; | ||||||
|  |  | ||||||
|  |         internal static bool narrateHoveredItemInInventory(InventoryMenu inventoryMenu, List<ClickableComponent> inventory, IList<Item> actualInventory, int x, int y, bool giveExtraDetails = false, int hoverPrice = -1, int extraItemToShowIndex = -1, int extraItemToShowAmount = -1) | ||||||
|  |         { | ||||||
|  |             for (int i = 0; i < inventory.Count; i++) | ||||||
|  |             { | ||||||
|  |                 if (!inventory[i].containsPoint(x, y)) continue; | ||||||
|  |  | ||||||
|  |                 if ((i + 1) > actualInventory.Count || actualInventory[i] == null) | ||||||
|  |                 { | ||||||
|  |                     // For empty slot | ||||||
|  |                     checkAndSpeak("Empty Slot", i); | ||||||
|  |                     prevSlotIndex = i; | ||||||
|  |                     return true; | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 string toSpeak = ""; | ||||||
|  |                 string name = $"{actualInventory[i].DisplayName}{handleUnHighlightedItem(inventoryMenu.highlightMethod(actualInventory[i]), i)}"; | ||||||
|  |                 int stack = actualInventory[i].Stack; | ||||||
|  |                 string quality = getQualityFromItem(actualInventory[i]); | ||||||
|  |                 string healthNStamine = getHealthNStaminaFromItem(actualInventory[i]); | ||||||
|  |                 string buffs = getBuffsFromItem(actualInventory[i]); | ||||||
|  |                 string description = actualInventory[i].getDescription(); | ||||||
|  |                 string price = getPrice(hoverPrice); | ||||||
|  |                 string requirements = getExtraItemInfo(extraItemToShowIndex, extraItemToShowAmount); | ||||||
|  |  | ||||||
|  |                 if (giveExtraDetails) | ||||||
|  |                 { | ||||||
|  |                     if (stack > 1) | ||||||
|  |                         toSpeak = $"{stack} {name} {quality}, \n{requirements}, \n{price}, \n{description}, \n{healthNStamine}, \n{buffs}"; | ||||||
|  |                     else | ||||||
|  |                         toSpeak = $"{name} {quality}, \n{requirements}, \n{price}, \n{description}, \n{healthNStamine}, \n{buffs}"; | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|  |                 { | ||||||
|  |                     if (stack > 1) | ||||||
|  |                         toSpeak = $"{stack} {name} {quality}, \n{requirements}, \n{price}"; | ||||||
|  |                     else | ||||||
|  |                         toSpeak = $"{name} {quality}, \n{requirements}, \n{price}"; | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |                 checkAndSpeak(toSpeak, i); | ||||||
|  |                 prevSlotIndex = i; | ||||||
|  |                 return true; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             // If no slot is hovered | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         private static void checkAndSpeak(String toSpeak, int hoveredInventoryIndex) | ||||||
|  |         { | ||||||
|  |             if (hoveredItemQueryKey == $"{toSpeak}:{hoveredInventoryIndex}") return; | ||||||
|  |              | ||||||
|  |             hoveredItemQueryKey = $"{toSpeak}:{hoveredInventoryIndex}"; | ||||||
|  |             MainClass.ScreenReader.Say(toSpeak, true); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private static String getQualityFromItem(Item item) | ||||||
|  |         { | ||||||
|  |             if (item is not StardewValley.Object || ((StardewValley.Object)item).Quality <= 0) | ||||||
|  |                 return ""; | ||||||
|  |  | ||||||
|  |             int qualityIndex = ((StardewValley.Object)item).Quality; | ||||||
|  |             if (qualityIndex == 1) | ||||||
|  |             { | ||||||
|  |                 return "Silver quality"; | ||||||
|  |             } | ||||||
|  |             else if (qualityIndex == 2 || qualityIndex == 3) | ||||||
|  |             { | ||||||
|  |                 return "Gold quality"; | ||||||
|  |             } | ||||||
|  |             else if (qualityIndex >= 4) | ||||||
|  |             { | ||||||
|  |                 return "Iridium quality"; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             return ""; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private static String getHealthNStaminaFromItem(Item item) | ||||||
|  |         { | ||||||
|  |             if (item is not StardewValley.Object || ((StardewValley.Object)item).Edibility == -300) | ||||||
|  |                 return ""; | ||||||
|  |  | ||||||
|  |             String toReturn = ""; | ||||||
|  |             int stamina_recovery = ((StardewValley.Object)item).staminaRecoveredOnConsumption(); | ||||||
|  |             toReturn += $"{stamina_recovery} Energy"; | ||||||
|  |  | ||||||
|  |             if (stamina_recovery < 0) return toReturn; | ||||||
|  |  | ||||||
|  |             int health_recovery = ((StardewValley.Object)item).healthRecoveredOnConsumption(); | ||||||
|  |             toReturn += $"\n\t{health_recovery} Health"; | ||||||
|  |  | ||||||
|  |             return toReturn; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private static String getBuffsFromItem(Item item) | ||||||
|  |         { | ||||||
|  |             if (item == null) return ""; | ||||||
|  |             if (item is not StardewValley.Object) return ""; | ||||||
|  |             if (((StardewValley.Object)item) == null) return ""; | ||||||
|  |  | ||||||
|  |             // These variables are taken from the game's code itself (IClickableMenu.cs -> 1016 line) | ||||||
|  |             bool edibleItem = (int)((StardewValley.Object)item).Edibility != -300; | ||||||
|  |             string[]? buffIconsToDisplay = (edibleItem && Game1.objectInformation[((StardewValley.Object)item).ParentSheetIndex].Split('/').Length > 7) | ||||||
|  |                 ? item.ModifyItemBuffs(Game1.objectInformation[((StardewValley.Object)item).ParentSheetIndex].Split('/')[7].Split(' ')) | ||||||
|  |                 : null; | ||||||
|  |  | ||||||
|  |             if (buffIconsToDisplay == null) | ||||||
|  |                 return ""; | ||||||
|  |  | ||||||
|  |             String toReturn = ""; | ||||||
|  |             for (int j = 0; j < buffIconsToDisplay.Length; j++) | ||||||
|  |             { | ||||||
|  |                 string buffName = ((Convert.ToInt32(buffIconsToDisplay[j]) > 0) ? "+" : "") + buffIconsToDisplay[j] + " "; | ||||||
|  |                 if (j <= 11) | ||||||
|  |                 { | ||||||
|  |                     buffName = Game1.content.LoadString("Strings\\UI:ItemHover_Buff" + j, buffName); | ||||||
|  |                 } | ||||||
|  |                 try | ||||||
|  |                 { | ||||||
|  |                     int count = int.Parse(buffName.Substring(0, buffName.IndexOf(' '))); | ||||||
|  |                     if (count != 0) | ||||||
|  |                         toReturn += $"{buffName}\n"; | ||||||
|  |                 } | ||||||
|  |                 catch (Exception) { } | ||||||
|  |             } | ||||||
|  |             return toReturn; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private static String getExtraItemInfo(int itemIndex, int itemAmount) | ||||||
|  |         { | ||||||
|  |             if (itemIndex == -1) return ""; | ||||||
|  |  | ||||||
|  |             string itemName = Game1.objectInformation[itemIndex].Split('/')[0]; | ||||||
|  |  | ||||||
|  |             if (itemAmount != -1) | ||||||
|  |                 return $"Required: {itemAmount} {itemName}"; | ||||||
|  |             else | ||||||
|  |                 return $"Required: {itemName}"; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private static String getPrice(int price) | ||||||
|  |         { | ||||||
|  |             if (price == -1) return ""; | ||||||
|  |              | ||||||
|  |             return $"Sell Price: {price} g"; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private static String handleUnHighlightedItem(bool isHighlighted, int hoveredInventoryIndex) | ||||||
|  |         { | ||||||
|  |             if (isHighlighted) return ""; | ||||||
|  |              | ||||||
|  |             if (prevSlotIndex != hoveredInventoryIndex) | ||||||
|  |                 Game1.playSound("invalid-selection"); | ||||||
|  |  | ||||||
|  |             return " not usable here"; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -148,7 +148,6 @@ namespace stardew_access.Patches | |||||||
|                             if (prevSlotIndex != i) |                             if (prevSlotIndex != i) | ||||||
|                             { |                             { | ||||||
|                                 prevSlotIndex = i; |                                 prevSlotIndex = i; | ||||||
|                                 MainClass.DebugLog("here"); |  | ||||||
|                                 Game1.playSound("invalid-selection"); |                                 Game1.playSound("invalid-selection"); | ||||||
|                             } |                             } | ||||||
|                         } |                         } | ||||||
| @@ -322,7 +321,6 @@ namespace stardew_access.Patches | |||||||
|                             if (prevSlotIndex != i) |                             if (prevSlotIndex != i) | ||||||
|                             { |                             { | ||||||
|                                 prevSlotIndex = i; |                                 prevSlotIndex = i; | ||||||
|                                 MainClass.DebugLog("here"); |  | ||||||
|                                 Game1.playSound("invalid-selection"); |                                 Game1.playSound("invalid-selection"); | ||||||
|                             } |                             } | ||||||
|                         } |                         } | ||||||
| @@ -803,7 +801,8 @@ namespace stardew_access.Patches | |||||||
|                 pondQueryMenuQuery = " "; |                 pondQueryMenuQuery = " "; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             GameMenuPatches.hoveredItemQueryKey = ""; |             InventoryUtils.hoveredItemQueryKey = ""; | ||||||
|  |             InventoryUtils.prevSlotIndex = -999; | ||||||
|         } |         } | ||||||
|         #endregion |         #endregion | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user