aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorJ10a1n15 <45315647+j10a1n15@users.noreply.github.com>2024-06-12 23:55:50 +0200
committerGitHub <noreply@github.com>2024-06-12 23:55:50 +0200
commit7dab99f46d4caaaef0b7c29f90ad48c192800df7 (patch)
tree254080fff301aa6f6615d2f4f96ef541cf81ce9e /src/main/java
parente6d4aea4b0bff9438beefd78e59ff17479182404 (diff)
downloadskyhanni-7dab99f46d4caaaef0b7c29f90ad48c192800df7.tar.gz
skyhanni-7dab99f46d4caaaef0b7c29f90ad48c192800df7.tar.bz2
skyhanni-7dab99f46d4caaaef0b7c29f90ad48c192800df7.zip
Fix: ConcurrentModificationException in EnchantParser in CustomWardrobe (#2070)
Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com>
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/inventory/wardrobe/CustomWardrobe.kt56
1 files changed, 31 insertions, 25 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/wardrobe/CustomWardrobe.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/wardrobe/CustomWardrobe.kt
index 128fa9c69..21bf346ff 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/inventory/wardrobe/CustomWardrobe.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/wardrobe/CustomWardrobe.kt
@@ -12,6 +12,7 @@ import at.hannibal2.skyhanni.features.inventory.wardrobe.WardrobeAPI.MAX_PAGES
import at.hannibal2.skyhanni.features.inventory.wardrobe.WardrobeAPI.MAX_SLOT_PER_PAGE
import at.hannibal2.skyhanni.mixins.transformers.gui.AccessorGuiContainer
import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule
+import at.hannibal2.skyhanni.test.command.ErrorManager
import at.hannibal2.skyhanni.utils.ColorUtils.addAlpha
import at.hannibal2.skyhanni.utils.ColorUtils.darker
import at.hannibal2.skyhanni.utils.ColorUtils.toChromaColor
@@ -198,20 +199,14 @@ object CustomWardrobe {
for (armorIndex in 0 until 4) {
val stack = slot.armor[armorIndex]?.copy()
- if (stack == null) {
- loreList.add(Renderable.placeholder(containerWidth, hoverableSizes[armorIndex]))
- } else {
- loreList.add(
- Renderable.hoverable(
- Renderable.hoverTips(
- Renderable.placeholder(containerWidth, hoverableSizes[armorIndex]),
- getToolTip(stack, slot, armorIndex)
- ),
- Renderable.placeholder(containerWidth, hoverableSizes[armorIndex]),
- bypassChecks = true
- )
- )
+ var renderable = Renderable.placeholder(containerWidth, hoverableSizes[armorIndex])
+ if (stack != null) {
+ val toolTip = getToolTip(stack, slot, armorIndex)
+ if (toolTip != null) {
+ renderable = Renderable.hoverTips(renderable, tips = toolTip)
+ }
}
+ loreList.add(renderable)
}
return Renderable.verticalContainer(loreList, spacing = 1)
}
@@ -220,18 +215,29 @@ object CustomWardrobe {
stack: ItemStack,
slot: WardrobeSlot,
armorIndex: Int,
- ): List<String> {
- // Get tooltip from minecraft and other mods
- // TODO add support for advanced tooltip (F3+H)
- val toolTips = stack.getTooltip(Minecraft.getMinecraft().thePlayer, false)
-
- // Modify tooltip via SkyHanni Events
- val mcSlotId = slot.inventorySlots[armorIndex]
- // if the slot is null, we don't fire LorenzToolTipEvent at all.
- val mcSlot = InventoryUtils.getSlotAtIndex(mcSlotId) ?: return toolTips
- LorenzToolTipEvent(mcSlot, stack, toolTips).postAndCatch()
-
- return toolTips
+ ): List<String>? {
+ try {
+ // Get tooltip from minecraft and other mods
+ // TODO add support for advanced tooltip (F3+H)
+ val toolTips = stack.getTooltip(Minecraft.getMinecraft().thePlayer, false)
+
+ // Modify tooltip via SkyHanni Events
+ val mcSlotId = slot.inventorySlots[armorIndex]
+ // if the slot is null, we don't fire LorenzToolTipEvent at all.
+ val mcSlot = InventoryUtils.getSlotAtIndex(mcSlotId) ?: return toolTips
+ LorenzToolTipEvent(mcSlot, stack, toolTips).postWithoutCatch()
+
+ return toolTips
+ } catch (e: Exception) {
+ ErrorManager.logErrorWithData(
+ e,
+ "Failed to get tooltip for armor piece in CustomWardrobe",
+ "Armor" to stack,
+ "Slot" to slot,
+ "Lore" to stack.getTooltip(Minecraft.getMinecraft().thePlayer, false),
+ )
+ return null
+ }
}
private fun createFakePlayerRenderable(