aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/repo/ItemNameLookup.kt
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2024-11-13 13:40:50 +0100
committerLinnea Gräf <nea@nea.moe>2024-11-13 13:40:50 +0100
commitd267913e206f5f7bfc16607c0dc058290e6b556f (patch)
treeae586ff39bb970f51b84f89c7e0b96130e9f4e3b /src/main/kotlin/repo/ItemNameLookup.kt
parentdb87e5293846e27dc684dd141744390ae6e8bc67 (diff)
downloadFirmament-d267913e206f5f7bfc16607c0dc058290e6b556f.tar.gz
Firmament-d267913e206f5f7bfc16607c0dc058290e6b556f.tar.bz2
Firmament-d267913e206f5f7bfc16607c0dc058290e6b556f.zip
test: Add sack util test
Diffstat (limited to 'src/main/kotlin/repo/ItemNameLookup.kt')
-rw-r--r--src/main/kotlin/repo/ItemNameLookup.kt155
1 files changed, 79 insertions, 76 deletions
diff --git a/src/main/kotlin/repo/ItemNameLookup.kt b/src/main/kotlin/repo/ItemNameLookup.kt
index 770de85..1250730 100644
--- a/src/main/kotlin/repo/ItemNameLookup.kt
+++ b/src/main/kotlin/repo/ItemNameLookup.kt
@@ -1,4 +1,3 @@
-
package moe.nea.firmament.repo
import io.github.moulberry.repo.IReloadable
@@ -12,87 +11,91 @@ import moe.nea.firmament.util.skyblockId
object ItemNameLookup : IReloadable {
- fun getItemNameChunks(name: String): Set<String> {
- return name.removeColorCodes().split(" ").filterTo(mutableSetOf()) { it.isNotBlank() }
- }
+ fun getItemNameChunks(name: String): Set<String> {
+ return name.removeColorCodes().split(" ").filterTo(mutableSetOf()) { it.isNotBlank() }
+ }
+
+ var nameMap: NavigableMap<String, out Set<SkyblockId>> = TreeMap()
- var nameMap: NavigableMap<String, out Set<SkyblockId>> = TreeMap()
+ override fun reload(repository: NEURepository) {
+ val nameMap = TreeMap<String, MutableSet<SkyblockId>>()
+ repository.items.items.values.forEach { item ->
+ getAllNamesForItem(item).forEach { name ->
+ val chunks = getItemNameChunks(name)
+ chunks.forEach { chunk ->
+ val set = nameMap.getOrPut(chunk, ::mutableSetOf)
+ set.add(item.skyblockId)
+ }
+ }
+ }
+ this.nameMap = nameMap
+ }
- override fun reload(repository: NEURepository) {
- val nameMap = TreeMap<String, MutableSet<SkyblockId>>()
- repository.items.items.values.forEach { item ->
- getAllNamesForItem(item).forEach { name ->
- val chunks = getItemNameChunks(name)
- chunks.forEach { chunk ->
- val set = nameMap.getOrPut(chunk, ::mutableSetOf)
- set.add(item.skyblockId)
- }
- }
- }
- this.nameMap = nameMap
- }
+ fun getAllNamesForItem(item: NEUItem): Set<String> {
+ val names = mutableSetOf<String>()
+ names.add(item.displayName)
+ if (item.displayName.contains("Enchanted Book")) {
+ val enchantName = item.lore.firstOrNull()
+ if (enchantName != null) {
+ names.add(enchantName)
+ }
+ }
+ return names
+ }
- fun getAllNamesForItem(item: NEUItem): Set<String> {
- val names = mutableSetOf<String>()
- names.add(item.displayName)
- if (item.displayName.contains("Enchanted Book")) {
- val enchantName = item.lore.firstOrNull()
- if (enchantName != null) {
- names.add(enchantName)
- }
- }
- return names
- }
+ fun findItemCandidatesByName(name: String): MutableSet<SkyblockId> {
+ val candidates = mutableSetOf<SkyblockId>()
+ for (chunk in getItemNameChunks(name)) {
+ val set = nameMap[chunk] ?: emptySet()
+ candidates.addAll(set)
+ }
+ return candidates
+ }
- fun findItemCandidatesByName(name: String): MutableSet<SkyblockId> {
- val candidates = mutableSetOf<SkyblockId>()
- for (chunk in getItemNameChunks(name)) {
- val set = nameMap[chunk] ?: emptySet()
- candidates.addAll(set)
- }
- return candidates
- }
+ fun guessItemByName(
+ /**
+ * The display name of the item. Color codes will be ignored.
+ */
+ name: String,
+ /**
+ * Whether the [name] may contain other text, such as reforges, master stars and such.
+ */
+ mayBeMangled: Boolean
+ ): SkyblockId? {
+ val cleanName = name.removeColorCodes()
+ return findBestItemFromCandidates(
+ findItemCandidatesByName(cleanName),
+ cleanName,
+ true
+ )
+ }
- fun guessItemByName(
- /**
- * The display name of the item. Color codes will be ignored.
- */
- name: String,
- /**
- * Whether the [name] may contain other text, such as reforges, master stars and such.
- */
- mayBeMangled: Boolean
- ): SkyblockId? {
- val cleanName = name.removeColorCodes()
- return findBestItemFromCandidates(
- findItemCandidatesByName(cleanName),
- cleanName,
- true
- )
- }
+ fun findBestItemFromCandidates(
+ candidates: Iterable<SkyblockId>,
+ name: String, mayBeMangled: Boolean
+ ): SkyblockId? {
+ val expectedClean = name.removeColorCodes()
+ var bestMatch: SkyblockId? = null
+ var bestMatchLength = -1
+ for (candidate in candidates) {
+ val item = RepoManager.getNEUItem(candidate) ?: continue
+ for (name in getAllNamesForItem(item)) {
+ val actualClean = name.removeColorCodes()
+ val matches = if (mayBeMangled) expectedClean == actualClean
+ else expectedClean.contains(actualClean)
+ if (!matches) continue
+ if (actualClean.length > bestMatchLength) {
+ bestMatch = candidate
+ bestMatchLength = actualClean.length
+ }
+ }
+ }
+ return bestMatch
+ }
- fun findBestItemFromCandidates(
- candidates: Iterable<SkyblockId>,
- name: String, mayBeMangled: Boolean
- ): SkyblockId? {
- val expectedClean = name.removeColorCodes()
- var bestMatch: SkyblockId? = null
- var bestMatchLength = -1
- for (candidate in candidates) {
- val item = RepoManager.getNEUItem(candidate) ?: continue
- for (name in getAllNamesForItem(item)) {
- val actualClean = name.removeColorCodes()
- val matches = if (mayBeMangled) expectedClean == actualClean
- else expectedClean.contains(actualClean)
- if (!matches) continue
- if (actualClean.length > bestMatchLength) {
- bestMatch = candidate
- bestMatchLength = actualClean.length
- }
- }
- }
- return bestMatch
- }
+ init {
+ RepoManager.initialize()
+ }
}