fixed Root Sliver ability only effecting its controller

This commit is contained in:
Evan Kranzler 2017-11-18 22:17:44 -05:00
parent f2024d3897
commit 3053710109

View file

@ -29,18 +29,24 @@ package mage.cards.r;
import java.util.UUID;
import mage.MageInt;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.CantBeCounteredControlledEffect;
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
import mage.abilities.effects.common.CantBeCounteredSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.FilterSpell;
import mage.filter.FilterStackObject;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.stack.Spell;
import mage.game.stack.StackObject;
/**
*
@ -54,9 +60,8 @@ public class RootSliver extends CardImpl {
filter.add(new SubtypePredicate(SubType.SLIVER));
}
public RootSliver(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}");
this.subtype.add(SubType.SLIVER);
this.power = new MageInt(2);
@ -65,7 +70,7 @@ public class RootSliver extends CardImpl {
// Root Sliver can't be countered.
this.addAbility(new SimpleStaticAbility(Zone.STACK, new CantBeCounteredSourceEffect()));
// Sliver spells can't be countered by spells or abilities.
this.addAbility(new SimpleStaticAbility(Zone.STACK, new CantBeCounteredControlledEffect(filter, new FilterStackObject(), Duration.WhileOnBattlefield)));
this.addAbility(new SimpleStaticAbility(Zone.STACK, new RootSliverEffect()));
}
@ -79,3 +84,42 @@ public class RootSliver extends CardImpl {
}
}
class RootSliverEffect extends ContinuousRuleModifyingEffectImpl {
public RootSliverEffect() {
super(Duration.WhileOnBattlefield, Outcome.Benefit);
staticText = "Sliver spells can't be countered by spells or abilities.";
}
public RootSliverEffect(final RootSliverEffect effect) {
super(effect);
}
@Override
public RootSliverEffect copy() {
return new RootSliverEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
return true;
}
@Override
public boolean checksEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.COUNTER;
}
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
Spell spell = game.getStack().getSpell(event.getTargetId());
if (spell != null && spell.hasSubtype(SubType.SLIVER, game)) {
MageObject sourceObject = game.getObject(event.getSourceId());
if (sourceObject != null && sourceObject instanceof StackObject) {
return true;
}
}
return false;
}
}