From 12848f154d3e586c3e1d4ff45df71344cb0ec565 Mon Sep 17 00:00:00 2001 From: Hellfish Date: Sun, 15 Jan 2012 18:48:48 +0000 Subject: [PATCH] *Added a GameLoss replacement effect. *Added Lich's Mirror. --- .gitattributes | 1 + src/main/java/forge/Player.java | 18 ++++-- .../card/replacement/ReplaceGameLoss.java | 57 +++++++++++++++++++ .../card/replacement/ReplacementHandler.java | 2 + 4 files changed, 73 insertions(+), 5 deletions(-) create mode 100644 src/main/java/forge/card/replacement/ReplaceGameLoss.java diff --git a/.gitattributes b/.gitattributes index 8f34286a45d..fd3d6b540a8 100644 --- a/.gitattributes +++ b/.gitattributes @@ -10820,6 +10820,7 @@ src/main/java/forge/card/package-info.java svneol=native#text/plain src/main/java/forge/card/replacement/ReplaceDamage.java -text src/main/java/forge/card/replacement/ReplaceDraw.java -text src/main/java/forge/card/replacement/ReplaceGainLife.java -text +src/main/java/forge/card/replacement/ReplaceGameLoss.java -text src/main/java/forge/card/replacement/ReplacementEffect.java -text src/main/java/forge/card/replacement/ReplacementHandler.java -text src/main/java/forge/card/replacement/package-info.java svneol=native#text/plain diff --git a/src/main/java/forge/Player.java b/src/main/java/forge/Player.java index 00372d19b2e..7c3af3bfb4e 100644 --- a/src/main/java/forge/Player.java +++ b/src/main/java/forge/Player.java @@ -2089,6 +2089,16 @@ public abstract class Player extends GameEntity { System.out.println("Tried to lose, but currently can't."); return false; } + + //Replacement effects + HashMap runParams = new HashMap(); + runParams.put("Affected", this); + runParams.put("Event", "GameLoss"); + + if(AllZone.getReplacementHandler().run(runParams)) { + return false; + } + this.lossState = state; this.loseConditionSpell = spellName; return true; @@ -2176,12 +2186,11 @@ public abstract class Player extends GameEntity { } if (this.lossState != GameLossReason.DidNotLoseYet) { - return true; + return this.loseConditionMet(lossState, null); } if (this.poisonCounters >= 10) { - this.loseConditionMet(GameLossReason.Poisoned, null); - return true; + return this.loseConditionMet(GameLossReason.Poisoned, null); } if (this.cantLoseForZeroOrLessLife()) { @@ -2190,8 +2199,7 @@ public abstract class Player extends GameEntity { final boolean hasNoLife = this.getLife() <= 0; if (hasNoLife) { - this.loseConditionMet(GameLossReason.LifeReachedZero, null); - return true; + return this.loseConditionMet(GameLossReason.LifeReachedZero, null); } return false; diff --git a/src/main/java/forge/card/replacement/ReplaceGameLoss.java b/src/main/java/forge/card/replacement/ReplaceGameLoss.java new file mode 100644 index 00000000000..88845ca5e70 --- /dev/null +++ b/src/main/java/forge/card/replacement/ReplaceGameLoss.java @@ -0,0 +1,57 @@ +package forge.card.replacement; + +import java.util.HashMap; + +import forge.AllZoneUtil; +import forge.Card; +import forge.card.spellability.SpellAbility; + +/** + * TODO: Write javadoc for this type. + * + */ +public class ReplaceGameLoss extends ReplacementEffect { + + /** + * Instantiates a new replace gain life. + * + * @param map the map + * @param host the host + */ + public ReplaceGameLoss(HashMap map, Card host) { + super(map, host); + } + + /* (non-Javadoc) + * @see forge.card.replacement.ReplacementEffect#canReplace(java.util.HashMap) + */ + @Override + public boolean canReplace(HashMap runParams) { + if (!runParams.get("Event").equals("GameLoss")) { + return false; + } + if (this.getMapParams().containsKey("ValidPlayer")) { + if (!AllZoneUtil.matchesValid(runParams.get("Affected"), this.getMapParams().get("ValidPlayer").split(","), this.getHostCard())) { + return false; + } + } + + return true; + } + + /* (non-Javadoc) + * @see forge.card.replacement.ReplacementEffect#getCopy() + */ + @Override + public ReplacementEffect getCopy() { + return new ReplaceGameLoss(this.getMapParams(), getHostCard()); + } + + /* (non-Javadoc) + * @see forge.card.replacement.ReplacementEffect#setReplacingObjects(java.util.HashMap, forge.card.spellability.SpellAbility) + */ + @Override + public void setReplacingObjects(HashMap runParams, SpellAbility sa) { + } + +} \ No newline at end of file diff --git a/src/main/java/forge/card/replacement/ReplacementHandler.java b/src/main/java/forge/card/replacement/ReplacementHandler.java index c65d739118c..9d9612e0336 100644 --- a/src/main/java/forge/card/replacement/ReplacementHandler.java +++ b/src/main/java/forge/card/replacement/ReplacementHandler.java @@ -186,6 +186,8 @@ public class ReplacementHandler { ret = new ReplaceGainLife(mapParams, host); } else if (eventToReplace.equals("DamageDone")) { ret = new ReplaceDamage(mapParams, host); + } else if (eventToReplace.equals("GameLoss")) { + ret = new ReplaceGameLoss(mapParams, host); } return ret;