mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
...
This commit is contained in:
parent
e10b1be9c4
commit
9e925a7723
8 changed files with 36 additions and 45 deletions
|
|
@ -32,8 +32,6 @@ import java.io.Serializable;
|
|||
|
||||
public class ObjectColor implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public static final ObjectColor WHITE = new ObjectColor("W");
|
||||
public static final ObjectColor BLUE = new ObjectColor("U");
|
||||
public static final ObjectColor BLACK = new ObjectColor("B");
|
||||
|
|
|
|||
|
|
@ -142,23 +142,4 @@ public class CostsImpl<T extends Cost> extends ArrayList<T> implements Costs<T>
|
|||
return null;
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public ManaCosts getManaCosts() {
|
||||
// ManaCosts manaCosts = new ManaCosts(ability);
|
||||
// for (T cost: this) {
|
||||
// if (cost instanceof ManaCost)
|
||||
// manaCosts.add((ManaCost)cost);
|
||||
// }
|
||||
// return manaCosts;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public List<VariableManaCost> getVariableCosts() {
|
||||
// List<VariableManaCost> variableCosts = new ArrayList<VariableManaCost>();
|
||||
// for (T cost: this) {
|
||||
// if (cost instanceof ManaCosts)
|
||||
// variableCosts.addAll(((ManaCosts)cost).getVariableCosts());
|
||||
// }
|
||||
// return variableCosts;
|
||||
// }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,6 @@ import mage.players.Player;
|
|||
*/
|
||||
public class ContinuousEffects implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private List<ContinuousEffect> effects = new ArrayList<ContinuousEffect>();
|
||||
|
||||
public void removeEndOfTurnEffects() {
|
||||
|
|
|
|||
|
|
@ -33,10 +33,12 @@ import mage.Constants.Outcome;
|
|||
import mage.Constants.TimingRule;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.ActivatedAbilityImpl;
|
||||
import mage.abilities.DelayedTriggeredAbility;
|
||||
import mage.abilities.common.OnEventTriggeredAbility;
|
||||
import mage.abilities.costs.mana.ManaCosts;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.ReplacementEffectImpl;
|
||||
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
|
||||
import mage.abilities.effects.common.ExileSourceEffect;
|
||||
import mage.abilities.effects.common.GainAbilitySourceEffect;
|
||||
import mage.cards.Card;
|
||||
|
|
@ -58,7 +60,7 @@ public class UnearthAbility extends ActivatedAbilityImpl {
|
|||
super(Zone.GRAVEYARD, new UnearthEffect(), costs);
|
||||
this.timing = TimingRule.SORCERY;
|
||||
this.effects.add(new GainAbilitySourceEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield));
|
||||
this.effects.add(new GainAbilitySourceEffect(new OnEventTriggeredAbility(EventType.END_TURN_STEP_PRE, "beginning of the end step", new ExileSourceEffect()), Duration.WhileOnBattlefield));
|
||||
this.effects.add(new CreateDelayedTriggeredAbilityEffect(new UnearthDelayedTriggeredAbility()));
|
||||
this.effects.add(new UnearthLeavesBattlefieldEffect());
|
||||
}
|
||||
|
||||
|
|
@ -85,6 +87,7 @@ class UnearthEffect extends OneShotEffect {
|
|||
Card card = player.getGraveyard().get(this.source.getSourceId());
|
||||
if (card != null) {
|
||||
player.putOntoBattlefield(card, game);
|
||||
player.removeFromGraveyard(card, game);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
@ -97,6 +100,28 @@ class UnearthEffect extends OneShotEffect {
|
|||
|
||||
}
|
||||
|
||||
class UnearthDelayedTriggeredAbility extends DelayedTriggeredAbility {
|
||||
|
||||
public UnearthDelayedTriggeredAbility() {
|
||||
super(new ExileSourceEffect());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
if (event.getType() == EventType.END_TURN_STEP_PRE && event.getPlayerId().equals(this.controllerId)) {
|
||||
trigger(game, event.getPlayerId());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Exile {this} at the beginning of the next end step";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class UnearthLeavesBattlefieldEffect extends ReplacementEffectImpl {
|
||||
|
||||
|
||||
|
|
@ -108,7 +133,7 @@ class UnearthLeavesBattlefieldEffect extends ReplacementEffectImpl {
|
|||
public boolean applies(GameEvent event, Game game) {
|
||||
if (event.getType() == EventType.ZONE_CHANGE && event.getTargetId().equals(this.source.getSourceId())) {
|
||||
ZoneChangeEvent zEvent = (ZoneChangeEvent)event;
|
||||
if (zEvent.getFromZone() == Zone.BATTLEFIELD)
|
||||
if (zEvent.getFromZone() == Zone.BATTLEFIELD && zEvent.getToZone() != Zone.EXILED)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
@ -128,6 +153,6 @@ class UnearthLeavesBattlefieldEffect extends ReplacementEffectImpl {
|
|||
|
||||
@Override
|
||||
public String getText() {
|
||||
return "When {this} leaves the battlefield, exile {this}";
|
||||
return "When {this} leaves the battlefield, exile it";
|
||||
}
|
||||
}
|
||||
|
|
@ -58,7 +58,7 @@ public class Exile implements Serializable {
|
|||
}
|
||||
|
||||
public ExileZone createZone(UUID id, String name) {
|
||||
return createZone(id, name, false);
|
||||
return createZone(id, name + " - Exile", false);
|
||||
}
|
||||
|
||||
public ExileZone createZone(UUID id, String name, boolean hidden) {
|
||||
|
|
|
|||
|
|
@ -524,6 +524,7 @@ public abstract class GameImpl implements Game, Serializable {
|
|||
if (!replaceEvent(new GameEvent(GameEvent.EventType.DRAW_STEP, null, null, activePlayerId))) {
|
||||
//20091005 - 504.1/703.4c
|
||||
getPlayer(activePlayerId).drawCards(1, this);
|
||||
saveState();
|
||||
fireEvent(new GameEvent(GameEvent.EventType.DRAW_STEP_PRE, null, null, activePlayerId));
|
||||
playPriority(activePlayerId);
|
||||
fireEvent(new GameEvent(GameEvent.EventType.DRAW_STEP_POST, null, null, activePlayerId));
|
||||
|
|
@ -606,6 +607,7 @@ public abstract class GameImpl implements Game, Serializable {
|
|||
playPriority(activePlayerId);
|
||||
fireEvent(new GameEvent(GameEvent.EventType.END_COMBAT_STEP_POST, null, null, activePlayerId));
|
||||
removeCreaturesFromCombat();
|
||||
saveState();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -60,8 +60,6 @@ import mage.target.common.TargetCardInLibrary;
|
|||
public interface Player extends MageItem {
|
||||
|
||||
public boolean isHuman();
|
||||
public Deck getDeck();
|
||||
public void setDeck(Deck deck);
|
||||
public String getName();
|
||||
public Library getLibrary();
|
||||
public Cards getGraveyard();
|
||||
|
|
|
|||
|
|
@ -76,7 +76,6 @@ public abstract class PlayerImpl implements Player, Serializable {
|
|||
protected int life;
|
||||
protected boolean wins;
|
||||
protected boolean loses;
|
||||
protected Deck deck;
|
||||
protected Library library;
|
||||
protected Cards hand = new CardsImpl(Zone.HAND);
|
||||
protected Cards graveyard = new CardsImpl(Zone.GRAVEYARD);
|
||||
|
|
@ -90,10 +89,12 @@ public abstract class PlayerImpl implements Player, Serializable {
|
|||
protected boolean passedTurn;
|
||||
protected boolean left;
|
||||
|
||||
public PlayerImpl(String name) {
|
||||
public PlayerImpl(String name, Deck deck) {
|
||||
this.playerId = UUID.randomUUID();
|
||||
this.name = name;
|
||||
deck.setOwnerId(playerId);
|
||||
library = new Library(playerId);
|
||||
library.addAll(deck.getCards());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -101,14 +102,12 @@ public abstract class PlayerImpl implements Player, Serializable {
|
|||
this.hand.clear();
|
||||
this.graveyard.clear();
|
||||
this.abilities.clear();
|
||||
this.library.clear();
|
||||
this.wins = false;
|
||||
this.loses = false;
|
||||
this.left = false;
|
||||
this.passed = false;
|
||||
this.passedTurn = false;
|
||||
library.addAll(deck.getCards());
|
||||
for (Card card: deck.getCards().values()) {
|
||||
for (Card card: library.getCards()) {
|
||||
for (Watcher watcher: card.getWatchers()) {
|
||||
watcher.setControllerId(playerId);
|
||||
game.getState().getWatchers().add(watcher);
|
||||
|
|
@ -470,17 +469,6 @@ public abstract class PlayerImpl implements Player, Serializable {
|
|||
return graveyard;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Deck getDeck() {
|
||||
return deck;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDeck(Deck deck) {
|
||||
this.deck = deck;
|
||||
deck.setOwnerId(playerId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ManaPool getManaPool() {
|
||||
return this.manaPool;
|
||||
|
|
@ -578,7 +566,7 @@ public abstract class PlayerImpl implements Player, Serializable {
|
|||
@Override
|
||||
public void restore(Player player) {
|
||||
this.library = player.getLibrary();
|
||||
this.deck = player.getDeck();
|
||||
// this.deck = player.getDeck();
|
||||
this.hand = player.getHand();
|
||||
this.graveyard = player.getGraveyard();
|
||||
this.abilities = player.getAbilities();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue