diff options
author | hannibal2 <24389977+hannibal002@users.noreply.github.com> | 2024-04-17 15:20:19 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-17 15:20:19 +0200 |
commit | 202512d5f171754613f734b649aa24644b578d06 (patch) | |
tree | 919fe8623f37da5fc5a6278053373a692c7e8fbd /src/main/java/at/hannibal2/skyhanni/features/rift | |
parent | bbb447e8c7eb784f2276fbd82c54f03062f58fbc (diff) | |
download | skyhanni-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.kt | 70 |
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() + +} |