Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 12 additions & 44 deletions Mage.Sets/src/mage/cards/c/CombineGuildmage.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,20 @@
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.EntersWithCountersControlledEffect;
import mage.abilities.effects.common.counter.MoveCounterTargetsEffect;
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.counters.CounterType;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.filter.predicate.other.AnotherTargetPredicate;
import mage.target.TargetPermanent;
import mage.target.common.TargetControlledCreaturePermanent;

import java.util.UUID;

Expand All @@ -28,10 +27,12 @@
*/
public final class CombineGuildmage extends CardImpl {

private static final FilterPermanent filter1
= new FilterControlledCreaturePermanent("creature you control (to remove a counter from)");
private static final FilterPermanent filter2
= new FilterControlledCreaturePermanent("creature you control (to move a counter to)");
private static final FilterPermanent filter
= new FilterControlledCreaturePermanent("another target creature you control");

static {
filter.add(new AnotherTargetPredicate(2));
}

public CombineGuildmage(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{U}");
Expand All @@ -50,12 +51,10 @@ public CombineGuildmage(UUID ownerId, CardSetInfo setInfo) {
this.addAbility(ability);

// {1}{U}, {T}: Move a +1/+1 counter from target creature you control onto another target creature you control.
ability = new SimpleActivatedAbility(
new CombineGuildmageCounterEffect(), new ManaCostsImpl<>("{1}{U}")
);
ability = new SimpleActivatedAbility(new MoveCounterTargetsEffect(CounterType.P1P1), new ManaCostsImpl<>("{1}{U}"));
ability.addCost(new TapSourceCost());
ability.addTarget(new TargetPermanent(filter1));
ability.addTarget(new TargetPermanent(filter2));
ability.addTarget(new TargetControlledCreaturePermanent().withChooseHint("to remove a counter from"));
ability.addTarget(new TargetPermanent(filter).withChooseHint("to move a counter to").setTargetTag(2));
this.addAbility(ability);
}

Expand All @@ -68,34 +67,3 @@ public CombineGuildmage copy() {
return new CombineGuildmage(this);
}
}

class CombineGuildmageCounterEffect extends OneShotEffect {

CombineGuildmageCounterEffect() {
super(Outcome.Benefit);
staticText = "Move a +1/+1 counter from target creature you control onto another target creature you control.";
}

private CombineGuildmageCounterEffect(final CombineGuildmageCounterEffect effect) {
super(effect);
}

@Override
public CombineGuildmageCounterEffect copy() {
return new CombineGuildmageCounterEffect(this);
}

@Override
public boolean apply(Game game, Ability source) {
Permanent fromPermanent = game.getPermanent(source.getFirstTarget());
Permanent toPermanent = game.getPermanent(source.getTargets().get(1).getFirstTarget());
if (fromPermanent == null || toPermanent == null) {
return false;
}
if (fromPermanent.getCounters(game).getCount(CounterType.P1P1) > 0) {
fromPermanent.removeCounters(CounterType.P1P1.createInstance(), source, game);
toPermanent.addCounters(CounterType.P1P1.createInstance(), source.getControllerId(), source, game);
}
return true;
}
}
70 changes: 19 additions & 51 deletions Mage.Sets/src/mage/cards/d/DaghatarTheAdamant.java
Original file line number Diff line number Diff line change
@@ -1,38 +1,41 @@

package mage.cards.d;

import java.util.UUID;
import mage.MageInt;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.effects.common.counter.MoveCounterTargetsEffect;
import mage.abilities.keyword.VigilanceAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Outcome;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.filter.predicate.other.AnotherTargetPredicate;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;

import java.util.UUID;

/**
*
* @author LevelX2
*/
public final class DaghatarTheAdamant extends CardImpl {

private static final FilterPermanent filter = new FilterCreaturePermanent("a second target creature");

static {
filter.add(new AnotherTargetPredicate(2));
}

public DaghatarTheAdamant(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}");
this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.WARRIOR);
Expand All @@ -41,17 +44,18 @@ public DaghatarTheAdamant(UUID ownerId, CardSetInfo setInfo) {

// Vigilance
this.addAbility(VigilanceAbility.getInstance());

// Daghatar the Adamant enters the battlefield with four +1/+1 counters on it.
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(4)),
"with four +1/+1 counters on it"));

// {1}{B/G}{B/G}: Move a +1/+1 counter from target creature onto a second target creature.
Ability ability = new SimpleActivatedAbility(new MoveCounterFromTargetToTargetEffect(),new ManaCostsImpl<>("{1}{B/G}{B/G}"));
ability.addTarget(new TargetCreaturePermanent(new FilterCreaturePermanent("creature the +1/+1 counter is moved from")));
ability.addTarget(new TargetCreaturePermanent(new FilterCreaturePermanent("creature the +1/+1 counter is moved to")));
Ability ability = new SimpleActivatedAbility(
new MoveCounterTargetsEffect(CounterType.P1P1), new ManaCostsImpl<>("{1}{B/G}{B/G}")
);
ability.addTarget(new TargetCreaturePermanent().withChooseHint("to remove a counter from"));
ability.addTarget(new TargetPermanent(filter).withChooseHint("to move a counter to").setTargetTag(2));
this.addAbility(ability);


}

