mirror of
https://github.com/correl/mage.git
synced 2025-04-03 09:18:59 -09:00
[AFR] Implemented Hand of Vecna
This commit is contained in:
parent
d7a4e4b13c
commit
b0e075b738
3 changed files with 132 additions and 0 deletions
Mage.Sets/src/mage
Mage/src/main/java/mage/filter/predicate/mageobject
127
Mage.Sets/src/mage/cards/h/HandOfVecna.java
Normal file
127
Mage.Sets/src/mage/cards/h/HandOfVecna.java
Normal file
|
@ -0,0 +1,127 @@
|
|||
package mage.cards.h;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.BeginningOfCombatTriggeredAbility;
|
||||
import mage.abilities.costs.common.PayLifeCost;
|
||||
import mage.abilities.dynamicvalue.common.CardsInControllerHandCount;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.abilities.keyword.EquipAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.filter.predicate.mageobject.MageObjectReferencePredicate;
|
||||
import mage.filter.predicate.mageobject.NamePredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class HandOfVecna extends CardImpl {
|
||||
|
||||
public HandOfVecna(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
|
||||
|
||||
this.addSuperType(SuperType.LEGENDARY);
|
||||
this.subtype.add(SubType.EQUIPMENT);
|
||||
|
||||
// At the beginning of combat on your turn, equipped creature or a creature you control named Vecna gets +X/+X until end of turn, where X is the number of cards in your hand.
|
||||
this.addAbility(new BeginningOfCombatTriggeredAbility(
|
||||
new HandOfVecnaEffect(), TargetController.YOU, false
|
||||
));
|
||||
|
||||
// Equip—Pay 1 life for each card in your hand.
|
||||
this.addAbility(new EquipAbility(Outcome.Benefit, new PayLifeCost(
|
||||
CardsInControllerHandCount.instance, "1 life for each card in your hand"
|
||||
)));
|
||||
|
||||
// Equip {2}
|
||||
this.addAbility(new EquipAbility(2));
|
||||
}
|
||||
|
||||
private HandOfVecna(final HandOfVecna card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandOfVecna copy() {
|
||||
return new HandOfVecna(this);
|
||||
}
|
||||
}
|
||||
|
||||
class HandOfVecnaEffect extends OneShotEffect {
|
||||
|
||||
private static final FilterPermanent filter = new FilterControlledCreaturePermanent("creature you control named Vecna");
|
||||
|
||||
static {
|
||||
filter.add(new NamePredicate("Vecna"));
|
||||
}
|
||||
|
||||
HandOfVecnaEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "equipped creature or a creature you control " +
|
||||
"named Vecna gets +X/+X until end of turn, " +
|
||||
"where X is the number of cards in your hand";
|
||||
}
|
||||
|
||||
private HandOfVecnaEffect(final HandOfVecnaEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandOfVecnaEffect copy() {
|
||||
return new HandOfVecnaEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player player = game.getPlayer(source.getControllerId());
|
||||
if (player == null || player.getHand().size() < 1) {
|
||||
return false;
|
||||
}
|
||||
Permanent sourcePermanent = source.getSourcePermanentIfItStillExists(game);
|
||||
Permanent equipped = game.getPermanent(sourcePermanent != null ? sourcePermanent.getAttachedTo() : null);
|
||||
List<Permanent> chooseable = game.getBattlefield().getActivePermanents(
|
||||
filter, source.getControllerId(), source.getSourceId(), game
|
||||
);
|
||||
if (equipped != null) {
|
||||
chooseable.add(equipped);
|
||||
}
|
||||
Permanent toBoost;
|
||||
switch (chooseable.size()) {
|
||||
case 0:
|
||||
return false;
|
||||
case 1:
|
||||
toBoost = chooseable.get(0);
|
||||
break;
|
||||
default:
|
||||
FilterPermanent filter = new FilterPermanent("a creature to give +X/+X to");
|
||||
filter.add(Predicates.or(
|
||||
chooseable
|
||||
.stream()
|
||||
.map(permanent -> new MageObjectReferencePredicate(permanent, game))
|
||||
.collect(Collectors.toList())
|
||||
));
|
||||
TargetPermanent target = new TargetPermanent(filter);
|
||||
target.setNotTarget(true);
|
||||
player.choose(outcome, target, source.getSourceId(), game);
|
||||
toBoost = game.getPermanent(target.getFirstTarget());
|
||||
}
|
||||
int xValue = player.getHand().size();
|
||||
game.addEffect(new BoostTargetEffect(
|
||||
xValue, xValue, Duration.EndOfTurn
|
||||
).setTargetPointer(new FixedTarget(toBoost, game)), source);
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -108,6 +108,7 @@ public final class AdventuresInTheForgottenRealms extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Half-Elf Monk", 19, Rarity.COMMON, mage.cards.h.HalfElfMonk.class));
|
||||
cards.add(new SetCardInfo("Hall of Storm Giants", 257, Rarity.RARE, mage.cards.h.HallOfStormGiants.class));
|
||||
cards.add(new SetCardInfo("Hama Pashar, Ruin Seeker", 224, Rarity.UNCOMMON, mage.cards.h.HamaPasharRuinSeeker.class));
|
||||
cards.add(new SetCardInfo("Hand of Vecna", 246, Rarity.RARE, mage.cards.h.HandOfVecna.class));
|
||||
cards.add(new SetCardInfo("Herald of Hadar", 108, Rarity.COMMON, mage.cards.h.HeraldOfHadar.class));
|
||||
cards.add(new SetCardInfo("Hill Giant Herdgorger", 187, Rarity.COMMON, mage.cards.h.HillGiantHerdgorger.class));
|
||||
cards.add(new SetCardInfo("Hired Hexblade", 109, Rarity.COMMON, mage.cards.h.HiredHexblade.class));
|
||||
|
|
|
@ -15,6 +15,10 @@ public class MageObjectReferencePredicate implements Predicate<MageItem> {
|
|||
|
||||
private final MageObjectReference mor;
|
||||
|
||||
public MageObjectReferencePredicate(MageObject mageObject, Game game) {
|
||||
this(new MageObjectReference(mageObject, game));
|
||||
}
|
||||
|
||||
public MageObjectReferencePredicate(MageObjectReference mor) {
|
||||
this.mor = mor;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue