Renamed some combat effects for name consistency.

This commit is contained in:
LevelX2 2013-09-17 15:55:21 +02:00
parent e2017762ba
commit 3a048cb828
80 changed files with 324 additions and 187 deletions

View file

@ -31,7 +31,7 @@ import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.combat.MustBlockSourceTargetEffect;
import mage.abilities.effects.common.combat.MustBeBlockedByTargetSourceEffect;
import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
@ -60,7 +60,7 @@ public class GiantAmbushBeetle extends CardImpl<GiantAmbushBeetle> {
this.addAbility(HasteAbility.getInstance());
// When Giant Ambush Beetle enters the battlefield, you may have target creature block it this turn if able.
Ability ability = new EntersBattlefieldTriggeredAbility(new MustBlockSourceTargetEffect(Duration.EndOfTurn), true);
Ability ability = new EntersBattlefieldTriggeredAbility(new MustBeBlockedByTargetSourceEffect(Duration.EndOfTurn), true);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}

View file

@ -33,7 +33,7 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CanBlockOnlyFlyingEffect;
import mage.abilities.effects.common.combat.CanBlockOnlyFlyingEffect;
import mage.abilities.keyword.ReachAbility;
import mage.cards.CardImpl;

View file

@ -33,7 +33,7 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CantBeBlockedByCreaturesWithLessPowerEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesWithLessPowerEffect;
import mage.abilities.keyword.UndyingAbility;
import mage.cards.CardImpl;

View file

@ -31,7 +31,7 @@ import mage.constants.CardType;
import mage.constants.Rarity;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CanBlockOnlyFlyingEffect;
import mage.abilities.effects.common.combat.CanBlockOnlyFlyingEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.constants.Zone;

View file

