mirror of
https://github.com/correl/mage.git
synced 2024-12-25 19:25:41 +00:00
fixed Root Sliver ability only effecting its controller
This commit is contained in:
parent
f2024d3897
commit
3053710109
1 changed files with 51 additions and 7 deletions
|
@ -29,34 +29,39 @@ 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;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author cbt33, BetaSteward (Autumn's Veil, Combust)
|
||||
*/
|
||||
public class RootSliver extends CardImpl {
|
||||
|
||||
|
||||
private static final FilterSpell filter = new FilterSpell("Sliver spells");
|
||||
|
||||
|
||||
static {
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue