From 5597d58047a2232274c7d2a094b5276f4a7795c6 Mon Sep 17 00:00:00 2001
From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com>
Date: Sat, 27 Apr 2024 13:43:51 +0200
Subject: Feature: Matriarch Helper (#1385)

Co-authored-by: Cal <cwolfson58@gmail.com>
Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com>
---
 src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt |  2 +
 .../features/crimsonisle/CrimsonIsleConfig.java    |  6 ++
 .../crimsonisle/MatriarchHelperConfig.java         | 36 +++++++++++
 .../skyhanni/features/nether/MatriarchHelper.kt    | 71 ++++++++++++++++++++++
 4 files changed, 115 insertions(+)
 create mode 100644 src/main/java/at/hannibal2/skyhanni/config/features/crimsonisle/MatriarchHelperConfig.java
 create mode 100644 src/main/java/at/hannibal2/skyhanni/features/nether/MatriarchHelper.kt

(limited to 'src/main/java/at/hannibal2')

diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
index df4f6e534..178ff4076 100644
--- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
+++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
@@ -352,6 +352,7 @@ import at.hannibal2.skyhanni.features.misc.trevor.TrevorSolver
 import at.hannibal2.skyhanni.features.misc.trevor.TrevorTracker
 import at.hannibal2.skyhanni.features.misc.update.UpdateManager
 import at.hannibal2.skyhanni.features.misc.visualwords.ModifyVisualWords
+import at.hannibal2.skyhanni.features.nether.MatriarchHelper
 import at.hannibal2.skyhanni.features.nether.PabloHelper
 import at.hannibal2.skyhanni.features.nether.SulphurSkitterBox
 import at.hannibal2.skyhanni.features.nether.VolcanoExplosivityDisplay
@@ -668,6 +669,7 @@ class SkyHanniMod {
         loadModule(CompactBingoChat())
         loadModule(BrewingStandOverlay())
         loadModule(FishingTimer())
+        loadModule(MatriarchHelper())
         loadModule(LesserOrbHider())
         loadModule(FishingHookDisplay())
         loadModule(CrimsonIsleReputationHelper(this))
diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/crimsonisle/CrimsonIsleConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/crimsonisle/CrimsonIsleConfig.java
index 07257ab3c..7924ffe02 100644
--- a/src/main/java/at/hannibal2/skyhanni/config/features/crimsonisle/CrimsonIsleConfig.java
+++ b/src/main/java/at/hannibal2/skyhanni/config/features/crimsonisle/CrimsonIsleConfig.java
@@ -21,6 +21,11 @@ public class CrimsonIsleConfig {
     @Expose
     public ReputationHelperConfig reputationHelper = new ReputationHelperConfig();
 
+    @Expose
+    @ConfigOption(name = "Matriach Helper", desc = "Helper for Heavy Pearls")
+    @Accordion
+    public MatriarchHelperConfig matriarchHelper = new MatriarchHelperConfig();
+
     @Expose
     @ConfigOption(name = "Pablo NPC Helper", desc = "Shows a clickable message that grabs the flower needed from your sacks.")
     @ConfigEditorBoolean
@@ -47,4 +52,5 @@ public class CrimsonIsleConfig {
     @Expose
     @ConfigLink(owner = CrimsonIsleConfig.class, field = "showDojoRankDisplay")
     public Position dojoRankDisplayPosition = new Position(-378, 206, false, true);
+
 }
diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/crimsonisle/MatriarchHelperConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/crimsonisle/MatriarchHelperConfig.java
new file mode 100644
index 000000000..a8c8ec9ac
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/config/features/crimsonisle/MatriarchHelperConfig.java
@@ -0,0 +1,36 @@
+package at.hannibal2.skyhanni.config.features.crimsonisle;
+
+import at.hannibal2.skyhanni.config.FeatureToggle;
+import com.google.gson.annotations.Expose;
+import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorBoolean;
+import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorColour;
+import io.github.notenoughupdates.moulconfig.annotations.ConfigOption;
+
+public class MatriarchHelperConfig {
+
+    @Expose
+    @ConfigOption(name = "Enabled", desc = "Enable features around the Matriarch helper.")
+    @ConfigEditorBoolean
+    @FeatureToggle
+    public boolean enabled = true;
+
+    @Expose
+    @ConfigOption(name = "Highlight", desc = "Highlight the pearls in a color of your choosing.")
+    @ConfigEditorBoolean
+    public boolean highlight = true;
+
+    @Expose
+    @ConfigOption(name = "Highlight Color", desc = "Colour the pearls are highlighted in.")
+    @ConfigEditorColour
+    public String highlightColor = "0:114:126:255:41";
+
+    @Expose
+    @ConfigOption(name = "Draw Line", desc = "Draw Line to the lowest Heavy Pearl.")
+    @ConfigEditorBoolean
+    public boolean line = true;
+
+    @Expose
+    @ConfigOption(name = "Line Color", desc = "Colour of the line.")
+    @ConfigEditorColour
+    public String lineColor = "0:230:163:38:255";
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/MatriarchHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/MatriarchHelper.kt
new file mode 100644
index 000000000..24d70e12c
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/nether/MatriarchHelper.kt
@@ -0,0 +1,71 @@
+package at.hannibal2.skyhanni.features.nether
+
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.data.IslandType
+import at.hannibal2.skyhanni.data.mob.Mob
+import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent
+import at.hannibal2.skyhanni.events.MobEvent
+import at.hannibal2.skyhanni.test.command.CopyNearbyEntitiesCommand.getMobInfo
+import at.hannibal2.skyhanni.test.command.ErrorManager
+import at.hannibal2.skyhanni.utils.ColorUtils.toChromaColor
+import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland
+import at.hannibal2.skyhanni.utils.RenderUtils.draw3DLine
+import at.hannibal2.skyhanni.utils.RenderUtils.drawFilledBoundingBox_nea
+import at.hannibal2.skyhanni.utils.RenderUtils.exactPlayerEyeLocation
+import at.hannibal2.skyhanni.utils.RenderUtils.expandBlock
+import at.hannibal2.skyhanni.utils.getLorenzVec
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+import java.util.TreeSet
+
+class MatriarchHelper {
+
+    private val config get() = SkyHanniMod.feature.crimsonIsle.matriarchHelper
+
+    private val pearlList = TreeSet<Mob> { first, second ->
+        first.baseEntity.getLorenzVec().y.compareTo(second.baseEntity.getLorenzVec().y)
+    }
+
+    @SubscribeEvent
+    fun onMobSpawn(event: MobEvent.Spawn.Special) {
+        if (!isHeavyPearl(event)) return
+        pearlList.add(event.mob)
+        if (pearlList.size > 3) {
+            ErrorManager.logErrorStateWithData(
+                "Something went wrong with the Heavy Pearl detection",
+                "More then 3 pearls",
+                "pearList" to pearlList.map { getMobInfo(it) }
+            )
+            pearlList.clear()
+        }
+    }
+
+    private fun isHeavyPearl(event: MobEvent) = isEnabled() && event.mob.name == "Heavy Pearl"
+
+    @SubscribeEvent
+    fun onMobDespawn(event: MobEvent.DeSpawn.Special) {
+        if (!isHeavyPearl(event)) return
+        pearlList.remove(event.mob)
+    }
+
+    @SubscribeEvent
+    fun onRender(event: LorenzRenderWorldEvent) {
+        if (!isEnabled()) return
+        if (config.highlight) {
+            val color = config.highlightColor.toChromaColor()
+            pearlList.forEach {
+                event.drawFilledBoundingBox_nea(it.boundingBox.expandBlock(), color, 1.0f)
+            }
+        }
+        if (config.line) {
+            val color = config.lineColor.toChromaColor()
+            var prePoint = event.exactPlayerEyeLocation()
+            pearlList.forEach {
+                val point = it.baseEntity.getLorenzVec().add(y = 1.2)
+                event.draw3DLine(prePoint, point, color, 10, true)
+                prePoint = point
+            }
+        }
+    }
+
+    fun isEnabled() = config.enabled && IslandType.CRIMSON_ISLE.isInIsland()
+}
-- 
cgit