aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/moe/nea/firmament/repo/ItemNameLookup.kt
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2024-08-28 19:04:24 +0200
committerLinnea Gräf <nea@nea.moe>2024-08-28 19:04:24 +0200
commitd2f240ff0ca0d27f417f837e706c781a98c31311 (patch)
tree0db7aff6cc14deaf36eed83889d59fd6b3a6f599 /src/main/kotlin/moe/nea/firmament/repo/ItemNameLookup.kt
parenta6906308163aa3b2d18fa1dc1aa71ac9bbcc83ab (diff)
downloadfirmament-d2f240ff0ca0d27f417f837e706c781a98c31311.tar.gz
firmament-d2f240ff0ca0d27f417f837e706c781a98c31311.tar.bz2
firmament-d2f240ff0ca0d27f417f837e706c781a98c31311.zip
Refactor source layout
Introduce compat source sets and move all kotlin sources to the main directory [no changelog]
Diffstat (limited to 'src/main/kotlin/moe/nea/firmament/repo/ItemNameLookup.kt')
-rw-r--r--src/main/kotlin/moe/nea/firmament/repo/ItemNameLookup.kt98
1 files changed, 0 insertions, 98 deletions
diff --git a/src/main/kotlin/moe/nea/firmament/repo/ItemNameLookup.kt b/src/main/kotlin/moe/nea/firmament/repo/ItemNameLookup.kt
deleted file mode 100644
index 770de85..0000000
--- a/src/main/kotlin/moe/nea/firmament/repo/ItemNameLookup.kt
+++ /dev/null
@@ -1,98 +0,0 @@
-
-package moe.nea.firmament.repo
-
-import io.github.moulberry.repo.IReloadable
-import io.github.moulberry.repo.NEURepository
-import io.github.moulberry.repo.data.NEUItem
-import java.util.NavigableMap
-import java.util.TreeMap
-import moe.nea.firmament.util.SkyblockId
-import moe.nea.firmament.util.removeColorCodes
-import moe.nea.firmament.util.skyblockId
-
-object ItemNameLookup : IReloadable {
-
- fun getItemNameChunks(name: String): Set<String> {
- return name.removeColorCodes().split(" ").filterTo(mutableSetOf()) { it.isNotBlank() }
- }
-
- 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
- }
-
- 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 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
- }
-
-}