Added Holiday Cube 2014 and some new cards

This commit is contained in:
fireshoes 2014-12-12 13:53:56 -06:00
parent c3dd52d19e
commit 218e044804
11 changed files with 1469 additions and 403 deletions

View file

@ -0,0 +1,581 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.tournament.cubes;
import mage.game.draft.DraftCube;
/**
*
* @author fireshoes
*/
public class HolidayCube2014 extends DraftCube {
public HolidayCube2014() {
super("MTGO Holiday Cube 2013");
cubeCards.add(new CardIdentity("Accorder Paladin",""));
cubeCards.add(new CardIdentity("Banisher Priest",""));
cubeCards.add(new CardIdentity("Brimaz, King of Oreskos",""));
cubeCards.add(new CardIdentity("Council's Judgment",""));
cubeCards.add(new CardIdentity("Imposing Sovereign",""));
cubeCards.add(new CardIdentity("Leonin Arbiter",""));
cubeCards.add(new CardIdentity("Aven Mindcensor",""));
cubeCards.add(new CardIdentity("Banishing Light",""));
cubeCards.add(new CardIdentity("Containment Priest",""));
cubeCards.add(new CardIdentity("Hallowed Spiritkeeper",""));
cubeCards.add(new CardIdentity("Iona, Shield of Emeria",""));
cubeCards.add(new CardIdentity("Spirit of the Labyrinth",""));
cubeCards.add(new CardIdentity("Honor of the Pure",""));
cubeCards.add(new CardIdentity("Path to Exile",""));
cubeCards.add(new CardIdentity("Land Tax",""));
cubeCards.add(new CardIdentity("Exalted Angel",""));
cubeCards.add(new CardIdentity("Mana Tithe",""));
cubeCards.add(new CardIdentity("Spectral Procession",""));
cubeCards.add(new CardIdentity("Wall of Omens",""));
cubeCards.add(new CardIdentity("Sun Titan",""));
cubeCards.add(new CardIdentity("Leonin Relic-Warder",""));
cubeCards.add(new CardIdentity("Elesh Norn, Grand Cenobite",""));
cubeCards.add(new CardIdentity("Lingering Souls",""));
cubeCards.add(new CardIdentity("Terminus",""));
cubeCards.add(new CardIdentity("Disenchant",""));
cubeCards.add(new CardIdentity("Mother of Runes",""));
cubeCards.add(new CardIdentity("Weathered Wayfarer",""));
cubeCards.add(new CardIdentity("Ravages of War",""));
cubeCards.add(new CardIdentity("Student of Warfare",""));
cubeCards.add(new CardIdentity("Swords to Plowshares",""));
cubeCards.add(new CardIdentity("Elspeth Tirel",""));
cubeCards.add(new CardIdentity("Mirran Crusader",""));
cubeCards.add(new CardIdentity("Elite Vanguard",""));
cubeCards.add(new CardIdentity("Day of Judgment",""));
cubeCards.add(new CardIdentity("Silverblade Paladin",""));
cubeCards.add(new CardIdentity("Soldier of the Pantheon",""));
cubeCards.add(new CardIdentity("Enlightened Tutor",""));
cubeCards.add(new CardIdentity("Parallax Wave",""));
cubeCards.add(new CardIdentity("Kami of Ancient Law",""));
cubeCards.add(new CardIdentity("Isamaru, Hound of Konda",""));
cubeCards.add(new CardIdentity("Savannah Lions",""));
cubeCards.add(new CardIdentity("Wrath of God",""));
cubeCards.add(new CardIdentity("Cloudgoat Ranger",""));
cubeCards.add(new CardIdentity("Reveillark",""));
cubeCards.add(new CardIdentity("Flickerwisp",""));
cubeCards.add(new CardIdentity("Ranger of Eos",""));
cubeCards.add(new CardIdentity("Elspeth, Knight-Errant",""));
cubeCards.add(new CardIdentity("Balance",""));
cubeCards.add(new CardIdentity("Journey to Nowhere",""));
cubeCards.add(new CardIdentity("Emeria Angel",""));
cubeCards.add(new CardIdentity("Ajani Goldmane",""));
cubeCards.add(new CardIdentity("Porcelain Legionnaire",""));
cubeCards.add(new CardIdentity("Blade Splicer",""));
cubeCards.add(new CardIdentity("Thalia, Guardian of Thraben",""));
cubeCards.add(new CardIdentity("Restoration Angel",""));
cubeCards.add(new CardIdentity("Moat",""));
cubeCards.add(new CardIdentity("Elspeth, Sun's Champion",""));
cubeCards.add(new CardIdentity("Spear of Heliod",""));
cubeCards.add(new CardIdentity("Unexpectedly Absent",""));
cubeCards.add(new CardIdentity("Armageddon",""));
cubeCards.add(new CardIdentity("Faith's Fetters",""));
cubeCards.add(new CardIdentity("Stoneforge Mystic",""));
cubeCards.add(new CardIdentity("Baneslayer Angel",""));
cubeCards.add(new CardIdentity("Hero of Bladehold",""));
cubeCards.add(new CardIdentity("Oblivion Ring",""));
cubeCards.add(new CardIdentity("Ajani, Caller of the Pride",""));
cubeCards.add(new CardIdentity("Angel of Serenity",""));
cubeCards.add(new CardIdentity("Archangel of Thune",""));
cubeCards.add(new CardIdentity("Gideon Jura",""));
cubeCards.add(new CardIdentity("Augur of Bolas",""));
cubeCards.add(new CardIdentity("Delver of Secrets",""));
cubeCards.add(new CardIdentity("Ponder",""));
cubeCards.add(new CardIdentity("Talrand, Sky Summoner",""));
cubeCards.add(new CardIdentity("Thada Adel, Acquisitor",""));
cubeCards.add(new CardIdentity("Kira, Great Glass-Spinner",""));
cubeCards.add(new CardIdentity("Deceiver Exarch",""));
cubeCards.add(new CardIdentity("Grand Architect",""));
cubeCards.add(new CardIdentity("Pestermite",""));
cubeCards.add(new CardIdentity("Repeal",""));
cubeCards.add(new CardIdentity("Tezzeret the Seeker",""));
cubeCards.add(new CardIdentity("Thirst for Knowledge",""));
cubeCards.add(new CardIdentity("Mana Drain",""));
cubeCards.add(new CardIdentity("Frantic Search",""));
cubeCards.add(new CardIdentity("Treachery",""));
cubeCards.add(new CardIdentity("Brainstorm",""));
cubeCards.add(new CardIdentity("Brain Freeze",""));
cubeCards.add(new CardIdentity("Venser, Shaper Savant",""));
cubeCards.add(new CardIdentity("Sower of Temptation",""));
cubeCards.add(new CardIdentity("Consecrated Sphinx",""));
cubeCards.add(new CardIdentity("Snapcaster Mage",""));
cubeCards.add(new CardIdentity("True-Name Nemesis",""));
cubeCards.add(new CardIdentity("Force Spike",""));
cubeCards.add(new CardIdentity("Upheaval",""));
cubeCards.add(new CardIdentity("Gifts Ungiven",""));
cubeCards.add(new CardIdentity("Compulsive Research",""));
cubeCards.add(new CardIdentity("Riftwing Cloudskate",""));
cubeCards.add(new CardIdentity("Glen Elendra Archmage",""));
cubeCards.add(new CardIdentity("Inkwell Leviathan",""));
cubeCards.add(new CardIdentity("Tinker",""));
cubeCards.add(new CardIdentity("Jace, the Mind Sculptor",""));
cubeCards.add(new CardIdentity("Old Man of the Sea",""));
cubeCards.add(new CardIdentity("Mystical Tutor",""));
cubeCards.add(new CardIdentity("Impulse",""));
cubeCards.add(new CardIdentity("Turnabout",""));
cubeCards.add(new CardIdentity("Palinchron",""));
cubeCards.add(new CardIdentity("Daze",""));
cubeCards.add(new CardIdentity("Meloku the Clouded Mirror",""));
cubeCards.add(new CardIdentity("Remand",""));
cubeCards.add(new CardIdentity("Looter il-Kor",""));
cubeCards.add(new CardIdentity("Mulldrifter",""));
cubeCards.add(new CardIdentity("Cryptic Command",""));
cubeCards.add(new CardIdentity("Serendib Efreet",""));
cubeCards.add(new CardIdentity("Jace Beleren",""));
cubeCards.add(new CardIdentity("Preordain",""));
cubeCards.add(new CardIdentity("Fact or Fiction",""));
cubeCards.add(new CardIdentity("Mana Leak",""));
cubeCards.add(new CardIdentity("Frost Titan",""));
cubeCards.add(new CardIdentity("Phantasmal Image",""));
cubeCards.add(new CardIdentity("Dungeon Geists",""));
cubeCards.add(new CardIdentity("Tamiyo, the Moon Sage",""));
cubeCards.add(new CardIdentity("Timetwister",""));
cubeCards.add(new CardIdentity("Show and Tell",""));
cubeCards.add(new CardIdentity("Memory Lapse",""));
cubeCards.add(new CardIdentity("Opposition",""));
cubeCards.add(new CardIdentity("Mind's Desire",""));
cubeCards.add(new CardIdentity("Vendilion Clique",""));
cubeCards.add(new CardIdentity("Counterspell",""));
cubeCards.add(new CardIdentity("Force of Will",""));
cubeCards.add(new CardIdentity("Control Magic",""));
cubeCards.add(new CardIdentity("Jace, Architect of Thought",""));
cubeCards.add(new CardIdentity("Time Walk",""));
cubeCards.add(new CardIdentity("Bribery",""));
cubeCards.add(new CardIdentity("Ancestral Recall",""));
cubeCards.add(new CardIdentity("Ancestral Vision",""));
cubeCards.add(new CardIdentity("Phyrexian Metamorph",""));
cubeCards.add(new CardIdentity("Time Spiral",""));
cubeCards.add(new CardIdentity("Trinket Mage",""));
cubeCards.add(new CardIdentity("Bloadsoaked Champion",""));
cubeCards.add(new CardIdentity("Brain Maggot",""));
cubeCards.add(new CardIdentity("Carnophage",""));
cubeCards.add(new CardIdentity("Desecration Demon",""));
cubeCards.add(new CardIdentity("Geralf's Messenger",""));
cubeCards.add(new CardIdentity("Imperial Seal",""));
cubeCards.add(new CardIdentity("Massacre Wurm",""));
cubeCards.add(new CardIdentity("Master of the Feast",""));
cubeCards.add(new CardIdentity("Murderous Cut",""));
cubeCards.add(new CardIdentity("Ophiomancer",""));
cubeCards.add(new CardIdentity("Pack Rat",""));
cubeCards.add(new CardIdentity("Phyrexian Negator",""));
cubeCards.add(new CardIdentity("Tombstalker",""));
cubeCards.add(new CardIdentity("Vampire Lacerator",""));
cubeCards.add(new CardIdentity("Yawgmoth's Bargain",""));
cubeCards.add(new CardIdentity("Recurring Nightmare",""));
cubeCards.add(new CardIdentity("Buried Alive",""));
cubeCards.add(new CardIdentity("Tendrils of Agony",""));
cubeCards.add(new CardIdentity("Unburial Rites",""));
cubeCards.add(new CardIdentity("Mesmeric Fiend",""));
cubeCards.add(new CardIdentity("Gatekeeper of Malakir",""));
cubeCards.add(new CardIdentity("Grave Titan",""));
cubeCards.add(new CardIdentity("Phyrexian Obliterator",""));
cubeCards.add(new CardIdentity("Necromancy",""));
cubeCards.add(new CardIdentity("Yawgmoth's Will",""));
cubeCards.add(new CardIdentity("Nezumi Shortfang",""));
cubeCards.add(new CardIdentity("Dark Confidant",""));
cubeCards.add(new CardIdentity("Go for the Throat",""));
cubeCards.add(new CardIdentity("Sheoldred, Whispering One",""));
cubeCards.add(new CardIdentity("Bloodline Keeper",""));
cubeCards.add(new CardIdentity("Animate Dead",""));
cubeCards.add(new CardIdentity("Gravecrawler",""));
cubeCards.add(new CardIdentity("Griselbrand",""));
cubeCards.add(new CardIdentity("Vampiric Tutor",""));
cubeCards.add(new CardIdentity("Living Death",""));
cubeCards.add(new CardIdentity("Reanimate",""));
cubeCards.add(new CardIdentity("Bone Shredder",""));
cubeCards.add(new CardIdentity("Braids, Cabal Minion",""));
cubeCards.add(new CardIdentity("Entomb",""));
cubeCards.add(new CardIdentity("Putrid Imp",""));
cubeCards.add(new CardIdentity("Nezumi Graverobber",""));
cubeCards.add(new CardIdentity("Damnation",""));
cubeCards.add(new CardIdentity("Nekrataal",""));
cubeCards.add(new CardIdentity("Shriekmaw",""));
cubeCards.add(new CardIdentity("Bitterblossom",""));
cubeCards.add(new CardIdentity("Demonic Tutor",""));
cubeCards.add(new CardIdentity("Necropotence",""));
cubeCards.add(new CardIdentity("Disfigure",""));
cubeCards.add(new CardIdentity("Vampire Nighthawk",""));
cubeCards.add(new CardIdentity("Duress",""));
cubeCards.add(new CardIdentity("Skinrender",""));
cubeCards.add(new CardIdentity("Dismember",""));
cubeCards.add(new CardIdentity("Diregraf Ghoul",""));
cubeCards.add(new CardIdentity("Liliana of the Veil",""));
cubeCards.add(new CardIdentity("Hymn to Tourach",""));
cubeCards.add(new CardIdentity("Ultimate Price",""));
cubeCards.add(new CardIdentity("Nether Void",""));
cubeCards.add(new CardIdentity("The Abyss",""));
cubeCards.add(new CardIdentity("Lifebane Zombie",""));
cubeCards.add(new CardIdentity("Thoughtseize",""));
cubeCards.add(new CardIdentity("Hero's Downfall",""));
cubeCards.add(new CardIdentity("Diabolic Edict",""));
cubeCards.add(new CardIdentity("Sarcomancy",""));
cubeCards.add(new CardIdentity("Oona's Prowler",""));
cubeCards.add(new CardIdentity("Dark Ritual",""));
cubeCards.add(new CardIdentity("Hypnotic Specter",""));
cubeCards.add(new CardIdentity("Bloodghast",""));
cubeCards.add(new CardIdentity("Inquisition of Kozilek",""));
cubeCards.add(new CardIdentity("Mind Twist",""));
cubeCards.add(new CardIdentity("Borderland Marauder",""));
cubeCards.add(new CardIdentity("Burst Lightining",""));
cubeCards.add(new CardIdentity("Crater's Claws",""));
cubeCards.add(new CardIdentity("Daretti, Scrap Savant",""));
cubeCards.add(new CardIdentity("Dualcaster Mage",""));
cubeCards.add(new CardIdentity("Eidolon of the Great Revel",""));
cubeCards.add(new CardIdentity("Gore-house Chainwalker",""));
cubeCards.add(new CardIdentity("Guttersnipe",""));
cubeCards.add(new CardIdentity("Imperial Recruiter",""));
cubeCards.add(new CardIdentity("Kiki-Jiki, Mirror Breaker",""));
cubeCards.add(new CardIdentity("Lightning Mauler",""));
cubeCards.add(new CardIdentity("Lightning Strike",""));
cubeCards.add(new CardIdentity("Manic Vandal",""));
cubeCards.add(new CardIdentity("Prophetic Flamespeaker",""));
cubeCards.add(new CardIdentity("Sarkhan, the Dragonspeaker",""));
cubeCards.add(new CardIdentity("Searing Spear",""));
cubeCards.add(new CardIdentity("Splinter Twin",""));
cubeCards.add(new CardIdentity("Stormbreath Dragon",""));
cubeCards.add(new CardIdentity("Stromkirk Noble",""));
cubeCards.add(new CardIdentity("Through the Breach",""));
cubeCards.add(new CardIdentity("Young Pyromancer",""));
cubeCards.add(new CardIdentity("Frenzied Goblin",""));
cubeCards.add(new CardIdentity("Torch Fiend",""));
cubeCards.add(new CardIdentity("Chandra's Phoenix",""));
cubeCards.add(new CardIdentity("Avalanche Riders",""));
cubeCards.add(new CardIdentity("Goblin Welder",""));
cubeCards.add(new CardIdentity("Firebolt",""));
cubeCards.add(new CardIdentity("Sulfuric Vortex",""));
cubeCards.add(new CardIdentity("Seething Song",""));
cubeCards.add(new CardIdentity("Rift Bolt",""));
cubeCards.add(new CardIdentity("Hellrider",""));
cubeCards.add(new CardIdentity("Koth of the Hammer",""));
cubeCards.add(new CardIdentity("Jackal Pup",""));
cubeCards.add(new CardIdentity("Incinerate",""));
cubeCards.add(new CardIdentity("Grim Lavamancer",""));
cubeCards.add(new CardIdentity("Bonfire of the Damned",""));
cubeCards.add(new CardIdentity("Thundermaw Hellkite",""));
cubeCards.add(new CardIdentity("Magma Jet",""));
cubeCards.add(new CardIdentity("Firedrinker Satyr",""));
cubeCards.add(new CardIdentity("Wildfire",""));
cubeCards.add(new CardIdentity("Sneak Attack",""));
cubeCards.add(new CardIdentity("Molten Rain",""));
cubeCards.add(new CardIdentity("Char",""));
cubeCards.add(new CardIdentity("Empty the Warrens",""));
cubeCards.add(new CardIdentity("Ancient Grudge",""));
cubeCards.add(new CardIdentity("Greater Gargadon",""));
cubeCards.add(new CardIdentity("Magus of the Moon",""));
cubeCards.add(new CardIdentity("Smash to Smithereens",""));
cubeCards.add(new CardIdentity("Siege-Gang Commander",""));
cubeCards.add(new CardIdentity("Burning of Xinye",""));
cubeCards.add(new CardIdentity("Goblin Guide",""));
cubeCards.add(new CardIdentity("Searing Blaze",""));
cubeCards.add(new CardIdentity("Kargan Dragonlord",""));
cubeCards.add(new CardIdentity("Wheel of Fortune",""));
cubeCards.add(new CardIdentity("Arc Trail",""));
cubeCards.add(new CardIdentity("Spikeshot Elder",""));
cubeCards.add(new CardIdentity("Flametongue Kavu",""));
cubeCards.add(new CardIdentity("Inferno Titan",""));
cubeCards.add(new CardIdentity("Brimstone Volley",""));
cubeCards.add(new CardIdentity("Faithless Looting",""));
cubeCards.add(new CardIdentity("Zealous Conscripts",""));
cubeCards.add(new CardIdentity("Mizzium Mortars",""));
cubeCards.add(new CardIdentity("Goblin Vandal",""));
cubeCards.add(new CardIdentity("Lightning Bolt",""));
cubeCards.add(new CardIdentity("Chain Lightning",""));
cubeCards.add(new CardIdentity("Fireblast",""));
cubeCards.add(new CardIdentity("Chandra, Pyromaster",""));
cubeCards.add(new CardIdentity("Hero of Oxid Ridge",""));
cubeCards.add(new CardIdentity("Courser of Kruphix",""));
cubeCards.add(new CardIdentity("Craterhoof Behemoth",""));
cubeCards.add(new CardIdentity("Freyalise, Llanowar's Fury",""));
cubeCards.add(new CardIdentity("Krosan Grip",""));
cubeCards.add(new CardIdentity("Life from the Loam",""));
cubeCards.add(new CardIdentity("Nature's Claim",""));
cubeCards.add(new CardIdentity("Nissa, Worldwaker",""));
cubeCards.add(new CardIdentity("Oath of Druids",""));
cubeCards.add(new CardIdentity("Pattern of Rebirth",""));
cubeCards.add(new CardIdentity("Rancor",""));
cubeCards.add(new CardIdentity("Reclamation Sage",""));
cubeCards.add(new CardIdentity("Sakura-Tribe Elder",""));
cubeCards.add(new CardIdentity("Search for Tomorrow",""));
cubeCards.add(new CardIdentity("Song of the Dryads",""));
cubeCards.add(new CardIdentity("Troll Ascetic",""));
cubeCards.add(new CardIdentity("Wall of Roots",""));
cubeCards.add(new CardIdentity("Yavimaya Elder",""));
cubeCards.add(new CardIdentity("Indrik Stomphowler",""));
cubeCards.add(new CardIdentity("Lotus Cobra",""));
cubeCards.add(new CardIdentity("Primeval Titan",""));
cubeCards.add(new CardIdentity("Birds of Paradise",""));
cubeCards.add(new CardIdentity("Wall of Blossoms",""));
cubeCards.add(new CardIdentity("Tooth and Nail",""));
cubeCards.add(new CardIdentity("Eternal Witness",""));
cubeCards.add(new CardIdentity("Primal Command",""));
cubeCards.add(new CardIdentity("Stunted Growth",""));
cubeCards.add(new CardIdentity("Master of the Wild Hunt",""));
cubeCards.add(new CardIdentity("Harmonize",""));
cubeCards.add(new CardIdentity("Terastodon",""));
cubeCards.add(new CardIdentity("Garruk Wildspeaker",""));
cubeCards.add(new CardIdentity("Birthing Pod",""));
cubeCards.add(new CardIdentity("Scavenging Ooze",""));
cubeCards.add(new CardIdentity("Avacyn's Pilgrim",""));
cubeCards.add(new CardIdentity("Wolfir Silverheart",""));
cubeCards.add(new CardIdentity("Eureka",""));
cubeCards.add(new CardIdentity("Garruk, Caller of Beasts",""));
cubeCards.add(new CardIdentity("Natural Order",""));
cubeCards.add(new CardIdentity("Deranged Hermit",""));
cubeCards.add(new CardIdentity("Plow Under",""));
cubeCards.add(new CardIdentity("Heartbeat of Spring",""));
cubeCards.add(new CardIdentity("Woodfall Primus",""));
cubeCards.add(new CardIdentity("Noble Hierarch",""));
cubeCards.add(new CardIdentity("Oracle of Mul Daya",""));
cubeCards.add(new CardIdentity("Arbor Elf",""));
cubeCards.add(new CardIdentity("Joraga Treespeaker",""));
cubeCards.add(new CardIdentity("Vengevine",""));
cubeCards.add(new CardIdentity("Fauna Shaman",""));
cubeCards.add(new CardIdentity("Genesis Wave",""));
cubeCards.add(new CardIdentity("Thrun, the Last Troll",""));
cubeCards.add(new CardIdentity("Beast Within",""));
cubeCards.add(new CardIdentity("Garruk Relentless",""));
cubeCards.add(new CardIdentity("Polukranos, World Eater",""));
cubeCards.add(new CardIdentity("Rofellos, Llanowar Emissary",""));
cubeCards.add(new CardIdentity("Elves of Deep Shadow",""));
cubeCards.add(new CardIdentity("Tarmogoyf",""));
cubeCards.add(new CardIdentity("Avenger of Zendikar",""));
cubeCards.add(new CardIdentity("Green Sun's Zenith",""));
cubeCards.add(new CardIdentity("Acidic Slime",""));
cubeCards.add(new CardIdentity("Garruk, Primal Hunter",""));
cubeCards.add(new CardIdentity("Llanowar Elves",""));
cubeCards.add(new CardIdentity("Regrowth",""));
cubeCards.add(new CardIdentity("Fyndhorn Elves",""));
cubeCards.add(new CardIdentity("Thragtusk",""));
cubeCards.add(new CardIdentity("Elvish Mystic",""));
cubeCards.add(new CardIdentity("Sylvan Caryatid",""));
cubeCards.add(new CardIdentity("Survival of the Fittest",""));
cubeCards.add(new CardIdentity("Sylvan Library",""));
cubeCards.add(new CardIdentity("Bazaar of Baghdad",""));
cubeCards.add(new CardIdentity("Clifftop Retreat",""));
cubeCards.add(new CardIdentity("Dragonskull Summit",""));
cubeCards.add(new CardIdentity("Drowned Catacomb",""));
cubeCards.add(new CardIdentity("Glacial Fortress",""));
cubeCards.add(new CardIdentity("Hinterland Harbor",""));
cubeCards.add(new CardIdentity("Isolated Chapel",""));
cubeCards.add(new CardIdentity("Mutavault",""));
cubeCards.add(new CardIdentity("Rootbound Crag",""));
cubeCards.add(new CardIdentity("Sulfur Falls",""));
cubeCards.add(new CardIdentity("Sunpetal Grove",""));
cubeCards.add(new CardIdentity("Urborg, Tomb of Yawgmoth",""));
cubeCards.add(new CardIdentity("Woodland Cemetary",""));
cubeCards.add(new CardIdentity("Savannah",""));
cubeCards.add(new CardIdentity("Bayou",""));
cubeCards.add(new CardIdentity("Scrubland",""));
cubeCards.add(new CardIdentity("Blood Crypt",""));
cubeCards.add(new CardIdentity("Brushland",""));
cubeCards.add(new CardIdentity("Caves of Koilos",""));
cubeCards.add(new CardIdentity("Ghitu Encampment",""));
cubeCards.add(new CardIdentity("Hallowed Fountain",""));
cubeCards.add(new CardIdentity("Library of Alexandria",""));
cubeCards.add(new CardIdentity("Llanowar Wastes",""));
cubeCards.add(new CardIdentity("Marsh Flats",""));
cubeCards.add(new CardIdentity("Mishra's Workshop",""));
cubeCards.add(new CardIdentity("Treetop Village",""));
cubeCards.add(new CardIdentity("Adarkar Wastes",""));
cubeCards.add(new CardIdentity("Plateau",""));
cubeCards.add(new CardIdentity("Rishadan Port",""));
cubeCards.add(new CardIdentity("Scalding Tarn",""));
cubeCards.add(new CardIdentity("Shivan Reef",""));
cubeCards.add(new CardIdentity("Steam Vents",""));
cubeCards.add(new CardIdentity("Strip Mine",""));
cubeCards.add(new CardIdentity("Taiga",""));
cubeCards.add(new CardIdentity("Tropical Island",""));
cubeCards.add(new CardIdentity("Tundra",""));
cubeCards.add(new CardIdentity("Underground River",""));
cubeCards.add(new CardIdentity("Volcanic Island",""));
cubeCards.add(new CardIdentity("Windbrisk Heights",""));
cubeCards.add(new CardIdentity("Wooded Foothills",""));
cubeCards.add(new CardIdentity("Ancient Tomb",""));
cubeCards.add(new CardIdentity("Badlands",""));
cubeCards.add(new CardIdentity("Arid Mesa",""));
cubeCards.add(new CardIdentity("Misty Rainforest",""));
cubeCards.add(new CardIdentity("Maze of Ith",""));
cubeCards.add(new CardIdentity("Teetering Peaks",""));
cubeCards.add(new CardIdentity("Underground Sea",""));
cubeCards.add(new CardIdentity("Bloodstained Mire",""));
cubeCards.add(new CardIdentity("Watery Grave",""));
cubeCards.add(new CardIdentity("Sacred Foundry",""));
cubeCards.add(new CardIdentity("Stomping Ground",""));
cubeCards.add(new CardIdentity("Godless Shrine",""));
cubeCards.add(new CardIdentity("Breeding Pool",""));
cubeCards.add(new CardIdentity("Sulfurous Springs",""));
cubeCards.add(new CardIdentity("Yavimaya Coast",""));
cubeCards.add(new CardIdentity("Karplusan Forest",""));
cubeCards.add(new CardIdentity("Verdant Catacombs",""));
cubeCards.add(new CardIdentity("Wasteland",""));
cubeCards.add(new CardIdentity("Mishra's Factory",""));
cubeCards.add(new CardIdentity("Karakas",""));
cubeCards.add(new CardIdentity("Temple Garden",""));
cubeCards.add(new CardIdentity("Overgrown Tomb",""));
cubeCards.add(new CardIdentity("Volrath's Stronghold",""));
cubeCards.add(new CardIdentity("Gaea's Cradle",""));
cubeCards.add(new CardIdentity("Tolarian Academy",""));
cubeCards.add(new CardIdentity("Flooded Strand",""));
cubeCards.add(new CardIdentity("Polluted Delta",""));
cubeCards.add(new CardIdentity("Windswept Heath",""));
cubeCards.add(new CardIdentity("Academy Ruins",""));
cubeCards.add(new CardIdentity("Battlefield Forge",""));
cubeCards.add(new CardIdentity("Ashiok, Nightmare Weaver",""));
cubeCards.add(new CardIdentity("Boros Charm",""));
cubeCards.add(new CardIdentity("Boros Reckoner",""));
cubeCards.add(new CardIdentity("Burning-Tree Emissary",""));
cubeCards.add(new CardIdentity("Dack Fayden",""));
cubeCards.add(new CardIdentity("Detention Sphere",""));
cubeCards.add(new CardIdentity("Fire // Ice",""));
cubeCards.add(new CardIdentity("Gaddock Teeg",""));
cubeCards.add(new CardIdentity("Garruk, Apex Predator",""));
cubeCards.add(new CardIdentity("Gerrard's Verdict",""));
cubeCards.add(new CardIdentity("Goblin Electromancer",""));
cubeCards.add(new CardIdentity("Kiora, the Crashing Wave",""));
cubeCards.add(new CardIdentity("Kiora's Follower",""));
cubeCards.add(new CardIdentity("Nightveil Specter",""));
cubeCards.add(new CardIdentity("Olivia Voldaren",""));
cubeCards.add(new CardIdentity("Progenitus",""));
cubeCards.add(new CardIdentity("Qasali Pridemage",""));
cubeCards.add(new CardIdentity("Sin Collector",""));
cubeCards.add(new CardIdentity("Supreme Verdict",""));
cubeCards.add(new CardIdentity("Terminate",""));
cubeCards.add(new CardIdentity("Ral Zarek",""));
cubeCards.add(new CardIdentity("Pernicious Deed",""));
cubeCards.add(new CardIdentity("Lightning Helix",""));
cubeCards.add(new CardIdentity("Electrolyze",""));
cubeCards.add(new CardIdentity("Kitchen Finks",""));
cubeCards.add(new CardIdentity("Tidehollow Sculler",""));
cubeCards.add(new CardIdentity("Nicol Bolas, Planeswalker",""));
cubeCards.add(new CardIdentity("Sphinx of the Steel Wind",""));
cubeCards.add(new CardIdentity("Huntmaster of the Fells",""));
cubeCards.add(new CardIdentity("Mirari's Wake",""));
cubeCards.add(new CardIdentity("Venser, the Sojourner",""));
cubeCards.add(new CardIdentity("Shardless Agent",""));
cubeCards.add(new CardIdentity("Abrupt Decay",""));
cubeCards.add(new CardIdentity("Domri Rade",""));
cubeCards.add(new CardIdentity("Trygon Predator",""));
cubeCards.add(new CardIdentity("Figure of Destiny",""));
cubeCards.add(new CardIdentity("Bloodbraid Elf",""));
cubeCards.add(new CardIdentity("Edric, Spymaster of Trest",""));
cubeCards.add(new CardIdentity("Geist of Saint Traft",""));
cubeCards.add(new CardIdentity("Falkenrath Aristocrat",""));
cubeCards.add(new CardIdentity("Rakdos Cackler",""));
cubeCards.add(new CardIdentity("Dreadbore",""));
cubeCards.add(new CardIdentity("Vraska the Unseen",""));
cubeCards.add(new CardIdentity("Shadowmage Infiltrator",""));
cubeCards.add(new CardIdentity("Ajani Vengeant",""));
cubeCards.add(new CardIdentity("Vindicate",""));
cubeCards.add(new CardIdentity("Maelstrom Pulse",""));
cubeCards.add(new CardIdentity("Tezzeret, Agent of Bolas",""));
cubeCards.add(new CardIdentity("Sorin, Lord of Innistrad",""));
cubeCards.add(new CardIdentity("Baleful Strix",""));
cubeCards.add(new CardIdentity("Xenagos, the Reveler",""));
cubeCards.add(new CardIdentity("Sphinx's Revelation",""));
cubeCards.add(new CardIdentity("Voice of Resurgence",""));
cubeCards.add(new CardIdentity("AEther Vial",""));
cubeCards.add(new CardIdentity("Isochron Scepter",""));
cubeCards.add(new CardIdentity("Pithing Needle",""));
cubeCards.add(new CardIdentity("Relic of Progenitus",""));
cubeCards.add(new CardIdentity("Spellskite",""));
cubeCards.add(new CardIdentity("Time Vault",""));
cubeCards.add(new CardIdentity("Voltaic Key",""));
cubeCards.add(new CardIdentity("Null Rod",""));
cubeCards.add(new CardIdentity("Cursed Scroll",""));
cubeCards.add(new CardIdentity("Emrakul, the Aeons Torn",""));
cubeCards.add(new CardIdentity("Kozilek, Butcher of Truth",""));
cubeCards.add(new CardIdentity("Ulamog, the Infinite Gyre",""));
cubeCards.add(new CardIdentity("Shrine of Burning Rage",""));
cubeCards.add(new CardIdentity("Batterskull",""));
cubeCards.add(new CardIdentity("Lion's Eye Diamond",""));
cubeCards.add(new CardIdentity("Grim Monolith",""));
cubeCards.add(new CardIdentity("Memory Jar",""));
cubeCards.add(new CardIdentity("Mox Diamond",""));
cubeCards.add(new CardIdentity("Nevinyrral's Disk",""));
cubeCards.add(new CardIdentity("Orzhov Signet",""));
cubeCards.add(new CardIdentity("Rakdos Signet",""));
cubeCards.add(new CardIdentity("Sol Ring",""));
cubeCards.add(new CardIdentity("Tangle Wire",""));
cubeCards.add(new CardIdentity("Thran Dynamo",""));
cubeCards.add(new CardIdentity("Winter Orb",""));
cubeCards.add(new CardIdentity("Masticore",""));
cubeCards.add(new CardIdentity("Myr Battlesphere",""));
cubeCards.add(new CardIdentity("Molten-Tail Masticore",""));
cubeCards.add(new CardIdentity("Phyrexian Revoker",""));
cubeCards.add(new CardIdentity("Solemn Simulacrum",""));
cubeCards.add(new CardIdentity("Sword of Body and Mind",""));
cubeCards.add(new CardIdentity("Sword of Feast and Famine",""));
cubeCards.add(new CardIdentity("Sword of War and Peace",""));
cubeCards.add(new CardIdentity("Chrome Mox",""));
cubeCards.add(new CardIdentity("Gilded Lotus",""));
cubeCards.add(new CardIdentity("Sword of Light and Shadow",""));
cubeCards.add(new CardIdentity("Pentad Prism",""));
cubeCards.add(new CardIdentity("Coalition Relic",""));
cubeCards.add(new CardIdentity("Wurmcoil Engine",""));
cubeCards.add(new CardIdentity("Azorius Signet",""));
cubeCards.add(new CardIdentity("Simic Signet",""));
cubeCards.add(new CardIdentity("Basalt Monolith",""));
cubeCards.add(new CardIdentity("Mox Sapphire",""));
cubeCards.add(new CardIdentity("Mox Pearl",""));
cubeCards.add(new CardIdentity("Mox Ruby",""));
cubeCards.add(new CardIdentity("Mox Emerald",""));
cubeCards.add(new CardIdentity("Mox Jet",""));
cubeCards.add(new CardIdentity("Black Lotus",""));
cubeCards.add(new CardIdentity("Boros Signet",""));
cubeCards.add(new CardIdentity("Blightsteel Colossus",""));
cubeCards.add(new CardIdentity("Dimir Signet",""));
cubeCards.add(new CardIdentity("Everflowing Chalice",""));
cubeCards.add(new CardIdentity("Gruul Signet",""));
cubeCards.add(new CardIdentity("Izzet Signet",""));
cubeCards.add(new CardIdentity("Golgari Signet",""));
cubeCards.add(new CardIdentity("Lodestone Golem",""));
cubeCards.add(new CardIdentity("Lotus Bloom",""));
cubeCards.add(new CardIdentity("Mana Crypt",""));
cubeCards.add(new CardIdentity("Mana Vault",""));
cubeCards.add(new CardIdentity("Selesnya Signet",""));
cubeCards.add(new CardIdentity("Metalworker",""));
cubeCards.add(new CardIdentity("Scroll Rack",""));
cubeCards.add(new CardIdentity("Worn Powerstone",""));
cubeCards.add(new CardIdentity("Smokestack",""));
cubeCards.add(new CardIdentity("Lightning Greaves",""));
cubeCards.add(new CardIdentity("Sundering Titan",""));
cubeCards.add(new CardIdentity("Sword of Fire and Ice",""));
cubeCards.add(new CardIdentity("Skullclamp",""));
cubeCards.add(new CardIdentity("Vedalken Shackles",""));
cubeCards.add(new CardIdentity("Crucible of Worlds",""));
cubeCards.add(new CardIdentity("Sensei's Divining Top",""));
cubeCards.add(new CardIdentity("Umezawa's Jitte",""));
cubeCards.add(new CardIdentity("Manriki-Gusari",""));
cubeCards.add(new CardIdentity("Karn Liberated",""));
}
}

