aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt2
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/features/inventory/chocolatefactory/ChocolateFactoryConfig.java5
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/features/inventory/chocolatefactory/ChocolateFactoryCustomReminderConfig.java37
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java6
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/fame/ReminderUtils.kt3
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryCustomReminder.kt147
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryUpgradeWarning.kt1
7 files changed, 200 insertions, 1 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
index 63b638586..068a441c5 100644
--- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
+++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
@@ -276,6 +276,7 @@ import at.hannibal2.skyhanni.features.inventory.bazaar.BazaarOrderHelper
import at.hannibal2.skyhanni.features.inventory.bazaar.CraftMaterialsFromBazaar
import at.hannibal2.skyhanni.features.inventory.chocolatefactory.ChocolateFactoryAPI
import at.hannibal2.skyhanni.features.inventory.chocolatefactory.ChocolateFactoryBarnManager
+import at.hannibal2.skyhanni.features.inventory.chocolatefactory.ChocolateFactoryCustomReminder
import at.hannibal2.skyhanni.features.inventory.chocolatefactory.ChocolateFactoryDataLoader
import at.hannibal2.skyhanni.features.inventory.chocolatefactory.ChocolateFactoryInventory
import at.hannibal2.skyhanni.features.inventory.chocolatefactory.ChocolateFactoryKeybinds
@@ -661,6 +662,7 @@ class SkyHanniMod {
loadModule(ChocolateFactoryKeybinds)
loadModule(ChocolateShopPrice)
loadModule(ChocolateFactoryUpgradeWarning)
+ loadModule(ChocolateFactoryCustomReminder)
loadModule(HoppityNpc)
loadModule(HoppityEggsManager)
loadModule(HoppityEggLocator)
diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/chocolatefactory/ChocolateFactoryConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/chocolatefactory/ChocolateFactoryConfig.java
index a88e79023..bffc5cc8e 100644
--- a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/chocolatefactory/ChocolateFactoryConfig.java
+++ b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/chocolatefactory/ChocolateFactoryConfig.java
@@ -166,4 +166,9 @@ public class ChocolateFactoryConfig {
@Accordion
public ChocolateFactoryKeybindsConfig keybinds = new ChocolateFactoryKeybindsConfig();
+ @Expose
+ @ConfigOption(name = "Chocolate Factory Custom Reminder", desc = "")
+ @Accordion
+ public ChocolateFactoryCustomReminderConfig customReminder = new ChocolateFactoryCustomReminderConfig();
+
}
diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/chocolatefactory/ChocolateFactoryCustomReminderConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/chocolatefactory/ChocolateFactoryCustomReminderConfig.java
new file mode 100644
index 000000000..dd033edb7
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/chocolatefactory/ChocolateFactoryCustomReminderConfig.java
@@ -0,0 +1,37 @@
+package at.hannibal2.skyhanni.config.features.inventory.chocolatefactory;
+
+import at.hannibal2.skyhanni.config.FeatureToggle;
+import at.hannibal2.skyhanni.config.core.config.Position;
+import com.google.gson.annotations.Expose;
+import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorBoolean;
+import io.github.notenoughupdates.moulconfig.annotations.ConfigLink;
+import io.github.notenoughupdates.moulconfig.annotations.ConfigOption;
+
+public class ChocolateFactoryCustomReminderConfig {
+
+ @Expose
+ @ConfigOption(
+ name = "Enabled",
+ desc = "Show a custom reminder until you can purchase the next upgrade. " +
+ "Click on one item you cant buy to select/deselect it."
+ )
+ @ConfigEditorBoolean
+ @FeatureToggle
+ public boolean enabled = false;
+
+ @Expose
+ @ConfigOption(name = "Always Custom Reminder", desc = "Always show the display always, even outside the chocolate factory.")
+ @ConfigEditorBoolean
+ @FeatureToggle
+ public boolean always = false;
+
+ @Expose
+ @ConfigOption(name = "Hide No Chocolate Message", desc = "Hide the chat message telling you you dont have enough chocolate to buy/purchase something.")
+ @ConfigEditorBoolean
+ @FeatureToggle
+ public boolean hideChat = true;
+
+ @Expose
+ @ConfigLink(owner = ChocolateFactoryConfig.class, field = "customReminder")
+ public Position position = new Position(390, 90, 1f, true);
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java b/src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java
index 5487a3519..a533edcdc 100644
--- a/src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java
+++ b/src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java
@@ -114,6 +114,12 @@ public class ProfileSpecificStorage {
@Expose
public String lastLeaderboard = null;
}
+
+ @Expose
+ public Long targetGoal = null;
+
+ @Expose
+ public String targetName = null;
}
@Expose
diff --git a/src/main/java/at/hannibal2/skyhanni/features/fame/ReminderUtils.kt b/src/main/java/at/hannibal2/skyhanni/features/fame/ReminderUtils.kt
index 8566d6257..0cd7bc0da 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/fame/ReminderUtils.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/fame/ReminderUtils.kt
@@ -12,5 +12,6 @@ object ReminderUtils {
// TODO: add arachne fight, add slayer boss spawned, add dragon fight
fun isBusy(ignoreFarmingContest: Boolean = false): Boolean =
DungeonAPI.inDungeon() || LorenzUtils.inKuudraFight || (FarmingContestAPI.inContest && !ignoreFarmingContest) ||
- RiftAPI.inRift() || IslandType.DARK_AUCTION.isInIsland()|| IslandType.MINESHAFT.isInIsland()
+ RiftAPI.inRift() || IslandType.DARK_AUCTION.isInIsland() || IslandType.MINESHAFT.isInIsland() ||
+ IslandType.NONE.isInIsland() || IslandType.UNKNOWN.isInIsland()
}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryCustomReminder.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryCustomReminder.kt
new file mode 100644
index 000000000..5e03ccb44
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryCustomReminder.kt
@@ -0,0 +1,147 @@
+package at.hannibal2.skyhanni.features.inventory.chocolatefactory
+
+import at.hannibal2.skyhanni.data.hypixel.chat.event.SystemMessageEvent
+import at.hannibal2.skyhanni.events.GuiContainerEvent
+import at.hannibal2.skyhanni.events.GuiRenderEvent
+import at.hannibal2.skyhanni.events.SecondPassedEvent
+import at.hannibal2.skyhanni.features.fame.ReminderUtils
+import at.hannibal2.skyhanni.utils.ChatUtils
+import at.hannibal2.skyhanni.utils.ItemUtils.getLore
+import at.hannibal2.skyhanni.utils.ItemUtils.name
+import at.hannibal2.skyhanni.utils.LorenzUtils
+import at.hannibal2.skyhanni.utils.RenderUtils.renderRenderables
+import at.hannibal2.skyhanni.utils.SimpleTimeMark
+import at.hannibal2.skyhanni.utils.SoundUtils
+import at.hannibal2.skyhanni.utils.TimeUtils.format
+import at.hannibal2.skyhanni.utils.TimeUtils.minutes
+import at.hannibal2.skyhanni.utils.renderables.Renderable
+import net.minecraft.client.Minecraft
+import net.minecraft.client.gui.inventory.GuiChest
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+
+object ChocolateFactoryCustomReminder {
+ private val configReminder get() = ChocolateFactoryAPI.config.customReminder
+ private val configUpgradeWarnings get() = ChocolateFactoryAPI.config.chocolateUpgradeWarnings
+
+ private var targetGoal: Long?
+ get() = ChocolateFactoryAPI.profileStorage?.targetGoal
+ set(value) {
+ ChocolateFactoryAPI.profileStorage?.targetGoal = value
+ }
+ private var targetName: String?
+ get() = ChocolateFactoryAPI.profileStorage?.targetName
+ set(value) {
+ ChocolateFactoryAPI.profileStorage?.targetName = value
+ }
+
+ fun isActive() = targetGoal != null
+
+ private var display = emptyList<Renderable>()
+
+ private var lastUpgradeWarning = SimpleTimeMark.farPast()
+
+ @SubscribeEvent
+ fun onChat(event: SystemMessageEvent) {
+ if (!isEnabled()) return
+ if (configReminder.hideChat) {
+ if (event.message == "§cYou don't have enough Chocolate!") {
+ event.blockedReason = "custom_reminder"
+ }
+ }
+ }
+
+ @SubscribeEvent
+ fun onSecondPassed(event: SecondPassedEvent) {
+ if (!isEnabled()) return
+ update()
+ }
+
+ @SubscribeEvent(receiveCanceled = true)
+ fun onSlotClick(event: GuiContainerEvent.SlotClickEvent) {
+ if (!isEnabled()) return
+ val item = event.item ?: return
+ // TODO add support for prestige and for Chocolate Milestone
+ val cost = ChocolateFactoryAPI.getChocolateBuyCost(item.getLore()) ?: return
+ val duration = ChocolateAmount.CURRENT.timeUntilGoal(cost)
+
+ // the user has enough chocolate, and just bought something
+ if (duration.isNegative()) {
+ reset()
+ return
+ }
+ setReminder(cost, item.name)
+ }
+
+ @SubscribeEvent
+ fun onBackgroundDraw(event: GuiRenderEvent.ChestGuiOverlayRenderEvent) {
+ if (!isEnabled()) return
+ if (!inChocolateMenu()) return
+
+ configReminder.position.renderRenderables(display, posLabel = "Chocolate Factory Custom Reminder")
+ }
+
+ @SubscribeEvent
+ fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) {
+ if (!isEnabled()) return
+ if (!configReminder.always) return
+ if (Minecraft.getMinecraft().currentScreen is GuiChest) return
+
+ configReminder.position.renderRenderables(display, posLabel = "Chocolate Factory Custom Reminder")
+ }
+
+ private fun inChocolateMenu() = ChocolateShopPrice.inInventory || ChocolateFactoryAPI.inChocolateFactory ||
+ ChocolateFactoryAPI.chocolateFactoryPaused
+
+ private fun setReminder(target: Long, name: String) {
+ if (targetName == name) {
+ reset()
+ return
+ }
+ targetGoal = target
+ targetName = name
+ update()
+ }
+
+ private fun update() {
+ display = mutableListOf<Renderable>().also { list ->
+ getTargetDescription()?.let {
+ list.add(Renderable.clickAndHover(it, listOf("§eClick to remove the goal!"), onClick = {
+ reset()
+ }))
+ }
+ }
+ }
+
+ private fun getTargetDescription(): String? {
+ val goal = targetGoal ?: return null
+ val duration = ChocolateAmount.CURRENT.timeUntilGoal(goal)
+ if (duration.isNegative()) {
+ warn()
+ return "§aGoal Reached! §eBuy §f$targetName"
+ }
+ val format = duration.format(maxUnits = 2)
+ return "§f$targetName §ein §b$format"
+ }
+
+ private fun warn() {
+ if (ReminderUtils.isBusy()) return
+ if (inChocolateMenu()) return
+
+ if (lastUpgradeWarning.passedSince() < configUpgradeWarnings.timeBetweenWarnings.minutes) return
+ lastUpgradeWarning = SimpleTimeMark.now()
+
+ if (configUpgradeWarnings.upgradeWarningSound) {
+ SoundUtils.playBeepSound()
+ }
+ ChatUtils.chat("You can now purchase §f$targetName §ein Chocolate factory!")
+ }
+
+ private fun reset() {
+ targetGoal = null
+ targetName = ""
+
+ display = emptyList()
+ }
+
+ fun isEnabled() = LorenzUtils.inSkyBlock && configReminder.enabled
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryUpgradeWarning.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryUpgradeWarning.kt
index 28e89855c..c99356106 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryUpgradeWarning.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryUpgradeWarning.kt
@@ -35,6 +35,7 @@ object ChocolateFactoryUpgradeWarning {
if (!ChocolateFactoryAPI.isEnabled()) return
if (!config.upgradeWarning) return
if (ReminderUtils.isBusy()) return
+ if (ChocolateFactoryCustomReminder.isActive()) return
if (lastUpgradeWarning.passedSince() < config.timeBetweenWarnings.minutes) return
lastUpgradeWarning = SimpleTimeMark.now()
if (config.upgradeWarningSound) {