package mage.abilities.keyword; import mage.abilities.Ability; import mage.abilities.EvasionAbility; import mage.abilities.MageSingleton; import mage.abilities.effects.RestrictionEffect; import mage.constants.CardType; import mage.constants.Duration; import mage.game.Game; import mage.game.permanent.Permanent; /** * 702.13. Intimidate # * * 702.13a Intimidate is an evasion ability. * * 702.13b A creature with intimidate can't be blocked except by artifact creatures * and/or creatures that share a color with it. (See rule 509, "Declare Blockers Step.") # * * 702.13c Multiple instances of intimidate on the same creature are redundant. * * * */ public class IntimidateAbility extends EvasionAbility implements MageSingleton { private static final IntimidateAbility instance = new IntimidateAbility(); public static IntimidateAbility getInstance() { return instance; } private IntimidateAbility() { this.addEffect(new IntimidateEffect()); } @Override public String getRule() { return "Intimidate"; } @Override public IntimidateAbility copy() { return instance; } } class IntimidateEffect extends RestrictionEffect implements MageSingleton { public IntimidateEffect() { super(Duration.EndOfGame); } public IntimidateEffect(final IntimidateEffect effect) { super(effect); } @Override public boolean applies(Permanent permanent, Ability source, Game game) { return permanent.getAbilities().containsKey(IntimidateAbility.getInstance().getId()); } @Override public boolean canBeBlocked(Permanent attacker, Permanent blocker, Ability source, Game game) { boolean result = false; if (blocker.isArtifact() && (blocker.isCreature())) { result = true; } if (attacker.getColor(game).shares(blocker.getColor(game))) { result = true; } return result; } @Override public IntimidateEffect copy() { return new IntimidateEffect(this); } }