diff options
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java | 2 | ||||
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/config/features/Slayer.java | 52 | ||||
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/damageindicator/DamageIndicatorManager.kt | 109 | ||||
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/damageindicator/EntityData.kt | 4 | ||||
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerDaggerHelper.kt | 33 | ||||
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/HellionShield.kt (renamed from src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/DaggerMode.kt) | 2 | ||||
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/HellionShieldHelper.kt | 42 |
7 files changed, 171 insertions, 73 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java index 2005fe4bc..e0f4f6ac4 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java @@ -36,6 +36,7 @@ import at.hannibal2.skyhanni.features.slayer.SlayerQuestWarning; import at.hannibal2.skyhanni.features.slayer.blaze.BlazeSlayerDaggerHelper; import at.hannibal2.skyhanni.features.slayer.blaze.BlazeSlayerFirePitsWarning; import at.hannibal2.skyhanni.features.slayer.blaze.BlazeSlayerPillar; +import at.hannibal2.skyhanni.features.slayer.blaze.HellionShieldHelper; import at.hannibal2.skyhanni.features.summonings.SummoningMobManager; import at.hannibal2.skyhanni.features.summonings.SummoningSoulsName; import at.hannibal2.skyhanni.test.LorenzTest; @@ -138,6 +139,7 @@ public class SkyHanniMod { registerEvent(new ThunderSparksHighlight()); registerEvent(new BlazeSlayerPillar()); registerEvent(new BlazeSlayerDaggerHelper()); + registerEvent(new HellionShieldHelper()); registerEvent(new BlazeSlayerFirePitsWarning()); registerEvent(new PlayerChatFilter()); registerEvent(new HideArmor()); diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Slayer.java b/src/main/java/at/hannibal2/skyhanni/config/features/Slayer.java index bc584cbdb..a108e6c8c 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/Slayer.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/Slayer.java @@ -7,55 +7,79 @@ import com.google.gson.annotations.Expose; public class Slayer { @Expose - @ConfigOption(name = "Blaze", desc = "") + @ConfigOption(name = "Enderman", desc = "") @ConfigEditorAccordion(id = 0) - public boolean damageSplash = false; + public boolean enderman = false; @Expose - @ConfigOption(name = "Pillar Display", desc = "Cooldown when the Fire Pillar from the Blaze Slayer will kill you.") + @ConfigOption(name = "Enderman Beacon", desc = "Highlight the enderman slayer Yang Glyph (Beacon) in red color. (supports beacon in hand and beacon flying)") + @ConfigEditorBoolean + @ConfigAccordionId(id = 0) + public boolean slayerEndermanBeacon = false; + + @Expose + @ConfigOption(name = "Phase Display", desc = "Show the current phase of the enderman slayer.") @ConfigEditorBoolean @ConfigAccordionId(id = 0) + public boolean endermanPhaseDisplay = false; + + @Expose + @ConfigOption(name = "Blaze", desc = "") + @ConfigEditorAccordion(id = 1) + public boolean blaze = false; + + @Expose + @ConfigOption(name = "Pillar Display", desc = "Cooldown when the Fire Pillar from the Blaze Slayer will kill you.") + @ConfigEditorBoolean + @ConfigAccordionId(id = 1) public boolean firePillarDisplay = false; @Expose @ConfigOption(name = "Pillar Display Position", desc = "") @ConfigEditorButton(runnableId = "firePillar", buttonText = "Edit") - @ConfigAccordionId(id = 0) + @ConfigAccordionId(id = 1) public Position firePillarPos = new Position(10, 10, false, true); @Expose @ConfigOption(name = "Pillar Sound", desc = "Custom countdown sound for the Fire Pillar timer for the Blaze Slayer.") @ConfigEditorBoolean - @ConfigAccordionId(id = 0) + @ConfigAccordionId(id = 1) public boolean firePillarSound = false; @Expose @ConfigOption(name = "Hide Pillar", desc = "Hide sound and entities when building the Fire Pillar for the Blaze Slayer.") @ConfigEditorBoolean - @ConfigAccordionId(id = 0) + @ConfigAccordionId(id = 1) public boolean firePillarBuildHider = false; @Expose - @ConfigOption(name = "Blaze Daggers", desc = "Faster and permanent display for the Blaze Slayer daggers") + @ConfigOption(name = "Blaze Daggers", desc = "Faster and permanent display for the Blaze Slayer daggers.") @ConfigEditorBoolean - @ConfigAccordionId(id = 0) + @ConfigAccordionId(id = 1) public boolean blazeDaggers = false; @Expose - @ConfigOption(name = "Fire Pits", desc = "Warning when the fire pit phase starts for the Blaze Slayer tier 3 and 4") + @ConfigOption(name = "Fire Pits", desc = "Warning when the fire pit phase starts for the Blaze Slayer tier 3 and 4.") @ConfigEditorBoolean - @ConfigAccordionId(id = 0) + @ConfigAccordionId(id = 1) public boolean firePitsWarning = false; @Expose - @ConfigOption(name = "Miniboss Highlight", desc = "Highlight slayer miniboss in blue color") + @ConfigOption(name = "Phase Display", desc = "Show the current phase of the blaze slayer.") @ConfigEditorBoolean - public boolean slayerMinibossHighlight = false; + @ConfigAccordionId(id = 1) + public boolean blazePhaseDisplay = false; @Expose - @ConfigOption(name = "Enderman Beacon", desc = "Highlight the enderman slayer Yang Glyph (Beacon) in red color (supports beacon in hand and beacon flying)") + @ConfigOption(name = "Colored Mobs", desc = "Color the blaze slayer boss and the demons in the right hellion shield color.") @ConfigEditorBoolean - public boolean slayerEndermanBeacon = false; + @ConfigAccordionId(id = 1) + public boolean blazeColoredMobs = false; + + @Expose + @ConfigOption(name = "Miniboss Highlight", desc = "Highlight slayer miniboss in blue color") + @ConfigEditorBoolean + public boolean slayerMinibossHighlight = false; @Expose @ConfigOption(name = "Hide Mob Names", desc = "Hide the name of the mobs you need to kill in order for the Slayer boss to spawn. Exclude mobs that are damaged, corrupted, runic or semi rare.") 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 aa3da328e..6cdcc6eb2 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/damageindicator/DamageIndicatorManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/damageindicator/DamageIndicatorManager.kt @@ -2,9 +2,12 @@ package at.hannibal2.skyhanni.features.damageindicator import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.data.ScoreboardData -import at.hannibal2.skyhanni.events.* +import at.hannibal2.skyhanni.events.BossHealthChangeEvent +import at.hannibal2.skyhanni.events.DamageIndicatorFinalBossEvent +import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.features.dungeon.DungeonData -import at.hannibal2.skyhanni.features.slayer.blaze.DaggerMode +import at.hannibal2.skyhanni.features.slayer.blaze.HellionShield +import at.hannibal2.skyhanni.features.slayer.blaze.setHellionShield import at.hannibal2.skyhanni.test.LorenzTest import at.hannibal2.skyhanni.utils.* import at.hannibal2.skyhanni.utils.EntityUtils.getNameTagWith @@ -86,8 +89,10 @@ class DamageIndicatorManager { val player = Minecraft.getMinecraft().thePlayer //TODO config to define between 100ms and 5 sec - for (uuid in data.filter { (System.currentTimeMillis() > it.value.timeLastTick + if (it.value.dead && !noDeathDisplay(it.value.bossType)) 4_000 else 100) || - (it.value.dead && noDeathDisplay(it.value.bossType)) } + for (uuid in data.filter { + (System.currentTimeMillis() > it.value.timeLastTick + if (it.value.dead && !noDeathDisplay(it.value.bossType)) 4_000 else 100) || + (it.value.dead && noDeathDisplay(it.value.bossType)) + } .map { it.key }) { data.remove(uuid) } @@ -146,6 +151,12 @@ class DamageIndicatorManager { bossName += data.nameSuffix } //TODO fix scaling problem + + if (data.nameAbove.isNotEmpty()) { +// RenderUtils.drawLabel(location, data.nameAbove, partialTicks, true, 3.9f, -9.0f) + RenderUtils.drawLabel(location, data.nameAbove, partialTicks, true, 3.9f, -18.0f) + } + // val debug = Minecraft.getMinecraft().thePlayer.isSneaking // RenderUtils.drawLabel(location, bossName, partialTicks, true, 3.9f, -9.0f, debug = debug) RenderUtils.drawLabel(location, bossName, partialTicks, true, 3.9f, -9.0f) @@ -199,7 +210,7 @@ class DamageIndicatorManager { BossType.SLAYER_BLAZE_QUAZII_4, //TODO f3/m3 4 guardians, f2/m2 4 boss room fighters - -> true + -> true else -> false } @@ -265,7 +276,7 @@ class DamageIndicatorManager { entityData.namePrefix = "" entityData.nameSuffix = "" - entityData.color = null + entityData.nameAbove = "" val customHealthText = if (health == 0L) { entityData.dead = true "§cDead" @@ -313,6 +324,7 @@ class DamageIndicatorManager { return checkEnderSlayer(entity as EntityEnderman, entityData, health.toInt(), maxHealth.toInt()) } + BossType.SLAYER_BLAZE_1, BossType.SLAYER_BLAZE_2, BossType.SLAYER_BLAZE_3, BossType.SLAYER_BLAZE_4, @@ -323,7 +335,7 @@ class DamageIndicatorManager { BossType.SLAYER_BLAZE_TYPHOEUS_3, BossType.SLAYER_BLAZE_TYPHOEUS_4, -> { - return checkBlazeSlayer(entity as EntityLiving, entityData) + return checkBlazeSlayer(entity as EntityLiving, entityData, health.toInt(), maxHealth.toInt()) } BossType.NETHER_MAGMA_BOSS -> { @@ -360,16 +372,55 @@ class DamageIndicatorManager { return "" } - private fun checkBlazeSlayer(entity: EntityLiving, entityData: EntityData): String { - for (swordMode in DaggerMode.values()) { - if (entity.hasNameTagWith(3, swordMode.name)) { - entityData.namePrefix = swordMode.formattedName + " " - entityData.color = swordMode.color - return "" + private fun checkBlazeSlayer(entity: EntityLiving, entityData: EntityData, health: Int, maxHealth: Int): String? { + val shield = HellionShield.values().firstOrNull { entity.hasNameTagWith(3, it.name) } + entity.setHellionShield(shield) + if (shield != null) { + entityData.nameAbove = shield.formattedName + } + + if (!SkyHanniMod.feature.slayer.blazePhaseDisplay) return "" + + var calcHealth = health + val calcMaxHealth: Int + entityData.namePrefix = when (entityData.bossType) { + BossType.SLAYER_BLAZE_1, + BossType.SLAYER_BLAZE_2, + -> { + val step = maxHealth / 2 + calcMaxHealth = step + if (health > step) { + calcHealth -= step + "§c1/2 " + } else { + calcHealth = health + "§a2/2 " + } + } + + BossType.SLAYER_BLAZE_3, + BossType.SLAYER_BLAZE_4, + -> { + val step = maxHealth / 3 + calcMaxHealth = step + if (health > step * 2) { + calcHealth -= step * 2 + "§c1/3 " + } else if (health > step) { + calcHealth -= step + "§e2/3 " + } else { + calcHealth = health + "§a3/3 " + } } + + else -> return "" } - return "" + return NumberUtil.percentageColor( + calcHealth.toLong(), calcMaxHealth.toLong() + ).getChatColor() + NumberUtil.format(calcHealth) } private fun checkMagmaCube( @@ -480,10 +531,15 @@ class DamageIndicatorManager { else -> return null } - val result = NumberUtil.percentageColor( + var result = NumberUtil.percentageColor( calcHealth.toLong(), calcMaxHealth.toLong() ).getChatColor() + NumberUtil.format(calcHealth) + if (!SkyHanniMod.feature.slayer.endermanPhaseDisplay) { + result = "" + entityData.namePrefix = "" + } + //Hit phase val armorStandHits = entity.getNameTagWith(3, " Hit") @@ -650,29 +706,6 @@ class DamageIndicatorManager { } } - @SubscribeEvent - fun onRenderMobColored(event: RenderMobColoredEvent) { - if (!isEnabled()) return - val entity = event.entity - - data.values - .filter { it.entity == entity } - .forEach { data -> - data.color?.let { - event.color = it.toColor().withAlpha(80) - } - } - } - - @SubscribeEvent - fun onResetEntityHurtTime(event: ResetEntityHurtEvent) { - if (!isEnabled()) return - val entity = event.entity - if (data.values.any { it.entity == entity && it.color != null }) { - event.shouldReset = true - } - } - fun isEnabled(): Boolean { return LorenzUtils.inSkyblock && SkyHanniMod.feature.damageIndicator.enabled } diff --git a/src/main/java/at/hannibal2/skyhanni/features/damageindicator/EntityData.kt b/src/main/java/at/hannibal2/skyhanni/features/damageindicator/EntityData.kt index 4212b4521..2c7acc54b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/damageindicator/EntityData.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/damageindicator/EntityData.kt @@ -1,6 +1,5 @@ package at.hannibal2.skyhanni.features.damageindicator -import at.hannibal2.skyhanni.utils.LorenzColor import at.hannibal2.skyhanni.utils.LorenzVec import net.minecraft.entity.EntityLivingBase @@ -15,10 +14,9 @@ class EntityData( var lastHealth: Long = 0L, var healthText: String = "", var timeLastTick: Long = 0, -// var healthLineHidden: Boolean = false, var namePrefix: String = "", var nameSuffix: String = "", - var color: LorenzColor? = null, + var nameAbove: String = "", var dead: Boolean = false, var deathLocation: LorenzVec? = null, )
\ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerDaggerHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerDaggerHelper.kt index 2ca68c954..3864f8ee8 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerDaggerHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerDaggerHelper.kt @@ -52,16 +52,15 @@ class BlazeSlayerDaggerHelper { private fun getDaggerText(dagger: Dagger): String { var activeAbility = "" var inactiveAbility = "" - for (mode in dagger.modes) { - if (mode.active) { - activeAbility = mode.chatColor + "§l" + mode + for (shield in dagger.shields) { + if (shield.active) { + activeAbility = shield.chatColor + "§l" + shield } else { - inactiveAbility = " §7/ " + mode.chatColor + mode.toString().lowercase() + inactiveAbility = " §7/ " + shield.chatColor + shield.toString().lowercase() } } if (activeAbility == "") return "" return "$activeAbility$inactiveAbility" - } private fun getName(player: EntityPlayerSP): String { @@ -70,7 +69,7 @@ class BlazeSlayerDaggerHelper { } @SubscribeEvent - fun onReceiveCurrentMode(event: PacketEvent.ReceiveEvent) { + fun onReceiveCurrentShield(event: PacketEvent.ReceiveEvent) { if (!isEnabled()) return val packet = event.packet @@ -79,12 +78,12 @@ class BlazeSlayerDaggerHelper { val message = packet.message ?: return val formattedText = message.formattedText - for (mode in DaggerMode.values()) { - if (mode.formattedName + "§r" == formattedText) { - Dagger.values().filter { mode in it.modes }.forEach { - it.modes.forEach { mode -> mode.active = false } + for (shield in HellionShield.values()) { + if (shield.formattedName + "§r" == formattedText) { + Dagger.values().filter { shield in it.shields }.forEach { + it.shields.forEach { shield -> shield.active = false } } - mode.active = true + shield.active = true event.isCanceled = true clientSideClicked = false return @@ -108,22 +107,22 @@ class BlazeSlayerDaggerHelper { val status = packet.status if (status == C07PacketPlayerDigging.Action.RELEASE_USE_ITEM) { val dagger = getDaggerInHand() - dagger?.modes?.forEach { mode -> mode.active = !mode.active } + dagger?.shields?.forEach { shield -> shield.active = !shield.active } clientSideClicked = true } } } - enum class Dagger(val daggerNames: List<String>, vararg val modes: DaggerMode) { + enum class Dagger(val daggerNames: List<String>, vararg val shields: HellionShield) { TWILIGHT( listOf("Twilight Dagger", "Mawdredge Dagger", "Deathripper Dagger"), - DaggerMode.SPIRIT, - DaggerMode.CRYSTAL + HellionShield.SPIRIT, + HellionShield.CRYSTAL ), FIREDUST( listOf("Firedust Dagger", "Kindlebane Dagger", "Pyrochaos Dagger"), - DaggerMode.ASHEN, - DaggerMode.AURIC + HellionShield.ASHEN, + HellionShield.AURIC ), ; diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/DaggerMode.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/HellionShield.kt index d6a8ab711..454d1b65f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/DaggerMode.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/HellionShield.kt @@ -2,7 +2,7 @@ package at.hannibal2.skyhanni.features.slayer.blaze import at.hannibal2.skyhanni.utils.LorenzColor -enum class DaggerMode(val formattedName: String, val color: LorenzColor, val chatColor: String = color.getChatColor(), var active: Boolean = false) { +enum class HellionShield(val formattedName: String, val color: LorenzColor, val chatColor: String = color.getChatColor(), var active: Boolean = false) { AURIC("§e§lAURIC", LorenzColor.YELLOW), ASHEN("§8§lASHEN", LorenzColor.DARK_GRAY), SPIRIT("§f§lSPIRIT", LorenzColor.WHITE), diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/HellionShieldHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/HellionShieldHelper.kt new file mode 100644 index 000000000..c09419533 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/HellionShieldHelper.kt @@ -0,0 +1,42 @@ +package at.hannibal2.skyhanni.features.slayer.blaze + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.events.RenderMobColoredEvent +import at.hannibal2.skyhanni.events.ResetEntityHurtEvent +import at.hannibal2.skyhanni.events.withAlpha +import at.hannibal2.skyhanni.utils.LorenzUtils +import net.minecraft.entity.EntityLiving +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +class HellionShieldHelper { + + companion object { + val hellionShieldMobs = mutableMapOf<EntityLiving, HellionShield>() + } + + @SubscribeEvent + fun onRenderMobColored(event: RenderMobColoredEvent) { + if (!LorenzUtils.inSkyblock) return + if (!SkyHanniMod.feature.slayer.blazeColoredMobs) return + + val shield = hellionShieldMobs.getOrDefault(event.entity, null) ?: return + event.color = shield.color.toColor().withAlpha(80) + } + + @SubscribeEvent + fun onResetEntityHurtTime(event: ResetEntityHurtEvent) { + if (!LorenzUtils.inSkyblock) return + if (!SkyHanniMod.feature.slayer.blazeColoredMobs) return + + hellionShieldMobs.getOrDefault(event.entity, null) ?: return + event.shouldReset = true + } +} + +fun EntityLiving.setHellionShield(shield: HellionShield?) { + if (shield != null) { + HellionShieldHelper.hellionShieldMobs[this] = shield + } else { + HellionShieldHelper.hellionShieldMobs.remove(this) + } +}
\ No newline at end of file |