From 60ecfedf46e94344e6439a3a90c4c74ee65eeb2e Mon Sep 17 00:00:00 2001
From: nea <nea@nea.moe>
Date: Thu, 4 May 2023 15:54:56 +0200
Subject: Add parents to collapisble entries

---
 .../kotlin/moe/nea/notenoughupdates/rei/NEUReiPlugin.kt    | 14 +++++++++++++-
 .../moe/nea/notenoughupdates/rei/SBItemEntryDefinition.kt  |  2 ++
 src/main/kotlin/moe/nea/notenoughupdates/repo/ItemCache.kt |  6 ++----
 .../kotlin/moe/nea/notenoughupdates/util/SkyblockId.kt     |  8 +++++++-
 4 files changed, 24 insertions(+), 6 deletions(-)

(limited to 'src')

diff --git a/src/main/kotlin/moe/nea/notenoughupdates/rei/NEUReiPlugin.kt b/src/main/kotlin/moe/nea/notenoughupdates/rei/NEUReiPlugin.kt
index 88f7abc..de515f3 100644
--- a/src/main/kotlin/moe/nea/notenoughupdates/rei/NEUReiPlugin.kt
+++ b/src/main/kotlin/moe/nea/notenoughupdates/rei/NEUReiPlugin.kt
@@ -2,16 +2,18 @@ package moe.nea.notenoughupdates.rei
 
 import io.github.moulberry.repo.data.NEUItem
 import me.shedaniel.rei.api.client.plugins.REIClientPlugin
+import me.shedaniel.rei.api.client.registry.entry.CollapsibleEntryRegistry
 import me.shedaniel.rei.api.client.registry.entry.EntryRegistry
 import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry
 import me.shedaniel.rei.api.common.entry.EntryStack
 import me.shedaniel.rei.api.common.entry.type.EntryTypeRegistry
 import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes
 import net.minecraft.item.ItemStack
+import net.minecraft.text.Text
 import net.minecraft.util.Identifier
-import moe.nea.notenoughupdates.repo.ItemCache
 import moe.nea.notenoughupdates.repo.ItemCache.asItemStack
 import moe.nea.notenoughupdates.repo.RepoManager
+import moe.nea.notenoughupdates.util.SkyblockId
 
 
 class NEUReiPlugin : REIClientPlugin {
@@ -28,6 +30,16 @@ class NEUReiPlugin : REIClientPlugin {
         registry.register(SKYBLOCK_ITEM_TYPE_ID, SBItemEntryDefinition)
     }
 
+    override fun registerCollapsibleEntries(registry: CollapsibleEntryRegistry) {
+        RepoManager.neuRepo.constants.parents.parents
+            .forEach { (parent, children) ->
+                registry.group(
+                    SkyblockId(parent).identifier,
+                    Text.literal(RepoManager.getNEUItem(SkyblockId(parent))?.displayName ?: parent),
+                    (children + parent).map { SBItemEntryDefinition.getEntry(RepoManager.getNEUItem(SkyblockId(it))) })
+            }
+    }
+
     override fun registerScreens(registry: ScreenRegistry) {
         registry.registerFocusedStack(SkyblockItemIdFocusedStackProvider)
     }
diff --git a/src/main/kotlin/moe/nea/notenoughupdates/rei/SBItemEntryDefinition.kt b/src/main/kotlin/moe/nea/notenoughupdates/rei/SBItemEntryDefinition.kt
index a9d4a7c..90d5931 100644
--- a/src/main/kotlin/moe/nea/notenoughupdates/rei/SBItemEntryDefinition.kt
+++ b/src/main/kotlin/moe/nea/notenoughupdates/rei/SBItemEntryDefinition.kt
@@ -68,5 +68,7 @@ object SBItemEntryDefinition : EntryDefinition<NEUItem> {
         return value?.getIdentifier() ?: Identifier.of("skyblockitem", "null")!!
     }
 
+    fun getEntry(neuItem: NEUItem?) = EntryStack.of(this, neuItem)
+
 
 }
diff --git a/src/main/kotlin/moe/nea/notenoughupdates/repo/ItemCache.kt b/src/main/kotlin/moe/nea/notenoughupdates/repo/ItemCache.kt
index f243cfe..ae2b7d2 100644
--- a/src/main/kotlin/moe/nea/notenoughupdates/repo/ItemCache.kt
+++ b/src/main/kotlin/moe/nea/notenoughupdates/repo/ItemCache.kt
@@ -21,11 +21,10 @@ import net.minecraft.item.Items
 import net.minecraft.nbt.NbtCompound
 import net.minecraft.nbt.NbtOps
 import net.minecraft.text.Text
-import net.minecraft.util.Identifier
 import moe.nea.notenoughupdates.NotEnoughUpdates
-import moe.nea.notenoughupdates.mixins.accessor.AccessorDataFixTypes
 import moe.nea.notenoughupdates.util.LegacyTagParser
 import moe.nea.notenoughupdates.util.appendLore
+import moe.nea.notenoughupdates.util.skyblockId
 
 object ItemCache : IReloadable {
     val dfuLog = Path.of("logs/dfulog.txt")
@@ -91,8 +90,7 @@ object ItemCache : IReloadable {
         return s
     }
 
-    fun NEUItem.getIdentifier() =
-        Identifier("skyblockitem", skyblockItemId.lowercase().replace(";", "__"))
+    fun NEUItem.getIdentifier() = skyblockId.identifier
 
 
     var job: Job? = null
diff --git a/src/main/kotlin/moe/nea/notenoughupdates/util/SkyblockId.kt b/src/main/kotlin/moe/nea/notenoughupdates/util/SkyblockId.kt
index 8d7ef91..cc2d813 100644
--- a/src/main/kotlin/moe/nea/notenoughupdates/util/SkyblockId.kt
+++ b/src/main/kotlin/moe/nea/notenoughupdates/util/SkyblockId.kt
@@ -1,14 +1,20 @@
 package moe.nea.notenoughupdates.util
 
+import io.github.moulberry.repo.data.NEUItem
 import io.github.moulberry.repo.data.Rarity
 import kotlinx.serialization.Serializable
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import net.minecraft.item.ItemStack
 import net.minecraft.nbt.NbtCompound
+import net.minecraft.util.Identifier
 
 @JvmInline
-value class SkyblockId(val neuItem: String)
+value class SkyblockId(val neuItem: String) {
+    val identifier get() = Identifier("skyblockitem", neuItem.lowercase().replace(";", "__"))
+}
+
+val NEUItem.skyblockId get() = SkyblockId(skyblockItemId)
 
 @Serializable
 data class HypixelPetInfo(
-- 
cgit