Fixed predicate refactor at #5161;

* Interdict, Ouphe Vandals - fixed that it catch triggered + activated, but must only activated;
This commit is contained in:
Oleg Agafonov 2018-08-15 06:29:06 +04:00
parent a94dbe1c9d
commit 3da2f98eac
10 changed files with 36 additions and 61 deletions

View file

@ -3,19 +3,28 @@ package mage.filter.predicate.ability;
import mage.MageObject;
import mage.abilities.Ability;
import mage.constants.AbilityType;
import mage.filter.predicate.Predicate;
import mage.game.Game;
import mage.game.stack.StackAbility;
import mage.game.stack.StackObject;
/**
*
* @author LevelX2
*/
public class ArtifactSourcePredicate implements Predicate<Ability> {
public class ArtifactSourcePredicate implements Predicate<StackObject> {
public ArtifactSourcePredicate() {
}
@Override
public boolean apply(Ability input, Game game) {
MageObject sourceObject = input.getSourceObject(game);
return sourceObject != null && sourceObject.isArtifact();
public boolean apply(StackObject input, Game game) {
if (input instanceof StackAbility) {
StackAbility ability = (StackAbility) input;
return ability.getSourceObject(game).isArtifact() && ability.getAbilityType() == AbilityType.ACTIVATED;
}
return false;
}
@Override

View file

@ -1,24 +0,0 @@
package mage.filter.predicate.other;
import mage.MageObject;
import mage.filter.predicate.Predicate;
import mage.game.Game;
import mage.game.stack.StackObject;
/**
*
*/
public class StackObjectWithArtifactSourcePredicate implements Predicate<StackObject> {
@Override
public boolean apply(StackObject input, Game game) {
MageObject sourceObject = game.getObject(input.getSourceId());
return sourceObject != null && sourceObject.isArtifact();
}
@Override
public String toString() {
return "Source(Artifact)";
}
}

View file

@ -10,6 +10,7 @@ import mage.constants.AbilityType;
import mage.constants.Zone;
import mage.filter.Filter;
import mage.filter.FilterAbility;
import mage.filter.FilterStackObject;
import mage.game.Game;
import mage.game.stack.StackAbility;
import mage.game.stack.StackObject;
@ -21,13 +22,13 @@ import mage.target.TargetObject;
*/
public class TargetActivatedAbility extends TargetObject {
protected final FilterAbility filter;
protected final FilterStackObject filter;
public TargetActivatedAbility() {
this(new FilterAbility("activated ability"));
this(new FilterStackObject("activated ability"));
}
public TargetActivatedAbility(FilterAbility filter) {
public TargetActivatedAbility(FilterStackObject filter) {
this.minNumberOfTargets = 1;
this.maxNumberOfTargets = 1;
this.zone = Zone.STACK;
@ -46,8 +47,10 @@ public class TargetActivatedAbility extends TargetObject {
return false;
}
StackObject stackObject = game.getStack().getStackObject(id);
return stackObject != null && stackObject.getStackAbility() != null && stackObject.getStackAbility().getAbilityType() == AbilityType.ACTIVATED
&& filter.match(((ActivatedAbility) stackObject.getStackAbility()), game);
return stackObject != null
&& stackObject.getStackAbility() != null
&& stackObject.getStackAbility().getAbilityType() == AbilityType.ACTIVATED
&& filter.match(stackObject, source.getSourceId(), source.getControllerId(), game);
}
@Override