aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features/rift
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal002@users.noreply.github.com>2024-04-17 15:20:19 +0200
committerGitHub <noreply@github.com>2024-04-17 15:20:19 +0200
commit202512d5f171754613f734b649aa24644b578d06 (patch)
tree919fe8623f37da5fc5a6278053373a692c7e8fbd /src/main/java/at/hannibal2/skyhanni/features/rift
parentbbb447e8c7eb784f2276fbd82c54f03062f58fbc (diff)
downloadskyhanni-202512d5f171754613f734b649aa24644b578d06.tar.gz
skyhanni-202512d5f171754613f734b649aa24644b578d06.tar.bz2
skyhanni-202512d5f171754613f734b649aa24644b578d06.zip
Feature: Vermin Highlight (#1457)
Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com>
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/rift')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/VerminHighlighter.kt70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/VerminHighlighter.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/VerminHighlighter.kt
new file mode 100644
index 000000000..f3d2e1a39
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/VerminHighlighter.kt
@@ -0,0 +1,70 @@
+package at.hannibal2.skyhanni.features.rift.area.westvillage
+
+import at.hannibal2.skyhanni.events.ConfigLoadEvent
+import at.hannibal2.skyhanni.events.LorenzTickEvent
+import at.hannibal2.skyhanni.features.rift.RiftAPI
+import at.hannibal2.skyhanni.mixins.hooks.RenderLivingEntityHelper
+import at.hannibal2.skyhanni.utils.ColorUtils.toChromaColor
+import at.hannibal2.skyhanni.utils.ColorUtils.withAlpha
+import at.hannibal2.skyhanni.utils.ConditionalUtils
+import at.hannibal2.skyhanni.utils.EntityUtils
+import at.hannibal2.skyhanni.utils.EntityUtils.hasSkullTexture
+import at.hannibal2.skyhanni.utils.InventoryUtils
+import at.hannibal2.skyhanni.utils.LorenzUtils
+import at.hannibal2.skyhanni.utils.LorenzUtils.baseMaxHealth
+import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName
+import at.hannibal2.skyhanni.utils.TimeLimitedSet
+import net.minecraft.entity.EntityLivingBase
+import net.minecraft.entity.item.EntityArmorStand
+import net.minecraft.entity.monster.EntitySilverfish
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+import kotlin.time.Duration.Companion.minutes
+
+class VerminHighlighter {
+ private val config get() = RiftAPI.config.area.westVillage.verminHighlight
+
+ private val checkedEntites = TimeLimitedSet<Int>(1.minutes)
+
+ // TODO repo
+ private val fly =
+ "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTMwYWMxZjljNjQ5Yzk5Y2Q2MGU0YmZhNTMzNmNjMTg1MGYyNzNlYWI5ZjViMGI3OTQwZDRkNGQ3ZGM4MjVkYyJ9fX0="
+ private val spider =
+ "ewogICJ0aW1lc3RhbXAiIDogMTY1MDU1NjEzMTkxNywKICAicHJvZmlsZUlkIiA6ICI0ODI5MmJkMjI1OTc0YzUwOTZiMTZhNjEyOGFmMzY3NSIsCiAgInByb2ZpbGVOYW1lIiA6ICJLVVJPVE9ZVEIyOCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS84ZmRmNjJkNGUwM2NhNTk0YzhjZDIxZGQxNzUzMjdmMWNmNzdjNGJjMDU3YTA5NTk2MDNkODNhNjhiYTI3MDA4IgogICAgfQogIH0KfQ=="
+
+ @SubscribeEvent
+ fun onTick(event: LorenzTickEvent) {
+ if (!isEnabled()) return
+
+ for (entity in EntityUtils.getEntities<EntityLivingBase>()) {
+ val id = entity.entityId
+ if (checkedEntites.contains(id)) continue
+ checkedEntites.add(id)
+
+ if (!isVermin(entity)) continue
+ val color = config.color.get().toChromaColor().withAlpha(60)
+ RenderLivingEntityHelper.setEntityColorWithNoHurtTime(entity, color) { isEnabled() }
+ }
+ }
+
+ @SubscribeEvent
+ fun onConfigLoad(event: ConfigLoadEvent) {
+ ConditionalUtils.onToggle(config.color) {
+ // running setEntityColorWithNoHurtTime() again
+ checkedEntites.clear()
+ }
+ }
+
+ private fun isVermin(entity: EntityLivingBase): Boolean = when (entity) {
+ is EntityArmorStand -> entity.hasSkullTexture(fly) || entity.hasSkullTexture(spider)
+ is EntitySilverfish -> entity.baseMaxHealth == 8
+
+ else -> false
+ }
+
+ private fun inArea() = LorenzUtils.skyBlockArea.let { it == "West Village" || it == "Infested House" }
+
+ private fun hasItemInHand() = InventoryUtils.itemInHandId == "TURBOMAX_VACUUM".asInternalName()
+
+ fun isEnabled() = RiftAPI.inRift() && inArea() && config.enabled && hasItemInHand()
+
+}