diff options
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/MobFinder.kt | 538 |
1 files changed, 329 insertions, 209 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/MobFinder.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/MobFinder.kt index 3472e26be..0b7b26572 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/MobFinder.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/MobFinder.kt @@ -76,253 +76,344 @@ class MobFinder { private var floor6SadanSpawnTime = 0L internal fun tryAdd(entity: EntityLivingBase): EntityResult? { - if (LorenzUtils.inDungeons) { - if (DungeonAPI.isOneOf("F1", "M1")) { - if (floor1bonzo1 && entity is EntityOtherPlayerMP && entity.name == "Bonzo ") { - return EntityResult(floor1bonzo1SpawnTime) - } - if (floor1bonzo2 && entity is EntityOtherPlayerMP && entity.name == "Bonzo ") { - return EntityResult(floor1bonzo2SpawnTime, finalDungeonBoss = true) + return when { + LorenzUtils.inDungeons -> tryAddDungeon(entity) + RiftAPI.inRift() -> tryAddRift(entity) + else -> { + when (entity) { + /* + * Note that the order does matter here. + * For example, if you put EntityZombie before EntityPigZombie, + * EntityPigZombie will never be reached because EntityPigZombie extends EntityZombie. + * Please take this into consideration if you are to modify this. + */ + is EntityOtherPlayerMP -> tryAddEntityOtherPlayerMP(entity) + is EntityIronGolem -> tryAddEntityIronGolem(entity) + is EntityPigZombie -> tryAddEntityPigZombie(entity) + is EntityMagmaCube -> tryAddEntityMagmaCube(entity) + is EntityEnderman -> tryAddEntityEnderman(entity) + is EntitySkeleton -> tryAddEntitySkeleton(entity) + is EntityGuardian -> tryAddEntityGuardian(entity) + is EntityZombie -> tryAddEntityZombie(entity) + is EntityWither -> tryAddEntityWither(entity) + is EntityDragon -> tryAddEntityDragon(entity) + is EntitySpider -> tryAddEntitySpider(entity) + is EntityHorse -> tryAddEntityHorse(entity) + is EntityBlaze -> tryAddEntityBlaze(entity) + is EntityWolf -> tryAddEntityWolf(entity) + is EntityLiving -> tryAddEntityLiving(entity) + else -> null } } + } + } - if (DungeonAPI.isOneOf("F2", "M2")) { - if (entity.name == "Summon " && entity is EntityOtherPlayerMP) { - if (floor2summons1 && !floor2summonsDiedOnce.contains(entity)) { - if (entity.health.toInt() != 0) { - return EntityResult(floor2summons1SpawnTime) - } else { - floor2summonsDiedOnce.add(entity) - } - } - if (floor2secondPhase) { - return EntityResult(floor2secondPhaseSpawnTime) - } - } - - if (floor2secondPhase && entity is EntityOtherPlayerMP) { - //TODO only show scarf after (all/at least x) summons are dead? - val result = entity.name == "Scarf " - if (result) { - return EntityResult(floor2secondPhaseSpawnTime, finalDungeonBoss = true) - } - } - } + private fun tryAddDungeon(entity: EntityLivingBase): EntityResult? { + return when { + DungeonAPI.isOneOf("F1", "M1") -> tryAddDungeonF1(entity) + DungeonAPI.isOneOf("F2", "M2") -> tryAddDungeonF2(entity) + DungeonAPI.isOneOf("F3", "M3") -> tryAddDungeonF3(entity) + DungeonAPI.isOneOf("F4", "M4") -> tryAddDungeonF4(entity) + DungeonAPI.isOneOf("F5", "M5") -> tryAddDungeonF5(entity) + DungeonAPI.isOneOf("F6", "M6") -> tryAddDungeonF6(entity) + else -> null + } + } - if (DungeonAPI.isOneOf("F3", "M3")) { - if (entity is EntityGuardian && floor3GuardianShield) { - if (guardians.size == 4) { - var totalHealth = 0 - for (guardian in guardians) { - totalHealth += guardian.health.toInt() - } - if (totalHealth == 0) { - floor3GuardianShield = false - guardians.clear() - } - } else { - findGuardians() - } - if (guardians.contains(entity)) { - return EntityResult(floor3GuardianShieldSpawnTime, true) - } - } + private fun tryAddDungeonF1(entity: EntityLivingBase): EntityResult? { + if (floor1bonzo1 && entity is EntityOtherPlayerMP && entity.name == "Bonzo ") { + return EntityResult(floor1bonzo1SpawnTime) + } + if (floor1bonzo2 && entity is EntityOtherPlayerMP && entity.name == "Bonzo ") { + return EntityResult(floor1bonzo2SpawnTime, finalDungeonBoss = true) + } + return null + } - if (floor3Professor && entity is EntityOtherPlayerMP && entity.name == "The Professor") { - return EntityResult( - floor3ProfessorSpawnTime, - floor3ProfessorSpawnTime + 1_000 > System.currentTimeMillis() - ) - } - if (floor3ProfessorGuardianPrepare && entity is EntityOtherPlayerMP && entity.name == "The Professor") { - return EntityResult(floor3ProfessorGuardianPrepareSpawnTime, true) + private fun tryAddDungeonF2(entity: EntityLivingBase): EntityResult? { + if (entity.name == "Summon " && entity is EntityOtherPlayerMP) { + if (floor2summons1 && !floor2summonsDiedOnce.contains(entity)) { + if (entity.health.toInt() != 0) { + return EntityResult(floor2summons1SpawnTime) + } else { + floor2summonsDiedOnce.add(entity) } + } + if (floor2secondPhase) { + return EntityResult(floor2secondPhaseSpawnTime) + } + } - if (entity is EntityGuardian && floor3ProfessorGuardian && entity == floor3ProfessorGuardianEntity) { - return EntityResult(finalDungeonBoss = true) - } + if (floor2secondPhase && entity is EntityOtherPlayerMP) { + //TODO only show scarf after (all/at least x) summons are dead? + val result = entity.name == "Scarf " + if (result) { + return EntityResult(floor2secondPhaseSpawnTime, finalDungeonBoss = true) } + } + return null + } - if (DungeonAPI.isOneOf("F4", "M4") && entity is EntityGhast) { - return EntityResult( - bossType = BossType.DUNGEON_F4_THORN, - ignoreBlocks = true, - finalDungeonBoss = true - ) + private fun tryAddDungeonF3(entity: EntityLivingBase): EntityResult? { + if (entity is EntityGuardian && floor3GuardianShield) { + if (guardians.size == 4) { + calcGuardiansTotalHealth() + } else { + findGuardians() + } + if (guardians.contains(entity)) { + return EntityResult(floor3GuardianShieldSpawnTime, true) } + } + + if (floor3Professor && entity is EntityOtherPlayerMP && entity.name == "The Professor") { + return EntityResult( + floor3ProfessorSpawnTime, + floor3ProfessorSpawnTime + 1_000 > System.currentTimeMillis() + ) + } + if (floor3ProfessorGuardianPrepare && entity is EntityOtherPlayerMP && entity.name == "The Professor") { + return EntityResult(floor3ProfessorGuardianPrepareSpawnTime, true) + } + + if (entity is EntityGuardian && floor3ProfessorGuardian && entity == floor3ProfessorGuardianEntity) { + return EntityResult(finalDungeonBoss = true) + } + return null + } - if (DungeonAPI.isOneOf("F5", "M5") && entity is EntityOtherPlayerMP && entity == DungeonLividFinder.lividEntity) { + private fun tryAddDungeonF4(entity: EntityLivingBase): EntityResult? { + if (entity is EntityGhast) { + return EntityResult( + bossType = BossType.DUNGEON_F4_THORN, + ignoreBlocks = true, + finalDungeonBoss = true + ) + } + return null + } + + private fun tryAddDungeonF5(entity: EntityLivingBase): EntityResult? { + if (entity is EntityOtherPlayerMP && entity == DungeonLividFinder.lividEntity) { + return EntityResult( + bossType = BossType.DUNGEON_F5, + ignoreBlocks = true, + finalDungeonBoss = true + ) + } + return null + } + + private fun tryAddDungeonF6(entity: EntityLivingBase): EntityResult? { + if (entity is EntityGiantZombie && !entity.isInvisible) { + if (floor6Giants && entity.posY > 68) { + val extraDelay = checkExtraF6GiantsDelay(entity) return EntityResult( - bossType = BossType.DUNGEON_F5, - ignoreBlocks = true, - finalDungeonBoss = true + floor6GiantsSpawnTime + extraDelay, + floor6GiantsSpawnTime + extraDelay + 1_000 > System.currentTimeMillis() ) } - if (DungeonAPI.isOneOf("F6", "M6") && entity is EntityGiantZombie && !entity.isInvisible) { - if (floor6Giants && entity.posY > 68) { - val extraDelay = checkExtraF6GiantsDelay(entity) - return EntityResult( - floor6GiantsSpawnTime + extraDelay, - floor6GiantsSpawnTime + extraDelay + 1_000 > System.currentTimeMillis() - ) - } - - if (floor6Sadan) { - return EntityResult(floor6SadanSpawnTime, finalDungeonBoss = true) - } + if (floor6Sadan) { + return EntityResult(floor6SadanSpawnTime, finalDungeonBoss = true) } - } else if (RiftAPI.inRift()) { - if (entity is EntityOtherPlayerMP) { - if (entity.name == "Leech Supreme") { - return EntityResult(bossType = BossType.LEECH_SUPREME) - } + } + return null + } - if (entity.name == "Bloodfiend ") { - when { - entity.hasMaxHealth(625, true) -> return EntityResult(bossType = BossType.SLAYER_BLOODFIEND_1) - entity.hasMaxHealth(1_100, true) -> return EntityResult(bossType = BossType.SLAYER_BLOODFIEND_2) - entity.hasMaxHealth(1_800, true) -> return EntityResult(bossType = BossType.SLAYER_BLOODFIEND_3) - entity.hasMaxHealth(2_400, true) -> return EntityResult(bossType = BossType.SLAYER_BLOODFIEND_4) - entity.hasMaxHealth(3_000, true) -> return EntityResult(bossType = BossType.SLAYER_BLOODFIEND_5) - } - } - } - if (entity is EntitySlime && entity.baseMaxHealth == 1_000) { - return EntityResult(bossType = BossType.BACTE) + private fun tryAddRift(entity: EntityLivingBase): EntityResult? { + if (entity is EntityOtherPlayerMP) { + if (entity.name == "Leech Supreme") { + return EntityResult(bossType = BossType.LEECH_SUPREME) } - } else { - if (entity is EntityBlaze && entity.name != "Dinnerbone" && entity.hasNameTagWith( - 2, - "§e﴾ §8[§7Lv200§8] §l§8§lAshfang§r " - ) && entity.hasMaxHealth(50_000_000, true) - ) { - return EntityResult(bossType = BossType.NETHER_ASHFANG) - } - if (entity is EntitySkeleton && entity.hasNameTagWith(5, "§e﴾ §8[§7Lv200§8] §l§8§lBladesoul§r ")) { - return EntityResult(bossType = BossType.NETHER_BLADESOUL) - } - if (entity is EntityOtherPlayerMP) { - if (entity.name == "Mage Outlaw") { - return EntityResult(bossType = BossType.NETHER_MAGE_OUTLAW) - } - if (entity.name == "DukeBarb " && entity.getLorenzVec().distanceToPlayer() < 30) { - return EntityResult(bossType = BossType.NETHER_BARBARIAN_DUKE) - } - } - if (entity is EntityWither && entity.hasNameTagWith(4, "§8[§7Lv100§8] §c§5Vanquisher§r ")) { - return EntityResult(bossType = BossType.NETHER_VANQUISHER) - } - if (entity is EntityEnderman && entity.hasNameTagWith(3, "§c☠ §bVoidgloom Seraph ")) { + + if (entity.name == "Bloodfiend ") { when { - entity.hasMaxHealth(300_000, true) -> return EntityResult(bossType = BossType.SLAYER_ENDERMAN_1) - entity.hasMaxHealth(12_000_000, true) -> return EntityResult(bossType = BossType.SLAYER_ENDERMAN_2) - entity.hasMaxHealth(50_000_000, true) -> return EntityResult(bossType = BossType.SLAYER_ENDERMAN_3) - entity.hasMaxHealth(210_000_000, true) -> return EntityResult(bossType = BossType.SLAYER_ENDERMAN_4) + entity.hasMaxHealth(625, true) -> return EntityResult(bossType = BossType.SLAYER_BLOODFIEND_1) + entity.hasMaxHealth(1_100, true) -> return EntityResult(bossType = BossType.SLAYER_BLOODFIEND_2) + entity.hasMaxHealth(1_800, true) -> return EntityResult(bossType = BossType.SLAYER_BLOODFIEND_3) + entity.hasMaxHealth(2_400, true) -> return EntityResult(bossType = BossType.SLAYER_BLOODFIEND_4) + entity.hasMaxHealth(3_000, true) -> return EntityResult(bossType = BossType.SLAYER_BLOODFIEND_5) } } - if (entity is EntityDragon) { - //TODO testing and use sidebar data - if (IslandType.THE_END.isInIsland()) { - return EntityResult(bossType = BossType.END_ENDER_DRAGON) - } else if (IslandType.WINTER.isInIsland()) { - return EntityResult(bossType = BossType.WINTER_REINDRAKE) - } - } - if (entity is EntityIronGolem && entity.hasNameTagWith(3, "§e﴾ §8[§7Lv100§8] §lEndstone Protector§r ")) { - return EntityResult(bossType = BossType.END_ENDSTONE_PROTECTOR) - } - if (entity is EntityZombie) { - if (entity.hasNameTagWith(2, "§c☠ §bRevenant Horror")) { - when { - entity.hasMaxHealth(500, true) -> return EntityResult(bossType = BossType.SLAYER_ZOMBIE_1) - entity.hasMaxHealth(20_000, true) -> return EntityResult(bossType = BossType.SLAYER_ZOMBIE_2) - entity.hasMaxHealth(400_000, true) -> return EntityResult(bossType = BossType.SLAYER_ZOMBIE_3) - entity.hasMaxHealth(1_500_000, true) -> return EntityResult(bossType = BossType.SLAYER_ZOMBIE_4) - } - } - if (entity.hasNameTagWith(2, "§c☠ §fAtoned Horror ") && entity.hasMaxHealth(10_000_000, true)) { - return EntityResult(bossType = BossType.SLAYER_ZOMBIE_5) - } + } + if (entity is EntitySlime && entity.baseMaxHealth == 1_000) { + return EntityResult(bossType = BossType.BACTE) + } + return null + } + + private fun tryAddEntityBlaze(entity: EntityLivingBase): EntityResult? { + return if (entity.name != "Dinnerbone" && entity.hasNameTagWith( + 2, + "§e﴾ §8[§7Lv200§8] §l§8§lAshfang§r " + ) && entity.hasMaxHealth(50_000_000, true) + ) { + EntityResult(bossType = BossType.NETHER_ASHFANG) + } else if (entity.hasNameTagWith(2, "§c☠ §bInferno Demonlord ")) { + when { + entity.hasBossHealth(2_500_000) -> EntityResult(bossType = BossType.SLAYER_BLAZE_1) + entity.hasBossHealth(10_000_000) -> EntityResult(bossType = BossType.SLAYER_BLAZE_2) + entity.hasBossHealth(45_000_000) -> EntityResult(bossType = BossType.SLAYER_BLAZE_3) + entity.hasBossHealth(150_000_000) -> EntityResult(bossType = BossType.SLAYER_BLAZE_4) + else -> null } - if (entity is EntityLiving && entity.hasNameTagWith(2, "Dummy §a10M§c❤")) { - return EntityResult(bossType = BossType.DUMMY) + } else { + null + } + } + + private fun tryAddEntitySkeleton(entity: EntityLivingBase): EntityResult? { + return if (entity.hasNameTagWith(2, "§c☠ §3ⓆⓊⒶⓏⒾⒾ ")) { + when { + entity.hasBossHealth(10_000_000) -> EntityResult(bossType = BossType.SLAYER_BLAZE_QUAZII_4) + entity.hasBossHealth(5_000_000) -> EntityResult(bossType = BossType.SLAYER_BLAZE_QUAZII_3) + entity.hasBossHealth(1_750_000) -> EntityResult(bossType = BossType.SLAYER_BLAZE_QUAZII_2) + entity.hasBossHealth(500_000) -> EntityResult(bossType = BossType.SLAYER_BLAZE_QUAZII_1) + else -> null + } + } else if (entity.hasNameTagWith(5, "§e﴾ §8[§7Lv200§8] §l§8§lBladesoul§r ")) { + EntityResult(bossType = BossType.NETHER_BLADESOUL) + } else { + null + } + } + + private fun tryAddEntityOtherPlayerMP(entity: EntityLivingBase): EntityResult? { + return when { + entity.name == "Mage Outlaw" -> EntityResult(bossType = BossType.NETHER_MAGE_OUTLAW) + entity.name == "DukeBarb " && entity.getLorenzVec() + .distanceToPlayer() < 30 -> EntityResult(bossType = BossType.NETHER_BARBARIAN_DUKE) + + entity.name == "Minos Inquisitor" -> EntityResult(bossType = BossType.MINOS_INQUISITOR) + entity.name == "Minos Champion" -> EntityResult(bossType = BossType.MINOS_CHAMPION) + entity.name == "Minotaur " -> EntityResult(bossType = BossType.MINOTAUR) + else -> null + } + } + + private fun tryAddEntityWither(entity: EntityLivingBase): EntityResult? { + return when { + entity.hasNameTagWith(4, "§8[§7Lv100§8] §c§5Vanquisher§r ") -> { + EntityResult(bossType = BossType.NETHER_VANQUISHER) } - if (entity is EntityMagmaCube && entity.hasNameTagWith( - 15, - "§e﴾ §8[§7Lv500§8] §l§4§lMagma Boss§r " - ) && entity.hasMaxHealth(200_000_000, true) - ) { - return EntityResult(bossType = BossType.NETHER_MAGMA_BOSS, ignoreBlocks = true) + + else -> null + } + } + + private fun tryAddEntityEnderman(entity: EntityLivingBase): EntityResult? { + if (entity.hasNameTagWith(3, "§c☠ §bVoidgloom Seraph ")) { + when { + entity.hasMaxHealth(300_000, true) -> return EntityResult(bossType = BossType.SLAYER_ENDERMAN_1) + entity.hasMaxHealth(12_000_000, true) -> return EntityResult(bossType = BossType.SLAYER_ENDERMAN_2) + entity.hasMaxHealth(50_000_000, true) -> return EntityResult(bossType = BossType.SLAYER_ENDERMAN_3) + entity.hasMaxHealth(210_000_000, true) -> return EntityResult(bossType = BossType.SLAYER_ENDERMAN_4) } - if (entity is EntityHorse && entity.hasNameTagWith( - 15, - "§8[§7Lv100§8] §c§6Headless Horseman§r " - ) && entity.hasMaxHealth(3_000_000, true) - ) { - return EntityResult(bossType = BossType.HUB_HEADLESS_HORSEMAN) + } + return null + } + + private fun tryAddEntityDragon(entity: EntityLivingBase): EntityResult? { + //TODO testing and use sidebar data + return when { + IslandType.THE_END.isInIsland() -> EntityResult(bossType = BossType.END_ENDER_DRAGON) + IslandType.WINTER.isInIsland() -> EntityResult(bossType = BossType.WINTER_REINDRAKE) + else -> null + } + } + + private fun tryAddEntityIronGolem(entity: EntityLivingBase): EntityResult? { + return when { + entity.hasNameTagWith(3, "§e﴾ §8[§7Lv100§8] §lEndstone Protector§r ") -> { + EntityResult(bossType = BossType.END_ENDSTONE_PROTECTOR) } - if (entity is EntityBlaze && entity.hasNameTagWith(2, "§c☠ §bInferno Demonlord ")) { - when { - entity.hasBossHealth(2_500_000) -> return EntityResult(bossType = BossType.SLAYER_BLAZE_1) - entity.hasBossHealth(10_000_000) -> return EntityResult(bossType = BossType.SLAYER_BLAZE_2) - entity.hasBossHealth(45_000_000) -> return EntityResult(bossType = BossType.SLAYER_BLAZE_3) - entity.hasBossHealth(150_000_000) -> return EntityResult(bossType = BossType.SLAYER_BLAZE_4) - } + + entity.hasMaxHealth(1_500_000) -> { + EntityResult(bossType = BossType.GAIA_CONSTURUCT) } - if (entity is EntityPigZombie && entity.hasNameTagWith(2, "§c☠ §6ⓉⓎⓅⒽⓄⒺⓊⓈ ")) { - when { - entity.hasBossHealth(10_000_000) -> return EntityResult(bossType = BossType.SLAYER_BLAZE_TYPHOEUS_4) - entity.hasBossHealth(5_000_000) -> return EntityResult(bossType = BossType.SLAYER_BLAZE_TYPHOEUS_3) - entity.hasBossHealth(1_750_000) -> return EntityResult(bossType = BossType.SLAYER_BLAZE_TYPHOEUS_2) - entity.hasBossHealth(500_000) -> return EntityResult(bossType = BossType.SLAYER_BLAZE_TYPHOEUS_1) - } + + entity.hasMaxHealth(100_000_000) -> { + EntityResult(bossType = BossType.LORD_JAWBUS) } - if (entity is EntitySkeleton && entity.hasNameTagWith(2, "§c☠ §3ⓆⓊⒶⓏⒾⒾ ")) { + + else -> null + } + } + + private fun tryAddEntityZombie(entity: EntityLivingBase): EntityResult? { + return when { + entity.hasNameTagWith(2, "§c☠ §bRevenant Horror") -> { when { - entity.hasBossHealth(10_000_000) -> return EntityResult(bossType = BossType.SLAYER_BLAZE_QUAZII_4) - entity.hasBossHealth(5_000_000) -> return EntityResult(bossType = BossType.SLAYER_BLAZE_QUAZII_3) - entity.hasBossHealth(1_750_000) -> return EntityResult(bossType = BossType.SLAYER_BLAZE_QUAZII_2) - entity.hasBossHealth(500_000) -> return EntityResult(bossType = BossType.SLAYER_BLAZE_QUAZII_1) + entity.hasMaxHealth(500, true) -> return EntityResult(bossType = BossType.SLAYER_ZOMBIE_1) + entity.hasMaxHealth(20_000, true) -> return EntityResult(bossType = BossType.SLAYER_ZOMBIE_2) + entity.hasMaxHealth(400_000, true) -> return EntityResult(bossType = BossType.SLAYER_ZOMBIE_3) + entity.hasMaxHealth(1_500_000, true) -> return EntityResult(bossType = BossType.SLAYER_ZOMBIE_4) + else -> null } } - if (entity is EntitySpider) { - if (entity.hasNameTagWith(1, "§5☠ §4Tarantula Broodfather ")) { - when { - entity.hasMaxHealth(740, true) -> return EntityResult(bossType = BossType.SLAYER_SPIDER_1) - entity.hasMaxHealth(30_000, true) -> return EntityResult(bossType = BossType.SLAYER_SPIDER_2) - entity.hasMaxHealth(900_000, true) -> return EntityResult(bossType = BossType.SLAYER_SPIDER_3) - entity.hasMaxHealth(2_400_000, true) -> return EntityResult(bossType = BossType.SLAYER_SPIDER_4) - } - } - checkArachne(entity)?.let { return it } + entity.hasNameTagWith(2, "§c☠ §fAtoned Horror ") && entity.hasMaxHealth(10_000_000, true) -> { + EntityResult(bossType = BossType.SLAYER_ZOMBIE_5) } - if (entity is EntityWolf && entity.hasNameTagWith(1, "§c☠ §fSven Packmaster ")) { - when { - entity.hasMaxHealth(2_000, true) -> return EntityResult(bossType = BossType.SLAYER_WOLF_1) - entity.hasMaxHealth(40_000, true) -> return EntityResult(bossType = BossType.SLAYER_WOLF_2) - entity.hasMaxHealth(750_000, true) -> return EntityResult(bossType = BossType.SLAYER_WOLF_3) - entity.hasMaxHealth(2_000_000, true) -> return EntityResult(bossType = BossType.SLAYER_WOLF_4) - } - } - if (entity is EntityOtherPlayerMP) { - if (entity.name == "Minos Inquisitor") return EntityResult(bossType = BossType.MINOS_INQUISITOR) - if (entity.name == "Minos Champion") return EntityResult(bossType = BossType.MINOS_CHAMPION) - if (entity.name == "Minotaur ") return EntityResult(bossType = BossType.MINOTAUR) + + else -> null + } + } + + private fun tryAddEntityLiving(entity: EntityLivingBase): EntityResult? { + return when { + entity.hasNameTagWith(2, "Dummy §a10M§c❤") -> EntityResult(bossType = BossType.DUMMY) + else -> null + } + } + + private fun tryAddEntityMagmaCube(entity: EntityLivingBase): EntityResult? { + return when { + entity.hasNameTagWith(15, "§e﴾ §8[§7Lv500§8] §l§4§lMagma Boss§r ") + && entity.hasMaxHealth(200_000_000, true) -> { + EntityResult(bossType = BossType.NETHER_MAGMA_BOSS, ignoreBlocks = true) } - if (entity is EntityIronGolem && entity.hasMaxHealth(1_500_000)) { - return EntityResult(bossType = BossType.GAIA_CONSTURUCT) + + else -> null + } + } + + private fun tryAddEntityHorse(entity: EntityLivingBase): EntityResult? { + return when { + entity.hasNameTagWith( + 15, + "§8[§7Lv100§8] §c§6Headless Horseman§r " + ) && entity.hasMaxHealth(3_000_000, true) -> { + EntityResult(bossType = BossType.HUB_HEADLESS_HORSEMAN) } - if (entity is EntityGuardian && entity.hasMaxHealth(35_000_000)) { - return EntityResult(bossType = BossType.THUNDER) + + else -> null + } + } + + private fun tryAddEntityPigZombie(entity: EntityLivingBase): EntityResult? { + return if (entity.hasNameTagWith(2, "§c☠ §6ⓉⓎⓅⒽⓄⒺⓊⓈ ")) { + when { + entity.hasBossHealth(10_000_000) -> EntityResult(bossType = BossType.SLAYER_BLAZE_TYPHOEUS_4) + entity.hasBossHealth(5_000_000) -> EntityResult(bossType = BossType.SLAYER_BLAZE_TYPHOEUS_3) + entity.hasBossHealth(1_750_000) -> EntityResult(bossType = BossType.SLAYER_BLAZE_TYPHOEUS_2) + entity.hasBossHealth(500_000) -> EntityResult(bossType = BossType.SLAYER_BLAZE_TYPHOEUS_1) + else -> null } + } else null + } - if (entity is EntityIronGolem && entity.hasMaxHealth(100_000_000)) { - return EntityResult(bossType = BossType.LORD_JAWBUS) + private fun tryAddEntitySpider(entity: EntityLivingBase): EntityResult? { + if (entity.hasNameTagWith(1, "§5☠ §4Tarantula Broodfather ")) { + when { + entity.hasMaxHealth(740, true) -> return EntityResult(bossType = BossType.SLAYER_SPIDER_1) + entity.hasMaxHealth(30_000, true) -> return EntityResult(bossType = BossType.SLAYER_SPIDER_2) + entity.hasMaxHealth(900_000, true) -> return EntityResult(bossType = BossType.SLAYER_SPIDER_3) + entity.hasMaxHealth(2_400_000, true) -> return EntityResult(bossType = BossType.SLAYER_SPIDER_4) } } - + checkArachne(entity as EntitySpider)?.let { return it } return null } @@ -346,6 +437,24 @@ class MobFinder { return null } + private fun tryAddEntityWolf(entity: EntityLivingBase): EntityResult? { + return if (entity.hasNameTagWith(1, "§c☠ §fSven Packmaster ")) { + when { + entity.hasMaxHealth(2_000, true) -> EntityResult(bossType = BossType.SLAYER_WOLF_1) + entity.hasMaxHealth(40_000, true) -> EntityResult(bossType = BossType.SLAYER_WOLF_2) + entity.hasMaxHealth(750_000, true) -> EntityResult(bossType = BossType.SLAYER_WOLF_3) + entity.hasMaxHealth(2_000_000, true) -> EntityResult(bossType = BossType.SLAYER_WOLF_4) + else -> null + } + } else null + } + + private fun tryAddEntityGuardian(entity: EntityLivingBase): EntityResult? { + return if (entity.hasMaxHealth(35_000_000)) { + EntityResult(bossType = BossType.THUNDER) + } else null + } + private fun checkExtraF6GiantsDelay(entity: EntityGiantZombie): Long { val uuid = entity.uniqueID @@ -510,4 +619,15 @@ class MobFinder { } } } + + private fun calcGuardiansTotalHealth() { + var totalHealth = 0 + for (guardian in guardians) { + totalHealth += guardian.health.toInt() + } + if (totalHealth == 0) { + floor3GuardianShield = false + guardians.clear() + } + } } |