View file

@ -68,6 +68,7 @@
<draftCube name="Mono Blue Cube" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.MonoBlueCube"/>
<draftCube name="MTGO Cube March 2014" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.MTGOMarchCube2014"/>
<draftCube name="MTGO Holiday Cube 2013" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.HolidayCube2013"/>
<draftCube name="MTGO Holiday Cube 2014" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.HolidayCube2014"/>
<draftCube name="MTGO Legacy Cube (600 cards)" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.MTGOLegacyCube"/>
<draftCube name="The Peasant's Toolbox (800 cards)" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.PeasantsToolboxCube"/>
<draftCube name="www.MTGCube.com (502 cards)" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.MTGCube"/>

View file

@ -46,6 +46,7 @@
<draftCube name="Cube Tutor 720" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.CubeTutor720"/>
<draftCube name="Mono Blue Cube" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.MonoBlueCube"/>
<draftCube name="MTGO Holiday Cube 2013" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.HolidayCube2013"/>
<draftCube name="MTGO Holiday Cube 2014" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.HolidayCube2014"/>
<draftCube name="MTGO Cube March 2014" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.MTGOMarchCube2014"/>
<draftCube name="MTGO Legacy Cube (600 cards)" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.MTGOLegacyCube"/>
<draftCube name="The Peasant's Toolbox (800 cards)" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.PeasantsToolboxCube"/>