private DaghatarTheAdamant(final DaghatarTheAdamant card) {
Expand All @@ -63,39 +67,3 @@ public DaghatarTheAdamant copy() {
return new DaghatarTheAdamant(this);
}
}

class MoveCounterFromTargetToTargetEffect extends OneShotEffect {

MoveCounterFromTargetToTargetEffect() {
super(Outcome.Detriment);
this.staticText = "Move a +1/+1 counter from target creature onto a second target creature";
}

private MoveCounterFromTargetToTargetEffect(final MoveCounterFromTargetToTargetEffect effect) {
super(effect);
}

@Override
public MoveCounterFromTargetToTargetEffect copy() {
return new MoveCounterFromTargetToTargetEffect(this);
}

@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
MageObject sourceObject = game.getObject(source);
if (sourceObject != null && controller != null) {
Permanent fromPermanent = game.getPermanent(getTargetPointer().getFirst(game, source));
if (fromPermanent != null && fromPermanent.getCounters(game).getCount(CounterType.P1P1) > 0) {
Permanent toPermanent = game.getPermanent(source.getTargets().get(1).getFirstTarget());
if (toPermanent != null) {
fromPermanent.removeCounters(CounterType.P1P1.createInstance(), source, game);
toPermanent.addCounters(CounterType.P1P1.createInstance(), source.getControllerId(), source, game);
game.informPlayers(sourceObject.getLogName() + ": Moved a +1/+1 counter from " + fromPermanent.getLogName() +" to " + toPermanent.getLogName());
}
}
return true;
}
return false;
}
}
87 changes: 12 additions & 75 deletions Mage.Sets/src/mage/cards/l/LeechBonder.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,35 +6,32 @@
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.UntapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.effects.common.counter.MoveCounterTargetsEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.choices.Choice;
import mage.choices.ChoiceImpl;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.counters.Counter;
import mage.counters.CounterType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.other.AnotherTargetPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;

import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.UUID;

/**
* @author jeffwadsworth
*/
public final class LeechBonder extends CardImpl {

private static final FilterPermanent filter = new FilterCreaturePermanent("a second target creature");

static {
filter.add(new AnotherTargetPredicate(2));
}

public LeechBonder(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}");
this.subtype.add(SubType.MERFOLK);
Expand All @@ -47,21 +44,11 @@ public LeechBonder(UUID ownerId, CardSetInfo setInfo) {
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.M1M1.createInstance(2)), "with two -1/-1 counters on it"));

// {U}, {untap}: Move a counter from target creature onto another target creature.
Ability ability = new SimpleActivatedAbility(new LeechBonderEffect(), new ManaCostsImpl<>("{U}"));
Ability ability = new SimpleActivatedAbility(new MoveCounterTargetsEffect(), new ManaCostsImpl<>("{U}"));
ability.addCost(new UntapSourceCost());
// target 1
TargetCreaturePermanent target1 = new TargetCreaturePermanent(new FilterCreaturePermanent("creature to remove counter from"));
target1.setTargetTag(1);
ability.addTarget(target1);
// target 2
FilterCreaturePermanent filter = new FilterCreaturePermanent("creature to put counter on");
filter.add(new AnotherTargetPredicate(2));
TargetCreaturePermanent target2 = new TargetCreaturePermanent(filter);
target2.setTargetTag(2);
ability.addTarget(target2);

ability.addTarget(new TargetCreaturePermanent().withChooseHint("to remove a counter from"));
ability.addTarget(new TargetPermanent(filter).withChooseHint("to move a counter to").setTargetTag(2));
this.addAbility(ability);

}

private LeechBonder(final LeechBonder card) {
Expand All @@ -73,53 +60,3 @@ public LeechBonder copy() {
return new LeechBonder(this);
}
}

class LeechBonderEffect extends OneShotEffect {

LeechBonderEffect() {
super(Outcome.AIDontUseIt);
this.staticText = "Move a counter from target creature onto a second target creature";
}

private LeechBonderEffect(final LeechBonderEffect effect) {
super(effect);
}

@Override
public LeechBonderEffect copy() {
return new LeechBonderEffect(this);
}

@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
Permanent fromPermanent = game.getPermanent(source.getFirstTarget());
Permanent toPermanent = game.getPermanent(source.getTargets().get(1).getFirstTarget());
if (fromPermanent == null
|| toPermanent == null
|| controller == null) {
return false;
}

Set<String> possibleChoices = new LinkedHashSet<>(fromPermanent.getCounters(game).keySet());
if (possibleChoices.isEmpty()) {
return false;
}

Choice choice = new ChoiceImpl(false);
choice.setChoices(possibleChoices);
if (controller.choose(outcome, choice, game)) {
String chosen = choice.getChoice();
if (fromPermanent.getCounters(game).containsKey(chosen)) {
CounterType counterType = CounterType.findByName(chosen);
if (counterType != null) {
Counter counter = counterType.createInstance();
fromPermanent.removeCounters(counterType.getName(), 1, source, game);
toPermanent.addCounters(counter, source.getControllerId(), source, game);
return true;
}
}
}
return false;
}
}
Loading