summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorEmpa <42304516+ItsEmpa@users.noreply.github.com>2024-10-13 12:08:11 +0200
committerGitHub <noreply@github.com>2024-10-13 12:08:11 +0200
commit486231d369a8e2e8cf54f079d6105dac99dec6aa (patch)
tree04ab0da51d3dc3090a6fc57262548a42fcf71211 /src/main/java
parent37a06d12289f76ee01903454bf47d4a2b9538934 (diff)
downloadskyhanni-486231d369a8e2e8cf54f079d6105dac99dec6aa.tar.gz
skyhanni-486231d369a8e2e8cf54f079d6105dac99dec6aa.tar.bz2
skyhanni-486231d369a8e2e8cf54f079d6105dac99dec6aa.zip
Improvement + Fix: Ashfang Features with Mob Detection (#2112)
Co-authored-by: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Co-authored-by: ItsEmpa <itsempa@users.noreply.github.com>
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/data/EntityData.kt56
-rw-r--r--src/main/java/at/hannibal2/skyhanni/data/mob/Mob.kt4
-rw-r--r--src/main/java/at/hannibal2/skyhanni/data/mob/MobData.kt5
-rw-r--r--src/main/java/at/hannibal2/skyhanni/data/mob/MobDetection.kt16
-rw-r--r--src/main/java/at/hannibal2/skyhanni/events/MobEvent.kt2
-rw-r--r--src/main/java/at/hannibal2/skyhanni/events/entity/EntityLeaveWorldEvent.kt6
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangBlazes.kt124
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangBlazingSouls.kt71
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangFreezeCooldown.kt45
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangGravityOrbs.kt75
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangHideDamageIndicator.kt34
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangHideParticles.kt60
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangHider.kt46
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangHighlights.kt106
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangManager.kt93
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangNextResetCooldown.kt53
-rw-r--r--src/main/java/at/hannibal2/skyhanni/mixins/transformers/MixinWorld.java25
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/ColorUtils.kt7
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/ExtendedChatColor.kt2
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt9
20 files changed, 355 insertions, 484 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/data/EntityData.kt b/src/main/java/at/hannibal2/skyhanni/data/EntityData.kt
index d2f81a6d8..04147ce77 100644
--- a/src/main/java/at/hannibal2/skyhanni/data/EntityData.kt
+++ b/src/main/java/at/hannibal2/skyhanni/data/EntityData.kt
@@ -5,9 +5,9 @@ import at.hannibal2.skyhanni.events.EntityHealthUpdateEvent
import at.hannibal2.skyhanni.events.EntityMaxHealthUpdateEvent
import at.hannibal2.skyhanni.events.LorenzTickEvent
import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent
-import at.hannibal2.skyhanni.events.SecondPassedEvent
import at.hannibal2.skyhanni.events.entity.EntityDisplayNameEvent
import at.hannibal2.skyhanni.events.entity.EntityHealthDisplayEvent
+import at.hannibal2.skyhanni.events.entity.EntityLeaveWorldEvent
import at.hannibal2.skyhanni.events.minecraft.packet.PacketReceivedEvent
import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule
import at.hannibal2.skyhanni.utils.EntityUtils
@@ -31,27 +31,35 @@ import kotlin.time.Duration.Companion.milliseconds
@SkyHanniModule
object EntityData {
- private val maxHealthMap = mutableMapOf<EntityLivingBase, Int>()
+ private val maxHealthMap = mutableMapOf<Int, Int>()
private val nametagCache = TimeLimitedCache<Entity, ChatComponentText>(50.milliseconds)
private val healthDisplayCache = TimeLimitedCache<String, String>(50.milliseconds)
+ private val ignoredEntities = setOf(
+ EntityArmorStand::class.java,
+ EntityXPOrb::class.java,
+ EntityItem::class.java,
+ EntityItemFrame::class.java,
+ EntityOtherPlayerMP::class.java,
+ EntityPlayerSP::class.java,
+ )
+
@SubscribeEvent
fun onTick(event: LorenzTickEvent) {
- for (entity in EntityUtils.getEntities<EntityLivingBase>()) {
+ for (entity in EntityUtils.getEntities<EntityLivingBase>()) { // this completely ignores the ignored entities list?
val maxHealth = entity.baseMaxHealth
- val oldMaxHealth = maxHealthMap.getOrDefault(entity, -1)
+ val id = entity.entityId
+ val oldMaxHealth = maxHealthMap.getOrDefault(id, -1)
if (oldMaxHealth != maxHealth) {
- maxHealthMap[entity] = maxHealth
+ maxHealthMap[id] = maxHealth
EntityMaxHealthUpdateEvent(entity, maxHealth.derpy()).postAndCatch()
}
}
}
- @SubscribeEvent
- fun onSecondPassed(event: SecondPassedEvent) {
- if (event.repeatSeconds(30)) {
- maxHealthMap.keys.removeIf { it.isDead }
- }
+ @HandleEvent
+ fun onEntityLeaveWorld(event: EntityLeaveWorldEvent<EntityLivingBase>) {
+ maxHealthMap -= event.entity.entityId
}
@SubscribeEvent
@@ -69,26 +77,11 @@ object EntityData {
val entityId = packet.entityId
val entity = EntityUtils.getEntityByID(entityId) ?: return
- if (entity is EntityArmorStand) return
- if (entity is EntityXPOrb) return
- if (entity is EntityItem) return
- if (entity is EntityItemFrame) return
-
- if (entity is EntityOtherPlayerMP) return
- if (entity is EntityPlayerSP) return
-
- for (watchableObject in watchableObjects) {
-
- val dataValueId = watchableObject.dataValueId
- val any = watchableObject.`object`
- if (dataValueId != 6) continue
-
- val health = (any as Float).toInt()
-
- if (entity is EntityWither && health == 300 && entityId < 0) {
- return
- }
+ if (entity.javaClass in ignoredEntities) return
+ watchableObjects.find { it.dataValueId == 6 }?.let {
+ val health = (it.`object` as Float).toInt()
+ if (entity is EntityWither && health == 300 && entityId < 0) return
if (entity is EntityLivingBase) {
EntityHealthUpdateEvent(entity, health.derpy()).postAndCatch()
}
@@ -100,6 +93,11 @@ object EntityData {
return postRenderNametag(entity, oldValue)
}
+ @JvmStatic
+ fun despawnEntity(entity: Entity) {
+ EntityLeaveWorldEvent(entity).post()
+ }
+
private fun postRenderNametag(entity: Entity, chatComponent: ChatComponentText) = nametagCache.getOrPut(entity) {
val event = EntityDisplayNameEvent(entity, chatComponent)
event.postAndCatch()
diff --git a/src/main/java/at/hannibal2/skyhanni/data/mob/Mob.kt b/src/main/java/at/hannibal2/skyhanni/data/mob/Mob.kt
index e9eb6729d..062acc4b3 100644
--- a/src/main/java/at/hannibal2/skyhanni/data/mob/Mob.kt
+++ b/src/main/java/at/hannibal2/skyhanni/data/mob/Mob.kt
@@ -8,6 +8,7 @@ import at.hannibal2.skyhanni.utils.CollectionUtils.toSingletonListOrEmpty
import at.hannibal2.skyhanni.utils.ColorUtils.addAlpha
import at.hannibal2.skyhanni.utils.EntityUtils.canBeSeen
import at.hannibal2.skyhanni.utils.EntityUtils.cleanName
+import at.hannibal2.skyhanni.utils.EntityUtils.getArmorInventory
import at.hannibal2.skyhanni.utils.EntityUtils.isCorrupted
import at.hannibal2.skyhanni.utils.EntityUtils.isRunic
import at.hannibal2.skyhanni.utils.LocationUtils.distanceToPlayer
@@ -17,6 +18,7 @@ import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher
import net.minecraft.entity.EntityLivingBase
import net.minecraft.entity.item.EntityArmorStand
import net.minecraft.entity.monster.EntityZombie
+import net.minecraft.entity.player.EntityPlayer
import net.minecraft.util.AxisAlignedBB
import java.awt.Color
import java.util.UUID
@@ -111,7 +113,7 @@ class Mob(
fun canBeSeen() = baseEntity.canBeSeen()
- fun isInvisible() = if (baseEntity !is EntityZombie) baseEntity.isInvisible else false
+ fun isInvisible() = baseEntity !is EntityZombie && baseEntity.isInvisible && baseEntity.inventory.isNullOrEmpty()
private var highlightColor: Color? = null
diff --git a/src/main/java/at/hannibal2/skyhanni/data/mob/MobData.kt b/src/main/java/at/hannibal2/skyhanni/data/mob/MobData.kt
index f955384c5..2363945d2 100644
--- a/src/main/java/at/hannibal2/skyhanni/data/mob/MobData.kt
+++ b/src/main/java/at/hannibal2/skyhanni/data/mob/MobData.kt
@@ -104,11 +104,6 @@ object MobData {
}
@SubscribeEvent
- fun onMobFirstSeen(event: MobEvent.FirstSeen) {
- notSeenMobs.remove(event.mob)
- }
-
- @SubscribeEvent
fun onSkyblockMobSpawnEvent(event: MobEvent.Spawn.SkyblockMob) {
skyblockMobs.add(event.mob)
}
diff --git a/src/main/java/at/hannibal2/skyhanni/data/mob/MobDetection.kt b/src/main/java/at/hannibal2/skyhanni/data/mob/MobDetection.kt
index 014e0a846..b075ab312 100644
--- a/src/main/java/at/hannibal2/skyhanni/data/mob/MobDetection.kt
+++ b/src/main/java/at/hannibal2/skyhanni/data/mob/MobDetection.kt
@@ -159,13 +159,15 @@ object MobDetection {
private fun canBeSeen(mob: Mob): Boolean {
val isVisible = !mob.isInvisible() && mob.canBeSeen()
- if (isVisible) when (mob.mobType) {
- Mob.Type.PLAYER -> MobEvent.FirstSeen.Player(mob)
- Mob.Type.SUMMON -> MobEvent.FirstSeen.Summon(mob)
- Mob.Type.SPECIAL -> MobEvent.FirstSeen.Special(mob)
- Mob.Type.PROJECTILE -> MobEvent.FirstSeen.Projectile(mob)
- Mob.Type.DISPLAY_NPC -> MobEvent.FirstSeen.DisplayNPC(mob)
- Mob.Type.BASIC, Mob.Type.DUNGEON, Mob.Type.BOSS, Mob.Type.SLAYER -> MobEvent.FirstSeen.SkyblockMob(mob)
+ if (isVisible) {
+ when (mob.mobType) {
+ Mob.Type.PLAYER -> MobEvent.FirstSeen.Player(mob)
+ Mob.Type.SUMMON -> MobEvent.FirstSeen.Summon(mob)
+ Mob.Type.SPECIAL -> MobEvent.FirstSeen.Special(mob)
+ Mob.Type.PROJECTILE -> MobEvent.FirstSeen.Projectile(mob)
+ Mob.Type.DISPLAY_NPC -> MobEvent.FirstSeen.DisplayNPC(mob)
+ Mob.Type.BASIC, Mob.Type.DUNGEON, Mob.Type.BOSS, Mob.Type.SLAYER -> MobEvent.FirstSeen.SkyblockMob(mob)
+ }.postAndCatch()
}
return isVisible
}
diff --git a/src/main/java/at/hannibal2/skyhanni/events/MobEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/MobEvent.kt
index 10172cb5f..07990ff22 100644
--- a/src/main/java/at/hannibal2/skyhanni/events/MobEvent.kt
+++ b/src/main/java/at/hannibal2/skyhanni/events/MobEvent.kt
@@ -21,8 +21,6 @@ open class MobEvent(val mob: Mob) : LorenzEvent() {
class Projectile(mob: Mob) : DeSpawn(mob)
}
- // TODO replace with "isFirstTime" parameter in the Spawn event. Also create an actual "player sees the mob for the first time" event
- @Deprecated("Old. Will get replaced soon.")
open class FirstSeen(mob: Mob) : MobEvent(mob) {
class SkyblockMob(mob: Mob) : FirstSeen(mob)
class Summon(mob: Mob) : FirstSeen(mob)
diff --git a/src/main/java/at/hannibal2/skyhanni/events/entity/EntityLeaveWorldEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/entity/EntityLeaveWorldEvent.kt
new file mode 100644
index 000000000..74d885e11
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/events/entity/EntityLeaveWorldEvent.kt
@@ -0,0 +1,6 @@
+package at.hannibal2.skyhanni.events.entity
+
+import at.hannibal2.skyhanni.api.event.GenericSkyHanniEvent
+import net.minecraft.entity.Entity
+
+class EntityLeaveWorldEvent<T : Entity>(val entity: T) : GenericSkyHanniEvent<T>(entity.javaClass)
diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangBlazes.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangBlazes.kt
deleted file mode 100644
index 9c152e143..000000000
--- a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangBlazes.kt
+++ /dev/null
@@ -1,124 +0,0 @@
-package at.hannibal2.skyhanni.features.nether.ashfang
-
-import at.hannibal2.skyhanni.SkyHanniMod
-import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator
-import at.hannibal2.skyhanni.data.IslandType
-import at.hannibal2.skyhanni.events.EntityHealthUpdateEvent
-import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent
-import at.hannibal2.skyhanni.events.SecondPassedEvent
-import at.hannibal2.skyhanni.events.SkyHanniRenderEntityEvent
-import at.hannibal2.skyhanni.features.combat.damageindicator.BossType
-import at.hannibal2.skyhanni.features.combat.damageindicator.DamageIndicatorManager
-import at.hannibal2.skyhanni.mixins.hooks.RenderLivingEntityHelper
-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
-import at.hannibal2.skyhanni.utils.EntityUtils.getAllNameTagsWith
-import at.hannibal2.skyhanni.utils.LorenzColor
-import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland
-import net.minecraft.entity.EntityLivingBase
-import net.minecraft.entity.item.EntityArmorStand
-import net.minecraft.entity.monster.EntityBlaze
-import net.minecraftforge.fml.common.eventhandler.EventPriority
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-
-@SkyHanniModule
-object AshfangBlazes {
-
- private val config get() = SkyHanniMod.feature.crimsonIsle.ashfang
-
- private val blazeColor = mutableMapOf<EntityBlaze, LorenzColor>()
- private var blazeArmorStand = mapOf<EntityBlaze, EntityArmorStand>()
-
- private var nearAshfang = false
-
- @SubscribeEvent
- fun onSecondPassed(event: SecondPassedEvent) {
- if (!isEnabled()) return
-
- checkNearAshfang()
-
- if (nearAshfang) {
- for (entity in EntityUtils.getEntities<EntityBlaze>()
- .filter { it !in blazeColor.keys }) {
- val list = entity.getAllNameTagsWith(2, "Ashfang")
- if (list.size == 1) {
- val armorStand = list[0]
- val color = when {
- armorStand.name.contains("Ashfang Follower") -> LorenzColor.DARK_GRAY
- armorStand.name.contains("Ashfang Underling") -> LorenzColor.RED
- armorStand.name.contains("Ashfang Acolyte") -> LorenzColor.BLUE
- else -> {
- blazeArmorStand = blazeArmorStand.editCopy {
- remove(entity)
- }
- continue
- }
- }
- blazeArmorStand = blazeArmorStand.editCopy {
- this[entity] = armorStand
- }
- entity setBlazeColor color
- }
- }
- }
- }
-
- @SubscribeEvent
- fun onEntityHealthUpdate(event: EntityHealthUpdateEvent) {
- if (!isEnabled()) return
-
- val entityId = event.entity.entityId
- if (entityId !in blazeArmorStand.keys.map { it.entityId }) return
-
- if (event.health % 10_000_000 != 0) {
- blazeArmorStand = blazeArmorStand.editCopy {
- keys.removeIf { it.entityId == entityId }
- }
- }
- }
-
- private fun checkNearAshfang() {
- nearAshfang = EntityUtils.getEntities<EntityArmorStand>().any { it.name.contains("Ashfang") }
- }
-
- @SubscribeEvent(priority = EventPriority.HIGH)
- fun onRenderLiving(event: SkyHanniRenderEntityEvent.Specials.Pre<EntityLivingBase>) {
- if (!isEnabled()) return
- if (!config.hide.fullNames) return
-
- val entity = event.entity
- if (entity !is EntityArmorStand) return
- if (!entity.hasCustomName()) return
- if (entity.isDead) return
- if (entity in blazeArmorStand.values) {
- event.cancel()
- }
- }
-
- @SubscribeEvent
- fun onWorldChange(event: LorenzWorldChangeEvent) {
- blazeColor.clear()
- blazeArmorStand = emptyMap()
- }
-
- @SubscribeEvent
- fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) {
- event.move(2, "ashfang.nextResetCooldown", "crimsonIsle.ashfang.nextResetCooldown")
- event.move(2, "ashfang.highlightBlazes", "crimsonIsle.ashfang.highlightBlazes")
- event.move(2, "ashfang.hideNames", "crimsonIsle.ashfang.hide.fullNames")
- }
-
- private fun isEnabled(): Boolean {
- return IslandType.CRIMSON_ISLE.isInIsland() && DamageIndicatorManager.isBossSpawned(BossType.NETHER_ASHFANG)
- }
-
- private infix fun EntityBlaze.setBlazeColor(color: LorenzColor) {
- blazeColor[this] = color
- RenderLivingEntityHelper.setEntityColorWithNoHurtTime(
- this,
- color.toColor().withAlpha(40),
- ) { isEnabled() && config.highlightBlazes }
- }
-}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangBlazingSouls.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangBlazingSouls.kt
deleted file mode 100644
index de4db8f83..000000000
--- a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangBlazingSouls.kt
+++ /dev/null
@@ -1,71 +0,0 @@
-package at.hannibal2.skyhanni.features.nether.ashfang
-
-import at.hannibal2.skyhanni.SkyHanniMod
-import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator
-import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent
-import at.hannibal2.skyhanni.events.LorenzTickEvent
-import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent
-import at.hannibal2.skyhanni.features.combat.damageindicator.BossType
-import at.hannibal2.skyhanni.features.combat.damageindicator.DamageIndicatorManager
-import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule
-import at.hannibal2.skyhanni.utils.ColorUtils.toChromaColor
-import at.hannibal2.skyhanni.utils.EntityUtils
-import at.hannibal2.skyhanni.utils.EntityUtils.hasSkullTexture
-import at.hannibal2.skyhanni.utils.LocationUtils
-import at.hannibal2.skyhanni.utils.LorenzUtils
-import at.hannibal2.skyhanni.utils.RenderUtils.drawString
-import at.hannibal2.skyhanni.utils.RenderUtils.drawWaypointFilled
-import at.hannibal2.skyhanni.utils.getLorenzVec
-import net.minecraft.entity.item.EntityArmorStand
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-
-@SkyHanniModule
-object AshfangBlazingSouls {
-
- private val config get() = SkyHanniMod.feature.crimsonIsle.ashfang.blazingSouls
-
- private const val TEXTURE =
- "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODI4N2IzOTdkYWY5NTE2YTBiZDc2ZjVmMWI3YmY5Nzk1MTVkZjNkNWQ4MzNlMDYzNWZhNjhiMzdlZTA4MjIxMiJ9fX0="
- private val souls = mutableListOf<EntityArmorStand>()
-
- @SubscribeEvent
- fun onTick(event: LorenzTickEvent) {
- if (!isEnabled()) return
-
- EntityUtils.getEntities<EntityArmorStand>()
- .filter { it !in souls && it.hasSkullTexture(TEXTURE) }
- .forEach { souls.add(it) }
- }
-
- @SubscribeEvent
- fun onRenderWorld(event: LorenzRenderWorldEvent) {
- if (!isEnabled()) return
-
- val color = config.color.toChromaColor()
-
- val playerLocation = LocationUtils.playerLocation()
- for (orb in souls) {
- if (orb.isDead) continue
- val orbLocation = orb.getLorenzVec()
- event.drawWaypointFilled(orbLocation.add(-0.5, 1.25, -0.5), color, extraSize = -0.15)
- if (orbLocation.distance(playerLocation) < 10) {
- // TODO find way to dynamically change color
- event.drawString(orbLocation.up(2.5), "§bBlazing Soul")
- }
- }
- }
-
- @SubscribeEvent
- fun onWorldChange(event: LorenzWorldChangeEvent) {
- souls.clear()
- }
-
- @SubscribeEvent
- fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) {
- event.move(2, "ashfang.blazingSouls", "crimsonIsle.ashfang.blazingSouls.enabled")
- event.move(2, "ashfang.blazingSoulsColor", "crimsonIsle.ashfang.blazingSouls.color")
- }
-
- private fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled &&
- DamageIndicatorManager.isBossSpawned(BossType.NETHER_ASHFANG)
-}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangFreezeCooldown.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangFreezeCooldown.kt
index 68684ef49..07cf723fa 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangFreezeCooldown.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangFreezeCooldown.kt
@@ -1,14 +1,10 @@
package at.hannibal2.skyhanni.features.nether.ashfang
-import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator
import at.hannibal2.skyhanni.events.GuiRenderEvent
import at.hannibal2.skyhanni.events.LorenzChatEvent
-import at.hannibal2.skyhanni.features.combat.damageindicator.BossType
-import at.hannibal2.skyhanni.features.combat.damageindicator.DamageIndicatorManager
import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule
-import at.hannibal2.skyhanni.utils.LorenzUtils
-import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher
+import at.hannibal2.skyhanni.utils.RegexUtils.matches
import at.hannibal2.skyhanni.utils.RenderUtils.renderString
import at.hannibal2.skyhanni.utils.SimpleTimeMark
import at.hannibal2.skyhanni.utils.TimeUtils.format
@@ -19,47 +15,35 @@ import kotlin.time.Duration.Companion.seconds
@SkyHanniModule
object AshfangFreezeCooldown {
- private val config get() = SkyHanniMod.feature.crimsonIsle.ashfang
+ private val config get() = AshfangManager.config
private val cryogenicBlastPattern by RepoPattern.pattern(
"ashfang.freeze.cryogenic",
- "§cAshfang Follower's Cryogenic Blast hit you for .* damage!"
+ "§cAshfang Follower's Cryogenic Blast hit you for .* damage!",
)
- private var lastHit = SimpleTimeMark.farPast()
+ private var unfrozenTime = SimpleTimeMark.farPast()
+ private val duration = 3.seconds
@SubscribeEvent
fun onChat(event: LorenzChatEvent) {
if (!isEnabled()) return
-
- val message = event.message
- cryogenicBlastPattern.matchMatcher(message) {
- lastHit = SimpleTimeMark.now()
- }
+ if (cryogenicBlastPattern.matches(event.message)) unfrozenTime = SimpleTimeMark.now() + duration
}
@SubscribeEvent
fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) {
if (!isEnabled()) return
+ if (!isCurrentlyFrozen()) return
- val passedSince = lastHit.passedSince()
- val maxDuration = 3.seconds
- val duration = maxDuration - passedSince
- if (duration > 0.seconds) {
- val format = duration.format(showMilliSeconds = true)
- config.freezeCooldownPos.renderString(
- "§cAshfang Freeze: §a$format",
- posLabel = "Ashfang Freeze Cooldown"
- )
- }
+ val format = unfrozenTime.timeUntil().format(showMilliSeconds = true)
+ config.freezeCooldownPos.renderString(
+ "§cAshfang Freeze: §a$format",
+ posLabel = "Ashfang Freeze Cooldown",
+ )
}
- fun isCurrentlyFrozen(): Boolean {
- val passedSince = lastHit.passedSince()
- val maxDuration = 3.seconds
- val duration = maxDuration - passedSince
- return duration > 0.seconds
- }
+ fun isCurrentlyFrozen() = unfrozenTime.isInFuture()
@SubscribeEvent
fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) {
@@ -67,6 +51,5 @@ object AshfangFreezeCooldown {
event.move(2, "ashfang.freezeCooldownPos", "crimsonIsle.ashfang.freezeCooldownPos")
}
- private fun isEnabled() = LorenzUtils.inSkyBlock && config.freezeCooldown &&
- DamageIndicatorManager.isBossSpawned(BossType.NETHER_ASHFANG)
+ private fun isEnabled() = AshfangManager.active && config.freezeCooldown
}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangGravityOrbs.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangGravityOrbs.kt
deleted file mode 100644
index 1eaa1dd5e..000000000
--- a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangGravityOrbs.kt
+++ /dev/null
@@ -1,75 +0,0 @@
-package at.hannibal2.skyhanni.features.nether.ashfang
-
-import at.hannibal2.skyhanni.SkyHanniMod
-import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator
-import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent
-import at.hannibal2.skyhanni.events.LorenzTickEvent
-import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent
-import at.hannibal2.skyhanni.features.combat.damageindicator.BossType
-import at.hannibal2.skyhanni.features.combat.damageindicator.DamageIndicatorManager
-import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule
-import at.hannibal2.skyhanni.utils.EntityUtils
-import at.hannibal2.skyhanni.utils.EntityUtils.hasSkullTexture
-import at.hannibal2.skyhanni.utils.LocationUtils
-import at.hannibal2.skyhanni.utils.LorenzUtils
-import at.hannibal2.skyhanni.utils.RenderUtils
-import at.hannibal2.skyhanni.utils.RenderUtils.drawString
-import at.hannibal2.skyhanni.utils.SpecialColor
-import at.hannibal2.skyhanni.utils.getLorenzVec
-import net.minecraft.entity.item.EntityArmorStand
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-import java.awt.Color
-
-@SkyHanniModule
-object AshfangGravityOrbs {
-
- private val config get() = SkyHanniMod.feature.crimsonIsle.ashfang.gravityOrbs
-
- private const val TEXTURE = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV" +
- "0L3RleHR1cmUvMWE2OWNjZjdhZDkwNGM5YTg1MmVhMmZmM2Y1YjRlMjNhZGViZjcyZWQxMmQ1ZjI0Yjc4Y2UyZDQ0YjRhMiJ9fX0="
- private val orbs = mutableListOf<EntityArmorStand>()
-
- @SubscribeEvent
- fun onTick(event: LorenzTickEvent) {
- if (!isEnabled()) return
-
- EntityUtils.getEntities<EntityArmorStand>()
- .filter { it !in orbs && it.hasSkullTexture(TEXTURE) }
- .forEach { orbs.add(it) }
- }
-
- @SubscribeEvent
- fun onRenderWorld(event: LorenzRenderWorldEvent) {
- if (!isEnabled()) return
-
- val color = Color(SpecialColor.specialToChromaRGB(config.color), true)
- val playerLocation = LocationUtils.playerLocation()
- for (orb in orbs) {
- if (orb.isDead) continue
- val orbLocation = orb.getLorenzVec()
- val center = orbLocation.add(-0.5, -2.0, -0.5)
- RenderUtils.drawCylinderInWorld(color, center.x, center.y, center.z, 3.5f, 4.5f, event.partialTicks)
-
- if (orbLocation.distance(playerLocation) < 15) {
- // TODO find way to dynamically change color
- event.drawString(orbLocation.up(2.5), "§cGravity Orb")
- }
- }
- }
-
- @SubscribeEvent
- fun onWorldChange(event: LorenzWorldChangeEvent) {
- orbs.clear()
- }
-
- @SubscribeEvent
- fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) {
- event.move(1, "ashfang.gravityOrbs", "ashfang.gravityOrbs.enabled")
- event.move(1, "ashfang.gravityOrbsColor", "ashfang.gravityOrbs.color")
-
- event.move(2, "ashfang.gravityOrbs", "crimsonIsle.ashfang.gravityOrbs")
- }
-
- private fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled &&
- DamageIndicatorManager.isBossSpawned(BossType.NETHER_ASHFANG)
-}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangHideDamageIndicator.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangHideDamageIndicator.kt
deleted file mode 100644
index 606f7d17f..000000000
--- a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangHideDamageIndicator.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-package at.hannibal2.skyhanni.features.nether.ashfang
-
-import at.hannibal2.skyhanni.SkyHanniMod
-import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator
-import at.hannibal2.skyhanni.events.SkyHanniRenderEntityEvent
-import at.hannibal2.skyhanni.features.combat.damageindicator.BossType
-import at.hannibal2.skyhanni.features.combat.damageindicator.DamageIndicatorManager
-import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule
-import at.hannibal2.skyhanni.utils.LorenzUtils
-import net.minecraft.entity.EntityLivingBase
-import net.minecraftforge.fml.common.eventhandler.EventPriority
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-
-@SkyHanniModule
-object AshfangHideDamageIndicator {
-
- @SubscribeEvent(priority = EventPriority.HIGH)
- fun onRenderLiving(event: SkyHanniRenderEntityEvent.Specials.Pre<EntityLivingBase>) {
- if (!isEnabled()) return
-
- if (DamageIndicatorManager.isDamageSplash(event.entity)) {
- event.cancel()
- }
- }
-
- @SubscribeEvent
- fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) {
- event.move(2, "ashfang.hideDamageSplash", "crimsonIsle.ashfang.hide.damageSplash")
- }
-
- private fun isEnabled() =
- LorenzUtils.inSkyBlock && SkyHanniMod.feature.crimsonIsle.ashfang.hide.damageSplash &&
- DamageIndicatorManager.isBossSpawned(BossType.NETHER_ASHFANG)
-}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangHideParticles.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangHideParticles.kt
deleted file mode 100644
index 4c228a436..000000000
--- a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangHideParticles.kt
+++ /dev/null
@@ -1,60 +0,0 @@
-package at.hannibal2.skyhanni.features.nether.ashfang
-
-import at.hannibal2.skyhanni.SkyHanniMod
-import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator
-import at.hannibal2.skyhanni.events.CheckRenderEntityEvent
-import at.hannibal2.skyhanni.events.ReceiveParticleEvent
-import at.hannibal2.skyhanni.events.SecondPassedEvent
-import at.hannibal2.skyhanni.features.combat.damageindicator.BossType
-import at.hannibal2.skyhanni.features.combat.damageindicator.DamageIndicatorManager
-import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule
-import at.hannibal2.skyhanni.utils.ItemUtils.name
-import at.hannibal2.skyhanni.utils.LorenzUtils
-import net.minecraft.entity.item.EntityArmorStand
-import net.minecraftforge.fml.common.eventhandler.EventPriority
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-
-@SkyHanniModule
-object AshfangHideParticles {
-
- private var nearAshfang = false
-
- @SubscribeEvent
- fun onSecondPassed(event: SecondPassedEvent) {
- if (!LorenzUtils.inSkyBlock) return
-
- nearAshfang = DamageIndicatorManager.getDistanceTo(BossType.NETHER_ASHFANG) < 40
- }
-
- @SubscribeEvent
- fun onReceiveParticle(event: ReceiveParticleEvent) {
- if (isEnabled()) {
- event.cancel()
- }
- }
-
- @SubscribeEvent(priority = EventPriority.HIGH)
- fun onCheckRender(event: CheckRenderEntityEvent<*>) {
- if (!isEnabled()) return
-
- val entity = event.entity
- if (entity is EntityArmorStand) {
- for (stack in entity.inventory) {
- if (stack == null) continue
- val name = stack.name
- if (name == "§aFairy Souls") continue
- if (name == "Glowstone") {
- event.cancel()
- }
- }
- }
- }
-
- @SubscribeEvent
- fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) {
- event.move(2