mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 03:08:02 +00:00
DraftEffect.java
This commit is contained in:
@@ -0,0 +1,83 @@
|
|||||||
|
package forge.game.ability.effects;
|
||||||
|
|
||||||
|
import forge.StaticData;
|
||||||
|
import forge.card.ICardFace;
|
||||||
|
import forge.game.Game;
|
||||||
|
import forge.game.ability.AbilityKey;
|
||||||
|
import forge.game.ability.AbilityUtils;
|
||||||
|
import forge.game.ability.SpellAbilityEffect;
|
||||||
|
import forge.game.card.Card;
|
||||||
|
import forge.game.card.CardCollection;
|
||||||
|
import forge.game.player.Player;
|
||||||
|
import forge.game.spellability.SpellAbility;
|
||||||
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.util.Localizer;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class DraftEffect extends SpellAbilityEffect {
|
||||||
|
@Override
|
||||||
|
protected String getStackDescription(SpellAbility sa) {
|
||||||
|
final Card source = sa.getHostCard();
|
||||||
|
final Player player = AbilityUtils.getDefinedPlayers(source, sa.getParam("Defined"), sa).get(0);
|
||||||
|
final ZoneType zone = ZoneType.smartValueOf(sa.getParamOrDefault("Zone", "Hand"));
|
||||||
|
|
||||||
|
final StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
sb.append(player).append(" drafts a card from ").append(source.getName()).append("'s spellbook");
|
||||||
|
if (zone.equals("Hand")) {
|
||||||
|
sb.append(".");
|
||||||
|
} else if (zone.equals("Battlefield")) {
|
||||||
|
sb.append(" and puts it onto the battlefield.");
|
||||||
|
} else if (zone.equals("Exile")) {
|
||||||
|
sb.append(", then exiles it.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resolve(SpellAbility sa) {
|
||||||
|
Map<AbilityKey, Object> moveParams = AbilityKey.newMap();
|
||||||
|
moveParams.put(AbilityKey.LastStateBattlefield, sa.getLastStateBattlefield());
|
||||||
|
moveParams.put(AbilityKey.LastStateGraveyard, sa.getLastStateGraveyard());
|
||||||
|
final Card source = sa.getHostCard();
|
||||||
|
final Player player = AbilityUtils.getDefinedPlayers(source, sa.getParam("Defined"), sa).get(0);
|
||||||
|
final Game game = player.getGame();
|
||||||
|
final ZoneType zone = ZoneType.smartValueOf(sa.getParamOrDefault("Zone", "Hand"));
|
||||||
|
List<String> spellbook = Arrays.asList(sa.getParam("Spellbook").split(","));
|
||||||
|
String [] names = sa.getParam("Spellbook").split(",");
|
||||||
|
final int numToDraft = AbilityUtils.calculateAmount(source,
|
||||||
|
sa.getParamOrDefault("DraftNum", "1"), sa);
|
||||||
|
CardCollection drafted = new CardCollection();
|
||||||
|
|
||||||
|
for (int i = 0; i < numToDraft; i++) {
|
||||||
|
String chosen = "";
|
||||||
|
Collections.shuffle(spellbook);
|
||||||
|
List<ICardFace> faces = new ArrayList<>();
|
||||||
|
for (String name : spellbook.subList(0, 3)) {
|
||||||
|
// Cardnames that include "," must use ";" instead in Spellbook$ (i.e. Tovolar; Dire Overlord)
|
||||||
|
name = name.replace(";", ",");
|
||||||
|
faces.add(StaticData.instance().getCommonCards().getFaceByName(name));
|
||||||
|
}
|
||||||
|
chosen = player.getController().chooseCardName(sa, faces,
|
||||||
|
Localizer.getInstance().getMessage("lblChooseCardDraft"));
|
||||||
|
if (!chosen.equals("")) {
|
||||||
|
Card card = Card.fromPaperCard(StaticData.instance().getCommonCards().getUniqueByName(chosen), player);
|
||||||
|
card.setTokenCard(true);
|
||||||
|
game.getAction().moveTo(ZoneType.None, card, sa, moveParams);
|
||||||
|
drafted.add(card);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (final Card c : drafted) {
|
||||||
|
game.getAction().moveTo(zone, c, sa, moveParams);
|
||||||
|
if (sa.hasParam("RememberDrafted")) {
|
||||||
|
source.addRemembered(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (zone.equals(ZoneType.Library)) {
|
||||||
|
player.shuffle(sa);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user