forked from External/mage
(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:
parent
53877424a0
commit
80e11b2052
1719 changed files with 3384 additions and 3325 deletions
|
|
@ -61,21 +61,21 @@ public class TargetSpell extends TargetObject {
|
|||
return false;
|
||||
}
|
||||
Spell spell = game.getStack().getSpell(id);
|
||||
return filter.match(spell, source.getSourceId(), source.getControllerId(), game);
|
||||
return filter.match(spell, source.getControllerId(), source, game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game) {
|
||||
public boolean canChoose(UUID sourceControllerId, Ability source, Game game) {
|
||||
if (this.minNumberOfTargets == 0) {
|
||||
return true;
|
||||
}
|
||||
int count = 0;
|
||||
for (StackObject stackObject : game.getStack()) {
|
||||
// rule 114.4. A spell or ability on the stack is an illegal target for itself.
|
||||
if (sourceId != null && sourceId.equals(stackObject.getSourceId())) {
|
||||
if (source.getSourceId() != null && source.getSourceId().equals(stackObject.getSourceId())) {
|
||||
continue;
|
||||
}
|
||||
if (canBeChosen(stackObject, sourceId, sourceControllerId, game)) {
|
||||
if (canBeChosen(stackObject, sourceControllerId, source, game)) {
|
||||
count++;
|
||||
if (count >= this.minNumberOfTargets) {
|
||||
return true;
|
||||
|
|
@ -87,20 +87,20 @@ public class TargetSpell extends TargetObject {
|
|||
|
||||
@Override
|
||||
public boolean canChoose(UUID sourceControllerId, Game game) {
|
||||
return canChoose(null, sourceControllerId, game);
|
||||
return canChoose(sourceControllerId, null, game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
||||
public Set<UUID> possibleTargets(UUID sourceControllerId, Ability source, Game game) {
|
||||
return game.getStack().stream()
|
||||
.filter(stackObject -> canBeChosen(stackObject, sourceId, sourceControllerId, game))
|
||||
.filter(stackObject -> canBeChosen(stackObject, sourceControllerId, source, game))
|
||||
.map(StackObject::getId)
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<UUID> possibleTargets(UUID sourceControllerId, Game game) {
|
||||
return this.possibleTargets(null, sourceControllerId, game);
|
||||
return this.possibleTargets(sourceControllerId, null, game);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -108,10 +108,10 @@ public class TargetSpell extends TargetObject {
|
|||
return new TargetSpell(this);
|
||||
}
|
||||
|
||||
private boolean canBeChosen(StackObject stackObject, UUID sourceID, UUID sourceControllerId, Game game) {
|
||||
private boolean canBeChosen(StackObject stackObject, UUID sourceControllerId, Ability source, Game game) {
|
||||
return stackObject instanceof Spell
|
||||
&& game.getState().getPlayersInRange(sourceControllerId, game).contains(stackObject.getControllerId())
|
||||
&& filter.match(stackObject, sourceID, sourceControllerId, game);
|
||||
&& filter.match(stackObject, sourceControllerId, source, game);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue