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