@ -33,7 +33,7 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CantBeBlockedByCreaturesWithLessPowerEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesWithLessPowerEffect;
import mage.cards.CardImpl;
/**

View file

@ -37,7 +37,7 @@ import mage.constants.Zone;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.combat.MustBlockAttachedEffect;
import mage.abilities.effects.common.combat.MustBeBlockedByAllAttachedEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardImpl;
import mage.target.TargetPermanent;
@ -63,7 +63,7 @@ public class Lure extends CardImpl<Lure> {
this.addAbility(ability);
// All creatures able to block enchanted creature do so.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MustBlockAttachedEffect(AttachmentType.AURA)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MustBeBlockedByAllAttachedEffect(AttachmentType.AURA)));
}
public Lure (final Lure card) {

View file

@ -36,7 +36,7 @@ import mage.abilities.Ability;
import mage.abilities.common.DealsCombatDamageToACreatureTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.combat.MustBlockSourceTargetEffect;
import mage.abilities.effects.common.combat.MustBeBlockedByTargetSourceEffect;
import mage.abilities.effects.common.SkipNextUntapTargetEffect;
import mage.abilities.effects.common.TapTargetEffect;
import mage.cards.CardImpl;
@ -59,7 +59,7 @@ public class MatsuTribeDecoy extends CardImpl<MatsuTribeDecoy> {
this.toughness = new MageInt(3);
// {2}{G}: Target creature blocks Matsu-Tribe Decoy this turn if able.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MustBlockSourceTargetEffect(), new ManaCostsImpl("{2}{G}"));
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MustBeBlockedByTargetSourceEffect(), new ManaCostsImpl("{2}{G}"));
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
// Whenever Kashi-Tribe Reaver deals combat damage to a creature, tap that creature and it doesn't untap during its controller's next untap step.

View file

@ -33,7 +33,7 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneEffect;
import mage.abilities.keyword.SoulshiftAbility;
import mage.cards.CardImpl;

View file

@ -32,7 +32,7 @@ import java.util.UUID;
import mage.constants.*;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.combat.MustBlockSourceEffect;
import mage.abilities.effects.common.combat.MustBeBlockedByAllSourceEffect;
import mage.abilities.effects.common.continious.GainAbilityTargetEffect;
import mage.abilities.keyword.DeathtouchAbility;
import mage.abilities.keyword.FlashbackAbility;
@ -52,7 +52,7 @@ public class DeadlyAllure extends CardImpl<DeadlyAllure> {
this.color.setBlack(true);
// Target creature gains deathtouch until end of turn and must be blocked this turn if able.
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(new SimpleStaticAbility(Zone.BATTLEFIELD, new MustBlockSourceEffect()), Duration.EndOfTurn));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(new SimpleStaticAbility(Zone.BATTLEFIELD, new MustBeBlockedByAllSourceEffect()), Duration.EndOfTurn));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(DeathtouchAbility.getInstance(), Duration.EndOfTurn));
this.getSpellAbility().addTarget(new TargetCreaturePermanent());

View file

@ -37,7 +37,7 @@ import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.TwoOrMoreSpellsWereCastLastTurnCondition;
import mage.abilities.decorator.ConditionalTriggeredAbility;
import mage.abilities.effects.common.combat.MustBlockSourceEffect;
import mage.abilities.effects.common.combat.MustBeBlockedByAllSourceEffect;
import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.keyword.TransformAbility;
import mage.cards.CardImpl;
@ -63,7 +63,7 @@ public class HinterlandScourge extends CardImpl<HinterlandScourge> {
this.toughness = new MageInt(2);
// Hinterland Scourge must be blocked if able.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MustBlockSourceEffect()));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MustBeBlockedByAllSourceEffect()));
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Hinterland Scourge.
TriggeredAbility ability = new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect(false), TargetController.ANY, false);

View file

@ -35,7 +35,7 @@ import mage.abilities.Ability;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneEffect;
import mage.abilities.keyword.UndyingAbility;
import mage.cards.CardImpl;
import mage.filter.common.FilterCreaturePermanent;

View file

@ -33,7 +33,7 @@ import mage.constants.CardType;
import mage.constants.Rarity;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CanBlockOnlyFlyingEffect;
import mage.abilities.effects.common.combat.CanBlockOnlyFlyingEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.UndyingAbility;
import mage.cards.CardImpl;

View file

@ -35,7 +35,7 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.combat.MustBlockSourceEffect;
import mage.abilities.effects.common.combat.MustBeBlockedByAllSourceEffect;
import mage.abilities.effects.common.continious.BoostTargetEffect;
import mage.abilities.effects.common.continious.GainAbilityTargetEffect;
import mage.abilities.keyword.DoubleStrikeAbility;
@ -68,7 +68,7 @@ public class ArmedDangerous extends SplitCard<ArmedDangerous> {
// All creatures able to block target creature this turn do so.
getRightHalfCard().getColor().setGreen(true);
Effect effect = new GainAbilityTargetEffect(
new SimpleStaticAbility(Zone.BATTLEFIELD, new MustBlockSourceEffect(Duration.EndOfCombat)), Duration.EndOfTurn,
new SimpleStaticAbility(Zone.BATTLEFIELD, new MustBeBlockedByAllSourceEffect(Duration.EndOfCombat)), Duration.EndOfTurn,
"All creatures able to block target creature this turn do so");
getRightHalfCard().getSpellAbility().addEffect(effect);
getRightHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent(true));

View file

@ -36,7 +36,7 @@ import mage.constants.Zone;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.BoostAllEffect;
import mage.abilities.effects.common.continious.CantBeBlockedByOneAllEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneAllEffect;
import mage.cards.CardImpl;
import mage.constants.TargetController;
import mage.filter.common.FilterCreaturePermanent;

View file

@ -36,7 +36,7 @@ import mage.abilities.decorator.ConditionalContinousEffect;
import mage.abilities.decorator.ConditionalRequirementEffect;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.combat.MustBlockAttachedEffect;
import mage.abilities.effects.common.combat.MustBeBlockedByAllAttachedEffect;
import mage.abilities.effects.common.continious.BoostEnchantedEffect;
import mage.abilities.effects.common.continious.GainAbilityAttachedEffect;
import mage.abilities.keyword.DeathtouchAbility;
@ -76,11 +76,10 @@ public class GiftOfTheDeity extends CardImpl<GiftOfTheDeity> {
blackAbility.addEffect(new ConditionalContinousEffect(new GainAbilityAttachedEffect(DeathtouchAbility.getInstance(), AttachmentType.AURA), new EnchantedCreatureColorCondition(ObjectColor.BLACK), "and has deathtouch"));
this.addAbility(blackAbility);
// As long as enchanted creature is green, it gets +1/+1 and all creatures able to block it do so.
SimpleStaticAbility greenAbility = new SimpleStaticAbility(Zone.BATTLEFIELD,
new ConditionalContinousEffect(new BoostEnchantedEffect(1, 1),
new EnchantedCreatureColorCondition(ObjectColor.GREEN),
"As long as enchanted creature is green, it gets +1/+1"));
Effect effect = new ConditionalRequirementEffect(new MustBlockAttachedEffect(AttachmentType.AURA), new EnchantedCreatureColorCondition(ObjectColor.GREEN));
SimpleStaticAbility greenAbility;
greenAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinousEffect(new BoostEnchantedEffect(1, 1), new EnchantedCreatureColorCondition(ObjectColor.GREEN),
"As long as enchanted creature is green, it gets +1/+1"));
Effect effect = new ConditionalRequirementEffect(new MustBeBlockedByAllAttachedEffect(AttachmentType.AURA), new EnchantedCreatureColorCondition(ObjectColor.GREEN));
effect.setText("and all creatures able to block it do so");
greenAbility.addEffect(effect);
this.addAbility(greenAbility);

View file

@ -33,7 +33,7 @@ import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CantBeBlockedByOneAllEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneAllEffect;
import mage.cards.CardImpl;
import mage.constants.TargetController;
import mage.filter.common.FilterCreaturePermanent;

View file

@ -36,7 +36,7 @@ import mage.MageInt;
import mage.abilities.common.BlocksTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.BoostSourceEffect;
import mage.abilities.effects.common.continious.CanBlockAdditionalCreatureEffect;
import mage.abilities.effects.common.combat.CanBlockAdditionalCreatureEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;

View file

@ -37,7 +37,7 @@ import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.continious.BoostEnchantedEffect;
import mage.abilities.effects.common.continious.CantBeBlockedByOneAttachedEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneAttachedEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardImpl;
import mage.constants.Outcome;

View file

@ -33,7 +33,7 @@ import mage.constants.CardType;
import mage.constants.Rarity;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneEffect;
import mage.cards.CardImpl;
import mage.constants.Zone;

View file

@ -33,7 +33,7 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CantBeBlockedByCreaturesWithLessPowerEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesWithLessPowerEffect;
import mage.abilities.keyword.BloodthirstAbility;
import mage.cards.CardImpl;

View file

@ -35,7 +35,7 @@ import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneEffect;
import mage.cards.CardImpl;
import mage.game.Game;

View file

@ -33,7 +33,7 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CantBeBlockedByCreaturesWithLessPowerEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesWithLessPowerEffect;
import mage.abilities.keyword.BloodthirstAbility;
import mage.cards.CardImpl;

View file

@ -36,7 +36,7 @@ import mage.constants.Zone;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.continious.CantBeBlockedByOneAttachedEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneAttachedEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardImpl;
import mage.target.TargetPermanent;

View file

@ -33,7 +33,7 @@ import mage.constants.CardType;
import mage.constants.Rarity;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.constants.Zone;

View file

@ -39,7 +39,7 @@ import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.TwoOrMoreSpellsWereCastLastTurnCondition;
import mage.abilities.decorator.ConditionalTriggeredAbility;
import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.effects.common.continious.CantBeBlockedByOneAllEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneAllEffect;
import mage.abilities.keyword.DoubleStrikeAbility;
import mage.abilities.keyword.TransformAbility;
import mage.cards.CardImpl;

View file

@ -34,7 +34,7 @@ import mage.constants.Duration;
import mage.constants.Rarity;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.continious.GainAbilityAllEffect;
import mage.cards.CardImpl;
import mage.constants.Zone;

View file

@ -34,7 +34,7 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CanBlockAdditionalCreatureEffect;
import mage.abilities.effects.common.combat.CanBlockAdditionalCreatureEffect;
import mage.cards.CardImpl;
/**

View file

@ -34,7 +34,7 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.combat.MustBlockSourceEffect;
import mage.abilities.effects.common.combat.MustBeBlockedByAllSourceEffect;
import mage.cards.CardImpl;
/**
@ -51,7 +51,7 @@ public class PrizedUnicorn extends CardImpl<PrizedUnicorn> {
this.power = new MageInt(2);
this.toughness = new MageInt(2);
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MustBlockSourceEffect()));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MustBeBlockedByAllSourceEffect()));
}
public PrizedUnicorn(final PrizedUnicorn card) {

View file

@ -33,7 +33,7 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CanBlockOnlyFlyingEffect;
import mage.abilities.effects.common.combat.CanBlockOnlyFlyingEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;

View file

@ -33,7 +33,7 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneEffect;
import mage.abilities.keyword.BloodthirstAbility;
import mage.cards.CardImpl;

View file

@ -28,7 +28,7 @@
package mage.sets.magic2014;
import java.util.UUID;
import mage.abilities.effects.common.combat.MustBeBlockedTargetEffect;
import mage.abilities.effects.common.combat.MustBeBlockedByAtLeastOneTargetEffect;
import mage.abilities.effects.common.continious.BoostTargetEffect;
import mage.abilities.effects.common.continious.GainAbilityTargetEffect;
import mage.abilities.keyword.TrampleAbility;
@ -53,7 +53,7 @@ public class Enlarge extends CardImpl<Enlarge> {
// Target creature gets +7/+7 and gains trample until end of turn. It must be blocked this turn if able.
this.getSpellAbility().addEffect(new BoostTargetEffect(7,7, Duration.EndOfTurn));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn));
this.getSpellAbility().addEffect(new MustBeBlockedTargetEffect(Duration.EndOfTurn));
this.getSpellAbility().addEffect(new MustBeBlockedByAtLeastOneTargetEffect(Duration.EndOfTurn));
this.getSpellAbility().addTarget(new TargetCreaturePermanent(true));
}

View file

@ -37,8 +37,8 @@ import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.continious.BoostSourceEffect;
import mage.abilities.effects.common.continious.CanBlockAdditionalCreatureEffect;
import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.combat.CanBlockAdditionalCreatureEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;

View file

@ -35,7 +35,7 @@ import mage.MageInt;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.continious.GainAbilitySourceEffect;
import mage.abilities.keyword.FlankingAbility;
import mage.cards.CardImpl;

View file

@ -32,7 +32,7 @@ import java.util.UUID;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.combat.MustBlockSourceEffect;
import mage.abilities.effects.common.combat.MustBeBlockedByAllSourceEffect;
import mage.abilities.effects.common.continious.GainAbilityTargetEffect;
import mage.cards.CardImpl;
import mage.constants.Duration;
@ -49,7 +49,7 @@ public class Bloodscent extends CardImpl<Bloodscent> {
super(ownerId, 114, "Bloodscent", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{3}{G}");
this.expansionSetCode = "MRD";
this.color.setGreen(true);
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(new SimpleStaticAbility(Zone.BATTLEFIELD, new MustBlockSourceEffect()), Duration.EndOfTurn));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(new SimpleStaticAbility(Zone.BATTLEFIELD, new MustBeBlockedByAllSourceEffect()), Duration.EndOfTurn));
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
}

View file

@ -41,7 +41,7 @@ import mage.abilities.decorator.ConditionalAsThoughEffect;
import mage.abilities.decorator.ConditionalContinousEffect;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.continious.BoostSourceEffect;
import mage.abilities.effects.common.continious.CanAttackAsThoughtItDidntHaveDefenderEffect;
import mage.abilities.effects.common.combat.CanAttackAsThoughtItDidntHaveDefenderEffect;
import mage.abilities.keyword.DefenderAbility;
import mage.cards.CardImpl;

View file

@ -35,7 +35,7 @@ import mage.abilities.condition.common.CardsInControllerGraveCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.AddContinuousEffectToGame;
import mage.abilities.effects.common.combat.CantBlockAllEffect;
import mage.abilities.effects.common.continious.CantBeBlockedByOneAllEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneAllEffect;
import mage.cards.CardImpl;
import mage.constants.Duration;
import mage.filter.common.FilterCreaturePermanent;

View file

@ -37,7 +37,7 @@ import mage.constants.Zone;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.combat.MustBlockAttachedEffect;
import mage.abilities.effects.common.combat.MustBeBlockedByAllAttachedEffect;
import mage.abilities.effects.common.continious.BoostEnchantedEffect;
import mage.abilities.effects.common.continious.GainAbilityAttachedEffect;
import mage.abilities.keyword.EnchantAbility;
@ -71,7 +71,7 @@ public class IndrikUmbra extends CardImpl<IndrikUmbra> {
// Enchanted creature gets +4/+4 and has first strike, and all creatures able to block it do so.
ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(4, 4, Duration.WhileOnBattlefield));
ability.addEffect(new GainAbilityAttachedEffect(FirstStrikeAbility.getInstance(), AttachmentType.AURA));
ability.addEffect(new MustBlockAttachedEffect(AttachmentType.AURA));
ability.addEffect(new MustBeBlockedByAllAttachedEffect(AttachmentType.AURA));
this.addAbility(ability);
// Totem armor

View file

@ -37,7 +37,7 @@ import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.AdjustingSourceCosts;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.continious.CanBlockAdditionalCreatureEffect;
import mage.abilities.effects.common.combat.CanBlockAdditionalCreatureEffect;
import mage.abilities.keyword.FlashbackAbility;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.RetraceAbility;

View file

@ -34,7 +34,7 @@ import mage.constants.Rarity;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.combat.MustBlockSourceEffect;
import mage.abilities.effects.common.combat.MustBeBlockedByAllSourceEffect;
import mage.abilities.keyword.ScavengeAbility;
import mage.cards.CardImpl;
import mage.constants.Zone;
@ -56,7 +56,7 @@ public class GolgariDecoy extends CardImpl<GolgariDecoy> {
this.toughness = new MageInt(2);
// All creatures able to block Golgari Decoy do so.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MustBlockSourceEffect()));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MustBeBlockedByAllSourceEffect()));
// Scavenge {3}{G}{G} ({3}{G}{G}, Exile this card from your graveyard: Put a number of +1/+1 counters equal to this card's power on target creature. Scavenge only as a sorcery.)
this.addAbility(new ScavengeAbility(new ManaCostsImpl("{3}{G}{G}")));
}

View file

@ -36,7 +36,7 @@ import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.continious.BoostSourceEffect;
import mage.abilities.effects.common.continious.CantBeBlockedByCreaturesWithLessPowerEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesWithLessPowerEffect;
import mage.cards.CardImpl;
import mage.filter.FilterPermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;

View file

@ -33,7 +33,8 @@ import mage.constants.CardType;
import mage.constants.Rarity;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.DrawCardControllerEffect;
import mage.abilities.effects.common.combat.MustBlockSourceEffect;
import mage.abilities.effects.common.combat.MustBeBlockedByAllSourceEffect;
import mage.abilities.effects.common.combat.MustBeBlockedByAtLeastOneTargetEffect;
import mage.abilities.effects.common.continious.GainAbilityTargetEffect;
import mage.cards.CardImpl;
import mage.constants.Duration;
@ -54,7 +55,10 @@ public class IrresistiblePrey extends CardImpl<IrresistiblePrey> {
// Target creature must be blocked this turn if able.
// Draw a card.
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(new SimpleStaticAbility(Zone.BATTLEFIELD, new MustBlockSourceEffect()), Duration.EndOfTurn));
this.getSpellAbility().addEffect(
new GainAbilityTargetEffect(
new SimpleStaticAbility(Zone.BATTLEFIELD, new MustBeBlockedByAtLeastOneTargetEffect()),
Duration.EndOfTurn));
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new DrawCardControllerEffect(1));
}

View file

@ -33,7 +33,7 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneEffect;
import mage.abilities.keyword.AnnihilatorAbility;
import mage.cards.CardImpl;

View file

@ -35,7 +35,7 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.combat.MustBlockSourceTargetEffect;
import mage.abilities.effects.common.combat.MustBeBlockedByTargetSourceEffect;
import mage.abilities.keyword.InfectAbility;
import mage.cards.CardImpl;
import mage.target.common.TargetCreaturePermanent;
@ -55,7 +55,7 @@ public class TangleAngler extends CardImpl<TangleAngler> {
this.toughness = new MageInt(5);
this.addAbility(InfectAbility.getInstance());
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MustBlockSourceTargetEffect(), new ManaCostsImpl("{G}"));
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MustBeBlockedByTargetSourceEffect(), new ManaCostsImpl("{G}"));
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}

View file

@ -36,7 +36,7 @@ import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.continious.SetPowerToughnessSourceEffect;
import mage.cards.CardImpl;
import mage.filter.common.FilterControlledPermanent;

View file

@ -33,7 +33,7 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneEffect;
import mage.abilities.keyword.DeathtouchAbility;
import mage.cards.CardImpl;

View file

@ -33,7 +33,7 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CanBlockOnlyFlyingEffect;
import mage.abilities.effects.common.combat.CanBlockOnlyFlyingEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;

View file

@ -33,7 +33,7 @@ import mage.constants.CardType;
import mage.constants.Rarity;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CanBlockOnlyFlyingEffect;
import mage.abilities.effects.common.combat.CanBlockOnlyFlyingEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.constants.Zone;

View file

@ -33,7 +33,7 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneEffect;
import mage.cards.CardImpl;
/**

View file

@ -31,7 +31,7 @@ import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.continious.CanBlockAdditionalCreatureEffect;
import mage.abilities.effects.common.combat.CanBlockAdditionalCreatureEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;

View file

@ -35,7 +35,7 @@ import mage.abilities.condition.common.MonstrousCondition;
import mage.abilities.decorator.ConditionalAsThoughEffect;
import mage.abilities.decorator.ConditionalContinousEffect;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.continious.CanAttackAsThoughtItDidntHaveDefenderEffect;
import mage.abilities.effects.common.combat.CanAttackAsThoughtItDidntHaveDefenderEffect;
import mage.abilities.effects.common.continious.GainAbilitySourceEffect;
import mage.abilities.keyword.DefenderAbility;
import mage.abilities.keyword.IndestructibleAbility;

View file

@ -34,7 +34,7 @@ import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.AsThoughEffectImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.continious.CantBeBlockedByCreaturesSourceEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesSourceEffect;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.constants.AsThoughEffectType;

View file

@ -33,7 +33,7 @@ import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.MonstrousCondition;
import mage.abilities.decorator.ConditionalContinousEffect;
import mage.abilities.effects.common.continious.CanBlockAdditionalCreatureEffect;
import mage.abilities.effects.common.combat.CanBlockAdditionalCreatureEffect;
import mage.abilities.effects.common.continious.GainAbilitySourceEffect;
import mage.abilities.keyword.MonstrosityAbility;
import mage.abilities.keyword.ReachAbility;

View file

@ -0,0 +1,88 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.theros;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.DiesTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.combat.MustBeBlockedByAtLeastOneSourceEffect;
import mage.abilities.effects.common.continious.BoostTargetEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Rarity;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.ControllerPredicate;
import mage.target.Target;
import mage.target.common.TargetCreaturePermanent;
/**
*
* @author LevelX2
*/
public class LoathsomeCatoblepas extends CardImpl<LoathsomeCatoblepas> {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent();
static {
filter.add(new ControllerPredicate(TargetController.OPPONENT));
}
public LoathsomeCatoblepas(UUID ownerId) {
super(ownerId, 95, "Loathsome Catoblepas", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{5}{B}");
this.expansionSetCode = "THS";
this.subtype.add("Beast");
this.color.setBlack(true);
this.power = new MageInt(3);
this.toughness = new MageInt(3);
// {2}{G}: Loathsome Catoblepas must be blocked this turn if able.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new MustBeBlockedByAtLeastOneSourceEffect(), new ManaCostsImpl("{2}{G}")));
// When Loathsome Catoblepas dies, target creature an opponent controls gets -3/-3 until end of turn.
Ability ability = new DiesTriggeredAbility(new BoostTargetEffect(-3,-3, Duration.EndOfTurn), false);
Target target = new TargetCreaturePermanent(filter);
target.setRequired(true);
ability.addTarget(target);
this.addAbility(ability);
}
public LoathsomeCatoblepas(final LoathsomeCatoblepas card) {
super(card);
}
@Override
public LoathsomeCatoblepas copy() {
return new LoathsomeCatoblepas(this);
}
}

View file

@ -33,7 +33,7 @@ import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.continious.BoostEnchantedEffect;
import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.continious.GainAbilityAttachedEffect;
import mage.abilities.keyword.BestowAbility;
import mage.cards.CardImpl;

View file

@ -31,7 +31,7 @@ import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.continious.CanAttackAsThoughtItDidntHaveDefenderEffect;
import mage.abilities.effects.common.combat.CanAttackAsThoughtItDidntHaveDefenderEffect;
import mage.abilities.keyword.DefenderAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;

View file

@ -33,7 +33,7 @@ import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.continious.BoostEnchantedEffect;
import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.continious.GainAbilityAttachedEffect;
import mage.abilities.keyword.BestowAbility;
import mage.abilities.keyword.FirstStrikeAbility;

View file

@ -38,7 +38,7 @@ import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.dynamicvalue.common.DevotionCount;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.ScryEffect;
import mage.abilities.effects.common.continious.CantBeBlockedTargetEffect;
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
import mage.abilities.effects.common.continious.LoseCreatureTypeSourceEffect;
import mage.abilities.keyword.IndestructibleAbility;
import mage.cards.CardImpl;

View file

@ -35,7 +35,7 @@ import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.ReplacementEffectImpl;
import mage.abilities.effects.common.ExileSourceEffect;
import mage.abilities.effects.common.ReturnToHandFromGraveyardAllEffect;
import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneEffect;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.constants.CardType;

View file

@ -30,7 +30,7 @@ package mage.sets.theros;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CanBlockOnlyFlyingEffect;
import mage.abilities.effects.common.combat.CanBlockOnlyFlyingEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;

View file

@ -35,7 +35,7 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.continious.GainAbilityAllEffect;
import mage.cards.CardImpl;
import mage.filter.common.FilterCreaturePermanent;

View file

@ -35,7 +35,7 @@ import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.ControlsPermanentCondition;
import mage.abilities.decorator.ConditionalContinousEffect;
import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByOneEffect;
import mage.cards.CardImpl;
import mage.constants.Zone;
import mage.filter.common.FilterLandPermanent;

View file

@ -32,7 +32,7 @@ import mage.constants.CardType;
import mage.constants.Rarity;
import mage.MageInt;
import mage.abilities.common.LandfallAbility;
import mage.abilities.effects.common.combat.MustBlockSourceTargetEffect;
import mage.abilities.effects.common.combat.MustBeBlockedByTargetSourceEffect;
import mage.abilities.keyword.DeathtouchAbility;
import mage.cards.CardImpl;
import mage.target.common.TargetCreaturePermanent;
@ -54,7 +54,7 @@ public class TurntimberBasilisk extends CardImpl<TurntimberBasilisk> {
this.addAbility(DeathtouchAbility.getInstance());
// Landfall - Whenever a land enters the battlefield under your control, you may have target creature block Turntimber Basilisk this turn if able.
LandfallAbility ability = new LandfallAbility(new MustBlockSourceTargetEffect(), true);
LandfallAbility ability = new LandfallAbility(new MustBeBlockedByTargetSourceEffect(), true);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}

View file

@ -34,7 +34,7 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.CanBlockOnlyFlyingEffect;
import mage.abilities.effects.common.combat.CanBlockOnlyFlyingEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;

View file

@ -1,66 +0,0 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.abilities.effects;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.abilities.Ability;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
/**
*
* @author BetaSteward_at_googlemail.com
*/
public abstract class RequirementBlockEffect<T extends RequirementBlockEffect<T>> extends ReplacementEffectImpl<T> {
public RequirementBlockEffect(Duration duration) {
super(duration, Outcome.Detriment);
}
public RequirementBlockEffect(final RequirementBlockEffect effect) {
super(effect);
}
@Override
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
apply(game, source);
return false;
}
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
if (event.getType().equals(EventType.DECLARE_BLOCKERS_STEP_PRE))
return true;
return false;
}
}

