package at.hannibal2.skyhanni.features.misc import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator import at.hannibal2.skyhanni.data.PetAPI import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.features.rift.RiftAPI import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.RenderUtils.renderString import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.StringUtils.matches import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class CurrentPetDisplay { private val config get() = SkyHanniMod.feature.misc.pets private val patternGroup = RepoPattern.group("misc.currentpet") private val inventorySelectedPetPattern by patternGroup.pattern( "inventory.selected", "§7§7Selected pet: (?.*)" ) private val chatSpawnPattern by patternGroup.pattern( "chat.spawn", "§aYou summoned your §r(?.*)§r§a!" ) private val chatDespawnPattern by patternGroup.pattern( "chat.despawn", "§aYou despawned your §r.*§r§a!" ) private val chatPetRulePattern by patternGroup.pattern( "chat.rule", "§cAutopet §eequipped your §7\\[Lvl .*] (?.*)! §a§lVIEW RULE" ) @SubscribeEvent fun onChat(event: LorenzChatEvent) { findPetInChat(event.message)?.let { PetAPI.currentPet = it if (config.hideAutopet) { event.blockedReason = "pets" } } } private fun findPetInChat(message: String): String? { chatSpawnPattern.matchMatcher(message) { return group("pet") } if (chatDespawnPattern.matches(message)) { return "" } chatPetRulePattern.matchMatcher(message) { return group("pet") } return null } @SubscribeEvent fun onInventoryOpen(event: InventoryFullyOpenedEvent) { if (!PetAPI.isPetMenu(event.inventoryName)) return val lore = event.inventoryItems[4]?.getLore() ?: return for (line in lore) { inventorySelectedPetPattern.matchMatcher(line) { val newPet = group("pet") PetAPI.currentPet = if (newPet != "§cNone") newPet else "" } } } @SubscribeEvent fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { if (!LorenzUtils.inSkyBlock) return if (RiftAPI.inRift()) return if (!config.display) return config.displayPos.renderString(PetAPI.currentPet, posLabel = "Current Pet") } @SubscribeEvent fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { event.move(3, "misc.petDisplay", "misc.pets.display") event.move(9, "misc.petDisplayPos", "misc.pets.displayPos") } }