aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/SummoningMobManager.kt184
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/SummoningSoulsName.kt2
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/chat/NewChatFilter.kt18
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/damageindicator/DamageIndicatorManager.kt31
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/damageindicator/MobFinder.kt2
5 files changed, 196 insertions, 41 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/SummoningMobManager.kt b/src/main/java/at/hannibal2/skyhanni/features/SummoningMobManager.kt
new file mode 100644
index 000000000..5dca40d1b
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/SummoningMobManager.kt
@@ -0,0 +1,184 @@
+package at.hannibal2.skyhanni.features
+
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.events.LorenzChatEvent
+import at.hannibal2.skyhanni.utils.LocationUtils
+import at.hannibal2.skyhanni.utils.LorenzUtils
+import at.hannibal2.skyhanni.utils.LorenzUtils.baseMaxHealth
+import at.hannibal2.skyhanni.utils.NumberUtil
+import at.hannibal2.skyhanni.utils.RenderUtils.renderStrings
+import at.hannibal2.skyhanni.utils.getLorenzVec
+import net.minecraft.client.Minecraft
+import net.minecraft.entity.EntityLiving
+import net.minecraft.entity.EntityLivingBase
+import net.minecraft.entity.item.EntityArmorStand
+import net.minecraftforge.client.event.RenderGameOverlayEvent
+import net.minecraftforge.client.event.RenderLivingEvent
+import net.minecraftforge.event.world.WorldEvent
+import net.minecraftforge.fml.common.eventhandler.EventPriority
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+import net.minecraftforge.fml.common.gameevent.TickEvent
+import java.util.regex.Pattern
+
+class SummoningMobManager {
+
+ private val summoningMobs = mutableMapOf<EntityLiving, SummoningMob>()
+ private val summoningMobNametags = mutableListOf<EntityArmorStand>()
+ private var summoningsSpawned = 0
+ private var searchArmorStands = false
+ private var searchMobs = false
+
+ //§aYou have spawned your Tank Zombie §r§asoul! §r§d(249 Mana)
+ private val spawnPatter = Pattern.compile("§aYou have spawned your (.+) §r§asoul! §r§d\\((\\d+) Mana\\)")
+ private val despawnPatter = Pattern.compile("§cYou have despawned your (monster|monsters)!")
+
+ //§a§ohannibal2's Tank Zombie§r §a160k§c❤
+ private val healthPattern = Pattern.compile("§a§o(.+)'s (.+)§r §[ae]([\\dkm]+)§c❤")
+
+ @SubscribeEvent
+ fun onChatMessage(event: LorenzChatEvent) {
+ if (!LorenzUtils.isOnHypixel) return
+
+ val message = event.message
+ val matcher = spawnPatter.matcher(message)
+ if (matcher.matches()) {
+ if (SkyHanniMod.feature.abilities.summoningMobDisplay) {
+ event.blockedReason = "summoning_soul"
+ }
+ summoningsSpawned++
+ searchArmorStands = true
+ searchMobs = true
+ }
+
+ if (despawnPatter.matcher(message).matches() || message.startsWith("§c ☠ §r§7You ")) {
+ despawned()
+ if (SkyHanniMod.feature.abilities.summoningMobDisplay && !message.contains("☠")) {
+ event.blockedReason = "summoning_soul"
+ }
+ }
+ }
+
+ var tick = 0
+
+ @SubscribeEvent
+ fun onTick(event: TickEvent.ClientTickEvent) {
+ if (!isEnabled()) return
+
+ if (SkyHanniMod.feature.abilities.summoningMobDisplay) {
+ if (tick++ % 20 == 0) {
+ updateData()
+ }
+ }
+
+ if (searchArmorStands) {
+ Minecraft.getMinecraft().theWorld.loadedEntityList
+ .filter { it is EntityArmorStand && it !in summoningMobNametags }
+ .forEach {
+ val name = it.displayName.unformattedText
+ val matcher = healthPattern.matcher(name)
+ if (matcher.matches()) {
+ val playerName = Minecraft.getMinecraft().thePlayer.name
+ if (name.contains(playerName)) {
+ summoningMobNametags.add(it as EntityArmorStand)
+ if (summoningMobNametags.size == summoningsSpawned) {
+ searchArmorStands = false
+ }
+ }
+ }
+ }
+ }
+ if (searchMobs) {
+
+ val playerLocation = LocationUtils.playerLocation()
+ Minecraft.getMinecraft().theWorld.loadedEntityList
+ .filter {
+ it is EntityLiving && it !in summoningMobs.keys && it.getLorenzVec().distance(playerLocation) < 3
+ }
+ .forEach {
+ summoningMobs[it as EntityLiving] = SummoningMob(System.currentTimeMillis(), name = "Mob")
+ updateData()
+ if (summoningMobs.size == summoningsSpawned) {
+ searchMobs = false
+ }
+ }
+ }
+ }
+
+ private fun updateData() {
+ if (summoningMobs.isEmpty()) return
+
+ for (entry in HashMap(summoningMobs)) {
+ val entityLiving = entry.key
+ val summoningMob = entry.value
+
+ val currentHealth = entityLiving.health.toInt()
+ val name = summoningMob.name
+ if (currentHealth == 0) {
+ summoningMobs.remove(entityLiving)
+ LorenzUtils.chat("§e[SkyHanni] your Summoning Mob just §cdied!")
+ continue
+ }
+
+ val maxHealth = entityLiving.baseMaxHealth.toInt()
+ val color = NumberUtil.percentageColor(currentHealth, maxHealth).getChatColor()
+
+ val currentFormat = NumberUtil.format(currentHealth)
+ val maxFormat = NumberUtil.format(maxHealth)
+ summoningMob.lastDisplayName = "§a$name $color$currentFormat/$maxFormat"
+ }
+ }
+
+ @SubscribeEvent
+ fun renderOverlay(event: RenderGameOverlayEvent.Post) {
+ if (!SkyHanniMod.feature.abilities.summoningMobDisplay) return
+ if (summoningMobs.isEmpty()) return
+
+ val list = mutableListOf<String>()
+ list.add("Summoning mobs: " + summoningMobs.size)
+ var id = 1
+ for (mob in summoningMobs) {
+ val name = mob.value.lastDisplayName
+ list.add("#$id $name")
+ id++
+ }
+
+ SkyHanniMod.feature.abilities.summoningMobDisplayPos.renderStrings(list)
+ }
+
+ @SubscribeEvent
+ fun renderOverlay(event: WorldEvent.Load) {
+ despawned()
+ }
+
+ @SubscribeEvent(priority = EventPriority.HIGH)
+ fun onRenderLiving(event: RenderLivingEvent.Specials.Pre<EntityLivingBase>) {
+ if (!LorenzUtils.inSkyblock) return
+ if (!SkyHanniMod.feature.abilities.summoningMobHideNametag) return
+
+ val entity = event.entity
+ if (entity !is EntityArmorStand) return
+ if (!entity.hasCustomName()) return
+ if (entity.isDead) return
+
+ event.isCanceled = entity in summoningMobNametags
+ }
+
+ private fun despawned() {
+ summoningMobs.clear()
+ summoningMobNametags.clear()
+ summoningsSpawned = 0
+ searchArmorStands = false
+ searchMobs = false
+ println("despawning")
+ }
+
+ private fun isEnabled(): Boolean {
+ return LorenzUtils.inSkyblock && (SkyHanniMod.feature.abilities.summoningMobDisplay || SkyHanniMod.feature.abilities.summoningMobHideNametag)
+ }
+
+ class SummoningMob(
+ val spawnTime: Long,
+ var name: String = "",
+ var lastDisplayName: String = "",
+ )
+} \ No newline at end of file
diff --git a/src/main/java/at/hannibal2/skyhanni/features/SummoningSoulsName.kt b/src/main/java/at/hannibal2/skyhanni/features/SummoningSoulsName.kt
index 1f0144620..1a659f171 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/SummoningSoulsName.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/SummoningSoulsName.kt
@@ -2,12 +2,12 @@ package at.hannibal2.skyhanni.features
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.test.GriffinJavaUtils
+import at.hannibal2.skyhanni.utils.EntityUtils.getNameTagWith
import at.hannibal2.skyhanni.utils.ItemUtils.getSkullTexture
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.LorenzVec
import at.hannibal2.skyhanni.utils.RenderUtils.drawString
import at.hannibal2.skyhanni.utils.getLorenzVec
-import at.hannibal2.skyhanni.utils.getNameTagWith
import net.minecraft.client.Minecraft
import net.minecraft.entity.EntityLiving
import net.minecraft.entity.item.EntityArmorStand
diff --git a/src/main/java/at/hannibal2/skyhanni/features/chat/NewChatFilter.kt b/src/main/java/at/hannibal2/skyhanni/features/chat/NewChatFilter.kt
deleted file mode 100644
index bf73917aa..000000000
--- a/src/main/java/at/hannibal2/skyhanni/features/chat/NewChatFilter.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-package at.hannibal2.skyhanni.features.chat
-
-import at.hannibal2.skyhanni.events.LorenzChatEvent
-import at.hannibal2.skyhanni.utils.LorenzUtils
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-
-class NewChatFilter {
-
- @SubscribeEvent
- fun onChatMessage(event: LorenzChatEvent) {
- if (!LorenzUtils.isOnHypixel) return
-
-// val blockReason = block(event.message)
-// if (blockReason != "") {
-// event.blockedReason = blockReason
-// }
- }
-} \ No newline at end of file
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 047b4c7ed..0004d9e97 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/damageindicator/DamageIndicatorManager.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/damageindicator/DamageIndicatorManager.kt
@@ -7,6 +7,8 @@ import at.hannibal2.skyhanni.events.LorenzChatEvent
import at.hannibal2.skyhanni.features.dungeon.DungeonData
import at.hannibal2.skyhanni.test.LorenzTest
import at.hannibal2.skyhanni.utils.*
+import at.hannibal2.skyhanni.utils.EntityUtils.getNameTagWith
+import at.hannibal2.skyhanni.utils.EntityUtils.hasNameTagWith
import at.hannibal2.skyhanni.utils.LorenzUtils.baseMaxHealth
import at.hannibal2.skyhanni.utils.LorenzUtils.between
import at.hannibal2.skyhanni.utils.StringUtils.removeColor
@@ -239,7 +241,7 @@ class DamageIndicatorManager {
if (customHealthText.isNotEmpty()) {
entityData.healthText = customHealthText
} else {
- val color = percentageColor(health, maxHealth)
+ val color = NumberUtil.percentageColor(health, maxHealth)
entityData.healthText = color.getChatColor() + NumberUtil.format(health)
}
entityData.timeLastTick = System.currentTimeMillis()
@@ -316,7 +318,7 @@ class DamageIndicatorManager {
18 -> "§e4/6"
16 -> "§e5/6"
else -> {
- val color = percentageColor(health, 10_000_000)
+ val color = NumberUtil.percentageColor(health, 10_000_000)
entityData.namePrefix = "§a6/6"
return color.getChatColor() + NumberUtil.format(health)
}
@@ -352,7 +354,7 @@ class DamageIndicatorManager {
}
if (calcHealth == -1) return null
- val color = percentageColor(calcHealth, maxHealth)
+ val color = NumberUtil.percentageColor(calcHealth, maxHealth)
return color.getChatColor() + NumberUtil.format(calcHealth)
}
@@ -408,7 +410,8 @@ class DamageIndicatorManager {
}
else -> return null
}
- val result = percentageColor(calcHealth, calcMaxHealth).getChatColor() + NumberUtil.format(calcHealth)
+ val result =
+ NumberUtil.percentageColor(calcHealth, calcMaxHealth).getChatColor() + NumberUtil.format(calcHealth)
//Hit phase
@@ -423,7 +426,7 @@ class DamageIndicatorManager {
}
val name = armorStandHits.name.removeColor()
val hits = name.between("Seraph ", " Hit").toInt()
- return percentageColor(hits, maxHits).getChatColor() + "$hits Hits"
+ return NumberUtil.percentageColor(hits, maxHits).getChatColor() + "$hits Hits"
}
//Laser phase
@@ -436,7 +439,7 @@ class DamageIndicatorManager {
if (SkyHanniMod.feature.damageIndicator.showHealthDuringLaser) {
entityData.nameSuffix = " §f" + formatDelay(remainingTicks * 50)
} else {
- return formatDelay(remainingTicks * 50)
+ return formatDelay(remainingTicks * 50)
}
}
@@ -486,7 +489,7 @@ class DamageIndicatorManager {
LorenzUtils.error("Invalid thorn floor!")
return null
}
- val color = percentageColor(health, maxHealth)
+ val color = NumberUtil.percentageColor(health, maxHealth)
return color.getChatColor() + health + "/" + maxHealth
}
@@ -508,20 +511,6 @@ class DamageIndicatorManager {
}
}
- private fun percentageColor(
- have: Int,
- max: Int,
- ): LorenzColor {
- val percentage = have.toDouble() / max.toDouble()
- return when {
- percentage > 0.9 -> LorenzColor.DARK_GREEN
- percentage > 0.75 -> LorenzColor.GREEN
- percentage > 0.5 -> LorenzColor.YELLOW
- percentage > 0.25 -> LorenzColor.GOLD
- else -> LorenzColor.RED
- }
- }
-
private fun grabData(entity: EntityLivingBase): EntityData? {
if (data.contains(entity.uniqueID)) return data[entity.uniqueID]
diff --git a/src/main/java/at/hannibal2/skyhanni/features/damageindicator/MobFinder.kt b/src/main/java/at/hannibal2/skyhanni/features/damageindicator/MobFinder.kt
index 636fff106..537a9850f 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/damageindicator/MobFinder.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/damageindicator/MobFinder.kt
@@ -1,12 +1,12 @@
package at.hannibal2.skyhanni.features.damageindicator
import at.hannibal2.skyhanni.features.dungeon.DungeonData
+import at.hannibal2.skyhanni.utils.EntityUtils.hasNameTagWith
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.LorenzUtils.baseMaxHealth
import at.hannibal2.skyhanni.utils.LorenzUtils.matchRegex
import at.hannibal2.skyhanni.utils.LorenzVec
import at.hannibal2.skyhanni.utils.getLorenzVec
-import at.hannibal2.skyhanni.utils.hasNameTagWith
import net.minecraft.client.Minecraft
import net.minecraft.client.entity.EntityOtherPlayerMP
import net.minecraft.entity.Entity