diff options
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features')
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 |