View file

@ -1,146 +1,121 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.apocalypse;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.FirstStrikeAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.Cards;
import mage.cards.CardsImpl;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.game.Game;
import mage.players.Player;
import mage.target.TargetCard;
/**
*
* @author fireshoes
*/
public class EnlistmentOfficer extends CardImpl {
public EnlistmentOfficer(UUID ownerId) {
super(ownerId, 9, "Enlistment Officer", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{W}");
this.expansionSetCode = "APC";
this.subtype.add("Human");
this.subtype.add("Soldier");
this.color.setWhite(true);
this.power = new MageInt(2);
this.toughness = new MageInt(3);
// First strike
this.addAbility(FirstStrikeAbility.getInstance());
// When Enlistment Officer enters the battlefield, reveal the top four cards of your library. Put all Soldier cards revealed this way into your hand and the rest on the bottom of your library in any order.
this.addAbility(new EntersBattlefieldTriggeredAbility(new EnlistmentOfficerEffect()));
}
public EnlistmentOfficer(final EnlistmentOfficer card) {
super(card);
}
@Override
public EnlistmentOfficer copy() {
return new EnlistmentOfficer(this);
}
}
class EnlistmentOfficerEffect extends OneShotEffect {
private static final FilterCard filter = new FilterCard("Soldier");
static {
filter.add(new SubtypePredicate("Soldier"));
}
public EnlistmentOfficerEffect() {
super(Outcome.DrawCard);
this.staticText = "reveal the top four cards of your library. Put all Soldier cards revealed this way into your hand and the rest on the bottom of your library in any order";
}
public EnlistmentOfficerEffect(final EnlistmentOfficerEffect effect) {
super(effect);
}
@Override
public EnlistmentOfficerEffect copy() {
return new EnlistmentOfficerEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
if (player != null) {
Cards cardsToReveal = new CardsImpl(Zone.PICK);
Cards cardsSoldier = new CardsImpl(Zone.PICK);
Cards cards2 = new CardsImpl(Zone.PICK);
int count = Math.min(player.getLibrary().size(), 4);
for (int i = 0; i < count; i++) {
Card card = player.getLibrary().removeFromTop(game);
if (card != null) {
cardsToReveal.add(card);
game.setZone(card.getId(), Zone.PICK);
if (filter.match(card, game)) {
cardsSoldier.add(card);
} else {
cards2.add(card);
}
}
}
Card sourceCard = game.getCard(source.getSourceId());
if (!cardsToReveal.isEmpty() && sourceCard != null) {
player.revealCards(sourceCard.getName(), cardsToReveal, game);
}
for (Card card: cardsSoldier.getCards(game)) {
player.moveCardToHandWithInfo(card, source.getSourceId(), game, Zone.LIBRARY);
}
TargetCard target = new TargetCard(Zone.PICK, new FilterCard("card to put on the bottom of your library"));
while (player.isInGame() && cards2.size() > 0 && player.choose(Outcome.Detriment, cards2, target, game)) {
Card card = cards2.get(target.getFirstTarget(), game);
if (card != null) {
cards2.remove(card);
card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, false);
}
target.clearChosen();
}
}
return true;
}
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.apocalypse;
import java.util.UUID;
import mage.MageInt;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.FirstStrikeAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.Cards;
import mage.cards.CardsImpl;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.game.Game;
import mage.players.Player;
/**
*
* @author fireshoes
*/
public class EnlistmentOfficer extends CardImpl {
public EnlistmentOfficer(UUID ownerId) {
super(ownerId, 9, "Enlistment Officer", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{W}");
this.expansionSetCode = "APC";
this.subtype.add("Human");
this.subtype.add("Soldier");
this.color.setWhite(true);
this.power = new MageInt(2);
this.toughness = new MageInt(3);
// First strike
this.addAbility(FirstStrikeAbility.getInstance());
// When Enlistment Officer enters the battlefield, reveal the top four cards of your library. Put all Soldier cards revealed this way into your hand and the rest on the bottom of your library in any order.
this.addAbility(new EntersBattlefieldTriggeredAbility(new EnlistmentOfficerEffect()));
}
public EnlistmentOfficer(final EnlistmentOfficer card) {
super(card);
}
@Override
public EnlistmentOfficer copy() {
return new EnlistmentOfficer(this);
}
}
class EnlistmentOfficerEffect extends OneShotEffect {
private static final FilterCard filter = new FilterCard("Soldier");
static {
filter.add(new SubtypePredicate("Soldier"));
}
public EnlistmentOfficerEffect() {
super(Outcome.DrawCard);
this.staticText = "reveal the top four cards of your library. Put all Soldier cards revealed this way into your hand and the rest on the bottom of your library in any order";
}
public EnlistmentOfficerEffect(final EnlistmentOfficerEffect effect) {
super(effect);
}
@Override
public EnlistmentOfficerEffect copy() {
return new EnlistmentOfficerEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
MageObject sourceObject = game.getObject(source.getSourceId());
if (controller == null || sourceObject == null) {
return false;
}
Cards cards = new CardsImpl();
cards.addAll(controller.getLibrary().getTopCards(game, 4));
controller.revealCards(sourceObject.getLogName(), cards, game);
for (Card card: cards.getCards(game)) {
if (filter.match(card, game)) {
controller.moveCardToHandWithInfo(card, source.getSourceId(), game, Zone.LIBRARY);
cards.remove(card);
}
}
controller.putCardsOnBottomOfLibrary(cards, game, source, true);
return true;
}
}

View file

@ -0,0 +1,119 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.apocalypse;
import java.util.UUID;
import mage.MageInt;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.FirstStrikeAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.Cards;
import mage.cards.CardsImpl;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.game.Game;
import mage.players.Player;
/**
*
* @author fireshoes
*/
public class KavuHowler extends CardImpl {
public KavuHowler(UUID ownerId) {
super(ownerId, 79, "Kavu Howler", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{G}{G}");
this.expansionSetCode = "APC";
this.subtype.add("Kavu");
this.color.setGreen(true);
this.power = new MageInt(4);
this.toughness = new MageInt(5);
// When Kavu Howler enters the battlefield, reveal the top four cards of your library. Put all Kavu cards revealed this way into your hand and the rest on the bottom of your library in any order.
this.addAbility(new EntersBattlefieldTriggeredAbility(new KavuHowlerEffect()));
}
public KavuHowler(final KavuHowler card) {
super(card);
}
@Override
public KavuHowler copy() {
return new KavuHowler(this);
}
}
class KavuHowlerEffect extends OneShotEffect {
private static final FilterCard filter = new FilterCard("Kavu");
static {
filter.add(new SubtypePredicate("Kavu"));
}
public KavuHowlerEffect() {
super(Outcome.DrawCard);
this.staticText = "reveal the top four cards of your library. Put all Kavu cards revealed this way into your hand and the rest on the bottom of your library in any order";
}
public KavuHowlerEffect(final KavuHowlerEffect effect) {
super(effect);
}
@Override
public KavuHowlerEffect copy() {
return new KavuHowlerEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
MageObject sourceObject = game.getObject(source.getSourceId());
if (controller == null || sourceObject == null) {
return false;
}
Cards cards = new CardsImpl();
cards.addAll(controller.getLibrary().getTopCards(game, 4));
controller.revealCards(sourceObject.getLogName(), cards, game);
for (Card card: cards.getCards(game)) {
if (filter.match(card, game)) {
controller.moveCardToHandWithInfo(card, source.getSourceId(), game, Zone.LIBRARY);
cards.remove(card);
}
}
controller.putCardsOnBottomOfLibrary(cards, game, source, true);
return true;
}
}

View file

@ -1,145 +1,121 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.apocalypse;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.Cards;
import mage.cards.CardsImpl;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.game.Game;
import mage.players.Player;
import mage.target.TargetCard;
/**
*
* @author LevelX2
*/
public class SylvanMessenger extends CardImpl {
public SylvanMessenger(UUID ownerId) {
super(ownerId, 87, "Sylvan Messenger", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{G}");
this.expansionSetCode = "APC";
this.subtype.add("Elf");
this.color.setGreen(true);
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// Trample
this.addAbility(TrampleAbility.getInstance());
// When Sylvan Messenger enters the battlefield, reveal the top four cards of your library. Put all Elf cards revealed this way into your hand and the rest on the bottom of your library in any order.
this.addAbility(new EntersBattlefieldTriggeredAbility(new SylvanMessengerEffect()));
}
public SylvanMessenger(final SylvanMessenger card) {
super(card);
}
@Override
public SylvanMessenger copy() {
return new SylvanMessenger(this);
}
}
class SylvanMessengerEffect extends OneShotEffect {
private static final FilterCard filter = new FilterCard("Elf");
static {
filter.add(new SubtypePredicate("Elf"));
}
public SylvanMessengerEffect() {
super(Outcome.DrawCard);
this.staticText = "reveal the top four cards of your library. Put all Elf cards revealed this way into your hand and the rest on the bottom of your library in any order";
}
public SylvanMessengerEffect(final SylvanMessengerEffect effect) {
super(effect);
}
@Override
public SylvanMessengerEffect copy() {
return new SylvanMessengerEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
if (player != null) {
Cards cardsToReveal = new CardsImpl(Zone.PICK);
Cards cardsElf = new CardsImpl(Zone.PICK);
Cards cards2 = new CardsImpl(Zone.PICK);
int count = Math.min(player.getLibrary().size(), 4);
for (int i = 0; i < count; i++) {
Card card = player.getLibrary().removeFromTop(game);
if (card != null) {
cardsToReveal.add(card);
game.setZone(card.getId(), Zone.PICK);
if (filter.match(card, game)) {
cardsElf.add(card);
} else {
cards2.add(card);
}
}
}
Card sourceCard = game.getCard(source.getSourceId());
if (!cardsToReveal.isEmpty() && sourceCard != null) {
player.revealCards(sourceCard.getName(), cardsToReveal, game);
}
for (Card card: cardsElf.getCards(game)) {
player.moveCardToHandWithInfo(card, source.getSourceId(), game, Zone.LIBRARY);
}
TargetCard target = new TargetCard(Zone.PICK, new FilterCard("card to put on the bottom of your library"));
while (player.isInGame() && cards2.size() > 0 && player.choose(Outcome.Detriment, cards2, target, game)) {
Card card = cards2.get(target.getFirstTarget(), game);
if (card != null) {
cards2.remove(card);
card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, false);
}
target.clearChosen();
}
}
return true;
}
}
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.apocalypse;
import java.util.UUID;
import mage.MageInt;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.Cards;
import mage.cards.CardsImpl;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.game.Game;
import mage.players.Player;
/**
*
* @author LevelX2
*/
public class SylvanMessenger extends CardImpl {
public SylvanMessenger(UUID ownerId) {
super(ownerId, 87, "Sylvan Messenger", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{G}");
this.expansionSetCode = "APC";
this.subtype.add("Elf");
this.color.setGreen(true);
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// Trample
this.addAbility(TrampleAbility.getInstance());
// When Sylvan Messenger enters the battlefield, reveal the top four cards of your library. Put all Elf cards revealed this way into your hand and the rest on the bottom of your library in any order.
this.addAbility(new EntersBattlefieldTriggeredAbility(new SylvanMessengerEffect()));
}
public SylvanMessenger(final SylvanMessenger card) {
super(card);
}
@Override
public SylvanMessenger copy() {
return new SylvanMessenger(this);
}
}
class SylvanMessengerEffect extends OneShotEffect {
private static final FilterCard filter = new FilterCard("Elf");
static {
filter.add(new SubtypePredicate("Elf"));
}
public SylvanMessengerEffect() {
super(Outcome.DrawCard);
this.staticText = "reveal the top four cards of your library. Put all Elf cards revealed this way into your hand and the rest on the bottom of your library in any order";
}
public SylvanMessengerEffect(final SylvanMessengerEffect effect) {
super(effect);
}
@Override
public SylvanMessengerEffect copy() {
return new SylvanMessengerEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
MageObject sourceObject = game.getObject(source.getSourceId());
if (controller == null || sourceObject == null) {
return false;
}
Cards cards = new CardsImpl();
cards.addAll(controller.getLibrary().getTopCards(game, 4));
controller.revealCards(sourceObject.getLogName(), cards, game);
for (Card card: cards.getCards(game)) {
if (filter.match(card, game)) {
controller.moveCardToHandWithInfo(card, source.getSourceId(), game, Zone.LIBRARY);
cards.remove(card);
}
}
controller.putCardsOnBottomOfLibrary(cards, game, source, true);
return true;
}
}

View file

@ -1,114 +1,111 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.fifthedition;
import java.util.List;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.game.Game;
import mage.players.Player;
import mage.target.TargetPlayer;
import mage.target.common.TargetCardInLibrary;
/**
*
* @author fireshoes
*/
public class JestersCap extends CardImpl {
public JestersCap(UUID ownerId) {
super(ownerId, 385, "Jester's Cap", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{4}");
this.expansionSetCode = "5ED";
// {2}, {tap}, Sacrifice Jester's Cap: Search target player's library for three cards and exile them. Then that player shuffles his or her library.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new JestersCapEffect(), new ManaCostsImpl("{2}"));
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
}
public JestersCap(final JestersCap card) {
super(card);
}
@Override
public JestersCap copy() {
return new JestersCap(this);
}
}
class JestersCapEffect extends OneShotEffect {
public JestersCapEffect() {
super(Outcome.Benefit);
this.staticText = "Search target player's library for three cards and exile them. Then that player shuffles his or her library";
}
public JestersCapEffect(final JestersCapEffect effect) {
super(effect);
}
@Override
public JestersCapEffect copy() {
return new JestersCapEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player targetPlayer = game.getPlayer(source.getFirstTarget());
Player player = game.getPlayer(source.getControllerId());
if (player != null && targetPlayer != null) {
TargetCardInLibrary target = new TargetCardInLibrary(3, 3, new FilterCard("cards to exile"));
if (player.searchLibrary(target, game, targetPlayer.getId())) {
List<UUID> targets = target.getTargets();
for (UUID targetId : targets) {
Card card = targetPlayer.getLibrary().remove(targetId, game);
if (card != null) {
card.moveToExile(null, "", source.getSourceId(), game);
}
}
}
targetPlayer.shuffleLibrary(game);
return true;
}
return false;
}
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.fifthedition;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.game.Game;
import mage.players.Player;
import mage.target.TargetPlayer;
import mage.target.common.TargetCardInLibrary;
/**
*
* @author fireshoes
*/
public class JestersCap extends CardImpl {
public JestersCap(UUID ownerId) {
super(ownerId, 385, "Jester's Cap", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{4}");
this.expansionSetCode = "5ED";
// {2}, {tap}, Sacrifice Jester's Cap: Search target player's library for three cards and exile them. Then that player shuffles his or her library.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new JestersCapEffect(), new ManaCostsImpl("{2}"));
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
}
public JestersCap(final JestersCap card) {
super(card);
}
@Override
public JestersCap copy() {
return new JestersCap(this);
}
}
class JestersCapEffect extends OneShotEffect {
public JestersCapEffect() {
super(Outcome.Benefit);
this.staticText = "Search target player's library for three cards and exile them. Then that player shuffles his or her library";
}
public JestersCapEffect(final JestersCapEffect effect) {
super(effect);
}
@Override
public JestersCapEffect copy() {
return new JestersCapEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
boolean applied = false;
Player targetPlayer = game.getPlayer(source.getFirstTarget());
Player player = game.getPlayer(source.getControllerId());
if (player != null && targetPlayer != null) {
TargetCardInLibrary target = new TargetCardInLibrary(3, 3, new FilterCard());
player.searchLibrary(target, game, targetPlayer.getId());
for (UUID cardId : target.getTargets()) {
final Card targetCard = game.getCard(cardId);
if (targetCard != null) {
applied |= player.moveCardToExileWithInfo(targetCard, null, null, source.getSourceId(), game, Zone.LIBRARY);
}
}
targetPlayer.shuffleLibrary(game);
}
return applied;
}
}

View file

@ -0,0 +1,149 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.tempest;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.RestrictionEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Rarity;
import mage.constants.WatcherScope;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.game.stack.Spell;
import mage.watchers.Watcher;
/**
*
* @author fireshoes
*/
public class MoggConscripts extends CardImpl {
public MoggConscripts(UUID ownerId) {
super(ownerId, 189, "Mogg Conscripts", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{R}");
this.expansionSetCode = "TMP";
this.subtype.add("Goblin");
this.color.setRed(true);
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// Mogg Conscripts can't attack unless you've cast a creature spell this turn.
this.addWatcher(new PlayerCastCreatureWatcher());
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MoggConscriptsEffect()));
}
public MoggConscripts(final MoggConscripts card) {
super(card);
}
@Override
public MoggConscripts copy() {
return new MoggConscripts(this);
}
}
class MoggConscriptsEffect extends RestrictionEffect {
public MoggConscriptsEffect() {
super(Duration.WhileOnBattlefield);
staticText = "{this} can't attack unless you've cast a creature spell this turn";
}
public MoggConscriptsEffect(final MoggConscriptsEffect effect) {
super(effect);
}
@Override
public MoggConscriptsEffect copy() {
return new MoggConscriptsEffect(this);
}
@Override
public boolean canAttack(Game game) {
return false;
}
@Override
public boolean applies(Permanent permanent, Ability source, Game game) {
if (permanent.getId().equals(source.getSourceId())) {
PlayerCastCreatureWatcher watcher = (PlayerCastCreatureWatcher) game.getState().getWatchers().get("PlayerCastCreature");
if (watcher != null && !watcher.playerDidCastCreatureThisTurn(source.getControllerId())) {
return true;
}
}
return false;
}
}
class PlayerCastCreatureWatcher extends Watcher {
Set<UUID> playerIds = new HashSet<>();
public PlayerCastCreatureWatcher() {
super("PlayerCastCreature", WatcherScope.GAME);
}
public PlayerCastCreatureWatcher(final PlayerCastCreatureWatcher watcher) {
super(watcher);
this.playerIds.addAll(watcher.playerIds);
}
@Override
public void watch(GameEvent event, Game game) {
if (event.getType() == GameEvent.EventType.SPELL_CAST) {
Spell spell = (Spell) game.getObject(event.getTargetId());
if (spell.getCardType().contains(CardType.CREATURE)) {
playerIds.add(spell.getControllerId());
}
}
}
@Override
public PlayerCastCreatureWatcher copy() {
return new PlayerCastCreatureWatcher(this);
}
@Override
public void reset() {
super.reset();
playerIds.clear();
}
public boolean playerDidCastCreatureThisTurn(UUID playerId) {
return playerIds.contains(playerId);
}
}

View file

@ -0,0 +1,157 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.timespiral;
import java.util.UUID;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.common.PutIntoGraveFromBattlefieldSourceTriggeredAbility;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.ReturnToHandSourceEffect;
import mage.abilities.keyword.EnchantAbility;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.TargetPermanent;
import mage.target.common.TargetControlledCreaturePermanent;
/**
*
* @author fireshoes
*/
public class SpiritLoop extends CardImpl {
public SpiritLoop(UUID ownerId) {
super(ownerId, 42, "Spirit Loop", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}");
this.expansionSetCode = "TSP";
this.subtype.add("Aura");
this.color.setWhite(true);
// Enchant creature you control
TargetPermanent auraTarget = new TargetControlledCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
Ability ability = new EnchantAbility(auraTarget.getTargetName());
this.addAbility(ability);
// Whenever enchanted creature deals damage, you gain that much life.
this.addAbility(new SpiritLoopTriggeredAbility());
// When Spirit Loop is put into a graveyard from the battlefield, return Spirit Loop to its owner's hand.
this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new ReturnToHandSourceEffect()));
}
public SpiritLoop(final SpiritLoop card) {
super(card);
}
@Override
public SpiritLoop copy() {
return new SpiritLoop(this);
}
}
class SpiritLoopTriggeredAbility extends TriggeredAbilityImpl {
public SpiritLoopTriggeredAbility() {
super(Zone.BATTLEFIELD, new SpiritLoopEffect(), false);
}
public SpiritLoopTriggeredAbility(final SpiritLoopTriggeredAbility ability) {
super(ability);
}
@Override
public SpiritLoopTriggeredAbility copy() {
return new SpiritLoopTriggeredAbility(this);
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
if (event.getType().equals(GameEvent.EventType.DAMAGED_CREATURE)
|| event.getType().equals(GameEvent.EventType.DAMAGED_PLAYER)
|| event.getType().equals(GameEvent.EventType.DAMAGED_PLANESWALKER)) {
Permanent enchantment = game.getPermanent(this.getSourceId());
if (enchantment == null || enchantment.getAttachedTo() == null) {
return false;
}
Permanent enchanted = game.getPermanent(enchantment.getAttachedTo());
if (enchanted != null && event.getSourceId().equals(enchanted.getId())) {
for (Effect effect : this.getEffects()) {
effect.setValue("damage", event.getAmount());
}
return true;
}
}
return false;
}
@Override
public String getRule() {
return "Whenever enchanted creature deals damage, " + super.getRule();
}
}
class SpiritLoopEffect extends OneShotEffect {
public SpiritLoopEffect() {
super(Outcome.GainLife);
this.staticText = "you gain that much life";
}
public SpiritLoopEffect(final SpiritLoopEffect effect) {
super(effect);
}
@Override
public SpiritLoopEffect copy() {
return new SpiritLoopEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
int amount = (Integer) getValue("damage");
if (amount > 0) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
controller.gainLife(amount, game);
return true;
}
}
return false;
}
}

View file

@ -0,0 +1,110 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.sets.urzasdestiny;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.common.SacrificeEffect;
import mage.players.Player;
import mage.target.targetpointer.FixedTarget;
import mage.constants.Zone;
import mage.game.events.GameEvent;
import mage.filter.FilterPermanent;
import mage.game.Game;
/**
*
* @author fireshoes
*/
public class PhyrexianNegator extends CardImpl {
public PhyrexianNegator(UUID ownerId) {
super(ownerId, 65, "Phyrexian Negator", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{B}");
this.expansionSetCode = "UDS";
this.subtype.add("Horror");
this.color.setBlack(true);
this.power = new MageInt(5);
this.toughness = new MageInt(5);
// Trample
this.addAbility(TrampleAbility.getInstance());
// Whenever Phyrexian Negator is dealt damage, sacrifice that many permanents.
this.addAbility(new PhyrexianNegatorTriggeredAbility());
}
public PhyrexianNegator(final PhyrexianNegator card) {
super(card);
}
@Override
public PhyrexianNegator copy() {
return new PhyrexianNegator(this);
}
}
class PhyrexianNegatorTriggeredAbility extends TriggeredAbilityImpl {
PhyrexianNegatorTriggeredAbility() {
super(Zone.BATTLEFIELD, new SacrificeEffect(new FilterPermanent(), 0,""));
}
PhyrexianNegatorTriggeredAbility(final PhyrexianNegatorTriggeredAbility ability) {
super(ability);
}
@Override
public PhyrexianNegatorTriggeredAbility copy() {
return new PhyrexianNegatorTriggeredAbility(this);
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
if (event.getType() == GameEvent.EventType.DAMAGED_CREATURE && event.getTargetId().equals(this.sourceId)) {
UUID controller = game.getControllerId(event.getTargetId());
if (controller != null) {
Player player = game.getPlayer(controller);
if (player != null) {
getEffects().get(0).setTargetPointer(new FixedTarget(player.getId()));
((SacrificeEffect) getEffects().get(0)).setAmount(new StaticValue(event.getAmount()));
return true;
}
}
}
return false;
}
@Override
public String getRule() {
return "Whenever Phyrexian Negator is dealt damage, sacrifice that many permanents";
}
}

BIN
mage-bundle.zip Normal file

Binary file not shown.