magefree / magefree/mage

AnotherPredicate produces cast error if used in Predicates.and()

Open
#3,976 0 comments 0 reactions 1 assignee Claimed by @LevelX2 View on GitHub
bug
Dominant language
Java
Stars
2.4k
Forks
940
Avg merge
2d 12h
Merged PRs (30d)
160

Description

Caused by Kumena's Speaker.

If AnotherPredicate() is used in a sub Predicate.and, the problem happens.

this workaround fixes the problem:
private static final FilterPermanent filter = new FilterPermanent("another Merfolk or an Island");

static {
filter.add(new AnotherPredicate());
filter.add(Predicates.or(
new SubtypePredicate(SubType.ISLAND),
new SubtypePredicate(SubType.MERFOLK)));
}

this causes the problem:
private static final FilterPermanent filter = new FilterPermanent("another Merfolk or an Island");

static {
filter.add(Predicates.or(
new SubtypePredicate(SubType.ISLAND),
Predicates.and(
new SubtypePredicate(SubType.MERFOLK),
new AnotherPredicate()
)
));
```
FATAL 2017-09-11 21:47:16,801 Game exception gameId: cff56fdf-ca6d-4567-b2e6-376c5579bf6c =>[GAME cff56fdf-ca6d-4567-b2e6-376c5579bf6c] GameImpl.playPriority
java.lang.ClassCastException: mage.game.permanent.PermanentCard cannot be cast to mage.filter.predicate.ObjectSourcePlayer
at mage.filter.predicate.permanent.AnotherPredicate.apply(AnotherPredicate.java:39)
at mage.filter.predicate.Predicates$AndPredicate.apply(Predicates.java:172)
at mage.filter.predicate.Predicates$OrPredicate.apply(Predicates.java:200)
at mage.filter.predicate.Predicates$AndPredicate.apply(Predicates.java:172)
at mage.filter.FilterImpl.match(FilterImpl.java:62)
at mage.filter.FilterPermanent.match(FilterPermanent.java:76)
at mage.game.permanent.Battlefield.lambda$count$2(Battlefield.java:117)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.LongPipeline.reduce(LongPipeline.java:438)
at java.util.stream.LongPipeline.sum(LongPipeline.java:396)
at java.util.stream.ReferencePipeline.count(ReferencePipeline.java:526)
at mage.game.permanent.Battlefield.count(Battlefield.java:118)
at mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition.apply(PermanentsOnTheBattlefieldCondition.java:110)
at mage.abilities.effects.WhileConditionContinuousEffect.apply(WhileConditionContinuousEffect.java:28)
at mage.abilities.effects.ContinuousEffectImpl.apply(ContinuousEffectImpl.java:123)
at mage.abilities.effects.ContinuousEffects.apply(ContinuousEffects.java:973)
at mage.game.GameState.applyEffects(GameState.java:555)
at mage.game.GameImpl.applyEffects(GameImpl.java:1411)
at mage.players.PlayerImpl.moveCards(PlayerImpl.java:3220)
at mage.players.PlayerImpl.moveCards(PlayerImpl.java:3166)
at mage.game.stack.Spell.resolve(Spell.java:298)
at mage.game.GameImpl.resolve(GameImpl.java:1335)
at mage.game.GameImpl.playPriority(GameImpl.java:1286)
at mage.game.turn.Step.priority(Step.java:87)
at mage.game.turn.Phase.playStep(Phase.java:210)
at mage.game.turn.Phase.play(Phase.java:115)
at mage.game.turn.Turn.play(Turn.java:153)
at mage.game.GameImpl.playTurn(GameImpl.java:804)
at mage.game.GameImpl.play(GameImpl.java:713)
at mage.game.GameImpl.start(GameImpl.java:677)
at mage.server.game.GameWorker.call(GameWorker.java:60)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

FATAL 2017-09-10 03:05:25,642 Game exception gameId: 73ee56f1-5c95-494f-9f4d-6e549c4bc15b =>[GAME 73ee56f1-5c95-494f-9f4d-6e549c4bc15b] GameImpl.playPriority
java.lang.ClassCastException: mage.game.permanent.PermanentCard cannot be cast to mage.filter.predicate.ObjectSourcePlayer
at mage.filter.predicate.permanent.AnotherPredicate.apply(AnotherPredicate.java:39)
at mage.filter.predicate.Predicates$AndPredicate.apply(Predicates.java:172)
at mage.filter.predicate.Predicates$OrPredicate.apply(Predicates.java:200)
at mage.filter.predicate.Predicates$AndPredicate.apply(Predicates.java:172)
at mage.filter.FilterImpl.match(FilterImpl.java:62)
at mage.filter.FilterPermanent.match(FilterPermanent.java:76)
at mage.game.permanent.Battlefield.lambda$count$2(Battlefield.java:117)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.LongPipeline.reduce(LongPipeline.java:438)
at java.util.stream.LongPipeline.sum(LongPipeline.java:396)
at java.util.stream.ReferencePipeline.count(ReferencePipeline.java:526)
at mage.game.permanent.Battlefield.count(Battlefield.java:118)
at mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition.apply(PermanentsOnTheBattlefieldCondition.java:110)
at mage.abilities.effects.WhileConditionContinuousEffect.apply(WhileConditionContinuousEffect.java:28)
at mage.abilities.effects.ContinuousEffectImpl.apply(ContinuousEffectImpl.java:123)
at mage.abilities.effects.ContinuousEffects.apply(ContinuousEffects.java:973)
at mage.game.GameState.applyEffects(GameState.java:555)
at mage.game.GameImpl.applyEffects(GameImpl.java:1411)
at mage.players.PlayerImpl.moveCards(PlayerImpl.java:3220)
at mage.players.PlayerImpl.moveCards(PlayerImpl.java:3166)
at mage.game.stack.Spell.resolve(Spell.java:298)
at mage.game.GameImpl.resolve(GameImpl.java:1335)
at mage.game.GameImpl.playPriority(GameImpl.java:1286)
at mage.game.turn.Step.priority(Step.java:87)
at mage.game.turn.Phase.playStep(Phase.java:210)
at mage.game.turn.Phase.play(Phase.java:115)
at mage.game.turn.Turn.play(Turn.java:153)
at mage.game.GameImpl.playTurn(GameImpl.java:804)
at mage.game.GameImpl.play(GameImpl.java:713)
at mage.game.GameImpl.start(GameImpl.java:677)
at mage.server.game.GameWorker.call(GameWorker.java:60)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.