aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin')
-rw-r--r--src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/inventory/MuseumItemHighlighter.kt9
-rw-r--r--src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/inventory/MuseumTooltipManager.kt138
-rw-r--r--src/main/kotlin/io/github/moulberry/notenoughupdates/util/MuseumUtil.kt6
3 files changed, 145 insertions, 8 deletions
diff --git a/src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/inventory/MuseumItemHighlighter.kt b/src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/inventory/MuseumItemHighlighter.kt
index 945449ba..2c24fa60 100644
--- a/src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/inventory/MuseumItemHighlighter.kt
+++ b/src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/inventory/MuseumItemHighlighter.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2022 Linnea Gräf
+ * Copyright (C) 2022-2023 NotEnoughUpdates contributors
*
* This file is part of NotEnoughUpdates.
*
@@ -26,14 +26,13 @@ import io.github.moulberry.notenoughupdates.core.util.StringUtils
import io.github.moulberry.notenoughupdates.events.GuiContainerBackgroundDrawnEvent
import io.github.moulberry.notenoughupdates.events.ReplaceItemEvent
import io.github.moulberry.notenoughupdates.events.RepositoryReloadEvent
-import io.github.moulberry.notenoughupdates.util.ItemResolutionQuery
import io.github.moulberry.notenoughupdates.util.ItemUtils
import io.github.moulberry.notenoughupdates.util.LRUCache
import io.github.moulberry.notenoughupdates.util.MuseumUtil
+import io.github.moulberry.notenoughupdates.util.MuseumUtil.isMuseumInventory
import net.minecraft.client.gui.Gui
import net.minecraft.init.Items
import net.minecraft.inventory.ContainerChest
-import net.minecraft.inventory.IInventory
import net.minecraft.item.EnumDyeColor
import net.minecraft.item.ItemStack
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
@@ -76,10 +75,6 @@ object MuseumItemHighlighter {
return itemStack.hasDisplayName() && itemStack.item == Items.dye && EnumDyeColor.byDyeDamage(itemStack.itemDamage) == EnumDyeColor.LIME
}
- fun isMuseumInventory(inventory: IInventory): Boolean {
- return StringUtils.cleanColour(inventory.displayName.unformattedText).startsWith("Museum ➜")
- }
-
@SubscribeEvent
fun onBackgroundDrawn(event: GuiContainerBackgroundDrawnEvent) {
val egui = event.container ?: return
diff --git a/src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/inventory/MuseumTooltipManager.kt b/src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/inventory/MuseumTooltipManager.kt
new file mode 100644
index 00000000..d7c10dc1
--- /dev/null
+++ b/src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/inventory/MuseumTooltipManager.kt
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2023 NotEnoughUpdates contributors
+ *
+ * This file is part of NotEnoughUpdates.
+ *
+ * NotEnoughUpdates is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation, either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * NotEnoughUpdates is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package io.github.moulberry.notenoughupdates.miscfeatures.inventory
+
+import com.google.gson.Gson
+import io.github.moulberry.notenoughupdates.NotEnoughUpdates
+import io.github.moulberry.notenoughupdates.autosubscribe.NEUAutoSubscribe
+import io.github.moulberry.notenoughupdates.events.GuiContainerBackgroundDrawnEvent
+import io.github.moulberry.notenoughupdates.util.MuseumUtil
+import io.github.moulberry.notenoughupdates.util.SBInfo
+import io.github.moulberry.notenoughupdates.util.Utils
+import io.github.moulberry.notenoughupdates.util.kotlin.KSerializable
+import io.github.moulberry.notenoughupdates.util.stripControlCodes
+import net.minecraft.inventory.ContainerChest
+import net.minecraftforge.event.world.WorldEvent
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+import java.io.File
+
+@NEUAutoSubscribe
+object MuseumTooltipManager {
+
+ @KSerializable
+ data class MuseumData(
+ val profiles: MutableMap<String, ProfileSpecificMuseumData> = mutableMapOf()
+ )
+
+ @KSerializable
+ data class ProfileSpecificMuseumData(
+ val donatedItems: MutableSet<String>,
+ var visitedOnce: Boolean
+ )
+
+ private val loadedMuseumDataDelegate = lazy {
+ var data = MuseumData()
+ if (file.exists()) {
+ val content = file.readText()
+ data = Gson().fromJson(content, MuseumData::class.java)
+ } else {
+ file.createNewFile()
+ file.writeText(Gson().toJson(data))
+ }
+ data
+ }
+ private val loadedMuseumData by loadedMuseumDataDelegate
+
+ private val file = File(NotEnoughUpdates.INSTANCE.neuDir, "donated_museum_items.json")
+
+ private val donatedStates = listOf(
+ MuseumUtil.DonationState.DONATED_PRESENT,
+ MuseumUtil.DonationState.DONATED_VACANT,
+ MuseumUtil.DonationState.DONATED_PRESENT_PARTIAL
+ )
+
+ private fun addItemToDonatedList(itemsToAdd: List<String>) {
+ val profile = SBInfo.getInstance().currentProfile ?: return
+
+ for (internalName in itemsToAdd) {
+ loadedMuseumData.profiles.computeIfAbsent(profile) { ProfileSpecificMuseumData(mutableSetOf(), false) }
+
+ val profileData = loadedMuseumData.profiles[profile]!!
+ profileData.donatedItems.add(internalName)
+ profileData.visitedOnce = true
+ }
+ }
+
+ /***
+ * Check if the given item has been donated to the museum on the current profile
+ *
+ * This will only work if the player has visited the museum before
+ */
+ fun isItemDonated(item: String): Boolean {
+ val profile = SBInfo.getInstance().currentProfile ?: return false
+
+ val profileData = loadedMuseumData.profiles[profile] ?: return false
+ return profileData.donatedItems.contains(item)
+
+ }
+
+ /***
+ * Check if the player has visited the museum at least once on this profile
+ */
+ fun hasPlayerVisitedMuseum(): Boolean {
+ val profile = SBInfo.getInstance().currentProfile ?: return false
+ if (SBInfo.getInstance().stranded || SBInfo.getInstance().bingo) {
+ return true
+ }
+
+ val profileData = loadedMuseumData.profiles[profile] ?: return false
+ return profileData.visitedOnce
+ }
+
+ @SubscribeEvent
+ fun onBackgroundDrawn(event: GuiContainerBackgroundDrawnEvent) {
+ val gui = event.container ?: return
+ val chest = gui.inventorySlots as? ContainerChest ?: return
+ if (!MuseumUtil.isMuseumInventory(chest.lowerChestInventory)) return
+
+ val armor = Utils.getOpenChestName().stripControlCodes().endsWith("Armor Sets")
+ val slots = chest.inventorySlots
+
+ for (i in 0..53) {
+ val slot = slots[i]
+ if (slot == null || slot.stack == null) continue
+ val item = MuseumUtil.findMuseumItem(slot.stack, armor) ?: continue
+ if (donatedStates.contains(item.state)) {
+ addItemToDonatedList(item.skyblockItemIds)
+ }
+ }
+ }
+
+ @SubscribeEvent
+ fun onWorldUnload(@Suppress("UNUSED_PARAMETER") event: WorldEvent.Unload) {
+ // Only save when the Museum has actually been opened
+ if (loadedMuseumDataDelegate.isInitialized()) {
+ if (!file.exists()) {
+ file.createNewFile()
+ }
+ file.writeText(Gson().toJson(loadedMuseumData))
+ }
+ }
+}
diff --git a/src/main/kotlin/io/github/moulberry/notenoughupdates/util/MuseumUtil.kt b/src/main/kotlin/io/github/moulberry/notenoughupdates/util/MuseumUtil.kt
index dd52d175..e9c2486a 100644
--- a/src/main/kotlin/io/github/moulberry/notenoughupdates/util/MuseumUtil.kt
+++ b/src/main/kotlin/io/github/moulberry/notenoughupdates/util/MuseumUtil.kt
@@ -21,6 +21,8 @@ package io.github.moulberry.notenoughupdates.util
import io.github.moulberry.notenoughupdates.NEUManager
import io.github.moulberry.notenoughupdates.NotEnoughUpdates
+import io.github.moulberry.notenoughupdates.core.util.StringUtils
+import net.minecraft.inventory.IInventory
import net.minecraft.item.EnumDyeColor
import net.minecraft.item.ItemDye
import net.minecraft.item.ItemStack
@@ -109,5 +111,7 @@ object MuseumUtil {
}
}
-
+ fun isMuseumInventory(inventory: IInventory): Boolean {
+ return StringUtils.cleanColour(inventory.displayName.unformattedText).startsWith("Museum ➜")
+ }
}