From ea1a2980a6cb6b465c1f6911c959335aca25cb80 Mon Sep 17 00:00:00 2001 From: Lorenz Date: Wed, 24 Aug 2022 17:21:32 +0200 Subject: hiding damage splashes while inside the boss room (fixing Skytils feature) --- CHANGELOG.md | 1 + FEATURES.md | 1 + .../java/at/hannibal2/skyhanni/SkyHanniMod.java | 3 +- .../skyhanni/config/features/Dungeon.java | 5 ++ .../java/at/hannibal2/skyhanni/data/HypixelData.kt | 20 ------- .../hannibal2/skyhanni/events/DungeonEnterEvent.kt | 3 -- .../hannibal2/skyhanni/events/DungeonStartEvent.kt | 3 ++ .../damageindicator/DamageIndicatorManager.kt | 5 +- .../dungeon/DungeonBossHideDamageSplash.kt | 28 ++++++++++ .../features/dungeon/DungeonBossMessages.kt | 7 +-- .../skyhanni/features/dungeon/DungeonData.kt | 61 ++++++++++++++++++---- .../features/dungeon/DungeonDeathCounter.kt | 4 +- .../features/dungeon/DungeonMilestonesDisplay.kt | 4 +- .../at/hannibal2/skyhanni/utils/LorenzUtils.kt | 3 +- 14 files changed, 105 insertions(+), 43 deletions(-) delete mode 100644 src/main/java/at/hannibal2/skyhanni/events/DungeonEnterEvent.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/events/DungeonStartEvent.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonBossHideDamageSplash.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d8db79f5..6a56f885d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### New Features - /wiki command (using hypixel-skyblock.fandom.com instead of Hypixel wiki) - Added Ashfang Blazing Souls display +- Added hiding damage splashes while inside the boss room (fixing Skytils feature) ### Minor Changes - Optimizing the highlight block size for minions, blazing souls and gravity orbs diff --git a/FEATURES.md b/FEATURES.md index 574fdbf8d..2ca32b2e2 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -21,6 +21,7 @@ - Death Counter (Changing color depending on amount) - Clean End (Hiding all entities and particles from displaying after the last dungeon boss dies, showing dungeon chests, still) - Option to exclude guardians in F3 and M3 from the clean end feature (only when sneaking) +- Hiding damage splashes while inside the boss room (fixing Skytils feature) ## Inventory - Mark items gray in your inventory when they are not supposed to be moved in certain GUIs (in NPC sell inventories, ender chests and backpacks, salvaging in dungeon hub, player trade, bazaar, action house, accessory bag, sack of sacks, fishing bag, potion bag, chests on the private island, attribute fusion and equipment GUI) diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java index 48b568a9f..353cfa934 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java @@ -72,16 +72,17 @@ public class SkyHanniMod { registerEvent(new PlayerChatFilter()); registerEvent(new DungeonChatFilter()); registerEvent(new HideNotClickableItems()); - registerEvent(new DungeonHighlightClickedBlocks()); registerEvent(new ItemDisplayOverlayFeatures()); registerEvent(new CurrentPetDisplay()); registerEvent(new ExpBottleOnGroundHider()); registerEvent(new DamageIndicatorManager()); registerEvent(new ItemAbilityCooldown()); + registerEvent(new DungeonHighlightClickedBlocks()); registerEvent(new DungeonMilestonesDisplay()); registerEvent(new DungeonDeathCounter()); registerEvent(new DungeonCleanEnd()); registerEvent(new DungeonBossMessages()); + registerEvent(new DungeonBossHideDamageSplash()); registerEvent(new TrophyFishMessages()); registerEvent(new BazaarBestSellMethod()); registerEvent(new AnvilCombineHelper()); diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Dungeon.java b/src/main/java/at/hannibal2/skyhanni/config/features/Dungeon.java index 74d2a076c..67b61d737 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/Dungeon.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/Dungeon.java @@ -59,4 +59,9 @@ public class Dungeon { @ConfigEditorBoolean @ConfigAccordionId(id = 2) public boolean cleanEndF3IgnoreGuardians = false; + + @Expose + @ConfigOption(name = "Boss Damage Splash", desc = "Hiding damage splashes while inside the boss room (fixing Skytils feature)") + @ConfigEditorBoolean + public boolean damageSplashBoss = false; } \ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt b/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt index 98370fee7..91e1240a5 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt @@ -2,12 +2,10 @@ package at.hannibal2.skyhanni.data import at.hannibal2.skyhanni.events.LocationChangeEvent import at.hannibal2.skyhanni.events.LorenzChatEvent -import at.hannibal2.skyhanni.events.PacketEvent import at.hannibal2.skyhanni.events.ProfileJoinEvent import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.TabListUtils import net.minecraft.client.Minecraft -import net.minecraft.network.play.server.S38PacketPlayerListItem import net.minecraftforge.event.world.WorldEvent import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import net.minecraftforge.fml.common.gameevent.TickEvent @@ -18,7 +16,6 @@ class HypixelData { companion object { var hypixel = false var skyblock = false - var dungeon = false var mode: String = "" } @@ -32,32 +29,15 @@ class HypixelData { val areaRegex = Regex("§r§b§l(?[\\w]+): §r§7(?[\\w ]+)§r") - @SubscribeEvent - fun onTabUpdate(event: PacketEvent.ReceiveEvent) { - if (dungeon || !hypixel || event.packet !is S38PacketPlayerListItem || - (event.packet.action != S38PacketPlayerListItem.Action.UPDATE_DISPLAY_NAME && - event.packet.action != S38PacketPlayerListItem.Action.ADD_PLAYER) - ) return - event.packet.entries.forEach { playerData -> - val name = playerData?.displayName?.formattedText ?: playerData?.profile?.name ?: return@forEach - areaRegex.matchEntire(name)?.let { result -> - dungeon = skyblock && result.groups["area"]?.value == "Dungeon" - return@forEach - } - } - } - @SubscribeEvent fun onWorldChange(event: WorldEvent.Load) { skyblock = false - dungeon = false } @SubscribeEvent fun onDisconnect(event: FMLNetworkEvent.ClientDisconnectionFromServerEvent) { hypixel = false skyblock = false - dungeon = false } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/events/DungeonEnterEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/DungeonEnterEvent.kt deleted file mode 100644 index 819ae8c71..000000000 --- a/src/main/java/at/hannibal2/skyhanni/events/DungeonEnterEvent.kt +++ /dev/null @@ -1,3 +0,0 @@ -package at.hannibal2.skyhanni.events - -class DungeonEnterEvent(dungeonFloor: String): LorenzEvent() \ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/events/DungeonStartEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/DungeonStartEvent.kt new file mode 100644 index 000000000..788d2fda6 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/events/DungeonStartEvent.kt @@ -0,0 +1,3 @@ +package at.hannibal2.skyhanni.events + +class DungeonStartEvent(dungeonFloor: String): LorenzEvent() \ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/features/damageindicator/DamageIndicatorManager.kt b/src/main/java/at/hannibal2/skyhanni/features/damageindicator/DamageIndicatorManager.kt index 8f397de02..5d7ddd3be 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/damageindicator/DamageIndicatorManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/damageindicator/DamageIndicatorManager.kt @@ -36,7 +36,10 @@ class DamageIndicatorManager { private var mobFinder: MobFinder? = null private val decimalFormat = DecimalFormat("0.0") private val maxHealth = mutableMapOf() - private val damagePattern = Pattern.compile("✧?(\\d+[⚔+✧❤♞☄✷ﬗ]*)") + + companion object { + val damagePattern: Pattern = Pattern.compile("✧?(\\d+[⚔+✧❤♞☄✷ﬗ]*)") + } @SubscribeEvent fun onWorldLoad(event: WorldEvent.Load) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonBossHideDamageSplash.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonBossHideDamageSplash.kt new file mode 100644 index 000000000..397038401 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonBossHideDamageSplash.kt @@ -0,0 +1,28 @@ +package at.hannibal2.skyhanni.features.dungeon + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.features.damageindicator.DamageIndicatorManager +import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import net.minecraft.entity.EntityLivingBase +import net.minecraft.entity.item.EntityArmorStand +import net.minecraftforge.client.event.RenderLivingEvent +import net.minecraftforge.fml.common.eventhandler.EventPriority +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +class DungeonBossHideDamageSplash { + + @SubscribeEvent(priority = EventPriority.HIGH) + fun onRenderLiving(event: RenderLivingEvent.Specials.Pre) { + if (!SkyHanniMod.feature.dungeon.damageSplashBoss) return + if (!DungeonData.inBossRoom) return + + val entity = event.entity + if (entity.ticksExisted > 300 || entity !is EntityArmorStand) return + if (!entity.hasCustomName()) return + if (entity.isDead) return + val name = entity.customNameTag.removeColor().replace(",", "") + if (!DamageIndicatorManager.damagePattern.matcher(name).matches()) return + + event.isCanceled = true + } +} \ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonBossMessages.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonBossMessages.kt index e8f569b4d..1ffd0fc70 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonBossMessages.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonBossMessages.kt @@ -10,11 +10,12 @@ class DungeonBossMessages { @SubscribeEvent fun onChatMessage(event: LorenzChatEvent) { - if (!LorenzUtils.inSkyblock) return + if (!LorenzUtils.inDungeons) return + if (!isBoss(event.message)) return - if (!SkyHanniMod.feature.chat.dungeonBossMessages) return + DungeonData.handleBossMessage(event.message) - if (isBoss(event.message)) { + if (SkyHanniMod.feature.chat.dungeonBossMessages) { event.blockedReason = "dungeon_boss" } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonData.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonData.kt index 1ae704653..93f8c659a 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonData.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonData.kt @@ -1,8 +1,9 @@ package at.hannibal2.skyhanni.features.dungeon import at.hannibal2.skyhanni.data.ScoreboardData -import at.hannibal2.skyhanni.events.DungeonEnterEvent -import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.events.DungeonStartEvent +import at.hannibal2.skyhanni.events.LorenzChatEvent +import at.hannibal2.skyhanni.utils.StringUtils.removeColor import net.minecraftforge.event.world.WorldEvent import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import net.minecraftforge.fml.common.gameevent.TickEvent @@ -11,6 +12,10 @@ class DungeonData { companion object { var dungeonFloor: String? = null + var inBossRoom = false + var started = false + + fun inDungeon() = dungeonFloor != null fun isOneOf(vararg floors: String): Boolean { for (floor in floors) { @@ -21,19 +26,42 @@ class DungeonData { return false } + + fun handleBossMessage(rawMessage: String) { + if (!inDungeon()) return + val message = rawMessage.removeColor() + val bossName = message.substringAfter("[BOSS] ").substringBefore(":").trim() + if (bossName != "The Watcher" && dungeonFloor != null && checkBossName(dungeonFloor!!, bossName)) { + inBossRoom = true + } + } + + private fun checkBossName(floor: String, bossName: String): Boolean { + val correctBoss = when (floor) { + "E" -> "The Watcher" + "F1", "M1" -> "Bonzo" + "F2", "M2" -> "Scarf" + "F3", "M3" -> "The Professor" + "F4", "M4" -> "Thorn" + "F5", "M5" -> "Livid" + "F6", "M6" -> "Sadan" + "F7", "M7" -> "Maxor" + else -> null + } ?: return false + + // Livid has a prefix in front of the name, so we check ends with to cover all the livids + return bossName.endsWith(correctBoss) + } } @SubscribeEvent fun onTick(event: TickEvent.ClientTickEvent) { if (event.phase != TickEvent.Phase.START) return - if (LorenzUtils.inDungeons) { - if (dungeonFloor == null) { - for (line in ScoreboardData.sidebarLines) { - if (line.contains("The Catacombs (")) { - dungeonFloor = line.substringAfter("(").substringBefore(")") - DungeonEnterEvent(dungeonFloor!!).postAndCatch() - break - } + if (dungeonFloor == null) { + for (line in ScoreboardData.sidebarLines) { + if (line.contains("The Catacombs (")) { + dungeonFloor = line.substringAfter("(").substringBefore(")") + break } } } @@ -42,5 +70,18 @@ class DungeonData { @SubscribeEvent fun onWorldChange(event: WorldEvent.Load) { dungeonFloor = null + started = false + inBossRoom = false + } + + @SubscribeEvent + fun onChatMessage(event: LorenzChatEvent) { + val floor = dungeonFloor + if (floor != null) { + if (event.message == "§e[NPC] §bMort§f: §rHere, I found this map when I first entered the dungeon.") { + started = true + DungeonStartEvent(floor).postAndCatch() + } + } } } \ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonDeathCounter.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonDeathCounter.kt index 129d9e3bd..d3091f944 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonDeathCounter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonDeathCounter.kt @@ -1,7 +1,7 @@ package at.hannibal2.skyhanni.features.dungeon import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.events.DungeonEnterEvent +import at.hannibal2.skyhanni.events.DungeonStartEvent import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.matchRegex @@ -73,7 +73,7 @@ class DungeonDeathCounter { } @SubscribeEvent - fun onDungeonStart(event: DungeonEnterEvent) { + fun onDungeonStart(event: DungeonStartEvent) { deaths = 0 update() } diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonMilestonesDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonMilestonesDisplay.kt index 12af1c7a4..94367d329 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonMilestonesDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonMilestonesDisplay.kt @@ -1,7 +1,7 @@ package at.hannibal2.skyhanni.features.dungeon import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.events.DungeonEnterEvent +import at.hannibal2.skyhanni.events.DungeonStartEvent import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.matchRegex @@ -78,7 +78,7 @@ class DungeonMilestonesDisplay { } @SubscribeEvent - fun onDungeonStart(event: DungeonEnterEvent) { + fun onDungeonStart(event: DungeonStartEvent) { currentMilestone = 0 update() } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt index 0bb869bac..322fc2b44 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt @@ -1,6 +1,7 @@ package at.hannibal2.skyhanni.utils import at.hannibal2.skyhanni.data.HypixelData +import at.hannibal2.skyhanni.features.dungeon.DungeonData import net.minecraft.client.Minecraft import net.minecraft.entity.EntityLivingBase import net.minecraft.entity.SharedMonsterAttributes @@ -18,7 +19,7 @@ object LorenzUtils { get() = isOnHypixel && HypixelData.skyblock val inDungeons: Boolean - get() = inSkyblock && HypixelData.dungeon + get() = inSkyblock && DungeonData.inDungeon() val skyBlockIsland: String get() = HypixelData.mode -- cgit