diff --git a/src/main/kotlin/me/odinmain/features/ModuleManager.kt b/src/main/kotlin/me/odinmain/features/ModuleManager.kt index 32df34ffd..f4d504dee 100644 --- a/src/main/kotlin/me/odinmain/features/ModuleManager.kt +++ b/src/main/kotlin/me/odinmain/features/ModuleManager.kt @@ -50,8 +50,9 @@ object ModuleManager { val modules: ArrayList = arrayListOf( // dungeon DungeonRequeue, BlessingDisplay, PositionalMessages, ExtraStats, KeyHighlight, Mimic, TeammatesHighlight, - TerracottaTimer, BloodCamp, SecretClicked, DungeonWaypoints, LeapMenu, PuzzleSolvers, MageBeam, - WarpCooldown, MapInfo, SwapSound, LividSolver, SpiritBear, + TerracottaTimer, BloodCamp, SecretClicked, DungeonWaypoints, LeapMenu, PuzzleSolvers, /*MageBeam,*/ + WarpCooldown, MapInfo, SwapSound, LividSolver, SpiritBear, BreakerDisplay, + // floor 7 TerminalSolver, TerminalTimes, MelodyMessage, TickTimers, InactiveWaypoints, WitherDragons, diff --git a/src/main/kotlin/me/odinmain/features/impl/dungeon/BreakerDisplay.kt b/src/main/kotlin/me/odinmain/features/impl/dungeon/BreakerDisplay.kt new file mode 100644 index 000000000..ef7c90783 --- /dev/null +++ b/src/main/kotlin/me/odinmain/features/impl/dungeon/BreakerDisplay.kt @@ -0,0 +1,39 @@ +package me.odinmain.features.impl.dungeon + +import me.odinmain.events.impl.PacketEvent +import me.odinmain.features.Module +import me.odinmain.utils.noControlCodes +import me.odinmain.utils.render.Colors +import me.odinmain.utils.render.RenderUtils +import me.odinmain.utils.skyblock.dungeon.DungeonUtils +import me.odinmain.utils.skyblock.lore +import me.odinmain.utils.skyblock.skyblockID +import me.odinmain.utils.ui.getTextWidth +import net.minecraft.network.play.server.S2FPacketSetSlot +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +object BreakerDisplay : Module( + name = "Breaker Display", + description = "Displays the amount of charges left in your Dungeon Breaker" +) { + private val chargesRegex = Regex("Charges: (\\d+)/(\\d+)⸕") + private var charges = 0 + private var max = 0 + + private val hud by HUD("Display", "Shows the amount of charges left in your Dungeon Breaker.") { + if (it || (max != 0 && DungeonUtils.inDungeons)) RenderUtils.drawText("§cCharges: §e${if (it) 17 else charges}§7/§e${if (it) 20 else max}§c⸕", 1f, 1f, Colors.WHITE) + getTextWidth("Charges: 17/20⸕") + 2f to 10f + } + + @SubscribeEvent + fun onPacketReceive(event: PacketEvent.Receive) { + if (event.packet !is S2FPacketSetSlot || !DungeonUtils.inDungeons) return + val stack = event.packet.func_149174_e() ?: return + if (stack.skyblockID != "DUNGEONBREAKER") return + + stack.lore.firstNotNullOfOrNull { chargesRegex.find(it.noControlCodes) }?.let { match -> + charges = match.groupValues[1].toIntOrNull() ?: 0 + max = match.groupValues[2].toIntOrNull() ?: 0 + } + } +}