@Override public boolean apply(Game game, MageObject mageObject, Ability source, UUID copyToObjectId) { mageObject.getAbilities().add(ability); return true; }
@Override public boolean apply(MageObject input, Game game) { Abilities<Ability> abilities; if (input instanceof Card){ abilities = ((Card)input).getAbilities(game); } else { abilities = input.getAbilities(); } return abilities.stream().anyMatch(ability -> ability.getClass().equals(abilityClass)); }
@Override public Optional<Ability> getAbility(UUID abilityId, UUID sourceId) { MageObject object = getObject(sourceId); if (object != null) { return object.getAbilities().get(abilityId); } return Optional.empty(); }
@Override public boolean apply(Game game, MageObject mageObject, Ability source, UUID copyToObjectId) { mageObject.getAbilities().add(new DethroneAbility()); mageObject.getAbilities().add(HasteAbility.getInstance()); return true; }
@Override public boolean apply(MageObject input, Game game) { Abilities<Ability> abilities = input.getAbilities(); for (int i = 0; i < abilities.size(); i++) { if (abilities.get(i) instanceof EmbalmAbility) { return true; } if (abilities.get(i) instanceof EternalizeAbility) { return true; } } return false; }
@Override public boolean apply(Game game, MageObject mageObject, Ability source, UUID copyToObjectId) { Effect effect = new VesuvanShapeshifterFaceDownEffect(); Ability ability = new BeginningOfUpkeepTriggeredAbility(effect, TargetController.YOU, true); mageObject.getAbilities().add(ability); return true; } }
@Override public boolean apply(MageObject input, Game game) { Abilities<Ability> abilities = input.getAbilities(); for (int i = 0; i < abilities.size(); i++) { if (abilities.get(i) instanceof EnchantAbility) { String enchantText = abilities.get(i).getRule(); if (enchantText.contentEquals("Enchant creature")) { return true; } } } return false; }
@Override public boolean applies(GameEvent event, Ability source, Game game) { MageObject object = game.getObject(event.getSourceId()); if (object instanceof Permanent && filter.match((Permanent)object, game)) { Optional<Ability> ability = object.getAbilities().get(event.getTargetId()); if (ability.isPresent() && !(ability.get() instanceof ActivatedManaAbilityImpl)) { return true; } } return false; }
protected LinkedHashMap<UUID, ActivatedManaAbilityImpl> getUseableManaAbilities(MageObject object, Zone zone, Game game) { LinkedHashMap<UUID, ActivatedManaAbilityImpl> useable = new LinkedHashMap<>(); boolean canUse = !(object instanceof Permanent) || ((Permanent) object).canUseActivatedAbilities(game); for (ActivatedManaAbilityImpl ability : object.getAbilities().getActivatedManaAbilities(zone)) { if (canUse || ability.getAbilityType() == AbilityType.SPECIAL_ACTION) { if (ability.canActivate(playerId, game).canActivate()) { useable.put(ability.getId(), ability); } } } return useable; }
@Override public boolean apply(Game game, MageObject mageObject, Ability source, UUID copyToObjectId) { // At the beginning of your upkeep, you may exile this enchantment. If you do, return it to the battlefield under its owner's control. mageObject.getAbilities().add(new BeginningOfUpkeepTriggeredAbility( new EstridsInvocationEffect(), TargetController.YOU, true )); return true; }
@Override public boolean apply(Game game, MageObject mageObject, Ability source, UUID copyToObjectId) { Ability ability = new PutCardIntoGraveFromAnywhereAllTriggeredAbility( new LazavDimirMastermindEffect(), true, new FilterCreatureCard("a creature card"), TargetController.OPPONENT, SetTargetPointer.CARD); mageObject.getAbilities().add(ability); mageObject.setName("Lazav, Dimir Mastermind"); mageObject.addSuperType(SuperType.LEGENDARY); mageObject.getAbilities().add(HexproofAbility.getInstance()); return true; } }
@Override public boolean apply(Game game, MageObject mageObject, Ability source, UUID copyToObjectId) { Effect effect = new CopyPermanentEffect(new ArtisanOfFormsApplyToPermanent()); effect.setText("have {this} become a copy of target creature, except it has this ability"); mageObject.getAbilities().add(new HeroicAbility(effect, true)); return true; }
@Override public boolean apply(Game game, MageObject mageObject, Ability source, UUID copyToObjectId) { DynamicValue variableMana = ManacostVariableValue.instance; Effect effect = new SetPowerToughnessSourceEffect(variableMana, Duration.WhileOnBattlefield, SubLayer.SetPT_7b); effect.setText("This creature has base power and toughness X/X"); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{X}")); mageObject.getAbilities().add(ability); return true; }
@Override public boolean apply(Game game, MageObject mageObject, Ability source, UUID copyToObjectId) { Ability upkeepAbility = new BeginningOfUpkeepTriggeredAbility(new CryptoplasmEffect(), TargetController.YOU, true); upkeepAbility.addTarget(new TargetCreaturePermanent()); mageObject.getAbilities().add(upkeepAbility); return true; }
@Override public boolean apply(Game game, MageObject mageObject, Ability source, UUID copyToObjectId) { if (!mageObject.hasSubtype(SubType.ILLUSION, game)) { mageObject.getSubtype(game).add(SubType.ILLUSION); } // Add directly because the created permanent is only used to copy from, so there is no need to add the ability to e.g. TriggeredAbilities mageObject.getAbilities().add(new BecomesTargetTriggeredAbility(new SacrificeSourceEffect())); //permanent.addAbility(new BecomesTargetTriggeredAbility(new SacrificeSourceEffect()), game); return true; } };
@Override public boolean apply(Game game, MageObject mageObject, Ability source, UUID copyToObjectId) { mageObject.getColor(game).setColor(sourcePermanent.getColor(game)); mageObject.getAbilities().add(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new VesuvanDoppelgangerCopyEffect(), TargetController.YOU, true, false, rule2)); return true; }
@Override public boolean apply(Game game, MageObject mageObject, Ability source, UUID copyToObjectId) { Ability ability = new SimpleActivatedAbility( new LazavTheMultifariousEffect(), new ManaCostsImpl("{X}") ); ability.setTargetAdjuster(LazavTheMultifariousAdjuster.instance); mageObject.getAbilities().add(ability); mageObject.setName("Lazav, the Multifarious"); mageObject.addSuperType(SuperType.LEGENDARY); return true; } }
@Override public boolean apply(Game game, MageObject mageObject, Ability source, UUID copyToObjectId) { Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DimirDoppelgangerEffect(), new ManaCostsImpl("{1}{U}{B}")); ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card in a graveyard"))); mageObject.getAbilities().add(ability); return true; } }
@Override public boolean apply(Game game, MageObject mageObject, Ability source, UUID copyToObjectId) { Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new ManaCostsImpl("{U}{B}")); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetCreaturePermanent(filter)); mageObject.getAbilities().add(ability); return true; }
@Override public boolean apply(Game game, MageObject mageObject, Ability source, UUID copyToObjectId) { mageObject.addSuperType(SuperType.LEGENDARY); mageObject.setName("Sakashima the Impostor"); // {2}{U}{U}: Return Sakashima the Impostor to its owner's hand at the beginning of the next end step mageObject.getAbilities().add(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnToHandSourceEffect(true)), false), new ManaCostsImpl("{2}{U}{U}") )); return true; }