- Fix Premature Burial so it works when casting from other's hand

This commit is contained in:
swordshine
2014-05-05 05:43:29 +00:00
parent 429c340166
commit c91f1854ea
8 changed files with 94 additions and 6 deletions

View File

@@ -120,6 +120,7 @@ public enum ApiType {
Shuffle (ShuffleEffect.class),
SkipTurn (SkipTurnEffect.class),
StoreSVar (StoreSVarEffect.class),
StoreMap (StoreMapEffect.class),
Tap (TapEffect.class),
TapAll (TapAllEffect.class),
TapOrUntap (TapOrUntapEffect.class),

View File

@@ -0,0 +1,44 @@
package forge.game.ability.effects;
import java.util.ArrayList;
import java.util.List;
import forge.game.GameEntity;
import forge.game.ability.AbilityUtils;
import forge.game.ability.SpellAbilityEffect;
import forge.game.card.Card;
import forge.game.spellability.SpellAbility;
public class StoreMapEffect extends SpellAbilityEffect {
@Override
public void resolve(SpellAbility sa) {
final Card source = sa.getHostCard();
List<GameEntity> entity = new ArrayList<GameEntity>();
List<Object> objects = new ArrayList<Object>();
if (sa.hasParam("RememberEntity")) {
entity.addAll(AbilityUtils.getDefinedPlayers(source, sa.getParam("RememberEntity"), sa));
entity.addAll(AbilityUtils.getDefinedCards(source, sa.getParam("RememberEntity"), sa));
}
if (sa.hasParam("RememberObjects")) {
String type = sa.hasParam("ObjectType") ? sa.getParam("ObjectType") : "Card";
if (type.equals("Card")) {
objects.addAll(AbilityUtils.getDefinedCards(source, sa.getParam("RememberObjects"), sa));
}
}
for (GameEntity e : entity) {
source.addRememberMap(e, objects);
}
if (sa.hasParam("Clear")) {
for (GameEntity e : entity) {
source.getRememberMap().get(e).clear();
}
}
}
}

View File

@@ -53,10 +53,13 @@ import forge.game.zone.Zone;
import forge.game.zone.ZoneType;
import forge.item.IPaperCard;
import forge.item.PaperCard;
import forge.util.CollectionSuppliers;
import forge.util.Expressions;
import forge.util.Lang;
import forge.util.MyRandom;
import forge.util.TextUtil;
import forge.util.maps.HashMapOfLists;
import forge.util.maps.MapOfLists;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
@@ -115,6 +118,7 @@ public class Card extends GameEntity implements Comparable<Card> {
private Map<Long, CardKeywords> changedCardKeywords = new ConcurrentSkipListMap<Long, CardKeywords>();
private final ArrayList<Object> rememberedObjects = new ArrayList<Object>();
private final MapOfLists<GameEntity, Object> rememberMap = new HashMapOfLists<GameEntity, Object>(CollectionSuppliers.<Object>arrayLists());
private final ArrayList<Card> imprintedCards = new ArrayList<Card>();
private final ArrayList<Card> encodedCards = new ArrayList<Card>();
private final List<Card> devouredCards = new ArrayList<Card>();
@@ -512,6 +516,13 @@ public class Card extends GameEntity implements Comparable<Card> {
return this.devouredCards;
}
public final void addRememberMap(final GameEntity e, final List<Object> o) {
this.rememberMap.addAll(e, o);
}
public MapOfLists<GameEntity, Object> getRememberMap() {
return rememberMap;
}
/**
* <p>
* addRemembered.
@@ -6711,6 +6722,16 @@ public class Card extends GameEntity implements Comparable<Card> {
if (!this.getCharacteristics().getManaCost().hasPhyrexian()) {
return false;
}
} else if (property.startsWith("RememberMap")) {
System.out.println(source.getRememberMap());
for (SpellAbility sa : source.getSpellAbilities()) {
for (Player p : AbilityUtils.getDefinedPlayers(source, property.split("RememberMap_")[1], sa)) {
if (source.getRememberMap().get(p).contains(this)) {
return true;
}
}
}
return false;
} else if (property.equals("IsRemembered")) {
if (!source.getRemembered().contains(this)) {
return false;