From 6a057410182ca7671215e6fecc9e289e50ceb0fc Mon Sep 17 00:00:00 2001 From: Lorenz Date: Tue, 16 Aug 2022 02:32:07 +0200 Subject: hide damage splashes around damage indicator --- .../hannibal2/skyhanni/config/features/Misc.java | 6 ++ .../damageindicator/BossDamageIndicator.kt | 27 +++++++++ .../skyhanni/damageindicator/DamageCounter.kt | 9 +++ .../skyhanni/damageindicator/EntityData.kt | 3 +- .../skyhanni/damageindicator/OldDamage.kt | 4 ++ .../java/at/hannibal2/skyhanni/test/LorenzTest.kt | 64 +++++++++++++++++++++- 6 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/damageindicator/DamageCounter.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/damageindicator/OldDamage.kt diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Misc.java b/src/main/java/at/hannibal2/skyhanni/config/features/Misc.java index 03495f695..a4f608824 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/Misc.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/Misc.java @@ -34,6 +34,7 @@ public class Misc { @ConfigEditorDropdown(values = {"Disabled", "Full Name", "Short Name"}) @ConfigAccordionId(id = 1) public int damageIndicatorBossName = 1; + @Expose @ConfigOption( name = "Select Boss", @@ -65,6 +66,11 @@ public class Misc { //TODO only show currently working and tested features public List damageIndicatorBossesToShow = new ArrayList<>(Arrays.asList(0, 1, 2, 5, 6, 7, 8, 9)); + @Expose + @ConfigOption(name = "Hide Damage Splash", desc = "Hiding damage splashes around the damage indicator") + @ConfigEditorBoolean + @ConfigAccordionId(id = 1) + public boolean damageIndicatorHideDamageSplash = false; @Expose @ConfigOption(name = "Pet Display", desc = "Show the currently active pet.") diff --git a/src/main/java/at/hannibal2/skyhanni/damageindicator/BossDamageIndicator.kt b/src/main/java/at/hannibal2/skyhanni/damageindicator/BossDamageIndicator.kt index 0841984d3..4f372bee8 100644 --- a/src/main/java/at/hannibal2/skyhanni/damageindicator/BossDamageIndicator.kt +++ b/src/main/java/at/hannibal2/skyhanni/damageindicator/BossDamageIndicator.kt @@ -13,17 +13,21 @@ import at.hannibal2.skyhanni.utils.LorenzUtils.removeColor import net.minecraft.client.Minecraft import net.minecraft.client.renderer.GlStateManager import net.minecraft.entity.EntityLivingBase +import net.minecraft.entity.item.EntityArmorStand import net.minecraft.entity.monster.EntityEnderman import net.minecraft.entity.monster.EntityMagmaCube import net.minecraft.entity.monster.EntityZombie import net.minecraft.entity.passive.EntityWolf +import net.minecraftforge.client.event.RenderLivingEvent import net.minecraftforge.client.event.RenderWorldLastEvent import net.minecraftforge.event.entity.EntityJoinWorldEvent import net.minecraftforge.event.world.WorldEvent +import net.minecraftforge.fml.common.eventhandler.EventPriority import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import net.minecraftforge.fml.common.gameevent.TickEvent import java.text.DecimalFormat import java.util.* +import java.util.regex.Pattern import kotlin.math.max class BossDamageIndicator { @@ -32,6 +36,7 @@ class BossDamageIndicator { private var bossFinder: BossFinder? = null private val decimalFormat = DecimalFormat("0.0") private val maxHealth = mutableMapOf() + private val damagePattern = Pattern.compile("✧?(\\d+[⚔+✧❤♞☄✷ﬗ]*)") @SubscribeEvent fun onWorldLoad(event: WorldEvent.Load) { @@ -445,4 +450,26 @@ class BossDamageIndicator { fun onWorldRender(event: EntityJoinWorldEvent) { bossFinder?.handleNewEntity(event.entity) } + + @SubscribeEvent(priority = EventPriority.HIGHEST) + fun onRenderLiving(e: RenderLivingEvent.Specials.Pre) { + if (!SkyHanniMod.feature.misc.damageIndicatorHideDamageSplash) return + + val entity = e.entity + if (entity.ticksExisted > 300 || entity !is EntityArmorStand) return + if (!entity.hasCustomName()) return + if (entity.isDead) return + val strippedName = entity.customNameTag.removeColor() + val damageMatcher = damagePattern.matcher(strippedName) + if (damageMatcher.matches()) { + if (data.values.any { + val distance = it.entity.getLorenzVec().distance(entity.getLorenzVec()) + val found = distance < 4.5 + found + }) { + e.isCanceled = true + } + } + } + } \ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/damageindicator/DamageCounter.kt b/src/main/java/at/hannibal2/skyhanni/damageindicator/DamageCounter.kt new file mode 100644 index 000000000..a7732a8a9 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/damageindicator/DamageCounter.kt @@ -0,0 +1,9 @@ +package at.hannibal2.skyhanni.damageindicator + +class DamageCounter { + + var currentDamage = 0L + var oldDamages = mutableListOf() + var firstTick = 0L + +} \ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/damageindicator/EntityData.kt b/src/main/java/at/hannibal2/skyhanni/damageindicator/EntityData.kt index 2f2738095..f1514ae93 100644 --- a/src/main/java/at/hannibal2/skyhanni/damageindicator/EntityData.kt +++ b/src/main/java/at/hannibal2/skyhanni/damageindicator/EntityData.kt @@ -9,6 +9,7 @@ class EntityData( var delayedStart: Long, val finalDungeonBoss: Boolean, val bossType: BossType, + val damageCounter: DamageCounter = DamageCounter(), var lastHealth: Int = 0, var healthText: String = "", @@ -17,5 +18,5 @@ class EntityData( var namePrefix: String = "", var nameSuffix: String = "", var dead: Boolean = false, - var deathLocation: LorenzVec? = null + var deathLocation: LorenzVec? = null, ) \ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/damageindicator/OldDamage.kt b/src/main/java/at/hannibal2/skyhanni/damageindicator/OldDamage.kt new file mode 100644 index 000000000..20fb9cbfa --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/damageindicator/OldDamage.kt @@ -0,0 +1,4 @@ +package at.hannibal2.skyhanni.damageindicator + +class OldDamage(val time: Long, val damage: Long) { +} \ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/test/LorenzTest.kt b/src/main/java/at/hannibal2/skyhanni/test/LorenzTest.kt index 1b0864385..d6f90d7b0 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/LorenzTest.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/LorenzTest.kt @@ -10,6 +10,9 @@ import at.hannibal2.skyhanni.utils.LorenzLogger import at.hannibal2.skyhanni.utils.LorenzUtils import net.minecraft.client.Minecraft import net.minecraft.nbt.NBTTagCompound +import net.minecraft.network.play.server.S0EPacketSpawnObject +import net.minecraft.network.play.server.S0FPacketSpawnMob +import net.minecraft.network.play.server.S1CPacketEntityMetadata import net.minecraftforge.client.event.RenderGameOverlayEvent import net.minecraftforge.fml.common.eventhandler.EventPriority import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -20,6 +23,7 @@ class LorenzTest { companion object { var enabled = false + var togglePacketLog = false var text = "" val debugLogger = LorenzLogger("debug/test") @@ -95,6 +99,7 @@ class LorenzTest { } fun testCommand(args: Array) { + togglePacketLog = !togglePacketLog } } @@ -109,7 +114,64 @@ class LorenzTest { @SubscribeEvent(priority = EventPriority.LOW, receiveCanceled = true) fun onChatPacket(event: PacketEvent.ReceiveEvent) { -// packetLog.log(event.packet.toString()) + val packet = event.packet + val name = packet.javaClass.simpleName + if (!togglePacketLog) return + + packetLog.log(name) + + if (packet is S0FPacketSpawnMob) { + packetLog.log("") + packetLog.log("Spawn Mob!") + for (watchableObject in packet.func_149027_c()) { + val any = watchableObject.`object` + val simpleName = any.javaClass.simpleName + + packetLog.log("javaClass: $simpleName") + packetLog.log("object: $any") + packetLog.log(" ") + } + packetLog.log(" ") + } + if (packet is S1CPacketEntityMetadata) { + packetLog.log("") + packetLog.log("Entity Metadata") + for (watchableObject in packet.func_149376_c()) { + val any = watchableObject.`object` + val simpleName = any.javaClass.simpleName + + packetLog.log("javaClass: $simpleName") + packetLog.log("object: $any") + packetLog.log(" ") + } + packetLog.log(" ") + } +// if (packet is S20PacketEntityProperties) { +// packetLog.log("") +// packetLog.log("Entity Properties") +// for (watchableObject in packet.func_149441_d()) { +// val any = watchableObject.`object` +// val simpleName = any.javaClass.simpleName +// +// packetLog.log("javaClass: $simpleName") +// packetLog.log("object: $any") +// packetLog.log(" ") +// } +// packetLog.log(" ") +// +// +// } + if (packet is S0EPacketSpawnObject) { + packetLog.log("Spawn Object") + } + + +// if (packet is S2CPacketSpawnGlobalEntity) { +// +// } +// if (packet is S2CPacketSpawnGlobalEntity) { +// +// } } // @SubscribeEvent -- cgit