* Choose an ability - fixed not working cards like Argivian Avenger, Atraxas Skitterfang, Steel Seraph (#10115)

This commit is contained in:
Oleg Agafonov 2023-03-21 01:59:12 +04:00
parent ea10b025e0
commit 6b05562336
9 changed files with 68 additions and 23 deletions

View file

@ -1,5 +1,6 @@
package mage.choices;
import mage.util.CardUtil;
import mage.util.RandomUtil;
import org.apache.log4j.Logger;
@ -111,6 +112,7 @@ public class ChoiceImpl implements Choice {
@Override
public void setChoices(Set<String> choices) {
CardUtil.checkSetParamForSerializationCompatibility(choices);
this.choices = choices;
protectFromEmptyChoices();
}

View file

@ -16,6 +16,7 @@ import mage.cards.Card;
import mage.cards.Cards;
import mage.choices.Choice;
import mage.game.permanent.Permanent;
import mage.util.CardUtil;
/**
*
@ -65,6 +66,9 @@ public class PlayerQueryEvent extends EventObject implements ExternalEvent, Seri
Set<UUID> targets, Cards cards, QueryType queryType, int min, int max, boolean required,
Map<String, Serializable> options, List<String> messages) {
super(playerId);
CardUtil.checkSetParamForSerializationCompatibility(choices);
this.queryType = queryType;
this.message = message;
this.playerId = playerId;

View file

@ -1733,4 +1733,12 @@ public final class CardUtil {
return "" + startingLoyalty;
}
}
public static void checkSetParamForSerializationCompatibility(Set<String> data) {
// HashMap uses inner class for Keys without serialization support,
// so you can't use it for client-server data
if (data != null && data.getClass().getName().endsWith("$KeySet")) {
throw new IllegalArgumentException("Can't use KeySet as param, use new HashSet<>(data.keySet()) instead");
}
}
}