summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features
diff options
context:
space:
mode:
authorBrandon <brandon.wamboldt@gmail.com>2023-09-07 08:03:26 -0300
committerGitHub <noreply@github.com>2023-09-07 13:03:26 +0200
commit6be7873d9475686fdc404212cebd45f22edbff87 (patch)
tree2de35d9806c73e1ca361cbac704f84c09e844540 /src/main/java/at/hannibal2/skyhanni/features
parent5d2f4ea1989b1a3077a26fa7f9fd2935daf9d1bb (diff)
downloadskyhanni-6be7873d9475686fdc404212cebd45f22edbff87.tar.gz
skyhanni-6be7873d9475686fdc404212cebd45f22edbff87.tar.bz2
skyhanni-6be7873d9475686fdc404212cebd45f22edbff87.zip
Add highlight and outline feature for rare sea creatures (#439)
Add highlight and outline feature for rare sea creatures #439
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/fishing/SeaCreatureFeatures.kt100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/SeaCreatureFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/SeaCreatureFeatures.kt
new file mode 100644
index 000000000..9f7ef0fa5
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/SeaCreatureFeatures.kt
@@ -0,0 +1,100 @@
+package at.hannibal2.skyhanni.features.fishing
+
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.events.EntityMaxHealthUpdateEvent
+import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent
+import at.hannibal2.skyhanni.events.RenderEntityOutlineEvent
+import at.hannibal2.skyhanni.events.withAlpha
+import at.hannibal2.skyhanni.features.damageindicator.DamageIndicatorManager
+import at.hannibal2.skyhanni.mixins.hooks.RenderLivingEntityHelper
+import at.hannibal2.skyhanni.utils.*
+import at.hannibal2.skyhanni.utils.EntityUtils.getSkinTexture
+import at.hannibal2.skyhanni.utils.EntityUtils.hasMaxHealth
+import at.hannibal2.skyhanni.utils.LocationUtils.distanceToPlayer
+import at.hannibal2.skyhanni.utils.LorenzUtils.baseMaxHealth
+import at.hannibal2.skyhanni.utils.LorenzUtils.editCopy
+import net.minecraft.client.Minecraft
+import net.minecraft.client.entity.EntityOtherPlayerMP
+import net.minecraft.client.gui.FontRenderer
+import net.minecraft.entity.Entity
+import net.minecraft.entity.EntityLivingBase
+import net.minecraft.entity.item.EntityItem
+import net.minecraft.entity.monster.EntityGuardian
+import net.minecraft.entity.monster.EntitySkeleton
+import net.minecraft.entity.monster.EntityZombie
+import net.minecraft.entity.player.EntityPlayer
+import net.minecraft.scoreboard.ScorePlayerTeam
+import net.minecraft.scoreboard.Team.EnumVisible
+import net.minecraftforge.client.event.RenderWorldLastEvent
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+import java.awt.Color
+
+
+class SeaCreatureFeatures {
+ private val config get() = SkyHanniMod.feature.fishing
+ private var rareSeaCreatures = listOf<EntityLivingBase>()
+
+ @SubscribeEvent
+ fun onEntityHealthUpdate(event: EntityMaxHealthUpdateEvent) {
+ if (!isEnabled()) return
+ val entity = event.entity as? EntityLivingBase ?: return
+ if (DamageIndicatorManager.isBoss(entity)) return
+
+ val maxHealth = event.maxHealth
+ for (creatureType in RareSeaCreatureType.entries) {
+ if (EntityGuardian::class.java.isInstance(entity) && entity.baseMaxHealth > 1000) {
+ LorenzUtils.consoleLog("FISHING CREATURE NAME: ${entity.baseMaxHealth} ${(entity as EntityGuardian).customNameTag}")
+ }
+
+ if (!creatureType.health.any { entity.hasMaxHealth(it, false, maxHealth) }) continue
+ if (!creatureType.clazz.isInstance(entity)) continue
+
+ if (EntityPlayer::class.java.isInstance(entity)) {
+ LorenzUtils.consoleLog("FISHING CREATURE NAME: ${(entity as EntityPlayer).customNameTag}")
+ }
+
+ if (creatureType.nametag.isNotBlank() && EntityPlayer::class.java.isInstance(entity) && (entity as EntityPlayer).name != creatureType.nametag) {
+ continue
+ }
+
+ rareSeaCreatures = rareSeaCreatures.editCopy { add(entity) }
+ RenderLivingEntityHelper.setEntityColor(entity, LorenzColor.RED.toColor().withAlpha(50))
+ { config.rareSeaCreatureHighlight }
+ RenderLivingEntityHelper.setNoHurtTime(entity) { config.rareSeaCreatureHighlight }
+ }
+ }
+
+ @SubscribeEvent
+ fun onWorldChange(event: LorenzWorldChangeEvent) {
+ rareSeaCreatures = emptyList()
+ }
+
+ @SubscribeEvent
+ fun onRenderEntityOutlines(event: RenderEntityOutlineEvent) {
+ if (isEnabled() && config.rareSeaCreatureHighlight && event.type === RenderEntityOutlineEvent.Type.XRAY) {
+ event.queueEntitiesToOutline(getEntityOutlineColor)
+ }
+ }
+
+ private fun isEnabled() = LorenzUtils.inSkyBlock && !LorenzUtils.inDungeons && !LorenzUtils.inKuudraFight
+
+ private val getEntityOutlineColor: (entity: Entity) -> Int? = { e ->
+ if (EntityLivingBase::class.java.isInstance(e) && e in rareSeaCreatures && e.distanceToPlayer() < 30) {
+ LorenzColor.GREEN.toColor().rgb
+ } else {
+ null
+ }
+ }
+
+ enum class RareSeaCreatureType(val clazz: Class<out EntityLivingBase>, val nametag: String, vararg val health: Int) {
+ WATER_HYDRA(EntityZombie::class.java, "Water Hydra", 500_000, 1_500_000),
+ SEA_EMPEROR(EntityGuardian::class.java, "The Sea Emperors", 750_000, 800_000, 2_250_000, 2_400_000),
+ ZOMBIE_MINER(EntityPlayer::class.java, "", 2_000_000, 6_000_000),
+ PHANTOM_FISHERMAN(EntityPlayer::class.java, "Phantom Fisher", 1_000_000, 3_000_000),
+ GRIM_REAPER(EntityPlayer::class.java, "Grim Reaper", 3_000_000, 9_000_000),
+ YETI(EntityPlayer::class.java, "", 2_000_000, 6_000_000),
+ NUTCRACKER(EntityPlayer::class.java, "", 4_000_000, 12_000_000),
+ GREAT_WHITE_SHARK(EntityPlayer::class.java, "GWS ", 1_500_000, 4_500_000),
+ ;
+ }
+}