package at.hannibal2.skyhanni.features.slayer.enderman import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator import at.hannibal2.skyhanni.data.IslandType import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.ReceiveParticleEvent import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.EntityUtils import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.getLorenzVec import net.minecraft.entity.monster.EntityEnderman import net.minecraft.util.EnumParticleTypes import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @SkyHanniModule object EndermanSlayerHideParticles { private var endermanLocations = listOf() @SubscribeEvent fun onTick(event: LorenzTickEvent) { if (!isEnabled()) return endermanLocations = EntityUtils.getEntities().map { it.getLorenzVec() }.toList() } @SubscribeEvent fun onReceiveParticle(event: ReceiveParticleEvent) { if (!isEnabled()) return when (event.type) { EnumParticleTypes.SMOKE_LARGE, EnumParticleTypes.FLAME, EnumParticleTypes.SPELL_WITCH, -> { } else -> return } val distance = event.location.distanceToNearestEnderman() ?: return if (distance < 9) { event.cancel() } } private fun LorenzVec.distanceToNearestEnderman() = endermanLocations.minOfOrNull { it.distanceSq(this) } fun isEnabled() = IslandType.THE_END.isInIsland() && SkyHanniMod.feature.slayer.endermen.hideParticles @SubscribeEvent fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { event.move(3, "slayer.endermanHideParticles", "slayer.endermen.hideParticles") } }