From 1a0cb46dab241ca38e2d770bfe9bbb1060d8f361 Mon Sep 17 00:00:00 2001 From: aurielyn Date: Fri, 5 Sep 2025 18:46:03 +0530 Subject: [PATCH 1/5] Add DungeonBreaker Charge Display --- .../me/odinmain/features/ModuleManager.kt | 2 +- .../impl/dungeon/DungeonBreakerCharge.kt | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/me/odinmain/features/impl/dungeon/DungeonBreakerCharge.kt diff --git a/src/main/kotlin/me/odinmain/features/ModuleManager.kt b/src/main/kotlin/me/odinmain/features/ModuleManager.kt index 6c662e764..cf39569a1 100644 --- a/src/main/kotlin/me/odinmain/features/ModuleManager.kt +++ b/src/main/kotlin/me/odinmain/features/ModuleManager.kt @@ -51,7 +51,7 @@ object ModuleManager { // dungeon DungeonRequeue, BlessingDisplay, PositionalMessages, ExtraStats, KeyHighlight, Mimic, TeammatesHighlight, TerracottaTimer, BloodCamp, SecretClicked, DungeonWaypoints, LeapMenu, PuzzleSolvers, /*MageBeam,*/ - WarpCooldown, MapInfo, SwapSound, LividSolver, SpiritBear, + WarpCooldown, MapInfo, SwapSound, LividSolver, SpiritBear, DungeonBreakerCharge, // floor 7 TerminalSolver, TerminalTimes, MelodyMessage, TickTimers, InactiveWaypoints, WitherDragons, diff --git a/src/main/kotlin/me/odinmain/features/impl/dungeon/DungeonBreakerCharge.kt b/src/main/kotlin/me/odinmain/features/impl/dungeon/DungeonBreakerCharge.kt new file mode 100644 index 000000000..fe51fcc0d --- /dev/null +++ b/src/main/kotlin/me/odinmain/features/impl/dungeon/DungeonBreakerCharge.kt @@ -0,0 +1,40 @@ +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.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 DungeonBreakerCharge : Module( + name = "Stonk Charge Display", + description = "Displays the amount of charges left in your Dungeon Breaker" +) { + private val regex = "Charges: (\\d+)/(\\d+)⸕".toRegex() + 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) 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 handleTabListPacket(event: PacketEvent.Receive) { + if (event.packet !is S2FPacketSetSlot) return + mc.thePlayer?.inventory?.mainInventory + ?.find { it.skyblockID.equals("DUNGEONBREAKER", true) } + ?.lore?.firstOrNull { regex.containsMatchIn(it.noControlCodes) } + ?.let { lore -> + regex.find(lore.noControlCodes)?.let { match -> + charges = match.groupValues[1].toInt() + max = match.groupValues[2].toInt() + } + } + } +} \ No newline at end of file From 2ea7514be2915b70fa7006ff705945c25b397254 Mon Sep 17 00:00:00 2001 From: aurielyn Date: Fri, 5 Sep 2025 19:14:47 +0530 Subject: [PATCH 2/5] Add inDungeon check --- .../odinmain/features/impl/dungeon/DungeonBreakerCharge.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/me/odinmain/features/impl/dungeon/DungeonBreakerCharge.kt b/src/main/kotlin/me/odinmain/features/impl/dungeon/DungeonBreakerCharge.kt index fe51fcc0d..0c0834e35 100644 --- a/src/main/kotlin/me/odinmain/features/impl/dungeon/DungeonBreakerCharge.kt +++ b/src/main/kotlin/me/odinmain/features/impl/dungeon/DungeonBreakerCharge.kt @@ -5,6 +5,7 @@ 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 @@ -20,13 +21,13 @@ object DungeonBreakerCharge : Module( private var max = 0 private val hud by HUD("Display", "Shows the amount of charges left in your Dungeon Breaker.") { - if (it || max != 0) RenderUtils.drawText("§cCharges: §e${if (it) 17 else charges}§7/§e${if (it) 20 else max}§c⸕", 1f, 1f, Colors.WHITE) + 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 handleTabListPacket(event: PacketEvent.Receive) { - if (event.packet !is S2FPacketSetSlot) return + if (event.packet !is S2FPacketSetSlot || !DungeonUtils.inDungeons) return mc.thePlayer?.inventory?.mainInventory ?.find { it.skyblockID.equals("DUNGEONBREAKER", true) } ?.lore?.firstOrNull { regex.containsMatchIn(it.noControlCodes) } From afb4b801ca9a961ec0c063016bd608d663756f4c Mon Sep 17 00:00:00 2001 From: aurielyn Date: Fri, 5 Sep 2025 19:20:15 +0530 Subject: [PATCH 3/5] Update DungeonBreakerCharge.kt Signed-off-by: aurielyn --- .../me/odinmain/features/impl/dungeon/DungeonBreakerCharge.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/me/odinmain/features/impl/dungeon/DungeonBreakerCharge.kt b/src/main/kotlin/me/odinmain/features/impl/dungeon/DungeonBreakerCharge.kt index 0c0834e35..1fd017272 100644 --- a/src/main/kotlin/me/odinmain/features/impl/dungeon/DungeonBreakerCharge.kt +++ b/src/main/kotlin/me/odinmain/features/impl/dungeon/DungeonBreakerCharge.kt @@ -26,7 +26,7 @@ object DungeonBreakerCharge : Module( } @SubscribeEvent - fun handleTabListPacket(event: PacketEvent.Receive) { + fun onPacketReceive(event: PacketEvent.Receive) { if (event.packet !is S2FPacketSetSlot || !DungeonUtils.inDungeons) return mc.thePlayer?.inventory?.mainInventory ?.find { it.skyblockID.equals("DUNGEONBREAKER", true) } @@ -38,4 +38,4 @@ object DungeonBreakerCharge : Module( } } } -} \ No newline at end of file +} From 3fc1e4f561b8fe3106354752fe9cb0cb4edefb72 Mon Sep 17 00:00:00 2001 From: aurielyn Date: Fri, 5 Sep 2025 19:24:16 +0530 Subject: [PATCH 4/5] Update DungeonBreakerCharge.kt to address the changes requested Signed-off-by: aurielyn --- .../impl/dungeon/DungeonBreakerCharge.kt | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/me/odinmain/features/impl/dungeon/DungeonBreakerCharge.kt b/src/main/kotlin/me/odinmain/features/impl/dungeon/DungeonBreakerCharge.kt index 1fd017272..3703f0bc6 100644 --- a/src/main/kotlin/me/odinmain/features/impl/dungeon/DungeonBreakerCharge.kt +++ b/src/main/kotlin/me/odinmain/features/impl/dungeon/DungeonBreakerCharge.kt @@ -28,14 +28,12 @@ object DungeonBreakerCharge : Module( @SubscribeEvent fun onPacketReceive(event: PacketEvent.Receive) { if (event.packet !is S2FPacketSetSlot || !DungeonUtils.inDungeons) return - mc.thePlayer?.inventory?.mainInventory - ?.find { it.skyblockID.equals("DUNGEONBREAKER", true) } - ?.lore?.firstOrNull { regex.containsMatchIn(it.noControlCodes) } - ?.let { lore -> - regex.find(lore.noControlCodes)?.let { match -> - charges = match.groupValues[1].toInt() - max = match.groupValues[2].toInt() - } - } + val stack = event.packet.func_149174_e() ?: return + if (!stack.skyblockID.equals("DUNGEONBREAKER", true)) return + + stack.lore.firstNotNullOfOrNull { regex.find(it.noControlCodes) }?.let { match -> + charges = match.groupValues[1].toIntOrNull() ?: 0 + max = match.groupValues[2].toIntOrNull() ?: 0 + } } } From 08a5142deec6996c06e44abde7663492871aeb3f Mon Sep 17 00:00:00 2001 From: aurielyn Date: Sat, 6 Sep 2025 12:40:30 +0530 Subject: [PATCH 5/5] Add the changes requested --- src/main/kotlin/me/odinmain/features/ModuleManager.kt | 2 +- .../{DungeonBreakerCharge.kt => BreakerDisplay.kt} | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) rename src/main/kotlin/me/odinmain/features/impl/dungeon/{DungeonBreakerCharge.kt => BreakerDisplay.kt} (82%) diff --git a/src/main/kotlin/me/odinmain/features/ModuleManager.kt b/src/main/kotlin/me/odinmain/features/ModuleManager.kt index cf39569a1..f1de9dc2b 100644 --- a/src/main/kotlin/me/odinmain/features/ModuleManager.kt +++ b/src/main/kotlin/me/odinmain/features/ModuleManager.kt @@ -51,7 +51,7 @@ object ModuleManager { // dungeon DungeonRequeue, BlessingDisplay, PositionalMessages, ExtraStats, KeyHighlight, Mimic, TeammatesHighlight, TerracottaTimer, BloodCamp, SecretClicked, DungeonWaypoints, LeapMenu, PuzzleSolvers, /*MageBeam,*/ - WarpCooldown, MapInfo, SwapSound, LividSolver, SpiritBear, DungeonBreakerCharge, + 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/DungeonBreakerCharge.kt b/src/main/kotlin/me/odinmain/features/impl/dungeon/BreakerDisplay.kt similarity index 82% rename from src/main/kotlin/me/odinmain/features/impl/dungeon/DungeonBreakerCharge.kt rename to src/main/kotlin/me/odinmain/features/impl/dungeon/BreakerDisplay.kt index 3703f0bc6..ef7c90783 100644 --- a/src/main/kotlin/me/odinmain/features/impl/dungeon/DungeonBreakerCharge.kt +++ b/src/main/kotlin/me/odinmain/features/impl/dungeon/BreakerDisplay.kt @@ -12,11 +12,11 @@ import me.odinmain.utils.ui.getTextWidth import net.minecraft.network.play.server.S2FPacketSetSlot import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -object DungeonBreakerCharge : Module( - name = "Stonk Charge Display", +object BreakerDisplay : Module( + name = "Breaker Display", description = "Displays the amount of charges left in your Dungeon Breaker" ) { - private val regex = "Charges: (\\d+)/(\\d+)⸕".toRegex() + private val chargesRegex = Regex("Charges: (\\d+)/(\\d+)⸕") private var charges = 0 private var max = 0 @@ -29,9 +29,9 @@ object DungeonBreakerCharge : Module( fun onPacketReceive(event: PacketEvent.Receive) { if (event.packet !is S2FPacketSetSlot || !DungeonUtils.inDungeons) return val stack = event.packet.func_149174_e() ?: return - if (!stack.skyblockID.equals("DUNGEONBREAKER", true)) return + if (stack.skyblockID != "DUNGEONBREAKER") return - stack.lore.firstNotNullOfOrNull { regex.find(it.noControlCodes) }?.let { match -> + stack.lore.firstNotNullOfOrNull { chargesRegex.find(it.noControlCodes) }?.let { match -> charges = match.groupValues[1].toIntOrNull() ?: 0 max = match.groupValues[2].toIntOrNull() ?: 0 }