So recently I've been trying to make it so mobs don't attack specific players. For some reason my code works on almost all mobs but not Spiders and Slimes. Would anyone have an idea as to why this isn't working the way I need it to?
package darkevilmac.karma.effect
import java.util.ArrayList
import cpw.mods.fml.common.eventhandler.SubscribeEvent
import cpw.mods.fml.relauncher.Side
import darkevilmac.karma.tools.KarmaUtils
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.entity.{EntityCreature, EntityLiving}
import net.minecraftforge.event.entity.living.LivingSetAttackTargetEvent
/**
* Created by Darkevilmac on 6/25/2014.
*/
class MobIgnoreEffect extends KarmaEffect {
var playersToCheck: ArrayList[string] = new ArrayList[string]()
def init(player: String, side: Side) {
if (!playersToCheck.contains(player)) {
playersToCheck.add(player)
}
}
def onUpdate(player: EntityPlayer, side: Side) {
}
def finish(player: String, side: Side) {
var i: Int = 0
while (i < playersToCheck.size()) {
if (playersToCheck.get(i) == player) {
playersToCheck.remove(i)
return
}
i = i + 1;
}
}
def shouldContinue(player: EntityPlayer, side: Side): Boolean = {
return KarmaUtils.getPlayerKarma(player) >= 950
}
def canApply(player: EntityPlayer): Boolean = {
return KarmaUtils.getPlayerKarma(player) >= 950
}
@SubscribeEvent
def onLivingSetAttackTarget(e: LivingSetAttackTargetEvent) {
if (!e.entity.worldObj.isRemote && e.target.isInstanceOf[EntityPlayer]) {
val player: EntityPlayer = e.target.asInstanceOf[EntityPlayer]
if (playersToCheck.contains(player.getCommandSenderName)) {
e.entityLiving.setRevengeTarget(null)
if (e.entityLiving.isInstanceOf[EntityLiving]) {
e.entityLiving.asInstanceOf[EntityLiving].setAttackTarget(null)
if (e.entityLiving.isInstanceOf[EntityCreature]) {
e.entityLiving.asInstanceOf[EntityCreature].setTarget(null)
}
}
}
}
}
}