foul-magics/Mage/src/main/java/mage/game/permanent/token/BelzenlokDemonToken.java
2019-02-19 21:51:45 +01:00

105 lines
3.4 KiB
Java

package mage.game.permanent.token;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.SacrificeControllerEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.TrampleAbility;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.TargetController;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.filter.predicate.permanent.AnotherPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
/**
*
* @author LoneFox
*/
public final class BelzenlokDemonToken extends TokenImpl {
static final private List<String> tokenImageSets = new ArrayList<>();
static {
tokenImageSets.addAll(Arrays.asList("DOM"));
}
public BelzenlokDemonToken() {
super("Demon", "6/6 black Demon creature token with flying, trample, and "
+ "\"At the beginning of your upkeep, sacrifice another creature. If you can't, this creature deals 6 damage to you.\"");
availableImageSetCodes = tokenImageSets;
cardType.add(CardType.CREATURE);
color.setBlack(true);
subtype.add(SubType.DEMON);
power = new MageInt(6);
toughness = new MageInt(6);
addAbility(FlyingAbility.getInstance());
addAbility(TrampleAbility.getInstance());
addAbility(new BeginningOfUpkeepTriggeredAbility(new BelzenlokDemonTokenEffect(), TargetController.YOU, false));
}
public BelzenlokDemonToken(final BelzenlokDemonToken token) {
super(token);
}
@Override
public BelzenlokDemonToken copy() {
return new BelzenlokDemonToken(this);
}
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
if (getOriginalExpansionSetCode().equals("C14")) {
this.setTokenType(2);
}
}
}
class BelzenlokDemonTokenEffect extends OneShotEffect {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("another creature");
static {
filter.add(new CardTypePredicate(CardType.CREATURE));
filter.add(AnotherPredicate.instance);
}
BelzenlokDemonTokenEffect() {
super(Outcome.Benefit);
this.staticText = "sacrifice another creature. If you can't, this creature deals 6 damage to you.";
}
BelzenlokDemonTokenEffect(final BelzenlokDemonTokenEffect effect) {
super(effect);
}
@Override
public BelzenlokDemonTokenEffect copy() {
return new BelzenlokDemonTokenEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
int otherCreatures = new PermanentsOnBattlefieldCount(filter).calculate(game, source, this);
if (otherCreatures > 0) {
new SacrificeControllerEffect(filter, 1, "").apply(game, source);
} else {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
controller.damage(6, source.getSourceId(), game, false, true);
}
}
return true;
}
}