(WIP) Replacing blocking/blocked by predicates (#8729)

* replaced blocking/blocked by predicates

* added test for knight of dusk (currently fails)

* added source parameter to filters and everything else that needs it

* some changes to various predicates

* test fix

* small changes to filter code

* merge fix

* fixed a test failure

* small change to Karn, Scion of Urza

* removed sourceId from filter methods and other similar places

* added new getobject method to fix some test failures

* a few more fixes

* fixed merge conflicts

* merge fix
This commit is contained in:
Evan Kranzler 2022-03-23 18:45:02 -04:00 committed by GitHub
parent 53877424a0
commit 80e11b2052
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
1719 changed files with 3384 additions and 3325 deletions

View file

@ -105,7 +105,7 @@ class VeilsOfFearEffect extends OneShotEffect {
continue;
}
TargetDiscard target = new TargetDiscard(0, 1, StaticFilters.FILTER_CARD, playerId);
player.choose(Outcome.PreventDamage, target, source.getSourceId(), game);
player.choose(Outcome.PreventDamage, target, source, game);
map.put(playerId, game.getCard(target.getFirstTarget()));
}
for (Map.Entry<UUID, Card> entry : map.entrySet()) {
@ -151,7 +151,7 @@ class OublietteEffect extends OneShotEffect {
return true;
}
OublietteTarget target = new OublietteTarget(Math.min(saccable, 3));
player.choose(Outcome.Sacrifice, target, source.getSourceId(), game);
player.choose(Outcome.Sacrifice, target, source, game);
for (UUID targetId : target.getTargets()) {
Permanent permanent = game.getPermanent(targetId);
if (permanent != null) {
@ -207,8 +207,8 @@ class OublietteTarget extends TargetControlledPermanent {
@Override
public Set<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
Set<UUID> possibleTargets = super.possibleTargets(sourceId, sourceControllerId, game);
public Set<UUID> possibleTargets(UUID sourceControllerId, Ability source, Game game) {
Set<UUID> possibleTargets = super.possibleTargets(sourceControllerId, source, game);
possibleTargets.removeIf(uuid -> !this.canTarget(sourceControllerId, uuid, null, game));
return possibleTargets;
}
@ -216,7 +216,7 @@ class OublietteTarget extends TargetControlledPermanent {
static int checkTargetCount(Ability source, Game game) {
List<Permanent> permanents = game
.getBattlefield()
.getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game);
.getActivePermanents(filter, source.getControllerId(), source, game);
return cardTypeAssigner.getRoleCount(new CardsImpl(permanents), game);
}
}
@ -246,7 +246,7 @@ class SandfallCellEffect extends OneShotEffect {
continue;
}
TargetPermanent target = new TargetPermanent(0, 1, TombOfAnnihilationDungeon.filter, true);
player.choose(Outcome.PreventDamage, target, source.getSourceId(), game);
player.choose(Outcome.PreventDamage, target, source, game);
map.put(playerId, game.getPermanent(target.getFirstTarget()));
}
for (Map.Entry<UUID, Permanent> entry : map.entrySet()) {

View file

@ -51,7 +51,7 @@ class KothOfTheHammerThirdEffect extends ContinuousEffectImpl {
switch (layer) {
case AbilityAddingRemovingEffects_6:
if (sublayer == SubLayer.NA) {
for (Permanent permanent : game.getBattlefield().getActivePermanents(mountains, source.getControllerId(), source.getSourceId(), game)) {
for (Permanent permanent : game.getBattlefield().getActivePermanents(mountains, source.getControllerId(), source, game)) {
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new TapSourceCost());
ability.addTarget(new TargetAnyTarget());
permanent.addAbility(ability, source.getSourceId(), game);

View file

@ -52,7 +52,7 @@ class NarsetTranscendentCantCastEffect extends ContinuousRuleModifyingEffectImpl
@Override
public String getInfoMessage(Ability source, GameEvent event, Game game) {
MageObject mageObject = game.getObject(source.getSourceId());
MageObject mageObject = game.getObject(source);
if (mageObject != null) {
return "You can't cast can't cast noncreature spells (it is prevented by emblem of " + mageObject.getLogName() + ')';
}

View file

@ -53,7 +53,7 @@ class SerraTheBenevolentEmblemEffect extends ReplacementEffectImpl {
&& (controller.getLife() - event.getAmount()) < 1
&& game.getBattlefield().count(
StaticFilters.FILTER_CONTROLLED_CREATURE,
source.getSourceId(), event.getPlayerId(), game) > 0
event.getPlayerId(), source, game) > 0
) {
event.setAmount(controller.getLife() - 1);
}

View file

@ -95,6 +95,6 @@ class HedronFieldsOfAgadeemRestrictionEffect extends RestrictionEffect {
if (!cPlane.getPlaneType().equals(Planes.PLANE_HEDRON_FIELDS_OF_AGADEEM)) {
return false;
}
return filter.match(permanent, source.getSourceId(), source.getControllerId(), game);
return filter.match(permanent, source.getControllerId(), source, game);
}
}

View file

@ -80,7 +80,7 @@ class TazeemCantBlockAllEffect extends RestrictionEffect {
if (cPlane == null || !cPlane.getPlaneType().equals(Planes.PLANE_TAZEEM)) {
return false;
}
return filter.match(permanent, source.getSourceId(), source.getControllerId(), game);
return filter.match(permanent, source.getControllerId(), source, game);
}
@Override