From 18da4a7c13d215fb6cd7969654986d9072dd24fa Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Mon, 9 Sep 2024 15:26:16 +0200 Subject: Improvement: SH Tracker Search (#2477) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../skyhanni/utils/tracker/SkyHanniItemTracker.kt | 23 ++++++++++++---------- .../skyhanni/utils/tracker/SkyHanniTracker.kt | 20 ++++++++++--------- 2 files changed, 24 insertions(+), 19 deletions(-) (limited to 'src/main/java/at/hannibal2/skyhanni/utils/tracker') diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniItemTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniItemTracker.kt index 8806f3bdb..8d6f98d69 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniItemTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniItemTracker.kt @@ -5,7 +5,7 @@ import at.hannibal2.skyhanni.config.storage.ProfileSpecificStorage import at.hannibal2.skyhanni.data.SlayerAPI import at.hannibal2.skyhanni.data.TrackerManager import at.hannibal2.skyhanni.utils.ChatUtils -import at.hannibal2.skyhanni.utils.CollectionUtils.addSelector +import at.hannibal2.skyhanni.utils.CollectionUtils.addSearchableSelector import at.hannibal2.skyhanni.utils.CollectionUtils.sortedDesc import at.hannibal2.skyhanni.utils.ItemPriceSource import at.hannibal2.skyhanni.utils.ItemUtils.itemName @@ -17,13 +17,15 @@ import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.NumberUtil.shortFormat import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.renderables.Renderable +import at.hannibal2.skyhanni.utils.renderables.Searchable +import at.hannibal2.skyhanni.utils.renderables.toSearchable import kotlin.time.Duration.Companion.seconds class SkyHanniItemTracker( name: String, createNewSession: () -> Data, getStorage: (ProfileSpecificStorage) -> Data, - drawDisplay: (Data) -> List, + drawDisplay: (Data) -> List, ) : SkyHanniTracker(name, createNewSession, getStorage, drawDisplay) { companion object { @@ -60,9 +62,9 @@ class SkyHanniItemTracker( } } - fun addPriceFromButton(lists: MutableList) { + fun addPriceFromButton(lists: MutableList) { if (isInventoryOpen()) { - lists.addSelector( + lists.addSearchableSelector( "", getName = { type -> type.sellName }, isCurrent = { it.ordinal == config.priceSource.ordinal }, // todo avoid ordinal @@ -77,7 +79,7 @@ class SkyHanniItemTracker( fun drawItems( data: Data, filter: (NEUInternalName) -> Boolean, - lists: MutableList, + lists: MutableList, ): Double { var profit = 0.0 val items = mutableMapOf() @@ -117,8 +119,9 @@ class SkyHanniItemTracker( val newDrop = itemProfit.lastTimeUpdated.passedSince() < 10.seconds && config.showRecentDrops val numberColor = if (newDrop) "§a§l" else "§7" + val name = cleanName.removeColor(keepFormatting = true).replace("§r", "") var displayName = if (hidden) { - "§8§m" + cleanName.removeColor(keepFormatting = true).replace("§r", "") + "§8§m$name" } else cleanName displayName = " $numberColor${displayAmount.addSeparators()}x $displayName§7: §6$priceFormat" @@ -149,10 +152,10 @@ class SkyHanniItemTracker( }, ) else Renderable.string(displayName) - lists.add(renderable) + lists.add(renderable.toSearchable(name)) } if (hiddenItemTexts.size > 0) { - val text = Renderable.hoverTips(" §7${hiddenItemTexts.size} cheap items are hidden.", hiddenItemTexts) + val text = Renderable.hoverTips(" §7${hiddenItemTexts.size} cheap items are hidden.", hiddenItemTexts).toSearchable() lists.add(text) } @@ -190,7 +193,7 @@ class SkyHanniItemTracker( } } - fun addTotalProfit(profit: Double, totalAmount: Long, action: String): Renderable { + fun addTotalProfit(profit: Double, totalAmount: Long, action: String): Searchable { val profitFormat = profit.toLong().addSeparators() val profitPrefix = if (profit < 0) "§c" else "§6" @@ -201,6 +204,6 @@ class SkyHanniItemTracker( } else emptyList() val text = "§eTotal Profit: $profitPrefix$profitFormat coins" - return Renderable.hoverTips(text, tips) + return Renderable.hoverTips(text, tips).toSearchable() } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt index 9d77d4668..5b07c9906 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt @@ -13,6 +13,8 @@ import at.hannibal2.skyhanni.utils.NEUItems.getPrice import at.hannibal2.skyhanni.utils.RenderUtils.renderRenderables import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.renderables.Renderable +import at.hannibal2.skyhanni.utils.renderables.Searchable +import at.hannibal2.skyhanni.utils.renderables.buildSearchBox import net.minecraft.client.Minecraft import net.minecraft.client.gui.inventory.GuiChest import net.minecraft.client.gui.inventory.GuiInventory @@ -22,8 +24,7 @@ open class SkyHanniTracker( val name: String, private val createNewSession: () -> Data, private val getStorage: (ProfileSpecificStorage) -> Data, - // TODO change to renderable - private val drawDisplay: (Data) -> List, + private val drawDisplay: (Data) -> List, ) { private var inventoryOpen = false @@ -83,9 +84,9 @@ open class SkyHanniTracker( if (dirty || TrackerManager.dirty) { display = getSharedTracker()?.let { - val get = it.get(getDisplayMode()) - val rawList = drawDisplay(get) - buildFinalDisplay(rawList) + val data = it.get(getDisplayMode()) + val searchables = drawDisplay(data) + buildFinalDisplay(searchables.buildSearchBox()) } ?: emptyList() dirty = false } @@ -97,13 +98,14 @@ open class SkyHanniTracker( dirty = true } - private fun buildFinalDisplay(rawList: List) = rawList.toMutableList().also { - if (it.isEmpty()) return@also + private fun buildFinalDisplay(searchBox: Renderable) = buildList { + add(searchBox) + if (isEmpty()) return@buildList if (inventoryOpen) { - it.add(1, buildDisplayModeView()) + add(buildDisplayModeView()) } if (inventoryOpen && getDisplayMode() == DisplayMode.SESSION) { - it.add(buildSessionResetButton()) + add(buildSessionResetButton()) } } -- cgit