aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmpa <42304516+ItsEmpa@users.noreply.github.com>2024-10-27 23:05:25 +0100
committerGitHub <noreply@github.com>2024-10-27 22:05:25 +0000
commitc65b18c7e95a7cefdeea3c0be9bb69d3195c6283 (patch)
tree82a8206a0a8303a9074ece20c85021a328a74ac9
parent2095a82bac5f06d6fba58f4b6ca79936813aed18 (diff)
downloadSkyHanni-c65b18c7e95a7cefdeea3c0be9bb69d3195c6283.tar.gz
SkyHanni-c65b18c7e95a7cefdeea3c0be9bb69d3195c6283.tar.bz2
SkyHanni-c65b18c7e95a7cefdeea3c0be9bb69d3195c6283.zip
Improvement: Slayer Miniboss Mob Detection (#2081)
Co-authored-by: ItsEmpa <itsempa@users.noreply.github.com> Co-authored-by: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com>
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerMiniBossFeatures.kt74
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerType.kt48
2 files changed, 69 insertions, 53 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerMiniBossFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerMiniBossFeatures.kt
index 1dabaaba9..75f6ba951 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerMiniBossFeatures.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerMiniBossFeatures.kt
@@ -1,69 +1,44 @@
package at.hannibal2.skyhanni.features.slayer
import at.hannibal2.skyhanni.SkyHanniMod
-import at.hannibal2.skyhanni.events.EntityMaxHealthUpdateEvent
+import at.hannibal2.skyhanni.data.SlayerAPI
+import at.hannibal2.skyhanni.data.mob.Mob
import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent
-import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent
-import at.hannibal2.skyhanni.features.combat.damageindicator.DamageIndicatorManager
-import at.hannibal2.skyhanni.features.dungeon.DungeonAPI
-import at.hannibal2.skyhanni.mixins.hooks.RenderLivingEntityHelper
+import at.hannibal2.skyhanni.events.MobEvent
import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule
-import at.hannibal2.skyhanni.utils.CollectionUtils.editCopy
-import at.hannibal2.skyhanni.utils.ColorUtils.withAlpha
import at.hannibal2.skyhanni.utils.EntityUtils.canBeSeen
-import at.hannibal2.skyhanni.utils.EntityUtils.hasMaxHealth
import at.hannibal2.skyhanni.utils.LorenzColor
-import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.RenderUtils.drawLineToEye
import at.hannibal2.skyhanni.utils.getLorenzVec
-import net.minecraft.entity.EntityCreature
-import net.minecraft.entity.monster.EntityBlaze
-import net.minecraft.entity.monster.EntityEnderman
-import net.minecraft.entity.monster.EntitySpider
-import net.minecraft.entity.monster.EntityZombie
-import net.minecraft.entity.passive.EntityWolf
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
@SkyHanniModule
object SlayerMiniBossFeatures {
private val config get() = SkyHanniMod.feature.slayer
- private var miniBosses = listOf<EntityCreature>()
+ private var miniBosses = mutableSetOf<Mob>()
@SubscribeEvent
- fun onEntityHealthUpdate(event: EntityMaxHealthUpdateEvent) {
- if (!isEnabled()) return
- val entity = event.entity as? EntityCreature ?: return
- if (DamageIndicatorManager.isBoss(entity)) return
-
- val maxHealth = event.maxHealth
- for (bossType in SlayerMiniBossType.entries) {
- if (!bossType.health.any { entity.hasMaxHealth(it, true, maxHealth) }) continue
- if (bossType.clazz != entity.javaClass) continue
-
- miniBosses = miniBosses.editCopy { add(entity) }
- RenderLivingEntityHelper.setEntityColorWithNoHurtTime(
- entity,
- LorenzColor.AQUA.toColor().withAlpha(127)
- ) { config.slayerMinibossHighlight }
- }
+ fun onMobSpawn(event: MobEvent.Spawn.SkyblockMob) {
+ val mob = event.mob
+ if (!SlayerMiniBossType.isMiniboss(mob.name)) return
+ miniBosses += mob
+ if (config.slayerMinibossHighlight) mob.highlight(LorenzColor.AQUA.toColor())
}
@SubscribeEvent
- fun onWorldChange(event: LorenzWorldChangeEvent) {
- miniBosses = emptyList()
+ fun onMobDeSpawn(event: MobEvent.DeSpawn.SkyblockMob) {
+ miniBosses -= event.mob
}
@SubscribeEvent
fun onWorldRender(event: LorenzRenderWorldEvent) {
+ if (!SlayerAPI.isInAnyArea) return
if (!config.slayerMinibossLine) return
for (mob in miniBosses) {
- if (mob.health <= 0) continue
- if (mob.isDead) continue
- if (!mob.canBeSeen(10)) continue
-
+ if (!mob.baseEntity.canBeSeen(10)) continue
event.drawLineToEye(
- mob.getLorenzVec().up(),
+ mob.baseEntity.getLorenzVec().up(),
LorenzColor.AQUA.toColor(),
config.slayerMinibossLineWidth,
true,
@@ -71,13 +46,20 @@ object SlayerMiniBossFeatures {
}
}
- private fun isEnabled() = LorenzUtils.inSkyBlock && !DungeonAPI.inDungeon() && !LorenzUtils.inKuudraFight
+ enum class SlayerMiniBossType(vararg names: String) {
+ REVENANT("Revenant Sycophant", "Revenant Champion", "Deformed Revenant", "Atoned Champion", "Atoned Revenant"),
+ TARANTULA("Tarantula Vermin", "Tarantula Beast", "Mutant Tarantula"),
+ SVEN("Pack Enforcer", "Sven Follower", "Sven Alpha"),
+ VOIDLING("Voidling Devotee", "Voidling Radical", "Voidcrazed Maniac"),
+ INFERNAL("Flare Demon", "Kindleheart Demon", "Burningsoul Demon"),
+ ;
- enum class SlayerMiniBossType(val clazz: Class<out EntityCreature>, vararg val health: Int) {
- REVENANT(EntityZombie::class.java, 24_000, 90_000, 360_000, 600_000, 2_400_000),
- TARANTULA(EntitySpider::class.java, 54_000, 144_000, 576_000),
- SVEN(EntityWolf::class.java, 45_000, 120_000, 480_000),
- VOIDLING(EntityEnderman::class.java, 8_400_000, 17_500_000, 52_500_000),
- INFERNAL(EntityBlaze::class.java, 12_000_000, 25_000_000, 75_000_000),
+ val names = names.toSet()
+
+ companion object {
+ private val allNames = entries.flatMap { it.names }.toSet()
+
+ fun isMiniboss(name: String) = name in allNames
+ }
}
}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerType.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerType.kt
index 0a07e62fe..9fff1bb06 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerType.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerType.kt
@@ -6,13 +6,47 @@ import net.minecraft.entity.monster.EntitySpider
import net.minecraft.entity.monster.EntityZombie
import net.minecraft.entity.passive.EntityWolf
-enum class SlayerType(val displayName: String, val rngName: String, val clazz: Class<*>) {
- REVENANT("Revenant Horror", "revenant", EntityZombie::class.java),
- TARANTULA("Tarantula Broodfather", "tarantula", EntitySpider::class.java),
- SVEN("Sven Packmaster", "sven", EntityWolf::class.java),
- VOID("Voidgloom Seraph", "voidgloom", EntityEnderman::class.java),
- INFERNO("Inferno Demonlord", "inferno", EntityBlaze::class.java),
- VAMPIRE("Bloodfiend", "vampire", EntityZombie::class.java) // previously called "Riftstalker Bloodfiend"
+enum class SlayerType(
+ val displayName: String,
+ val rngName: String,
+ val clazz: Class<*>,
+ val miniBossType: SlayerMiniBossFeatures.SlayerMiniBossType? = null,
+) {
+ REVENANT(
+ "Revenant Horror",
+ "revenant",
+ EntityZombie::class.java,
+ SlayerMiniBossFeatures.SlayerMiniBossType.REVENANT,
+ ),
+ TARANTULA(
+ "Tarantula Broodfather",
+ "tarantula",
+ EntitySpider::class.java,
+ SlayerMiniBossFeatures.SlayerMiniBossType.TARANTULA,
+ ),
+ SVEN(
+ "Sven Packmaster",
+ "sven",
+ EntityWolf::class.java,
+ SlayerMiniBossFeatures.SlayerMiniBossType.SVEN,
+ ),
+ VOID(
+ "Voidgloom Seraph",
+ "voidgloom",
+ EntityEnderman::class.java,
+ SlayerMiniBossFeatures.SlayerMiniBossType.VOIDLING,
+ ),
+ INFERNO(
+ "Inferno Demonlord",
+ "inferno",
+ EntityBlaze::class.java,
+ SlayerMiniBossFeatures.SlayerMiniBossType.INFERNAL,
+ ),
+ VAMPIRE(
+ "Bloodfiend",
+ "vampire",
+ EntityZombie::class.java,
+ ) // previously called "Riftstalker Bloodfiend"
;
companion object {