mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 10:40:06 -08:00
cleanup AbilityType for easier check that an ability is an activated ability (#12153)
* cleanup AbilityType * further cleanup * cleanup instanceof * tweak formatting * rework Rex * fix mistake in PlayerImpl * cleanup 'instanceof' for 'ActivatedManaAbilityImpl'
This commit is contained in:
parent
62cc49ffa3
commit
85cad4ff1e
118 changed files with 486 additions and 574 deletions
|
|
@ -280,9 +280,9 @@ public class CardPanelRenderModeImage extends CardPanel {
|
|||
|
||||
// Ability icon
|
||||
if (newGameCard.isAbility()) {
|
||||
if (newGameCard.getAbilityType() == AbilityType.TRIGGERED) {
|
||||
if (newGameCard.getAbilityType() == AbilityType.TRIGGERED_NONMANA) {
|
||||
setTypeIcon(ImageManagerImpl.instance.getTriggeredAbilityImage(), "Triggered Ability");
|
||||
} else if (newGameCard.getAbilityType() == AbilityType.ACTIVATED) {
|
||||
} else if (newGameCard.getAbilityType() == AbilityType.ACTIVATED_NONMANA) {
|
||||
setTypeIcon(ImageManagerImpl.instance.getActivatedAbilityImage(), "Activated Ability");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -425,9 +425,9 @@ public abstract class CardRenderer {
|
|||
// Get a string representing the type line
|
||||
protected String getCardTypeLine() {
|
||||
if (cardView.isAbility()) {
|
||||
if (cardView.getAbilityType() == AbilityType.TRIGGERED) {
|
||||
if (cardView.getAbilityType() == AbilityType.TRIGGERED_NONMANA) {
|
||||
return "Triggered Ability";
|
||||
} else if (cardView.getAbilityType() == AbilityType.ACTIVATED) {
|
||||
} else if (cardView.getAbilityType() == AbilityType.ACTIVATED_NONMANA) {
|
||||
return "Activated Ability";
|
||||
} else if (cardView.getAbilityType() == null) {
|
||||
// TODO: Triggered abilities waiting to be put onto the stack have abilityType = null. Figure out why
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ import mage.abilities.keyword.*;
|
|||
import mage.cards.Card;
|
||||
import mage.cards.Cards;
|
||||
import mage.choices.Choice;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.RangeOfInfluence;
|
||||
import mage.counters.CounterType;
|
||||
|
|
@ -1082,7 +1081,7 @@ public class ComputerPlayer6 extends ComputerPlayer {
|
|||
|
||||
private boolean checkForRepeatedAction(Game sim, SimulationNode2 node, Ability action, UUID playerId) {
|
||||
// pass or casting two times a spell multiple times on hand is ok
|
||||
if (action instanceof PassAbility || action instanceof SpellAbility || action.getAbilityType() == AbilityType.MANA) {
|
||||
if (action instanceof PassAbility || action instanceof SpellAbility || action.isManaAbility()) {
|
||||
return false;
|
||||
}
|
||||
int newVal = GameStateEvaluator2.evaluate(playerId, sim).getTotalScore();
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import mage.abilities.costs.mana.ManaCostsImpl;
|
|||
import mage.abilities.costs.mana.VariableManaCost;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.cards.Card;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.game.Game;
|
||||
import mage.game.combat.Combat;
|
||||
import mage.game.events.GameEvent;
|
||||
|
|
@ -100,7 +99,7 @@ public final class SimulatedPlayer2 extends ComputerPlayer {
|
|||
List<ActivatedAbility> playables = game.getPlayer(playerId).getPlayable(game, isSimulatedPlayer);
|
||||
playables = filterAbilities(game, playables, suggested);
|
||||
for (ActivatedAbility ability : playables) {
|
||||
if (ability.getAbilityType() == AbilityType.MANA) {
|
||||
if (ability.isManaAbility()) {
|
||||
continue;
|
||||
}
|
||||
List<Ability> options = game.getPlayer(playerId).getPlayableOptions(ability, game);
|
||||
|
|
|
|||
|
|
@ -1498,7 +1498,7 @@ public class ComputerPlayer extends PlayerImpl {
|
|||
// TODO: wtf?! change to player.getPlayable
|
||||
for (Permanent permanent : game.getBattlefield().getAllActivePermanents(playerId)) {
|
||||
for (ActivatedAbility ability : permanent.getAbilities().getActivatedAbilities(Zone.BATTLEFIELD)) {
|
||||
if (!(ability instanceof ActivatedManaAbilityImpl) && ability.canActivate(playerId, game).canActivate()) {
|
||||
if (!ability.isManaActivatedAbility() && ability.canActivate(playerId, game).canActivate()) {
|
||||
if (ability instanceof EquipAbility && permanent.getAttachedTo() != null) {
|
||||
continue;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@ import mage.cards.decks.Deck;
|
|||
import mage.choices.Choice;
|
||||
import mage.choices.ChoiceImpl;
|
||||
import mage.constants.*;
|
||||
import static mage.constants.PlayerAction.REQUEST_AUTO_ANSWER_RESET_ALL;
|
||||
import static mage.constants.PlayerAction.TRIGGER_AUTO_ORDER_RESET_ALL;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterAttackingCreature;
|
||||
import mage.filter.common.FilterBlockingCreature;
|
||||
|
|
@ -55,9 +57,6 @@ import java.util.*;
|
|||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static mage.constants.PlayerAction.REQUEST_AUTO_ANSWER_RESET_ALL;
|
||||
import static mage.constants.PlayerAction.TRIGGER_AUTO_ORDER_RESET_ALL;
|
||||
|
||||
/**
|
||||
* Human: server side logic to exchange game data between server app and another player's app
|
||||
*
|
||||
|
|
@ -1165,7 +1164,7 @@ public class HumanPlayer extends PlayerImpl {
|
|||
return false;
|
||||
}
|
||||
if (controllingPlayer.getUserData().isPassPriorityActivation()
|
||||
&& getJustActivatedType() == AbilityType.ACTIVATED) {
|
||||
&& getJustActivatedType().isNonManaActivatedAbility()) {
|
||||
setJustActivatedType(null);
|
||||
pass(game);
|
||||
return false;
|
||||
|
|
@ -2365,7 +2364,7 @@ public class HumanPlayer extends PlayerImpl {
|
|||
}
|
||||
if (userData.isUseFirstManaAbility() && object instanceof Permanent && object.isLand(game)) {
|
||||
ActivatedAbility ability = abilities.values().iterator().next();
|
||||
if (ability instanceof ActivatedManaAbilityImpl) {
|
||||
if (ability.isActivatedAbility() && ability.isManaAbility()) {
|
||||
activateAbility(ability, game);
|
||||
return;
|
||||
}
|
||||
|
|
@ -2427,7 +2426,7 @@ public class HumanPlayer extends PlayerImpl {
|
|||
}
|
||||
|
||||
// hide on mana activate and show all other
|
||||
return ability instanceof ActivatedManaAbilityImpl;
|
||||
return ability.isManaActivatedAbility();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
@ -2620,7 +2619,7 @@ public class HumanPlayer extends PlayerImpl {
|
|||
}
|
||||
|
||||
// triggered abilities can't be skipped by cancel or wrong answer
|
||||
if (source.getAbilityType() != AbilityType.TRIGGERED) {
|
||||
if (!source.isTriggeredAbility()) {
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -2788,7 +2787,9 @@ public class HumanPlayer extends PlayerImpl {
|
|||
holdingPriority = false;
|
||||
break;
|
||||
case TOGGLE_RECORD_MACRO:
|
||||
if (true) return; // TODO: macro unsupported in current version
|
||||
if (true) {
|
||||
return; // TODO: macro unsupported in current version
|
||||
}
|
||||
if (recordingMacro) {
|
||||
logger.debug("Finished Recording Macro");
|
||||
activatingMacro = true;
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import mage.MageObject;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -93,8 +92,7 @@ class AbeyanceEffect extends ContinuousRuleModifyingEffectImpl {
|
|||
}
|
||||
if (event.getType() == GameEvent.EventType.ACTIVATE_ABILITY) {
|
||||
Optional<Ability> ability = game.getAbility(event.getTargetId(), event.getSourceId());
|
||||
return ability.isPresent()
|
||||
&& !(ability.get() instanceof ActivatedManaAbilityImpl);
|
||||
return ability.isPresent() && !ability.get().isManaActivatedAbility();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ class AbolethSpawnTriggeredAbility extends TriggeredAbilityImpl {
|
|||
return false; // only creatures entering under opponent's control
|
||||
}
|
||||
Ability stackAbility = stackObject.getStackAbility();
|
||||
if (!(stackAbility instanceof TriggeredAbility)) {
|
||||
if (!stackAbility.isTriggeredAbility()) {
|
||||
return false;
|
||||
}
|
||||
GameEvent triggerEvent = ((TriggeredAbility) stackAbility).getTriggerEvent();
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ class AgathaOfTheVileCauldronEffect extends CostModificationEffectImpl {
|
|||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
// Activated abilities you control
|
||||
if (abilityToModify.getAbilityType() != AbilityType.ACTIVATED
|
||||
if (!abilityToModify.getAbilityType().isActivatedAbility()
|
||||
|| !abilityToModify.isControlledBy(source.getControllerId())) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package mage.cards.a;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.common.delayed.ReflexiveTriggeredAbility;
|
||||
|
|
@ -132,7 +131,7 @@ class AgathasSoulCauldronAbilityEffect extends ContinuousEffectImpl {
|
|||
.stream()
|
||||
.map(card -> card.getAbilities(game))
|
||||
.flatMap(Collection::stream)
|
||||
.filter(ActivatedAbility.class::isInstance)
|
||||
.filter(Ability::isActivatedAbility)
|
||||
.collect(Collectors.toSet());
|
||||
if (abilities.isEmpty()) {
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package mage.cards.a;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.SpellAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.Cost;
|
||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||
|
|
@ -107,9 +106,7 @@ class AngelOfJubilationSacrificeFilterEffect extends CostModificationEffectImpl
|
|||
|
||||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
|
||||
return (abilityToModify.getAbilityType() == AbilityType.ACTIVATED
|
||||
|| abilityToModify instanceof SpellAbility)
|
||||
return (abilityToModify.isActivatedAbility() || abilityToModify.getAbilityType() == AbilityType.SPELL)
|
||||
&& game.getState().getPlayersInRange(source.getControllerId(), game).contains(abilityToModify.getControllerId());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
package mage.cards.a;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.MageObject;
|
||||
import mage.abilities.Ability;
|
||||
|
|
@ -9,17 +8,18 @@ import mage.abilities.common.SimpleStaticAbility;
|
|||
import mage.abilities.effects.common.ChooseACardNameEffect;
|
||||
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
|
||||
import mage.abilities.effects.common.cost.SpellsCostIncreasingAllEffect;
|
||||
import mage.constants.*;
|
||||
import mage.abilities.keyword.VigilanceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.filter.predicate.mageobject.ChosenNamePredicate;
|
||||
import mage.game.Game;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author weirddan455
|
||||
*/
|
||||
public final class AnointedPeacekeeper extends CardImpl {
|
||||
|
|
@ -88,7 +88,7 @@ class AnointedPeacekeeperEffect extends CostModificationEffectImpl {
|
|||
|
||||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
if (abilityToModify.getAbilityType() != AbilityType.ACTIVATED) {
|
||||
if (!abilityToModify.getAbilityType().isNonManaActivatedAbility()) {
|
||||
return false;
|
||||
}
|
||||
MageObject activatedSource = game.getObject(abilityToModify.getSourceId());
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import mage.abilities.TriggeredAbilityImpl;
|
|||
import mage.abilities.costs.SacrificeCost;
|
||||
import mage.abilities.effects.common.CopyStackObjectEffect;
|
||||
import mage.abilities.keyword.DeathtouchAbility;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -77,7 +76,7 @@ class AshnodTheUncaringTriggeredAbility extends TriggeredAbilityImpl {
|
|||
}
|
||||
StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getSourceId());
|
||||
if (stackAbility == null
|
||||
|| stackAbility.getStackAbility() instanceof ActivatedManaAbilityImpl
|
||||
|| stackAbility.getStackAbility().isManaActivatedAbility()
|
||||
|| stackAbility
|
||||
.getStackAbility()
|
||||
.getCosts()
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import mage.abilities.mana.builder.ConditionalManaBuilder;
|
|||
import mage.abilities.mana.conditional.ManaCondition;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.game.Game;
|
||||
|
|
@ -76,11 +77,10 @@ class AutomatedArtificerManaCondition extends ManaCondition {
|
|||
if (source == null || source.isActivated()) {
|
||||
return false;
|
||||
}
|
||||
switch (source.getAbilityType()) {
|
||||
case MANA:
|
||||
case ACTIVATED:
|
||||
if (source.isActivatedAbility()) {
|
||||
return true;
|
||||
case SPELL:
|
||||
}
|
||||
if (source.getAbilityType() == AbilityType.SPELL) {
|
||||
if (source instanceof SpellAbility) {
|
||||
MageObject object = game.getObject(source);
|
||||
return object != null && object.isArtifact(game);
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import mage.abilities.effects.common.DoIfCostPaid;
|
|||
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
|
||||
import mage.abilities.keyword.EquipAbility;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
|
|
@ -16,9 +15,9 @@ import mage.game.Game;
|
|||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.stack.StackAbility;
|
||||
import mage.target.common.TargetControlledCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.target.common.TargetControlledCreaturePermanent;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
|
|
@ -79,7 +78,7 @@ class BattlemagesBracersTriggeredAbility extends TriggeredAbilityImpl {
|
|||
return false;
|
||||
}
|
||||
StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getSourceId());
|
||||
if (stackAbility == null || stackAbility.getStackAbility() instanceof ActivatedManaAbilityImpl) {
|
||||
if (stackAbility == null || stackAbility.getStackAbility().isManaActivatedAbility()) {
|
||||
return false;
|
||||
}
|
||||
getEffects().setValue("stackObject", stackAbility);
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package mage.cards.b;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
|
|
@ -84,9 +83,7 @@ class BiomancersFamiliarCostReductionEffect extends CostModificationEffectImpl {
|
|||
|
||||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
if (abilityToModify.getAbilityType() != AbilityType.ACTIVATED
|
||||
&& (abilityToModify.getAbilityType() != AbilityType.MANA
|
||||
|| !(abilityToModify instanceof ActivatedAbility))) {
|
||||
if (!abilityToModify.getAbilityType().isActivatedAbility()) {
|
||||
return false;
|
||||
}
|
||||
//Activated abilities of creatures you control
|
||||
|
|
|
|||
|
|
@ -1,31 +1,24 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.util.CardUtil;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
|
||||
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
|
||||
import mage.abilities.keyword.MenaceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.CostModificationType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.*;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author @stwalsh4118
|
||||
*/
|
||||
public final class BladegraftAspirant extends CardImpl {
|
||||
|
|
@ -97,15 +90,13 @@ class BladegraftAspirantCostReductionEffect extends CostModificationEffectImpl {
|
|||
|
||||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
if (abilityToModify.getAbilityType() != AbilityType.ACTIVATED
|
||||
&& (abilityToModify.getAbilityType() != AbilityType.MANA
|
||||
|| !(abilityToModify instanceof ActivatedAbility))) {
|
||||
if (!abilityToModify.getAbilityType().isActivatedAbility()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Permanent permanent = game.getPermanentOrLKIBattlefield(abilityToModify.getSourceId());
|
||||
|
||||
if(!(permanent != null && permanent.getSubtype(game).contains(SubType.EQUIPMENT) && permanent.isControlledBy(source.getControllerId()))) {
|
||||
if (!(permanent != null && permanent.getSubtype(game).contains(SubType.EQUIPMENT) && permanent.isControlledBy(source.getControllerId()))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,6 @@
|
|||
|
||||
package mage.cards.b;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
|
|
@ -11,20 +8,17 @@ import mage.abilities.effects.ContinuousEffectImpl;
|
|||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Layer;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubLayer;
|
||||
import mage.constants.Zone;
|
||||
import mage.constants.*;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class BloodSun extends CardImpl {
|
||||
|
|
@ -73,9 +67,9 @@ class BloodSunEffect extends ContinuousEffectImpl {
|
|||
switch (layer) {
|
||||
case AbilityAddingRemovingEffects_6:
|
||||
List<Ability> toRemove = new ArrayList<>();
|
||||
permanent.getAbilities().forEach(a -> {
|
||||
if (a.getAbilityType() != AbilityType.MANA) {
|
||||
toRemove.add(a);
|
||||
permanent.getAbilities().forEach(ability -> {
|
||||
if (!ability.getAbilityType().isManaAbility()) {
|
||||
toRemove.add(ability);
|
||||
}
|
||||
});
|
||||
permanent.removeAbilities(toRemove, source.getSourceId(), game);
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package mage.cards.b;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.common.EntersBattlefieldOrAttacksSourceTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
|
|
@ -25,7 +24,6 @@ import mage.util.CardUtil;
|
|||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Susucr
|
||||
*/
|
||||
public final class BlossomingTortoise extends CardImpl {
|
||||
|
|
@ -121,7 +119,7 @@ class BlossomingTortoiseCostReductionEffect extends CostModificationEffectImpl {
|
|||
|
||||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
if (!(abilityToModify instanceof ActivatedAbility)) {
|
||||
if (!abilityToModify.isActivatedAbility()) {
|
||||
return false;
|
||||
}
|
||||
Permanent permanent = abilityToModify.getSourcePermanentIfItStillExists(game);
|
||||
|
|
|
|||
|
|
@ -1,24 +1,23 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
||||
import mage.abilities.effects.common.combat.CantAttackBlockAttachedEffect;
|
||||
import mage.constants.*;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.common.AttachEffect;
|
||||
import mage.abilities.effects.common.combat.CantAttackBlockAttachedEffect;
|
||||
import mage.abilities.keyword.EnchantAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.abilities.keyword.EnchantAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author weirddan455
|
||||
*/
|
||||
public final class BoundInGold extends CardImpl {
|
||||
|
|
@ -90,7 +89,7 @@ class BoundInGoldEffect extends ContinuousRuleModifyingEffectImpl {
|
|||
case ACTIVATE_ABILITY:
|
||||
if (enchantment.isAttachedTo(event.getSourceId())) {
|
||||
Optional<Ability> ability = game.getAbility(event.getTargetId(), event.getSourceId());
|
||||
return ability.isPresent() && ability.get().getAbilityType() != AbilityType.MANA;
|
||||
return ability.isPresent() && ability.get().isNonManaActivatedAbility();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,29 +1,22 @@
|
|||
|
||||
package mage.cards.b;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.CostModificationType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.constants.*;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.filter.predicate.permanent.TokenPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.common.TargetControlledPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author L_J
|
||||
*/
|
||||
public final class BrutalSuppression extends CardImpl {
|
||||
|
|
@ -48,12 +41,14 @@ public final class BrutalSuppression extends CardImpl {
|
|||
class BrutalSuppressionAdditionalCostEffect extends CostModificationEffectImpl {
|
||||
|
||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent("a land");
|
||||
static{
|
||||
|
||||
static {
|
||||
filter.add(CardType.LAND.getPredicate());
|
||||
}
|
||||
|
||||
private static final FilterPermanent filter2 = new FilterPermanent("nontoken Rebels");
|
||||
static{
|
||||
|
||||
static {
|
||||
filter2.add(SubType.REBEL.getPredicate());
|
||||
filter.add(TokenPredicate.FALSE);
|
||||
}
|
||||
|
|
@ -75,7 +70,7 @@ class BrutalSuppressionAdditionalCostEffect extends CostModificationEffectImpl {
|
|||
|
||||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
if (abilityToModify.getAbilityType() == AbilityType.ACTIVATED || abilityToModify.getAbilityType() == AbilityType.MANA) {
|
||||
if (abilityToModify.isActivatedAbility()){
|
||||
Permanent rebelPermanent = game.getPermanent(abilityToModify.getSourceId());
|
||||
if (rebelPermanent != null) {
|
||||
return filter2.match(rebelPermanent, game);
|
||||
|
|
|
|||
|
|
@ -7,13 +7,11 @@ import mage.abilities.effects.Effect;
|
|||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.GameEvent.EventType;
|
||||
import mage.game.stack.StackAbility;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
|
|
@ -68,7 +66,7 @@ class BurningTreeShamanTriggeredAbility extends TriggeredAbilityImpl {
|
|||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getSourceId());
|
||||
if (stackAbility != null && stackAbility.getAbilityType() == AbilityType.ACTIVATED) {
|
||||
if (stackAbility != null && stackAbility.isNonManaActivatedAbility()) {
|
||||
for (Effect effect : getEffects()) {
|
||||
effect.setTargetPointer(new FixedTarget(event.getPlayerId()));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.condition.common.ControlYourCommanderCondition;
|
||||
|
|
@ -76,7 +75,7 @@ class ConvergenceOfDominionEffect extends CostModificationEffectImpl {
|
|||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
return ControlYourCommanderCondition.instance.apply(game, source)
|
||||
&& abilityToModify instanceof ActivatedAbility
|
||||
&& abilityToModify.isActivatedAbility()
|
||||
&& game.getState().getZone(abilityToModify.getSourceId()) == Zone.GRAVEYARD;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,24 +1,23 @@
|
|||
|
||||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.stack.StackAbility;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author spjspj
|
||||
*/
|
||||
public final class CrackdownConstruct extends CardImpl {
|
||||
|
|
@ -71,9 +70,7 @@ class CrackdownConstructTriggeredAbility extends TriggeredAbilityImpl {
|
|||
Card source = game.getPermanentOrLKIBattlefield(event.getSourceId());
|
||||
if (source != null && (source.isArtifact(game) || source.isCreature(game))) {
|
||||
StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getSourceId());
|
||||
if (!(stackAbility.getStackAbility() instanceof ActivatedManaAbilityImpl)) {
|
||||
return true;
|
||||
}
|
||||
return !stackAbility.getStackAbility().isManaActivatedAbility();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.ConditionalMana;
|
||||
import mage.MageInt;
|
||||
import mage.Mana;
|
||||
|
|
@ -20,12 +19,13 @@ import mage.abilities.mana.builder.ConditionalManaBuilder;
|
|||
import mage.abilities.mana.conditional.ManaCondition;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.counters.CounterType;
|
||||
import mage.game.Game;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
|
|
@ -94,12 +94,9 @@ class CrypticTrilobiteManaCondition extends ManaCondition implements Condition {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
if (source != null && !source.isActivated()) {
|
||||
// ex: SimpleManaAbility is an ACTIVATED ability, but it is categorized as a MANA ability
|
||||
return source.getAbilityType() == AbilityType.MANA
|
||||
|| source.getAbilityType() == AbilityType.ACTIVATED;
|
||||
}
|
||||
return false;
|
||||
return source != null
|
||||
&& !source.isActivated()
|
||||
&& source.isActivatedAbility();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -1,13 +1,11 @@
|
|||
|
||||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.ConditionalMana;
|
||||
import mage.MageInt;
|
||||
import mage.MageObject;
|
||||
import mage.Mana;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.SpellAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.costs.Cost;
|
||||
|
|
@ -24,14 +22,15 @@ import mage.constants.SubType;
|
|||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class CultivatorDrone extends CardImpl {
|
||||
|
||||
public CultivatorDrone(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}");
|
||||
this.subtype.add(SubType.ELDRAZI);
|
||||
this.subtype.add(SubType.DRONE);
|
||||
this.power = new MageInt(2);
|
||||
|
|
@ -85,7 +84,7 @@ class CultivatorDroneManaCondition extends ManaCondition implements Condition {
|
|||
return true;
|
||||
}
|
||||
}
|
||||
if (source instanceof ActivatedAbility && !source.isActivated()) {
|
||||
if (source.isActivatedAbility() && !source.isActivated()) {
|
||||
Permanent object = game.getPermanentOrLKIBattlefield(source.getSourceId());
|
||||
if (object != null && object.getColor(game).isColorless()) {
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import mage.MageObject;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.ReplacementEffectImpl;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -22,13 +21,12 @@ import java.util.Optional;
|
|||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class DampingMatrix extends CardImpl {
|
||||
|
||||
public DampingMatrix(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
|
||||
|
||||
// Activated abilities of artifacts and creatures can't be activated unless they're mana abilities.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DampingMatrixEffect()));
|
||||
|
|
@ -47,6 +45,7 @@ public final class DampingMatrix extends CardImpl {
|
|||
class DampingMatrixEffect extends ReplacementEffectImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterPermanent("artifacts and creatures");
|
||||
|
||||
static {
|
||||
filter.add(Predicates.or(
|
||||
CardType.ARTIFACT.getPredicate(),
|
||||
|
|
@ -80,11 +79,9 @@ class DampingMatrixEffect extends ReplacementEffectImpl {
|
|||
@Override
|
||||
public boolean applies(GameEvent event, Ability source, Game game) {
|
||||
MageObject object = game.getObject(event.getSourceId());
|
||||
if (object instanceof Permanent && filter.match((Permanent)object, source.getControllerId(), source, game)) {
|
||||
if (object instanceof Permanent && filter.match((Permanent) object, source.getControllerId(), source, game)) {
|
||||
Optional<Ability> ability = object.getAbilities().get(event.getTargetId());
|
||||
if (ability.isPresent() && !(ability.get() instanceof ActivatedManaAbilityImpl)) {
|
||||
return true;
|
||||
}
|
||||
return ability.isPresent() && !ability.get().isManaActivatedAbility();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package mage.cards.d;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
|
|
@ -109,7 +108,7 @@ class DarkImpostorContinuousEffect extends ContinuousEffectImpl {
|
|||
}
|
||||
for (Card card : exileZone.getCards(StaticFilters.FILTER_CARD_CREATURE, game)) {
|
||||
for (Ability ability : card.getAbilities(game)) {
|
||||
if (ability instanceof ActivatedAbility) {
|
||||
if (ability.isActivatedAbility()) {
|
||||
permanent.addAbility(ability, source.getSourceId(), game, true);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,6 @@
|
|||
package mage.cards.d;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.costs.mana.ManaCost;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
|
|
@ -25,8 +19,9 @@ import mage.players.Player;
|
|||
import mage.target.TargetPermanent;
|
||||
import mage.target.TargetPlayer;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author L_J
|
||||
*/
|
||||
public final class DrainPower extends CardImpl {
|
||||
|
|
@ -84,7 +79,7 @@ class DrainPowerEffect extends OneShotEffect {
|
|||
List<ActivatedManaAbilityImpl> manaAbilities = new ArrayList<>();
|
||||
abilitySearch:
|
||||
for (Ability ability : permanent.getAbilities()) {
|
||||
if (ability instanceof ActivatedAbility && ability.getAbilityType() == AbilityType.MANA) {
|
||||
if (AbilityType.ACTIVATED_MANA.equals(ability.getAbilityType())) {
|
||||
ActivatedManaAbilityImpl manaAbility = (ActivatedManaAbilityImpl) ability;
|
||||
if (manaAbility.canActivate(targetPlayer.getId(), game).canActivate()) {
|
||||
// canActivate can't check for mana abilities that require a mana cost, if the payment isn't possible (Cabal Coffers etc)
|
||||
|
|
|
|||
|
|
@ -120,8 +120,7 @@ class DranaAndLinvalaGainAbilitiesEffect extends ContinuousEffectImpl {
|
|||
.map(permanent -> permanent.getAbilities(game))
|
||||
.flatMap(Collection::stream)
|
||||
.filter(Objects::nonNull)
|
||||
.filter(ability -> ability.getAbilityType() == AbilityType.ACTIVATED
|
||||
|| ability.getAbilityType() == AbilityType.MANA)
|
||||
.filter(Ability::isActivatedAbility)
|
||||
.collect(Collectors.toList())) {
|
||||
Ability addedAbility = perm.addAbility(ability, source.getSourceId(), game, true);
|
||||
if (addedAbility != null) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
package mage.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
|
|
@ -10,20 +9,13 @@ import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect;
|
|||
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.CostModificationType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.constants.Zone;
|
||||
import mage.constants.*;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.game.Game;
|
||||
import mage.target.common.TargetControlledPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author L_J
|
||||
*/
|
||||
public final class Drought extends CardImpl {
|
||||
|
|
@ -81,7 +73,7 @@ class DroughtAdditionalCostEffect extends CostModificationEffectImpl {
|
|||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
return (appliesToSpells && abilityToModify.getAbilityType() == AbilityType.SPELL)
|
||||
|| (!appliesToSpells && (abilityToModify.getAbilityType() == AbilityType.ACTIVATED || abilityToModify.getAbilityType() == AbilityType.MANA));
|
||||
|| (!appliesToSpells && abilityToModify.isActivatedAbility());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -1,15 +1,6 @@
|
|||
package mage.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.stack.StackAbility;
|
||||
import mage.watchers.common.ManaPaidSourceWatcher;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.DelayedTriggeredAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
|
|
@ -19,16 +10,18 @@ import mage.abilities.effects.AsThoughEffectImpl;
|
|||
import mage.abilities.effects.common.CopyStackObjectEffect;
|
||||
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AsThoughEffectType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.*;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.stack.StackAbility;
|
||||
import mage.watchers.common.ManaPaidSourceWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Xanderhall
|
||||
*/
|
||||
public final class DynaheirInvokerAdept extends CardImpl {
|
||||
|
|
@ -121,7 +114,7 @@ class DynaheirInvokerAdeptTriggeredAbility extends DelayedTriggeredAbility {
|
|||
}
|
||||
StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getSourceId());
|
||||
if (stackAbility == null
|
||||
|| stackAbility.getStackAbility() instanceof ActivatedManaAbilityImpl
|
||||
|| stackAbility.getStackAbility().isManaActivatedAbility()
|
||||
|| ManaPaidSourceWatcher.getTotalPaid(stackAbility.getId(), game) < 4) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
|
||||
package mage.cards.e;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
|
||||
import mage.abilities.keyword.ProtectionAbility;
|
||||
|
|
@ -18,8 +16,9 @@ import mage.game.Game;
|
|||
import mage.game.permanent.Permanent;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Styxo
|
||||
*/
|
||||
public final class EchoBaseCommando extends CardImpl {
|
||||
|
|
@ -84,7 +83,7 @@ class EchoBaseCommandoEffect extends CostModificationEffectImpl {
|
|||
|
||||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
if (abilityToModify.getAbilityType() == AbilityType.ACTIVATED || (abilityToModify.getAbilityType() == AbilityType.MANA && (abilityToModify instanceof ActivatedAbility))) {
|
||||
if (abilityToModify.isActivatedAbility()){
|
||||
Permanent permanent = game.getPermanent(abilityToModify.getSourceId());
|
||||
if (filter.match(permanent, source.getControllerId(), source, game)) {
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package mage.cards.e;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.common.TapTargetCost;
|
||||
|
|
@ -86,8 +85,7 @@ class EmbalmersToolsEffect extends CostModificationEffectImpl {
|
|||
|
||||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
if (abilityToModify.getAbilityType() == AbilityType.ACTIVATED
|
||||
|| (abilityToModify.getAbilityType() == AbilityType.MANA && (abilityToModify instanceof ActivatedAbility))) {
|
||||
if (abilityToModify.isActivatedAbility()){
|
||||
// Activated abilities of creatures
|
||||
Card card = game.getCard(abilityToModify.getSourceId());
|
||||
if (filter.match(card, source.getControllerId(), source, game) && game.getState().getZone(card.getId()) == Zone.GRAVEYARD) {
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
|
||||
package mage.cards.e;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
|
|
@ -20,14 +18,15 @@ import mage.game.Game;
|
|||
import mage.game.permanent.Permanent;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class ExperimentKraj extends CardImpl {
|
||||
|
||||
public ExperimentKraj(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{G}{U}{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{G}{U}{U}");
|
||||
this.supertype.add(SuperType.LEGENDARY);
|
||||
this.subtype.add(SubType.OOZE);
|
||||
this.subtype.add(SubType.MUTANT);
|
||||
|
|
@ -39,7 +38,7 @@ public final class ExperimentKraj extends CardImpl {
|
|||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ExperimentKrajEffect()));
|
||||
|
||||
// {tap}: Put a +1/+1 counter on target creature.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance()),new TapSourceCost());
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance()), new TapSourceCost());
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
@ -76,9 +75,9 @@ class ExperimentKrajEffect extends ContinuousEffectImpl {
|
|||
public boolean apply(Game game, Ability source) {
|
||||
Permanent perm = game.getPermanent(source.getSourceId());
|
||||
if (perm != null) {
|
||||
for (Permanent creature :game.getState().getBattlefield().getActivePermanents(filter, source.getControllerId(), source, game)){
|
||||
for (Ability ability: creature.getAbilities()) {
|
||||
if (ability instanceof ActivatedAbility) {
|
||||
for (Permanent creature : game.getState().getBattlefield().getActivePermanents(filter, source.getControllerId(), source, game)) {
|
||||
for (Ability ability : creature.getAbilities()) {
|
||||
if (ability.isActivatedAbility()) {
|
||||
perm.addAbility(ability, source.getSourceId(), game, true);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
|
||||
package mage.cards.f;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
|
|
@ -20,6 +18,9 @@ import mage.game.events.GameEvent;
|
|||
import mage.game.permanent.Permanent;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author LevelX2
|
||||
*/
|
||||
|
|
@ -83,7 +84,7 @@ class FaithsFettersEffect extends ContinuousRuleModifyingEffectImpl {
|
|||
Permanent enchantment = game.getPermanent(source.getSourceId());
|
||||
if (enchantment != null && enchantment.isAttachedTo(event.getSourceId())) {
|
||||
Optional<Ability> ability = game.getAbility(event.getTargetId(), event.getSourceId());
|
||||
if (ability.isPresent() && ability.get().getAbilityType() != AbilityType.MANA) {
|
||||
if (ability.isPresent() && ability.get().isManaAbility()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
|||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.effects.common.ExileSpellEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.cards.ModalDoubleFacedCard;
|
||||
import mage.constants.*;
|
||||
|
|
@ -97,7 +96,7 @@ class FlamescrollCelebrantTriggeredAbility extends TriggeredAbilityImpl {
|
|||
return false;
|
||||
}
|
||||
StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getSourceId());
|
||||
if (stackAbility.getStackAbility() instanceof ActivatedManaAbilityImpl) {
|
||||
if (stackAbility.getStackAbility().isManaActivatedAbility()) {
|
||||
return false;
|
||||
}
|
||||
getEffects().setTargetPointer(new FixedTarget(event.getPlayerId()));
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package mage.cards.f;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
||||
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
|
||||
|
|
@ -76,9 +75,7 @@ class ForensicGadgeteerEffect extends CostModificationEffectImpl {
|
|||
|
||||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
if (abilityToModify.getAbilityType() == AbilityType.ACTIVATED
|
||||
|| (abilityToModify.getAbilityType() == AbilityType.MANA
|
||||
&& (abilityToModify instanceof ActivatedAbility))) {
|
||||
if (abilityToModify.isActivatedAbility()){
|
||||
// Activated abilities of artifacts
|
||||
Permanent permanent = game.getPermanentOrLKIBattlefield(abilityToModify.getSourceId());
|
||||
return permanent != null
|
||||
|
|
|
|||
|
|
@ -66,15 +66,11 @@ class GloomCostIncreaseEffect extends CostModificationEffectImpl {
|
|||
|
||||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
boolean isWhiteEnchantment = false;
|
||||
boolean isActivated = abilityToModify.getAbilityType() == AbilityType.ACTIVATED;
|
||||
if (isActivated) {
|
||||
if (!abilityToModify.isActivatedAbility()) {
|
||||
return false;
|
||||
}
|
||||
MageObject permanent = game.getPermanent(abilityToModify.getSourceId());
|
||||
if (permanent != null) {
|
||||
isWhiteEnchantment = permanent.isEnchantment(game) && permanent.getColor(game).isWhite();
|
||||
}
|
||||
}
|
||||
return isActivated && isWhiteEnchantment;
|
||||
return permanent != null && permanent.isEnchantment(game) && permanent.getColor(game).isWhite();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -1,27 +1,26 @@
|
|||
|
||||
package mage.cards.h;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import mage.MageObject;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public final class HandToHand extends CardImpl {
|
||||
|
||||
public HandToHand(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}");
|
||||
|
||||
// During combat, players can't cast instant spells or activate abilities that aren't mana abilities.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new HandToHandEffect()));
|
||||
|
|
@ -79,9 +78,7 @@ class HandToHandEffect extends ContinuousRuleModifyingEffectImpl {
|
|||
}
|
||||
if (event.getType() == GameEvent.EventType.ACTIVATE_ABILITY) {
|
||||
Optional<Ability> ability = game.getAbility(event.getTargetId(), event.getSourceId());
|
||||
if (ability.isPresent() && !(ability.get() instanceof ActivatedManaAbilityImpl)) {
|
||||
return true;
|
||||
}
|
||||
return ability.isPresent() && !ability.get().isManaActivatedAbility();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import mage.abilities.TriggeredAbilityImpl;
|
|||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -72,7 +71,7 @@ class HarshMentorTriggeredAbility extends TriggeredAbilityImpl {
|
|||
Card source = game.getPermanentOrLKIBattlefield(event.getSourceId());
|
||||
if (source != null && (source.isArtifact(game) || source.isCreature(game) || source.isLand(game))) {
|
||||
StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getSourceId());
|
||||
if (!(stackAbility.getStackAbility() instanceof ActivatedManaAbilityImpl)) {
|
||||
if (!stackAbility.getStackAbility().isManaActivatedAbility()) {
|
||||
for (Effect effect : getEffects()) {
|
||||
effect.setTargetPointer(new FixedTarget(event.getPlayerId()));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package mage.cards.h;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -68,9 +67,7 @@ class HeartstoneEffect extends CostModificationEffectImpl {
|
|||
|
||||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
if (abilityToModify.getAbilityType() == AbilityType.ACTIVATED
|
||||
|| (abilityToModify.getAbilityType() == AbilityType.MANA
|
||||
&& (abilityToModify instanceof ActivatedAbility))) {
|
||||
if (abilityToModify.isActivatedAbility()) {
|
||||
// Activated abilities of creatures
|
||||
Permanent permanent = game.getPermanentOrLKIBattlefield(abilityToModify.getSourceId());
|
||||
return permanent != null && permanent.isCreature(game);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
package mage.cards.i;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.MageItem;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.TriggeredAbility;
|
||||
|
|
@ -28,8 +26,9 @@ import mage.game.events.GameEvent;
|
|||
import mage.target.common.TargetCardInYourGraveyard;
|
||||
import mage.target.targetpointer.FirstTargetPointer;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author DominionSpy
|
||||
*/
|
||||
public final class IllicitMasquerade extends CardImpl {
|
||||
|
|
@ -107,7 +106,7 @@ enum IllicitMasqueradePredicate implements ObjectSourcePlayerPredicate<MageItem>
|
|||
@Override
|
||||
public boolean apply(ObjectSourcePlayer<MageItem> input, Game game) {
|
||||
Ability ability = input.getSource();
|
||||
if (!(ability instanceof TriggeredAbility)) {
|
||||
if (!ability.isTriggeredAbility()) {
|
||||
return true;
|
||||
}
|
||||
GameEvent event = ((TriggeredAbility) ability).getTriggerEvent();
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import mage.abilities.TriggeredAbilityImpl;
|
|||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.common.CopyStackObjectEffect;
|
||||
import mage.abilities.keyword.EquipAbility;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -71,7 +70,7 @@ class IllusionistsBracersTriggeredAbility extends TriggeredAbilityImpl {
|
|||
return false;
|
||||
}
|
||||
StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getSourceId());
|
||||
if (stackAbility == null || stackAbility.getStackAbility() instanceof ActivatedManaAbilityImpl) {
|
||||
if (stackAbility == null || stackAbility.getStackAbility().isManaActivatedAbility()) {
|
||||
return false;
|
||||
}
|
||||
this.getEffects().setValue("stackObject", stackAbility);
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import mage.abilities.effects.common.DamageTargetEffect;
|
|||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
import mage.abilities.keyword.MenaceAbility;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -93,7 +92,7 @@ class ImmolationShamanTriggeredAbility extends TriggeredAbilityImpl {
|
|||
Card source = game.getPermanentOrLKIBattlefield(event.getSourceId());
|
||||
if (source != null && (source.isArtifact(game) || source.isCreature(game) || source.isLand(game))) {
|
||||
StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getSourceId());
|
||||
if (!(stackAbility.getStackAbility() instanceof ActivatedManaAbilityImpl)) {
|
||||
if (!stackAbility.getStackAbility().isManaActivatedAbility()) {
|
||||
for (Effect effect : getEffects()) {
|
||||
effect.setTargetPointer(new FixedTarget(event.getPlayerId()));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,21 +1,14 @@
|
|||
|
||||
package mage.cards.i;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.common.AttacksOrBlocksAttachedTriggeredAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.AttachEffect;
|
||||
import mage.abilities.effects.common.CounterTargetEffect;
|
||||
import mage.abilities.effects.common.DestroySourceEffect;
|
||||
import mage.abilities.effects.common.DoIfCostPaid;
|
||||
import mage.abilities.effects.common.RemoveFromCombatTargetEffect;
|
||||
import mage.abilities.effects.common.*;
|
||||
import mage.abilities.keyword.EnchantAbility;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
|
|
@ -29,8 +22,10 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
import mage.target.targetpointer.FixedTarget;
|
||||
import mage.watchers.common.BlockedByOnlyOneCreatureThisCombatWatcher;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author L_J
|
||||
*/
|
||||
public final class Imprison extends CardImpl {
|
||||
|
|
@ -91,7 +86,7 @@ class ImprisonTriggeredAbility extends TriggeredAbilityImpl {
|
|||
Permanent enchantedPermanent = game.getPermanentOrLKIBattlefield(enchantment.getAttachedTo());
|
||||
if (event.getSourceId().equals(enchantedPermanent.getId())) {
|
||||
StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getSourceId());
|
||||
if (!(stackAbility.getStackAbility() instanceof ActivatedManaAbilityImpl)) {
|
||||
if (!stackAbility.getStackAbility().isManaActivatedAbility()) {
|
||||
String abilityText = stackAbility.getRule(true);
|
||||
if (abilityText.contains("{T},") || abilityText.contains("{T}:") || abilityText.contains("{T} or")) {
|
||||
getEffects().get(0).setTargetPointer(new FixedTarget(stackAbility.getId()));
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ class IntercessorsArrestEffect extends ContinuousRuleModifyingEffectImpl {
|
|||
case ACTIVATE_ABILITY:
|
||||
if (enchantment.isAttachedTo(event.getSourceId())) {
|
||||
Optional<Ability> ability = game.getAbility(event.getTargetId(), event.getSourceId());
|
||||
return ability.isPresent() && ability.get().getAbilityType() != AbilityType.MANA;
|
||||
return ability.isPresent() && ability.get().isNonManaActivatedAbility();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ import mage.abilities.effects.RestrictionEffect;
|
|||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
|
|
@ -61,7 +60,7 @@ class InterdictPredicate implements Predicate<StackObject> {
|
|||
|
||||
@Override
|
||||
public boolean apply(StackObject input, Game game) {
|
||||
if (input instanceof StackAbility && ((StackAbility) input).getAbilityType() == AbilityType.ACTIVATED) {
|
||||
if (input instanceof StackAbility && ((StackAbility) input).isActivatedAbility()){
|
||||
MageObject sourceObject = ((StackAbility) input).getSourceObject(game);
|
||||
if (sourceObject != null) {
|
||||
return (sourceObject.isArtifact(game)
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ import mage.abilities.mana.builder.ConditionalManaBuilder;
|
|||
import mage.abilities.mana.conditional.ManaCondition;
|
||||
import mage.cards.AdventureCard;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
|
|
@ -90,12 +89,9 @@ class JamesWanderingDadManaCondition extends ManaCondition implements Condition
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
if (source != null && !source.isActivated()) {
|
||||
// ex: SimpleManaAbility is an ACTIVATED ability, but it is categorized as a MANA ability
|
||||
return source.getAbilityType() == AbilityType.MANA
|
||||
|| source.getAbilityType() == AbilityType.ACTIVATED;
|
||||
}
|
||||
return false;
|
||||
return source != null
|
||||
&& !source.isActivated()
|
||||
&& source.isActivatedAbility();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ class KopalaWardenOfWavesCostModificationEffect2 extends CostModificationEffectI
|
|||
|
||||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
return abilityToModify.getAbilityType() == AbilityType.ACTIVATED
|
||||
return abilityToModify.isActivatedAbility()
|
||||
&& KopalaWardenOfWaves.isAbilityCompatible(abilityToModify, source, game);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import mage.abilities.TriggeredAbilityImpl;
|
|||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.CopyStackObjectEffect;
|
||||
import mage.abilities.effects.common.DoIfCostPaid;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -78,7 +77,7 @@ class KurkeshOnakkeAncientTriggeredAbility extends TriggeredAbilityImpl {
|
|||
return false;
|
||||
}
|
||||
StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getSourceId());
|
||||
if (stackAbility == null || stackAbility.getStackAbility() instanceof ActivatedManaAbilityImpl) {
|
||||
if (stackAbility == null || stackAbility.getStackAbility().isManaActivatedAbility()) {
|
||||
return false;
|
||||
}
|
||||
this.getEffects().setValue("stackObject", stackAbility);
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import mage.abilities.effects.common.CopyStackObjectEffect;
|
|||
import mage.abilities.hint.StaticHint;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.abilities.keyword.VigilanceAbility;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.choices.Choice;
|
||||
|
|
@ -139,8 +138,7 @@ class LeoriSparktouchedHunterTriggeredAbility extends DelayedTriggeredAbility {
|
|||
}
|
||||
|
||||
StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getSourceId());
|
||||
if (stackAbility == null
|
||||
|| stackAbility.getStackAbility() instanceof ActivatedManaAbilityImpl) {
|
||||
if (stackAbility == null || stackAbility.getStackAbility().isManaActivatedAbility()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import mage.abilities.TriggeredAbilityImpl;
|
|||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.ContinuousEffectImpl;
|
||||
import mage.abilities.effects.common.CopyStackObjectEffect;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -82,7 +81,7 @@ class LocusOfEnlightenmentEffect extends ContinuousEffectImpl {
|
|||
}
|
||||
for (Card card : exileZone.getCards(game)) {
|
||||
for (Ability ability : card.getAbilities(game)) {
|
||||
if (ability.getAbilityType() == AbilityType.ACTIVATED || ability.getAbilityType() == AbilityType.MANA) {
|
||||
if (ability.isActivatedAbility()) {
|
||||
ActivatedAbility copyAbility = (ActivatedAbility) ability.copy();
|
||||
copyAbility.setMaxActivationsPerTurn(1);
|
||||
permanent.addAbility(copyAbility, source.getSourceId(), game, true);
|
||||
|
|
@ -120,7 +119,7 @@ class LocusOfEnlightenmentTriggeredAbility extends TriggeredAbilityImpl {
|
|||
return false;
|
||||
}
|
||||
StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getSourceId());
|
||||
if (stackAbility == null || stackAbility.getStackAbility() instanceof ActivatedManaAbilityImpl) {
|
||||
if (stackAbility == null || stackAbility.isManaAbility()) {
|
||||
return false;
|
||||
}
|
||||
this.getEffects().setValue("stackObject", stackAbility);
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import mage.abilities.effects.common.UntapTargetEffect;
|
|||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
|
|
@ -64,12 +63,10 @@ class HasAbilityWithTapSymbolPredicate implements Predicate<MageObject> {
|
|||
}
|
||||
|
||||
for (Ability ability : abilities) {
|
||||
if ((ability.getAbilityType() == AbilityType.ACTIVATED || ability.getAbilityType() == AbilityType.MANA) && !ability.getCosts().isEmpty()) {
|
||||
if (ability.hasTapCost()) {
|
||||
if (ability.isActivatedAbility() && ability.hasTapCost()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,13 +16,12 @@ import mage.constants.*;
|
|||
import mage.counters.CounterType;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.game.stack.Spell;
|
||||
import mage.game.stack.StackAbility;
|
||||
import mage.game.stack.StackObject;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
|
|
@ -93,7 +92,7 @@ class MagusLuceaKaneTriggeredAbility extends DelayedTriggeredAbility {
|
|||
// activated ability
|
||||
if (event.getType() == GameEvent.EventType.ACTIVATED_ABILITY) {
|
||||
StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getSourceId());
|
||||
if (stackAbility != null && !(stackAbility.getStackAbility() instanceof ActivatedManaAbilityImpl)) {
|
||||
if (stackAbility != null && !stackAbility.getStackAbility().isManaActivatedAbility()) {
|
||||
if (stackAbility.getManaCostsToPay().containsX()) {
|
||||
this.getEffects().setValue("stackObject", (StackObject) stackAbility);
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ class MairsilThePretenderGainAbilitiesEffect extends ContinuousEffectImpl {
|
|||
for (Card card : game.getExile().getAllCards(game)) {
|
||||
if (filter.match(card, game) && Objects.equals(card.getOwnerId(), perm.getControllerId())) {
|
||||
for (Ability ability : card.getAbilities(game)) {
|
||||
if (ability instanceof ActivatedAbility) {
|
||||
if (ability.isActivatedAbility()) {
|
||||
ActivatedAbility copyAbility = (ActivatedAbility) ability.copy();
|
||||
copyAbility.setMaxActivationsPerTurn(1);
|
||||
perm.addAbility(copyAbility, source.getSourceId(), game, true);
|
||||
|
|
|
|||
|
|
@ -82,8 +82,7 @@ class ManascapeRefractorGainAbilitiesEffect extends ContinuousEffectImpl {
|
|||
.map(permanent -> permanent.getAbilities(game))
|
||||
.flatMap(Collection::stream)
|
||||
.filter(Objects::nonNull)
|
||||
.filter(ability -> ability.getAbilityType() == AbilityType.ACTIVATED
|
||||
|| ability.getAbilityType() == AbilityType.MANA)
|
||||
.filter(Ability::isActivatedAbility)
|
||||
.collect(Collectors.toList())) {
|
||||
// optimization to disallow the adding of duplicate, unnecessary basic mana abilities
|
||||
if (!(ability instanceof BasicManaAbility)
|
||||
|
|
|
|||
|
|
@ -1,13 +1,6 @@
|
|||
package mage.cards.m;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.ContinuousEffectImpl;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -18,6 +11,12 @@ import mage.game.Game;
|
|||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
|
|
@ -70,7 +69,7 @@ class MirranSafehouseEffect extends ContinuousEffectImpl {
|
|||
.flatMap(Collection::stream)
|
||||
.map(card -> card.getAbilities(game))
|
||||
.flatMap(Collection::stream)
|
||||
.filter(ActivatedAbility.class::isInstance)
|
||||
.filter(Ability::isActivatedAbility)
|
||||
.collect(Collectors.toSet());
|
||||
for (Ability ability : abilities) {
|
||||
permanent.addAbility(ability, source.getSourceId(), game, true);
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
|||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.abilities.keyword.KickerAbility;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -84,9 +83,8 @@ class MoltenDisasterSplitSecondEffect extends ContinuousRuleModifyingEffectImpl
|
|||
}
|
||||
if (event.getType() == GameEvent.EventType.ACTIVATE_ABILITY) {
|
||||
Optional<Ability> ability = game.getAbility(event.getTargetId(), event.getSourceId());
|
||||
if (ability.isPresent() && !(ability.get() instanceof ActivatedManaAbilityImpl)) {
|
||||
return KickedCondition.ONCE.apply(game, source);
|
||||
}
|
||||
return ability.isPresent() && !ability.get().isManaActivatedAbility()
|
||||
&& KickedCondition.ONCE.apply(game, source);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
package mage.cards.m;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
|
|
@ -18,8 +16,9 @@ import mage.game.Game;
|
|||
import mage.game.permanent.Permanent;
|
||||
import mage.target.common.TargetCardInGraveyard;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public final class MyrWelder extends CardImpl {
|
||||
|
|
@ -102,7 +101,7 @@ class MyrWelderContinuousEffect extends ContinuousEffectImpl {
|
|||
Card card = game.getCard(imprintedId);
|
||||
if (card != null) {
|
||||
for (Ability ability : card.getAbilities(game)) {
|
||||
if (ability instanceof ActivatedAbility) {
|
||||
if (ability.isActivatedAbility()) {
|
||||
perm.addAbility(ability, source.getId(), game, true);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package mage.cards.n;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.ContinuousEffectImpl;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -76,7 +75,7 @@ class NecroticOozeEffect extends ContinuousEffectImpl {
|
|||
.flatMap(Collection::stream)
|
||||
.map(card -> card.getAbilities(game))
|
||||
.flatMap(Collection::stream)
|
||||
.filter(ActivatedAbility.class::isInstance)
|
||||
.filter(Ability::isActivatedAbility)
|
||||
.collect(Collectors.toSet());
|
||||
for (Ability ability : abilities) {
|
||||
permanent.addAbility(ability, source.getSourceId(), game, true);
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import mage.abilities.mana.builder.ConditionalManaBuilder;
|
|||
import mage.abilities.mana.conditional.ManaCondition;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.game.Game;
|
||||
|
|
@ -74,8 +73,7 @@ class OmenHawkerManaCondition extends ManaCondition implements Condition {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
if (source != null && !source.isActivated()) {
|
||||
return source.getAbilityType() == AbilityType.MANA
|
||||
|| source.getAbilityType() == AbilityType.ACTIVATED;
|
||||
return source.isActivatedAbility();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,7 @@
|
|||
|
||||
package mage.cards.o;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.SpellAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.AttachEffect;
|
||||
|
|
@ -13,27 +10,22 @@ import mage.abilities.effects.common.cost.CostModificationEffectImpl;
|
|||
import mage.abilities.keyword.EnchantAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AttachmentType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.CostModificationType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.constants.*;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class OppressiveRays extends CardImpl {
|
||||
|
||||
public OppressiveRays(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{W}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}");
|
||||
this.subtype.add(SubType.AURA);
|
||||
|
||||
// Enchant creature
|
||||
|
|
@ -80,13 +72,9 @@ class OppressiveRaysCostModificationEffect extends CostModificationEffectImpl {
|
|||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
Permanent creature = game.getPermanent(abilityToModify.getSourceId());
|
||||
if (creature != null && creature.getAttachments().contains(source.getSourceId())) {
|
||||
if (abilityToModify instanceof ActivatedAbility
|
||||
&& !(abilityToModify instanceof SpellAbility)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return creature != null
|
||||
&& creature.getAttachments().contains(source.getSourceId())
|
||||
&& abilityToModify.isActivatedAbility();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import mage.abilities.effects.ContinuousEffectImpl;
|
|||
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
||||
import mage.abilities.effects.common.AttachEffect;
|
||||
import mage.abilities.keyword.EnchantAbility;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
|
|
@ -23,7 +22,6 @@ import java.util.Optional;
|
|||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class OverwhelmingSplendor extends CardImpl {
|
||||
|
|
@ -149,7 +147,7 @@ class OverwhelmingSplendorCantActivateEffect extends ContinuousRuleModifyingEffe
|
|||
|
||||
Optional<Ability> ability = game.getAbility(event.getTargetId(), event.getSourceId());
|
||||
return ability.isPresent()
|
||||
&& !(ability.get() instanceof ActivatedManaAbilityImpl)
|
||||
&& !(ability.get().isManaActivatedAbility())
|
||||
&& !(ability.get() instanceof LoyaltyAbility);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package mage.cards.p;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
|
|
@ -76,7 +75,7 @@ class PatchworkCrawlerEffect extends ContinuousEffectImpl {
|
|||
}
|
||||
for (Card card : exileZone.getCards(StaticFilters.FILTER_CARD_CREATURE, game)) {
|
||||
for (Ability ability : card.getAbilities(game)) {
|
||||
if (ability instanceof ActivatedAbility) {
|
||||
if (ability.isActivatedAbility()) {
|
||||
permanent.addAbility(ability, source.getSourceId(), game, true);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import mage.abilities.common.AsEntersBattlefieldAbility;
|
|||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
||||
import mage.abilities.effects.common.ChooseACardNameEffect;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -71,12 +70,10 @@ class PithingNeedleEffect extends ContinuousRuleModifyingEffectImpl {
|
|||
MageObject object = game.getObject(event.getSourceId());
|
||||
String cardName = (String) game.getState().getValue(source.getSourceId().toString() + ChooseACardNameEffect.INFO_KEY);
|
||||
Optional<Ability> ability = game.getAbility(event.getTargetId(), event.getSourceId());
|
||||
if (ability.isPresent()
|
||||
&& object != null) {
|
||||
return game.getState().getPlayersInRange(source.getControllerId(), game).contains(event.getPlayerId()) // controller in range
|
||||
&& !(ability.get() instanceof ActivatedManaAbilityImpl) // not an activated mana ability
|
||||
return ability.isPresent()
|
||||
&& object != null
|
||||
&& game.getState().getPlayersInRange(source.getControllerId(), game).contains(event.getPlayerId()) // controller in range
|
||||
&& !ability.get().isManaActivatedAbility() // not an activated mana ability
|
||||
&& CardUtil.haveSameNames(object, cardName, game);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
package mage.cards.p;
|
||||
|
||||
import mage.Mana;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.AttachEffect;
|
||||
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
|
||||
|
|
@ -81,9 +79,7 @@ class PowerArtifactCostModificationEffect extends CostModificationEffectImpl {
|
|||
Permanent artifact = game.getPermanentOrLKIBattlefield(abilityToModify.getSourceId());
|
||||
if (artifact != null
|
||||
&& artifact.getAttachments().contains(source.getSourceId())) {
|
||||
if (abilityToModify.getAbilityType() == AbilityType.ACTIVATED
|
||||
|| (abilityToModify.getAbilityType() == AbilityType.MANA
|
||||
&& (abilityToModify instanceof ActivatedAbility))) {
|
||||
if (abilityToModify.isActivatedAbility()){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import mage.abilities.Abilities;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.costs.Cost;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -87,7 +86,7 @@ class PowerSinkCounterUnlessPaysEffect extends OneShotEffect {
|
|||
for (Permanent land : lands) {
|
||||
Abilities<Ability> landAbilities = land.getAbilities();
|
||||
for (Ability ability : landAbilities) {
|
||||
if (ability instanceof ActivatedManaAbilityImpl) {
|
||||
if (ability.isManaActivatedAbility()) {
|
||||
land.tap(source, game);
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import mage.abilities.effects.common.FightTargetSourceEffect;
|
|||
import mage.abilities.keyword.RiotAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterPermanent;
|
||||
|
|
@ -78,7 +77,6 @@ enum RavagerWurmPredicate implements Predicate<Permanent> {
|
|||
&& input
|
||||
.getAbilities(game)
|
||||
.stream()
|
||||
.map(Ability::getAbilityType)
|
||||
.anyMatch(AbilityType.ACTIVATED::equals);
|
||||
.anyMatch(Ability::isNonManaActivatedAbility);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ class RexCyberhoundContinuousEffect extends ContinuousEffectImpl {
|
|||
}
|
||||
for (Card card : game.getExile().getCards(filter, game)) {
|
||||
for (Ability ability : card.getAbilities(game)) {
|
||||
if (ability instanceof ActivatedAbility) {
|
||||
if (ability.isActivatedAbility()) {
|
||||
ActivatedAbility copyAbility = (ActivatedAbility) ability.copy();
|
||||
copyAbility.setMaxActivationsPerTurn(1);
|
||||
perm.addAbility(copyAbility, source.getSourceId(), game, true);
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import mage.abilities.TriggeredAbilityImpl;
|
|||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.common.CopyStackObjectEffect;
|
||||
import mage.abilities.effects.common.DoIfCostPaid;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -63,7 +62,7 @@ class RingsOfBrighthearthTriggeredAbility extends TriggeredAbilityImpl {
|
|||
return false;
|
||||
}
|
||||
StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getSourceId());
|
||||
if (stackAbility == null || stackAbility.getStackAbility() instanceof ActivatedManaAbilityImpl) {
|
||||
if (stackAbility == null || stackAbility.getStackAbility().isManaActivatedAbility()) {
|
||||
return false;
|
||||
}
|
||||
this.getEffects().setValue("stackObject", stackAbility);
|
||||
|
|
|
|||
|
|
@ -79,9 +79,8 @@ class RobaranMercenariesEffect extends ContinuousEffectImpl {
|
|||
.map(permanent -> permanent.getAbilities(game))
|
||||
.flatMap(Collection::stream)
|
||||
.filter(Objects::nonNull)
|
||||
.filter(ability -> ability.getAbilityType() == AbilityType.ACTIVATED
|
||||
|| ability.getAbilityType() == AbilityType.MANA)
|
||||
.collect(Collectors.toList())) {
|
||||
.filter(ability -> ability.isActivatedAbility())
|
||||
.collect(Collectors.toList())){
|
||||
// optimization to disallow the adding of duplicate, unnecessary basic mana abilities
|
||||
if (!(ability instanceof BasicManaAbility)
|
||||
|| perm.getAbilities(game)
|
||||
|
|
|
|||
|
|
@ -1,13 +1,11 @@
|
|||
package mage.cards.r;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.MageObject;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
|
|
@ -15,8 +13,9 @@ import mage.game.Game;
|
|||
import mage.game.events.GameEvent;
|
||||
import mage.game.stack.StackAbility;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class RunicArmasaur extends CardImpl {
|
||||
|
|
@ -67,7 +66,7 @@ class RunicArmasaurTriggeredAbility extends TriggeredAbilityImpl {
|
|||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getSourceId());
|
||||
if (stackAbility != null
|
||||
&& stackAbility.getAbilityType() == AbilityType.ACTIVATED
|
||||
&& stackAbility.isNonManaActivatedAbility()
|
||||
&& game.getOpponents(this.getControllerId()).contains(stackAbility.getControllerId())
|
||||
&& stackAbility.getSourcePermanentOrLKI(game) != null) { // must be a permanent
|
||||
MageObject abilitySourceObject = stackAbility.getSourceObject(game);
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package mage.cards.s;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.common.BeginningOfCombatTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
|
|
@ -78,7 +77,7 @@ class SamLoyalAttendantEffect extends CostModificationEffectImpl {
|
|||
|
||||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
if (!(abilityToModify instanceof ActivatedAbility)) {
|
||||
if (!(abilityToModify.isActivatedAbility())) {
|
||||
return false;
|
||||
}
|
||||
Permanent permanent = abilityToModify.getSourcePermanentIfItStillExists(game);
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import mage.abilities.effects.AsThoughEffectImpl;
|
|||
import mage.abilities.effects.AsThoughManaEffect;
|
||||
import mage.abilities.effects.ContinuousEffectImpl;
|
||||
import mage.abilities.effects.ReplacementEffectImpl;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
|
|
@ -25,12 +24,12 @@ import java.util.UUID;
|
|||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Susucr
|
||||
*/
|
||||
public final class SharkeyTyrantOfTheShire extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterPermanent("lands your opponents control");
|
||||
|
||||
static {
|
||||
filter.add(CardType.LAND.getPredicate());
|
||||
filter.add(TargetController.OPPONENT.getControllerPredicate());
|
||||
|
|
@ -98,9 +97,9 @@ class SharkeyTyrantOfTheShireReplacementEffect extends ReplacementEffectImpl {
|
|||
@Override
|
||||
public boolean applies(GameEvent event, Ability source, Game game) {
|
||||
MageObject object = game.getObject(event.getSourceId());
|
||||
if (object instanceof Permanent && filter.match((Permanent)object, source.getControllerId(), source, game)) {
|
||||
if (object instanceof Permanent && filter.match((Permanent) object, source.getControllerId(), source, game)) {
|
||||
Optional<Ability> ability = object.getAbilities().get(event.getTargetId());
|
||||
if (ability.isPresent() && !(ability.get() instanceof ActivatedManaAbilityImpl)) {
|
||||
if (ability.isPresent() && !ability.get().isManaActivatedAbility()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -143,7 +142,7 @@ class SharkeyTyrantOfTheShireContinousEffect extends ContinuousEffectImpl {
|
|||
.map(permanent -> permanent.getAbilities(game))
|
||||
.flatMap(Collection::stream)
|
||||
.filter(Objects::nonNull)
|
||||
.filter(ability -> ability.getAbilityType() == AbilityType.ACTIVATED) // Mana abilities are separated in their own AbilityType.Mana
|
||||
.filter(Ability::isNonManaActivatedAbility)
|
||||
.collect(Collectors.toList())) {
|
||||
perm.addAbility(ability, source.getSourceId(), game, true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,11 +72,7 @@ class ArtifactAbilityManaCondition extends ManaCondition implements Condition {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
switch (source.getAbilityType()) {
|
||||
case ACTIVATED:
|
||||
case MANA:
|
||||
break;
|
||||
default:
|
||||
if (!source.isActivatedAbility()) {
|
||||
return false;
|
||||
}
|
||||
MageObject object = game.getObject(source);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
package mage.cards.s;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import mage.MageObject;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.AsEntersBattlefieldAbility;
|
||||
|
|
@ -10,11 +8,17 @@ import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
|||
import mage.abilities.effects.common.ChooseACardNameEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
|
|
@ -68,7 +72,7 @@ class SorcerousSpyglassActivationEffect extends ContinuousRuleModifyingEffectImp
|
|||
Optional<Ability> ability = game.getAbility(event.getTargetId(), event.getSourceId());
|
||||
if (ability.isPresent() && object != null) {
|
||||
return game.getState().getPlayersInRange(source.getControllerId(), game).contains(event.getPlayerId()) // controller in range
|
||||
&& ability.get().getAbilityType() != AbilityType.MANA
|
||||
&& !ability.get().isManaAbility()
|
||||
&& CardUtil.haveSameNames(object, cardName, game);
|
||||
}
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ class StrictProctorTriggeredAbility extends TriggeredAbilityImpl {
|
|||
return false;
|
||||
}
|
||||
Ability ability = stackObject.getStackAbility();
|
||||
if (!(ability instanceof TriggeredAbility)) {
|
||||
if (!ability.isTriggeredAbility()) {
|
||||
return false;
|
||||
}
|
||||
GameEvent triggerEvent = ((TriggeredAbility) ability).getTriggerEvent();
|
||||
|
|
|
|||
|
|
@ -1,29 +1,24 @@
|
|||
|
||||
package mage.cards.s;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.CostModificationType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.constants.*;
|
||||
import mage.game.Game;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class SuppressionField extends CardImpl {
|
||||
|
||||
public SuppressionField(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{W}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}");
|
||||
|
||||
// Activated abilities cost {2} more to activate unless they're mana abilities.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SuppressionFieldCostReductionEffect()));
|
||||
|
|
@ -58,7 +53,7 @@ class SuppressionFieldCostReductionEffect extends CostModificationEffectImpl {
|
|||
|
||||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
return abilityToModify.getAbilityType() == AbilityType.ACTIVATED;
|
||||
return abilityToModify.isNonManaActivatedAbility();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -80,8 +80,7 @@ class TazriStalwartSurvivorManaAbility extends ActivatedManaAbilityImpl {
|
|||
&& permanent
|
||||
.getAbilities(game)
|
||||
.stream()
|
||||
.filter(ability -> ability.getAbilityType() == AbilityType.ACTIVATED
|
||||
|| ability.getAbilityType() == AbilityType.MANA)
|
||||
.filter(ability -> ability.isActivatedAbility())
|
||||
.map(Ability::getOriginalId)
|
||||
.anyMatch(abilityId -> !source.getOriginalId().equals(abilityId));
|
||||
}
|
||||
|
|
@ -124,11 +123,7 @@ class TazriStalwartSurvivorManaEffect extends ManaEffect {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
switch (source.getAbilityType()) {
|
||||
case ACTIVATED:
|
||||
case MANA:
|
||||
break;
|
||||
default:
|
||||
if (!source.isActivatedAbility()) {
|
||||
return false;
|
||||
}
|
||||
MageObject object = game.getObject(source);
|
||||
|
|
@ -271,8 +266,7 @@ class TazriStalwartSurvivorMillEffect extends OneShotEffect {
|
|||
.getCard(uuid)
|
||||
.getAbilities(game)
|
||||
.stream()
|
||||
.map(Ability::getAbilityType)
|
||||
.noneMatch(AbilityType.ACTIVATED::equals));
|
||||
.noneMatch(Ability::isNonManaActivatedAbility));
|
||||
player.moveCards(cards, Zone.HAND, source, game);
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ class TerritoryForgeStaticEffect extends ContinuousEffectImpl {
|
|||
}
|
||||
for (Card card : exileZone.getCards(game)) {
|
||||
for (Ability ability : card.getAbilities(game)) {
|
||||
if (ability.getAbilityType() == AbilityType.ACTIVATED || ability.getAbilityType() == AbilityType.MANA) {
|
||||
if (ability.isActivatedAbility()){
|
||||
ActivatedAbility copyAbility = (ActivatedAbility) ability.copy();
|
||||
permanent.addAbility(copyAbility, source.getSourceId(), game, true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package mage.cards.t;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.LoyaltyAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.common.DiscardCardCost;
|
||||
|
|
@ -97,7 +96,7 @@ class TezzeretBetrayerOfFleshReductionEffect extends CostModificationEffectImpl
|
|||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
return abilityToModify.isControlledBy(source.getControllerId())
|
||||
&& abilityToModify instanceof ActivatedAbility
|
||||
&& abilityToModify.isActivatedAbility()
|
||||
&& TezzeretBetrayerOfFleshWatcher.checkPlayer(game, abilityToModify);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package mage.cards.t;
|
|||
|
||||
import mage.MageObjectReference;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.TriggeredAbility;
|
||||
import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
|
|
@ -25,7 +24,6 @@ import mage.game.permanent.token.Token;
|
|||
import mage.game.permanent.token.VecnaToken;
|
||||
import mage.game.permanent.token.ZombieToken;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.target.common.TargetSacrifice;
|
||||
import mage.watchers.common.PlayerLostLifeWatcher;
|
||||
|
||||
|
|
@ -187,7 +185,7 @@ class TheBookOfVileDarknessEffect extends OneShotEffect {
|
|||
continue;
|
||||
}
|
||||
for (Ability ability : card.getAbilities(game)) {
|
||||
if (ability instanceof TriggeredAbility) {
|
||||
if (ability.isTriggeredAbility()) {
|
||||
Ability copyAbility = ability.copy();
|
||||
copyAbility.newId();
|
||||
copyAbility.setControllerId(source.getControllerId());
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ import mage.abilities.mana.conditional.ManaCondition;
|
|||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.filter.predicate.Predicate;
|
||||
|
|
@ -66,7 +65,7 @@ enum TheEnigmaJewelPredicate implements Predicate<MageObject> {
|
|||
&& input instanceof Card
|
||||
&& ((Card) input).getAbilities(game)
|
||||
.stream()
|
||||
.anyMatch(a -> (a.getAbilityType() == AbilityType.ACTIVATED || a.getAbilityType() == AbilityType.MANA));
|
||||
.anyMatch(a -> (a.isActivatedAbility()));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -98,8 +97,7 @@ class TheEnigmaJewelManaCondition extends ManaCondition implements Condition {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
if (source != null && !source.isActivated()) {
|
||||
return source.getAbilityType() == AbilityType.MANA
|
||||
|| source.getAbilityType() == AbilityType.ACTIVATED;
|
||||
return source.isActivatedAbility();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package mage.cards.t;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.TriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
||||
import mage.abilities.effects.common.ruleModifying.LegendRuleDoesntApplyEffect;
|
||||
|
|
@ -109,7 +108,7 @@ class TheMasterMultipliedEffect extends ContinuousRuleModifyingEffectImpl {
|
|||
|
||||
return controller != null && permanent != null
|
||||
&& filter.match(permanent, source.getControllerId(), source, game)
|
||||
&& stackAbility instanceof TriggeredAbility
|
||||
&& stackAbility.isTriggeredAbility()
|
||||
&& source.getControllerId().equals(eventSourceControllerId);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ class TitheTakerCostReductionEffect extends CostModificationEffectImpl {
|
|||
SpellAbility spellAbility = (SpellAbility) abilityToModify;
|
||||
CardUtil.adjustCost(spellAbility, -1);
|
||||
}
|
||||
if (abilityToModify.getAbilityType() == AbilityType.ACTIVATED) {
|
||||
if (abilityToModify.isNonManaActivatedAbility()) {
|
||||
CardUtil.increaseCost(abilityToModify, 1);
|
||||
}
|
||||
return true;
|
||||
|
|
@ -73,14 +73,9 @@ class TitheTakerCostReductionEffect extends CostModificationEffectImpl {
|
|||
|
||||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
if (!MyTurnCondition.instance.apply(game, source)) {
|
||||
return false;
|
||||
}
|
||||
if (!(abilityToModify.getAbilityType() == AbilityType.SPELL)
|
||||
&& !(abilityToModify.getAbilityType() == AbilityType.ACTIVATED)) {
|
||||
return false;
|
||||
}
|
||||
return game.getOpponents(source.getControllerId()).contains(abilityToModify.getControllerId());
|
||||
return MyTurnCondition.instance.apply(game, source)
|
||||
&& (abilityToModify.getAbilityType() == AbilityType.SPELL || abilityToModify.isNonManaActivatedAbility())
|
||||
&& game.getOpponents(source.getControllerId()).contains(abilityToModify.getControllerId());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
package mage.cards.t;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.CostModificationType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
|
|
@ -68,9 +70,7 @@ class TrainingGroundsEffect extends CostModificationEffectImpl {
|
|||
|
||||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
if (abilityToModify.getAbilityType() != AbilityType.ACTIVATED
|
||||
&& (abilityToModify.getAbilityType() != AbilityType.MANA
|
||||
|| !(abilityToModify instanceof ActivatedAbility))) {
|
||||
if (!abilityToModify.isActivatedAbility()) {
|
||||
return false;
|
||||
}
|
||||
//Activated abilities of creatures you control
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package mage.cards.t;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.ContinuousEffectImpl;
|
||||
import mage.abilities.keyword.DeathtouchAbility;
|
||||
|
|
@ -74,7 +73,7 @@ class TrazynTheInfiniteEffect extends ContinuousEffectImpl {
|
|||
.stream()
|
||||
.map(card -> card.getAbilities(game))
|
||||
.flatMap(Collection::stream)
|
||||
.filter(ActivatedAbility.class::isInstance)
|
||||
.filter(Ability::isActivatedAbility)
|
||||
.collect(Collectors.toSet());
|
||||
for (Ability ability : abilities) {
|
||||
permanent.addAbility(ability, source.getSourceId(), game, true);
|
||||
|
|
|
|||
|
|
@ -1,34 +1,27 @@
|
|||
|
||||
package mage.cards.t;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.PlayLandAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.Zone;
|
||||
import mage.constants.*;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class TsabosWeb extends CardImpl {
|
||||
|
||||
public TsabosWeb(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}");
|
||||
|
||||
// When Tsabo's Web enters the battlefield, draw a card.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1), false));
|
||||
|
|
@ -72,10 +65,8 @@ class TsabosWebPreventUntapEffect extends ContinuousRuleModifyingEffectImpl {
|
|||
if (game.getTurnStepType() == PhaseStep.UNTAP) {
|
||||
Permanent permanent = game.getPermanent(event.getTargetId());
|
||||
if (permanent != null && permanent.isLand(game)) {
|
||||
for (Ability ability :permanent.getAbilities()) {
|
||||
if (!(ability instanceof PlayLandAbility)
|
||||
&& !(ability instanceof ActivatedManaAbilityImpl)
|
||||
&& ability instanceof ActivatedAbility) {
|
||||
for (Ability ability : permanent.getAbilities()) {
|
||||
if (ability.isNonManaActivatedAbility()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import mage.abilities.TriggeredAbilityImpl;
|
|||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.ReplacementEffectImpl;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -90,7 +89,7 @@ class UnboundFlourishingCopyAbility extends TriggeredAbilityImpl {
|
|||
UnboundFlourishingCopyAbility() {
|
||||
super(Zone.BATTLEFIELD, new UnboundFlourishingCopyEffect(), false);
|
||||
setTriggerPhrase("Whenever you cast an instant or sorcery spell or activate an ability, " +
|
||||
"if that spell's mana cost or that ability's activation cost contains {X}" );
|
||||
"if that spell's mana cost or that ability's activation cost contains {X}");
|
||||
}
|
||||
|
||||
private UnboundFlourishingCopyAbility(final UnboundFlourishingCopyAbility ability) {
|
||||
|
|
@ -117,7 +116,7 @@ class UnboundFlourishingCopyAbility extends TriggeredAbilityImpl {
|
|||
// activated ability
|
||||
if (event.getType() == GameEvent.EventType.ACTIVATED_ABILITY) {
|
||||
StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getSourceId());
|
||||
if (stackAbility != null && !(stackAbility.getStackAbility() instanceof ActivatedManaAbilityImpl)) {
|
||||
if (stackAbility != null && !stackAbility.getStackAbility().isManaActivatedAbility()) {
|
||||
if (stackAbility.getManaCostsToPay().containsX()) {
|
||||
game.getState().setValue(this.getSourceId() + UnboundFlourishing.needPrefix, stackAbility);
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import mage.abilities.effects.common.DoIfCostPaid;
|
|||
import mage.abilities.keyword.DeathtouchAbility;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.abilities.keyword.LifelinkAbility;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -84,7 +83,7 @@ class VerrakWarpedSengirTriggeredAbility extends TriggeredAbilityImpl {
|
|||
return false;
|
||||
}
|
||||
StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getSourceId());
|
||||
if (stackAbility == null || stackAbility.getStackAbility() instanceof ActivatedManaAbilityImpl) {
|
||||
if (stackAbility == null || stackAbility.getStackAbility().isManaActivatedAbility()) {
|
||||
return false;
|
||||
}
|
||||
int lifePaid = CardUtil.castStream(
|
||||
|
|
|
|||
|
|
@ -78,9 +78,7 @@ enum ZirdaTheDawnwakerCompanionCondition implements CompanionCondition {
|
|||
.allMatch(card -> card
|
||||
.getAbilities()
|
||||
.stream()
|
||||
.anyMatch(ability -> ability.getAbilityType() == AbilityType.ACTIVATED
|
||||
|| ability.getAbilityType() == AbilityType.MANA
|
||||
|| ability.getAbilityType() == AbilityType.LOYALTY)
|
||||
.anyMatch(ability -> ability.isActivatedAbility())
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -112,7 +110,7 @@ class ZirdaTheDawnwakerEffect extends CostModificationEffectImpl {
|
|||
|
||||
@Override
|
||||
public boolean applies(Ability abilityToModify, Ability source, Game game) {
|
||||
return abilityToModify.getAbilityType() == AbilityType.ACTIVATED
|
||||
return abilityToModify.isNonManaActivatedAbility()
|
||||
&& abilityToModify.isControlledBy(source.getControllerId());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
package org.mage.test.cards.continuous;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
|
@ -11,7 +10,6 @@ import org.junit.Test;
|
|||
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public class DependentEffectsTest extends CardTestPlayerBase {
|
||||
|
|
@ -33,7 +31,7 @@ public class DependentEffectsTest extends CardTestPlayerBase {
|
|||
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Plains", 2);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Opalescence",true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Opalescence", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Enchanted Evening");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
|
@ -49,12 +47,12 @@ public class DependentEffectsTest extends CardTestPlayerBase {
|
|||
/**
|
||||
* Opalescence is dependent on Enchanted Evening, so it will be applied
|
||||
* after it regardless of timestamp.
|
||||
*
|
||||
* <p>
|
||||
* Tokens can also have mana costs, and as a consequence of that, converted
|
||||
* mana costs. A token created with Rite of Replication would have the mana
|
||||
* cost of the creature it targeted. Most tokens do not have mana costs
|
||||
* though.
|
||||
*
|
||||
* <p>
|
||||
* Tokens with no mana costs would be 0/0, as you said, and would indeed be
|
||||
* put into owner's graveyard next time State Based Actionas are performed.
|
||||
* Tokens with mana costs would naturally have whatever power and toughness
|
||||
|
|
@ -112,7 +110,7 @@ public class DependentEffectsTest extends CardTestPlayerBase {
|
|||
Permanent necroticOoze = getPermanent("Necrotic Ooze", playerA);
|
||||
int numberOfActivatedAbilities = 0;
|
||||
for (Ability ability : necroticOoze.getAbilities(currentGame)) {
|
||||
if (ability.getAbilityType() == AbilityType.ACTIVATED) {
|
||||
if (ability.isActivatedAbility()){
|
||||
numberOfActivatedAbilities++;
|
||||
}
|
||||
}
|
||||
|
|
@ -143,7 +141,7 @@ public class DependentEffectsTest extends CardTestPlayerBase {
|
|||
Permanent necroticOoze = getPermanent("Necrotic Ooze", playerA);
|
||||
int numberOfActivatedAbilities = 0;
|
||||
for (Ability ability : necroticOoze.getAbilities(currentGame)) {
|
||||
if (ability.getAbilityType() == AbilityType.ACTIVATED) {
|
||||
if (ability.isActivatedAbility()){
|
||||
numberOfActivatedAbilities++;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,6 +63,6 @@ public class ConspicuousSnoopTest extends CardTestPlayerBase {
|
|||
setStrictChooseMode(true);
|
||||
execute();
|
||||
|
||||
assertAbilityCount(playerA, "Conspicuous Snoop", ActivatedAbility.class, 3); // (2 X casts + gains flying )
|
||||
assertAbilityCount(playerA, "Conspicuous Snoop", ActivatedAbility.class, 2); // (own cast ability + gains flying )
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import mage.abilities.costs.Cost;
|
|||
import mage.abilities.keyword.ProtectionAbility;
|
||||
import mage.abilities.mana.ActivatedManaAbilityImpl;
|
||||
import mage.abilities.mana.ManaAbility;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.util.ThreadLocalStringBuilder;
|
||||
|
|
@ -103,6 +102,11 @@ public class AbilitiesImpl<T extends Ability> extends ArrayList<T> implements Ab
|
|||
return rules;
|
||||
}
|
||||
|
||||
/**
|
||||
* Activated Ability in the engine are broader than in the rules.
|
||||
* Notably SpellAbility & PlayLandAbility are ActivatedAbility,
|
||||
* as they can be activated by a player (the engine meaning).
|
||||
*/
|
||||
@Override
|
||||
public Abilities<ActivatedAbility> getActivatedAbilities(Zone zone) {
|
||||
return stream()
|
||||
|
|
@ -161,7 +165,7 @@ public class AbilitiesImpl<T extends Ability> extends ArrayList<T> implements Ab
|
|||
public Abilities<TriggeredAbility> getTriggeredAbilities(Zone zone) {
|
||||
Abilities<TriggeredAbility> zonedAbilities = new AbilitiesImpl<>();
|
||||
for (T ability : this) {
|
||||
if (ability instanceof TriggeredAbility && ability.getZone().match(zone)) {
|
||||
if (ability.isTriggeredAbility() && ability.getZone().match(zone)) {
|
||||
zonedAbilities.add((TriggeredAbility) ability);
|
||||
} else if (ability instanceof ZoneChangeTriggeredAbility) {
|
||||
ZoneChangeTriggeredAbility zcAbility = (ZoneChangeTriggeredAbility) ability;
|
||||
|
|
@ -176,7 +180,7 @@ public class AbilitiesImpl<T extends Ability> extends ArrayList<T> implements Ab
|
|||
@Override
|
||||
public boolean hasPoolDependantAbilities() {
|
||||
return stream()
|
||||
.filter(ability -> ability.getAbilityType() == AbilityType.MANA)
|
||||
.filter(Ability::isManaAbility)
|
||||
.map(ManaAbility.class::cast)
|
||||
.anyMatch(ManaAbility::isPoolDependant);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,6 +62,31 @@ public interface Ability extends Controllable, Serializable {
|
|||
*/
|
||||
AbilityType getAbilityType();
|
||||
|
||||
/**
|
||||
* If this ability is an activated one (mana included).
|
||||
*/
|
||||
boolean isActivatedAbility();
|
||||
|
||||
/**
|
||||
* If this ability is a triggered one (mana included).
|
||||
*/
|
||||
boolean isTriggeredAbility();
|
||||
|
||||
/**
|
||||
* If this ability is an activated one, excluding mana.
|
||||
*/
|
||||
boolean isNonManaActivatedAbility();
|
||||
|
||||
/**
|
||||
* If this ability is a mana activated one.
|
||||
*/
|
||||
boolean isManaActivatedAbility();
|
||||
|
||||
/**
|
||||
* If this ability is a mana ability, (both triggered and activated can be mana abilities).
|
||||
*/
|
||||
boolean isManaAbility();
|
||||
|
||||
/**
|
||||
* Sets the id of the controller of this ability.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -162,6 +162,31 @@ public abstract class AbilityImpl implements Ability {
|
|||
return this.abilityType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isActivatedAbility() {
|
||||
return this.abilityType.isActivatedAbility();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTriggeredAbility() {
|
||||
return this.abilityType.isTriggeredAbility();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNonManaActivatedAbility() {
|
||||
return this.abilityType.isNonManaActivatedAbility();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isManaActivatedAbility() {
|
||||
return this.abilityType.isManaActivatedAbility();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isManaAbility() {
|
||||
return this.abilityType.isManaAbility();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean resolve(Game game) {
|
||||
boolean result = true;
|
||||
|
|
@ -193,7 +218,7 @@ public abstract class AbilityImpl implements Ability {
|
|||
boolean effectResult = effect.apply(game, this);
|
||||
result &= effectResult;
|
||||
if (logger.isDebugEnabled()) {
|
||||
if (this.getAbilityType() != AbilityType.MANA) {
|
||||
if (!this.isManaAbility()) {
|
||||
if (!effectResult) {
|
||||
if (this.getSourceId() != null) {
|
||||
MageObject mageObject = game.getObject(this.getSourceId());
|
||||
|
|
@ -351,7 +376,7 @@ public abstract class AbilityImpl implements Ability {
|
|||
// and/or zones become the target of a spell trigger at this point; they'll wait to be put on
|
||||
// the stack until the spell has finished being cast.)
|
||||
|
||||
if (this.getAbilityType() != AbilityType.TRIGGERED) { // triggered abilities check this already in playerImpl.triggerAbility
|
||||
if (!this.getAbilityType().isTriggeredAbility()) { // triggered abilities check this already in playerImpl.triggerAbility
|
||||
adjustTargets(game);
|
||||
}
|
||||
|
||||
|
|
@ -359,6 +384,7 @@ public abstract class AbilityImpl implements Ability {
|
|||
Outcome outcome = getEffects().getOutcome(this);
|
||||
|
||||
// only activated abilities can be canceled by human user (not triggered)
|
||||
// Note: ActivatedAbility does include SpellAbility & PlayLandAbility, but those should be able to be canceled too.
|
||||
boolean canCancel = this instanceof ActivatedAbility && controller.isHuman();
|
||||
if (!getTargets().chooseTargets(outcome, this.controllerId, this, noMana, game, canCancel)) {
|
||||
// was canceled during targer selection
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ public abstract class ActivatedAbilityImpl extends AbilityImpl implements Activa
|
|||
}
|
||||
|
||||
protected ActivatedAbilityImpl(Zone zone, Effect effect, Cost cost) {
|
||||
super(AbilityType.ACTIVATED, zone);
|
||||
super(AbilityType.ACTIVATED_NONMANA, zone);
|
||||
this.addEffect(effect);
|
||||
this.addCost(cost);
|
||||
}
|
||||
|
|
@ -147,8 +147,7 @@ public abstract class ActivatedAbilityImpl extends AbilityImpl implements Activa
|
|||
|
||||
if (approvingObjects.isEmpty()) {
|
||||
return ActivationStatus.withoutApprovingObject(true);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
return new ActivationStatus(approvingObjects);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
|
|||
}
|
||||
|
||||
protected TriggeredAbilityImpl(Zone zone, Effect effect, boolean optional) {
|
||||
super(AbilityType.TRIGGERED, zone);
|
||||
super(AbilityType.TRIGGERED_NONMANA, zone);
|
||||
setLeavesTheBattlefieldTrigger(false);
|
||||
if (effect != null) {
|
||||
addEffect(effect);
|
||||
|
|
@ -265,6 +265,7 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
|
|||
|
||||
/**
|
||||
* For use in generating trigger phrases with correct text
|
||||
*
|
||||
* @return "When " for an effect that always removes the source from the battlefield, otherwise "Whenever "
|
||||
*/
|
||||
protected final String getWhen() {
|
||||
|
|
|
|||
|
|
@ -54,19 +54,22 @@ public class FinalChapterAbilityResolvesTriggeredAbility extends TriggeredAbilit
|
|||
// the ID of the original ability (on the permanent) that the resolving ability
|
||||
// came from.
|
||||
Optional<Ability> ability_opt = game.getAbility(event.getTargetId(), event.getSourceId());
|
||||
if (!ability_opt.isPresent())
|
||||
if (!ability_opt.isPresent()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Make sure it was a triggered ability (needed for checking if it's a chapter
|
||||
// ability)
|
||||
Ability ability = ability_opt.get();
|
||||
if (!(ability instanceof TriggeredAbility))
|
||||
if (!(ability.isTriggeredAbility())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Make sure it was a chapter ability
|
||||
TriggeredAbility triggeredAbility = (TriggeredAbility) ability;
|
||||
if (!SagaAbility.isChapterAbility(triggeredAbility))
|
||||
if (!SagaAbility.isChapterAbility(triggeredAbility)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// There's a chance that the permanent that this abiltiy came from no longer
|
||||
// exists, so try and find it on the battlefield or check last known
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue