aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornea <nea@nea.moe>2023-08-01 19:25:46 +0200
committernea <nea@nea.moe>2023-08-01 19:30:55 +0200
commit240d518f447676bc1a897dc9e2fac1f6b01fe625 (patch)
treef833a7ad748883b98348700044723146a42b4ae2
parent0cc5ce9df33037a5913f634993bae2fadae1ecdd (diff)
downloadSkyHanni-240d518f447676bc1a897dc9e2fac1f6b01fe625.tar.gz
SkyHanni-240d518f447676bc1a897dc9e2fac1f6b01fe625.tar.bz2
SkyHanni-240d518f447676bc1a897dc9e2fac1f6b01fe625.zip
Performance improvements for the damage indicator
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/damageindicator/DamageIndicatorManager.kt20
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/EntityUtils.kt1
2 files changed, 12 insertions, 9 deletions
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 d46bae435..883d69c42 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/damageindicator/DamageIndicatorManager.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/damageindicator/DamageIndicatorManager.kt
@@ -297,15 +297,18 @@ class DamageIndicatorManager {
@SubscribeEvent
fun onTick(event: LorenzTickEvent) {
- if (!LorenzUtils.inSkyBlock) return
- for (entity in EntityUtils.getEntities<EntityLivingBase>()) {
- checkEntity(entity)
+ if (!isEnabled()) return
+ data = data.editCopy {
+ EntityUtils.getEntitiesSequence<EntityLivingBase>().mapNotNull(::checkEntity)
+ .forEach { (uuid, entityData) ->
+ this[uuid] = entityData
+ }
}
}
- private fun checkEntity(entity: EntityLivingBase) {
+ private fun checkEntity(entity: EntityLivingBase): Pair<UUID, EntityData>? {
try {
- val entityData = grabData(entity) ?: return
+ val entityData = grabData(entity) ?: return null
if (LorenzUtils.inDungeons) {
checkFinalBoss(entityData.finalDungeonBoss, entity.entityId)
}
@@ -331,7 +334,7 @@ class DamageIndicatorManager {
}
"§cDead"
} else {
- getCustomHealth(entityData, health, entity, maxHealth) ?: return
+ getCustomHealth(entityData, health, entity, maxHealth) ?: return null
}
if (data.containsKey(entity.uniqueID)) {
@@ -350,11 +353,10 @@ class DamageIndicatorManager {
entityData.healthText = color.getChatColor() + NumberUtil.format(health)
}
entityData.timeLastTick = System.currentTimeMillis()
- data = data.editCopy { this[entity.uniqueID] = entityData }
-
-
+ return entity.uniqueID to entityData
} catch (e: Throwable) {
e.printStackTrace()
+ return null
}
}
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/EntityUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/EntityUtils.kt
index 9bfb9e1bb..24f838cfc 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/EntityUtils.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/EntityUtils.kt
@@ -157,6 +157,7 @@ object EntityUtils {
fun EntityEnderman.getBlockInHand(): IBlockState? = heldBlockState
inline fun <reified R : Entity> getEntities(): List<R> = getAllEntities().filterIsInstance<R>()
+ inline fun <reified R : Entity> getEntitiesSequence(): Sequence<R> = Minecraft.getMinecraft()?.theWorld?.loadedEntityList?.asSequence()?.filterIsInstance<R>() ?: emptySequence()
inline fun <reified R : Entity> getEntitiesOrNull(): List<R>? = getAllEntitiesOrNull()?.filterIsInstance<R>()