View file

@ -28,14 +28,14 @@
package mage.abilities.effects;
import java.util.UUID;
import mage.abilities.Ability;
import mage.constants.Duration;
import mage.constants.EffectType;
import mage.constants.Outcome;
import mage.abilities.Ability;
import mage.game.Game;
import mage.game.permanent.Permanent;
import java.util.UUID;
/**
*
@ -75,4 +75,8 @@ public abstract class RequirementEffect<T extends RequirementEffect<T>> extends
return null;
}
public UUID mustBlockAttackerIfElseUnblocked(Ability source, Game game) {
return null;
}
}

View file

@ -25,7 +25,7 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.abilities.effects.common.continious;
package mage.abilities.effects.common.combat;
import java.util.UUID;
import mage.abilities.Ability;

View file

@ -25,7 +25,7 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.abilities.effects.common.continious;
package mage.abilities.effects.common.combat;
import mage.abilities.Ability;
import mage.abilities.effects.ContinuousEffectImpl;

View file

@ -25,7 +25,7 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.abilities.effects.common.continious;
package mage.abilities.effects.common.combat;
import mage.constants.Duration;
import mage.constants.Outcome;

View file

@ -25,7 +25,7 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.abilities.effects.common.continious;
package mage.abilities.effects.common.combat;
import mage.abilities.Ability;
import mage.abilities.effects.RestrictionEffect;

View file

@ -25,7 +25,7 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.abilities.effects.common.continious;
package mage.abilities.effects.common.combat;
import mage.constants.Duration;
import mage.abilities.Ability;

View file

@ -25,7 +25,7 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.abilities.effects.common.continious;
package mage.abilities.effects.common.combat;
import mage.constants.Duration;
import mage.constants.Layer;

View file

@ -25,7 +25,7 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.abilities.effects.common.continious;
package mage.abilities.effects.common.combat;
import mage.constants.AttachmentType;
import mage.constants.Duration;

View file

@ -25,7 +25,7 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.abilities.effects.common.continious;
package mage.abilities.effects.common.combat;
import mage.constants.Duration;
import mage.constants.Layer;

View file

@ -25,7 +25,7 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.abilities.effects.common.continious;
package mage.abilities.effects.common.combat;
import mage.abilities.Ability;
import mage.abilities.Mode;

View file

@ -40,21 +40,21 @@ import mage.game.permanent.Permanent;
*
* @author LevelX2
*/
public class MustBlockAttachedEffect extends RequirementEffect<MustBlockAttachedEffect> {
public class MustBeBlockedByAllAttachedEffect extends RequirementEffect<MustBeBlockedByAllAttachedEffect> {
protected AttachmentType attachmentType;
public MustBlockAttachedEffect(AttachmentType attachmentType) {
public MustBeBlockedByAllAttachedEffect(AttachmentType attachmentType) {
this(Duration.WhileOnBattlefield, attachmentType);
}
public MustBlockAttachedEffect(Duration duration, AttachmentType attachmentType) {
public MustBeBlockedByAllAttachedEffect(Duration duration, AttachmentType attachmentType) {
super(duration);
this.attachmentType = attachmentType;
staticText = "All creatures able to block " + (attachmentType.equals(AttachmentType.AURA) ? "enchanted":"equipped") + " creature do so";
}
public MustBlockAttachedEffect(final MustBlockAttachedEffect effect) {
public MustBeBlockedByAllAttachedEffect(final MustBeBlockedByAllAttachedEffect effect) {
super(effect);
}
@ -83,8 +83,8 @@ public class MustBlockAttachedEffect extends RequirementEffect<MustBlockAttached
}
@Override
public MustBlockAttachedEffect copy() {
return new MustBlockAttachedEffect(this);
public MustBeBlockedByAllAttachedEffect copy() {
return new MustBeBlockedByAllAttachedEffect(this);
}
}

View file

@ -39,18 +39,18 @@ import mage.game.permanent.Permanent;
*
* @author BetaSteward_at_googlemail.com
*/
public class MustBlockSourceEffect extends RequirementEffect<MustBlockSourceEffect> {
public class MustBeBlockedByAllSourceEffect extends RequirementEffect<MustBeBlockedByAllSourceEffect> {
public MustBlockSourceEffect() {
public MustBeBlockedByAllSourceEffect() {
this(Duration.WhileOnBattlefield);
}
public MustBlockSourceEffect(Duration duration) {
public MustBeBlockedByAllSourceEffect(Duration duration) {
super(duration);
staticText = "All creatures able to block {this} do so";
}
public MustBlockSourceEffect(final MustBlockSourceEffect effect) {
public MustBeBlockedByAllSourceEffect(final MustBeBlockedByAllSourceEffect effect) {
super(effect);
}
@ -75,8 +75,8 @@ public class MustBlockSourceEffect extends RequirementEffect<MustBlockSourceEffe
}
@Override
public MustBlockSourceEffect copy() {
return new MustBlockSourceEffect(this);
public MustBeBlockedByAllSourceEffect copy() {
return new MustBeBlockedByAllSourceEffect(this);
}
}

View file

@ -0,0 +1,107 @@
/*
* Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.abilities.effects.common.combat;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.RequirementEffect;
import mage.constants.Duration;
import mage.game.Game;
import mage.game.permanent.Permanent;
/**
* http://tappedout.net/mtg-questions/must-be-blocked-if-able-effect-makes-other-attacking-creatures-essentially-unblockable/
*
* When you Declare Blockers, you choose an arrangement for your blockers,
* then check to see if there are any restrictions or requirements.
*
* If any restrictions are violated, the block is illegal. (For example,
* trying to block with Sightless Ghoul)
* If any requirements are violated, the least possible number of requirements
* must be violated, otherwise the block is illegal. (For example, your opponent
* control two creatures that he has cast Deadly Allure on, but you control only
* one creature. Blocking either one will violate a requirement, "This creature
* must be blocked this turn if able", but it will also violate the least
* possible number of requirements, thus it is legal.)
* If the block is illegal, the game state backs up and you declare blockers
* again. (Note that while you can, in some cases, circumvent requirements
* such as "This creature must be blocked" or "This creature must block
* any attacking creature" you can never circumvent restrictions: "This creature
* can't block" or "Only one creature may block this turn.")
* Because you declare ALL your blockers at once, THEN check for
* restrictions/requirements, you may block Deadly Allure'd creatures
* with only one creature, if you choose.
* This still works with Lure: This card sets up a requirement that ALL
* creatures must block it if able. Any block that violates more than
* the minimum number of requirements is still illegal.
*
* @author LevelX2
*/
public class MustBeBlockedByAtLeastOneSourceEffect extends RequirementEffect<MustBeBlockedByAtLeastOneSourceEffect> {
public MustBeBlockedByAtLeastOneSourceEffect() {
this(Duration.EndOfTurn);
}
public MustBeBlockedByAtLeastOneSourceEffect(Duration duration) {
super(duration);
staticText = "{this} must be blocked this turn if able";
}
public MustBeBlockedByAtLeastOneSourceEffect(final MustBeBlockedByAtLeastOneSourceEffect effect) {
super(effect);
}
@Override
public boolean applies(Permanent permanent, Ability source, Game game) {
return true;
}
@Override
public boolean mustAttack(Game game) {
return false;
}
@Override
public boolean mustBlock(Game game) {
return false;
}
@Override
public UUID mustBlockAttackerIfElseUnblocked(Ability source, Game game) {
return source.getSourceId();
}
@Override
public MustBeBlockedByAtLeastOneSourceEffect copy() {
return new MustBeBlockedByAtLeastOneSourceEffect(this);
}
}

View file

@ -64,18 +64,18 @@ import mage.game.permanent.Permanent;
*
* @author LevelX2
*/
public class MustBeBlockedTargetEffect extends RequirementEffect<MustBeBlockedTargetEffect> {
public class MustBeBlockedByAtLeastOneTargetEffect extends RequirementEffect<MustBeBlockedByAtLeastOneTargetEffect> {
public MustBeBlockedTargetEffect() {
public MustBeBlockedByAtLeastOneTargetEffect() {
this(Duration.EndOfTurn);
}
public MustBeBlockedTargetEffect(Duration duration) {
public MustBeBlockedByAtLeastOneTargetEffect(Duration duration) {
super(duration);
staticText = "Target creature must be blocked this turn if able";
}
public MustBeBlockedTargetEffect(final MustBeBlockedTargetEffect effect) {
public MustBeBlockedByAtLeastOneTargetEffect(final MustBeBlockedByAtLeastOneTargetEffect effect) {
super(effect);
}
@ -91,17 +91,17 @@ public class MustBeBlockedTargetEffect extends RequirementEffect<MustBeBlockedTa
@Override
public boolean mustBlock(Game game) {
return true;
return false;
}
@Override
public UUID mustBlockAttacker(Ability source, Game game) {
public UUID mustBlockAttackerIfElseUnblocked(Ability source, Game game) {
return this.getTargetPointer().getFirst(game, source);
}
@Override
public MustBeBlockedTargetEffect copy() {
return new MustBeBlockedTargetEffect(this);
public MustBeBlockedByAtLeastOneTargetEffect copy() {
return new MustBeBlockedByAtLeastOneTargetEffect(this);
}
}

View file

@ -39,18 +39,18 @@ import mage.game.permanent.Permanent;
*
* @author BetaSteward_at_googlemail.com
*/
public class MustBlockSourceTargetEffect extends RequirementEffect<MustBlockSourceTargetEffect> {
public class MustBeBlockedByTargetSourceEffect extends RequirementEffect<MustBeBlockedByTargetSourceEffect> {
public MustBlockSourceTargetEffect() {
public MustBeBlockedByTargetSourceEffect() {
this(Duration.EndOfTurn);
}
public MustBlockSourceTargetEffect(Duration duration) {
public MustBeBlockedByTargetSourceEffect(Duration duration) {
super(duration);
staticText = "Target creature blocks {this} this turn if able";
}
public MustBlockSourceTargetEffect(final MustBlockSourceTargetEffect effect) {
public MustBeBlockedByTargetSourceEffect(final MustBeBlockedByTargetSourceEffect effect) {
super(effect);
}
@ -79,8 +79,8 @@ public class MustBlockSourceTargetEffect extends RequirementEffect<MustBlockSour
}
@Override
public MustBlockSourceTargetEffect copy() {
return new MustBlockSourceTargetEffect(this);
public MustBeBlockedByTargetSourceEffect copy() {
return new MustBeBlockedByTargetSourceEffect(this);
}
}

View file

@ -345,9 +345,9 @@ public class Combat implements Serializable, Copyable<Combat> {
if (creature.getBlocking() == 0 && game.getOpponents(attackerId).contains(creature.getControllerId())) {
// get all requiremet effects that apply to the creature
for (RequirementEffect effect : game.getContinuousEffects().getApplicableRequirementEffects(creature, game).keySet()) {
// check the mustBlockAny
if (effect.mustBlockAny(game)) {
// check that it can block an attacker
// check that it can block at least one of the attackers
boolean mayBlock = false;
for (UUID attackingCreatureId : getAttackers()) {
if (creature.canBlock(attackingCreatureId, game)) {
@ -355,6 +355,7 @@ public class Combat implements Serializable, Copyable<Combat> {
break;
}
}
// is so inform human player or set block for AI player
if (mayBlock) {
if (controller.isHuman()) {
game.informPlayer(controller, "Creature should block this turn: " + creature.getName());